示例#1
0
        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())));
        }
示例#2
0
        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);
        }
示例#3
0
        /// <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();
            }
        }
示例#4
0
        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;
        }
示例#5
0
        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()));
        }
示例#6
0
        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);
        }
示例#7
0
        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);
 }
示例#9
0
 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);
                         }
                     }
                 }
             }
         }
     }
 }