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