public Rhino.Commands.Result GetPoints(Rhino.RhinoDoc doc) { // Input interval var input = new Rhino.Input.Custom.GetNumber(); // Select surface var go = new Rhino.Input.Custom.GetObject(); go.SetCommandPrompt("Select point"); go.GeometryFilter = Rhino.DocObjects.ObjectType.Point; go.GetMultiple(1, 1); Rhino.Geometry.Point pt = go.Object(0).Point(); Rhino.Geometry.Point3d pointA = pt.Location; go.SetCommandPrompt("Select surface"); go.GeometryFilter = Rhino.DocObjects.ObjectType.Surface; go.GetMultiple(1, 1); Rhino.Geometry.Surface surfaceB = go.Object(0).Surface(); double u, v; if (surfaceB.ClosestPoint(pointA, out u, out v)) { Rhino.Geometry.Point3d pointC = surfaceB.PointAt(u, v); Rhino.Geometry.Vector3d vector = pointA - pointC; // write list pointD } return(Rhino.Commands.Result.Success); }
protected override Result RunCommand(RhinoDoc doc, RunMode mode) { var go = new Rhino.Input.Custom.GetObject(); go.SetCommandPrompt("Select objects"); go.EnablePreSelect(true, true); go.EnablePostSelect(true); go.GetMultiple(0, 0); if (go.CommandResult() != Result.Success) return go.CommandResult(); var selected_objects = go.Objects().ToList(); if (go.ObjectsWerePreselected) { go.EnablePreSelect(false, true); go.DeselectAllBeforePostSelect = false; go.EnableUnselectObjectsOnExit(false); go.GetMultiple(0, 0); if (go.CommandResult() == Result.Success) { foreach (var obj in go.Objects()) { selected_objects.Add(obj); // The normal behavior of commands is that when they finish, // objects that were pre-selected remain selected and objects // that were post-selected will not be selected. Because we // potentially could have both, we'll try to do something // consistent and make sure post-selected objects also stay selected obj.Object().Select(true); } } } return selected_objects.Count > 0 ? Result.Success : Result.Nothing; }
public static Rhino.Commands.Result TweenCurve(Rhino.RhinoDoc doc) { Rhino.Input.Custom.GetObject go = new Rhino.Input.Custom.GetObject(); go.SetCommandPrompt("Select two curves"); go.GeometryFilter = Rhino.DocObjects.ObjectType.Curve; go.GetMultiple(2, 2); if (go.CommandResult() != Rhino.Commands.Result.Success) { return(go.CommandResult()); } Rhino.Geometry.Curve curve0 = go.Object(0).Curve(); Rhino.Geometry.Curve curve1 = go.Object(1).Curve(); if (null != curve0 && null != curve1) { Rhino.Geometry.Curve[] curves = Rhino.Geometry.Curve.CreateTweenCurves(curve0, curve1, 1); if (null != curves) { for (int i = 0; i < curves.Length; i++) { doc.Objects.AddCurve(curves[i]); } doc.Views.Redraw(); return(Rhino.Commands.Result.Success); } } return(Rhino.Commands.Result.Failure); }
protected override Result RunCommand(RhinoDoc doc, RunMode mode) { var go = new Rhino.Input.Custom.GetObject(); go.SetCommandPrompt("Select objects to copy in place"); go.GroupSelect = true; go.SubObjectSelect = false; go.GetMultiple(1, 0); if (go.CommandResult() != Result.Success) return go.CommandResult(); var xform = Transform.Identity; var group_map = new Dictionary<int, int>(); foreach (var obj_ref in go.Objects()) { if (obj_ref != null) { var obj = obj_ref.Object(); var duplicate = doc.Objects.Transform(obj_ref.ObjectId, xform, false); RhinoUpdateObjectGroups(ref obj, ref group_map); } } doc.Views.Redraw(); return Result.Success; }
public static Result CopyGroups(RhinoDoc doc) { var go = new Rhino.Input.Custom.GetObject(); go.SetCommandPrompt("Select objects to copy in place"); go.GroupSelect = true; go.SubObjectSelect = false; go.GetMultiple(1, 0); if (go.CommandResult() != Result.Success) { return(go.CommandResult()); } var xform = Transform.Identity; var group_map = new Dictionary <int, int>(); foreach (var obj_ref in go.Objects()) { if (obj_ref != null) { var obj = obj_ref.Object(); var duplicate = doc.Objects.Transform(obj_ref.ObjectId, xform, false); RhinoUpdateObjectGroups(ref obj, ref group_map); } } doc.Views.Redraw(); return(Result.Success); }
public static Rhino.Commands.Result CircleCenter(Rhino.RhinoDoc doc) { Rhino.Input.Custom.GetObject go = new Rhino.Input.Custom.GetObject(); go.SetCommandPrompt("Select objects"); go.GeometryFilter = Rhino.DocObjects.ObjectType.Curve; go.GeometryAttributeFilter = Rhino.Input.Custom.GeometryAttributeFilter.ClosedCurve; go.GetMultiple(1, 0); if( go.CommandResult() != Rhino.Commands.Result.Success ) return go.CommandResult(); Rhino.DocObjects.ObjRef[] objrefs = go.Objects(); if( objrefs==null ) return Rhino.Commands.Result.Nothing; double tolerance = doc.ModelAbsoluteTolerance; for( int i=0; i<objrefs.Length; i++ ) { // get the curve geometry Rhino.Geometry.Curve curve = objrefs[i].Curve(); if( curve==null ) continue; Rhino.Geometry.Circle circle; if( curve.TryGetCircle(out circle, tolerance) ) { Rhino.RhinoApp.WriteLine("Circle{0}: center = {1}", i+1, circle.Center); } } return Rhino.Commands.Result.Success; }
public static Rhino.Commands.Result AddObjectsToGroup(Rhino.RhinoDoc doc) { Rhino.Input.Custom.GetObject go = new Rhino.Input.Custom.GetObject(); go.SetCommandPrompt("Select objects to group"); go.GroupSelect = true; go.GetMultiple(1, 0); if (go.CommandResult() != Rhino.Commands.Result.Success) { return(go.CommandResult()); } List <Guid> ids = new List <Guid>(); for (int i = 0; i < go.ObjectCount; i++) { ids.Add(go.Object(i).ObjectId); } int index = doc.Groups.Add(ids); doc.Views.Redraw(); if (index >= 0) { return(Rhino.Commands.Result.Success); } return(Rhino.Commands.Result.Failure); }
public static Rhino.Commands.Result Sweep1(Rhino.RhinoDoc doc) { Rhino.DocObjects.ObjRef rail_ref; var rc = RhinoGet.GetOneObject("Select rail curve", false, Rhino.DocObjects.ObjectType.Curve, out rail_ref); if (rc != Rhino.Commands.Result.Success) { return(rc); } var rail_crv = rail_ref.Curve(); if (rail_crv == null) { return(Rhino.Commands.Result.Failure); } var gx = new Rhino.Input.Custom.GetObject(); gx.SetCommandPrompt("Select cross section curves"); gx.GeometryFilter = Rhino.DocObjects.ObjectType.Curve; gx.EnablePreSelect(false, true); gx.GetMultiple(1, 0); if (gx.CommandResult() != Rhino.Commands.Result.Success) { return(gx.CommandResult()); } var cross_sections = new List <Rhino.Geometry.Curve>(); for (int i = 0; i < gx.ObjectCount; i++) { var crv = gx.Object(i).Curve(); if (crv != null) { cross_sections.Add(crv); } } if (cross_sections.Count < 1) { return(Rhino.Commands.Result.Failure); } var sweep = new Rhino.Geometry.SweepOneRail(); sweep.AngleToleranceRadians = doc.ModelAngleToleranceRadians; sweep.ClosedSweep = false; sweep.SweepTolerance = doc.ModelAbsoluteTolerance; sweep.SetToRoadlikeTop(); var breps = sweep.PerformSweep(rail_crv, cross_sections); for (int i = 0; i < breps.Length; i++) { doc.Objects.AddBrep(breps[i]); } doc.Views.Redraw(); return(Rhino.Commands.Result.Success); }
protected override Rhino.Commands.Result RunCommand(RhinoDoc doc, Rhino.Commands.RunMode mode) { // Input interval var input = new Rhino.Input.Custom.GetNumber(); // Select surface var go = new Rhino.Input.Custom.GetObject(); go.SetCommandPrompt("Select points"); go.GeometryFilter = Rhino.DocObjects.ObjectType.Point; Rhino.Input.GetResult res = go.GetMultiple(1, 0); if (res == Rhino.Input.GetResult.Nothing) { return(Rhino.Commands.Result.Failure); } RhinoApp.WriteLine("Points {0} were selected", go.ObjectCount); try { SaveFileDialog dialog = new SaveFileDialog(); dialog.FileName = "PointFile.xyz"; dialog.Filter = "XYZ file|*.xyz|text file|*.txt"; dialog.Title = "Save point cloud file"; dialog.ShowDialog(); if (dialog.FileName == "") { return(Rhino.Commands.Result.Failure); } FileStream fileStream = (System.IO.FileStream)dialog.OpenFile(); // new FileStream(@"C:\Users\KTW\Documents\PointFile.xyz", FileMode.Create, FileAccess.Write); StreamWriter writer = new StreamWriter(fileStream); for (int i = 0; i < go.ObjectCount; i++) { Rhino.Geometry.Point pt = go.Object(i).Point(); Rhino.Geometry.Point3d pt3d = pt.Location; string text = pt3d.X + " " + pt3d.Y + " " + pt3d.Z; writer.WriteLine(text); } RhinoApp.WriteLine("File was saved"); fileStream.Close(); } catch (Exception e) { RhinoApp.WriteLine("{0}", e.Message); } return(Rhino.Commands.Result.Success); }
public static Rhino.Commands.Result IntersectLines(Rhino.RhinoDoc doc) { Rhino.Input.Custom.GetObject go = new Rhino.Input.Custom.GetObject(); go.SetCommandPrompt("Select lines"); go.GeometryFilter = Rhino.DocObjects.ObjectType.Curve; go.GetMultiple(2, 2); if (go.CommandResult() != Rhino.Commands.Result.Success) { return(go.CommandResult()); } if (go.ObjectCount != 2) { return(Rhino.Commands.Result.Failure); } LineCurve crv0 = go.Object(0).Geometry() as LineCurve; LineCurve crv1 = go.Object(1).Geometry() as LineCurve; if (crv0 == null || crv1 == null) { return(Rhino.Commands.Result.Failure); } Line line0 = crv0.Line; Line line1 = crv1.Line; Vector3d v0 = line0.Direction; v0.Unitize(); Vector3d v1 = line1.Direction; v1.Unitize(); if (v0.IsParallelTo(v1) != 0) { Rhino.RhinoApp.WriteLine("Selected lines are parallel."); return(Rhino.Commands.Result.Nothing); } double a, b; if (!Rhino.Geometry.Intersect.Intersection.LineLine(line0, line1, out a, out b)) { Rhino.RhinoApp.WriteLine("No intersection found."); return(Rhino.Commands.Result.Nothing); } Point3d pt0 = line0.PointAt(a); doc.Objects.AddPoint(pt0); doc.Views.Redraw(); return(Rhino.Commands.Result.Success); }
protected override Result RunCommand(RhinoDoc doc, RunMode mode) { var go = new Rhino.Input.Custom.GetObject(); go.SetCommandPrompt("Select objects"); go.EnablePreSelect(true, true); go.EnablePostSelect(true); go.GetMultiple(0, 0); if (go.CommandResult() != Result.Success) { return(go.CommandResult()); } var selected_objects = go.Objects().ToList(); if (go.ObjectsWerePreselected) { go.EnablePreSelect(false, true); go.DeselectAllBeforePostSelect = false; go.EnableUnselectObjectsOnExit(false); go.GetMultiple(0, 0); if (go.CommandResult() == Result.Success) { foreach (var obj in go.Objects()) { selected_objects.Add(obj); // The normal behavior of commands is that when they finish, // objects that were pre-selected remain selected and objects // that were post-selected will not be selected. Because we // potentially could have both, we'll try to do something // consistent and make sure post-selected objects also stay selected obj.Object().Select(true); } } } return(selected_objects.Count > 0 ? Result.Success : Result.Nothing); }
public Rhino.Commands.Result delete(Rhino.RhinoDoc doc) { // Input incomplate double _incomplate = 0.1; var input = new Rhino.Input.Custom.GetNumber(); input.SetCommandPrompt("Input incomplate(0.0 ~ 1.0)<0.1>"); Rhino.Input.GetResult res = input.Get(); if (res == Rhino.Input.GetResult.Number) { _incomplate = input.Number(); } if (_incomplate == 0.0) { _incomplate = 0.1; } // Select surface var go = new Rhino.Input.Custom.GetObject(); go.SetCommandPrompt("Select elements"); go.GeometryFilter = Rhino.DocObjects.ObjectType.Point; res = go.GetMultiple(1, 1024 * 10); if (res == Rhino.Input.GetResult.Nothing) { return(Rhino.Commands.Result.Failure); } System.Collections.Generic.List <Guid> list = new System.Collections.Generic.List <Guid>(); for (int i = 0; i < go.ObjectCount; i++) { Guid guid = go.Object(i).ObjectId; list.Add(guid); } int deleteCount = (int)((double)(list.Count) * _incomplate); Rhino.DocObjects.Tables.ObjectTable ot = Rhino.RhinoDoc.ActiveDoc.Objects; for (int i = 0; i < deleteCount; i++) { Guid guid = list[i]; ot.Delete(guid, true); } return(Rhino.Commands.Result.Success); }
public static Rhino.Commands.Result IntersectCurves(Rhino.RhinoDoc doc) { // Select two curves to intersect var go = new Rhino.Input.Custom.GetObject(); go.SetCommandPrompt("Select two curves"); go.GeometryFilter = Rhino.DocObjects.ObjectType.Curve; go.GetMultiple(2, 2); if (go.CommandResult() != Rhino.Commands.Result.Success) { return(go.CommandResult()); } // Validate input var curveA = go.Object(0).Curve(); var curveB = go.Object(1).Curve(); if (curveA == null || curveB == null) { return(Rhino.Commands.Result.Failure); } // Calculate the intersection const double intersection_tolerance = 0.001; const double overlap_tolerance = 0.0; var events = Rhino.Geometry.Intersect.Intersection.CurveCurve(curveA, curveB, intersection_tolerance, overlap_tolerance); // Process the results if (events != null) { for (int i = 0; i < events.Count; i++) { var ccx_event = events[i]; doc.Objects.AddPoint(ccx_event.PointA); if (ccx_event.PointA.DistanceTo(ccx_event.PointB) > double.Epsilon) { doc.Objects.AddPoint(ccx_event.PointB); doc.Objects.AddLine(ccx_event.PointA, ccx_event.PointB); } } doc.Views.Redraw(); } return(Rhino.Commands.Result.Success); }
public static Rhino.Commands.Result IntersectCurves(Rhino.RhinoDoc doc) { // Select two curves to intersect var go = new Rhino.Input.Custom.GetObject(); go.SetCommandPrompt("Select two curves"); go.GeometryFilter = Rhino.DocObjects.ObjectType.Curve; go.GetMultiple(2, 2); if (go.CommandResult() != Rhino.Commands.Result.Success) return go.CommandResult(); // Validate input var curveA = go.Object(0).Curve(); var curveB = go.Object(1).Curve(); if (curveA == null || curveB == null) return Rhino.Commands.Result.Failure; // Calculate the intersection const double intersection_tolerance = 0.001; const double overlap_tolerance = 0.0; var events = Rhino.Geometry.Intersect.Intersection.CurveCurve(curveA, curveB, intersection_tolerance, overlap_tolerance); // Process the results if (events != null) { for (int i = 0; i < events.Count; i++) { var ccx_event = events[i]; doc.Objects.AddPoint(ccx_event.PointA); if (ccx_event.PointA.DistanceTo(ccx_event.PointB) > double.Epsilon) { doc.Objects.AddPoint(ccx_event.PointB); doc.Objects.AddLine(ccx_event.PointA, ccx_event.PointB); } } doc.Views.Redraw(); } return Rhino.Commands.Result.Success; }
public static Rhino.Commands.Result LineBetweenCurves(Rhino.RhinoDoc doc) { Rhino.Input.Custom.GetObject go = new Rhino.Input.Custom.GetObject(); go.SetCommandPrompt("Select two curves"); go.GeometryFilter = Rhino.DocObjects.ObjectType.Curve; go.GetMultiple(2, 2); if (go.CommandResult() != Rhino.Commands.Result.Success) { return(go.CommandResult()); } Rhino.DocObjects.ObjRef objRef0 = go.Object(0); Rhino.DocObjects.ObjRef objRef1 = go.Object(1); double t0 = Rhino.RhinoMath.UnsetValue; double t1 = Rhino.RhinoMath.UnsetValue; Rhino.Geometry.Curve curve0 = objRef0.CurveParameter(out t0); Rhino.Geometry.Curve curve1 = objRef1.CurveParameter(out t1); if (null == curve0 || !Rhino.RhinoMath.IsValidDouble(t0) || null == curve1 || !Rhino.RhinoMath.IsValidDouble(t1)) { return(Rhino.Commands.Result.Failure); } Rhino.Geometry.Line line = Rhino.Geometry.Line.Unset; bool rc = Rhino.Geometry.Line.TryCreateBetweenCurves(curve0, curve1, ref t0, ref t1, false, false, out line); if (rc) { if (Guid.Empty != doc.Objects.AddLine(line)) { doc.Views.Redraw(); return(Rhino.Commands.Result.Success); } } return(Rhino.Commands.Result.Failure); }
public static Rhino.Commands.Result CircleCenter(Rhino.RhinoDoc doc) { Rhino.Input.Custom.GetObject go = new Rhino.Input.Custom.GetObject(); go.SetCommandPrompt("Select objects"); go.GeometryFilter = Rhino.DocObjects.ObjectType.Curve; go.GeometryAttributeFilter = Rhino.Input.Custom.GeometryAttributeFilter.ClosedCurve; go.GetMultiple(1, 0); if (go.CommandResult() != Rhino.Commands.Result.Success) { return(go.CommandResult()); } Rhino.DocObjects.ObjRef[] objrefs = go.Objects(); if (objrefs == null) { return(Rhino.Commands.Result.Nothing); } double tolerance = doc.ModelAbsoluteTolerance; for (int i = 0; i < objrefs.Length; i++) { // get the curve geometry Rhino.Geometry.Curve curve = objrefs[i].Curve(); if (curve == null) { continue; } Rhino.Geometry.Circle circle; if (curve.TryGetCircle(out circle, tolerance)) { Rhino.RhinoApp.WriteLine("Circle{0}: center = {1}", i + 1, circle.Center); } } return(Rhino.Commands.Result.Success); }
///<summary> This gets called when when the user runs this command.</summary> protected override Result RunCommand(RhinoDoc doc, Rhino.Commands.RunMode mode) { SourceConduit m_source_conduit = SourceConduit.Instance; Rhino.Input.Custom.GetObject GO = new Rhino.Input.Custom.GetObject(); GO.SetCommandPrompt("Select source curve..."); GO.GeometryFilter = Rhino.DocObjects.ObjectType.Curve; GO.AddOption("TrafficWelsh"); GO.AddOption("TrafficFHWA"); GO.AddOption("AircraftANCON"); GO.AddOption("Custom"); //GO.AddOptionList("SourceType", new List<string>() { "TrafficWelshStandard", "TrafficFHWA Standard", "Custom" }, 2); GO.GroupSelect = false; GO.SubObjectSelect = false; GO.EnableClearObjectsOnEntry(false); GO.EnableUnselectObjectsOnExit(false); GO.DeselectAllBeforePostSelect = false; int pavement = 0; double SPLW = 0; double[] SWL = new double[] { 120, 120, 120, 120, 120, 120, 120, 120 }; double velocity = 83; double delta = 45; double choice = 0; for (; ; ) { Rhino.Input.GetResult GR = GO.GetMultiple(1, 1); int type = GO.OptionIndex(); if (GR == Rhino.Input.GetResult.Option) { choice = (int)type; //type = GO.Option().EnglishName; if (type == 1)//"Traffic (Welsh Standard)") { Rhino.Input.RhinoGet.GetNumber("Input basis road sound pressure level at 1 m from street...", false, ref SPLW); SPLW += 8; } else if (type == 2)//"Traffic (FHWA Standard)") { ///Described at: ///http://www.fhwa.dot.gov/environment/noise/traffic_noise_model/old_versions/tnm_version_10/tech_manual/tnm03.cfm#tnma2 double s = 0; //int i = 0; Rhino.Input.RhinoGet.GetNumber("Enter the speed of traffic on this road (in kph)...", false, ref s); ///Pavement Rhino.Input.Custom.GetOption GOpt = new Rhino.Input.Custom.GetOption(); GOpt.SetCommandPrompt("Pavement type..."); GOpt.AddOption("Average_DGAC_PCC)"); GOpt.AddOption("DGAC_Asphalt"); GOpt.AddOption("PCC_Concrete"); GOpt.AddOption("OGAC_OpenGradedAsphalt"); GOpt.AcceptNothing(false); GOpt.Get(); pavement = GOpt.OptionIndex(); ///Vehicle tallies double[] Veh = new double[5] { 0, 0, 0, 0, 0 }; Rhino.Input.RhinoGet.GetNumber("Enter the number of automobiles per hour...", false, ref Veh[0]); Rhino.Input.RhinoGet.GetNumber("Enter the number of medium trucks per hour...", false, ref Veh[1]); Rhino.Input.RhinoGet.GetNumber("Enter the number of heavy trucks per hour...", false, ref Veh[2]); Rhino.Input.RhinoGet.GetNumber("Enter the number of buses per hour...", false, ref Veh[3]); Rhino.Input.RhinoGet.GetNumber("Enter the number of motorcycles per hour...", false, ref Veh[4]); bool throttle = false; int t = 0; Rhino.Input.RhinoGet.GetBool("Full throttle?", false, "Yes", "No", ref throttle); t = (throttle) ? 1 : 0; double root2 = Math.Sqrt(2); double vtot = 0; double[] Es = new double[8] { 0, 0, 0, 0, 0, 0, 0, 0 }; for (int v = 0; v < 5; v++) { double A = FHWATraffic[v][pavement][t][0]; double B = FHWATraffic[v][pavement][t][1]; double C = FHWATraffic[v][pavement][t][2]; double D1 = FHWATraffic[v][pavement][t][3]; double D2 = FHWATraffic[v][pavement][t][4]; double E1 = FHWATraffic[v][pavement][t][5]; double E2 = FHWATraffic[v][pavement][t][6]; double F1 = FHWATraffic[v][pavement][t][7]; double F2 = FHWATraffic[v][pavement][t][8]; double G1 = FHWATraffic[v][pavement][t][9]; double G2 = FHWATraffic[v][pavement][t][10]; double H1 = FHWATraffic[v][pavement][t][11]; double H2 = FHWATraffic[v][pavement][t][12]; double I1 = FHWATraffic[v][pavement][t][13]; double I2 = FHWATraffic[v][pavement][t][14]; double J1 = FHWATraffic[v][pavement][t][15]; double J2 = FHWATraffic[v][pavement][t][16]; vtot += Veh[v]; for (int oct = 0; oct < 8; oct++) { double f = 62.5 * Math.Pow(2, oct); double[] freq = new double[3] { f / root2, f, f * root2 }; for (int oct3 = 0; oct3 < 3; oct3++) { double Ea = Math.Pow(0.6214 * s, A / 10) * Math.Pow(10, B / 10) + Math.Pow(10, C / 10); double logf = Math.Log10(freq[oct3]); double Ls = 10 * Math.Log10(Ea) + (D1 + 0.6214 * D2 * s) + (E1 + 0.6214 * E2 * s) * logf + (F1 + 0.6214 * F2 * s) * logf * logf + (G1 + 0.6214 * G2 * s) * logf * logf * logf + (H1 + 0.6214 * H2 * s) * logf * logf * logf * logf + (I1 + 0.6214 * I2 * s) * logf * logf * logf * logf * logf + (J1 + 0.6214 * J2 * s) * logf * logf * logf * logf * logf * logf; Es[oct] += 0.0476 * Math.Pow(10, Ls / 10) * Veh[v] / s; } } } double[] Awt = new double[8] { -26, -16, -9, -3, 0, 1.2, 1, -1 }; double dmod = 10 * Math.Log10(1 / (Utilities.Numerics.PiX2 * 15)); for (int oct = 0; oct < 8; oct++) { SWL[oct] = 10 * Math.Log10(Es[oct]) - Awt[oct] - dmod;// } } else if (type == 3)//"Aircraft (ANCON-derived)") { Rhino.Input.Custom.GetOption GOpt = new Rhino.Input.Custom.GetOption(); GOpt.SetCommandPrompt("Takeoff or Landing?"); GOpt.AddOption("Takeoff"); GOpt.AddOption("Landing"); GOpt.AddOption("Both"); GOpt.AcceptNothing(false); GOpt.Get(); int TL_Choice = GOpt.OptionIndex(); double SWLA = 150; Rhino.Input.RhinoGet.GetNumber("What is the broadband sound power of the aircraft (in dBA)?", false, ref SWLA); Rhino.Input.RhinoGet.GetNumber("What is the maximum velocity of the aircraft in m/s?", false, ref velocity); Rhino.Input.RhinoGet.GetNumber("What is the slant angle for this aircraft?", false, ref delta); double[][] Aircraft_Normalization = new double[3][] { //new double[8]{ -12, -10.5, -12, -15, -20, -27, -40, -44}, //new double[8]{-11, -13, -12, -13.5, -18, -21, -25, -35}, //new double[8]{-11, -10.5, -12, -13.5, -18, -21, -25, -35} new double[8] { 6.191472203, 7.691472203, 6.191472203, 3.191472203, -1.808527797, -8.808527797,-21.8085278, -25.8085278}, new double[8] { 5.6783811710, 3.6783811710, 4.678381171, 3.178381171, -1.321618829, -4.321618829, -8.321618829, -18.32161883}, new double[8] { 5.678381171, 6.178381171, 4.678381171, 3.178381171, -1.321618829, -4.321618829, -8.321618829, -18.32161883} }; for (int oct = 0; oct < 8; oct++) { SWL[oct] = SWLA + Aircraft_Normalization[TL_Choice-1][oct];// } } // continue; // //return Result.Success; //} } else if (GR == Rhino.Input.GetResult.Object) { for (int i = 0; i < GO.ObjectCount; i++) { Rhino.DocObjects.ObjRef obj = GO.Object(i); Rhino.DocObjects.RhinoObject rhObj = doc.Objects.Find(obj.ObjectId); rhObj.Attributes.Name = "Acoustical Source"; if (choice == 1)//"Traffic (Welsh Standard)") { rhObj.Geometry.SetUserString("SourceType", "Traffic (Welsh)"); for (int oct = 0; oct < 8; oct++) SWL[oct] = SPLW + WelshTraffic[oct]; } else if (choice == 2)//"Traffic (FWHA Standard)") { rhObj.Geometry.SetUserString("SourceType", "Traffic (FHWA)"); } else if (choice == 3)//"Aircraft (ANCON-derived)") { rhObj.Geometry.SetUserString("SourceType", "Aircraft (ANCON derived)"); rhObj.Geometry.SetUserString("Velocity", velocity.ToString()); rhObj.Geometry.SetUserString("delta", delta.ToString()); } else { Rhino.Input.RhinoGet.GetNumber("62.5 Hz. Sound Power Level", true, ref SWL[0]); Rhino.Input.RhinoGet.GetNumber("125 Hz. Sound Power Level", true, ref SWL[1]); Rhino.Input.RhinoGet.GetNumber("250 Hz. Sound Power Level", true, ref SWL[2]); Rhino.Input.RhinoGet.GetNumber("500 Hz. Sound Power Level", true, ref SWL[3]); Rhino.Input.RhinoGet.GetNumber("1000 Hz. Sound Power Level", true, ref SWL[4]); Rhino.Input.RhinoGet.GetNumber("2000 Hz. Sound Power Level", true, ref SWL[5]); Rhino.Input.RhinoGet.GetNumber("4000 Hz. Sound Power Level", true, ref SWL[6]); Rhino.Input.RhinoGet.GetNumber("8000 Hz. Sound Power Level", true, ref SWL[7]); } rhObj.Geometry.SetUserString("SWL", Utilities.PachTools.EncodeSourcePower(SWL)); rhObj.Geometry.SetUserString("Phase", "0;0;0;0;0;0;0;0"); doc.Objects.ModifyAttributes(rhObj, rhObj.Attributes, true); m_source_conduit.SetSource(rhObj); } doc.Views.Redraw(); return Result.Success; } else return Result.Cancel; } }
private Tuple <Brep[], Dictionary <int, List <Guid> > > GetObjectsToNest() { //Select Objects To Nest const Rhino.DocObjects.ObjectType geometryFilter = Rhino.DocObjects.ObjectType.Annotation | Rhino.DocObjects.ObjectType.TextDot | Rhino.DocObjects.ObjectType.Point | Rhino.DocObjects.ObjectType.Curve | Rhino.DocObjects.ObjectType.Surface | Rhino.DocObjects.ObjectType.PolysrfFilter | Rhino.DocObjects.ObjectType.Mesh; Rhino.Input.Custom.GetObject go = new Rhino.Input.Custom.GetObject(); go.SetCommandPrompt("OpenNest: Select objects for nesting"); go.GeometryFilter = geometryFilter; go.GroupSelect = false; go.SubObjectSelect = false; go.EnableClearObjectsOnEntry(true); go.EnableUnselectObjectsOnExit(true); go.DeselectAllBeforePostSelect = false; bool bHavePreselectedObjects = false; for (; ;) { Rhino.Input.GetResult res = go.GetMultiple(1, 0); if (res == Rhino.Input.GetResult.Option) { go.EnablePreSelect(false, true); continue; } else if (res != Rhino.Input.GetResult.Object) { return(null);//Rhino.Commands.Result.Cancel; } if (go.ObjectsWerePreselected) { bHavePreselectedObjects = true; go.EnablePreSelect(false, true); continue; } break; } if (bHavePreselectedObjects) { // Normally when command finishes, pre-selected objects will remain // selected, when and post-selected objects will be unselected. // With this sample, it is possible to have a combination of // pre-selected and post-selected objects. To make sure everything // "looks the same", unselect everything before finishing the command. for (int i = 0; i < go.ObjectCount; i++) { Rhino.DocObjects.RhinoObject rhinoObject = go.Object(i).Object(); if (null != rhinoObject) { rhinoObject.Select(false); } } //doc.Views.Redraw(); } List <Guid> guids = new List <Guid>(); for (int i = 0; i < go.ObjectCount; i++) { guids.Add(go.Object(i).ObjectId); } Tuple <Brep[], Dictionary <int, List <Guid> > > data = OpenNestLib.OpenNestUtil.SortGuidsByPlanarCurves(guids, this.cp); Rhino.RhinoApp.WriteLine("OpenNest: Select object count = {0}", go.ObjectCount); this.n = data.Item1.Length; Rhino.RhinoDoc.ActiveDoc.Views.Redraw(); return(data); }
protected override Result RunCommand(RhinoDoc doc, RunMode mode) { const Rhino.DocObjects.ObjectType geometryFilter = Rhino.DocObjects.ObjectType.Point; Rhino.Input.Custom.GetObject go = new Rhino.Input.Custom.GetObject(); go.SetCommandPrompt("Pick all the points that you want to change to reinforcement."); go.GeometryFilter = geometryFilter; go.GroupSelect = true; go.SubObjectSelect = false; go.EnableClearObjectsOnEntry(false); go.EnableUnselectObjectsOnExit(false); go.DeselectAllBeforePostSelect = false; bool bHavePreselectedObjects = false; for (;;) { Rhino.Input.GetResult res = go.GetMultiple(1, 0); /* * if (res == Rhino.Input.GetResult.Option) * { * go.EnablePreSelect(false, true); * continue; * } * else if (res != Rhino.Input.GetResult.Option) * { * return Rhino.Commands.Result.Cancel; * } */ if (go.ObjectsWerePreselected) { bHavePreselectedObjects = true; go.EnablePreSelect(false, true); continue; } break; } List <Point3d> points = new List <Point3d>(); if (bHavePreselectedObjects) { for (int i = 0; i < go.ObjectCount; i++) { RhinoObject rhinoObject = go.Object(i).Object(); if (null != rhinoObject) { rhinoObject.Select(false); } } doc.Views.Redraw(); } int layerIndex = getLayerIndex(doc, "Reinforcement"); doc.Layers[layerIndex].Color = Color.Black; if (layerIndex == 999) { return(Result.Failure); } ObjRef[] objects = go.Objects(); foreach (ObjRef obj in objects) { Point3d point = obj.Point().Location; //TODO add the functionality how to assign different steel materials. Reinforcement reinf = new Reinforcement(ProjectPlugIn.Instance.CurrentBeam) { Material = new SteelMaterial("B500B", SteelType.Reinforcement, ProjectPlugIn.Instance.CurrentBeam), Centroid = point, Diameter = 8 }; ObjectAttributes attr = new ObjectAttributes(); attr.UserData.Add(reinf); attr.SetUserString("Name", "Reinforcement"); attr.LayerIndex = layerIndex; //Unused code to create a hatch around the point /* * doc.Objects.AddCurve(reinf.OutLine,attr); * ObjectAttributes attrHatch = new ObjectAttributes(); * attrHatch.LayerIndex = layerIndex; * doc.Objects.AddHatch(reinf.Hatch, attrHatch); */ doc.Objects.ModifyAttributes(obj, attr, true); } return(Result.Success); }
protected override Result RunCommand(RhinoDoc doc, RunMode mode) { Rhino.Input.Custom.GetObject go = new Rhino.Input.Custom.GetObject(); go.SetCommandPrompt("Select curves"); go.GeometryFilter = Rhino.DocObjects.ObjectType.Curve; go.GetMultiple(1, 0); if (go.CommandResult() != Result.Success) { return(go.CommandResult()); } for (int i = 0; i < go.ObjectCount; i++) { Rhino.Geometry.Curve curve = go.Object(i).Curve(); if (null == curve) { return(Result.Failure); } if (curve is LineCurve) { RhinoApp.WriteLine("Curve {0} is a line.", i); } else if (curve is ArcCurve) { if (curve.IsClosed) { RhinoApp.WriteLine("Curve {0} is a circle.", i); } else { RhinoApp.WriteLine("Curve {0} is an arc.", i); } } else if (curve is PolylineCurve) { RhinoApp.WriteLine("Curve {0} is a polyline.", i); } else if (curve is PolyCurve) { RhinoApp.WriteLine("Curve {0} is a polycurve.", i); } else if (curve is NurbsCurve) { if (curve.IsEllipse()) { if (curve.IsClosed) { RhinoApp.WriteLine("Curve {0} is an ellipse.", i); } else { RhinoApp.WriteLine("Curve {0} is an elliptical arc.", i); } } else { RhinoApp.WriteLine("Curve {0} is a NURBS curve.", i); } } else { RhinoApp.WriteLine("Curve {0} is an unknown type.", i); } } return(Result.Success); }
protected override Rhino.Commands.Result RunCommand(RhinoDoc doc, Rhino.Commands.RunMode mode) { nishanchiPlugin pluginObj = ((nishanchiPlugin)this.PlugIn); Boolean selectedObjectIsBrep = false; Boolean selectedObjectIsCurve = false; if (!pluginObj.trackerConnected) { RhinoApp.WriteLine("Tracker disconnected"); return Rhino.Commands.Result.Failure; } connectKbEvt(); //Ask the user to select Breps to print. //Result rc = Rhino.Input.RhinoGet.GetMultipleObjects("Select the surfaces to print", //false, Rhino.DocObjects.ObjectType.Surface, out objrefs); Rhino.Input.Custom.GetObject go = new Rhino.Input.Custom.GetObject(); go.SetCommandPrompt("Select the entity to print"); go.GroupSelect = true; //Set this to go.GetMultiple(0,0) if you want to allow multiple entities to be selected go.GetMultiple(0, 1); Result rc = go.CommandResult(); if (rc != Rhino.Commands.Result.Success) { disconnectKbEvt(); return rc; } List<Rhino.Geometry.Brep> breps = new List<Rhino.Geometry.Brep>(); List<Rhino.Geometry.Curve> curves = new List<Rhino.Geometry.Curve>(); for (int i = 0; i < go.ObjectCount; i++) { ObjRef tmpRef = new ObjRef(go.Object(i).ObjectId); Rhino.Geometry.Brep brep = tmpRef.Brep(); if (brep != null) { breps.Add(brep); selectedObjectIsBrep = true; } Rhino.Geometry.Curve curve = tmpRef.Curve(); if (curve != null) { curves.Add(curve); selectedObjectIsCurve = true; } } if (selectedObjectIsBrep) RhinoApp.WriteLine("Selected " + breps.Count + " surfaces! Good! No, not, really, I'm just a program, I couldn't care less."); if (selectedObjectIsCurve) RhinoApp.WriteLine("Selected " + curves.Count + " curves! Good! No, not, really, I'm just a program, I couldn't care less."); createEntities(doc); fastrak trackerObj = pluginObj.trackerObj; int numPoints = 0; int numIntersections = 0; Boolean retval; RhinoApp.WriteLine(string.Format("Starting continuous mode on the tracker.")); pluginObj.trackerObj.setContinuous(); RhinoApp.WriteLine(string.Format("Printing mode enabled now.")); Curve[] intersectionCurves; Point3d[] intersectionPoints; running = true; while (running) { retval = trackerObj.readFrame(); if (retval) { //q0,q1,q2,q3 Quaternion begin //Compute the rotation matrix rxTxTx = new Point3d(trackerObj.x, trackerObj.y, trackerObj.z); orientationQuat = new Quaternion(trackerObj.q0, trackerObj.q1, trackerObj.q2, trackerObj.q3); orientationQuat.GetRotation(out angle, out axis); rotMat = Transform.Rotation(angle, axis, origin); // Compute the new positions for the nozzlePoints and also compute the new lines for (int i = 0; i < numNozzles; i++) { nozzleStartPointRxTx[i] = rotMat * nozzleStartPointRxRx[i]; nozzleStartPointTxTx[i] = nozzleStartPointRxTx[i] + rxTxTx; nozzleEndPointRxTx[i] = rotMat * nozzleEndPointRxRx[i]; nozzleEndPointTxTx[i] = nozzleEndPointRxTx[i] + rxTxTx; nozzleLinesTx[i] = new Line(nozzleStartPointTxTx[i], nozzleEndPointTxTx[i]); nozzleCurves[i] = new LineCurve(nozzleLinesTx[i]); } numIntersections = 0; if (selectedObjectIsBrep) { for (int i = 0; i < numNozzles; i++) { foreach (Brep b in breps) { try { Intersection.CurveBrep(nozzleCurves[i], b, nozzleTolerance, out intersectionCurves, out intersectionPoints); if (intersectionPoints.Length > 0) { intersectionsBits[i] = 1; numIntersections++; } else { intersectionsBits[i] = 0; } } catch (Exception e) { RhinoApp.WriteLine(e.Message); } } } } if (selectedObjectIsCurve) { for (int i = 0; i < numNozzles; i++) { foreach (Curve c in curves) { try { var events = Intersection.CurveCurve(nozzleCurves[i], c, nozzleTolerance, nozzleTolerance); if (events != null) { if (events.Count >= 1) { intersectionsBits[i] = 1; numIntersections++; } else { intersectionsBits[i] = 0; } } } catch (Exception e) { RhinoApp.WriteLine(e.Message); } } } } if (pluginObj.printHeadConnected) { // I print if (((numPoints % 5) == 0)&&(numIntersections > 0)) { string p = printCommand(); //RhinoApp.WriteLine(p); pluginObj.printHeadObj.printFrame(p); //pluginObj.printHeadObj.printFullLine(); } } numPoints++; } //And, I move the printer like thing on the screen if ((numPoints % 10) == 0) { for (int i = 0; i < numNozzles; i++) { doc.Objects.Delete(lineGuids[i],false); lineGuids[i] = doc.Objects.AddLine(nozzleLinesTx[i]); } doc.Objects.Delete(ballGuid, false); ball = new Sphere(rxTxTx, ballRadius); ballGuid = doc.Objects.AddSphere(ball); doc.Views.ActiveView.Redraw(); RhinoApp.Wait(); } } running = false; removeEntities(doc); RhinoApp.WriteLine(string.Format("Stopping continuous mode on the tracker.")); pluginObj.trackerObj.stopContinuous(); disconnectKbEvt(); RhinoApp.WriteLine(string.Format("I guess you don't wanna print anymore, well who cares! Not me!")); return Rhino.Commands.Result.Success; }
protected override Result RunCommand(RhinoDoc doc, RunMode mode) { // Select objects to define block var go = new Rhino.Input.Custom.GetObject(); go.SetCommandPrompt("Select objects to define block"); go.ReferenceObjectSelect = false; go.SubObjectSelect = false; go.GroupSelect = true; // Phantoms, grips, lights, etc., cannot be in blocks. var forbidden_geometry_filter = Rhino.DocObjects.ObjectType.Light | Rhino.DocObjects.ObjectType.Grip | Rhino.DocObjects.ObjectType.Phantom; var geometry_filter = forbidden_geometry_filter ^ Rhino.DocObjects.ObjectType.AnyObject; go.GeometryFilter = geometry_filter; go.GetMultiple(1, 0); if (go.CommandResult() != Rhino.Commands.Result.Success) { return(go.CommandResult()); } // Block base point Rhino.Geometry.Point3d base_point; var rc = Rhino.Input.RhinoGet.GetPoint("Block base point", false, out base_point); if (rc != Rhino.Commands.Result.Success) { return(rc); } // Block definition name string idef_name = ""; rc = Rhino.Input.RhinoGet.GetString("Block definition name", false, ref idef_name); if (rc != Rhino.Commands.Result.Success) { return(rc); } // Validate block name idef_name = idef_name.Trim(); if (string.IsNullOrEmpty(idef_name)) { return(Rhino.Commands.Result.Nothing); } // See if block name already exists Rhino.DocObjects.InstanceDefinition existing_idef = doc.InstanceDefinitions.Find(idef_name, true); if (existing_idef != null) { Rhino.RhinoApp.WriteLine("Block definition {0} already exists", idef_name); return(Rhino.Commands.Result.Nothing); } // Gather all of the selected objects var geometry = new System.Collections.Generic.List <Rhino.Geometry.GeometryBase>(); var attributes = new System.Collections.Generic.List <Rhino.DocObjects.ObjectAttributes>(); for (int i = 0; i < go.ObjectCount; i++) { var rhinoObject = go.Object(i).Object(); if (rhinoObject != null) { geometry.Add(rhinoObject.Geometry); attributes.Add(rhinoObject.Attributes); } } // Gather all of the selected objects int idef_index = doc.InstanceDefinitions.Add(idef_name, string.Empty, base_point, geometry, attributes); if (idef_index < 0) { Rhino.RhinoApp.WriteLine("Unable to create block definition", idef_name); return(Rhino.Commands.Result.Failure); } return(Rhino.Commands.Result.Success); }
protected override Result RunCommand(RhinoDoc doc, RunMode mode) { // Pick some objects to smooth Rhino.Input.Custom.GetObject go = new Rhino.Input.Custom.GetObject(); go.SetCommandPrompt("Select objects to smooth"); go.SubObjectSelect = false; go.ReferenceObjectSelect = false; go.GeometryFilter = Rhino.DocObjects.ObjectType.Curve | Rhino.DocObjects.ObjectType.Surface | Rhino.DocObjects.ObjectType.Mesh; go.GetMultiple(1, 0); if (go.CommandResult() != Result.Success) { return(go.CommandResult()); } // Prompt for some command line options. In this case, // we will clone the -Smooth command. Rhino.Input.Custom.GetOption gs = new Rhino.Input.Custom.GetOption(); gs.SetCommandPrompt("Choose smooth option"); gs.AcceptNothing(true); for (; ;) { gs.ClearCommandOptions(); Rhino.Input.Custom.OptionDouble smooth_factor_option = new Rhino.Input.Custom.OptionDouble(m_smooth_factor); Rhino.Input.Custom.OptionToggle use_cplane_option = new Rhino.Input.Custom.OptionToggle(m_use_cplane, "World", "CPlane"); Rhino.Input.Custom.OptionToggle smooth_x_option = new Rhino.Input.Custom.OptionToggle(m_smooth_x, "No", "Yes"); Rhino.Input.Custom.OptionToggle smooth_y_option = new Rhino.Input.Custom.OptionToggle(m_smooth_y, "No", "Yes"); Rhino.Input.Custom.OptionToggle smooth_z_option = new Rhino.Input.Custom.OptionToggle(m_smooth_z, "No", "Yes"); Rhino.Input.Custom.OptionToggle fix_boundaries_option = new Rhino.Input.Custom.OptionToggle(m_fix_boundaries, "No", "Yes"); int smooth_factor_index = gs.AddOptionDouble("SmoothFactor", ref smooth_factor_option); int use_cplane_index = gs.AddOptionToggle("CoordinateSystem", ref use_cplane_option); int smooth_x_index = gs.AddOptionToggle("X", ref smooth_x_option); int smooth_y_index = gs.AddOptionToggle("Y", ref smooth_y_option); int smooth_z_index = gs.AddOptionToggle("Z", ref smooth_z_option); int fix_boundaries_index = gs.AddOptionToggle("FixBoundaries", ref fix_boundaries_option); Rhino.Input.GetResult getrc = gs.Get(); if (gs.CommandResult() != Result.Success) { return(gs.CommandResult()); } if (getrc == Rhino.Input.GetResult.Option) { int index = gs.OptionIndex(); if (index == smooth_factor_index) { m_smooth_factor = smooth_factor_option.CurrentValue; } else if (index == use_cplane_index) { m_use_cplane = use_cplane_option.CurrentValue; } else if (index == smooth_x_index) { m_smooth_x = smooth_x_option.CurrentValue; } else if (index == smooth_y_index) { m_smooth_y = smooth_y_option.CurrentValue; } else if (index == smooth_z_index) { m_smooth_z = smooth_z_option.CurrentValue; } else if (index == fix_boundaries_index) { m_fix_boundaries = fix_boundaries_option.CurrentValue; } continue; } break; } // Build a command line macro that we can script StringBuilder sb = new StringBuilder(); sb.Append("_-Smooth "); sb.Append(string.Format("_SmoothFactor={0} ", m_smooth_factor)); sb.Append(string.Format("_CoordinateSystem={0} ", m_use_cplane ? "_CPlane" : "_World")); sb.Append(string.Format("_X={0} ", m_smooth_x ? "_Yes" : "_No")); sb.Append(string.Format("_Y={0} ", m_smooth_y ? "_Yes" : "_No")); sb.Append(string.Format("_Z={0} ", m_smooth_z ? "_Yes" : "_No")); sb.Append(string.Format("_FixBoundaries={0} ", m_fix_boundaries ? "_Yes" : "_No")); sb.Append("_Enter"); string script = sb.ToString(); #if (!RELEASE) Rhino.RhinoApp.WriteLine(script); #endif // Script the smooth command Rhino.RhinoApp.RunScript(script, false); return(Result.Success); }
protected override Result RunCommand(RhinoDoc doc, RunMode mode) { const Rhino.DocObjects.ObjectType geometryFilter = Rhino.DocObjects.ObjectType.Surface | Rhino.DocObjects.ObjectType.PolysrfFilter | Rhino.DocObjects.ObjectType.Mesh; int integer1 = 300; int integer2 = 300; Rhino.Input.Custom.OptionInteger optionInteger1 = new Rhino.Input.Custom.OptionInteger(integer1, 200, 900); Rhino.Input.Custom.OptionInteger optionInteger2 = new Rhino.Input.Custom.OptionInteger(integer2, 200, 900); Rhino.Input.Custom.GetObject go = new Rhino.Input.Custom.GetObject(); go.SetCommandPrompt("Select surfaces, polysurfaces, or meshes"); go.GeometryFilter = geometryFilter; go.AddOptionInteger("Option1", ref optionInteger1); go.AddOptionInteger("Option2", ref optionInteger2); go.GroupSelect = true; go.SubObjectSelect = false; go.EnableClearObjectsOnEntry(false); go.EnableUnselectObjectsOnExit(false); go.DeselectAllBeforePostSelect = false; bool bHavePreselectedObjects = false; for (; ;) { var res = go.GetMultiple(1, 0); if (res == Rhino.Input.GetResult.Option) { go.EnablePreSelect(false, true); continue; } else if (res != Rhino.Input.GetResult.Object) { return(Result.Cancel); } if (go.ObjectsWerePreselected) { bHavePreselectedObjects = true; go.EnablePreSelect(false, true); continue; } break; } if (bHavePreselectedObjects) { // Normally, pre-selected objects will remain selected, when a // command finishes, and post-selected objects will be unselected. // This this way of picking, it is possible to have a combination // of pre-selected and post-selected. So, to make sure everything // "looks the same", lets unselect everything before finishing // the command. for (int i = 0; i < go.ObjectCount; i++) { Rhino.DocObjects.RhinoObject rhinoObject = go.Object(i).Object(); if (null != rhinoObject) { rhinoObject.Select(false); } } doc.Views.Redraw(); } int objectCount = go.ObjectCount; integer1 = optionInteger1.CurrentValue; integer2 = optionInteger2.CurrentValue; RhinoApp.WriteLine("Select object count = {0}", objectCount); RhinoApp.WriteLine("Value of integer1 = {0}", integer1); RhinoApp.WriteLine("Value of integer2 = {0}", integer2); return(Result.Success); }
protected override Result RunCommand(RhinoDoc doc, RunMode mode) { string selectedLayer; Color selectedColour; // For this example we will use a GetPoint class, but all of the custom // "Get" classes support command line options. Rhino.Input.Custom.GetObject go = new Rhino.Input.Custom.GetObject(); go.SetCommandPrompt("Select panels to create borders"); double border = Properties.Settings.Default.PanelBorderDefault; // Default borderSize is 50 // set up the options Rhino.Input.Custom.OptionDouble borderSizeOption = new Rhino.Input.Custom.OptionDouble(border); go.AddOptionDouble("Borders", ref borderSizeOption); go.AcceptNumber(true, true); go.GeometryFilter = Rhino.DocObjects.ObjectType.Curve; go.GroupSelect = true; go.SubObjectSelect = false; go.EnableClearObjectsOnEntry(false); go.EnableUnselectObjectsOnExit(false); go.DeselectAllBeforePostSelect = false; go.EnableSelPrevious(true); go.EnablePreSelect(true, false); go.GeometryFilter = Rhino.DocObjects.ObjectType.Curve; RequiredLayer getRequiredLayer = new RequiredLayer(); getRequiredLayer.ShowDialog(); selectedLayer = getRequiredLayer.getLayerName(); selectedColour = getRequiredLayer.getSelectedColor(); while (true) { go.ClearCommandOptions(); borderSizeOption = new Rhino.Input.Custom.OptionDouble(border); go.AddOptionDouble("Borders", ref borderSizeOption); // perform the get operation. This will prompt the user to select the list of curves, but also // allow for command line options defined above GetResult result = go.GetMultiple(1, 0); if (result == GetResult.Option) { border = borderSizeOption.CurrentValue; go.EnablePreSelect(false, true); continue; } else if (result == GetResult.Number) { border = go.Number(); continue; } else if (result != GetResult.Object) { return(Result.Cancel); } if (go.ObjectsWerePreselected) { go.EnablePreSelect(false, true); continue; } break; } int objecTCount = go.ObjectCount; border = borderSizeOption.CurrentValue; foreach (ObjRef objRef in go.Objects()) { Curve curve = objRef.Curve(); // If curve is null, means objRef is not a curve if (curve == null) { continue; } // If curve is not Closed Curve if (curve.IsClosed == false) { RhinoApp.WriteLine(objRef.ToString() + " curve is open"); continue; } if (curve.IsPlanar() == false) { RhinoApp.WriteLine(objRef.ToString() + " curve is not planar"); continue; } // Process the curve Plane plane = Rhino.Geometry.Plane.WorldXY; Curve[] offsetCurves; int layerIndex = doc.Layers.CurrentLayerIndex; RhinoUtilities.SetActiveLayer(selectedLayer, selectedColour); //if (curve.TryGetPlane(out plane)) //{ if (border < 0) //If the border is negative, it means the border should be drawn outside the perimeter { plane.XAxis = -plane.XAxis; plane.YAxis = -plane.YAxis; plane.ZAxis = -plane.ZAxis; offsetCurves = curve.Offset(plane, border, 0.1, Rhino.Geometry.CurveOffsetCornerStyle.Sharp); } else { offsetCurves = curve.Offset(plane, -border, 0.1, Rhino.Geometry.CurveOffsetCornerStyle.Sharp); } //Check if the curve is outside border and border is a positive if (curve.Contains(offsetCurves[0].PointAtStart, Plane.WorldXY, 0) == PointContainment.Outside && border > 0) { offsetCurves = curve.Offset(plane, border, 0.1, Rhino.Geometry.CurveOffsetCornerStyle.Sharp); //if true, then try to set the curve to be within the border } //Check if the curve is within the border and border is a negative if (curve.Contains(offsetCurves[0].PointAtStart, Plane.WorldXY, 0) == PointContainment.Inside && border < 0) { offsetCurves = curve.Offset(plane, -border, 0.1, Rhino.Geometry.CurveOffsetCornerStyle.Sharp); //if true, then try to set the curve to be outside the border } foreach (Curve c in offsetCurves) { doc.Objects.AddCurve(c); } doc.Layers.SetCurrentLayerIndex(layerIndex, true); } doc.Views.Redraw(); Properties.Settings.Default.PanelBorderDefault = border; Properties.Settings.Default.Save(); 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; }
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); }
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 Rhino.Commands.Result IntersectBrep(Rhino.RhinoDoc doc) { // Input interval var input = new Rhino.Input.Custom.GetNumber(); input.SetCommandPrompt("Input slicing interval"); input.Get(); if (input.CommandResult() != Rhino.Commands.Result.Success) { RhinoApp.WriteLine("Can't obtain interval number"); return(input.CommandResult()); } double SlicingInterval = input.Number(); // Select two curves to intersect var go = new Rhino.Input.Custom.GetObject(); go.SetCommandPrompt("Select Brep"); go.GeometryFilter = Rhino.DocObjects.ObjectType.Brep; go.GetMultiple(1, 1); Rhino.Geometry.Brep brepA = null; Rhino.Geometry.Surface surfaceB = null; if (go.CommandResult() != Rhino.Commands.Result.Success) { RhinoApp.WriteLine("Can't obtain objects"); return(input.CommandResult()); } brepA = go.Object(0).Brep(); var go2 = new Rhino.Input.Custom.GetObject(); go2.SetCommandPrompt("Select surface"); go2.GeometryFilter = Rhino.DocObjects.ObjectType.Surface; go2.GetMultiple(1, 1); if (go2.CommandResult() != Rhino.Commands.Result.Success) { RhinoApp.WriteLine("Can't obtain objects"); return(input.CommandResult()); } surfaceB = go2.Object(0).Surface(); // Calculate the intersection RhinoApp.WriteLine("Executing the intersection between surfaces"); const double intersection_tolerance = 0.001; Rhino.Geometry.Curve[] intersectionCurves = null; Rhino.Geometry.Point3d[] intersectionPoints = null; bool ret = Rhino.Geometry.Intersect.Intersection.BrepSurface(brepA, surfaceB, intersection_tolerance, out intersectionCurves, out intersectionPoints); if (ret) { List <PlanePoint> PlanePoints = new List <PlanePoint>(); RhinoApp.WriteLine("Success - {0} curves", intersectionCurves.Length); for (int i = 0; i < intersectionCurves.Length; i++) { Rhino.Geometry.Curve curve = intersectionCurves[i]; doc.Objects.AddCurve(curve); RhinoApp.WriteLine("Curve is added"); Utility.CreateSections(doc, brepA, surfaceB, curve, SlicingInterval, ref PlanePoints); } RhinoApp.WriteLine("Success - {0} points", intersectionPoints.Length); for (int i = 0; i < intersectionPoints.Length; i++) { Rhino.Geometry.Point3d point = intersectionPoints[i]; doc.Objects.AddPoint(point); RhinoApp.WriteLine("Point is added"); } if (Utility.SavePlanePoints(@"c:\SlicerPlanePoints.csv", PlanePoints)) { RhinoApp.WriteLine("Saved SlicerPlanePoints.csv"); } } return(Rhino.Commands.Result.Success); }
public static GeometryLarge CreateGeometry(MaterialType mType, string mName) { RhinoDoc doc = RhinoDoc.ActiveDoc; //Allow user to pick multiple objects const Rhino.DocObjects.ObjectType geometryFilter = Rhino.DocObjects.ObjectType.Curve; Rhino.Input.Custom.GetObject go = new Rhino.Input.Custom.GetObject() { GeometryFilter = geometryFilter, GroupSelect = true, SubObjectSelect = false, DeselectAllBeforePostSelect = false }; go.SetCommandPrompt("Pick one or two closed curves."); go.EnableClearObjectsOnEntry(false); go.EnableUnselectObjectsOnExit(false); bool bHavePreselectedObjects = false; for (;;) { Rhino.Input.GetResult res = go.GetMultiple(1, 0); if (go.ObjectsWerePreselected) { bHavePreselectedObjects = true; go.EnablePreSelect(false, true); continue; } break; } //Unselects the preselected objects if (bHavePreselectedObjects) { for (int i = 0; i < go.ObjectCount; i++) { RhinoObject rhinoObject = go.Object(i).Object(); if (null != rhinoObject) { rhinoObject.Select(false); } } doc.Views.Redraw(); } ObjRef[] objs = go.Objects(); List <Curve> selectedCurves = new List <Curve>(); foreach (ObjRef objRef in objs) { if (objRef.Curve() == null) { RhinoApp.WriteLine("One of the selected objects was invalid."); continue; } else if (!objRef.Curve().IsClosed) { RhinoApp.WriteLine("One of the selected curves was not closed."); continue; } selectedCurves.Add(objRef.Curve()); } GeometryLarge larg; //if the curve is not closed do nothing switch (selectedCurves.Count) { case 0: Rhino.RhinoApp.WriteLine("No valid geometries was found."); return(null); case 1: larg = DrawAndSaveUserAttr(Brep.CreatePlanarBreps(selectedCurves)[0], doc, mType, mName); break; case 2: Brep brep1 = Brep.CreatePlanarBreps(new[] { selectedCurves[0] })[0]; Brep brep2 = Brep.CreatePlanarBreps(new[] { selectedCurves[1] })[0]; double area = Brep.CreateBooleanUnion(new[] { brep1, brep2 }, 0.001)[0].GetArea(); double brep1Area = brep1.GetArea(); double brep2Area = brep2.GetArea(); if (area > 0.999 * brep1Area && area < 1.001 * brep1Area) { Brep brep = Brep.CreateBooleanDifference(brep1, brep2, doc.ModelAbsoluteTolerance)[0]; larg = DrawAndSaveUserAttr(brep, doc, mType, mName); break; } else if (area > 0.999 * brep2Area && area < 1.001 * brep2Area) { Brep brep = Brep.CreateBooleanDifference(brep1, brep2, doc.ModelAbsoluteTolerance)[0]; larg = DrawAndSaveUserAttr(brep, doc, mType, mName); break; } else { RhinoApp.WriteLine("The curves were not inside one another."); return(null); } default: return(null); } foreach (ObjRef objRef in objs) { doc.Objects.Delete(objRef, false); } return(larg); }
public static Rhino.Commands.Result GetMultipleWithOptions(Rhino.RhinoDoc doc) { const Rhino.DocObjects.ObjectType geometryFilter = Rhino.DocObjects.ObjectType.Surface | Rhino.DocObjects.ObjectType.PolysrfFilter | Rhino.DocObjects.ObjectType.Mesh; int integer1 = 300; int integer2 = 300; Rhino.Input.Custom.OptionInteger optionInteger1 = new Rhino.Input.Custom.OptionInteger(integer1, 200, 900); Rhino.Input.Custom.OptionInteger optionInteger2 = new Rhino.Input.Custom.OptionInteger(integer2, 200, 900); Rhino.Input.Custom.GetObject go = new Rhino.Input.Custom.GetObject(); go.SetCommandPrompt("Select surfaces, polysurfaces, or meshes"); go.GeometryFilter = geometryFilter; go.AddOptionInteger("Option1", ref optionInteger1); go.AddOptionInteger("Option2", ref optionInteger2); go.GroupSelect = true; go.SubObjectSelect = false; go.EnableClearObjectsOnEntry(false); go.EnableUnselectObjectsOnExit(false); go.DeselectAllBeforePostSelect = false; bool bHavePreselectedObjects = false; for (; ; ) { Rhino.Input.GetResult res = go.GetMultiple(1, 0); if (res == Rhino.Input.GetResult.Option) { go.EnablePreSelect(false, true); continue; } else if (res != Rhino.Input.GetResult.Object) return Rhino.Commands.Result.Cancel; if (go.ObjectsWerePreselected) { bHavePreselectedObjects = true; go.EnablePreSelect(false, true); continue; } break; } if (bHavePreselectedObjects) { // Normally when command finishes, pre-selected objects will remain // selected, when and post-selected objects will be unselected. // With this sample, it is possible to have a combination of // pre-selected and post-selected objects. To make sure everything // "looks the same", unselect everything before finishing the command. for (int i = 0; i < go.ObjectCount; i++) { Rhino.DocObjects.RhinoObject rhinoObject = go.Object(i).Object(); if (null != rhinoObject) rhinoObject.Select(false); } doc.Views.Redraw(); } int objectCount = go.ObjectCount; integer1 = optionInteger1.CurrentValue; integer2 = optionInteger2.CurrentValue; Rhino.RhinoApp.WriteLine("Select object count = {0}", objectCount); Rhino.RhinoApp.WriteLine("Value of integer1 = {0}", integer1); Rhino.RhinoApp.WriteLine("Value of integer2 = {0}", integer2); return Rhino.Commands.Result.Success; }
public static Rhino.Commands.Result OrientOnSrf(Rhino.RhinoDoc doc) { // Select objects to orient Rhino.Input.Custom.GetObject go = new Rhino.Input.Custom.GetObject(); go.SetCommandPrompt("Select objects to orient"); go.SubObjectSelect = false; go.GroupSelect = true; go.GetMultiple(1, 0); if (go.CommandResult() != Rhino.Commands.Result.Success) return go.CommandResult(); // Point to orient from Rhino.Input.Custom.GetPoint gp = new Rhino.Input.Custom.GetPoint(); gp.SetCommandPrompt("Point to orient from"); gp.Get(); if (gp.CommandResult() != Rhino.Commands.Result.Success) return gp.CommandResult(); // Define source plane Rhino.Display.RhinoView view = gp.View(); if (view == null) { view = doc.Views.ActiveView; if (view == null) return Rhino.Commands.Result.Failure; } Rhino.Geometry.Plane source_plane = view.ActiveViewport.ConstructionPlane(); source_plane.Origin = gp.Point(); // Surface to orient on Rhino.Input.Custom.GetObject gs = new Rhino.Input.Custom.GetObject(); gs.SetCommandPrompt("Surface to orient on"); gs.GeometryFilter = Rhino.DocObjects.ObjectType.Surface; gs.SubObjectSelect = true; gs.DeselectAllBeforePostSelect = false; gs.OneByOnePostSelect = true; gs.Get(); if (gs.CommandResult() != Rhino.Commands.Result.Success) return gs.CommandResult(); Rhino.DocObjects.ObjRef objref = gs.Object(0); // get selected surface object Rhino.DocObjects.RhinoObject obj = objref.Object(); if (obj == null) return Rhino.Commands.Result.Failure; // get selected surface (face) Rhino.Geometry.Surface surface = objref.Surface(); if (surface == null) return Rhino.Commands.Result.Failure; // Unselect surface obj.Select(false); // Point on surface to orient to gp.SetCommandPrompt("Point on surface to orient to"); gp.Constrain(surface, false); gp.Get(); if (gp.CommandResult() != Rhino.Commands.Result.Success) return gp.CommandResult(); // Do transformation Rhino.Commands.Result rc = Rhino.Commands.Result.Failure; double u, v; if (surface.ClosestPoint(gp.Point(), out u, out v)) { Rhino.Geometry.Plane target_plane; if (surface.FrameAt(u, v, out target_plane)) { // Build transformation Rhino.Geometry.Transform xform = Rhino.Geometry.Transform.PlaneToPlane(source_plane, target_plane); // Do the transformation. In this example, we will copy the original objects const bool delete_original = false; for (int i = 0; i < go.ObjectCount; i++) doc.Objects.Transform(go.Object(i), xform, delete_original); doc.Views.Redraw(); rc = Rhino.Commands.Result.Success; } } return rc; }
public Boolean createDimensions(List <Guid> guidList) { doc = RhinoDoc.ActiveDoc; go = new Rhino.Input.Custom.GetObject(); go.GeometryFilter = Rhino.DocObjects.ObjectType.Curve; go.GroupSelect = true; go.SubObjectSelect = false; go.EnableClearObjectsOnEntry(false); go.EnableUnselectObjectsOnExit(false); go.DeselectAllBeforePostSelect = false; go.EnableSelPrevious(true); go.EnablePreSelect(true, false); go.GeometryFilter = Rhino.DocObjects.ObjectType.Curve; go.SetCommandPrompt("Select panels to create dimensions"); while (true) { go.ClearCommandOptions(); // perform the get operation. This will prompt the user to select the list of curves, but also // allow for command line options defined above GetResult result = go.GetMultiple(1, 0); if (result == GetResult.Option) { go.EnablePreSelect(false, true); continue; } else if (result == GetResult.Number) { continue; } else if (result != GetResult.Object) { } if (go.ObjectsWerePreselected) { go.EnablePreSelect(true, true); break; } break; } int objecTCount = go.ObjectCount; foreach (ObjRef objRef in go.Objects()) //Go through each curve in the objects list { Curve curve = objRef.Curve(); // If curve is null, means objRef is not a curve if (curve == null) { dimensionsCreated = false; continue; } // If curve is not Closed Curve if (curve.IsClosed == false) { RhinoApp.WriteLine(objRef.ToString() + " curve is open"); dimensionsCreated = false; continue; } if (curve.IsPlanar() == false) { RhinoApp.WriteLine(objRef.ToString() + " curve is not planar"); dimensionsCreated = false; continue; } MetrixUtilities.createMetrixRealDimension(); BoundingBox boundingBox = curve.GetBoundingBox(Plane.WorldXY); Point3d min = boundingBox.Min; Point3d max = boundingBox.Max; //Add Horizontal dimension origin = new Point3d(min.X, max.Y, 0); offset = new Point3d(max.X, max.Y, 0); pt = new Point3d((offset.X - origin.X) / 2, max.Y + 180, 0); plane = Plane.WorldXY; plane.Origin = origin; guidList = drawDimension(plane, pt, offset, origin, guidList, doc); //draw the dimension //Add vertical Dimensions origin = new Point3d(min.X, min.Y, 0); offset = new Point3d(min.X, max.Y, 0); //left pt = new Point3d(min.X - 180, (offset.Y - origin.Y) / 2, 0); plane = Plane.WorldXY; plane.XAxis = new Vector3d(0, -1, 0); //-1 to rotate the dimension vertically plane.YAxis = new Vector3d(-1, 0, 0); plane.ZAxis = new Vector3d(0, 0, -1); plane.Origin = origin; guidList = drawDimension(plane, pt, offset, origin, guidList, doc); //draw the dimension dimensionsCreated = true; } doc.Views.Redraw(); //finally redraw to refresh the screen and display dimensions to user return(dimensionsCreated); }
public static Rhino.Commands.Result OrientOnSrf(Rhino.RhinoDoc doc) { // Select objects to orient Rhino.Input.Custom.GetObject go = new Rhino.Input.Custom.GetObject(); go.SetCommandPrompt("Select objects to orient"); go.SubObjectSelect = false; go.GroupSelect = true; go.GetMultiple(1, 0); if (go.CommandResult() != Rhino.Commands.Result.Success) { return(go.CommandResult()); } // Point to orient from Rhino.Input.Custom.GetPoint gp = new Rhino.Input.Custom.GetPoint(); gp.SetCommandPrompt("Point to orient from"); gp.Get(); if (gp.CommandResult() != Rhino.Commands.Result.Success) { return(gp.CommandResult()); } // Define source plane Rhino.Display.RhinoView view = gp.View(); if (view == null) { view = doc.Views.ActiveView; if (view == null) { return(Rhino.Commands.Result.Failure); } } Rhino.Geometry.Plane source_plane = view.ActiveViewport.ConstructionPlane(); source_plane.Origin = gp.Point(); // Surface to orient on Rhino.Input.Custom.GetObject gs = new Rhino.Input.Custom.GetObject(); gs.SetCommandPrompt("Surface to orient on"); gs.GeometryFilter = Rhino.DocObjects.ObjectType.Surface; gs.SubObjectSelect = true; gs.DeselectAllBeforePostSelect = false; gs.OneByOnePostSelect = true; gs.Get(); if (gs.CommandResult() != Rhino.Commands.Result.Success) { return(gs.CommandResult()); } Rhino.DocObjects.ObjRef objref = gs.Object(0); // get selected surface object Rhino.DocObjects.RhinoObject obj = objref.Object(); if (obj == null) { return(Rhino.Commands.Result.Failure); } // get selected surface (face) Rhino.Geometry.Surface surface = objref.Surface(); if (surface == null) { return(Rhino.Commands.Result.Failure); } // Unselect surface obj.Select(false); // Point on surface to orient to gp.SetCommandPrompt("Point on surface to orient to"); gp.Constrain(surface, false); gp.Get(); if (gp.CommandResult() != Rhino.Commands.Result.Success) { return(gp.CommandResult()); } // Do transformation Rhino.Commands.Result rc = Rhino.Commands.Result.Failure; double u, v; if (surface.ClosestPoint(gp.Point(), out u, out v)) { Rhino.Geometry.Plane target_plane; if (surface.FrameAt(u, v, out target_plane)) { // Build transformation Rhino.Geometry.Transform xform = Rhino.Geometry.Transform.PlaneToPlane(source_plane, target_plane); // Do the transformation. In this example, we will copy the original objects const bool delete_original = false; for (int i = 0; i < go.ObjectCount; i++) { doc.Objects.Transform(go.Object(i), xform, delete_original); } doc.Views.Redraw(); rc = Rhino.Commands.Result.Success; } } return(rc); }
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 Rhino.Commands.Result AddPoints(Rhino.RhinoDoc doc) { // Input interval double _interval = 0.1; double _noise = 1; // 1% noise var input = new Rhino.Input.Custom.GetNumber(); input.SetCommandPrompt("Input interval(0.0 ~ 1.0)<0.1>"); Rhino.Input.GetResult res = input.Get(); if (res == Rhino.Input.GetResult.Number) { _interval = input.Number(); } if (_interval == 0.0) { _interval = 0.1; } input.SetCommandPrompt("Noise factor(0.0 ~ 100.0)"); res = input.Get(); if (res == Rhino.Input.GetResult.Number) { _noise = input.Number(); } // Select surface var go = new Rhino.Input.Custom.GetObject(); go.SetCommandPrompt("Select surface"); go.GeometryFilter = Rhino.DocObjects.ObjectType.Surface; res = go.GetMultiple(1, 1024); if (res == Rhino.Input.GetResult.Nothing) { return(Rhino.Commands.Result.Failure); } Utility.SetOutputCount(10); for (int i = 0; i < go.ObjectCount; i++) { Rhino.Geometry.Surface surfaceA = go.Object(i).Surface(); if (surfaceA == null) { return(Rhino.Commands.Result.Failure); } Rhino.Geometry.Interval domU = surfaceA.Domain(0); Rhino.Geometry.Interval domV = surfaceA.Domain(1); double u, v; u = v = 0.0; for (u = domU.Min; u <= domU.Max; u += _interval) { for (v = domV.Min; v <= domV.Max; v += _interval) { Rhino.Geometry.Point3d pt = surfaceA.PointAt(u, v); Rhino.Geometry.Vector3d n = surfaceA.NormalAt(u, v); Rhino.Geometry.Point3d pt2 = randomPoint(surfaceA, u, v, _interval, _noise); doc.Objects.AddPoint(pt2); } } } return(Rhino.Commands.Result.Success); }
protected override Result RunCommand(RhinoDoc doc, RunMode mode) { // For this example we will use a GetPoint class, but all of the custom // "Get" classes support command line options. Rhino.Input.Custom.GetObject go = new Rhino.Input.Custom.GetObject(); go.SetCommandPrompt("Select panels to create fixing holes"); //get the default values for the properties double holeSize = Properties.Settings.Default.FixingHoleSize; double offsetX = Properties.Settings.Default.FixingHoleOffsetX; double offsetY = Properties.Settings.Default.FixingHoleOffsetY; double spacing = Properties.Settings.Default.FixingHoleSpacing; double minSpacing = Properties.Settings.Default.FixingHoleMinimum; // set up the options Rhino.Input.Custom.OptionDouble holeSizeOption = new Rhino.Input.Custom.OptionDouble(holeSize); Rhino.Input.Custom.OptionDouble offsetXOption = new Rhino.Input.Custom.OptionDouble(offsetX); Rhino.Input.Custom.OptionDouble offsetYOption = new Rhino.Input.Custom.OptionDouble(offsetY); Rhino.Input.Custom.OptionDouble spacingOption = new Rhino.Input.Custom.OptionDouble(spacing); Rhino.Input.Custom.OptionDouble minSpacingOption = new Rhino.Input.Custom.OptionDouble(minSpacing); //using option to get values and save automatically(only if user enters) go.AddOptionDouble("HoleSize", ref holeSizeOption); go.AddOptionDouble("OffsetX", ref offsetXOption); go.AddOptionDouble("OffsetY", ref offsetYOption); go.AddOptionDouble("Spacing", ref spacingOption); go.AddOptionDouble("MinSpacing", ref minSpacingOption); go.AcceptNumber(true, true); go.GeometryFilter = Rhino.DocObjects.ObjectType.Curve; go.GroupSelect = true; go.SubObjectSelect = false; go.EnableClearObjectsOnEntry(false); go.EnableUnselectObjectsOnExit(false); go.DeselectAllBeforePostSelect = false; go.EnableSelPrevious(true); go.EnablePreSelect(true, false); go.GeometryFilter = Rhino.DocObjects.ObjectType.Curve; while (true) { go.ClearCommandOptions(); holeSizeOption = new Rhino.Input.Custom.OptionDouble(holeSize); offsetXOption = new Rhino.Input.Custom.OptionDouble(offsetX); offsetYOption = new Rhino.Input.Custom.OptionDouble(offsetY); spacingOption = new Rhino.Input.Custom.OptionDouble(spacing); minSpacingOption = new Rhino.Input.Custom.OptionDouble(minSpacing); go.AddOptionDouble("HoleSize", ref holeSizeOption); go.AddOptionDouble("OffsetX", ref offsetXOption); go.AddOptionDouble("OffsetY", ref offsetYOption); go.AddOptionDouble("Spacing", ref spacingOption); go.AddOptionDouble("MinSpacing", ref minSpacingOption); // perform the get operation. This will prompt the user to select the list of curves, but also // allow for command line options defined above GetResult result = go.GetMultiple(1, 0); if (result == GetResult.Option) { holeSize = holeSizeOption.CurrentValue; offsetX = offsetXOption.CurrentValue; offsetY = offsetYOption.CurrentValue; spacing = spacingOption.CurrentValue; minSpacing = minSpacingOption.CurrentValue; go.EnablePreSelect(false, true); continue; } //else if (result == GetResult.Number) //{ // border = go.Number(); // continue; //} else if (result != GetResult.Object) { return(Result.Cancel); } if (go.ObjectsWerePreselected) { go.EnablePreSelect(false, true); continue; } break; } int objecTCount = go.ObjectCount; foreach (ObjRef objRef in go.Objects()) { Curve curve = objRef.Curve(); // If curve is null, means objRef is not a curve if (curve == null) { continue; } // If curve is not Closed Curve if (curve.IsClosed == false) { RhinoApp.WriteLine(objRef.ToString() + " curve is open"); continue; } if (curve.IsPlanar() == false) { RhinoApp.WriteLine(objRef.ToString() + " curve is not planar"); continue; } // Find the boundary BoundingBox boundingBox = curve.GetBoundingBox(Plane.WorldXY); Point3d min = boundingBox.Min; Point3d max = boundingBox.Max; List <Point3d> pointsList = new List <Point3d> (); // Calculate top and bottom fixing holes double runningX = min.X + offsetX; //25 double runningY = max.Y - offsetY; //-626.5 Point3d point; while (runningX < (max.X - offsetX) - minSpacing) { point = new Point3d(runningX, runningY, 0); pointsList.Add(point); point = new Point3d(runningX, min.Y + offsetY, 0); pointsList.Add(point); runningX = runningX + spacing; } point = new Point3d(max.X - offsetX, runningY, 0); //adds the top right fixing hole pointsList.Add(point); point = new Point3d(max.X - offsetX, min.Y + offsetY, 0); //adds the bottom right fixing hole pointsList.Add(point); runningY = runningY - spacing; // Calculate the sides while (runningY > (min.Y - offsetY) + minSpacing) { point = new Point3d(min.X + offsetX, runningY, 0); //adds the left fixing holes pointsList.Add(point); point = new Point3d(max.X - offsetX, runningY, 0); //adds the right fixing hole pointsList.Add(point); runningY = runningY - spacing; } // Process the curve Plane plane = Rhino.Geometry.Plane.WorldXY; int layerIndex = doc.Layers.CurrentLayerIndex; RhinoUtilities.SetActiveLayer("Fixing Holes", System.Drawing.Color.Black); // Draw all the holes Round round = new Round(); round.X = holeSize; foreach (Point3d p in pointsList) { round.drawTool(p); } //Round round = new Round(); //round.X = holeSize; //round.drawTool(point); //offsetCurves = curve.Offset(plane, -border, 0.1, Rhino.Geometry.CurveOffsetCornerStyle.Sharp); //if (curve.Contains(offsetCurves[0].PointAtStart, Plane.WorldXY, 0) == PointContainment.Outside) //{ // offsetCurves = curve.Offset(plane, border, 0.1, Rhino.Geometry.CurveOffsetCornerStyle.Sharp); //} //foreach (Curve c in offsetCurves) //{ // doc.Objects.AddCurve(c); //} //// } doc.Layers.SetCurrentLayerIndex(layerIndex, true); } doc.Views.Redraw(); Properties.Settings.Default.FixingHoleSize = holeSize; Properties.Settings.Default.FixingHoleOffsetX = offsetX; Properties.Settings.Default.FixingHoleOffsetY = offsetY; Properties.Settings.Default.FixingHoleSpacing = spacing; Properties.Settings.Default.FixingHoleMinimum = minSpacing; Properties.Settings.Default.Save(); return(Result.Success); }