Пример #1
0
 public static void Emit(this SceneSerializer s, IOutputStream o, PivotSO so)
 {
     o.AddAttribute(IOStrings.ASOType, IOStrings.TypePivot);
     o.AddAttribute(IOStrings.ASOName, so.Name);
     s.EmitTransform(o, so);
     s.EmitMaterial(o, so.GetAssignedSOMaterial());
 }
 public static void EmitPivotSO(SceneSerializer s, IOutputStream o, PivotSO so)
 {
     o.AddAttribute(IOStrings.ASOName, so.Name);
     o.AddAttribute(IOStrings.ASOUuid, so.UUID);
     s.EmitTransform(o, so);
     s.EmitMaterial(o, so.GetAssignedSOMaterial());
 }
 public static void EmitGenericSO(this SceneSerializer s, IOutputStream o, SceneObject so)
 {
     o.AddAttribute(IOStrings.ASOType, IOStrings.TypeUnknown);
     o.AddAttribute(IOStrings.ASOName, so.Name);
     o.AddAttribute(IOStrings.ASOUuid, so.UUID);
     s.EmitTransform(o, so);
 }
 /// <summary>
 /// Emit frame as a struct
 /// </summary>
 public static void EmitFrame(this SceneSerializer s, IOutputStream o, string structName, ref Frame3f frame)
 {
     o.BeginStruct(structName);
     o.AddAttribute(IOStrings.APosition, frame.Origin);
     o.AddAttribute(IOStrings.AOrientation, frame.Rotation);
     o.EndStruct();
 }
 public static void EmitPolyCurveSO(SceneSerializer s, IOutputStream o, PolyCurveSO so)
 {
     o.AddAttribute(IOStrings.ASOName, so.Name);
     o.AddAttribute(IOStrings.ASOUuid, so.UUID);
     s.EmitTransform(o, so);
     s.EmitMaterial(o, so.GetAssignedSOMaterial());
     o.AddAttribute(IOStrings.APolyCurve3, so.Curve.Vertices);
     o.AddAttribute(IOStrings.APolyCurveClosed, so.Curve.Closed);
 }
        public static void EmitMeshSO(SceneSerializer s, IOutputStream o, MeshSO so)
        {
            o.AddAttribute(IOStrings.ASOName, so.Name);
            o.AddAttribute(IOStrings.ASOUuid, so.UUID);
            s.EmitTransform(o, so);
            SimpleMesh m = so.GetSimpleMesh(true);

            s.EmitMeshBinary(m, o);
        }
        /// <summary>
        /// Emit a SceneObject transform as a TransformStruct (position, orientation, scale)
        /// </summary>
        public static void EmitTransform(this SceneSerializer s, IOutputStream o, SceneObject so)
        {
            o.BeginStruct(IOStrings.TransformStruct);
            Frame3f f = so.GetLocalFrame(CoordSpace.ObjectCoords);

            o.AddAttribute(IOStrings.APosition, f.Origin);
            o.AddAttribute(IOStrings.AOrientation, f.Rotation);
            o.AddAttribute(IOStrings.AScale, so.RootGameObject.GetLocalScale());
            o.EndStruct();
        }
 public static void EmitBoxSO(SceneSerializer s, IOutputStream o, BoxSO so)
 {
     o.AddAttribute(IOStrings.ASOName, so.Name);
     o.AddAttribute(IOStrings.ASOUuid, so.UUID);
     s.EmitTransform(o, so);
     o.AddAttribute(IOStrings.AWidth, so.Width);
     o.AddAttribute(IOStrings.AHeight, so.Height);
     o.AddAttribute(IOStrings.ADepth, so.Depth);
     s.EmitMaterial(o, so.GetAssignedSOMaterial());
 }
Пример #9
0
 public static void Emit(this SceneSerializer s, IOutputStream o, PolyTubeSO so)
 {
     o.AddAttribute(IOStrings.ASOType, IOStrings.TypePolyTube);
     o.AddAttribute(IOStrings.ASOName, so.Name);
     s.EmitTransform(o, so);
     s.EmitMaterial(o, so.GetAssignedSOMaterial());
     o.AddAttribute(IOStrings.APolyCurve3, so.Curve.Vertices);
     o.AddAttribute(IOStrings.APolyCurveClosed, so.Curve.Closed);
     o.AddAttribute(IOStrings.APolygon2, so.Polygon.Vertices);
 }
Пример #10
0
        public static bool Emit(SceneSerializer s, IOutputStream o, SceneObject gso)
        {
            PrintMeshSO so = gso as PrintMeshSO;

            o.AddAttribute(IOStrings.ASOType, so.Type.identifier);
            o.AddAttribute(AttrSourceFilePath, so.SourceFilePath);

            EmitPrintMeshSettings(s, o, so.Settings);

            SceneSerializerEmitTypesExt.EmitDMeshSO(s, o, so as DMeshSO);
            return(true);
        }
 /// <summary>
 /// Emit a DMesh3 as a BinaryDMeshStruct
 /// </summary>
 public static void EmitDMeshBinary(this SceneSerializer s, DMesh3 m, IOutputStream o)
 {
     // binary version - uuencoded byte buffers
     //    - storing doubles uses roughly same mem as string, but string is only 8 digits precision
     //    - storing floats saves roughly 50%
     //    - storing triangles is worse until vertex count > 9999
     //          - could store as byte or short in those cases...
     //    - edges and edge ref counts are stored, then use mesh.RebuildFromEdgeRefcounts() to rebuild 3D mesh (same as gSerialization)
     o.BeginStruct(IOStrings.BinaryDMeshStruct);
     o.AddAttribute(IOStrings.AMeshVertices3Binary, m.VerticesBuffer.GetBytes());
     if (m.HasVertexNormals)
     {
         o.AddAttribute(IOStrings.AMeshNormals3Binary, m.NormalsBuffer.GetBytes());
     }
     if (m.HasVertexColors)
     {
         o.AddAttribute(IOStrings.AMeshColors3Binary, m.ColorsBuffer.GetBytes());
     }
     if (m.HasVertexUVs)
     {
         o.AddAttribute(IOStrings.AMeshUVs2Binary, m.UVBuffer.GetBytes());
     }
     o.AddAttribute(IOStrings.AMeshTrianglesBinary, m.TrianglesBuffer.GetBytes());
     if (m.HasTriangleGroups)
     {
         o.AddAttribute(IOStrings.AMeshTriangleGroupsBinary, m.GroupsBuffer.GetBytes());
     }
     o.AddAttribute(IOStrings.AMeshEdgesBinary, m.EdgesBuffer.GetBytes());
     o.AddAttribute(IOStrings.AMeshEdgeRefCountsBinary, m.EdgesRefCounts.RawRefCounts.GetBytes());
     o.EndStruct();
 }
Пример #12
0
        public static bool EmitScanSO(SceneSerializer s, IOutputStream o, SceneObject gso)
        {
            ScanSO so = gso as ScanSO;

            o.AddAttribute(IOStrings.ASOType, so.Type.identifier);
            SceneSerializerEmitTypesExt.EmitDMeshSO(s, o, so as DMeshSO);
            return(true);
        }
        public static void EmitMeshReferenceSO(SceneSerializer s, IOutputStream o, MeshReferenceSO so)
        {
            o.AddAttribute(IOStrings.ASOName, so.Name);
            o.AddAttribute(IOStrings.ASOUuid, so.UUID);
            s.EmitTransform(o, so);
            // [TODO] be smarter about paths
            o.AddAttribute(IOStrings.AReferencePath, so.MeshReferencePath);

            StringBuilder rel_path = new StringBuilder(260); // MAX_PATH

            if (PathRelativePathTo(rel_path,
                                   Path.GetDirectoryName(s.TargetFilePath), FILE_ATTRIBUTE_DIRECTORY,
                                   so.MeshReferencePath, FILE_ATTRIBUTE_NORMAL) == 1)
            {
                o.AddAttribute(IOStrings.ARelReferencePath, rel_path.ToString());
            }
        }
        public static void EmitDMeshSO(SceneSerializer s, IOutputStream o, DMeshSO so)
        {
            SceneSerializer.EmitOptions opt = s.CurrentOptions;

            o.AddAttribute(IOStrings.ASOName, so.Name);
            o.AddAttribute(IOStrings.ASOUuid, so.UUID);
            s.EmitTransform(o, so);
            s.EmitMaterial(o, so.GetAssignedSOMaterial());
            //s.EmitDMeshBinary(so.Mesh, o);
            if (opt.MinimalMeshStorage)
            {
                s.EmitDMeshCompressed_Minimal(so.Mesh, o);
            }
            else
            {
                s.EmitDMeshCompressed(so.Mesh, o);
            }
        }
 /// <summary>
 /// Emit a SimpleMesh as an AsciiMeshStruct
 /// </summary>
 public static void EmitMeshAscii(this SceneSerializer s, SimpleMesh m, IOutputStream o)
 {
     o.BeginStruct(IOStrings.AsciiMeshStruct);
     o.AddAttribute(IOStrings.AMeshVertices3, m.VerticesItr());
     if (m.HasVertexNormals)
     {
         o.AddAttribute(IOStrings.AMeshNormals3, m.NormalsItr());
     }
     if (m.HasVertexColors)
     {
         o.AddAttribute(IOStrings.AMeshColors3, m.ColorsItr());
     }
     if (m.HasVertexUVs)
     {
         o.AddAttribute(IOStrings.AMeshUVs2, m.UVsItr());
     }
     o.AddAttribute(IOStrings.AMeshTriangles, m.TrianglesItr());
     o.EndStruct();
 }
        /// <summary>
        /// Emit a keyframe sequence as a KeyframeListStruct
        /// </summary>
        public static void EmitKeyframes(this SceneSerializer s, KeyframeSequence seq, IOutputStream o)
        {
            o.BeginStruct(IOStrings.KeyframeListStruct);
            o.AddAttribute(IOStrings.ATimeRange, (Vector2f)seq.ValidRange);

            int i = 0;

            foreach (Keyframe k  in seq)
            {
                o.BeginStruct(IOStrings.KeyframeStruct, i.ToString());
                i++;
                o.AddAttribute(IOStrings.ATime, (float)k.Time, true);
                o.AddAttribute(IOStrings.APosition, k.Frame.Origin, true);
                o.AddAttribute(IOStrings.AOrientation, k.Frame.Rotation, true);
                o.EndStruct();
            }

            o.EndStruct();
        }
        /// <summary>
        /// Emit a DMesh3 as a CompressedDMeshStruct
        /// </summary>
        public static void EmitDMeshCompressed_Minimal(this SceneSerializer s, DMesh3 m, IOutputStream o)
        {
            SceneSerializer.EmitOptions opt = s.CurrentOptions;

            // compressed version - uuencoded byte buffers
            //    - storing doubles uses roughly same mem as string, but string is only 8 digits precision
            //    - storing floats saves roughly 50%
            //    - storing triangles is worse until vertex count > 9999
            //          - could store as byte or short in those cases...
            //    - edges and edge ref counts are stored, then use mesh.RebuildFromEdgeRefcounts() to rebuild 3D mesh (same as gSerialization)
            o.BeginStruct(IOStrings.CompressedDMeshStruct);

            o.AddAttribute(IOStrings.AMeshStorageMode, (int)IOStrings.MeshStorageMode.Minimal);

            // need compact mesh to do this
            if (m.IsCompactV == false)
            {
                m = new DMesh3(m, true);
            }

            o.AddAttribute(IOStrings.AMeshVertices3Compressed, BufferUtil.CompressZLib(m.VerticesBuffer.GetBytes(), opt.FastCompression));

            if (opt.StoreMeshVertexNormals && m.HasVertexNormals)
            {
                o.AddAttribute(IOStrings.AMeshNormals3Compressed, BufferUtil.CompressZLib(m.NormalsBuffer.GetBytes(), opt.FastCompression));
            }
            if (opt.StoreMeshVertexColors && m.HasVertexColors)
            {
                o.AddAttribute(IOStrings.AMeshColors3Compressed, BufferUtil.CompressZLib(m.ColorsBuffer.GetBytes(), opt.FastCompression));
            }
            if (opt.StoreMeshVertexUVs && m.HasVertexUVs)
            {
                o.AddAttribute(IOStrings.AMeshUVs2Compressed, BufferUtil.CompressZLib(m.UVBuffer.GetBytes(), opt.FastCompression));
            }

            int[] triangles = new int[3 * m.TriangleCount];
            int   k         = 0;

            foreach (int tid in m.TriangleIndices())
            {
                Index3i t = m.GetTriangle(tid);
                triangles[k++] = t.a; triangles[k++] = t.b; triangles[k++] = t.c;
            }
            o.AddAttribute(IOStrings.AMeshTrianglesCompressed, BufferUtil.CompressZLib(BufferUtil.ToBytes(triangles), opt.FastCompression));

            if (opt.StoreMeshFaceGroups && m.HasTriangleGroups)
            {
                int[] groups = new int[m.TriangleCount];
                k = 0;
                foreach (int tid in m.TriangleIndices())
                {
                    groups[k++] = m.GetTriangleGroup(tid);
                }
                o.AddAttribute(IOStrings.AMeshTriangleGroupsCompressed, BufferUtil.CompressZLib(BufferUtil.ToBytes(groups), opt.FastCompression));
            }

            o.EndStruct();
        }
Пример #18
0
        public static bool EmitPlaneIntersectionCurveSO(SceneSerializer s, IOutputStream o, SceneObject gso)
        {
            PlaneIntersectionCurveSO so = gso as PlaneIntersectionCurveSO;

            if (so == null)
            {
                throw new Exception("EmitPlaneIntersectionCurveSO: input so is not an PlaneIntersectionCurveSO!");
            }
            o.AddAttribute(IOStrings.ASOType, so.Type.identifier);
            SceneSerializerEmitTypesExt.EmitPolyCurveSO(s, o, so as PolyCurveSO);
            return(true);
        }
Пример #19
0
        public static bool EmitLengthenPivotSO(SceneSerializer s, IOutputStream o, SceneObject gso)
        {
            LengthenPivotSO so = gso as LengthenPivotSO;

            if (so == null)
            {
                throw new Exception("EmitLengthenPivotSO: input so is not an LengthenPivotSO!");
            }
            o.AddAttribute(IOStrings.ASOType, so.Type.identifier);
            s.EmitFrame(o, PivotOriginalLegPoint, new Frame3f(so.InitialLegPtL));
            SceneSerializerEmitTypesExt.EmitPivotSO(s, o, so as PivotSO);
            return(true);
        }
 /// <summary>
 /// Emit a SimpleMesh as a BinaryMeshStruct
 /// </summary>
 public static void EmitMeshBinary(this SceneSerializer s, SimpleMesh m, IOutputStream o)
 {
     // binary version - uuencoded byte buffers
     //    - storing doubles uses roughly same mem as string, but string is only 8 digits precision
     //    - storing floats saves roughly 50%
     //    - storing triangles is worse until vertex count > 9999
     //          - could store as byte or short in those cases...
     o.BeginStruct(IOStrings.BinaryMeshStruct);
     o.AddAttribute(IOStrings.AMeshVertices3Binary, m.Vertices.GetBytes());
     if (m.HasVertexNormals)
     {
         o.AddAttribute(IOStrings.AMeshNormals3Binary, m.Normals.GetBytes());
     }
     if (m.HasVertexColors)
     {
         o.AddAttribute(IOStrings.AMeshColors3Binary, m.Colors.GetBytes());
     }
     if (m.HasVertexUVs)
     {
         o.AddAttribute(IOStrings.AMeshUVs2Binary, m.UVs.GetBytes());
     }
     o.AddAttribute(IOStrings.AMeshTrianglesBinary, m.Triangles.GetBytes());
     o.EndStruct();
 }
        /// <summary>
        /// Emit a DMesh3 as a CompressedDMeshStruct
        /// </summary>
        public static void EmitDMeshCompressed(this SceneSerializer s, DMesh3 m, IOutputStream o)
        {
            SceneSerializer.EmitOptions opt = s.CurrentOptions;

            // compressed version - uuencoded byte buffers
            //    - storing doubles uses roughly same mem as string, but string is only 8 digits precision
            //    - storing floats saves roughly 50%
            //    - storing triangles is worse until vertex count > 9999
            //          - could store as byte or short in those cases...
            //    - edges and edge ref counts are stored, then use mesh.RebuildFromEdgeRefcounts() to rebuild 3D mesh (same as gSerialization)
            o.BeginStruct(IOStrings.CompressedDMeshStruct);

            o.AddAttribute(IOStrings.AMeshStorageMode, (int)IOStrings.MeshStorageMode.EdgeRefCounts);

            o.AddAttribute(IOStrings.AMeshVertices3Compressed, BufferUtil.CompressZLib(m.VerticesBuffer.GetBytes(), opt.FastCompression));

            if (opt.StoreMeshVertexNormals && m.HasVertexNormals)
            {
                o.AddAttribute(IOStrings.AMeshNormals3Compressed, BufferUtil.CompressZLib(m.NormalsBuffer.GetBytes(), opt.FastCompression));
            }
            if (opt.StoreMeshVertexColors && m.HasVertexColors)
            {
                o.AddAttribute(IOStrings.AMeshColors3Compressed, BufferUtil.CompressZLib(m.ColorsBuffer.GetBytes(), opt.FastCompression));
            }
            if (opt.StoreMeshVertexUVs && m.HasVertexUVs)
            {
                o.AddAttribute(IOStrings.AMeshUVs2Compressed, BufferUtil.CompressZLib(m.UVBuffer.GetBytes(), opt.FastCompression));
            }

            o.AddAttribute(IOStrings.AMeshTrianglesCompressed, BufferUtil.CompressZLib(m.TrianglesBuffer.GetBytes(), opt.FastCompression));
            if (opt.StoreMeshFaceGroups && m.HasTriangleGroups)
            {
                o.AddAttribute(IOStrings.AMeshTriangleGroupsCompressed, BufferUtil.CompressZLib(m.GroupsBuffer.GetBytes(), opt.FastCompression));
            }

            o.AddAttribute(IOStrings.AMeshEdgesCompressed, BufferUtil.CompressZLib(m.EdgesBuffer.GetBytes(), opt.FastCompression));
            o.AddAttribute(IOStrings.AMeshEdgeRefCountsCompressed, BufferUtil.CompressZLib(m.EdgesRefCounts.RawRefCounts.GetBytes(), opt.FastCompression));
            o.EndStruct();
        }
Пример #22
0
        public static void EmitPrintMeshSettings(this SceneSerializer s, IOutputStream o, PrintMeshSettings settings)
        {
            o.BeginStruct(PrintSettingsStruct);
            o.AddAttribute(AttrPrintSettingsVersion, settings.Version);

            o.AddAttribute(AttrPrintSettingsObjectType, (int)settings.ObjectType);
            o.AddAttribute(AttrPrintSettingsOpenMode, (int)settings.OpenMeshMode);

            o.AddAttribute(AttrPrintSettingsNoVoids, settings.NoVoids);
            o.AddAttribute(AttrPrintSettingsShellOnly, settings.OuterShellOnly);

            o.AddAttribute(AttrPrintSettingsClearanceXY, (float)settings.Clearance);
            o.AddAttribute(AttrPrintSettingsOffsetXY, (float)settings.OffsetXY);

            o.EndStruct();
        }
        public static void EmitCylinderSO(SceneSerializer s, IOutputStream o, CylinderSO so)
        {
            o.AddAttribute(IOStrings.ASOName, so.Name);
            o.AddAttribute(IOStrings.ASOUuid, so.UUID);
            s.EmitTransform(o, so);
            o.AddAttribute(IOStrings.ARadius, so.Radius);
            o.AddAttribute(IOStrings.AHeight, so.Height);
            Frame3f f = so.GetLocalFrame(CoordSpace.ObjectCoords);

            o.AddAttribute(IOStrings.AStartPoint, (f.Origin - 0.5f * so.ScaledHeight * f.Y));
            o.AddAttribute(IOStrings.AEndPoint, (f.Origin + 0.5f * so.ScaledHeight * f.Y));
            s.EmitMaterial(o, so.GetAssignedSOMaterial());
        }
 /// <summary>
 /// Emit an SOMaterial as a MaterialStruct
 /// </summary>
 public static void EmitMaterial(this SceneSerializer s, IOutputStream o, SOMaterial mat)
 {
     o.BeginStruct(IOStrings.MaterialStruct);
     if (mat.Type == SOMaterial.MaterialType.StandardRGBColor)
     {
         o.AddAttribute(IOStrings.AMaterialType, IOStrings.AMaterialType_Standard);
         o.AddAttribute(IOStrings.AMaterialName, mat.Name);
         o.AddAttribute(IOStrings.AMaterialRGBColor, mat.RGBColor);
     }
     else if (mat.Type == SOMaterial.MaterialType.TransparentRGBColor)
     {
         o.AddAttribute(IOStrings.AMaterialType, IOStrings.AMaterialType_Transparent);
         o.AddAttribute(IOStrings.AMaterialName, mat.Name);
         o.AddAttribute(IOStrings.AMaterialRGBColor, mat.RGBColor);
     }
     o.EndStruct();
 }
 public static void Emit(this SceneSerializer s, IOutputStream o, DMeshSO so)
 {
     o.AddAttribute(IOStrings.ASOType, IOStrings.TypeDMesh);
     EmitDMeshSO(s, o, so);
 }
 public static void Emit(this SceneSerializer s, IOutputStream o, MeshReferenceSO so)
 {
     o.AddAttribute(IOStrings.ASOType, IOStrings.TypeMeshReference);
     EmitMeshReferenceSO(s, o, so);
 }
 public static void Emit(this SceneSerializer s, IOutputStream o, PolyCurveSO so)
 {
     o.AddAttribute(IOStrings.ASOType, IOStrings.TypePolyCurve);
     EmitPolyCurveSO(s, o, so);
 }
 public static void Emit(this SceneSerializer s, IOutputStream o, CylinderSO so)
 {
     o.AddAttribute(IOStrings.ASOType, IOStrings.TypeCylinder);
     EmitCylinderSO(s, o, so);
 }
Пример #29
0
 // fallback for completely unknown types
 public void EmitUnknown(IOutputStream o, SceneObject so)
 {
     o.AddAttribute(IOStrings.ASOType, IOStrings.TypeUnknown);
     o.AddAttribute(IOStrings.ASOName, so.Name);
 }
 public static void Emit(this SceneSerializer s, IOutputStream o, SphereSO so)
 {
     o.AddAttribute(IOStrings.ASOType, IOStrings.TypeSphere);
     EmitSphereSO(s, o, so);
 }