Esempio n. 1
0
        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);
        }
Esempio n. 2
0
        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);
        }
Esempio n. 3
0
        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);
        }
Esempio n. 4
0
        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);
        }