EDA365电子工程师网

标题: 求助关于金手指自动加SHAPE的SKILL [打印本页]

作者: wuyuhe    时间: 2015-9-21 09:45
标题: 求助关于金手指自动加SHAPE的SKILL
本帖最后由 wuyuhe 于 2015-9-21 09:46 编辑

已经放好了PAD,画好了OUTLINE,现在想要让它根据这些自动跑出来PLACE_BOULD_TOP,要求PIN上端到SHAPE上端距离为2.5MM,从PIN左端到SHAPE左端也是距离2.5MM,但是SHAPE下端是沿着OUTLINE的,如图所示:

现在我想的是如果直接在FIND里选择了PIN,刚可以按要求跑出左右,上端距离2.5MM的,但是这下端沿着OUTLINE的我就不知道怎么弄了,如果选了PIN和OUTLINE的话,那左右和上端的2.5我又不知道怎么选择了。
大家帮忙想想怎么弄啊


作者: XYX365    时间: 2015-9-21 09:55
1.首先你要先判斷出左邊pin的位置,並依照規則設定shape的左下角位置
2.在判斷金手指最右邊pin的位置,並依照規則設定shape的右上角位置
3.依照兩個位置來建一個shape

作者: carol8688    时间: 2015-9-21 13:54
好想知道
作者: wuyuhe    时间: 2015-9-23 10:12
XYX365 发表于 2015-9-21 09:55
1.首先你要先判斷出左邊pin的位置,並依照規則設定shape的左下角位置
2.在判斷金手指最右邊pin的位置,並依 ...

能帮忙看一下下面的代码,为什么SHAPE出不来啊?
axlCmdRegister("ts" 'add_via_noprobe_top)
procedure( coordinate()
    axlClearSelSet()
    axlVisibleDesign(nil)
    (axlSetFindFilter ?enabled
     list("noall" "lines") ?onButtons
     list("noall" "lines")
     )
    axlVisibleLayer("board geometry/assembly_detail" t)
    axlVisibleUpdate(t)
    axlUIWUpdate(nil)
    axlAddSelectAll()
    assemblydetail=axlGetSelSet()
    assemblydetaildbid=nth(0 assemblydetail)
    assemblydetaillist=assemblydetaildbid->segments
    assemblydetailbbox=assemblydetaildbid->bBox
    myXY1=nth(0 assemblydetailbbox)
    myXY2=nth(1 assemblydetailbbox)
    detailY1=nthelem(2 myXY1)
    detailY2=nthelem(2 myXY2)
    assemblylinex=list()
  foreach(assemblydetail assemblydetaillist
        assemblyline=assemblydetail->startEnd
        assemblyline0=nth(0 nth(0 assemblyline))
        assemblyline1=nth(0 nth(1 assemblyline))
        
        if(assemblyline0==assemblyline1
          assemblylinex=cons(assemblyline0 assemblylinex)
          );endif
);endforeach
assemblylinex=reverse(assemblylinex)
          detailX1   = nthelem(1 assemblylinex)
          detailX2   = nthelem(4 assemblylinex)
          detailX3   = nthelem(3 assemblylinex)
          detailX4   = nthelem(2 assemblylinex)
         
axlVisibleUpdate(t)
axlVisibleDesign(nil)
axlVisibleLayer("IN/TOP" t)
axlVisibleUpdate(t)
axlUIWUpdate(nil)
          myExtents = axlExtentDB()
          myXY3  = nthelem(1 myExtents)
          myXY4  = nthelem(2 myExtents)
          pinX1   = nthelem(1 myXY3)
         ; myY1   = nthelem(2 myXY1)
          pinX2   = nthelem(1 myXY4)
          pinY2   = nthelem(2 myXY4)
)
;;;=========================================================================================
;=========================================================================
procedure( add_via_noprobe_top()
prog(()
    coordinate()
    myPath1=nil   
          myPath1 = axlPathStart((list detailX1:detailY1))
          myPath1 = axlPathLine(myPath1 0  detailX2:detailY1)
          myPath1 = axlPathLine(myPath1 0  detailX2pinY2+0.635))
          myPath1 = axlPathLine(myPath1 0  (detailX3+0.762)pinY2+0.635))
          myPath1 = axlPathLine(myPath1 0  (detailX3+0.762)detailY2+0.762))
          myPath1 = axlPathLine(myPath1 0  (detailX2-0.762):(detailY2+0.762))
          myPath1 = axlPathLine(myPath1 0  (detailX2-0.762):(pinY2+0.635))
          myPath1 = axlPathLine(myPath1 0  detailX1:(pinY2+0.635))
          myPath1 = axlPathLine(myPath1 0  detailX1:detailY1)
axlDBCreateShape(myPath1 t "VIA KEEPOUT/TOP")         
axlDBCreateShape(myPath1 t "MANUFACTURING/NO_PROBE_TOP")         
))

作者: XYX365    时间: 2015-9-23 10:26
wuyuhe 发表于 2015-9-23 10:12
能帮忙看一下下面的代码,为什么SHAPE出不来啊?
axlCmdRegister("ts" 'add_via_noprobe_top)
procedur ...

你可以在這一行(myPath1=nil) 下面加入這一行printf("detailX1=%L, detailY1=%L\n" detailX1 detailY1)



再重新執行, 並告訴我detailX1 和 detailY1 輸出直是多少?

作者: wuyuhe    时间: 2015-9-23 10:32
XYX365 发表于 2015-9-23 10:26
你可以在這一行(myPath1=nil) 下面加入這一行printf("detailX1=%L, detailY1=%L\n" detailX1 detailY1)
...

detailX1=-1.04, detailY1=-2.25

作者: wuyuhe    时间: 2015-9-23 10:33
XYX365 发表于 2015-9-23 10:26
你可以在這一行(myPath1=nil) 下面加入這一行printf("detailX1=%L, detailY1=%L\n" detailX1 detailY1)
...

Skill > detailY1
-2.25
Skill > detailY2
4.25
Skill > detailX1
-1.04
Skill > detailX2
35.323
Skill > detailX3
22.155
Skill > detailX4
19.755
Skill > pinX1
-0.225
Skill > pinX2
34.515
Skill > pinY2
1.75

作者: XYX365    时间: 2015-9-23 10:38
wuyuhe 发表于 2015-9-23 10:33
Skill > detailY1
-2.25
Skill > detailY2

你是不是有顯示錯誤訊息
E- (SPMHDB-187): SHAPE boundary may not cross itself.

作者: XYX365    时间: 2015-9-23 10:44
wuyuhe 发表于 2015-9-23 10:33
Skill > detailY1
-2.25
Skill > detailY2

依照你給的數值,轉為Line如下圖,這樣的圖示不能轉為shape
[attach]102646[/attach]

作者: wuyuhe    时间: 2015-9-23 10:47
嗯,我的等级看不到附件
作者: wuyuhe    时间: 2015-9-23 10:50
XYX365 发表于 2015-9-23 10:44
依照你給的數值,轉為Line如下圖,這樣的圖示不能轉為shape

嗯,我的等级看不到附件

我的目标是想出来这样的SHAPE。

作者: XYX365    时间: 2015-9-23 10:57
wuyuhe 发表于 2015-9-23 10:50
嗯,我的等级看不到附件

我的目标是想出来这样的SHAPE。

看不到圖片,那可以到我的相冊裡面看嗎?
正常你要轉成下圖,才能轉為shape(ts_line1.jpg)
[attach]102649[/attach]

作者: XYX365    时间: 2015-9-23 11:16
wuyuhe 发表于 2015-9-23 10:50
嗯,我的等级看不到附件

我的目标是想出来这样的SHAPE。

找到問題,如下代碼
  1. myPath1 = axlPathStart((list detailX1:detailY1))
  2.           myPath1 = axlPathLine(myPath1 0  detailX2:detailY1)
  3.           myPath1 = axlPathLine(myPath1 0  detailX2:(pinY2+0.635))
  4.           myPath1 = axlPathLine(myPath1 0  (detailX3+0.762):(pinY2+0.635))
  5.           myPath1 = axlPathLine(myPath1 0  (detailX3+0.762):(detailY2+0.762))
  6.           myPath1 = axlPathLine(myPath1 0  (detailX4-0.762):(detailY2+0.762)) ;此線段的x值錯誤
  7.           myPath1 = axlPathLine(myPath1 0  (detailX4-0.762):(pinY2+0.635)) ;此線段的x值錯誤
  8.           myPath1 = axlPathLine(myPath1 0  detailX1:(pinY2+0.635))
  9.           myPath1 = axlPathLine(myPath1 0  detailX1:detailY1)
复制代码





作者: wuyuhe    时间: 2015-9-23 11:20
XYX365 发表于 2015-9-23 11:16
找到問題,如下代碼

改好了就可以了,真是太感谢你了!





欢迎光临 EDA365电子工程师网 (https://bbs.elecnest.cn/) Powered by Discuz! X3.2