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); }
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()); }
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(); }
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); }