在线咨询
eetop公众号 创芯大讲堂 创芯人才网
切换到宽版

EETOP 创芯网论坛 (原名:电子顶级开发网)

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
查看: 1571|回复: 1

[原创] 连接两条或两组垂直的线

[复制链接]
发表于 2023-6-11 17:51:49 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册

x
1)先选两个垂直线头,再命令。
2)先命令,再两次by line 选择两组垂直线。靠近by line的端改变。
初始连线,如果已连接,就去线头。未连接,就连接上。




  1. hiSetBindKeys( "Layout" list(list("<Key>W" "stretchpath()")))

  2. procedure(stretchpath_tmp1(obj)
  3.         part_s = geGetSelSetFigPoint(obj)
  4.         part_s_s=reverse(part_s)
  5.         obj_xy1=nil
  6.         obj_xy2=nil
  7.         when(obj~>objType == "path" && car(part_s) && !nth(1 part_s)
  8.                 obj_xy1=car(obj~>points)
  9.                 obj_xy2=nth(1 obj~>points)
  10.         );when
  11.         when(obj~>objType == "path" && car(part_s_s) && !nth(1 part_s_s)
  12.                 obj_xy1=car(reverse(obj~>points))
  13.                 obj_xy2=nth(1 reverse(obj~>points))
  14.         );when
  15.         when(obj~>objType == "pathSeg" && car(part_s) && !cadr(part_s)
  16.                 obj_xy1=obj~>beginPt
  17.                 obj_xy2=obj~>endPt
  18.         );when
  19.         when(obj~>objType == "pathSeg" && cadr(part_s) && !car(part_s)
  20.                 obj_xy1=obj~>endPt
  21.                 obj_xy2=obj~>beginPt
  22.         );when
  23. );pro

  24. procedure(stretchpath_tmp2(obj P0)
  25.         obj_xy1=nil
  26.         obj_xy2=nil
  27.         if(obj~>objType == "path" then
  28.                 tmp_obj_xyA=car(obj~>points)
  29.                 tmp_obj_xyB=car(reverse(obj~>points))
  30.                 SpaceA=expt((xCoord(tmp_obj_xyA) - xCoord(P0)) 2) + expt((yCoord(tmp_obj_xyA) - yCoord(P0)) 2)
  31.                 SpaceB=expt((xCoord(tmp_obj_xyB) - xCoord(P0)) 2) + expt((yCoord(tmp_obj_xyB) - yCoord(P0)) 2)
  32.                 if(SpaceA>SpaceB then
  33.                         obj_xy1=tmp_obj_xyB
  34.                         obj_xy2=nth(1 reverse(obj~>points))
  35.                 else
  36.                         obj_xy1=tmp_obj_xyA
  37.                         obj_xy2=nth(1 obj~>points)
  38.                 );if
  39.         else
  40.                 tmp_obj_xyA=obj~>beginPt
  41.                 tmp_obj_xyB=obj~>endPt
  42.                 SpaceA=expt((xCoord(tmp_obj_xyA) - xCoord(P0)) 2) + expt((yCoord(tmp_obj_xyA) - yCoord(P0)) 2)
  43.                 SpaceB=expt((xCoord(tmp_obj_xyB) - xCoord(P0)) 2) + expt((yCoord(tmp_obj_xyB) - yCoord(P0)) 2)
  44.                 if(SpaceA>SpaceB then
  45.                         obj_xy1=tmp_obj_xyB
  46.                         obj_xy2=tmp_obj_xyA
  47.                 else
  48.                         obj_xy1=tmp_obj_xyA
  49.                         obj_xy2=tmp_obj_xyB
  50.                         );if
  51.                 );if
  52. );pro

  53. procedure(stretchpath()
  54. let((cv nets obj obj1 obj2 P2 P1 P0 obj1_xy1 obj1_xy2 obj2_xy1 obj2_xy2
  55. Hline Hline_xy1 Hline_xy2 Hpart_s Vline Vline_xy1 Vline_xy2 Vpart_s
  56. part_s2 part_s1 new_point Htmp_points Htmp_points_s Vtmp_points Vtmp_points_s
  57. obj_xy1 obj_xy2 tmp_obj_xyA tmp_obj_xyB)


  58.         cv = geGetEditCellView()
  59.         nets = geGetSelSet()

  60.         when(length(nets)==0
  61.                 obj_in1 = geGetSortedSelectByLine()
  62.                 P1=hiGetPoint(hiGetCurrentWindow())
  63.                 P1=geWindowToEditPoint(hiGetCurrentWindow(),P1)
  64.                 print(P1)
  65.                 obj_in2 = geGetSortedSelectByLine()
  66.                 P2=hiGetPoint(hiGetCurrentWindow())
  67.                 P2=geWindowToEditPoint(hiGetCurrentWindow(),P2)
  68.                 print(P2)
  69.        
  70.                 netslist = mapcar('list obj_in1 obj_in2)
  71. printf("\n")
  72. print(netslist)

  73.                 foreach(net netslist
  74.                 obj1 = caar(net)
  75.                 stretchpath_tmp2(obj1 P1)
  76.                 obj1_xy1=obj_xy1
  77.                 obj1_xy2=obj_xy2        
  78.                 obj2 = caadr(net)
  79.                 stretchpath_tmp2(obj2 P2)
  80.                 obj2_xy1=obj_xy1
  81.                 obj2_xy2=obj_xy2

  82.                 Hline=nil
  83.                 Vline=nil
  84.                 when(xCoord(obj1_xy1)==xCoord(obj1_xy2) && yCoord(obj2_xy1)==yCoord(obj2_xy2)
  85.                         Hline=obj2
  86.                         Hline_xy1=obj2_xy1
  87.                         Hline_xy2=obj2_xy2
  88.                         Hpart_s=part_s2
  89.                         Vline=obj1
  90.                         Vline_xy1=obj1_xy1
  91.                         Vline_xy2=obj1_xy2
  92.                         Vpart_s=part_s1
  93.                         );when
  94.                 when(yCoord(obj1_xy1)==yCoord(obj1_xy2) && xCoord(obj2_xy1)==xCoord(obj2_xy2)
  95.                         Hline=obj1
  96.                         Hline_xy1=obj1_xy1
  97.                         Hline_xy2=obj1_xy2
  98.                         Hpart_s=part_s1
  99.                         Vline=obj2
  100.                         Vline_xy1=obj2_xy1
  101.                         Vline_xy2=obj2_xy2
  102.                         Vpart_s=part_s2
  103.                         );when

  104.                 if(xCoord(Hline_xy2) < xCoord(Vline_xy1) then
  105.                         s_width=Vline~>width/2
  106.                 else
  107.                         s_width=-(Vline~>width/2)
  108.                 );if
  109.                 new_point=list(xCoord(Vline_xy1)+s_width yCoord(Hline_xy1))
  110.                 if(Hline~>objType == "path" then
  111.                         Htmp_points=Hline~>points
  112.                         Htmp_points_s=reverse(Htmp_points)
  113.                         if(car(Htmp_points)==Hline_xy1 then
  114.                                 Hline~>points=rplaca(Htmp_points new_point)
  115.                         else
  116.                                 Hline~>points=reverse(rplaca(Htmp_points_s new_point))
  117.                         );if
  118.                 else ;objType == "path"
  119.                         if(Hline~>beginPt==Hline_xy1 then
  120.                                 Hline~>beginPt=new_point
  121.                         else
  122.                                 Hline~>endPt=new_point
  123.                         );if
  124.                 );if

  125.                 if(yCoord(Vline_xy2) < yCoord(Hline_xy1) then
  126.                         s_width=Hline~>width/2
  127.                 else
  128.                         s_width=-(Hline~>width/2)
  129.                         );if
  130.                 new_point=list(xCoord(Vline_xy1) yCoord(Hline_xy1)+s_width)
  131.                 if(Vline~>objType == "path" then
  132.                         Vtmp_points=Vline~>points
  133.                         Vtmp_points_s=reverse(Vtmp_points)
  134.                         if(car(Vtmp_points)==Vline_xy1 then
  135.                                 Vline~>points=rplaca(Vtmp_points new_point)
  136.                         else
  137.                                 Vline~>points=reverse(rplaca(Vtmp_points_s new_point))
  138.                         );if
  139.                 else ;objType == "path"
  140.                         if(Vline~>beginPt==Vline_xy1 then
  141.                                 Vline~>beginPt=new_point
  142.                         else
  143.                                 Vline~>endPt=new_point
  144.                                 );if
  145.                         );if
  146.                 );foreach
  147.         );when ==0


  148.         when(length(nets)==2
  149.                 obj1_xy1=nil
  150.                 obj1_xy2=nil
  151.                 obj2_xy1=nil
  152.                 obj2_xy2=nil
  153.                 obj1=nth(0 nets)
  154.                 stretchpath_tmp1(obj1)
  155.                 part_s1=part_s
  156.                 obj1_xy1=obj_xy1
  157.                 obj1_xy2=obj_xy2
  158.                 obj2=nth(1 nets)
  159.                 stretchpath_tmp1(obj2)
  160.                 part_s2=part_s
  161.                 obj2_xy1=obj_xy1
  162.                 obj2_xy2=obj_xy2

  163.                 Hline=nil
  164.                 Vline=nil
  165.                 when(xCoord(obj1_xy1)==xCoord(obj1_xy2) && yCoord(obj2_xy1)==yCoord(obj2_xy2)
  166.                         Hline=obj2
  167.                         Hline_xy1=obj2_xy1
  168.                         Hline_xy2=obj2_xy2
  169.                         Hpart_s=part_s2
  170.                         Vline=obj1
  171.                         Vline_xy1=obj1_xy1
  172.                         Vline_xy2=obj1_xy2
  173.                         Vpart_s=part_s1
  174.                         );when
  175.                 when(yCoord(obj1_xy1)==yCoord(obj1_xy2) && xCoord(obj2_xy1)==xCoord(obj2_xy2)
  176.                         Hline=obj1
  177.                         Hline_xy1=obj1_xy1
  178.                         Hline_xy2=obj1_xy2
  179.                         Hpart_s=part_s1
  180.                         Vline=obj2
  181.                         Vline_xy1=obj2_xy1
  182.                         Vline_xy2=obj2_xy2
  183.                         Vpart_s=part_s2
  184.                         );when

  185.                 if(xCoord(Hline_xy2) < xCoord(Vline_xy1) then
  186.                         s_width=Vline~>width/2
  187.                 else
  188.                         s_width=-(Vline~>width/2)
  189.                 );if
  190.                 new_point=list(xCoord(Vline_xy1)+s_width yCoord(Hline_xy1))
  191.                 if(Hline~>objType == "path" then
  192.                         Htmp_points=Hline~>points
  193.                         Htmp_points_s=reverse(Htmp_points)       
  194.                         if(car(Hpart_s) then
  195.                                 Hline~>points=rplaca(Htmp_points new_point)
  196.                         else;car(Hpart_s)
  197.                                 Hline~>points=reverse(rplaca(Htmp_points_s new_point))
  198.                                 );if
  199.                 else ;objType == "path"
  200.                         if(car(Hpart_s) then
  201.                                 Hline~>beginPt=new_point
  202.                         else;car(Hpart_s)
  203.                                 Hline~>endPt=new_point
  204.                                 );if
  205.                         );if

  206.                 if(yCoord(Vline_xy2) < yCoord(Hline_xy1) then
  207.                         s_width=Hline~>width/2
  208.                 else
  209.                         s_width=-(Hline~>width/2)
  210.                         );if
  211.                 new_point=list(xCoord(Vline_xy1) yCoord(Hline_xy1)+s_width)               
  212.                 if(Vline~>objType == "path" then
  213.                         Vtmp_points=Vline->points
  214.                         Vtmp_points_s=reverse(Vtmp_points)
  215.                         if(car(Vpart_s) then
  216.                                 Vline~>points=rplaca(Vtmp_points new_point)
  217.                         else;car(Vpart_s)
  218.                                 Vline~>points=reverse(rplaca(Vtmp_points_s new_point))
  219.                                 );if
  220.                 else ;objType == "path"
  221.                         if(car(Vpart_s) then
  222.                                 Vline->beginPt=new_point
  223.                         else;car(Hpart_s)
  224.                                 Vline->endPt=new_point
  225.                                 );if
  226.                         );if
  227.         );when ==2
  228. );let
  229. );pro







复制代码
发表于 2023-7-20 09:53:44 | 显示全部楼层
本帖最后由 星海 于 2023-7-20 10:01 编辑

怎么用不了
*Error* eval: undefined function - stretchpath    出现这个错
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐 上一条 /2 下一条

×

小黑屋| 手机版| 关于我们| 联系我们| 在线咨询| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2024-11-22 03:45 , Processed in 0.014419 second(s), 6 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
快速回复 返回顶部 返回列表