Example #1
0
        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();
       }
     }
   }
 }