コード例 #1
0
        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);
        }
コード例 #2
0
        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);
        }
コード例 #3
0
ファイル: EmbreeTools.cs プロジェクト: dwastberg/GHEmbree
        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;
        }
コード例 #4
0
ファイル: SavePointsFile.cs プロジェクト: mac999/Automation
        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);
        }
コード例 #5
0
 public ParamPrimitive(IGH_DocumentObject o, Rhino.Geometry.Point p) : base(p)
 {
     docObject = o; o.ObjectChanged += ObjectChanged;
 }
コード例 #6
0
 public Primitive(Rhino.Geometry.Point p)
 {
     geometry = p; ClippingBox = geometry.GetBoundingBox(false);
 }
コード例 #7
0
        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);
        }
コード例 #8
0
        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);
        }
コード例 #9
0
 public Primitive(Rhino.Geometry.Point p)
 {
     geometry = p;
 }
コード例 #10
0
        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);
            }
        }