xieeyawen 发表于 2025-3-26 17:30:50

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

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

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

winskillabc 发表于 2025-3-27 09:41:48

大佬,设计页面的尺寸也是这个EXTENS吗这个 -100 100 这个是怎么个换算方法的?比如我要画一个 50000 50000的 尺寸

xieeyawen 发表于 2025-3-28 17:56:12

winskillabc 发表于 2025-3-27 09:41
大佬,设计页面的尺寸也是这个EXTENS吗这个 -100 100 这个是怎么个换算方法的?比如我要画一个 50000 50000的 ...

这个是我觉得缩小到极限看着不舒服,自己就加了下大小,这个需要加单位检测函数来加才更合理
页: [1]
查看完整版本: 原点设置(转)缩小设计尺寸(skill案例)查找板子边界(源码)