public override Line EnterLine(string startPointPrompt = "Enter start of line", string endPointPrompt = "Enter end of line", Vector?startPoint = null) { /*GetLine gL = new GetLine(); * gL.FirstPointPrompt = startPointPrompt; * gL.SecondPointPrompt = endPointPrompt; * if (startPoint != null) gL.SetFirstPoint(FBtoRC.Convert(startPoint ?? Vector.Unset)); * RC.Line output; * if (gL.Get(out output) == Result.Cancel) throw new OperationCanceledException("Operation cancelled by user"); * return RCtoFB.Convert(output);*/ GetPoint gP = new GetPoint(); gP.SetCommandPrompt(startPointPrompt); if (gP.Get() == GetResult.Cancel) { throw new OperationCanceledException("Operation cancelled by user"); } GetPoint gP2 = new GetPointDynamic(); gP2.SetCommandPrompt(endPointPrompt); gP2.SetBasePoint(gP.Point(), true); gP2.EnableDrawLineFromPoint(true); gP2.DrawLineFromPoint(gP.Point(), true); if (gP2.Get() == GetResult.Cancel) { throw new OperationCanceledException("Operation cancelled by user"); } return(new Line(FromRC.Convert(gP.Point()), FromRC.Convert(gP2.Point()))); }
protected override void OnDynamicDraw(GetPointDrawEventArgs e) { IAction action = Core.Instance.Actions.CurrentAction; if (action != null) { PreviewParameters pParam; if (SelectionPoints == null) { Point3d basePt; TryGetBasePoint(out basePt); pParam = new PreviewParameters(true, null, FromRC.Convert(e.CurrentPoint), FromRC.Convert(basePt)); } else { IList <Vector> sPts = new List <Vector>(); foreach (Vector pt in SelectionPoints) { sPts.Add(pt); // Draw points: e.Display.DrawPoint(ToRC.Convert(pt), PointStyle.X, 3, System.Drawing.Color.Orange); } sPts.Add(FromRC.Convert(e.CurrentPoint)); pParam = new PreviewParameters(true, null, sPts); } DisplayLayer previewLayer = action.PreviewLayer(pParam); if (previewLayer != null) { var rParam = new RhinoRenderingParameters(e); previewLayer.Draw(rParam); } } base.OnDynamicDraw(e); }
/// <summary> /// The timer used to defer replacement processing operations /// </summary> //private Timer _ObjectReplacedWaitTimer = null; private void ProcessObjectReplacedWaitingList(object sender, EventArgs args) { if (_ReplacedElements.Count > 0 || _ReplacedNodesWaitingList.Count > 0) { foreach (KeyValuePair <Node, RhinoReplaceObjectEventArgs> kvp in _ReplacedNodesWaitingList) { Node node = kvp.Key; RC.GeometryBase geometry = kvp.Value.NewRhinoObject.Geometry; if (geometry is RC.Point) { RC.Point rPt = (RC.Point)geometry; Vector pos = FromRC.Convert(rPt.Location); node.MoveTo(pos, true, _ReplacedElements); } } _ReplacedElements.GenerateNodes(new NodeGenerationParameters()); _ReplacedElements.Clear(); _ReplacedNodesWaitingList.Clear(); //_ObjectReplacedWaitTimer.Stop(); Core.Instance.Host.Refresh(); } }
private void HandlesReplaceRhinoObject(object sender, RhinoReplaceObjectEventArgs e) { if (!RhinoOutput.Writing) { ModelObject mObj = LinkedModelObject(e.ObjectId); if (mObj != null) { RC.GeometryBase geometry = e.NewRhinoObject.Geometry; if (mObj is Element) { Element element = (Element)mObj; VertexGeometry vG = FromRC.Convert(geometry); if (vG == null && geometry is RC.Curve) { // If curve not convertable, reduce to straight line: RC.Curve rCrv = (RC.Curve)geometry; vG = new Line(FromRC.Convert(rCrv.PointAtStart), FromRC.Convert(rCrv.PointAtEnd)); } if (vG != null) { _Replacing = true; if (element is LinearElement && vG is Curve) { ((LinearElement)element).ReplaceGeometry((Curve)vG); } else if (element is PanelElement && vG is Surface) { ((PanelElement)element).ReplaceGeometry((Surface)vG); } _Replacing = false; _ReplacedElements.TryAdd(element); } } else if (mObj is Node) { _ReplacedNodesWaitingList[(Node)mObj] = e; /*RC.GeometryBase geometry = e.NewRhinoObject.Geometry; * if (geometry is RC.Point) * { * Node node = (Node)mObj; * node.Position = RCtoFB.Convert(((RC.Point)geometry).Location); * }*/ /*if (_ObjectReplacedWaitTimer == null) * { * _ObjectReplacedWaitTimer = new Timer(100); * _ObjectReplacedWaitTimer.AutoReset = false; * _ObjectReplacedWaitTimer.Elapsed += ProcessObjectReplacedWaitingList; * }*/ //if (!_ObjectReplacedWaitTimer.Enabled) } //if (_ObjectReplacedWaitTimer != null) _ObjectReplacedWaitTimer.Start(); } } _LastReplaced = e.ObjectId; }
public override Vector EnterPoint(string prompt = "Enter Point") { GetPoint gP = new GetPointDynamic(); gP.SetCommandPrompt(prompt); if (gP.Get() == GetResult.Cancel) { throw new OperationCanceledException("Operation cancelled by user"); } return(FromRC.Convert(gP.Point())); }
public override VertexGeometryCollection EnterGeometry(string prompt = "Enter geometry", Type geometryType = null) { GetObject gO = new GetObject(); if (geometryType == typeof(Curve)) { gO.GeometryFilter = ObjectType.Curve; } else if (geometryType == typeof(Surface)) { gO.GeometryFilter = ObjectType.Surface | ObjectType.Mesh; } else if (geometryType == typeof(Point)) { gO.GeometryFilter = ObjectType.Point; } else { gO.GeometryFilter = ObjectType.Curve | ObjectType.Surface | ObjectType.Point | ObjectType.Mesh; //TODO: Support others } gO.SetCommandPrompt(prompt); if (gO.GetMultiple(1, 0) == GetResult.Cancel) { throw new OperationCanceledException("Operation cancelled by user"); } VertexGeometryCollection result = new VertexGeometryCollection(); foreach (ObjRef objRef in gO.Objects()) { try { VertexGeometry shape = FromRC.Convert(objRef); if (shape != null) { result.Add(shape); } } catch (NotImplementedException) { Core.PrintLine(objRef.Geometry()?.GetType().Name + "s not supported!"); } } return(result); }
public override Vector[] EnterPoints(string prompt = "Enter points") { var result = new List <Vector>(); while (true) { GetPointDynamic gP = new GetPointDynamic(); gP.SelectionPoints = result; gP.SetCommandPrompt(prompt); gP.AcceptNothing(true); GetResult gR = gP.Get(); if (gR == GetResult.Cancel) { throw new OperationCanceledException("Operation cancelled by user"); } else if (gR == GetResult.Nothing) { break; } result.Add(FromRC.Convert(gP.Point())); } return(result.ToArray()); }
/// <summary> /// Get point converter /// </summary> /// <param name="args"></param> public RhinoRenderingParameters(GetPointDrawEventArgs args) : this((DrawEventArgs)args) { CursorPosition = FromRC.Convert(args.CurrentPoint); }
private void HandlesAddRhinoObject(object sender, RhinoObjectEventArgs e) { if (!RhinoOutput.Writing && !_Replacing) { if (e.TheObject.Attributes.HasUserData) { string data = e.TheObject.Attributes.GetUserString("SAL_ORIGINAL"); if (!string.IsNullOrEmpty(data) && data != e.ObjectId.ToString()) { Guid storedGuid = new Guid(data); if (this.Links.ContainsSecond(storedGuid)) { ModelObject mO = LinkedModelObject(storedGuid); //Create copy of object: if (mO is Element) { VertexGeometry geometry = FromRC.Convert(e.TheObject.Geometry); Element element = null; if (mO is LinearElement) { LinearElement lElement = ((LinearElement)mO).Duplicate();//Core.Instance.ActiveDocument?.Model?.Create.CopyOf((Element)mO, geometry); bool split = false; if (geometry is Curve) { Curve newCrv = (Curve)geometry; if (lElement.Geometry != null) { Curve oldCrv = lElement.Geometry; if (newCrv.Length < oldCrv.Length) { //TODO: Check end point distance to curve double maxDist = 0; foreach (Vertex v in newCrv.Vertices) { double dist = oldCrv.DistanceToSquared(v.Position); if (dist > maxDist) { maxDist = dist; } } if (maxDist < Tolerance.Distance) { split = true; } } } lElement.ReplaceGeometry(newCrv, split); } lElement.GenerateNodes(new NodeGenerationParameters()); element = lElement; } if (mO is PanelElement) { PanelElement pElement = ((PanelElement)mO).Duplicate();//Core.Instance.ActiveDocument?.Model?.Create.CopyOf((Element)mO, geometry); if (geometry is Surface) { pElement.ReplaceGeometry((Surface)geometry); } element = pElement; } RhinoOutput.SetOriginalIDUserString(e.ObjectId); if (element != null) { Links.Set(element.GUID, e.ObjectId); Core.Instance.ActiveDocument.Model.Add(element); } } else if (mO is Node) { if (e.TheObject.Geometry is RC.Point) { Node node = ((Node)mO).Duplicate(); RC.Point pt = (RC.Point)e.TheObject.Geometry; node.Position = FromRC.Convert(pt).Position; RhinoOutput.SetOriginalIDUserString(e.ObjectId); Links.Set(node.GUID, e.ObjectId); Core.Instance.ActiveDocument.Model.Add(node); } } } } } } }