用GDI+画图时,已经实现了2个元素的连接,比如:2个矩形用一条直线的连接,但是由于是连接2个矩形的中心画的线,但是现在要擦去在2个矩形中的线,请教如何实现这一功能,具体算法如何?还有就是,有时候不一定是矩形,有可能是圆角的矩形、梯形等多边形?大虾多指教?

解决方案 »

  1.   

    我描述不清楚吗?
    那我在说一下:就是图中有3个元素,2个矩形和一条线(一条线把2个矩形连接起来,通过2个矩形的中心),但是一般画图的话,会把在矩形内的线去处只留矩形外的,就像visio和rose的画图一样,现在就是要去处矩形内部的线,请问如何实现这一算法
      

  2.   

    高手在哪里?难道没人做过GDI+的画图吗?要是做过,因该总会碰到啊
      

  3.   

    to:iterator(螃蟹)
       能不能细说一下,偶是新手
      

  4.   

    不要线的时候只需要在一张BitMap上重画别的元素。用这张Bitmap填充你原来的图不就可以了吗?
      

  5.   

    to:Murder9527(葫芦鬼)
        不好看的,vision和rose都是矩形内部不画的,而且如果是其他多边形可能算法根复杂的
      

  6.   

    先画两个矩形(或圆形),再画直线,再加一步FillRectangle(或FillEllipse)清空其内部的线。
      

  7.   

    to :chinasdp()
        你的方法我早就试过,但是你一旦fill的话,那原来在图行上的字符串就没有了,
      

  8.   

    to :newmung(迷途浪人)
         你的方法效率太低,画线时要重绘界面上所有元素,方法不怎么好,我还是觉得应该还有更好的数学算法
      

  9.   

    to:kyle315()
        我就是要这个算法,你有不,贴出来看看
      

  10.   

    楼主高中解析几何忘干净了吗?或者,没有学?
    直线:
    使用两点式y - y1 / (y2 - y1) = (x -x1) / (x2 - x1)注意 y2 = y1 和 x2 = x1 的特殊情况矩形:四边的直线方程 x = left, x = right, y = top, y = buttom;
    中心坐标 (xc,yc)=( (left + right)/2 , (top + buttom) /2)圆:
    (x - x0)^2 + (y - y0)^2 = r^2, 其中 x0,y0 为圆心,r为半径。判断直线和图形交点;
    计算直线的斜率 k = (y1 - y2) / (x1 - x2) (注意 x1 == x2 的情况)
    计算夹角θ = Atan(k);
    圆:
    交点: (x0 ± r * Cos(θ), y ± r * Sin(θ))
    矩形:
    (right - left) / (top - buttom) > k :
    交点:
    x = xc ± (top - buttom) / 2 / k ;
    y = yc ± (top - buttom) / 2;(right - left) / (top - buttom) < k :
    交点:
    x = xc ± (right - left) / 2;
    y = yc ± (right - left) / 2 * k ;(right - left) / (top - buttom) == k :
    交点:
    x = xc ± (right - left) / 2;
    y = yc ± (top - buttom) / 2;
    正负号的取法根据图形的相对位置判断。