Beispiel #1
0
    public static Rhino.Commands.Result BlockInsertionPoint(Rhino.RhinoDoc doc)
    {
        Rhino.DocObjects.ObjRef objref;
        Result rc = Rhino.Input.RhinoGet.GetOneObject("Select instance", true, Rhino.DocObjects.ObjectType.InstanceReference, out objref);

        if (rc != Rhino.Commands.Result.Success)
        {
            return(rc);
        }
        Rhino.DocObjects.InstanceObject instance = objref.Object() as Rhino.DocObjects.InstanceObject;
        if (instance != null)
        {
            Rhino.Geometry.Point3d pt = instance.InsertionPoint;
            doc.Objects.AddPoint(pt);
            doc.Views.Redraw();
        }
        return(Rhino.Commands.Result.Success);
    }
        protected override Result RunCommand(RhinoDoc doc, RunMode mode)
        {
            // TODO: start here modifying the behaviour of your command.
            // ---
            // Get units
            UnitSystem docUnits      = doc.ModelUnitSystem;
            double     scale         = Rhino.RhinoMath.UnitScale(docUnits, UnitSystem.Millimeters);
            double     inverse_scale = Rhino.RhinoMath.UnitScale(UnitSystem.Millimeters, docUnits);

            Form f         = new Form();
            var  dialog_rc = f.ShowModal(RhinoEtoApp.MainWindow);

            if (dialog_rc == Eto.Forms.DialogResult.Ok)
            {
                string createThese = "Creating These Elements:";
                createThese += "\n\tLinear Nodes: " + f.LinearQty.ToString();
                createThese += "\n\tRotation Nodes: " + f.RotationQty.ToString();
                RhinoApp.WriteLine(createThese);
                if (f.LinearQty > 0)
                {
                    string linBase  = dirPath + "\\Linear_Base.3dm";
                    string linGlide = dirPath + "\\Linear_Glide.3dm";

                    for (int i = 0; i < f.LinearQty; i++)
                    {
                        if (i == 0)
                        {
                            RhinoApp.RunScript("-Insert \"" + dirPath + "\\Linear_Base.3dm\" _Block 0,0,0 _Enter _Enter", true);
                            Rhino.DocObjects.RhinoObject    ro      = doc.Objects.MostRecentObject();
                            Rhino.DocObjects.InstanceObject instObj = ro as Rhino.DocObjects.InstanceObject;
                            if (instObj != null)
                            {
                                instObj.Attributes.SetUserString("NodeID", partChars.Substring(i, 1));
                                instObj.Attributes.SetUserString("Travel", (300 * inverse_scale).ToString());
                            }
                            RhinoApp.RunScript("-Insert \"" + dirPath + "\\Linear_Glide.3dm\" _Block 0,0,0 _Enter _Enter", true);
                            ro      = doc.Objects.MostRecentObject();
                            instObj = ro as Rhino.DocObjects.InstanceObject;
                            if (instObj != null)
                            {
                                instObj.Attributes.SetUserString("NodeID", partChars.Substring(i, 1));
                            }
                        }
                        else
                        {
                            RhinoApp.RunScript("-Insert Linear_Base _Block 0," + (i * 150 * inverse_scale).ToString() + " _Enter _Enter", true);
                            Rhino.DocObjects.RhinoObject    ro      = doc.Objects.MostRecentObject();
                            Rhino.DocObjects.InstanceObject instObj = ro as Rhino.DocObjects.InstanceObject;
                            if (instObj != null)
                            {
                                instObj.Attributes.SetUserString("NodeID", partChars.Substring(i, 1));
                                instObj.Attributes.SetUserString("Travel", (300 * scale).ToString());
                            }
                            RhinoApp.RunScript("-Insert Linear_Glide _Block 0," + (i * 150 * scale).ToString() + " _Enter _Enter", true);
                            ro      = doc.Objects.MostRecentObject();
                            instObj = ro as Rhino.DocObjects.InstanceObject;
                            if (instObj != null)
                            {
                                instObj.Attributes.SetUserString("NodeID", partChars.Substring(i, 1));
                            }
                        }
                    }
                }
            }
            else
            {
                RhinoApp.WriteLine("did not click OK");
            }
            // ---
            return(Result.Success);
        }
Beispiel #3
0
        protected override Result RunCommand(RhinoDoc doc, RunMode mode)
        {
            //pick surface to orient to or block instance to relocate
            GetObject gs = new Rhino.Input.Custom.GetObject();

            gs.SetCommandPrompt("Surface to orient new object on or BlockInstance to move");
            gs.GeometryFilter              = Rhino.DocObjects.ObjectType.Surface | Rhino.DocObjects.ObjectType.InstanceReference;
            gs.SubObjectSelect             = true;
            gs.DeselectAllBeforePostSelect = false;
            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);
            }
            surface = objref.Surface();


            //relocate block instance
            if (surface == null)
            {
                Rhino.DocObjects.InstanceObject instance1 = objref.Object() as Rhino.DocObjects.InstanceObject;

                instancePoint = instance1.InsertionPoint;
                double g, h;
                surface2.ClosestPoint(instancePoint, out g, out h);
                var instanceDirection = surface2.NormalAt(g, h);
                instancePlane = new Plane(instancePoint, instanceDirection);

                Rhino.Input.Custom.GetPoint gpss = new Rhino.Input.Custom.GetPoint();
                gpss.SetCommandPrompt("Point on surface to orient to");
                gpss.Constrain(surface2, false);

                gpss.DynamicDraw += RefObjDraw;
                gpss.Tag          = instance1;

                gpss.Get();
                if (gpss.CommandResult() != Rhino.Commands.Result.Success)
                {
                    return(gpss.CommandResult());
                }
                Point3d ptss = gpss.Point();
                surface2.ClosestPoint(ptss, out g, out h);
                var       direction1 = surface2.NormalAt(g, h);
                Plane     pl11       = new Plane(ptss, direction1);
                Transform iform      = Rhino.Geometry.Transform.PlaneToPlane(instancePlane, pl11);
                doc.Objects.Transform(instance1, iform, true);

                return(Result.Success);
            }

            obj.Select(false);

            //pick objekt to orient
            var copy = new Rhino.Input.Custom.OptionToggle(false, "No", "Yes");

            GetObject go = new GetObject();

            go.SetCommandPrompt("Select object to orient.");
            go.AddOptionToggle("Copy", ref copy);
            go.SubObjectSelect             = true;
            go.DeselectAllBeforePostSelect = false;
            go.GroupSelect = true;

            for (; ;)
            {
                var res = go.GetMultiple(1, -1);
                if (gs.CommandResult() != Result.Success)
                {
                    return(gs.CommandResult());
                }
                if (res == GetResult.Option)
                {
                    copyBol = copy.CurrentValue;
                    continue;
                }
                if (gs.CommandResult() != Result.Success)
                {
                    return(gs.CommandResult());
                }

                break;
            }



            int    obCount      = go.ObjectCount;
            string instDefCount = DateTime.Now.ToString("ddMMyyyyHHmmss");

            //create block instance and plane for instance
            Rhino.Input.Custom.GetPoint gp = new Rhino.Input.Custom.GetPoint();
            gp.SetCommandPrompt("Point to orient from");
            gp.Get();
            if (gp.CommandResult() != Rhino.Commands.Result.Success)
            {
                return(gp.CommandResult());
            }

            Vector3d vt1 = new Vector3d(0, 0, 1);
            Point3d  pt1 = gp.Point();

            sourcePlane = new Plane(pt1, vt1);
            Plane     originPlane = new Plane(Point3d.Origin, vt1);
            Transform bform       = Rhino.Geometry.Transform.PlaneToPlane(sourcePlane, originPlane);

            //block instance
            GeometryBase[] obj1List = new GeometryBase[obCount];
            List <Brep>    opList   = new List <Brep>();

            for (int igo = 0; igo < obCount; igo++)
            {
                Rhino.DocObjects.ObjRef      objref1 = go.Object(igo);
                Rhino.DocObjects.RhinoObject obj1    = objref1.Object();
                if (obj == null)
                {
                    return(Result.Failure);
                }
                obj.Select(false);


                Rhino.Geometry.Brep opItem = objref1.Brep();
                opList.Add(opItem);

                GeometryBase obj1Base = obj1.Geometry;
                obj1Base.Transform(bform);

                obj1List[igo] = obj1Base;
            }

            var orientBlock = doc.InstanceDefinitions.Add("Block" + instDefCount, "OrientBlock", Point3d.Origin, obj1List);

            //get all go.Objects to .Tag
            Brep[] op = new Brep[obCount];
            op = Brep.CreateBooleanUnion(opList, 0.01);
            Brep od = new Brep();

            od = op[0];
            var odGuid = doc.Objects.AddBrep(od);

            Rhino.DocObjects.ObjRef      objref2 = new Rhino.DocObjects.ObjRef(odGuid);
            Rhino.DocObjects.RhinoObject objDrw  = objref2.Object();

            //orient plane to surface
            if (copyBol)
            {
                while (true)
                {
                    Rhino.Input.Custom.GetPoint gps = new Rhino.Input.Custom.GetPoint();
                    gps.SetCommandPrompt("Point on surface to orient to. Press enter when done.");
                    gps.Constrain(surface, false);
                    gps.AcceptNothing(true);
                    gps.DynamicDraw += RefObjDraw;
                    gps.Tag          = objDrw;

                    var res = gps.Get();

                    if (res == GetResult.Nothing)
                    {
                        break;
                    }
                    //else if (gps.CommandResult() != Rhino.Commands.Result.Success)
                    //    return gps.CommandResult();


                    Point3d pts = gps.Point();
                    double  u, v;
                    surface.ClosestPoint(pts, out u, out v);
                    Vector3d direction = surface.NormalAt(u, v);
                    Plane    pl1       = new Plane(pts, direction);

                    Rhino.Geometry.Transform xform = Rhino.Geometry.Transform.PlaneToPlane(originPlane, pl1);

                    doc.Objects.AddInstanceObject(orientBlock, xform);

                    doc.Objects.Delete(objDrw);
                }
                copyBol = false;
            }
            else
            {
                Rhino.Input.Custom.GetPoint gps = new Rhino.Input.Custom.GetPoint();
                gps.SetCommandPrompt("Point on surface to orient to");
                gps.Constrain(surface, false);

                gps.DynamicDraw += RefObjDraw;
                gps.Tag          = objDrw;

                gps.Get();
                if (gps.CommandResult() != Rhino.Commands.Result.Success)
                {
                    return(gps.CommandResult());
                }
                Point3d pts = gps.Point();
                double  u, v;
                surface.ClosestPoint(pts, out u, out v);
                Vector3d direction = surface.NormalAt(u, v);
                Plane    pl1       = new Plane(pts, direction);

                Rhino.Geometry.Transform xform = Rhino.Geometry.Transform.PlaneToPlane(originPlane, pl1);

                doc.Objects.AddInstanceObject(orientBlock, xform);

                doc.Objects.Delete(objDrw);
            }

            surface2 = surface;

            return(Result.Success);
        }
        protected override Result RunCommand(RhinoDoc doc, RunMode mode)
        {
            // Pick The First Block
            const Rhino.DocObjects.ObjectType filter = Rhino.DocObjects.ObjectType.InstanceReference;

            Rhino.DocObjects.ObjRef         objRef;
            Rhino.DocObjects.InstanceObject primary = null;
            Result r = RhinoGet.GetOneObject("Select a Control Block", false, filter, out objRef);

            if (r == Result.Success)
            {
                primary = objRef.Object() as Rhino.DocObjects.InstanceObject;
            }
            if (primary != null)
            {
                RhinoApp.WriteLine("Primary: " + primary.InstanceDefinition.Name);
            }
            doc.Objects.UnselectAll();
            Rhino.DocObjects.ObjRef         objRef2;
            Rhino.DocObjects.InstanceObject secondary = null;
            Result r2 = RhinoGet.GetOneObject("Select a Secondary Block", false, filter, out objRef2);

            if (r2 == Result.Success)
            {
                secondary = objRef2.Object() as Rhino.DocObjects.InstanceObject;
            }
            if (secondary != null)
            {
                RhinoApp.WriteLine("Secondary: " + secondary.InstanceDefinition.Name);
            }
            doc.Objects.UnselectAll();

            if (primary == null || secondary == null)
            {
                return(Result.Nothing);
            }

            // Now assign the NodeID of the secondary block to the primary.
            string id = secondary.Attributes.GetUserString("NodeID");

            if (string.IsNullOrEmpty(id))
            {
                return(Result.Nothing);
            }

            string constraints = primary.Attributes.GetUserString("Constraints");

            if (string.IsNullOrWhiteSpace(constraints))
            {
                constraints = id;
            }
            else
            {
                constraints += "," + id;
            }


            primary.Attributes.SetUserString("Constraints", constraints);

            return(Result.Success);
        }