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); }
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); }