public List <Brep> CreateDefBreps(GH_Structure <GH_Point> treePoints, GH_Structure <GH_Integer> treeConnect, Vector3d[] defVectors, double scale, double angle, Point3d center) { List <Brep> breps = new List <Brep>(); for (int j = 0; j < treePoints.PathCount; j++) { List <GH_Point> vertices = (List <GH_Point>)treePoints.get_Branch(j); var mesh = new Mesh(); List <GH_Integer> connect = (List <GH_Integer>)treeConnect.get_Branch(j); for (int i = 0; i < vertices.Count; i++) { GH_Point p = vertices[i]; Point3d new_p = Point3d.Add(p.Value, defVectors[connect[i].Value] * scale); mesh.Vertices.Add(new_p); } mesh.Faces.AddFace(0, 1, 5, 4); mesh.Faces.AddFace(1, 2, 6, 5); mesh.Faces.AddFace(2, 3, 7, 6); mesh.Faces.AddFace(0, 3, 7, 4); mesh.Faces.AddFace(4, 5, 6, 7); mesh.Faces.AddFace(0, 1, 2, 3); Brep new_brep = Brep.CreateFromMesh(mesh, false); Vector3d vecAxis = new Vector3d(0, 0, 1); new_brep.Rotate(angle, vecAxis, center); breps.Add(new_brep); } return(breps); }
private void setInnerBound() { centroid = MeshTools.meshCentroid(boundary); Mesh offset = MeshTools.makeCuboid(cellPlane, xDim - memberSize, yDim - memberSize, zDim - memberSize); innerBoundary = Brep.CreateFromMesh(offset, false); foreach (BrepVertex p in innerBoundary.Vertices) { nodeGrid.Add(p.Location); } nodeGrid.Add(new Line(nodeGrid[0], nodeGrid[2]).PointAt(0.5)); nodeGrid.Add(new Line(nodeGrid[1], nodeGrid[3]).PointAt(0.5)); nodeGrid.Add(new Line(nodeGrid[6], nodeGrid[4]).PointAt(0.5)); nodeGrid.Add(new Line(nodeGrid[7], nodeGrid[5]).PointAt(0.5)); setCentreLines(); //foreach(BrepEdge be in innerBoundary.Edges) //{ // untrimmedCentreLines.Add(be.DuplicateCurve()); //} ////add diagonals for (int d = 0; d < 11; d++) { diagonalMembers.Add(new DiagonalMember(d, nodeGrid)); } //set the faceboundaries setBoundaryGeometry(); }
protected override void SolveInstance(IGH_DataAccess DA) { List <Point3d> points = new List <Point3d>(); if (!DA.GetDataList(0, points)) { return; } Mesh mesh = new Mesh(); for (int i = 0; i < points.Count; i++) { mesh.Vertices.Add(points[i]); } mesh.Faces.AddFace(0, 1, 5, 4); //Front mesh.Faces.AddFace(1, 2, 6, 5); //Right mesh.Faces.AddFace(2, 3, 7, 6); //Back mesh.Faces.AddFace(0, 4, 7, 3); //Left mesh.Faces.AddFace(0, 3, 2, 1); //Bottom mesh.Faces.AddFace(4, 5, 6, 7); //Top Brep brep = Brep.CreateFromMesh(mesh, true); //Brep brep = new Brep(); DA.SetData(0, brep); }
public List <Brep> CreateDefBreps(List <Element> elements, double scale, double angle, Point3d center) { List <Brep> breps = new List <Brep>(); for (int j = 0; j < elements.Count; j++) { var mesh = new Mesh(); List <Node> vertices = elements[j].GetVertices(); for (int i = 0; i < vertices.Count; i++) { Point3d p = vertices[i].GetCoord(); Vector3d defVector = new Vector3d(vertices[i].GetDeformation()[0], vertices[i].GetDeformation()[1], vertices[i].GetDeformation()[2]); Point3d new_p = Point3d.Add(p, defVector * scale); mesh.Vertices.Add(new_p); } mesh.Faces.AddFace(0, 1, 5, 4); mesh.Faces.AddFace(1, 2, 6, 5); mesh.Faces.AddFace(2, 3, 7, 6); mesh.Faces.AddFace(0, 3, 7, 4); mesh.Faces.AddFace(4, 5, 6, 7); mesh.Faces.AddFace(0, 1, 2, 3); Brep new_brep = Brep.CreateFromMesh(mesh, false); Vector3d vecAxis = new Vector3d(0, 0, 1); new_brep.Rotate(angle, vecAxis, center); breps.Add(new_brep); } return(breps); }
private void setBoundaryGeometry() { outerBoundary = Brep.CreateFromMesh(boundary, false); boundCurve0 = outerBoundary.Faces[2].OuterLoop.To3dCurve(); boundCurve1 = outerBoundary.Faces[4].OuterLoop.To3dCurve(); boundPlane0 = new Plane(outerBoundary.Faces[2].PointAt(0.5, 0.5), outerBoundary.Faces[2].NormalAt(0.5, 0.5)); boundPlane1 = new Plane(outerBoundary.Faces[4].PointAt(0.5, 0.5), outerBoundary.Faces[4].NormalAt(0.5, 0.5)); basePoints.Add(outerBoundary.Vertices[0].Location); basePoints.Add(outerBoundary.Vertices[1].Location); basePoints.Add(outerBoundary.Vertices[2].Location); basePoints.Add(outerBoundary.Vertices[3].Location); }
/// <summary> /// This is the method that actually does the work. /// </summary> /// <param name="DA">The DA object is used to retrieve from inputs and store in outputs.</param> protected override void SolveInstance(IGH_DataAccess DA) { Mesh mesh = null; if (!DA.GetData(0, ref mesh)) { return; } var brep = Brep.CreateFromMesh(mesh, false); DA.SetData(0, brep); }
public Point3d FindCentroidTwisted(List <GH_Point> pList) { Mesh mesh = new Mesh(); for (int i = 0; i < pList.Count; i++) { mesh.Vertices.Add(pList[i].Value); } mesh.Faces.AddFace(0, 3, 2, 1); //Bottom mesh.Faces.AddFace(4, 5, 6, 7); //Top mesh.Faces.AddFace(2, 3, 7, 6); //Back mesh.Faces.AddFace(0, 1, 5, 4); //Front mesh.Faces.AddFace(1, 2, 6, 5); //Right mesh.Faces.AddFace(0, 4, 7, 3); //Left Brep brep = Brep.CreateFromMesh(mesh, true); VolumeMassProperties vmp = VolumeMassProperties.Compute(brep); Point3d centroid = vmp.Centroid; return(centroid); }
private Brep MakeFrameBox(Brep[] frame) { Mesh m = new Mesh(); Mesh f = new Mesh(); for (int i = 0; i < meshnodes.Count; i++) { for (int j = 0; j < meshnodes[i].Count; j++) { if (i < meshnodes.Count - 1 && j < meshnodes[i].Count - 1) { List <Point3d> points = new List <Point3d>() { meshnodes[i][j].point, meshnodes[i][j + 1].point, meshnodes[i + 1][j + 1].point, meshnodes[i + 1][j].point }; FourNodeMesh(ref m, points); List <Point3d> pointsF = new List <Point3d>() { frameGrid[i][j], frameGrid[i][j + 1], frameGrid[i + 1][j + 1], frameGrid[i + 1][j] }; FourNodeMesh(ref f, pointsF); } } } Brep front = Brep.CreateFromMesh(m, false); Brep back = Brep.CreateFromMesh(f, false); List <Brep> breps = new List <Brep>(); breps.Add(front); breps.Add(back); foreach (Brep b in frame) { breps.Add(b); } Brep[] box = Brep.JoinBreps(breps, RhinoDoc.ActiveDoc.ModelAbsoluteTolerance); return(box[0]); }
protected override void SolveInstance(IGH_DataAccess DA) { //---variables--- List <Point3d> points = new List <Point3d>(); //---input--- if (!DA.GetDataList(0, points)) { return; } //---solve--- Mesh mesh = new Mesh(); for (int i = 0; i < points.Count; i++) { mesh.Vertices.Add(points[i]); } mesh.Faces.AddFace(0, 4, 5, 1); //Front mesh.Faces.AddFace(1, 5, 6, 2); //Right mesh.Faces.AddFace(2, 6, 7, 3); //Back mesh.Faces.AddFace(0, 3, 7, 4); //Left mesh.Faces.AddFace(0, 1, 2, 3); //Bottom mesh.Faces.AddFace(4, 7, 6, 5); //Top Brep brep = Brep.CreateFromMesh(mesh, true); Curve[] curves = brep.DuplicateEdgeCurves(); //---output--- DA.SetData(0, brep); }
protected override Result RunCommand(RhinoDoc doc, RunMode mode) { bool allBrepSolid = true; const Rhino.DocObjects.ObjectType geometryFilter = Rhino.DocObjects.ObjectType.Brep | Rhino.DocObjects.ObjectType.Mesh; GetObject wro = new Rhino.Input.Custom.GetObject(); wro.SetCommandPrompt("Select objects to weight."); wro.GeometryFilter = geometryFilter; wro.SubObjectSelect = true; wro.DeselectAllBeforePostSelect = false; wro.OneByOnePostSelect = true; wro.GetMultiple(1, 0); double volObj3 = 0; for (int i = 0; i < wro.ObjectCount; i++) { Rhino.DocObjects.ObjRef objref = wro.Object(i); // get selected surface object Rhino.DocObjects.RhinoObject obj = objref.Object(); if (obj == null) { return(Result.Failure); } // get selected surface (face) Brep refcr = objref.Brep(); if (refcr != null) { var volObj = VolumeMassProperties.Compute(refcr); double volObj2 = refcr.GetVolume(); volObj3 = volObj3 + volObj2; bool brepSolid = refcr.IsSolid; if (brepSolid == false) { allBrepSolid = false; } } if (refcr == null) { Mesh refcm = objref.Mesh(); Brep refmb = Brep.CreateFromMesh(refcm, false); var volOb = VolumeMassProperties.Compute(refmb); double volObj4 = refmb.GetVolume(); volObj3 = volObj3 + volObj4; bool brepSolid = refmb.IsSolid; if (brepSolid == false) { allBrepSolid = false; } } } double gold18k = Math.Round(volObj3 * 0.0158, 2, MidpointRounding.AwayFromZero); double gold14k = Math.Round(volObj3 * 0.0146, 2, MidpointRounding.AwayFromZero); double platinum = Math.Round(volObj3 * 0.0214, 2, MidpointRounding.AwayFromZero); double palladium = Math.Round(volObj3 * 0.012, 2, MidpointRounding.AwayFromZero); double silver925 = Math.Round(volObj3 * 0.0102, 2, MidpointRounding.AwayFromZero); double diaCt = Math.Round(volObj3 * 0.01755, 2, MidpointRounding.AwayFromZero); if (allBrepSolid) { RhinoApp.WriteLine("The weight is: Gold 18k " + gold18k + "g, Gold 14k " + gold14k + "g, Platinum " + platinum + "g, Palladium " + palladium + "g, Silver 925 " + silver925 + "g, Diamond" + diaCt + "Ct"); } else { RhinoApp.WriteLine("AT LEAST ONE OBJECT IS OPEN! Result might be false!" + "The weight is: Gold 18k " + gold18k + "g, Gold 14k " + gold14k + "g, Platinum " + platinum + "g, Palladium " + palladium + "g, Silver 925 " + silver925 + "g, Diamond" + diaCt + "Ct"); } return(Result.Success); }
private bool ProcessTopographySurface(List <Point3d> points) { try { //int MaxVertices = 500; //int MaxTriangles = 1000; // TODO: Not sure if these estimates are good or how the system will handle going over. int MaxVertices = points.Count * 2; int MaxTriangles = MaxVertices * 2; // Points used. !!Note: is a 1-based array TopoSurfVertex[] topoSurfVertex = new TopoSurfVertex[MaxVertices]; // Triangles created. !!Note: is a 1-based array TopoSurfTriangle[] topoSurfTriangle = new TopoSurfTriangle[MaxTriangles]; int numberOfPoints = 0; int numberOfTriangles = 0; foreach (Point3d point3d in points) { numberOfPoints++; topoSurfVertex[numberOfPoints].x = point3d.X; topoSurfVertex[numberOfPoints].y = point3d.Y; topoSurfVertex[numberOfPoints].z = point3d.Z; } TriangulatePoints triangulatePoints = new TriangulatePoints(ref topoSurfVertex, out topoSurfTriangle, numberOfPoints, MaxVertices, MaxTriangles, ref numberOfTriangles); List <Curve> curves = new List <Curve>(); for (int i = 1; i <= numberOfTriangles; i++) { Line line = new Line(topoSurfVertex[topoSurfTriangle[i].vv0].x, topoSurfVertex[topoSurfTriangle[i].vv0].y, topoSurfVertex[topoSurfTriangle[i].vv0].z, topoSurfVertex[topoSurfTriangle[i].vv1].x, topoSurfVertex[topoSurfTriangle[i].vv1].y, topoSurfVertex[topoSurfTriangle[i].vv1].z); curves.Add(new LineCurve(line)); line = new Line(topoSurfVertex[topoSurfTriangle[i].vv1].x, topoSurfVertex[topoSurfTriangle[i].vv1].y, topoSurfVertex[topoSurfTriangle[i].vv1].z, topoSurfVertex[topoSurfTriangle[i].vv2].x, topoSurfVertex[topoSurfTriangle[i].vv2].y, topoSurfVertex[topoSurfTriangle[i].vv2].z); curves.Add(new LineCurve(line)); line = new Line(topoSurfVertex[topoSurfTriangle[i].vv0].x, topoSurfVertex[topoSurfTriangle[i].vv0].y, topoSurfVertex[topoSurfTriangle[i].vv0].z, topoSurfVertex[topoSurfTriangle[i].vv2].x, topoSurfVertex[topoSurfTriangle[i].vv2].y, topoSurfVertex[topoSurfTriangle[i].vv2].z); curves.Add(new LineCurve(line)); } Mesh mesh = new Mesh(); for (int i = 1; i <= numberOfPoints; i++) { mesh.Vertices.Add(new Point3d(topoSurfVertex[i].x, topoSurfVertex[i].y, topoSurfVertex[i].z)); } for (int i = 1; i <= numberOfTriangles; i++) // Note subtracting 1 from index due to 1-based array { mesh.Faces.AddFace(topoSurfTriangle[i].vv0 - 1, topoSurfTriangle[i].vv1 - 1, topoSurfTriangle[i].vv2 - 1); } mesh.Normals.ComputeNormals(); mesh.Compact(); Brep brep = Brep.CreateFromMesh(mesh, true); // Add to outputs this.dataTreePoints.AddRange(points, new GH_Path(indexPoints)); indexPoints++; this.dataTreeCurves.AddRange(curves, new GH_Path(indexCurves)); indexCurves++; this.dataTreeBreps.AddRange(new List <Brep> { brep }, new GH_Path(indexBreps)); indexBreps++; // Create geometry if (createGeometryPoints) { foreach (Point3d point3d in points) { Rhino.RhinoDoc.ActiveDoc.Objects.AddPoint(point3d); } } if (createGeometryCurves) { foreach (Curve curveItem in curves) { Rhino.RhinoDoc.ActiveDoc.Objects.AddCurve(curveItem); } } if (createGeometrySurfaces) { Rhino.RhinoDoc.ActiveDoc.Objects.AddBrep(brep); } return(true); } catch { return(false); } }
protected override Result RunCommand(RhinoDoc doc, RunMode mode) { Mesh meshSurf; List <Guid> ids = new List <Guid>(); double tolerance = doc.ModelAbsoluteTolerance; const Rhino.DocObjects.ObjectType geometryFilter = Rhino.DocObjects.ObjectType.Surface | Rhino.DocObjects.ObjectType.PolysrfFilter | Rhino.DocObjects.ObjectType.Mesh; GetObject gs = new Rhino.Input.Custom.GetObject(); gs.SetCommandPrompt("Surface to orient on"); gs.GeometryFilter = geometryFilter; gs.SubObjectSelect = true; gs.DeselectAllBeforePostSelect = true; gs.OneByOnePostSelect = true; gs.Get(); if (gs.CommandResult() != Result.Success) { return(gs.CommandResult()); } Rhino.DocObjects.ObjRef objref = gs.Object(0); Rhino.DocObjects.RhinoObject obj = objref.Object(); if (obj == null) { return(Result.Failure); } brepSurf = objref.Brep(); if (brepSurf == null) { meshSurf = objref.Mesh(); brepSurf = Brep.CreateFromMesh(meshSurf, true); } if (brepSurf == null) { return(Result.Failure); } obj.Select(false); while (true) { w_key_pressed = false; s_key_pressed = false; a_key_pressed = false; d_key_pressed = false; m_escape_key_pressed = false; RhinoApp.EscapeKeyPressed += RhinoApp_EscapeKeyPressed; RhinoApp.KeyboardEvent += OnRhinoKeyboardEvent; Point3d pt0; GetPoint getPointAction = new GetPoint(); getPointAction.SetCommandPrompt("Please select insert point(s) on surface."); getPointAction.Constrain(brepSurf, -1, -1, false); var stoneDiam = new Rhino.Input.Custom.OptionDouble(diamStone); var stoneOff = new Rhino.Input.Custom.OptionDouble(offSetStone); var boolOption = new Rhino.Input.Custom.OptionToggle(false, "Off", "On"); var moveOption = new Rhino.Input.Custom.OptionToggle(false, "Off", "On"); getPointAction.AddOptionDouble("StoneDiam", ref stoneDiam); getPointAction.AddOptionDouble("Offset", ref stoneOff); getPointAction.AddOptionToggle("Delete", ref boolOption); getPointAction.AddOptionToggle("Move", ref moveOption); getPointAction.DynamicDraw += RefCircleDraw; getPointAction.Tag = obj; getPointAction.AcceptString(false); getPointAction.AcceptNothing(true); var res = getPointAction.Get(); if (w_key_pressed || s_key_pressed) { RhinoApp.KeyboardEvent -= OnRhinoKeyboardEvent; w_key_pressed = false; s_key_pressed = false; stoneDiam.CurrentValue = diamStone; } if (a_key_pressed || d_key_pressed) { RhinoApp.KeyboardEvent -= OnRhinoKeyboardEvent; a_key_pressed = false; d_key_pressed = false; stoneOff.CurrentValue = offSetStone; } if (res == GetResult.Nothing) { break; } if (m_escape_key_pressed) { break; } diamStone = stoneDiam.CurrentValue; offSetStone = stoneOff.CurrentValue; optionBool = boolOption.CurrentValue; moveBool = moveOption.CurrentValue; RhinoApp.KeyboardEvent -= OnRhinoKeyboardEvent; if (moveBool == true) { RhinoApp.KeyboardEvent -= OnRhinoKeyboardEvent; while (true) { GetObject gcd = new Rhino.Input.Custom.GetObject(); gcd.SetCommandPrompt("Select circle(s) to move. Press enter when done"); gcd.GeometryFilter = Rhino.DocObjects.ObjectType.Curve; gcd.SubObjectSelect = false; gcd.DeselectAllBeforePostSelect = true; gcd.AcceptNothing(true); if (gcd.Get() == GetResult.Nothing) { break; } gcd.Get(); Rhino.DocObjects.ObjRef delobjref = gcd.Object(0); Rhino.DocObjects.RhinoObject delobj = delobjref.Object(); Curve curveRadius = delobjref.Curve(); Circle circleRadius = new Circle(); curveRadius.TryGetCircle(out circleRadius, tolerance); diamStone = circleRadius.Diameter; doc.Objects.Delete(delobj, true); doc.Views.Redraw(); getPointAction.Get(); pt0 = getPointAction.Point(); Point3d closestPoint; ComponentIndex compIndex; double u, v; Vector3d vt1; brepSurf.ClosestPoint(pt0, out closestPoint, out compIndex, out u, out v, 0.01, out vt1); Plane pl1 = new Plane(pt0, vt1); Circle cr1 = new Circle(pl1, pt0, diamStone / 2); var crgu = doc.Objects.AddCircle(cr1); ids.Add(crgu); doc.Views.Redraw(); } moveBool = false; } if (optionBool == true) { RhinoApp.KeyboardEvent -= OnRhinoKeyboardEvent; while (true) { GetObject gcd = new Rhino.Input.Custom.GetObject(); gcd.SetCommandPrompt("Select circle(s) to delete. Press enter when done"); gcd.GeometryFilter = Rhino.DocObjects.ObjectType.Curve; gcd.SubObjectSelect = false; gcd.DeselectAllBeforePostSelect = true; gcd.AcceptNothing(true); if (gcd.Get() == GetResult.Nothing) { break; } gcd.Get(); Rhino.DocObjects.ObjRef delobjref = gcd.Object(0); Rhino.DocObjects.RhinoObject delobj = delobjref.Object(); Curve curveRadius = delobjref.Curve(); Circle circleRadius = new Circle(); curveRadius.TryGetCircle(out circleRadius, tolerance); diamStone = circleRadius.Diameter; doc.Objects.Delete(delobj, true); doc.Views.Redraw(); } optionBool = false; } if (res == GetResult.Point) { pt0 = getPointAction.Point(); Point3d closestPoint; ComponentIndex compIndex; double u, v; Vector3d vt1; brepSurf.ClosestPoint(pt0, out closestPoint, out compIndex, out u, out v, 0.01, out vt1); Plane pl1 = new Plane(pt0, vt1); Circle cr1 = new Circle(pl1, pt0, diamStone / 2); var crgu = doc.Objects.AddCircle(cr1); ids.Add(crgu); doc.Views.Redraw(); } } RhinoApp.KeyboardEvent -= OnRhinoKeyboardEvent; RhinoApp.EscapeKeyPressed -= RhinoApp_EscapeKeyPressed; doc.Groups.Add(ids); return(Result.Success); }