Esempio n. 1
0
        public void TrySnapConnectCrvToRectShape(ICanvas canvas, IConnectionCurve crv)
        {
            if (crv == null)
            {
                return;
            }
            List <IDrawObject> allSelectObjs = GetHitObjects(canvas, ((IDrawObject)crv).GetBoundingRect(canvas), true);

            foreach (var curObj in allSelectObjs)
            {
                DrawTools.RectBase rectBase = curObj as DrawTools.RectBase;
                if (rectBase == null)
                {
                    continue;
                }

                DrawTools.RectBase.eVertexId vid = rectBase.GetVertexIdFromPoint(crv.StartPoint.GetPosition());
                if (vid != DrawTools.RectBase.eVertexId.None)
                {
                    rectBase.AttachConnectionCrvNode(crv.StartPoint);
                }
                vid = rectBase.GetVertexIdFromPoint(crv.EndPoint.GetPosition());
                if (vid != DrawTools.RectBase.eVertexId.None)
                {
                    rectBase.AttachConnectionCrvNode(crv.EndPoint);
                }
            }
        }
Esempio n. 2
0
        public eDrawObjectMouseDown OnMouseDown(ICanvas canvas, UnitPoint point, ISnapPoint snappoint)
        {
            if (snappoint is SnapPointBase && snappoint.Owner is RectBase)
            {
                NodePointMultiConnectionLine.ePoint pointType = HitUtil.Distance(point, m_p1) < HitUtil.Distance(point, m_p2) ?
                                                                NodePointMultiConnectionLine.ePoint.P1 : NodePointMultiConnectionLine.ePoint.P2;
                RectBase rect = snappoint.Owner as RectBase;
                rect.AttachConnectionCrvNode(new NodePointMultiConnectionLine(this, pointType));
                if (pointType == NodePointMultiConnectionLine.ePoint.P1)
                {
                    m_p1 = point;
                }
                else
                {
                    m_p2 = point;
                }
                return(eDrawObjectMouseDown.Done);
            }

            OnMouseMove(canvas, point);
            Selected = false;
            if (m_allPts == null || m_allPts.Count < 2)
            {
                return(eDrawObjectMouseDown.Cancel);
            }
            return(eDrawObjectMouseDown.Done);
        }
Esempio n. 3
0
 public eDrawObjectMouseDown OnMouseDown(ICanvas canvas, UnitPoint point, ISnapPoint snappoint)
 {
     Selected = false;
     OnMouseMove(canvas, point);
     if (snappoint is PerpendicularSnapPoint && snappoint.Owner is Line)
     {
         Line src = snappoint.Owner as Line;
         m_p2 = HitUtil.NearestPointOnLine(src.P1, src.P2, m_p1, true);
         return(eDrawObjectMouseDown.DoneRepeat);
     }
     if (snappoint is PerpendicularSnapPoint && snappoint.Owner is Arc)
     {
         Arc src = snappoint.Owner as Arc;
         m_p2 = HitUtil.NearestPointOnCircle(src.Center, src.Radius, m_p1, 0);
         return(eDrawObjectMouseDown.DoneRepeat);
     }
     if (snappoint is SnapPointBase && snappoint.Owner is RectBase)
     {
         NodePointCubicBezier.ePoint pointType = HitUtil.Distance(point, m_p1) < HitUtil.Distance(point, m_p2) ?
                                                 NodePointCubicBezier.ePoint.P1 : NodePointCubicBezier.ePoint.P2;
         RectBase rect = snappoint.Owner as RectBase;
         rect.AttachConnectionCrvNode(new NodePointCubicBezier(this, pointType));
         if (pointType == NodePointCubicBezier.ePoint.P1)
         {
             m_p1 = point;
         }
         else
         {
             m_p2 = point;
         }
         UpdateCtrlPts();
         return(eDrawObjectMouseDown.Done);
     }
     if (Control.ModifierKeys == Keys.Control)
     {
         point = HitUtil.OrthoPointD(m_p1, point, 45);
     }
     m_p2 = point;
     UpdateCtrlPts();
     return(eDrawObjectMouseDown.Done);
 }