private static void DumpData(StringBuilder sb, byte[] ShapeData) { XbimTriangulatedModelStream m = new XbimTriangulatedModelStream(ShapeData); TextMeshDumper md = new TextMeshDumper(sb); XbimMatrix3D id = XbimMatrix3D.Identity; m.BuildWithNormals(md, id); // sb.Append(m.ToString()); }
/// <summary> /// Appends a geometry data object to the Mesh, returns false if the mesh would become too big and needs splitting /// </summary> /// <param name="geometryMeshData"></param> public bool Add(XbimGeometryData geometryMeshData) { XbimMatrix3D transform = geometryMeshData.Transform; if (geometryMeshData.GeometryType == XbimGeometryType.TriangulatedMesh) { XbimTriangulatedModelStream strm = new XbimTriangulatedModelStream(geometryMeshData.ShapeData); XbimMeshFragment fragment = strm.BuildWithNormals(this, transform); if (fragment.EntityLabel==int.MinValue) //nothing was added due to size being exceeded return false; else //added ok { fragment.EntityLabel = geometryMeshData.IfcProductLabel; fragment.EntityType = IfcMetaData.GetType(geometryMeshData.IfcTypeId); meshes.Add(fragment); } } else if (geometryMeshData.GeometryType == XbimGeometryType.BoundingBox) { XbimRect3D r3d = XbimRect3D.FromArray(geometryMeshData.ShapeData); this.Add(XbimMeshGeometry3D.MakeBoundingBox(r3d, transform), geometryMeshData.IfcProductLabel, IfcMetaData.GetType(geometryMeshData.IfcTypeId)); } else throw new XbimException("Illegal geometry type found"); return true; }
public void FromXbimTriangulatedModelStream(XbimTriangulatedModelStream SourceStream) { SourceStream.BuildPNI(this); }
public PositionsNormalsIndicesBinaryStreamWriter(byte[] ShapeData) { XbimTriangulatedModelStream SourceStream = new XbimTriangulatedModelStream(ShapeData); SourceStream.BuildPNI(this); }
/// <summary> /// Appends a geometry data object to the Mesh, returns false if the mesh would become too big and needs splitting /// </summary> /// <param name="geometryMeshData"></param> public bool Add(XbimGeometryData geometryMeshData, short modelId = 0) { var transform = XbimMatrix3D.FromArray(geometryMeshData.DataArray2); if (geometryMeshData.GeometryType == XbimGeometryType.TriangulatedMesh) { var strm = new XbimTriangulatedModelStream(geometryMeshData.ShapeData); var fragment = strm.BuildWithNormals(this, transform, modelId); if (fragment.EntityLabel == -1) //nothing was added due to size being exceeded return false; fragment.EntityLabel = geometryMeshData.IfcProductLabel; fragment.EntityTypeId = geometryMeshData.IfcTypeId; _meshes.Add(fragment); } else if (geometryMeshData.GeometryType == XbimGeometryType.BoundingBox) { var r3D = XbimRect3D.FromArray(geometryMeshData.ShapeData); Add(MakeBoundingBox(r3D, transform), geometryMeshData.IfcProductLabel, IfcMetaData.GetType(geometryMeshData.IfcTypeId), modelId); } else throw new XbimException("Illegal geometry type found"); return true; }