Exemplo n.º 1
0
        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);
        }
Exemplo n.º 2
0
 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);
 }
Exemplo n.º 3
0
 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;
 }
Exemplo n.º 5
0
 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;
 }
Exemplo n.º 6
0
 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;
 }
Exemplo n.º 7
0
 //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);
 }
Exemplo n.º 8
0
 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;
 }
Exemplo n.º 9
0
 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);
     }
 }
Exemplo n.º 10
0
 //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);
 }
Exemplo n.º 11
0
 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;
 }
Exemplo n.º 12
0
 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;
 }