protected override Result RunCommand(RhinoDoc doc, RunMode mode) { var gp = new GetPoint(); gp.SetCommandPrompt("Start point"); gp.AddOptionEnumList("Justification", m_justification); gp.ConstrainToConstructionPlane(false); for (;;) { var res = gp.Get(); if (res == GetResult.Option) { var option = gp.Option(); if (null != option) { var list = Enum.GetValues(typeof(TextJustification)).Cast <TextJustification>().ToList(); m_justification = list[option.CurrentListOptionIndex]; } continue; } if (res != GetResult.Point) { return(Result.Cancel); } break; } var point = gp.Point(); var plane = gp.View().ActiveViewport.ConstructionPlane(); plane.Origin = point; var text = new TextEntity { Plane = plane, Justification = m_justification }; text.PlainText = text.Justification.ToString(); var attr = new ObjectAttributes { ColorSource = ObjectColorSource.ColorFromObject, ObjectColor = Color.FromArgb(0, 0, 255) }; var object_id = doc.Objects.AddText(text, attr); RhinoApp.WriteLine("{0}", object_id.ToString()); doc.Views.Redraw(); return(Result.Success); }
protected override Result RunCommand(RhinoDoc doc, RunMode mode) { GetPoint gp = new GetPoint(); gp.SetCommandPrompt("Start point"); gp.AddOptionEnumList("Justification", m_justification); gp.ConstrainToConstructionPlane(false); for (;;) { GetResult res = gp.Get(); if (res == GetResult.Option) { CommandLineOption option = gp.Option(); if (null != option) { List <TextJustification> list = Enum.GetValues(typeof(TextJustification)).Cast <TextJustification>().ToList(); m_justification = list[option.CurrentListOptionIndex]; } continue; } else if (res != GetResult.Point) { return(Result.Cancel); } break; } Point3d point = gp.Point(); Plane plane = gp.View().ActiveViewport.ConstructionPlane(); plane.Origin = point; TextEntity text = new TextEntity(); text.Plane = plane; text.Justification = m_justification; text.Text = text.Justification.ToString(); doc.Objects.AddPoint(point); doc.Objects.AddText(text); doc.Views.Redraw(); return(Result.Success); }
protected override Result RunCommand(RhinoDoc doc, RunMode mode) { var gp = new GetPoint(); gp.SetCommandPrompt("Center of circle"); gp.Get(); if (gp.CommandResult() != Result.Success) { return(gp.CommandResult()); } var view = gp.View(); if (null == view) { return(Result.Failure); } var plane = view.ActiveViewport.ConstructionPlane(); plane.Origin = gp.Point(); var gr = new GetRadiusPoint(plane); gr.SetCommandPrompt("Radius"); gr.Get(); if (gr.CommandResult() != Result.Success) { return(gr.CommandResult()); } if (gr.CalculateCircle(gr.Point())) { doc.Objects.AddCircle(gr.Circle); doc.Views.Redraw(); } return(Result.Success); }
protected override Result RunCommand(RhinoDoc doc, RunMode mode) { var gp = new GetPoint(); gp.SetCommandPrompt("Pick a point"); gp.Get(); if (gp.CommandResult() != Result.Success) { return(gp.CommandResult()); } var point = gp.Point(); var format = string.Format("F{0}", doc.DistanceDisplayPrecision); var provider = CultureInfo.InvariantCulture; var x = point.X.ToString(format, provider); var y = point.Y.ToString(format, provider); var z = point.Z.ToString(format, provider); RhinoApp.WriteLine("World coordinates: {0},{1},{2}", x, y, z); var view = gp.View(); if (null != view) { var plane = view.ActiveViewport.ConstructionPlane(); var xform = Transform.ChangeBasis(Plane.WorldXY, plane); point.Transform(xform); x = point.X.ToString(format, provider); y = point.Y.ToString(format, provider); z = point.Z.ToString(format, provider); RhinoApp.WriteLine("CPlane coordinates: {0},{1},{2}", x, y, z); } return(Result.Success); }
/// <summary> /// Runs the command /// </summary> protected override Result RunCommand(RhinoDoc doc, RunMode mode) { // Select objects to orient var go = new GetObject(); go.SetCommandPrompt("Select objects to orient"); go.SubObjectSelect = false; go.GroupSelect = true; go.GetMultiple(1, 0); if (go.CommandResult() != Result.Success) { return(go.CommandResult()); } // Point to orient from var gp = new GetPoint(); gp.SetCommandPrompt("Point to orient from"); gp.Get(); if (gp.CommandResult() != Result.Success) { return(gp.CommandResult()); } // Define source plane var view = gp.View(); if (view == null) { view = doc.Views.ActiveView; if (view == null) { return(Result.Failure); } } var plane = view.ActiveViewport.ConstructionPlane(); plane.Origin = gp.Point(); // Curve to orient on var gc = new GetObject(); gc.SetCommandPrompt("Curve to orient on"); gc.GeometryFilter = ObjectType.Curve; gc.EnablePreSelect(false, true); gc.DeselectAllBeforePostSelect = false; gc.Get(); if (gc.CommandResult() != Result.Success) { return(gc.CommandResult()); } var objref = gc.Object(0); var obj = objref.Object(); var curve = objref.Curve(); if (obj == null || curve == null) { return(Result.Failure); } // Unselect curve obj.Select(false); // Point on surface to orient to var gx = new GetOrientPerpendicularPoint(curve, plane, go.Object(0).Object()); gx.SetCommandPrompt("New base point on curve"); gx.Get(); if (gx.CommandResult() != Result.Success) { return(gx.CommandResult()); } // One final calculation var xform = new Transform(1); if (gx.CalculateTransform(gx.View().ActiveViewport, gx.Point(), ref xform)) { doc.Objects.Transform(go.Object(0).Object(), xform, true); doc.Views.Redraw(); } return(Result.Success); }
/// <summary> /// Called by Rhino to 'run' this command /// </summary> protected override Result RunCommand(RhinoDoc doc, RunMode mode) { // Select objects to orient var go = new GetObject(); go.SetCommandPrompt("Select objects to orient"); go.SubObjectSelect = false; go.EnableIgnoreGrips(true); go.GetMultiple(1, 0); if (go.CommandResult() != Result.Success) { return(go.CommandResult()); } // Point to move from var gp = new GetPoint(); gp.SetCommandPrompt("Point to move from"); gp.Get(); if (gp.CommandResult() != Result.Success) { return(gp.CommandResult()); } // Calculate source plane var plane = gp.View().ActiveViewport.ConstructionPlane(); plane.Origin = gp.Point(); // Mesh to orient on var gm = new GetObject(); gm.SetCommandPrompt("Mesh to orient on"); gm.GeometryFilter = ObjectType.Mesh; gm.EnablePreSelect(false, true); gm.DeselectAllBeforePostSelect = false; gm.Get(); if (gm.CommandResult() != Result.Success) { return(gm.CommandResult()); } var mesh = gm.Object(0).Mesh(); if (null == mesh) { return(Result.Failure); } // Point on mesh to orient to var gpm = new GetPointOnMesh(mesh, plane); gpm.SetCommandPrompt("Point on mesh to orient to"); gpm.AppendObjects(go); gpm.Get(); if (gpm.CommandResult() != Result.Success) { return(gpm.CommandResult()); } // One final calculation var xform = new Transform(1); if (gpm.CalculateTransform(gpm.View().ActiveViewport, gpm.Point(), ref xform)) { foreach (var objRef in go.Objects()) { var obj = objRef.Object(); if (null != obj) { doc.Objects.Transform(obj, xform, true); } } doc.Views.Redraw(); } return(Result.Success); }
protected override Result RunCommand(RhinoDoc doc, RunMode mode) { GetPoint gp = new GetPoint(); gp.SetCommandPrompt("Base of cylinder"); gp.Get(); if (gp.CommandResult() != Result.Success) { return(gp.CommandResult()); } Point3d center = gp.Point(); Plane plane = Plane.WorldXY; RhinoView view = gp.View(); if (null != view) { plane = view.ActiveViewport.ConstructionPlane(); } plane.Origin = center; var cylinder = new SampleCsGumballCylinder(plane, m_radius, m_height); var radius_go = new GumballObject(); var height_go = new GumballObject(); var radius_dc = new GumballDisplayConduit(); var height_dc = new GumballDisplayConduit(); var radius_gas = RadiusGumballAppearanceSettings(); var height_gas = HeightGumballAppearanceSettings(); while (true) { radius_go.SetFromPlane(cylinder.RadiusPlane); height_go.SetFromPlane(cylinder.HeightPlane); radius_dc.SetBaseGumball(radius_go, radius_gas); height_dc.SetBaseGumball(height_go, height_gas); radius_dc.Enabled = true; height_dc.Enabled = true; var gx = new SampleCsGumballCylinderGetPoint(cylinder, radius_dc, height_dc); gx.SetCommandPrompt("Drag gumball. Press Enter when done"); gx.AcceptNothing(true); gx.MoveGumball(); radius_dc.Enabled = false; height_dc.Enabled = false; if (gx.CommandResult() != Result.Success) { break; } var res = gx.Result(); if (res == GetResult.Point) { var radius = cylinder.Radius; var height = cylinder.Height; cylinder = new SampleCsGumballCylinder(plane, radius, height); continue; } if (res == GetResult.Nothing) { m_radius = cylinder.Radius; m_height = cylinder.Height; cylinder = new SampleCsGumballCylinder(plane, m_radius, m_height); var brep = cylinder.ToBrep; if (null != brep) { doc.Objects.AddBrep(brep); } } break; } doc.Views.Redraw(); return(Result.Success); }
protected override Result RunCommand(RhinoDoc doc, RunMode mode) { //pick objects to expand Rhino.Input.Custom.GetObject go = new Rhino.Input.Custom.GetObject(); go.SetCommandPrompt("Select objects to expand"); go.GroupSelect = true; go.SubObjectSelect = false; go.EnableClearObjectsOnEntry(false); go.EnableUnselectObjectsOnExit(false); go.DeselectAllBeforePostSelect = false; go.GetMultiple(1, 0); //Compute center Point3d centersAdd = new Point3d(); for (int i = 0; i < go.ObjectCount; i++) { BoundingBox bbObj = go.Object(i).Geometry().GetBoundingBox(true); Point3d bbObjCenter = bbObj.Center; centers.Add(bbObjCenter); centersAdd += bbObjCenter; Rhino.DocObjects.ObjRef objref = go.Object(i); // get selected surface object Rhino.DocObjects.RhinoObject obj = objref.Object(); goList.Add(obj); } Point3d allCenter = centersAdd / centers.Count; //pick center GetPoint gp = new GetPoint(); gp.SetCommandPrompt("Basepoint. Press Enter for automatic."); gp.AcceptNothing(true); var resgp = gp.Get(); if (resgp == GetResult.Nothing) { scaleCenter = allCenter; } else { scaleCenter = gp.Point(); } //Expansion factor GetPoint gp2 = new GetPoint(); gp2.SetCommandPrompt("Expansion factor or first reference point <" + factor + ">"); gp2.DrawLineFromPoint(scaleCenter, true); gp2.AcceptNumber(true, true); GetResult gr = gp2.Get(); Rhino.Display.RhinoView view = gp2.View(); plane2D = view.ActiveViewport.ConstructionPlane(); if (gr == GetResult.Number) { factor = gp2.Number(); } if (gr == GetResult.Point) { scaleRefPoint = gp2.Point(); Line line1 = new Line(scaleCenter, scaleRefPoint); Guid tempLine = doc.Objects.AddLine(line1); Guid tempPoint = doc.Objects.AddPoint(scaleRefPoint); if (scaleCenter == gp2.Point()) { return(Rhino.Commands.Result.Cancel); } GetPoint gp3 = new GetPoint(); gp3.SetCommandPrompt("Secondt reference point"); gp3.AddOptionList("ScaleDimension", dimensions, 0); gp3.DrawLineFromPoint(scaleCenter, true); gp3.DynamicDraw += RefObjDraw; while (true) { GetResult res = gp3.Get(); if (res == GetResult.Option) { dimensionIndex = gp3.Option().CurrentListOptionIndex; continue; } else if (res == GetResult.Point) { Point3d scaleRefPoint2 = gp3.Point(); factor = (scaleCenter.DistanceTo(scaleRefPoint2)) / (scaleCenter.DistanceTo(scaleRefPoint)); doc.Objects.Delete(tempLine, true); doc.Objects.Delete(tempPoint, true); } break; } } RhinoApp.WriteLine("Expantion factor: " + factor); //Compute translation //Translate 3d if (dimensionIndex == 0) { for (int i = 0; i < go.ObjectCount; i++) { Vector3d vec = (centers[i] - scaleCenter) * (factor - 1); var xform = Transform.Translation(vec); doc.Objects.Transform(go.Object(i), xform, true); } } //Translate 2d else if (dimensionIndex == 1) { for (int i = 0; i < go.ObjectCount; i++) { Rhino.Geometry.Vector3d vec = (centers[i] - scaleCenter) * (factor - 1); Vector3d planeNormal = plane2D.Normal; if (planeNormal[0] != 0) { vec.X = 0; } else if (planeNormal[1] != 0) { vec.Y = 0; } else if (planeNormal[2] != 0) { vec.Z = 0; } var xform = Rhino.Geometry.Transform.Translation(vec); doc.Objects.Transform(go.Object(i), xform, true); } } //Translate 1d else if (dimensionIndex == 2) { for (int i = 0; i < go.ObjectCount; i++) { Vector3d vecEach = (centers[i] - scaleCenter); double vecEachLength = vecEach.Length * (factor - 1); Vector3d vec = (scaleRefPoint - scaleCenter); double angleVec = Vector3d.VectorAngle(vecEach, vec); int pol = 1; if (angleVec > 1.57) { pol = -1; } vec.Unitize(); vec = vec * vecEachLength * pol; var xform = Transform.Translation(vec); doc.Objects.Transform(go.Object(i), xform, true); } } goList = new List <Object>(); centers = new List <Point3d>(); dimensionIndex = 0; plane2D = new Plane(); doc.Views.Redraw(); return(Result.Success); }
protected override Result RunCommand(RhinoDoc doc, RunMode mode) { // Locals Plane plane; Point3d base_point = Point3d.Unset; Point3d ref_point = Point3d.Unset; GetResult res = GetResult.Nothing; Result rc = Result.Nothing; // Select objects to rotate TransformObjectList list = new TransformObjectList(); rc = SelectObjects("Select objects to rotate", list); if (rc != Result.Success) { return(rc); } GetPoint gp = new GetPoint(); gp.SetCommandPrompt("Center of rotation"); gp.Get(); if (gp.CommandResult() != Result.Success) { return(gp.CommandResult()); } RhinoView view = gp.View(); if (null == view) { return(Result.Failure); } base_point = gp.Point(); plane = view.ActiveViewport.ConstructionPlane(); plane.Origin = base_point; // Angle or first reference point GetReferencePoint gr = new GetReferencePoint(base_point); gr.SetCommandPrompt("Angle or first reference point"); res = gr.Get(); if (res == GetResult.Point) { view = gr.View(); rc = (null != view) ? Result.Success : Result.Failure; if (rc == Result.Success) { plane = view.ActiveViewport.ConstructionPlane(); plane.Origin = base_point; ref_point = plane.ClosestPoint(gr.Point()); if (base_point.DistanceTo(ref_point) <= RhinoMath.ZeroTolerance) { rc = Result.Nothing; } } if (rc != Result.Success) { return(rc); } } else if (res == GetResult.Number) { Transform xform = Transform.Rotation(Rhino.RhinoMath.ToRadians(gr.Number()), plane.Normal, base_point); rc = (xform.IsValid) ? Result.Success : Result.Failure; if (rc == Result.Success) { TransformObjects(list, xform, false, false); doc.Views.Redraw(); } return(rc); } else { return(Result.Cancel); } // Second reference point GetRotationTransform gx = new GetRotationTransform(plane, base_point, ref_point); gx.SetCommandPrompt("Second reference point"); gx.AddTransformObjects(list); res = gx.GetXform(); if (res == GetResult.Point) { view = gx.View(); rc = (null != view) ? Result.Success : Result.Failure; if (rc == Result.Success) { Transform xform = gx.CalculateTransform(view.ActiveViewport, gx.Point()); rc = (xform.IsValid) ? Result.Success : Result.Failure; if (rc == Result.Success) { TransformObjects(list, xform, false, false); doc.Views.Redraw(); } } } else if (res == GetResult.Number) { Transform xform = Transform.Rotation(Rhino.RhinoMath.ToRadians(gx.Number()), plane.Normal, base_point); rc = (xform.IsValid) ? Result.Success : Result.Failure; if (rc == Result.Success) { TransformObjects(list, xform, false, false); doc.Views.Redraw(); } } else { rc = Result.Cancel; } return(rc); }
protected override Result RunCommand(RhinoDoc doc, RunMode mode) { var myTypes = ObjectType.AnyObject ^ ObjectType.BrepLoop; //pick objects to expand Rhino.Input.Custom.GetObject go = new Rhino.Input.Custom.GetObject(); go.SetCommandPrompt("Select objects to scale"); go.GeometryFilter = myTypes; //go.GroupSelect = true; go.SubObjectSelect = true; //go.EnableClearObjectsOnEntry(false); //go.EnableUnselectObjectsOnExit(false); //go.DeselectAllBeforePostSelect = false; go.GetMultiple(1, 0); //Compute center Point3d centersAdd = new Point3d(); for (int i = 0; i < go.ObjectCount; i++) { BoundingBox bbObj = go.Object(i).Geometry().GetBoundingBox(true); Point3d bbObjCenter = bbObj.Center; centers.Add(bbObjCenter); centersAdd += bbObjCenter; Rhino.DocObjects.ObjRef objref = go.Object(i); // get selected surface object Rhino.DocObjects.RhinoObject obj = objref.Object(); dynRef.Add(objref); } Point3d allCenter = centersAdd / centers.Count; //pick center GetPoint gp = new GetPoint(); gp.SetCommandPrompt("Basepoint. Press Enter for automatic."); gp.AcceptNothing(true); var resgp = gp.Get(); if (resgp == GetResult.Nothing) { scaleCenter = allCenter; } else { scaleCenter = gp.Point(); } Rhino.Display.RhinoView view = gp.View(); plane2D = view.ActiveViewport.ConstructionPlane(); //Expansion factor GetPoint gp2 = new GetPoint(); gp2.SetCommandPrompt("Scale factor or first reference point <" + factor + ">"); gp2.DrawLineFromPoint(scaleCenter, true); gp2.AcceptNumber(true, true); GetResult gr = gp2.Get(); if (gr == GetResult.Number) { factor = gp2.Number(); } if (gr == GetResult.Point) { scaleRefPoint = gp2.Point(); Line line1 = new Line(scaleCenter, scaleRefPoint); Guid tempLine = doc.Objects.AddLine(line1); Guid tempPoint = doc.Objects.AddPoint(scaleRefPoint); if (scaleCenter == gp2.Point()) { return(Rhino.Commands.Result.Cancel); } GetPoint gp3 = new GetPoint(); gp3.SetCommandPrompt("Secondt reference point"); gp3.AddOptionList("ScaleDimension", dimensions, 0); gp3.DrawLineFromPoint(scaleCenter, true); gp3.DynamicDraw += RefObjDraw; while (true) { GetResult res = gp3.Get(); if (res == GetResult.Option) { dimensionIndex = gp3.Option().CurrentListOptionIndex; continue; } else if (res == GetResult.Point) { Point3d scaleRefPoint2 = gp3.Point(); factor = (scaleCenter.DistanceTo(scaleRefPoint2)) / (scaleCenter.DistanceTo(scaleRefPoint)); doc.Objects.Delete(tempLine, true); doc.Objects.Delete(tempPoint, true); } break; } } RhinoApp.WriteLine("Scale factor: " + factor); //Compute translation //Translate 3d if (dimensionIndex == 0) { for (int i = 0; i < go.ObjectCount; i++) { var xform = Transform.Scale(centers[i], factor); var objref = go.Object(i); var brep = objref.Brep(); var index = objref.GeometryComponentIndex.Index; if (index > 0) { brep.TransformComponent(new[] { objref.GeometryComponentIndex }, xform, doc.ModelAbsoluteTolerance, 0, true); doc.Objects.Replace(objref.ObjectId, brep); } else { doc.Objects.Transform(go.Object(i), xform, true); } } } //Translate 2d else if (dimensionIndex == 1) { for (int i = 0; i < go.ObjectCount; i++) { plane2D.Origin = centers[i]; var xform = Rhino.Geometry.Transform.Scale(plane2D, factor, factor, 1); var objref = go.Object(i); var brep = objref.Brep(); var index = objref.GeometryComponentIndex.Index; if (index > 0) { brep.TransformComponent(new[] { objref.GeometryComponentIndex }, xform, doc.ModelAbsoluteTolerance, 0, true); doc.Objects.Replace(objref.ObjectId, brep); } else { doc.Objects.Transform(go.Object(i), xform, true); } } } //Translate 1d else if (dimensionIndex == 2) { for (int i = 0; i < go.ObjectCount; i++) { Vector3d vec = (scaleRefPoint - scaleCenter); Plane scalePlane = new Plane(centers[i], vec); var xform = Transform.Scale(scalePlane, 1, 1, factor); var objref = go.Object(i); var brep = objref.Brep(); var index = objref.GeometryComponentIndex.Index; if (index > 0) { brep.TransformComponent(new[] { objref.GeometryComponentIndex }, xform, doc.ModelAbsoluteTolerance, 0, true); doc.Objects.Replace(objref.ObjectId, brep); } else { doc.Objects.Transform(go.Object(i), xform, true); } } } centers = new List <Point3d>(); dimensionIndex = 0; plane2D = new Plane(); dynRef = new List <Rhino.DocObjects.ObjRef>(); doc.Views.Redraw(); return(Result.Success); }