public List <Autodesk.DesignScript.Geometry.Mesh> GetMeshes(MirrorData mirrorData) { List <Autodesk.DesignScript.Geometry.Mesh> meshes = new List <Autodesk.DesignScript.Geometry.Mesh>(); if (mirrorData.IsCollection) { IEnumerable <MirrorData> dataList = mirrorData.GetElements(); foreach (MirrorData md in dataList) { if (md.IsCollection) { meshes.AddRange(GetMeshes(md)); } else { Autodesk.DesignScript.Geometry.Mesh m = md.Data as Autodesk.DesignScript.Geometry.Mesh; if (m != null) { meshes.Add(m); } } } } else { Autodesk.DesignScript.Geometry.Mesh m = mirrorData.Data as Autodesk.DesignScript.Geometry.Mesh; if (m != null) { meshes.Add(m); } } return(meshes); }
private static List <Autodesk.DesignScript.Geometry.Mesh> ObjToMesh(object meshData) { List <Autodesk.DesignScript.Geometry.Mesh> meshes = new List <Autodesk.DesignScript.Geometry.Mesh>(); if (meshData is IList) { var data = (meshData as IList)[0]; if (data.GetType() == typeof(Autodesk.DesignScript.Geometry.Mesh)) { foreach (var m in (meshData as IList)) { meshes.Add(m as Autodesk.DesignScript.Geometry.Mesh); } } else { List <object> currentList = (List <object>)meshData; foreach (object obj in currentList) { try { meshes.AddRange(ObjToMesh(obj)); } catch (Exception ex) { System.Windows.Forms.MessageBox.Show("Error:\n\n" + ex.Message); } } } } else { // Get the Mesh Autodesk.DesignScript.Geometry.Mesh mesh = meshData as Autodesk.DesignScript.Geometry.Mesh; if (mesh != null) { meshes.Add(mesh); } else { meshes.Add(null); } } return(meshes); }
public static Autodesk.DesignScript.Geometry.Mesh ToDSGeo(this SketchUpNET.Mesh mesh, Transform t = null) { List <Autodesk.DesignScript.Geometry.Point> points = new List <Autodesk.DesignScript.Geometry.Point>(); foreach (var v in mesh.Vertices) { points.Add(v.ToDSGeo(t)); } List <Autodesk.DesignScript.Geometry.IndexGroup> faces = new List <Autodesk.DesignScript.Geometry.IndexGroup>(); foreach (var v in mesh.Faces) { faces.Add(Autodesk.DesignScript.Geometry.IndexGroup.ByIndices(Convert.ToUInt32(v.A), Convert.ToUInt32(v.B), Convert.ToUInt32(v.C))); } Autodesk.DesignScript.Geometry.Mesh m = Autodesk.DesignScript.Geometry.Mesh.ByPointsFaceIndices(points, faces); return(m); }
private static Autodesk.DesignScript.Geometry.Mesh SolidToMesh(Autodesk.Revit.DB.Solid solid) { Autodesk.DesignScript.Geometry.Mesh mesh = null; List <Autodesk.DesignScript.Geometry.Mesh> unjoinedMeshes = new List <Autodesk.DesignScript.Geometry.Mesh>(); foreach (Autodesk.Revit.DB.Face f in solid.Faces) { Autodesk.Revit.DB.Mesh rMesh = f.Triangulate(); Autodesk.DesignScript.Geometry.Mesh dMesh = RevitToProtoMesh.ToProtoType(rMesh, true); unjoinedMeshes.Add(dMesh); } // Join meshes if (unjoinedMeshes.Count == 0) { mesh = unjoinedMeshes[0]; } else { // Join all of the meshes? List <Autodesk.DesignScript.Geometry.Point> vertices = new List <Autodesk.DesignScript.Geometry.Point>(); List <Autodesk.DesignScript.Geometry.IndexGroup> indexGroups = new List <Autodesk.DesignScript.Geometry.IndexGroup>(); foreach (Autodesk.DesignScript.Geometry.Mesh m in unjoinedMeshes) { if (m == null) { continue; } int baseCount = vertices.Count; foreach (Autodesk.DesignScript.Geometry.Point pt in m.VertexPositions) { vertices.Add(pt); } foreach (Autodesk.DesignScript.Geometry.IndexGroup ig in m.FaceIndices) { if (ig.Count == 3) { Autodesk.DesignScript.Geometry.IndexGroup iGroup = Autodesk.DesignScript.Geometry.IndexGroup.ByIndices((uint)(ig.A + baseCount), (uint)(ig.B + baseCount), (uint)(ig.C + baseCount)); indexGroups.Add(iGroup); } else { Autodesk.DesignScript.Geometry.IndexGroup iGroup = Autodesk.DesignScript.Geometry.IndexGroup.ByIndices((uint)(ig.A + baseCount), (uint)(ig.B + baseCount), (uint)(ig.C + baseCount), (uint)(ig.D + baseCount)); indexGroups.Add(iGroup); } } } try { Autodesk.DesignScript.Geometry.Mesh joinedMesh = Autodesk.DesignScript.Geometry.Mesh.ByPointsFaceIndices(vertices, indexGroups); if (joinedMesh != null) { mesh = joinedMesh; simpleMeshes.Add(joinedMesh); } } catch { // For now just add them all as is } } return(mesh); }