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); } }
public CtmFileWriter(Stream o, MeshEncoder e, int compressionLevel) { output = new CtmOutputStream(compressionLevel, o); encoder = e; }
public Form1() { InitializeComponent(); mesh = new Mesh(); meshEncoder = new MeshEncoder(mesh); }
public CtmFileWriter(Stream o, MeshEncoder e) { output = new CtmOutputStream(o); encoder = e; }
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); } }
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); } }