示例#1
0
 void RemoveLine(DrawTools.Line line)
 {
     if (m_originalLines.ContainsKey(line))
     {
         m_originalLines[line].Line.Highlighted = false;
         m_originalLines.Remove(line);
     }
 }
示例#2
0
 void AddLine(UnitPoint point, DrawTools.Line line)
 {
     if (m_originalLines.ContainsKey(line) == false)
     {
         line.Highlighted = true;
         LinePoints lp = new LinePoints();
         lp.SetLine(line);
         lp.MousePoint = point;
         m_originalLines.Add(line, lp);
     }
 }
示例#3
0
        public void SetNewPoints(DrawTools.Line l, UnitPoint hitpoint, UnitPoint intersectpoint)
        {
            SetLine(l);
            double hitToVp1 = HitUtil.Distance(hitpoint, l.P1);             // hit point to vertex point
            double ispToVp1 = HitUtil.Distance(intersectpoint, l.P1);       // intersect point to vertex point

            // if hit is closer than intersect point, then keep this point and adjust the other
            if (hitToVp1 <= ispToVp1)
            {
                m_p2 = intersectpoint;
            }
            else
            {
                m_p1 = intersectpoint;
            }
            ResetLine();
        }
示例#4
0
        /// <summary>
        /// 设置新的点
        /// </summary>
        /// <param name="l"></param>
        /// <param name="hitpoint"></param>
        /// <param name="intersectpoint"></param>
        public void SetNewPoints(DrawTools.Line l, UnitPoint hitpoint, UnitPoint intersectpoint)
        {
            SetLine(l);
            double hitToVp1 = HitUtil.Distance(hitpoint, l.P1);             //点击点到顶点的距离
            double ispToVp1 = HitUtil.Distance(intersectpoint, l.P1);       //交点到顶点的距离

            // if hit is closer than intersect point, then keep this point and adjust the other
            //如果点击点很靠近交点,就保持这个点然后调整其他的点
            if (hitToVp1 <= ispToVp1)
            {
                m_p2 = intersectpoint;
            }
            else
            {
                m_p1 = intersectpoint;
            }
            ResetLine();
        }
示例#5
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="canvas"></param>
        /// <param name="point"></param>
        /// <param name="snappoint"></param>
        /// <returns></returns>
        public eDrawObjectMouseDown OnMouseDown(ICanvas canvas, UnitPoint point, ISnapPoint snappoint)
        {
            List <IDrawObject>    drawitems = canvas.DataModel.GetHitObjects(canvas, point);
            List <DrawTools.Line> lines     = GetLines(drawitems);

            // add to source lines
            if (m_originalLines.Count == 0 || Control.ModifierKeys == Keys.Shift)
            {
                foreach (DrawTools.Line line in lines)
                {
                    AddLine(point, line);
                }
                SetSelectHint();
                return(eDrawObjectMouseDown.Continue);
            }

            if (m_originalLines.Count == 0 || Control.ModifierKeys == Keys.Control)
            {
                foreach (DrawTools.Line line in lines)
                {
                    if (m_originalLines.ContainsKey(line))
                    {
                        RemoveLine(line);
                    }
                    else
                    {
                        AddLine(point, line);
                    }
                }
                SetSelectHint();
                return(eDrawObjectMouseDown.Continue);
            }

            if (drawitems.Count == 0)
            {
                return(eDrawObjectMouseDown.Continue);
            }

            // all lines have been added, now find edge to where to extend
            if (drawitems[0] is DrawTools.Line)
            {
                DrawTools.Line edge     = (DrawTools.Line)drawitems[0];
                bool           modified = false;
                foreach (LinePoints originalLp in m_originalLines.Values)
                {
                    UnitPoint intersectpoint = HitUtil.LinesIntersectPoint(edge.P1, edge.P2, originalLp.Line.P1, originalLp.Line.P2);
                    // lines intersect so shrink line
                    if (intersectpoint != UnitPoint.Empty)
                    {
                        LinePoints lp = new LinePoints();
                        lp.SetLine(originalLp.Line);
                        lp.MousePoint = originalLp.MousePoint;
                        m_modifiedLines.Add(lp.Line, lp);
                        lp.SetNewPoints(lp.Line, lp.MousePoint, intersectpoint);
                        modified = true;
                        continue;
                    }
                    // lines do not intersect, find apparent intersect point on existing edge line
                    if (intersectpoint == UnitPoint.Empty)
                    {
                        UnitPoint apprarentISPoint = HitUtil.FindApparentIntersectPoint(
                            edge.P1,
                            edge.P2,
                            originalLp.Line.P1,
                            originalLp.Line.P2,
                            false,
                            true);
                        if (apprarentISPoint == UnitPoint.Empty)
                        {
                            continue;
                        }

                        modified = true;
                        originalLp.Line.ExtendLineToPoint(apprarentISPoint);

                        LinePoints lp = new LinePoints();
                        lp.SetLine(originalLp.Line);
                        lp.MousePoint = point;
                        m_modifiedLines.Add(lp.Line, lp);
                    }
                }
                if (modified)
                {
                    canvas.DataModel.AfterEditObjects(this);
                }
                return(eDrawObjectMouseDown.Done);
            }

            if (drawitems[0] is DrawTools.Arc)
            {
                DrawTools.Arc edge = (DrawTools.Arc)drawitems[0];
                foreach (LinePoints originalLp in m_originalLines.Values)
                {
                }
                bool modified = false;
            }
            return(eDrawObjectMouseDown.Done);
        }
示例#6
0
 public void SetLine(DrawTools.Line l)
 {
     m_line = l;
     m_p1   = l.P1;
     m_p2   = l.P2;
 }
示例#7
0
        public eDrawObjectMouseDown OnMouseDown(ICanvas canvas, UnitPoint point, ISnapPoint snappoint)
        {
            List <IDrawObject> items = canvas.DataModel.GetHitObjects(canvas, point);

            DrawTools.Line line = null;
            // find first line
            foreach (IDrawObject item in items)
            {
                if (item is DrawTools.Line)
                {
                    line = item as DrawTools.Line;
                    if (line != m_l1Original.Line)
                    {
                        break;
                    }
                }
            }
            if (line == null)
            {
                if (m_l1Original.Line == null)
                {
                    SetHint("No line selected. Select first line");
                }
                else
                {
                    SetHint("No line selected. Select second line");
                }
                return(eDrawObjectMouseDown.Continue);
            }
            if (m_l1Original.Line == null)
            {
                line.Highlighted = true;
                m_l1Original.SetLine(line);
                m_l1Original.MousePoint = point;
                SetHint("Select second line");
                return(eDrawObjectMouseDown.Continue);
            }
            if (m_l2Original.Line == null)
            {
                line.Highlighted = true;
                m_l2Original.SetLine(line);
                m_l2Original.MousePoint = point;

                UnitPoint intersectpoint = HitUtil.LinesIntersectPoint(
                    m_l1Original.Line.P1,
                    m_l1Original.Line.P2,
                    m_l2Original.Line.P1,
                    m_l2Original.Line.P2);

                // if lines do not intersect then extend lines to intersect point
                if (intersectpoint == UnitPoint.Empty)
                {
                    UnitPoint apprarentISPoint = HitUtil.FindApparentIntersectPoint(m_l1Original.Line.P1, m_l1Original.Line.P2, m_l2Original.Line.P1, m_l2Original.Line.P2);
                    if (apprarentISPoint == UnitPoint.Empty)
                    {
                        return(eDrawObjectMouseDown.Done);
                    }
                    m_l1Original.Line.ExtendLineToPoint(apprarentISPoint);
                    m_l2Original.Line.ExtendLineToPoint(apprarentISPoint);
                    m_l1NewPoint.SetLine(m_l1Original.Line);
                    m_l2NewPoint.SetLine(m_l2Original.Line);
                    canvas.DataModel.AfterEditObjects(this);
                    return(eDrawObjectMouseDown.Done);
                }

                m_l1NewPoint.SetNewPoints(m_l1Original.Line, m_l1Original.MousePoint, intersectpoint);
                m_l2NewPoint.SetNewPoints(m_l2Original.Line, m_l2Original.MousePoint, intersectpoint);
                canvas.DataModel.AfterEditObjects(this);
                return(eDrawObjectMouseDown.Done);
            }
            return(eDrawObjectMouseDown.Done);
        }
示例#8
0
 public void SetLine(DrawTools.Line l)
 {
     m_line = l;
     m_p1 = l.P1;
     m_p2 = l.P2;
 }