|  | 
 
 发表于 2014-11-13 10:47:13
|
显示全部楼层 
| /* 本程序是通过把path转换成polygon,再对polygon的点做处理,CIW中load此程序,选中off grid图形,运行PutOnGrid(Grid), Grid工艺规定的最小格点,如0.005 */ ;这里是单行注释,到行尾
 ;定义OnGrid函数
 procedure( OnGrid( Point ) ;用procedure定义函数OnGrid
 if( listp(Point) then
 ;如果Point是list的话,对list的每个元素递归重复OnGrid()函数,
 ;lambda定义一个没有函数名的函数
 ;mapcar函数用来根据一定的函数转换一个list,这里用递归的方法保留原来list的结构
 ;如’((1.2 2.6) (3.3 4.8)),如果Grid=0.5,则结果为’((1.0 2.5) (3.5 5.0))
 mapcar( lambda( (x) OnGrid(x) ) Point)
 else
 ;如果是一个数字的话,则通过Point/Grid取整,然后再乘以Grid,使图形的每个点移到格点上
 round((Point/Grid))*Grid
 );if then … else 语句结束
 );procedure
 ;定义PutOnGrid函数
 procedure( PutOnGrid( Grid )
 let((SelectObj ) ;定义局部变量
 SelectObj = geGetSelSet() ;版图中选定图形的函数,返回包含所有选中图形信息的一个list
 foreach( Object SelectObj ;循环对每个选定的图形操作
 cond(
 (Object~>objType == "path" ;判定图形的类型是不是path
 Polygon = leConvertShapeToPolygon(Object) ;path转成polygon
 
  olygon对应的points属性(是一个list)中每个元素通过OnGrid函数移动到格点上, ;然后把转换后的list重新赋给Polygon~>points属性
 Polygon~>points = OnGrid(Polygon~>points)
 )
 (Object~>objType == "polygon" ;判定图形的类型是不是polygon
 Object~>points = OnGrid(Object~>points)
 )
 (Object~>objType == "rect" ;判定图形的类型是不是rect
 ;需要改变的是rect的bBox属性(这里和polygon的points不同)
 Object~>bBox = OnGrid(Object~>bBox)
 )
 (Object~>objType=="inst" || Object~>objType=="mosaic"
 ;判定图形的类型是不是inst/mosaic,这里改变的是inst/mosaic的xy坐标
 Object~>xy = OnGrid(Object~>xy)
 )
 );cond ;你可以加上其他的情况
 );foreach
 );let
 );procedure加上关键词结尾的注释是个良好的习惯
 程序的主要代码就是上面的这些,如果你还想要更方便的图形界面方式,一个快捷键就可以操作的话,可以参考Cadence User Interface中的Form相关的内容。
 | 
 |