示例#1
0
        /// <summary>
        /// Save the metadata for this area description.
        /// </summary>
        /// <returns>Returns <c>true</c> if the metadata was successfully saved, <c>false</c> otherwise.</returns>
        /// <param name="metadata">Metadata to save.</param>
        public bool SaveMetadata(Metadata metadata)
        {
            IntPtr rawMetadata = _GetMetadataPtr();

            if (rawMetadata == IntPtr.Zero)
            {
                return(false);
            }

            bool anyErrors = false;

            if (!_MetadataSetString(rawMetadata, "name", metadata.m_name))
            {
                anyErrors = true;
            }

            if (!_MetadataSetInt64(rawMetadata, "date_ms_since_epoch",
                                   (metadata.m_dateTime.Ticks - METADATA_EPOCH.Ticks) / DATETIME_TICKS_PER_MS))
            {
                anyErrors = true;
            }

            double[] tform = new double[7];
            tform[0] = metadata.m_transformationPosition[0];
            tform[1] = metadata.m_transformationPosition[1];
            tform[2] = metadata.m_transformationPosition[2];
            tform[3] = metadata.m_transformationRotation[0];
            tform[4] = metadata.m_transformationRotation[1];
            tform[5] = metadata.m_transformationRotation[2];
            tform[6] = metadata.m_transformationRotation[3];
            if (!_MetadataSetDoubleArray(rawMetadata, "transformation", tform))
            {
                anyErrors = true;
            }

            if (!anyErrors)
            {
                int returnValue = AreaDescriptionAPI.TangoService_saveAreaDescriptionMetadata(m_uuid, rawMetadata);
                if (returnValue != Common.ErrorType.TANGO_SUCCESS)
                {
                    Debug.Log("Could not save metadata values.\n" + Environment.StackTrace);
                    anyErrors = true;
                }
            }

            _FreeMetadataPtr(rawMetadata);
            return(!anyErrors);
        }
        /// <summary>
        /// Save the metadata for this area description.
        /// </summary>
        /// <returns>Returns <c>true</c> if the metadata was successfully saved, <c>false</c> otherwise.</returns>
        /// <param name="metadata">Metadata to save.</param>
        public bool SaveMetadata(Metadata metadata)
        {
#if UNITY_EDITOR
            try
            {
                using (StreamWriter streamWriter =
                           new StreamWriter(File.Open(EMULATED_ADF_SAVE_PATH + m_uuid + EMULATED_ADF_EXTENSION,
                                                      FileMode.Create)))
                {
                    metadataXmlSerializer.Serialize(streamWriter, metadata);
                }
            }
            catch (IOException ioException)
            {
                Debug.LogError("IO error in Area Description save/load emulation:\n"
                               + ioException.Message);
                return(false);
            }

            return(true);
#else
            IntPtr rawMetadata = _GetMetadataPtr();
            if (rawMetadata == IntPtr.Zero)
            {
                return(false);
            }

            bool anyErrors = false;
            if (!_MetadataSetString(rawMetadata, "name", metadata.m_name))
            {
                anyErrors = true;
            }

            if (!_MetadataSetInt64(rawMetadata, "date_ms_since_epoch",
                                   (metadata.m_dateTime.Ticks - METADATA_EPOCH.Ticks) / DATETIME_TICKS_PER_MS))
            {
                anyErrors = true;
            }

            double[] tform = new double[7];
            tform[0] = metadata.m_transformationPosition[0];
            tform[1] = metadata.m_transformationPosition[1];
            tform[2] = metadata.m_transformationPosition[2];
            tform[3] = metadata.m_transformationRotation[0];
            tform[4] = metadata.m_transformationRotation[1];
            tform[5] = metadata.m_transformationRotation[2];
            tform[6] = metadata.m_transformationRotation[3];
            if (!_MetadataSetDoubleArray(rawMetadata, "transformation", tform))
            {
                anyErrors = true;
            }

            if (!anyErrors)
            {
                int returnValue = AreaDescriptionAPI.TangoService_saveAreaDescriptionMetadata(m_uuid, rawMetadata);
                if (returnValue != Common.ErrorType.TANGO_SUCCESS)
                {
                    Debug.Log("Could not save metadata values.\n" + Environment.StackTrace);
                    anyErrors = true;
                }
            }

            _FreeMetadataPtr(rawMetadata);
            return(!anyErrors);
#endif
        }