public static GameObject TileShow(List <Rhino.Geometry.Point3d> grid, int gridSize, Color color, bool convertM = true, string name = "TileGrid") { var gridObj = new GameObject(name); Brep[] breps = new Brep[grid.Count]; // List<Brep> breps = new List<Brep>(); for (int i = 0; i < grid.Count; i++) { var pt = grid[i]; if (convertM) { var mPt = pt * (0.001); var plane = new Rhino.Geometry.Plane(mPt, Vector3d.ZAxis); var interval = new Interval((-gridSize / 2) * (0.001), (gridSize / 2) * (0.001)); var srf = new Rhino.Geometry.PlaneSurface(plane, interval, interval); var brep = srf.ToBrep(); // breps.Add(brep); breps[i] = brep; } else { var plane = new Rhino.Geometry.Plane(pt, Vector3d.ZAxis); var interval = new Interval(-gridSize / 2, gridSize / 2); var srf = new Rhino.Geometry.PlaneSurface(plane, interval, interval); var brep = srf.ToBrep(); //breps.Add(brep); breps[i] = brep; } } var joinedBrep = Rhino.Geometry.Brep.CreateBooleanUnion(breps, 0.1); var meshParam = MeshingParameters.FastRenderMesh; var meshs = Rhino.Geometry.Mesh.CreateFromBrep(joinedBrep[0], meshParam); var joinedMesh = new Rhino.Geometry.Mesh(); foreach (var m in meshs) { joinedMesh.Append(m); } joinedMesh.Weld(180); //attatch Mesh var UnityMesh = joinedMesh.ToHost(); var meshRender = gridObj.AddComponent <MeshRenderer>(); meshRender.material.color = color; meshRender.material.shader = Shader.Find("UI/Default"); var meshFilter = gridObj.AddComponent <MeshFilter>(); meshFilter.mesh = UnityMesh; return(gridObj); }
private UnityEngine.Mesh CreateLoft(List <List <Vector3> > controlPoints) { if (controlPoints.Count > 0) { var profileCurves = new List <Curve>(); foreach (var controlPointsRow in controlPoints) { profileCurves.Add(Curve.CreateInterpolatedCurve(controlPointsRow.ToRhino(), 3)); } Brep brep = Brep.CreateFromLoft(profileCurves, Point3d.Unset, Point3d.Unset, LoftType.Normal, false)[0]; Rhino.Geometry.Mesh mesh = Rhino.Geometry.Mesh.CreateFromBrep(brep, MeshingParameters.QualityRenderMesh)[0]; return(mesh.ToHost()); } return(null); }
static internal IEnumerable <GeometryObject> ToHost(this Rhino.Geometry.Brep brep) { Solid solid = null; // MakeValidForV2 converts everything inside brep to NURBS if (brep.MakeValidForV2()) { var splittedBrep = SplitClosedFaces(brep); if (splittedBrep != null) { brep = splittedBrep; //RhinoDoc.ActiveDoc.Objects.Add(brep); try { var builder = new BRepBuilder(brep.IsSolid ? BRepType.Solid : BRepType.OpenShell); builder.AllowRemovalOfProblematicFaces(); builder.SetAllowShortEdges(); var brepEdges = new List <BRepBuilderGeometryId> [brep.Edges.Count]; foreach (var face in brep.Faces) { var faceId = builder.AddFace(face.ToHost(), face.OrientationIsReversed); builder.SetFaceMaterialId(faceId, GraphicAttributes.Peek.MaterialId); foreach (var loop in face.Loops) { var loopId = builder.AddLoop(faceId); foreach (var trim in loop.Trims) { if (trim.TrimType != BrepTrimType.Boundary && trim.TrimType != BrepTrimType.Mated) { continue; } var edge = trim.Edge; if (edge == null) { continue; } var edgeIds = brepEdges[edge.EdgeIndex]; if (edgeIds == null) { edgeIds = brepEdges[edge.EdgeIndex] = new List <BRepBuilderGeometryId>(); foreach (var e in edge.ToHost()) { edgeIds.Add(builder.AddEdge(BRepBuilderEdgeGeometry.Create(e))); } } if (trim.IsReversed()) { for (int e = edgeIds.Count - 1; e >= 0; --e) { builder.AddCoEdge(loopId, edgeIds[e], true); } } else { for (int e = 0; e < edgeIds.Count; ++e) { builder.AddCoEdge(loopId, edgeIds[e], false); } } } builder.FinishLoop(loopId); } builder.FinishFace(faceId); } builder.Finish(); if (builder.IsResultAvailable()) { solid = builder.GetResult(); } } catch (Autodesk.Revit.Exceptions.ApplicationException e) { // TODO: Fix cases with singularities and uncomment this line //Debug.Fail(e.Source, e.Message); Debug.WriteLine(e.Message, e.Source); } } else { Debug.Fail("SplitClosedFaces", "SplitClosedFaces failed to split a closed surface."); } } if (solid != null) { yield return(solid); } else { // Emergency result as a mesh var mp = MeshingParameters.Default; mp.MinimumEdgeLength = Revit.VertexTolerance; mp.ClosedObjectPostProcess = true; mp.JaggedSeams = false; var brepMesh = new Rhino.Geometry.Mesh(); brepMesh.Append(Rhino.Geometry.Mesh.CreateFromBrep(brep, mp)); foreach (var g in brepMesh.ToHost()) { yield return(g); } } }