Esempio n. 1
0
        private void SendSolid(Autodesk.Revit.DB.Solid geomSolid, Autodesk.Revit.DB.Element elem)
        {
            Autodesk.Revit.DB.Material m = null;
             bool sameMaterial=true;
             int triangles=0;
             bool twoSided=false;

             Autodesk.Revit.DB.FaceArray faces = geomSolid.Faces;
             if (faces.Size == 0)
             {
            return;
             }

             Autodesk.Revit.DB.WallType wallType = elem.Document.GetElement(elem.GetTypeId()) as Autodesk.Revit.DB.WallType; // get element type
             if (wallType != null)
             {
             if (wallType.Kind == Autodesk.Revit.DB.WallKind.Curtain)
            {
               //return; // don't display curtain walls, these are probably fassades with bars and Glazing
            }
             }
             Autodesk.Revit.DB.ElementId materialID;
             materialID = faces.get_Item(0).MaterialElementId;
             foreach (Autodesk.Revit.DB.Face face in faces)
             {
            if (m == null)
            {
                materialID = face.MaterialElementId;
                Autodesk.Revit.DB.Material materialElement = elem.Document.GetElement(face.MaterialElementId) as Autodesk.Revit.DB.Material;

                /* Autodesk.Revit.DB.ElementId appearanceID = materialElement.AppearanceAssetId;
                 Autodesk.Revit.DB.AppearanceAssetElement ae = elem.Document.GetElement(appearanceID) as Autodesk.Revit.DB.AppearanceAssetElement;
                 Autodesk.Revit.Utility.Asset asset = ae.GetRenderingAsset();
                 Autodesk.Revit.DB.ParameterSet ps = ae.Parameters;
                 for (int i = 0; i < asset.Size; i++)
                 {
                     Autodesk.Revit.Utility.AssetProperty ap = asset[i];
                     string pn = ap.Name;
                     string val = ap.ToString();

                     System.Collections.Generic.IList<string> props = ap.GetConnectedPropertiesNames();
                     foreach (string p in props)
                     {
                         string pName = p;
                     }
                 }
                 foreach (Autodesk.Revit.DB.Parameter p in ae.Parameters)
                 {
                     string pName = p.AsString();
                     string val = p.AsValueString();
                 }
                System.Collections.Generic.IList<Autodesk.Revit.Utility.AssetProperty> props2 = asset.GetAllConnectedProperties();*/
                m = materialElement;
               twoSided = face.IsTwoSided;
            }
            Autodesk.Revit.DB.Mesh geomMesh = face.Triangulate();
            if (geomMesh != null)
            {
               triangles += geomMesh.NumTriangles;
               if (materialID != face.MaterialElementId)
               {
                  sameMaterial = false;
                  break;
               }
            }
             }
             if (triangles == 0)
            return;
             if (sameMaterial)
             {
            MessageBuffer mb = new MessageBuffer();
            mb.add(elem.Id.IntegerValue);
            mb.add(elem.Name + "_combined");
            mb.add((int)ObjectTypes.Mesh);
            mb.add(twoSided);
            mb.add(triangles);

            int i = 0;

            foreach (Autodesk.Revit.DB.Face face in geomSolid.Faces)
            {
               Autodesk.Revit.DB.Mesh geomMesh = face.Triangulate();
               if (geomMesh != null)
               {
                  for (i = 0; i < geomMesh.NumTriangles; i++)
                  {
                     Autodesk.Revit.DB.MeshTriangle triangle = default(Autodesk.Revit.DB.MeshTriangle);
                     triangle = geomMesh.get_Triangle(i);
                     mb.add((float)triangle.get_Vertex(0).X);
                     mb.add((float)triangle.get_Vertex(0).Y);
                     mb.add((float)triangle.get_Vertex(0).Z);
                     mb.add((float)triangle.get_Vertex(1).X);
                     mb.add((float)triangle.get_Vertex(1).Y);
                     mb.add((float)triangle.get_Vertex(1).Z);
                     mb.add((float)triangle.get_Vertex(2).X);
                     mb.add((float)triangle.get_Vertex(2).Y);
                     mb.add((float)triangle.get_Vertex(2).Z);
                  }
               }
            }

            if (m == null)
            {
               mb.add((byte)220); // color
               mb.add((byte)220);
               mb.add((byte)220);
               mb.add((byte)255);
               mb.add(-1); // material ID
            }
            else
            {
               mb.add(m.Color);
               mb.add((byte)(((100 - (m.Transparency)) / 100.0) * 255));
               mb.add(m.Id.IntegerValue);
            }
            sendMessage(mb.buf, MessageTypes.NewObject);
             }
             else
             {
            int num = 0;
            foreach (Autodesk.Revit.DB.Face face in geomSolid.Faces)
            {
               Autodesk.Revit.DB.Mesh geomMesh = face.Triangulate();
               if (geomMesh != null)
               {
                  MessageBuffer mb = new MessageBuffer();
                  mb.add(elem.Id.IntegerValue);
                  mb.add(elem.Name + "_f_" + num.ToString());
                  mb.add((int)ObjectTypes.Mesh);

                  SendMesh(geomMesh, ref mb, face.IsTwoSided);
                  if (face.MaterialElementId == Autodesk.Revit.DB.ElementId.InvalidElementId)
                  {
                     mb.add((byte)220); // color
                     mb.add((byte)220);
                     mb.add((byte)220);
                     mb.add((byte)255);
                     mb.add(-1); // material ID
                  }
                  else
                  {
                      Autodesk.Revit.DB.Material materialElement = elem.Document.GetElement(face.MaterialElementId) as Autodesk.Revit.DB.Material;

                     mb.add(materialElement.Color);
                     mb.add((byte)(((100 - (materialElement.Transparency)) / 100.0) * 255));
                     mb.add(materialElement.Id.IntegerValue);
                  }
                  sendMessage(mb.buf, MessageTypes.NewObject);
               }
               num++;
            }
             }

             //Autodesk.Revit.DB.Edge Edge = default(Autodesk.Revit.DB.Edge);
             //foreach (var Edge in geomSolid.Edges)
             //{
             //   DrawEdge(Edge);
             //}
        }
        private bool isCalculationOn(Document doc, Autodesk.Revit.DB.MEPSystem mepSys)
        {
            if (mepSys == null)
            return false;
             MEPSystemType sysType = doc.GetElement(mepSys.GetTypeId()) as MEPSystemType;
             if (sysType == null)
            return false;

             return sysType.CalculationLevel == Autodesk.Revit.DB.Mechanical.SystemCalculationLevel.All;
        }