Пример #1
0
        private void testEncoder(MeshEncoder encoder)
        {
            MemoryStream  memory = new MemoryStream();
            CtmFileWriter writer = new CtmFileWriter(memory, encoder);

            writer.encode(quad, null);

            memory.Seek(0, SeekOrigin.Begin);
            Stream        readMemory = new MemoryStream(memory.ToArray());
            CtmFileReader reader     = new CtmFileReader(readMemory);
            Mesh          m          = reader.decode();

            m.checkIntegrity();

            MG2Encoder mg2 = encoder as MG2Encoder;

            if (mg2 == null)
            {
                Assert.AreEqual(quad, m);
            }
            else
            {
                MG2MeshEqualsTest(mg2, quad, m);
            }
        }
Пример #2
0
 public CtmFileWriter(Stream o, MeshEncoder e, int compressionLevel)
 {
     output = new CtmOutputStream(compressionLevel, o);
     encoder = e;
 }
Пример #3
0
 public Form1()
 {
     InitializeComponent();
     mesh        = new Mesh();
     meshEncoder = new MeshEncoder(mesh);
 }
Пример #4
0
 public CtmFileWriter(Stream o, MeshEncoder e)
 {
     output = new CtmOutputStream(o);
     encoder = e;
 }
Пример #5
0
        private void testEncoder(MeshEncoder encoder)
        {
            MemoryStream memory = new MemoryStream ();
            CtmFileWriter writer = new CtmFileWriter (memory, encoder);
            writer.encode (quad, null);

            memory.Seek (0, SeekOrigin.Begin);
            Stream readMemory = new MemoryStream (memory.ToArray ());
            CtmFileReader reader = new CtmFileReader (readMemory);
            Mesh m = reader.decode ();

            m.checkIntegrity ();

            MG2Encoder mg2 = encoder as MG2Encoder;

            if (mg2 == null)
                Assert.AreEqual (quad, m);
            else {
                MG2MeshEqualsTest (mg2, quad, m);
            }
        }
Пример #6
0
        void ReconstructTopographyByMesh
        (
            DB.Document doc,
            ref DB.Architecture.TopographySurface element,

            Mesh mesh,
            [Optional] IList <Curve> regions
        )
        {
            mesh = MeshEncoder.ToRawMesh(mesh);
            mesh.Vertices.CullUnused();

            var xyz    = mesh.Vertices.ConvertAll(x => new DB.XYZ(x.X, x.Y, x.Z));
            var facets = new List <DB.PolymeshFacet>(mesh.Faces.Count);

            var faceCount = mesh.Faces.Count;

            for (int f = 0; f < faceCount; ++f)
            {
                var face = mesh.Faces[f];

                facets.Add(new DB.PolymeshFacet(face.A, face.B, face.C));
                if (face.IsQuad)
                {
                    facets.Add(new DB.PolymeshFacet(face.C, face.D, face.A));
                }
            }

            //if (element is DB.Architecture.TopographySurface topography)
            //{
            //  using (var editScope = new DB.Architecture.TopographyEditScope(doc, GetType().Name))
            //  {
            //    editScope.Start(element.Id);
            //    topography.DeletePoints(topography.GetPoints());
            //    topography.AddPoints(xyz);

            //    foreach (var subRegionId in topography.GetHostedSubRegionIds())
            //      doc.Delete(subRegionId);

            //    editScope.Commit(this);
            //  }
            //}
            //else
            {
                if (!DB.Architecture.TopographySurface.ArePointsDistinct(xyz))
                {
                    AddRuntimeMessage(GH_RuntimeMessageLevel.Error, $"At least two vertices have coincident XY values");
                }
                else if (!DB.Architecture.TopographySurface.IsValidFaceSet(facets, xyz))
                {
                    AddRuntimeMessage(GH_RuntimeMessageLevel.Error, $"At least one face is not valid for {typeof(DB.Architecture.TopographySurface).Name}");
                }
                else
                {
                    ReplaceElement(ref element, DB.Architecture.TopographySurface.Create(doc, xyz, facets));
                }
            }

            if (element is object && regions?.Count > 0)
            {
                var curveLoops = regions.Select(region => region.ToCurveLoop());
                DB.Architecture.SiteSubRegion.Create(doc, curveLoops.ToList(), element.Id);
            }
        }
Пример #7
0
 public CtmFileWriter(Stream o, MeshEncoder e, int compressionLevel)
 {
     output  = new CtmOutputStream(compressionLevel, o);
     encoder = e;
 }
Пример #8
0
 public CtmFileWriter(Stream o, MeshEncoder e)
 {
     output  = new CtmOutputStream(o);
     encoder = e;
 }