Cadence Skill 论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 63|回复: 2

[分享] 原点设置(转)缩小设计尺寸(skill案例)查找板子边界(源码)

[复制链接]
发表于 6 天前 | 显示全部楼层 |阅读模式
axlCmdRegister( "Originset" 'Originset )
axlCmdRegister( "FitSize" 'FitSize )
defun( Originset ()
        vcPointxy = car(axlExtentDB())      
        ;invert the sense of the x coordinate
        vc_x = minus( car( vcPointxy ) )
        ;invert the sense of the y coordinate
        vc_y = minus( car( cdr( vcPointxy ) ) )
        ;put the x and y back together as a point list
        vcNewPointxy = list( vc_x vc_y )
        ;change the origin to the new point
        vcOChange = axlDBChangeDesignOrigin( vcNewPointxy )
        axlUIWPrint(nil "Complete Set 00 to Origin!")
        nil ;返回空值,可以直接done      
);end defun

procedure(FitSize()
prog((extents1)
  extents1 = axlExtentDB('obstacle)
  extents1 = bBoxAdd(extents1 '((-100 -100) (100 100)))
  axlDBChangeDesignExtents(extents1)
  axlUIWPrint(nil "Complete Fit Size!")   
  )
  )

/*****下面代码可用来查找板子上所有元素的边界,有时会有bug,可替代上面的FitSize()函数***************
axlCmdRegister("xyfitsize"  `xyfitsize)
procedure(xyfitsize()
prog((segments_dbid segments_dbids l_dbids list_x list_y x_max x_min y_max y_min a)
        axlClearSelSet()
        axlVisibleDesign(t)  
        axlVisibleUpdate(t)                  
        axlSetFindFilter(?enabled `("NOALL" "alltypes") ?onButtons `("alltypes"))
        axlAddSelectAll()
        setq(l_dbids axlGetSelSet())
        when(l_dbids
        setq(list_x nil)
        setq(list_y nil)
        foreach(l_dbid l_dbids setq(segments_dbids getq(l_dbid segments))
        foreach(segments_dbid segments_dbids
         setq(x1 car(car(getq(segments_dbid startEnd))))  ;先得到start的值,再得到x的值。
         setq(y1 cadr(car(getq(segments_dbid startEnd)))) ;先得到start的值,再得到y的值。
         setq(x2 car(cadr(getq(segments_dbid startEnd)))) ;先得到end的值,再得到x的值。
         setq(y2 cadr(cadr(getq(segments_dbid startEnd))));;先得到end的值,再得到y的值。
         setq(list_x append1(list_x x1))
         setq(list_x append1(list_x x2))
         setq(list_y append1(list_y y1))
         setq(list_y append1(list_y y2))
              );endforeach
              );endforeach
        );endwhen
        ;axlClearSelSet()
        setq(x_max car(sort(list_x quote(greaterp))))
        setq(x_min car(sort(list_x quote(lessp))))
        setq(y_max car(sort(list_y quote(greaterp))))
        setq(y_min car(sort(list_y quote(lessp))))
        a=list(list(x_min y_min) list(x_max y_max))        
        a = bBoxAdd(a '((-100 -100) (100 100)))
        axlUIWPrint(nil "Complete Fit Size!")
);endprog
);endprocedure

**************************************************************************************/

发表于 5 天前 | 显示全部楼层
大佬,设计页面的尺寸也是这个EXTENS吗这个 -100 100 这个是怎么个换算方法的?比如我要画一个 50000 50000的 尺寸
 楼主| 发表于 4 天前 | 显示全部楼层
winskillabc 发表于 2025-3-27 09:41
大佬,设计页面的尺寸也是这个EXTENS吗这个 -100 100 这个是怎么个换算方法的?比如我要画一个 50000 50000的 ...

这个是我觉得缩小到极限看着不舒服,自己就加了下大小,这个需要加单位检测函数来加才更合理
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2025-4-1 01:12 , Processed in 0.153543 second(s), 16 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

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