|
发表于 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相关的内容。 |
|