public static Rhino.Commands.Result ShowSurfaceDirection(Rhino.RhinoDoc doc) { Rhino.DocObjects.ObjRef objref; var rc = Rhino.Input.RhinoGet.GetOneObject("Select surface or polysurface for direction display", false, Rhino.DocObjects.ObjectType.Surface | Rhino.DocObjects.ObjectType.PolysrfFilter, out objref); if (rc != Rhino.Commands.Result.Success) { return(rc); } var brep = objref.Brep(); if (brep == null) { return(Rhino.Commands.Result.Failure); } bool bIsSolid = brep.IsSolid; TestSurfaceDirConduit conduit = new TestSurfaceDirConduit(brep); conduit.Enabled = true; doc.Views.Redraw(); var gf = new Rhino.Input.Custom.GetOption(); gf.SetCommandPrompt("Press enter when done"); gf.AcceptNothing(true); if (!bIsSolid) { gf.AddOption("Flip"); } for (; ;) { var res = gf.Get(); if (res == Rhino.Input.GetResult.Option) { conduit.Flip = !conduit.Flip; doc.Views.Redraw(); continue; } if (res == Rhino.Input.GetResult.Nothing) { if (!bIsSolid && conduit.Flip) { brep.Flip(); doc.Objects.Replace(objref, brep); } } break; } conduit.Enabled = false; doc.Views.Redraw(); return(Rhino.Commands.Result.Success); }
// The following example code demonstrates how to modify advanced display settings using // the Rhino SDK. In this example, a display mode's mesh wireframe thickness (in pixels) // will be modified. public static Rhino.Commands.Result AdvancedDisplay(Rhino.RhinoDoc doc) { // Use the display attributes manager to build a list of display modes. // Note, these are copies of the originals... DisplayModeDescription[] display_modes = DisplayModeDescription.GetDisplayModes(); if( display_modes==null || display_modes.Length<1 ) return Rhino.Commands.Result.Failure; // Construct an options picker so the user can pick which // display mode they want modified Rhino.Input.Custom.GetOption go = new Rhino.Input.Custom.GetOption(); go.SetCommandPrompt("Display mode to modify mesh thickness"); List<int> opt_list = new List<int>(); for( int i=0; i<display_modes.Length; i++ ) { string english_name = display_modes[i].EnglishName; english_name = english_name.Replace("_", ""); english_name = english_name.Replace(" ", ""); english_name = english_name.Replace("-", ""); english_name = english_name.Replace(",", ""); english_name = english_name.Replace(".", ""); int index = go.AddOption(english_name); opt_list.Add(index); } // Get the command option go.Get(); if( go.CommandResult() != Rhino.Commands.Result.Success ) return go.CommandResult(); int selected_index = go.Option().Index; DisplayModeDescription selected_description = null; for( int i=0; i<opt_list.Count; i++ ) { if( opt_list[i]==selected_index ) { selected_description = display_modes[i]; break; } } // Validate... if( selected_description==null ) return Rhino.Commands.Result.Failure; // Modify the desired display mode. In this case, we // will just set the mesh wireframe thickness to zero. selected_description.DisplayAttributes.MeshSpecificAttributes.MeshWireThickness = 0; // Use the display attributes manager to update the display mode. DisplayModeDescription.UpdateDisplayMode(selected_description); // Force the document to regenerate. doc.Views.Redraw(); return Rhino.Commands.Result.Success; }
/// <summary> /// Called by Rhino when the user wants to run this command. /// </summary> protected override Result RunCommand(RhinoDoc doc, RunMode mode) { System.Guid panelId = SampleCsWpfPanelHost.PanelId; bool bVisible = Rhino.UI.Panels.IsPanelVisible(panelId); string prompt = (bVisible) ? "Sample panel is visible. New value" : "Sample Manager panel is hidden. New value"; Rhino.Input.Custom.GetOption go = new Rhino.Input.Custom.GetOption(); int hide_index = go.AddOption("Hide"); int show_index = go.AddOption("Show"); int toggle_index = go.AddOption("Toggle"); go.Get(); if (go.CommandResult() != Rhino.Commands.Result.Success) { return(go.CommandResult()); } Rhino.Input.Custom.CommandLineOption option = go.Option(); if (null == option) { return(Rhino.Commands.Result.Failure); } int index = option.Index; if (index == hide_index) { if (bVisible) { Rhino.UI.Panels.ClosePanel(panelId); } } else if (index == show_index) { if (!bVisible) { Rhino.UI.Panels.OpenPanel(panelId); } } else if (index == toggle_index) { if (bVisible) { Rhino.UI.Panels.ClosePanel(panelId); } else { Rhino.UI.Panels.OpenPanel(panelId); } } return(Result.Success); }
public static Rhino.Commands.Result ObjectDisplayMode(Rhino.RhinoDoc doc) { const ObjectType filter = ObjectType.Mesh | ObjectType.Brep; ObjRef objref; Result rc = Rhino.Input.RhinoGet.GetOneObject("Select mesh or surface", true, filter, out objref); if (rc != Rhino.Commands.Result.Success) { return(rc); } Guid viewportId = doc.Views.ActiveView.ActiveViewportID; ObjectAttributes attr = objref.Object().Attributes; if (attr.HasDisplayModeOverride(viewportId)) { RhinoApp.WriteLine("Removing display mode override from object"); attr.RemoveDisplayModeOverride(viewportId); } else { Rhino.Display.DisplayModeDescription[] modes = Rhino.Display.DisplayModeDescription.GetDisplayModes(); Rhino.Display.DisplayModeDescription mode = null; if (modes.Length == 1) { mode = modes[0]; } else { Rhino.Input.Custom.GetOption go = new Rhino.Input.Custom.GetOption(); go.SetCommandPrompt("Select display mode"); string[] str_modes = new string[modes.Length]; for (int i = 0; i < modes.Length; i++) { str_modes[i] = modes[i].EnglishName.Replace(" ", "").Replace("-", ""); } go.AddOptionList("DisplayMode", str_modes, 0); if (go.Get() == Rhino.Input.GetResult.Option) { mode = modes[go.Option().CurrentListOptionIndex]; } } if (mode == null) { return(Rhino.Commands.Result.Cancel); } attr.SetDisplayModeOverride(mode, viewportId); } doc.Objects.ModifyAttributes(objref, attr, false); doc.Views.Redraw(); return(Rhino.Commands.Result.Success); }
public static Rhino.Commands.Result ShowSurfaceDirection(Rhino.RhinoDoc doc) { Rhino.DocObjects.ObjRef objref; var rc = Rhino.Input.RhinoGet.GetOneObject("Select surface or polysurface for direction display", false, Rhino.DocObjects.ObjectType.Surface | Rhino.DocObjects.ObjectType.PolysrfFilter, out objref); if (rc != Rhino.Commands.Result.Success) return rc; var brep = objref.Brep(); if (brep == null) return Rhino.Commands.Result.Failure; bool bIsSolid = brep.IsSolid; TestSurfaceDirConduit conduit = new TestSurfaceDirConduit(brep); conduit.Enabled = true; doc.Views.Redraw(); var gf = new Rhino.Input.Custom.GetOption(); gf.SetCommandPrompt("Press enter when done"); gf.AcceptNothing(true); if (!bIsSolid) gf.AddOption("Flip"); for (; ; ) { var res = gf.Get(); if (res == Rhino.Input.GetResult.Option) { conduit.Flip = !conduit.Flip; doc.Views.Redraw(); continue; } if (res == Rhino.Input.GetResult.Nothing) { if (!bIsSolid && conduit.Flip) { brep.Flip(); doc.Objects.Replace(objref, brep); } } break; } conduit.Enabled = false; doc.Views.Redraw(); return Rhino.Commands.Result.Success; }
protected override Result RunCommand(RhinoDoc doc, RunMode mode) { System.Guid panelId = PanelTestUserControl.PanelId; bool bVisible = Rhino.UI.Panels.IsPanelVisible(panelId); string prompt = (bVisible) ? "Sample panel is visible. New value" : "Sample Manager panel is hidden. New value"; Rhino.Input.Custom.GetOption go = new Rhino.Input.Custom.GetOption(); int hide_index = go.AddOption("Hide"); int show_index = go.AddOption("Show"); int toggle_index = go.AddOption("Toggle"); go.Get(); if (go.CommandResult() != Rhino.Commands.Result.Success) return go.CommandResult(); Rhino.Input.Custom.CommandLineOption option = go.Option(); if (null == option) return Rhino.Commands.Result.Failure; int index = option.Index; if (index == hide_index) { if (bVisible) Rhino.UI.Panels.ClosePanel(panelId); } else if (index == show_index) { if (!bVisible) Rhino.UI.Panels.OpenPanel(panelId); } else if (index == toggle_index) { if (bVisible) Rhino.UI.Panels.ClosePanel(panelId); else Rhino.UI.Panels.OpenPanel(panelId); } return Rhino.Commands.Result.Success; }
public static Rhino.Commands.Result ObjectDisplayMode(Rhino.RhinoDoc doc) { Rhino.Commands.Result rc = Rhino.Commands.Result.Cancel; ObjectType filter = ObjectType.Mesh | ObjectType.Brep; ObjRef objref; rc = Rhino.Input.RhinoGet.GetOneObject("Select mesh or surface", true, filter, out objref); if (rc != Rhino.Commands.Result.Success) return rc; Guid viewportId = doc.Views.ActiveView.ActiveViewportID; ObjectAttributes attr = objref.Object().Attributes; if (attr.HasDisplayModeOverride(viewportId)) { RhinoApp.WriteLine("Removing display mode override from object"); attr.RemoveDisplayModeOverride(viewportId); } else { Rhino.Display.DisplayModeDescription[] modes = Rhino.Display.DisplayModeDescription.GetDisplayModes(); Rhino.Display.DisplayModeDescription mode = null; if (modes.Length == 1) mode = modes[0]; else { Rhino.Input.Custom.GetOption go = new Rhino.Input.Custom.GetOption(); go.SetCommandPrompt("Select display mode"); string[] str_modes = new string[modes.Length]; for (int i = 0; i < modes.Length; i++) str_modes[i] = modes[i].EnglishName.Replace(" ", "").Replace("-", ""); go.AddOptionList("DisplayMode", str_modes, 0); if (go.Get() == Rhino.Input.GetResult.Option) mode = modes[go.Option().CurrentListOptionIndex]; } if (mode == null) return Rhino.Commands.Result.Cancel; attr.SetDisplayModeOverride(mode, viewportId); } doc.Objects.ModifyAttributes(objref, attr, false); doc.Views.Redraw(); return Rhino.Commands.Result.Success; }
protected override Result RunCommand(RhinoDoc doc, RunMode mode) { var enabled = EventHandlers.Instance.IsEnabled; var prompt = enabled ? "Equal area transform mode is enabled." : "Equal area transform mode is disabled."; var go = new GetOption(); go.SetCommandPrompt(prompt); go.AcceptNothing(true); var d_option = go.AddOption("Disable"); var e_option = go.AddOption("Enable"); var res = go.Get(); if (res == GetResult.Nothing) return Result.Success; if (res != GetResult.Option) return Result.Cancel; var option = go.Option(); if (null == option) return Result.Failure; if (d_option == option.Index) { if (enabled) { EventHandlers.Instance.Enable(false); } } else if (e_option == option.Index) { if (!enabled) { EventHandlers.Instance.Enable(true); } } return Result.Success; }
protected override Result RunCommand(RhinoDoc doc, RunMode mode) { var pack_algorithm = PackingAlgorithm.Fast; Point3d base_point = new Point3d(); var option_count = new OptionInteger(100, true, 2); var option_min_radius = new OptionDouble(0.1, true, 0.001); var option_max_radius = new OptionDouble(1.0, true, 0.001); var option_iterations = new OptionInteger(10000, false, 100); bool done_looping = false; while (!done_looping) { var gp = new GetPoint(); gp.SetCommandPrompt("Center of fitting solution"); gp.AddOptionInteger("Count", ref option_count); gp.AddOptionDouble("MinRadius", ref option_min_radius); gp.AddOptionDouble("MaxRadius", ref option_max_radius); gp.AddOptionInteger("IterationLimit", ref option_iterations); int index_option_packing = gp.AddOption("Packing", pack_algorithm.ToString()); gp.AcceptNumber(true, true); switch( gp.Get() ) { case GetResult.Point: base_point = gp.Point(); done_looping = true; break; case GetResult.Option: if (index_option_packing == gp.OptionIndex()) { var get_algorithm = new GetOption(); get_algorithm.SetCommandPrompt("Packing"); get_algorithm.SetDefaultString(pack_algorithm.ToString()); var opts = new string[]{"Fast", "Double", "Random", "Simple"}; int current_index = 0; switch(pack_algorithm) { case PackingAlgorithm.Fast: current_index = 0; break; case PackingAlgorithm.Double: current_index = 1; break; case PackingAlgorithm.Random: current_index = 2; break; case PackingAlgorithm.Simple: current_index = 3; break; } int index_list = get_algorithm.AddOptionList("algorithm", opts, current_index); get_algorithm.AddOption("Help"); while( get_algorithm.Get() == GetResult.Option ) { if (index_list == get_algorithm.OptionIndex()) { int index = get_algorithm.Option().CurrentListOptionIndex; if (0 == index) pack_algorithm = PackingAlgorithm.Fast; if (1 == index) pack_algorithm = PackingAlgorithm.Double; if (2 == index) pack_algorithm = PackingAlgorithm.Simple; if (3 == index) pack_algorithm = PackingAlgorithm.Random; break; } // if we get here, the user selected help const string help = @"Fast: fast packing prevents collisions by moving one circle away from all its intersectors. After every collision iteration, all circles are moved towards the centre of the packing to reduce the amount of wasted space. Collision detection proceeds from the center outwards. Double: similar to Fast, except that both circles are moved in case of a collision. Random: similar to Fast, except that collision detection is randomized rather than sorted. Simple: similar to Fast, but without a contraction pass after every collision iteration."; Rhino.UI.Dialogs.ShowMessageBox(help, "Packing algorithm description", System.Windows.Forms.MessageBoxButtons.OK, System.Windows.Forms.MessageBoxIcon.Information); } } break; default: return Result.Cancel; } } int count = option_count.CurrentValue; double min_radius = option_min_radius.CurrentValue; double max_radius = option_max_radius.CurrentValue; int iterations = option_iterations.CurrentValue; // TODO: try setting up a background worker thread and // communicate with the GetString through messages //GetString gs = new GetString(); //gs.SetCommandPrompt("Press escape to cancel"); using (var all_circles = new PackCircles(base_point, count, min_radius, max_radius)) { double damping = 0.1; for (int i = 1; i <= iterations; i++) { RhinoApp.SetCommandPrompt(string.Format("Performing circle packing iteration {0}... (Press Shift+Ctrl to abort)", i)); if (System.Windows.Forms.Control.ModifierKeys == (System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.Shift)) { RhinoApp.WriteLine("Circle fitting process aborted at iteration {0}...", i); break; } if (!all_circles.Pack(pack_algorithm, damping, doc.ModelAbsoluteTolerance)) { RhinoApp.WriteLine("Circle fitting process completed at iteration {0}...", i); break; } damping *= 0.98; doc.Views.Redraw(); RhinoApp.Wait(); } all_circles.Add(doc); } doc.Views.Redraw(); return Result.Success; }
public static Result ConduitArrowHeads(RhinoDoc doc) { if (m_draw_conduit != null) { RhinoApp.WriteLine("Turn off existing arrowhead conduit"); m_draw_conduit.Enabled = false; m_draw_conduit = null; } else { // get arrow head size var go = new GetOption(); go.SetCommandPrompt("ArrowHead length in screen size (pixels) or world size (percentage of arrow length)?"); go.AddOption("screen"); go.AddOption("world"); go.Get(); if (go.CommandResult() != Result.Success) return go.CommandResult(); int screen_size = 0; double world_size = 0.0; if (go.Option().EnglishName == "screen") { var gi = new GetInteger(); gi.SetLowerLimit(0, true); gi.SetCommandPrompt("Length of arrow head in pixels"); gi.Get(); if (gi.CommandResult() != Result.Success) return gi.CommandResult(); screen_size = gi.Number(); } else { var gi = new GetInteger(); gi.SetLowerLimit(0, true); gi.SetUpperLimit(100, false); gi.SetCommandPrompt("Length of arrow head in percentage of total arrow length"); gi.Get(); if (gi.CommandResult() != Result.Success) return gi.CommandResult(); world_size = gi.Number() / 100.0; } // get arrow start and end points var gp = new GetPoint(); gp.SetCommandPrompt("Start of line"); gp.Get(); if (gp.CommandResult() != Result.Success) return gp.CommandResult(); var start_point = gp.Point(); gp.SetCommandPrompt("End of line"); gp.SetBasePoint(start_point, false); gp.DrawLineFromPoint(start_point, true); gp.Get(); if (gp.CommandResult() != Result.Success) return gp.CommandResult(); var end_point = gp.Point(); var v = end_point - start_point; if (v.IsTiny(Rhino.RhinoMath.ZeroTolerance)) return Result.Nothing; var line = new Line(start_point, end_point); m_draw_conduit = new DrawArrowHeadsConduit(line, screen_size, world_size); // toggle conduit on/off m_draw_conduit.Enabled = true; RhinoApp.WriteLine("Draw arrowheads conduit enabled."); } doc.Views.Redraw(); return Result.Success; }
protected override Result RunCommand(RhinoDoc doc, RunMode mode) { // --- Set tolerance _unit = doc.ModelAbsoluteTolerance; // --- Get Mesh var getMesh = new GetObject { GeometryFilter = ObjectType.Mesh }; getMesh.SetCommandPrompt("Select mesh"); while (true) { var getMeshResult = getMesh.Get(); if (getMesh.CommandResult() != Result.Success) return getMesh.CommandResult(); if (getMeshResult == GetResult.Object) break; } _mesh = (Mesh)getMesh.Object(0).Geometry(); doc.Objects.UnselectAll(); // --- Start preview DisplayPipeline.DrawOverlay += DisplayPipelineOnDrawOverlay; // --- Get options var getOptions = new GetOption(); getOptions.SetCommandPrompt("Settings:"); getOptions.AddOptionInteger("CountX", ref _countX); getOptions.AddOptionInteger("CountY", ref _countY); getOptions.AddOptionDouble("Thickness", ref _thickness); getOptions.AddOption("Plane"); getOptions.AddOptionDouble("Deeper", ref _deeper); getOptions.AddOptionToggle("DeleteInput", ref _deleteSource); getOptions.AddOptionToggle("Project", ref _project); getOptions.AddOptionDouble("ProjectSpace", ref _projectSpace); getOptions.AcceptNothing(true); do { doc.Views.Redraw(); getOptions.Get(); switch (getOptions.Result()) { case GetResult.Option: switch (getOptions.Option().EnglishName) { case "Plane": _plane = PlaneGetter.GetPlane() ?? _plane; break; } break; } } while (getOptions.CommandResult() == Result.Success && getOptions.Result() != GetResult.Nothing); // --- Stop preview DisplayPipeline.DrawOverlay -= DisplayPipelineOnDrawOverlay; // --- Check for cancel with ESC if (getOptions.Result() == GetResult.Cancel) return Result.Cancel; // --- Execute var result = Waffle.Create(_mesh, _plane, _thickness.CurrentValue, _deeper.CurrentValue, _countX.CurrentValue, _countY.CurrentValue, _unit, _project.CurrentValue, _projectSpace.CurrentValue); // --- Add objects foreach (var curves in result.CurvesX) doc.Groups.Add(curves.Select(o => doc.Objects.AddCurve(o))); foreach (var curves in result.CurvesY) doc.Groups.Add(curves.Select(o => doc.Objects.AddCurve(o))); // --- Delete input if (_deleteSource.CurrentValue) doc.Objects.Delete(getMesh.Object(0).ObjectId, true); // --- Update views doc.Views.Redraw(); return Result.Success; }
protected override Result RunCommand(RhinoDoc doc, RunMode mode) { double tolerance = doc.ModelAbsoluteTolerance; double angleTolerance = doc.ModelAngleToleranceRadians; List <Curve> icur = new List <Curve>(); GetObject gcr = new Rhino.Input.Custom.GetObject(); gcr.SetCommandPrompt("Select reference circles for prongs. (No curves)"); gcr.GeometryFilter = Rhino.DocObjects.ObjectType.Curve; gcr.GroupSelect = true; gcr.SubObjectSelect = true; gcr.DeselectAllBeforePostSelect = true; gcr.OneByOnePostSelect = false; gcr.GetMultiple(1, 0); for (int ie = 0; ie < gcr.ObjectCount; ie++) { Rhino.DocObjects.ObjRef objref = gcr.Object(ie); Rhino.DocObjects.RhinoObject obj = objref.Object(); if (obj == null) { return(Result.Failure); } Curve refcr = objref.Curve(); if (refcr == null) { return(Result.Failure); } obj.Select(false); icur.Add(refcr); } while (true) { m_escape_key_pressed = false; RhinoApp.EscapeKeyPressed += RhinoApp_EscapeKeyPressed; Point3d pt0 = new Point3d(0, 0, hight); Point3d pt1 = new Point3d(0, 0, -(length - hight)); double rotationRadiant = ((rotation / 180) * 3.1415); List <Point3d> curvePoints = new List <Point3d>() { pt0, pt1 }; Curve prongCurve = Curve.CreateInterpolatedCurve(curvePoints, 3); if (!capBool) { capMode = PipeCapMode.Flat; } else if (capBool) { capMode = PipeCapMode.Round; } Brep[] cylBrep1 = Brep.CreatePipe(prongCurve, prongDia / 2, false, capMode, false, tolerance, angleTolerance); Brep cylBrep2 = cylBrep1[0]; cylBrep2.Faces.RemoveAt(2); Brep cylBrep3 = cylBrep2.CapPlanarHoles(tolerance); if (capBool) { Vector3d scaleVec = new Vector3d(0, 0, 1); var scalePlane = new Plane(pt0, scaleVec); var capScale = Transform.Scale(scalePlane, 1.0, 1.0, capHight); var surf2 = cylBrep3.Faces[1].UnderlyingSurface(); NurbsSurface nurbSurf2 = surf2.ToNurbsSurface(); nurbSurf2.Transform(capScale); Brep capBrep = nurbSurf2.ToBrep(); cylBrep3.Append(capBrep); cylBrep3.Faces.RemoveAt(1); } cylBrep3.Compact(); cylBrep3.JoinNakedEdges(tolerance); string instDefCount = DateTime.Now.ToString("ddMMyyyyHHmmss"); Brep[] brepArray = new Brep[1] { cylBrep3 }; var prongIndex = doc.InstanceDefinitions.Add("Prong" + instDefCount, "RefProng", Point3d.Origin, brepArray); foreach (Curve c in icur) { Circle circleProngs = new Circle(); c.TryGetCircle(out circleProngs, tolerance); NurbsCurve curveProngs = circleProngs.ToNurbsCurve(); Plane planeNew = circleProngs.Plane; Vector3d plVec = planeNew.Normal; if (planeNew == null) { curveProngs.DivideByCount(3, true, out Point3d[] curveProngsPoints); planeNew = new Plane(curvePoints[0], curveProngsPoints[1], curveProngsPoints[2]); } Curve[] offsetCurveArray = curveProngs.Offset(planeNew, prongDia / 4, tolerance, CurveOffsetCornerStyle.Sharp); Curve offsetCurve = offsetCurveArray[0]; double[] segParameters = offsetCurve.DivideByCount(prongCount, true); List <Point3d> prongPoints = new List <Point3d>(); List <Guid> idsInter = new List <Guid>(); foreach (double p in segParameters) { Point3d zen = new Point3d(0, 0, 0); Point3d prongPoint = offsetCurve.PointAt(p); Point3d center = circleProngs.Center; Vector3d moveV = new Vector3d(prongPoint); Vector3d zaxis = new Vector3d(0.0, 0.0, 1.0); Plane planeOr = new Plane(zen, zaxis); Plane plane = new Plane(prongPoint, plVec); var transform1 = Transform.PlaneToPlane(planeOr, plane); var transform2 = Transform.Rotation(rotationRadiant, plVec, center); var prongA = doc.Objects.AddInstanceObject(prongIndex, transform1); var prongB = doc.Objects.Transform(prongA, transform2, true); ids.Add(prongB); } doc.Views.Redraw(); } GetOption go = new Rhino.Input.Custom.GetOption(); go.SetCommandPrompt("Set prong parameters."); go.AcceptNothing(true); var countProng = new Rhino.Input.Custom.OptionInteger(prongCount); var diaProng = new Rhino.Input.Custom.OptionDouble(prongDia); var hightProng = new Rhino.Input.Custom.OptionDouble(hight); var lengthProng = new Rhino.Input.Custom.OptionDouble(length); var rotProng = new Rhino.Input.Custom.OptionDouble(rotation); var capProng = new Rhino.Input.Custom.OptionToggle(capBool, "Flat", "Round"); var hightCap = new Rhino.Input.Custom.OptionDouble(capHight); go.AddOptionInteger("Count", ref countProng); go.AddOptionDouble("Diameter", ref diaProng); go.AddOptionDouble("Hight", ref hightProng); go.AddOptionDouble("Length", ref lengthProng); go.AddOptionDouble("Rotation", ref rotProng); go.AddOptionToggle("Cap", ref capProng); if (capBool) { go.AddOptionDouble("Caphight", ref hightCap); } GetResult res = go.Get(); if (m_escape_key_pressed) { break; } hight = hightProng.CurrentValue; length = lengthProng.CurrentValue; prongCount = countProng.CurrentValue; prongDia = diaProng.CurrentValue; rotation = rotProng.CurrentValue; capBool = capProng.CurrentValue; capHight = hightCap.CurrentValue; if (length <= 0.0) { length = 1.0; } if (prongCount <= 0) { prongCount = 1; } if (prongDia <= 0.0) { prongDia = 1.0; } if (res == GetResult.Nothing) { break; } doc.Objects.Delete(ids, true); } RhinoApp.EscapeKeyPressed -= RhinoApp_EscapeKeyPressed; doc.Groups.Add(ids); return(Result.Success); }
// The following example code demonstrates how to modify advanced display settings using // the Rhino SDK. In this example, a display mode's mesh wireframe thickness (in pixels) // will be modified. public static Rhino.Commands.Result AdvancedDisplay(Rhino.RhinoDoc doc) { // Use the display attributes manager to build a list of display modes. // Note, these are copies of the originals... DisplayModeDescription[] display_modes = DisplayModeDescription.GetDisplayModes(); if (display_modes == null || display_modes.Length < 1) { return(Rhino.Commands.Result.Failure); } // Construct an options picker so the user can pick which // display mode they want modified Rhino.Input.Custom.GetOption go = new Rhino.Input.Custom.GetOption(); go.SetCommandPrompt("Display mode to modify mesh thickness"); List <int> opt_list = new List <int>(); for (int i = 0; i < display_modes.Length; i++) { string english_name = display_modes[i].EnglishName; english_name = english_name.Replace("_", ""); english_name = english_name.Replace(" ", ""); english_name = english_name.Replace("-", ""); english_name = english_name.Replace(",", ""); english_name = english_name.Replace(".", ""); int index = go.AddOption(english_name); opt_list.Add(index); } // Get the command option go.Get(); if (go.CommandResult() != Rhino.Commands.Result.Success) { return(go.CommandResult()); } int selected_index = go.Option().Index; DisplayModeDescription selected_description = null; for (int i = 0; i < opt_list.Count; i++) { if (opt_list[i] == selected_index) { selected_description = display_modes[i]; break; } } // Validate... if (selected_description == null) { return(Rhino.Commands.Result.Failure); } // Modify the desired display mode. In this case, we // will just set the mesh wireframe thickness to zero. selected_description.DisplayAttributes.MeshSpecificAttributes.MeshWireThickness = 0; // Use the display attributes manager to update the display mode. DisplayModeDescription.UpdateDisplayMode(selected_description); // Force the document to regenerate. doc.Views.Redraw(); return(Rhino.Commands.Result.Success); }
protected override Result RunCommand(RhinoDoc doc, RunMode mode) { double tolerance = doc.ModelAbsoluteTolerance; List <Curve> icur = new List <Curve>(); GetObject gcr = new Rhino.Input.Custom.GetObject(); gcr.SetCommandPrompt("Select reference circles for drill. (No curves)"); gcr.GeometryFilter = Rhino.DocObjects.ObjectType.Curve; gcr.GroupSelect = true; gcr.SubObjectSelect = true; gcr.DeselectAllBeforePostSelect = true; gcr.OneByOnePostSelect = false; gcr.GetMultiple(1, 0); for (int ie = 0; ie < gcr.ObjectCount; ie++) { Rhino.DocObjects.ObjRef objref = gcr.Object(ie); Rhino.DocObjects.RhinoObject obj = objref.Object(); if (obj == null) { return(Result.Failure); } Curve refcr = objref.Curve(); if (refcr == null) { return(Result.Failure); } obj.Select(false); icur.Add(refcr); } while (true) { m_escape_key_pressed = false; RhinoApp.EscapeKeyPressed += RhinoApp_EscapeKeyPressed; List <Curve> curveDrill = new List <Curve>(); Point3d centerTop = new Point3d(0, 0, (headDrill + topDrill) * drillScale); Circle circleTop = new Circle(centerTop, ancheadDrill / 2 * drillScale); Curve curveTop = circleTop.ToNurbsCurve(); curveDrill.Add(curveTop); Point3d centerMid = new Point3d(0, 0, topDrill * drillScale); Circle circleMid = new Circle(centerMid, drillScale / 2); Curve curveMid = circleMid.ToNurbsCurve(); curveDrill.Add(curveMid); Circle circleBase = new Circle(drillScale / 2); Curve curveBase = circleBase.ToNurbsCurve(); curveDrill.Add(curveBase); Point3d centerLow = new Point3d(0, 0, -midDrill * drillScale); Circle circleLow = new Circle(centerLow, ancDrill / 2 * drillScale); Curve curveLow = circleLow.ToNurbsCurve(); curveDrill.Add(curveLow); if (bottDrill != 0) { Point3d centerBot = new Point3d(0, 0, (-midDrill - bottDrill) * drillScale); Circle circleBot = new Circle(centerBot, ancDrill / 2 * drillScale); Curve curveBot = circleBot.ToNurbsCurve(); curveDrill.Add(curveBot); } Brep[] cylBrep1 = Brep.CreateFromLoft(curveDrill, Point3d.Unset, Point3d.Unset, LoftType.Straight, false); Brep[] cylBrep2 = Brep.CreateBooleanUnion(cylBrep1, tolerance); Brep cylBrepFinal = cylBrep1[0]; cylBrepFinal = cylBrepFinal.CapPlanarHoles(tolerance); string instDefCount = DateTime.Now.ToString("ddMMyyyyHHmmss"); Brep[] brepArray = new Brep[1] { cylBrepFinal }; var drillIndex = doc.InstanceDefinitions.Add("Drill" + instDefCount, "RefDrill 1mm", Point3d.Origin, brepArray); foreach (Curve c in icur) { Circle circleDrill = new Circle(); c.TryGetCircle(out circleDrill, tolerance); double radiusDrill = circleDrill.Diameter; Point3d center = circleDrill.Center; Vector3d moveV = new Vector3d(center); Vector3d zaxis = new Vector3d(0.0, 0.0, 1.0); Plane planeOr = new Plane(center, zaxis); Plane planeNew = circleDrill.Plane; var transform1 = Transform.Translation(moveV); var transform2 = Transform.Scale(center, radiusDrill); var transform3 = Transform.PlaneToPlane(planeOr, planeNew); var stoneA = doc.Objects.AddInstanceObject(drillIndex, transform1); var stoneB = doc.Objects.Transform(stoneA, transform2, true); var stoneC = doc.Objects.Transform(stoneB, transform3, true); ids.Add(stoneC); doc.Views.Redraw(); } GetOption go = new Rhino.Input.Custom.GetOption(); go.SetCommandPrompt("Set drill parameters."); go.AcceptNothing(true); var drillHead = new Rhino.Input.Custom.OptionDouble(headDrill); var drillAncHead = new Rhino.Input.Custom.OptionDouble(ancheadDrill); var drillTop = new Rhino.Input.Custom.OptionDouble(topDrill); var drillMid = new Rhino.Input.Custom.OptionDouble(midDrill); var drillAnc = new Rhino.Input.Custom.OptionDouble(ancDrill); var drillBott = new Rhino.Input.Custom.OptionDouble(bottDrill); var scaleDrill = new Rhino.Input.Custom.OptionDouble(drillScale); go.AddOptionDouble("Top", ref drillHead); go.AddOptionDouble("TopAngle", ref drillAncHead); go.AddOptionDouble("Mid", ref drillTop); go.AddOptionDouble("Bottom", ref drillMid); go.AddOptionDouble("BottomAngle", ref drillAnc); go.AddOptionDouble("Tail", ref drillBott); go.AddOptionDouble("Scale", ref scaleDrill); GetResult res = go.Get(); if (m_escape_key_pressed) { break; } topDrill = drillTop.CurrentValue; midDrill = drillMid.CurrentValue; ancDrill = drillAnc.CurrentValue; bottDrill = drillBott.CurrentValue; drillScale = scaleDrill.CurrentValue; headDrill = drillHead.CurrentValue; ancheadDrill = drillAncHead.CurrentValue; if (res == GetResult.Nothing) { break; } doc.Objects.Delete(ids, true); } RhinoApp.EscapeKeyPressed -= RhinoApp_EscapeKeyPressed; doc.Groups.Add(ids); return(Result.Success); }
protected override Result RunCommand(RhinoDoc doc, RunMode mode) { var options = new GetOption(); options.SetCommandPrompt("Rhino-Pong"); var indexLevel = options.AddOption("Level"); var indexShowFps = options.AddOption("ShowFPS"); var indexSetFps = options.AddOption("SetFPS"); var indexSound = options.AddOption("Sound"); var indexReset = options.AddOption("Reset"); var indexExit = options.AddOption("Exit"); var levelOptions = new GetOption(); levelOptions.SetCommandPrompt("Select Level"); var indexLevelEasy = levelOptions.AddOption("Easy"); var indexLevelMedium = levelOptions.AddOption("Medium"); var indexLevelHard = levelOptions.AddOption("Hard"); var indexLevelImpossible = levelOptions.AddOption("Impossible"); var game = new Pong(); game.OnStopGame += (o, e) => RhinoApp.SendKeystrokes("!", true); game.StartGame(); while (true) { options.Get(); var slectedOption = options.Option(); if (slectedOption == null) break; if (slectedOption.Index == indexLevel) { levelOptions.Get(); if (levelOptions.Option() == null) break; var selectedLevelIndex = levelOptions.Option().Index; if (selectedLevelIndex == indexLevelEasy) { RhinoPong.Settings.IALevel = IALevel.Easy; } if (selectedLevelIndex == indexLevelMedium) { RhinoPong.Settings.IALevel = IALevel.Medium; } if (selectedLevelIndex == indexLevelHard) { RhinoPong.Settings.IALevel = IALevel.Hard; } if (selectedLevelIndex == indexLevelImpossible) { RhinoPong.Settings.IALevel = IALevel.Impossible; } } else if (slectedOption.Index == indexShowFps) { game.ShowFps = !game.ShowFps; } else if (slectedOption.Index == indexSetFps) { var fps = RhinoPong.Settings.Fps; var res = RhinoGet.GetNumber("Type FPS", true, ref fps); if (res == Result.Success) { RhinoPong.Settings.Fps = RhinoMath.Clamp(fps, 20, 500); } } else if (slectedOption.Index == indexSound) { game.SoundEnabled = !game.SoundEnabled; } else if (slectedOption.Index == indexReset) { game.ResetGame(); } else { break; } } game.StopGame(); return Result.Success; }