Cadence Skill 论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 7874|回复: 9

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

[复制链接]
发表于 2014-2-25 11:57:06 | 显示全部楼层 |阅读模式
主要用於快捷修改十度走線的時候,  如圖所示
2014-02-25 11 52 58.jpg
2014-02-25 11 55 58.jpg
发表于 2014-2-25 22:53:54 | 显示全部楼层
貌似很厉害!!
发表于 2014-2-26 12:49:05 | 显示全部楼层
主要是如何判断两条线段的交点位置。。。。
发表于 2014-2-27 13:09:01 | 显示全部楼层
楼主是否需要该功能。


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

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

  2. defun(cline_intsec ()
  3.         cline1 = nil
  4.         axlClearSelSet()
  5.         axlSetFindFilter( ?enabled list("noall" "CLINESEGS") ?onButtons list("noall" "CLINESEGS"))
  6.         axlSingleSelectPoint()
  7.         cline1 = car(axlGetSelSet())
  8.         axlClearSelSet()
  9.         axlHighlightObject(cline1)
  10.         when(cline1
  11.                 axlSetFindFilter( ?enabled list("noall" "CLINESEGS") ?onButtons list("noall" "CLINESEGS"))
  12.                 axlSingleSelectPoint()
  13.                 cline2 = car(axlGetSelSet())
  14.                 axlClearSelSet()
  15.                 axlDehighlightObject(cline1)
  16.         )
  17.         when(cline1 && cline2 && cline1->layer == cline2->layer
  18.                 point = axl_ol_ol2(cline1->startEnd cline2->startEnd)
  19.                 a = car(cline1->startEnd)
  20.                 b = cadr(cline1->startEnd)
  21.                 c = car(cline2->startEnd)
  22.                 d = cadr(cline2->startEnd)
  23.                 crossP = cross(a b c d)
  24.                 newLineOne = list(crossP car(point))
  25.                 newLineTwo = list(crossP cadr(point))
  26.                 axlDBCreateLine(newLineOne cline1->width cline1->layer )
  27.                 axlDBCreateLine(newLineTwo cline2->width cline2->layer )
  28.         )
  29. );end defun

  30. defun(cross (a b c d)
  31.         p = nil
  32.     denominator = (yCoord(b) - yCoord(a))*(xCoord(d) - xCoord(c)) - (xCoord(a) - xCoord(b))*(yCoord(c) - yCoord(d));  
  33.     when(denominator != 0  
  34.                p = t  
  35.     )
  36.    when(p   
  37.     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 ;  
  38.     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;  
  39.     p = list(x y)
  40.     );end when
  41.          p
  42. );end defun
复制代码
 楼主| 发表于 2014-2-27 17:39:57 | 显示全部楼层
謝謝 非常感謝版主 這樣很好了  我下來 好好學習一下
发表于 2014-3-11 21:18:40 | 显示全部楼层
vivi斑斑 好生厉害
发表于 2014-5-14 16:50:36 | 显示全部楼层
感谢分享。。。。
发表于 2014-10-19 17:09:13 | 显示全部楼层
发表于 2018-5-13 18:27:23 | 显示全部楼层
好生厉害···········
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|网站地图|Cadence Skill 论坛 ( 蜀ICP备13024417号 )

GMT+8, 2024-11-23 23:34 , Processed in 0.155111 second(s), 20 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表