public IXbimMeshGeometry3D GetMeshGeometry3D(XbimMeshFragment frag) { var m3D = new XbimMeshGeometry3D(); var m = Mesh; if (m != null) { for (int i = frag.StartPosition; i <= frag.EndPosition; i++) { Point3D p = m.Positions[i]; Vector3D v = m.Normals[i]; m3D.Positions.Add(new XbimPoint3D(p.X, p.Y, p.Z)); m3D.Normals.Add(new XbimVector3D(v.X, v.Y, v.Z)); } for (int i = frag.StartTriangleIndex; i <= frag.EndTriangleIndex; i++) { m3D.TriangleIndices.Add(m.TriangleIndices[i] - frag.StartPosition); } m3D.Meshes.Add(new XbimMeshFragment(0, 0, 0) { EndPosition = m3D.PositionCount - 1, StartTriangleIndex = frag.StartTriangleIndex - m3D.PositionCount - 1, EndTriangleIndex = frag.EndTriangleIndex - m3D.PositionCount - 1 }); } return(m3D); }
public void Add(string mesh, short productTypeId, int productLabel, int geometryLabel, XbimMatrix3D? transform, short modelId) { XbimMeshFragment frag = new XbimMeshFragment(PositionCount, TriangleIndexCount, productTypeId, productLabel, geometryLabel, modelId); Read(mesh, transform); frag.EndPosition = PositionCount - 1; frag.EndTriangleIndex = TriangleIndexCount - 1; _meshes.Add(frag); }
public void Add(byte[] mesh, short productTypeId, int productLabel, int geometryLabel, XbimMatrix3D? transform = null, short modelId = 0, ITextureMapping textureMappingMethod = null) { var frag = new XbimMeshFragment(PositionCount, TriangleIndexCount, productTypeId, productLabel, geometryLabel, modelId); Read(mesh, transform); if (textureMappingMethod != null) { AddTextureMapping(textureMappingMethod.GetTextureMap(this._unfrozenPositions, this._unfrozenNormals, this._unfrozenTriangleIndices)); } frag.EndPosition = PositionCount - 1; frag.EndTriangleIndex = TriangleIndexCount - 1; _meshes.Add(frag); }
/// <summary> /// Returns the Mesh Position, Normal, Indices data in a XbimMeshGeometry3D for the specified fragment /// </summary> /// <param name="sourceMesh"></param> /// <param name="fragment"></param> /// <returns></returns> public static XbimMeshGeometry3D GetMeshGeometry3D(this MeshGeometry3D sourceMesh, XbimMeshFragment fragment) { XbimMeshGeometry3D mesh = new XbimMeshGeometry3D(fragment.PositionCount); for (int i = fragment.StartPosition; i <= fragment.EndPosition; i++) { mesh.Positions.Add(sourceMesh.Positions[i]); mesh.Normals.Add(sourceMesh.Normals[i]); } for (int i = fragment.StartTriangleIndex; i <= fragment.EndTriangleIndex; i++) { mesh.TriangleIndices.Add(sourceMesh.TriangleIndices[i] - fragment.StartPosition); } return mesh; }
public MeshGeometry3D GetWpfMeshGeometry3D(XbimMeshFragment frag) { var m3D = new MeshGeometry3D(); var m = Mesh; if (m != null) { for (int i = frag.StartPosition; i <= frag.EndPosition; i++) { Point3D p = m.Positions[i]; m3D.Positions.Add(p); if (m.Normals != null) { Vector3D v = m.Normals[i]; m3D.Normals.Add(v); } } for (int i = frag.StartTriangleIndex; i <= frag.EndTriangleIndex; i++) { m3D.TriangleIndices.Add(m.TriangleIndices[i] - frag.StartPosition); } } return m3D; }
public IXbimMeshGeometry3D GetMeshGeometry3D(XbimMeshFragment frag) { XbimMeshGeometry3D m3d = new XbimMeshGeometry3D(); for (int i = frag.StartPosition; i <= frag.EndPosition; i++) { m3d.Positions.Add(this.Positions[i]); m3d.Normals.Add(this.Normals[i]); } for (int i = frag.StartTriangleIndex; i <= frag.EndTriangleIndex; i++) { m3d.TriangleIndices.Add(this.TriangleIndices[i] - frag.StartPosition); } return m3d; }
//adds the content of the toAdd to this, it is added as a single mesh fragment, any meshes in toAdd are lost public void Add(IXbimMeshGeometry3D toAdd, int entityLabel, Type ifcType) { int startPosition = Positions.Count; XbimMeshFragment fragment = new XbimMeshFragment(startPosition, TriangleIndexCount); Positions.AddRange(toAdd.Positions); Normals.AddRange(toAdd.Normals); foreach (var idx in toAdd.TriangleIndices) TriangleIndices.Add(idx+startPosition); fragment.EndPosition = PositionCount - 1; fragment.EndTriangleIndex = TriangleIndexCount - 1; fragment.EntityLabel = entityLabel; fragment.EntityType = ifcType; meshes.Add(fragment); }
public IXbimMeshGeometry3D GetMeshGeometry3D(XbimMeshFragment frag) { var m3D = new XbimMeshGeometry3D(); for (var i = frag.StartPosition; i <= frag.EndPosition; i++) { m3D.Positions.Add(Positions[i]); m3D.Normals.Add(Normals[i]); } for (var i = frag.StartTriangleIndex; i <= frag.EndTriangleIndex; i++) { m3D.TriangleIndices.Add(TriangleIndices[i] - frag.StartPosition); } return m3D; }
public void Add(string mesh, short productTypeId, int productLabel, int geometryLabel, XbimMatrix3D? transform, short modelId) { lock (meshLock) { var frag = new XbimMeshFragment(PositionCount, TriangleIndexCount, productTypeId, productLabel, geometryLabel, modelId); Read(mesh, transform); frag.EndPosition = PositionCount - 1; frag.EndTriangleIndex = TriangleIndexCount - 1; _meshes.Add(frag); } }
//adds the content of the toAdd to this, it is added as a single mesh fragment, any meshes in toAdd are lost public void Add(IXbimMeshGeometry3D toAdd, int entityLabel, Type ifcType, short modelId) { var startPosition = Positions.Count; var fragment = new XbimMeshFragment(startPosition, TriangleIndexCount, modelId); Positions.AddRange(toAdd.Positions); Normals.AddRange(toAdd.Normals); foreach (var idx in toAdd.TriangleIndices) TriangleIndices.Add(idx + startPosition); fragment.EndPosition = PositionCount - 1; fragment.EndTriangleIndex = TriangleIndexCount - 1; fragment.EntityLabel = entityLabel; fragment.EntityTypeId = IfcMetaData.IfcTypeId(ifcType); _meshes.Add(fragment); }
public IXbimMeshGeometry3D GetMeshGeometry3D(XbimMeshFragment frag) { var m3D = new XbimMeshGeometry3D(); var m = Mesh; if (m != null) { for (int i = frag.StartPosition; i <= frag.EndPosition; i++) { Point3D p = m.Positions[i]; Vector3D v = m.Normals[i]; m3D.Positions.Add(new XbimPoint3D(p.X, p.Y, p.Z)); m3D.Normals.Add(new XbimVector3D(v.X, v.Y, v.Z)); } for (int i = frag.StartTriangleIndex; i <= frag.EndTriangleIndex; i++) { m3D.TriangleIndices.Add(m.TriangleIndices[i] - frag.StartPosition); } m3D.Meshes.Add(new XbimMeshFragment(0, 0,0) { EndPosition = m3D.PositionCount - 1, StartTriangleIndex = frag.StartTriangleIndex - m3D.PositionCount - 1, EndTriangleIndex = frag.EndTriangleIndex - m3D.PositionCount - 1 }); } return m3D; }