mmmmyuitian 发表于 2014-2-25 11:57:06

求點擊 兩條cline, 使他們的延長線相交, 生成一條線

主要用於快捷修改十度走線的時候,如圖所示

chuankay 发表于 2014-2-25 22:53:54

貌似很厉害!!

vivienluo 发表于 2014-2-26 12:49:05

主要是如何判断两条线段的交点位置。。。。

vivienluo 发表于 2014-2-27 13:09:01

楼主是否需要该功能。
http://www.allegro-skill.com/data/attachment/forum/201402/27/130454eh48ppqp3wi8t8tc.gif

代码存在一些不足,由于是浮点运算,计算的结果存在一定的误差。

下面贴出源代码。代码没经过优化,如果需要的话,你自己可以修改修改。axlCmdRegister( "cline_intsec" 'cline_intsec ?cmdType "interactive")

defun(cline_intsec ()
      cline1 = nil
      axlClearSelSet()
      axlSetFindFilter( ?enabled list("noall" "CLINESEGS") ?onButtons list("noall" "CLINESEGS"))
      axlSingleSelectPoint()
      cline1 = car(axlGetSelSet())
      axlClearSelSet()
      axlHighlightObject(cline1)
      when(cline1
                axlSetFindFilter( ?enabled list("noall" "CLINESEGS") ?onButtons list("noall" "CLINESEGS"))
                axlSingleSelectPoint()
                cline2 = car(axlGetSelSet())
                axlClearSelSet()
                axlDehighlightObject(cline1)
      )
      when(cline1 && cline2 && cline1->layer == cline2->layer
                point = axl_ol_ol2(cline1->startEnd cline2->startEnd)
                a = car(cline1->startEnd)
                b = cadr(cline1->startEnd)
                c = car(cline2->startEnd)
                d = cadr(cline2->startEnd)
                crossP = cross(a b c d)
                newLineOne = list(crossP car(point))
                newLineTwo = list(crossP cadr(point))
                axlDBCreateLine(newLineOne cline1->width cline1->layer )
                axlDBCreateLine(newLineTwo cline2->width cline2->layer )
      )
);end defun

defun(cross (a b c d)
      p = nil
    denominator = (yCoord(b) - yCoord(a))*(xCoord(d) - xCoord(c)) - (xCoord(a) - xCoord(b))*(yCoord(c) - yCoord(d));
    when(denominator != 0
               p = t
    )
   when(p   
    x =( (xCoord(b) - xCoord(a)) * (xCoord(d) - xCoord(c)) * (yCoord(c) - yCoord(a)) + (yCoord(b) - yCoord(a)) * (xCoord(d) - xCoord(c)) * xCoord(a) - (yCoord(d) - yCoord(c)) * (xCoord(b) - xCoord(a)) * xCoord(c) ) / denominator ;
    y = -( (yCoord(b) - yCoord(a)) * (yCoord(d) - yCoord(c)) * (xCoord(c) - xCoord(a)) + (xCoord(b) - xCoord(a)) * (yCoord(d) - yCoord(c)) * yCoord(a) - (xCoord(d) - xCoord(c)) * (yCoord(b) - yCoord(a)) * yCoord(c) ) / denominator;
    p = list(x y)
    );end when
         p
);end defun

mmmmyuitian 发表于 2014-2-27 17:39:57

:) 謝謝 非常感謝版主 這樣很好了我下來 好好學習一下

jackzz 发表于 2014-3-11 21:18:40

vivi斑斑 好生厉害

笨笨猪 发表于 2014-5-14 16:50:36

感谢分享。。。。

duan 发表于 2014-10-19 17:09:13

704624688@qq.com

似梦似醒 发表于 2015-6-24 23:53:00

感谢分享。。。。

limeitian101 发表于 2018-5-13 18:27:23

好生厉害···········
页: [1]
查看完整版本: 求點擊 兩條cline, 使他們的延長線相交, 生成一條線