protected static int ToPointsBuffer ( Rhino.Geometry.Point point, out VertexFormatBits vertexFormatBits, out VertexBuffer vb, out int vertexCount, out IndexBuffer ib ) { int pointsCount = 0; if (point.Location.IsValid) { pointsCount = 1; vertexCount = 1; vertexFormatBits = VertexFormatBits.Position; vb = new VertexBuffer(pointsCount * VertexPosition.GetSizeInFloats()); vb.Map(pointsCount * VertexPosition.GetSizeInFloats()); using (var vstream = vb.GetVertexStreamPosition()) { vstream.AddVertex(new VertexPosition(RawEncoder.ToHost(point.Location))); } vb.Unmap(); ib = IndexPointsBuffer(pointsCount); } else { vertexFormatBits = 0; vb = null; vertexCount = 0; ib = null; } return(pointsCount); }
public Rhino.Commands.Result GetPoints(Rhino.RhinoDoc doc) { // Input interval var input = new Rhino.Input.Custom.GetNumber(); // Select surface var go = new Rhino.Input.Custom.GetObject(); go.SetCommandPrompt("Select point"); go.GeometryFilter = Rhino.DocObjects.ObjectType.Point; go.GetMultiple(1, 1); Rhino.Geometry.Point pt = go.Object(0).Point(); Rhino.Geometry.Point3d pointA = pt.Location; go.SetCommandPrompt("Select surface"); go.GeometryFilter = Rhino.DocObjects.ObjectType.Surface; go.GetMultiple(1, 1); Rhino.Geometry.Surface surfaceB = go.Object(0).Surface(); double u, v; if (surfaceB.ClosestPoint(pointA, out u, out v)) { Rhino.Geometry.Point3d pointC = surfaceB.PointAt(u, v); Rhino.Geometry.Vector3d vector = pointA - pointC; // write list pointD } return(Rhino.Commands.Result.Success); }
public static List <Rhino.Geometry.Point> Intersections(Scene <Model> scene, List <Rhino.Geometry.Point3d> pts, List <Rhino.Geometry.Vector3d> directions, ref List <bool> hitMask) { int outputCount = Math.Max(pts.Count, directions.Count); var meshIntersections = new Rhino.Geometry.Point[outputCount]; // var eDirections = new List<EVector>(directions.Count); int ray_packet_size = 4; float tnear = 0.01F; var rayPackets = new List <Ray[]>(); // needed because we cannot access ref variables inside Parallel.For lambda var localHitMask = new bool[outputCount]; int total_pack_count = 0; for (int i = 0; i < outputCount; i = i + ray_packet_size) { var ray_pack = new Ray[4]; for (int j = 0; j < ray_packet_size; j++) { var pt = pts[Math.Min(i + j, pts.Count - 1)]; var direction = directions[Math.Min(i + j, directions.Count - 1)]; ray_pack[j] = new Ray(new EPoint(pt.X, pt.Y, pt.Z), new EVector(direction.X, direction.Y, direction.Z)); total_pack_count++; } rayPackets.Add(ray_pack); } // we have this many 'extra' rays in out last ray packet that we need to ignore int overPack = total_pack_count - outputCount; Parallel.For(0, rayPackets.Count, idx => { var packet = scene.Intersects4(rayPackets[idx], tnear); var hits = packet.ToIntersection <Model>(scene); for (int i = 0; i < ray_packet_size; i++) { if ((idx * 4 + i) >= outputCount) { break; } localHitMask[idx * 4 + i] = hits[i].HasHit; if (hits[i].HasHit) { var hitPos = rayPackets[idx][i].PointAt(hits[i].Distance); meshIntersections[idx * 4 + i] = (new Rhino.Geometry.Point(new Rhino.Geometry.Point3d(hitPos.X, hitPos.Y, hitPos.Z))); } else { meshIntersections[idx * 4 + i] = null; } } }); hitMask.AddRange(localHitMask); return(new List <Rhino.Geometry.Point>(meshIntersections)); //return meshIntersections; }
protected override Rhino.Commands.Result RunCommand(RhinoDoc doc, Rhino.Commands.RunMode mode) { // Input interval var input = new Rhino.Input.Custom.GetNumber(); // Select surface var go = new Rhino.Input.Custom.GetObject(); go.SetCommandPrompt("Select points"); go.GeometryFilter = Rhino.DocObjects.ObjectType.Point; Rhino.Input.GetResult res = go.GetMultiple(1, 0); if (res == Rhino.Input.GetResult.Nothing) { return(Rhino.Commands.Result.Failure); } RhinoApp.WriteLine("Points {0} were selected", go.ObjectCount); try { SaveFileDialog dialog = new SaveFileDialog(); dialog.FileName = "PointFile.xyz"; dialog.Filter = "XYZ file|*.xyz|text file|*.txt"; dialog.Title = "Save point cloud file"; dialog.ShowDialog(); if (dialog.FileName == "") { return(Rhino.Commands.Result.Failure); } FileStream fileStream = (System.IO.FileStream)dialog.OpenFile(); // new FileStream(@"C:\Users\KTW\Documents\PointFile.xyz", FileMode.Create, FileAccess.Write); StreamWriter writer = new StreamWriter(fileStream); for (int i = 0; i < go.ObjectCount; i++) { Rhino.Geometry.Point pt = go.Object(i).Point(); Rhino.Geometry.Point3d pt3d = pt.Location; string text = pt3d.X + " " + pt3d.Y + " " + pt3d.Z; writer.WriteLine(text); } RhinoApp.WriteLine("File was saved"); fileStream.Close(); } catch (Exception e) { RhinoApp.WriteLine("{0}", e.Message); } return(Rhino.Commands.Result.Success); }
public ParamPrimitive(IGH_DocumentObject o, Rhino.Geometry.Point p) : base(p) { docObject = o; o.ObjectChanged += ObjectChanged; }
public Primitive(Rhino.Geometry.Point p) { geometry = p; ClippingBox = geometry.GetBoundingBox(false); }
protected override Result RunCommand(RhinoDoc doc, RunMode mode) { Rhino.DocObjects.ObjectType filter = Rhino.DocObjects.ObjectType.Hatch; Rhino.DocObjects.ObjRef objref = null; Rhino.Commands.Result rc = Rhino.Input.RhinoGet.GetOneObject("Select hatch to explode", false, filter, out objref); if (rc != Rhino.Commands.Result.Success || objref == null) { return(rc); } Rhino.Geometry.Hatch hatch = (Rhino.Geometry.Hatch)objref.Geometry(); if (null == hatch) { return(Rhino.Commands.Result.Failure); } Rhino.Geometry.GeometryBase[] hatch_geom = hatch.Explode(); if (null != hatch_geom) { for (int i = 0; i < hatch_geom.Length; i++) { Rhino.Geometry.GeometryBase geom = hatch_geom[i]; if (null != geom) { switch (geom.ObjectType) { case Rhino.DocObjects.ObjectType.Point: { Rhino.Geometry.Point point = (Rhino.Geometry.Point)geom; if (null != point) { doc.Objects.AddPoint(point.Location); } } break; case Rhino.DocObjects.ObjectType.Curve: { Rhino.Geometry.Curve curve = (Rhino.Geometry.Curve)geom; if (null != curve) { doc.Objects.AddCurve(curve); } } break; case Rhino.DocObjects.ObjectType.Brep: { Rhino.Geometry.Brep brep = (Rhino.Geometry.Brep)geom; if (null != brep) { doc.Objects.AddBrep(brep); } } break; } } } } return(Rhino.Commands.Result.Success); }
protected override Result RunCommand(RhinoDoc doc, RunMode mode) { // TODO: complete command. var filter = Rhino.DocObjects.ObjectType.Brep | Rhino.DocObjects.ObjectType.Surface; Rhino.DocObjects.ObjRef objref; Result rc = Rhino.Input.RhinoGet.GetOneObject("Select surface or brep to unroll", false, filter, out objref); if (rc != Rhino.Commands.Result.Success) { return(rc); } Rhino.Geometry.Unroller unroll = null; Rhino.Geometry.Brep brep = objref.Brep(); if (brep != null) { unroll = new Rhino.Geometry.Unroller(brep); } else { Rhino.Geometry.Surface srf = objref.Surface(); if (srf != null) { unroll = new Rhino.Geometry.Unroller(srf); } } if (unroll == null) { return(Rhino.Commands.Result.Cancel); } unroll.AbsoluteTolerance = 0.01; unroll.RelativeTolerance = 0.01; Rhino.Input.Custom.GetObject go = new Rhino.Input.Custom.GetObject(); go.SetCommandPrompt("Select points, curves, and dots to unroll with surface"); go.GeometryFilter = Rhino.DocObjects.ObjectType.Point | Rhino.DocObjects.ObjectType.Curve | Rhino.DocObjects.ObjectType.TextDot; go.AcceptNothing(true); go.GetMultiple(0, 0); if (go.CommandResult() != Rhino.Commands.Result.Success) { return(go.CommandResult()); } for (int i = 0; i < go.ObjectCount; i++) { objref = go.Object(i); Rhino.Geometry.GeometryBase g = objref.Geometry(); Rhino.Geometry.Point pt = g as Rhino.Geometry.Point; Rhino.Geometry.Curve crv = g as Rhino.Geometry.Curve; Rhino.Geometry.TextDot dot = g as Rhino.Geometry.TextDot; if (pt != null) { unroll.AddFollowingGeometry(pt.Location); } else if (crv != null) { unroll.AddFollowingGeometry(crv); } else if (dot != null) { unroll.AddFollowingGeometry(dot); } } unroll.ExplodeOutput = false; Rhino.Geometry.Curve[] curves; Rhino.Geometry.Point3d[] points; Rhino.Geometry.TextDot[] dots; Rhino.Geometry.Brep[] breps = unroll.PerformUnroll(out curves, out points, out dots); if (breps == null || breps.Length < 1) { return(Rhino.Commands.Result.Failure); } for (int i = 0; i < breps.Length; i++) { doc.Objects.AddBrep(breps[i]); } for (int i = 0; i < curves.Length; i++) { doc.Objects.AddCurve(curves[i]); } doc.Objects.AddPoints(points); for (int i = 0; i < dots.Length; i++) { doc.Objects.AddTextDot(dots[i]); } doc.Views.Redraw(); return(Rhino.Commands.Result.Success); }
public Primitive(Rhino.Geometry.Point p) { geometry = p; }
private void ExtractGeometry(Grasshopper.Kernel.Types.IGH_Goo iGoo, ref List <Rhino.Geometry.GeometryBase> resGeom) { if (iGoo is Grasshopper.Kernel.Types.GH_GeometryGroup group) { foreach (var geomGoo in group.Objects) { ExtractGeometry(geomGoo, ref resGeom); } return; } Rhino.Geometry.GeometryBase geometryBase = null; try { switch (iGoo.ScriptVariable()) { case Rhino.Geometry.Point3d point: geometryBase = new Rhino.Geometry.Point(point); break; case Rhino.Geometry.Line line: geometryBase = new Rhino.Geometry.LineCurve(line); break; case Rhino.Geometry.Rectangle3d rect: geometryBase = rect.ToNurbsCurve(); break; case Rhino.Geometry.Arc arc: geometryBase = new Rhino.Geometry.ArcCurve(arc); break; case Rhino.Geometry.Circle circle: geometryBase = new Rhino.Geometry.ArcCurve(circle); break; case Rhino.Geometry.Ellipse ellipse: geometryBase = ellipse.ToNurbsCurve(); break; case Rhino.Geometry.Curve curve: geometryBase = curve; break; case Rhino.Geometry.Box box: geometryBase = Rhino.Geometry.Mesh.CreateFromBox(box, 1, 1, 1); break; case Rhino.Geometry.Mesh mesh: geometryBase = mesh; break; case Rhino.Geometry.Brep brep: { if (!CompoundDrawable.IsRenderMode) { foreach (var crv in brep.GetWireframe(-1)) { resGeom.Add(crv); } } else { var previewMesh = new Rhino.Geometry.Mesh(); previewMesh.Append(Rhino.Geometry.Mesh.CreateFromBrep(brep, MeshParameters)); geometryBase = previewMesh; } break; } case Rhino.Geometry.Plane plane: { double len = 4.0; var x = new Rhino.Geometry.Interval(-len, len); var y = new Rhino.Geometry.Interval(-len, len); geometryBase = Rhino.Geometry.Mesh.CreateFromPlane(plane, x, y, 5, 5); break; } default: { System.Diagnostics.Debug.Fail("Not supported GH type", iGoo.GetType().ToString()); break; } } } catch (Exception e) { System.Diagnostics.Debug.Fail(e.Source, e.Message); } if (geometryBase != null) { resGeom.Add(geometryBase); } }