protected override Result RunCommand(RhinoDoc doc, RunMode mode) { ObjRef[] objRefsA; // RhinoApp.WriteLine("Hi there!!"); var rc = RhinoGet.GetMultipleObjects("Select set of curves to Boolean (A)", false, ObjectType.Curve, out objRefsA); if (rc != Result.Success) { return(rc); } var getB = new Rhino.Input.Custom.GetObject(); getB.AcceptNothing(false); getB.GeometryFilter = ObjectType.Curve; getB.SetCommandPrompt("Select second set of curves to Boolean (B)"); getB.DisablePreSelect(); //<-- disable pre-selection on second get object var result = getB.GetMultiple(1, 0); if (result != GetResult.Object) { return(rc); } // Convert curves to polylines. Perhaps this should have more control? var curvesA = Polyline3D.ConvertCurvesToPolyline(objRefsA.Select(r => r.Curve())); var curvesB = Polyline3D.ConvertCurvesToPolyline(getB.Objects().Select(r => r.Curve())); if (_options == null) { _options = new PolylineBooleanOptions(); _options.Initialize(doc.ModelAbsoluteTolerance, mode.Equals(RunMode.Scripted)); _options.SetCommandPrompt("Select boolean type (click to toggle)"); _options.AcceptNothing(true); } _options.EnableTransparentCommands(true); _options.SetOriginalCurves(curvesA, curvesB); while (true) { var res = _options.Get(); RhinoApp.WriteLine(res.ToString()); if (res == GetResult.Point) { _options.ToggleBoolean(); } if (res == GetResult.Cancel) { return(_options.CommandResult()); } if (res == GetResult.Nothing) { break; } if (res == GetResult.Option) { // update the enum options _options.UpdateOptions(); _options.CalculateBoolean(); } } // deleselect all. doc.Objects.Select(doc.Objects.GetSelectedObjects(true, true).Select(obj => obj.Id), false); // return the offset var guids = _options.Results.Select(pl => doc.Objects.AddPolyline(pl)); doc.Objects.Select(guids); return(Result.Success); }
public static Commands.Result GetMultipleObjects(string prompt, bool acceptNothing, Rhino.DocObjects.ObjectType filter, out Rhino.DocObjects.ObjRef[] rhObjects) { rhObjects = null; Rhino.Input.Custom.GetObject go = new Rhino.Input.Custom.GetObject(); go.SetCommandPrompt(prompt); go.AcceptNothing(acceptNothing); go.GeometryFilter = filter; go.GetMultiple(1, 0); //David: changed this from GetMultiple(1, -1), which is a much rarer case (imo). Commands.Result rc = go.CommandResult(); if (rc == Rhino.Commands.Result.Success && go.ObjectCount > 0) { rhObjects = go.Objects(); } go.Dispose(); return rc; }
static Commands.Result GetGripsHelper(out Rhino.DocObjects.GripObject[] grips, string prompt, bool singleGrip) { grips = null; using (Rhino.Input.Custom.GetObject go = new Rhino.Input.Custom.GetObject()) { if (!string.IsNullOrEmpty(prompt)) go.SetCommandPrompt(prompt); go.SubObjectSelect = false; go.GeometryFilter = Rhino.DocObjects.ObjectType.Grip; go.GroupSelect = false; go.AcceptNothing(true); if (singleGrip) go.Get(); else go.GetMultiple(1, 0); Commands.Result rc = go.CommandResult(); if (Rhino.Commands.Result.Success == rc) { Rhino.DocObjects.ObjRef[] objrefs = go.Objects(); if (null != objrefs && objrefs.Length > 0) { System.Collections.Generic.List<Rhino.DocObjects.GripObject> griplist = new System.Collections.Generic.List<Rhino.DocObjects.GripObject>(); for (int i = 0; i < objrefs.Length; i++) { Rhino.DocObjects.ObjRef ob = objrefs[i]; if (null == ob) continue; Rhino.DocObjects.GripObject grip = ob.Object() as Rhino.DocObjects.GripObject; if (grip != null) griplist.Add(grip); ob.Dispose(); } if (griplist.Count > 0) grips = griplist.ToArray(); } } return rc; } }
public static Commands.Result GetOneObject(string prompt, bool acceptNothing, Rhino.DocObjects.ObjectType filter, out Rhino.DocObjects.ObjRef rhObject) { rhObject = null; Rhino.Input.Custom.GetObject go = new Rhino.Input.Custom.GetObject(); go.SetCommandPrompt(prompt); go.AcceptNothing(acceptNothing); go.GeometryFilter = filter; go.Get(); Commands.Result rc = go.CommandResult(); if (rc == Rhino.Commands.Result.Success && go.ObjectCount > 0) { rhObject = go.Object(0); } go.Dispose(); return rc; }
/// <summary> /// Select an object which will be used for the user text list /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void GetObjectForUserText(object sender, EventArgs e) { using (Rhino.Input.Custom.GetObject go = new Rhino.Input.Custom.GetObject()) { go.SetCommandPrompt(Rhino.UI.Localization.LocalizeString("Select object", 361)); go.AcceptNothing(true); go.DisablePreSelect(); go.Get(); if (go.CommandResult() == Rhino.Commands.Result.Success) { Rhino.DocObjects.ObjRef objref = go.Object(0); if (objref != null) { SelectedObjectId = objref.ObjectId; SetupSelectObjectPanelHelper(TextFieldType.usertext, false); objref.Dispose(); } } } }
/// <summary> /// Select an object for object name display /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void GetObjectForName(object sender, EventArgs e) { using (Rhino.Input.Custom.GetObject go = new Rhino.Input.Custom.GetObject()) { go.SetCommandPrompt(Rhino.UI.Localization.LocalizeString("Select object", 384)); go.AcceptNothing(true); go.SubObjectSelect = false; go.DisablePreSelect(); go.Get(); if (go.CommandResult() == Rhino.Commands.Result.Success) { Rhino.DocObjects.ObjRef objref = go.Object(0); if (objref != null) { SelectedObjectId = objref.ObjectId; objref.Dispose(); } } } }
/// <summary> /// Select object for which an area value can be calculated /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void GetObjectForArea(object sender, EventArgs e) { using (Rhino.Input.Custom.GetObject go = new Rhino.Input.Custom.GetObject()) { go.SetCommandPrompt(Rhino.UI.Localization.LocalizeString("Select closed curve, hatch, surface, or mesh", 359)); go.AcceptNothing(true); go.SubObjectSelect = false; go.GeometryFilter = Rhino.DocObjects.ObjectType.Curve | Rhino.DocObjects.ObjectType.Hatch | Rhino.DocObjects.ObjectType.Surface | Rhino.DocObjects.ObjectType.Brep | Rhino.DocObjects.ObjectType.Mesh; go.GeometryAttributeFilter = Rhino.Input.Custom.GeometryAttributeFilter.ClosedCurve; go.DisablePreSelect(); go.Get(); if (go.CommandResult() == Rhino.Commands.Result.Success) { Rhino.DocObjects.ObjRef objref = go.Object(0); if (objref != null) { SelectedObjectId = objref.ObjectId; objref.Dispose(); } } } }
public static Rhino.Commands.Result UnrollSurface(Rhino.RhinoDoc doc) { const ObjectType 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); }