95 : m_name(
name.isEmpty() ?
"unnamed" :
name),
97 m_filePath(QString(m_baseName) +
".bin"),
100 m_uniqueID(GetNextUniqueID()) {}
103 : m_name(object.m_name),
104 m_baseName(object.m_baseName),
105 m_filePath(object.m_filePath),
107 m_flags(object.m_flags),
108 m_uniqueID(GetNextUniqueID()) {}
128 assert(out.isOpen() && (out.openMode() & QIODevice::WriteOnly));
131 if (dataVersion < 34) {
138 uint64_t classID =
static_cast<uint64_t
>(
getClassID());
139 if (out.write((
const char*)&classID, 8) < 0)
return WriteError();
143 uint32_t uniqueID = (uint32_t)m_uniqueID;
144 if (out.write((
const char*)&uniqueID, 4) < 0)
return WriteError();
148 QDataStream outStream(&out);
153 uint32_t objFlags = (uint32_t)
m_flags;
154 if (out.write((
const char*)&objFlags, 4) < 0)
return WriteError();
161 uint32_t validMetaDataCount = 0;
162 for (QVariantMap::const_iterator it =
m_metaData.begin();
164 if (!it.key().contains(
".nosave")) {
165 ++validMetaDataCount;
170 if (out.write((
const char*)&validMetaDataCount, 4) < 0)
174 QDataStream outStream(&out);
175 for (QVariantMap::const_iterator it =
m_metaData.begin();
177 if (!it.key().contains(
".nosave")) {
178 outStream << it.key();
179 outStream << it.value();
190 assert(in.isOpen() && (in.openMode() & QIODevice::ReadOnly));
195 if (dataVersion < 34) {
196 uint32_t _classID = 0;
197 if (in.read((
char*)&_classID, 4) < 0)
return ReadError();
200 uint64_t _classID = 0;
201 if (in.read((
char*)&_classID, 8) < 0)
return ReadError();
222 for (QVariantMap::const_iterator it = dataset.begin(); it != dataset.end();
224 if (overwrite || !
m_metaData.contains(it.key())) {
238 assert(in.isOpen() && (in.openMode() & QIODevice::ReadOnly));
250 uint32_t uniqueID = 0;
251 if (in.read((
char*)&uniqueID, 4) < 0)
return ReadError();
254 if (oldToNewIDMap.contains(uniqueID)) {
255 CVLog::Warning(QString(
"Malformed file: uniqueID #%1 is used several "
256 "times! (not that unique ;)")
259 oldToNewIDMap.insert(uniqueID, m_uniqueID);
262 if (dataVersion < 22)
269 QDataStream inStream(&in);
274 uint32_t objFlags = 0;
275 if (in.read((
char*)&objFlags, 4) < 0)
return ReadError();
279 if (dataVersion >= 30) {
281 uint32_t metaDataCount = 0;
282 if (in.read((
char*)&metaDataCount, 4) < 0)
return ReadError();
285 for (uint32_t i = 0; i < metaDataCount; ++i) {
286 QDataStream inStream(&in);
292 if (key ==
"LAS.vlrs") {
293 inStream.skipRawData(
297 for (quint64 i = 0; i < vlrSize; ++i) {
298 inStream.skipRawData(
sizeof(uint16_t));
299 inStream.skipRawData(16 *
sizeof(
char));
300 inStream.skipRawData(
sizeof(uint16_t));
301 uint16_t record_length_after_header;
302 inStream >> record_length_after_header;
303 inStream.skipRawData(32 *
sizeof(
char));
304 inStream.skipRawData(record_length_after_header);
307 quint64 extraScalarFieldCount = 0;
308 inStream >> extraScalarFieldCount;
309 inStream.skipRawData(272 * extraScalarFieldCount);
int64_t CV_CLASS_ENUM
Type of object type flags (64 bits)
CV_OBJECT_FLAG
Type of a single scalar field value.
static bool Warning(const char *format,...)
Prints out a formatted warning message in console.
Generic "CLOUDVIEWER Object" template.
short minimumFileVersion() const override
Returns the minimum file version required to save this instance.
static ccUniqueIDGenerator::Shared GetUniqueIDGenerator()
Returns the unique ID generator.
static unsigned GetCurrentDBVersion()
Returns current database version.
unsigned m_flags
Object flags.
void setMetaData(const QString &key, const QVariant &data)
Sets a meta-data element.
static CV_CLASS_ENUM ReadClassIDFromFile(QFile &in, short dataVersion)
Helper: reads out class ID from a binary stream.
QVariant getMetaData(const QString &key) const
Returns a given associated meta data.
virtual void setUniqueID(unsigned ID)
Changes unique ID.
bool hasMetaData(const QString &key) const
Returns whether a meta-data element with the given key exists or not.
virtual void setName(const QString &name)
Sets object name.
virtual CV_CLASS_ENUM getClassID() const =0
Returns class ID.
ccObject(QString name=QString())
Default constructor.
bool removeMetaData(const QString &key)
Removes a given associated meta-data.
QVariantMap m_metaData
Associated meta-data.
static unsigned GetLastUniqueID()
Returns last assigned unique ID.
bool toFile(QFile &out, short dataVersion) const override
Saves data to binary stream.
virtual void setFlagState(CV_OBJECT_FLAG flag, bool state)
Sets flag state.
bool fromFile(QFile &in, short dataVersion, int flags, LoadedIDMap &oldToNewIDMap) override
Reimplemented from ccSerializableObject::fromFile.
static void SetUniqueIDGenerator(ccUniqueIDGenerator::Shared generator)
Sets the unique ID generator.
static unsigned GetNextUniqueID()
Returns a new unassigned unique ID.
QString m_name
Object name.
static bool CorruptError()
Sends a custom error message (corrupted file) and returns 'false'.
QMultiMap< unsigned, unsigned > LoadedIDMap
Map of loaded unique IDs (old ID --> new ID)
static bool ReadError()
Sends a custom error message (read error) and returns 'false'.
static bool WriteError()
Sends a custom error message (write error) and returns 'false'.
QSharedPointer< ccUniqueIDGenerator > Shared
Shared type.
static ccUniqueIDGenerator::Shared s_uniqueIDGenerator(new ccUniqueIDGenerator)
const unsigned c_currentDBVersion