示例#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);
        }
示例#2
0
 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;
 }
示例#3
0
 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;
   }
 }
示例#4
0
 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);
    }