继续我们昨天的工作,先把这个有中间分隔线(rccentreline)的矩形画出来,然后等间隔增加线图像,让他变成找线工具。对比“丁”字型线图像工具roibase类,有如下增加:

1,增加了三条线声明: public mg_line otherLine1;//上----------
        public mg_line otherLine2;//下----------
        public mg_line lastline;//-------|

2, public RoiBase()//构造函数增加: start = new PointF(10, 10);
            end = new PointF(70, 10);
            otherLine1 = new mg_line(start, end);

            start = new PointF(10, 70);
            end = new PointF(70, 70);
            otherLine2 = new mg_line(start, end);

            start = new PointF(70, 10);
            end = new PointF(70, 70);
            lastline = new mg_line(start, end);

3,  public int IsPointInRect(PointF point)//判断操作是否在相应区域增加: 

   PointF Herline2centre = new PointF((otherLine2.pt_start.X + otherLine2.pt_end.X) / (float)2,
              (otherLine2.pt_start.Y + otherLine2.pt_end.Y) / (float)2);

...... 

else if (point.X <= Herline2centre.X + 5 && point.X >= Herline2centre.X - 5
                   && point.Y >= Herline2centre.Y - 5 && point.Y <= Herline2centre.Y + 5)
            {
                return (int)E_HANDLES.E_HANDLE_SOUTH;//新增了变宽弹性操作与第十项对应
            }

4,    public void RoiReset(float deltaChang, float deltaKuan)//线图像工具重置增加:

  start = new PointF(RcCentreLine.pt_start.X, RcCentreLine.pt_start.Y - 30 - deltaKuan / (float)2);
            end = new PointF(RcCentreLine.pt_start.X + 60 + deltaChang, RcCentreLine.pt_start.Y - 30 - deltaKuan / (float)2);
            otherLine1 = new mg_line(start, end);     
   start = new PointF(RcCentreLine.pt_start.X, RcCentreLine.pt_start.Y + 30 + deltaKuan / (float)2);
            end = new PointF(RcCentreLine.pt_start.X + 60 + deltaChang, RcCentreLine.pt_start.Y + 30 + deltaKuan / (float)2);
            otherLine2 = new mg_line(start, end); 
    start = new PointF(RcCentreLine.pt_start.X + 60 + deltaChang, RcCentreLine.pt_start.Y - 30 - deltaKuan / (float)2);
            end = new PointF(RcCentreLine.pt_start.X + 60 + deltaChang, RcCentreLine.pt_start.Y + 30 + deltaKuan / (float)2);
            lastline = new mg_line(start, end);

5,   public void updateRoi(float rotationAngle)//更新我们设计的线图像工具增加:

            otherLine1.Rotate(RcCentreLine.pt_start, rotationAngle);
            otherLine2.Rotate(RcCentreLine.pt_start, rotationAngle);     
            lastline.Rotate(RcCentreLine.pt_start, rotationAngle);

6,     public void Drag(PointF point)//拖动线图像工具增加:  otherLine1.Move(delta);
            otherLine2.Move(delta);
            lastline.Move(delta);

7,   public void DrawLineAndRect(Graphics g, Pen p, int Dir)//画出线图像工具增加:

           g.DrawLine(p, otherLine1.pt_start, otherLine1.pt_end);
            g.DrawLine(p, otherLine2.pt_start, otherLine2.pt_end);
            g.DrawLine(p, lastline.pt_start, lastline.pt_end);         
            //Down
            g.DrawRectangle(p, (int)(otherLine2.pt_end.X + otherLine2.pt_start.X) / 2 - 5,
                               (int)(otherLine2.pt_end.Y + otherLine2.pt_start.Y) / 2 - 5, 10, 10);
            //白到黑 CentreToDown
            if (Dir == 0)
            {
                string str1 = "白";
                Font drawfont = new Font("Arial", 9);
                g.DrawString(str1, drawfont, Brushes.Brown, m_RcCenter.X - 5, m_RcCenter.Y + 5);
                str1 = "黑";
                g.DrawString(str1, drawfont, Brushes.Blue, (otherLine2.pt_end.X + otherLine2.pt_start.X) / 2 - 5,
                                   (otherLine2.pt_end.Y + otherLine2.pt_start.Y) / 2 + 5);
            }

            //黑到白 DownToCentre
            if (Dir == 1)
            {
                string str1 = "黑";
                Font drawfont = new Font("Arial", 9);
                g.DrawString(str1, drawfont, Brushes.Blue, m_RcCenter.X - 5, m_RcCenter.Y + 5);
                str1 = "白";
                g.DrawString(str1, drawfont, Brushes.Brown, (otherLine2.pt_end.X + otherLine2.pt_start.X) / 2 - 5,
                                   (otherLine2.pt_end.Y + otherLine2.pt_start.Y) / 2 + 5);
            }

10,最后一个,弹性改变后整个基础框架的更新,函数是

     public void DragTolerancey(PointF point)//程序逻辑不对20160627,已经更正
        {
            double k2 = 0; double k = 0;
            PointF QQ = new PointF();
            PointF AA = new PointF((otherLine2.pt_end.X + otherLine2.pt_start.X) / 2, (otherLine2.pt_end.Y + otherLine2.pt_start.Y) / 2);

            if ((otherLine2.pt_end.X - otherLine2.pt_start.X) == 0)
            {
                //  k2 = 65535;//还需进化20160623
                QQ.X = point.X;
                QQ.Y = AA.Y;

                PointF delta = new PointF(QQ.X - AA.X, QQ.Y - AA.Y);
                otherLine2.Move(delta);
                PointF delta1 = new PointF(-delta.X, -delta.Y);
                otherLine1.Move(delta1);

                //deal with startline and endline
                startLine.updatePstart(otherLine1.pt_start);
                startLine.updatePend(otherLine2.pt_start);
                lastline.updatePstart(otherLine1.pt_end);
                lastline.updatePend(otherLine2.pt_end);
                return;
            }
            if ((m_RcCenter.X - AA.X) == 0)
            {
                //  k = 65535;
                QQ.X = AA.X;
                QQ.Y = point.Y;
            }
            else
            {
                k2 = (otherLine2.pt_end.Y - otherLine2.pt_start.Y) / (otherLine2.pt_end.X - otherLine2.pt_start.X);
                k = (m_RcCenter.Y - AA.Y) / (m_RcCenter.X - AA.X);//计算一个k就可以了,k*k2=-1;20160701暂时不改变
                QQ.X = (float)((AA.Y - point.Y + k2 * point.X - k * AA.X) / (k2 - k));
                QQ.Y = (float)(AA.Y + k * QQ.X - k * AA.X);
            }
            PointF deltadelta = new PointF(QQ.X - AA.X, QQ.Y - AA.Y);
            otherLine2.Move(deltadelta);
            PointF delta11 = new PointF(-deltadelta.X, -deltadelta.Y);
            otherLine1.Move(delta11);

            //deal with startline and endline
            startLine.updatePstart(otherLine1.pt_start);
            startLine.updatePend(otherLine2.pt_start);
            lastline.updatePstart(otherLine1.pt_end);
            lastline.updatePend(otherLine2.pt_end);
        }

(待续...........................)

更多推荐