Example #1
0
    static Rhino.Geometry.Mesh[] GenerateRhinoMesh(List <List <Vector3> > nestedPt)
    {
        var crvs = new List <Rhino.Geometry.Curve>();
        var pts  = new List <Rhino.Geometry.Point3d>();

        for (int i = 0; i < nestedPt.Count; i++)
        {
            for (int j = 0; j < nestedPt[i].Count; j++)
            {
                var pt = new Rhino.Geometry.Point3d(nestedPt[i][j].x, nestedPt[i][j].z, nestedPt[i][j].y);
                pts.Add(pt);
            }
            var crv = CurveCompute.CreateInterpolatedCurve(pts.ToArray(), 3);
            crvs.Add(crv);
        }
        int err;
        var srf = NurbsSurfaceCompute.CreateNetworkSurface(crvs, 0, 0.001, 0.001, 0.001, out err);

        if (err > 0)
        {
            Debug.Log("failed to generate surface network");
        }
        var brep = srf.ToBrep();
        var mesh = MeshCompute.CreateFromBrep(brep);

        return(mesh);
    }
Example #2
0
        static void Main(string[] args)
        {
            ComputeServer.AuthToken = Rhino.Compute.AuthToken.Get();

            Curve curveA = Curve.CreateControlPointCurve(new Point3d[] {
                new Point3d(0.0, 0.0, 0.0),
                new Point3d(0.0, 0.5, -0.5),
                new Point3d(0.0, 1.0, 0.0)
            });
            Curve curveB = Curve.CreateControlPointCurve(new Point3d[] {
                new Point3d(1.0, 0.0, 0.0),
                new Point3d(1.0, 0.3, 0.6),
                new Point3d(1.0, 0.5, 0.0),
                new Point3d(1.0, 0.7, 0.8),
                new Point3d(1.0, 1.0, 0.0)
            });

            NurbsSurface ruled = NurbsSurface.CreateRuledSurface(curveA, curveB);

            Mesh mesh1 = MeshCompute.CreateFromSurface(ruled);

            Rhino.Compute.ObjExport.ExportMeshesToObj("ruled_mesh_default.obj", new Mesh[] { mesh1 });

            MeshingParameters meshingParameters = new MeshingParameters();

            meshingParameters.MaximumEdgeLength = 0.1;
            Mesh mesh2 = MeshCompute.CreateFromSurface(ruled, meshingParameters);

            Rhino.Compute.ObjExport.ExportMeshesToObj("ruled_mesh_refined1.obj", new Mesh[] { mesh2 });

            meshingParameters.MaximumEdgeLength = 0.05;
            Mesh mesh3 = MeshCompute.CreateFromSurface(ruled, meshingParameters);

            Rhino.Compute.ObjExport.ExportMeshesToObj("ruled_mesh_refined2.obj", new Mesh[] { mesh3 });
        }
        public static Mesh ToMesh(this rg.Brep brep)
        {
            var rgMesh = MeshCompute.CreateFromBrep(brep);
            var union  = new rg.Mesh();

            union.Append(rgMesh);
            return(union.ToMesh());
        }
Example #4
0
        public static void ExportBrepsToObj(string filePath, IEnumerable <Brep> breps)
        {
            List <Mesh> meshes = new List <Mesh>();

            foreach (Brep brep in breps)
            {
                Mesh[] brepMeshes = MeshCompute.CreateFromBrep(brep);
                foreach (Mesh brepMesh in brepMeshes)
                {
                    meshes.Add(brepMesh);
                }
            }
            ExportMeshesToObj(filePath, meshes);
        }
        static void Main(string[] args)
        {
            ComputeServer.ApiToken = "*****@*****.**";
            var sphere       = new Rhino.Geometry.Sphere(Rhino.Geometry.Point3d.Origin, 12);
            var sphereAsBrep = sphere.ToBrep();
            // above uses standard Rhino3dmIO methods locally
            // the following function calls compute.rhino3d.com to get access to something not
            // available in Rhino3dmIO
            var meshes = MeshCompute.CreateFromBrep(sphereAsBrep);

            // back to regular Rhino3dmIO local calls
            Console.WriteLine($"Got {meshes.Length} meshes");
            for (int i = 0; i < meshes.Length; i++)
            {
                Console.WriteLine($"  {i + 1} mesh has {meshes[i].Vertices.Count} vrtices");
            }

            Console.WriteLine("press any key to exit");
            Console.ReadKey();
        }
        static void Main(string[] args)
        {
            // TODO: Add Rhino.Compute authorization code here
            ComputeServer.AuthToken = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJwIjoiUEtDUyM3IiwiYyI6IkFFU18yNTZfQ0JDIiwiYjY0aXYiOiJLYVBqQ2VkS29xZkRQRXZNM0ZGYytBPT0iLCJiNjRjdCI6InJHYWp3blhmMnlWN1B2SElra3g1ZWJpbFI2bUdwWThtc04yL0kwY3ZJN1Z0ZHlZdU56bnFzMHljV0w4RjcxaHlZeHVoUVJreXFlVEJEeFZWVEVWN3ZudTIxQUVPYnYyeVBkUm9rZ1RNUS9lamJibWMwbTBSMU1JeGVsK1RFdjU0VjYxOHN0aWVuS3lkQzJPWmllcDFCc0tuZTlIbmxwKzNyVFQrSldlbGN2amNHNnpCakY4dDFBVm1mK2FKSHVGZVRaOGM0dzU4bDc1ZllGTGh3bStsa0E9PSIsImlhdCI6MTU2NjU2OTExN30.6OEpqQggn1N16J4bIb7cCIy1fT5Gx-mzBDzMNYDAFOw";

            // Use Rhino3dm methods
            var sphere = new Sphere(Plane.WorldXY, 5.0);
            var brep   = sphere.ToBrep();

            // Call compute.rhino3d.com to get access to something not available in Rhino3dm
            var meshes = MeshCompute.CreateFromBrep(brep);

            // Back to Rhino3dm methods
            Console.WriteLine($"{meshes.Length} meshes returned");
            for (var i = 0; i < meshes.Length; i++)
            {
                Console.WriteLine($"  {i + 1} mesh has {meshes[i].Vertices.Count} vertices");
            }

            Console.WriteLine("Press any key to exit");
            Console.ReadKey();
        }
Example #7
0
    private void GenerateGeo()
    {
        model = new Rhino.FileIO.File3dm();

        int   num      = 10;
        float outerRad = 2f;
        var   curves   = new List <Rhino.Geometry.NurbsCurve>();

        for (int i = 0; i < num; i++)
        {
            var pt      = new Rhino.Geometry.Point3d(0, 0, height / (num - 1) * i);
            var circle  = new Rhino.Geometry.Circle(pt, pipeRad);
            var polygon = Rhino.Geometry.Polyline.CreateInscribedPolygon(circle, segments);
            var curve   = polygon.ToNurbsCurve();
            curve.Rotate(i * Mathf.Deg2Rad * angle, new Rhino.Geometry.Vector3d(0, 0, 1), new Rhino.Geometry.Point3d(0, 0, 0));
            curve.Translate(new Rhino.Geometry.Vector3d(Mathf.Cos(Mathf.Deg2Rad * angle * i), Mathf.Sin(Mathf.Deg2Rad * angle * i), 0) * outerRad);
            curves.Add(curve);
        }

        var breps = BrepCompute.CreateFromLoft(curves, Rhino.Geometry.Point3d.Unset, Rhino.Geometry.Point3d.Unset, Rhino.Geometry.LoftType.Normal, false);

        var meshList = new List <Rhino.Geometry.Mesh>();

        foreach (var brep in breps)
        {
            var brep2 = brep.CapPlanarHoles(0.001);
            // generates two additional breps
            var meshes = MeshCompute.CreateFromBrep(brep2);
            meshList.AddRange(meshes.ToList());

            model.Objects.AddBrep(brep2);
        }

        foreach (var mesh in meshList)
        {
            Mesh meshObj = new Mesh();

            var vertices = new List <Vector3>();
            foreach (var meshVertex in mesh.Vertices)
            {
                var vertex = new Vector3(meshVertex.X, meshVertex.Z, meshVertex.Y);
                vertices.Add(vertex);
            }

            var triangles = new List <int>();
            foreach (var meshFace in mesh.Faces)
            {
                if (meshFace.IsTriangle)
                {
                    triangles.Add(meshFace.C);
                    triangles.Add(meshFace.B);
                    triangles.Add(meshFace.A);
                }
                else if (meshFace.IsQuad)
                {
                    triangles.Add(meshFace.C);
                    triangles.Add(meshFace.B);
                    triangles.Add(meshFace.A);
                    triangles.Add(meshFace.D);
                    triangles.Add(meshFace.C);
                    triangles.Add(meshFace.A);
                }
            }

            var normals = new List <Vector3>();
            foreach (var normal in mesh.Normals)
            {
                normals.Add(new Vector3(normal.X, normal.Z, normal.Y));
            }

            meshObj.vertices  = vertices.ToArray();
            meshObj.triangles = triangles.ToArray();
            meshObj.normals   = normals.ToArray();

            GameObject gb = new GameObject();
            gb.AddComponent <MeshFilter>().mesh       = meshObj;
            gb.AddComponent <MeshRenderer>().material = mat;
        }
    }
    // Start is called before the first frame update
    void Start()
    {
        ComputeServer.AuthToken = authToken;

        var model  = new Rhino.FileIO.File3dm();
        var curves = new List <Rhino.Geometry.NurbsCurve>();

        for (int i = 0; i < 20; i++)
        {
            var s  = 10f;
            var pt = new Rhino.Geometry.Point3d(Random.Range(-s, s), Random.Range(-s, s), 0);
            // model.Objects.AddPoint(pt);
            var r      = Random.Range(1f, 3f);
            var circle = new Rhino.Geometry.Circle(pt, r);
            var curve  = circle.ToNurbsCurve();
            curves.Add(curve);
        }

        var unionCrvsC = CurveCompute.CreateBooleanUnion(curves);

        var height     = Random.Range(1f, 5f);
        var extrusions = new List <Rhino.Geometry.Extrusion>();

        foreach (var unionCrvC in unionCrvsC)
        {
            var extrusion = Rhino.Geometry.Extrusion.Create(unionCrvC, height, true);
            model.Objects.AddExtrusion(extrusion);
            extrusions.Add(extrusion);
        }

        var meshList = new List <Rhino.Geometry.Mesh>();

        foreach (var extrusion in extrusions)
        {
            var brep   = extrusion.ToBrep();
            var meshes = MeshCompute.CreateFromBrep(brep);
            meshList.AddRange(meshes.ToList());
        }

        foreach (var mesh in meshList)
        {
            Mesh meshObj = new Mesh();

            var vertices = new List <Vector3>();
            // mesh.RebuildNormals();
            foreach (var meshVertex in mesh.Vertices)
            {
                var vertex = new Vector3(meshVertex.X, meshVertex.Z, meshVertex.Y);
                vertices.Add(vertex);
            }

            var triangles = new List <int>();
            foreach (var meshFace in mesh.Faces)
            {
                if (meshFace.IsTriangle)
                {
                    triangles.Add(meshFace.C);
                    triangles.Add(meshFace.B);
                    triangles.Add(meshFace.A);
                }
                else if (meshFace.IsQuad)
                {
                    triangles.Add(meshFace.C);
                    triangles.Add(meshFace.B);
                    triangles.Add(meshFace.A);
                    triangles.Add(meshFace.D);
                    triangles.Add(meshFace.C);
                    triangles.Add(meshFace.A);
                }
            }


            meshObj.vertices  = vertices.ToArray();
            meshObj.triangles = triangles.ToArray();


            meshObj.RecalculateNormals();

            GameObject gb = new GameObject();
            gb.AddComponent <MeshFilter>().mesh       = meshObj;
            gb.AddComponent <MeshRenderer>().material = mat;
        }


        var path = Application.dataPath + "/../Outputs/model.3dm";

        model.Write(path, 5);
    }