PutOnGrid.il
已有 130 次阅读|
2025-6-24 13:46
|系统分类:芯片设计
procedure( PutOnGrid()
let((gridField putOnGridForm)
hiCreateForm('putOnGridForm "Put On Grid"
"putOnGridCB( putOnGridForm->gridField->value
putOnGridForm->convPathToPolygonButton->value
putOnGridForm->selectAllObjButton->value)"
list( hiCreateFloatField(
?name 'gridField
?prompt "Enter Grid Value"
?defValue 0.005
);
hiCreateBooleanButton(
?name 'convPathToPolygonButton
?buttonText "Do you want to convert path to polygon?"
?value nil
?defValue nil
);
hiCreateBooleanButton(
?name 'selectAllObjButton
?buttonText "Select all object?"
?value t
?defValue t
);
);list
);hiCreateForm
hiDisplayForm(putOnGridForm)
);let
);procedure
procedure(putOnGridCB(grid convPathToPolygon selectAll)
prog( (compFactor cv selset saveLayer theta p obj path loc)
compFactor = 1 / (geGetEditCellView()~>"DBUPerUU")
if(!compFactor then
hiDisplayModelessDBox('formHandle "Put On Grid"
"The CellView does not have the DBUPerUU property defined"
"" ""
);
return()
);fi
cv=geGetEditCellView()
if(selectAll == t
then selset=nconc(cv~>shapes cv~>instances cv~>mosaic)
else
selset=selectedSet()
);fi
if(selset == nil then
hiDisplayModelessDBox('formHandle "Put On Grid"
"Nothing has been selected objects"
"" ""
);
return()
);fi
when(convPathToPolygon
foreach(obj selset
when(obj~>objType=="path"
dbConvertPathToPolygon(obj)
);when
);foreach
);when
foreach( obj selset
case( obj~>objType
("rect"
path=obj~>bBox
);
(("polygon" "path")
path=obj~>points
);
(("label" "inst" "mosaic" "mosaicInst")
path=list(obj~>xy) );
(t
println(obj~>objType)
);
);case
newpath=nil
foreach( pt path
newpath=cons(roundCoord(pt grid) newpath)
);foreach
path=newpath
case( obj~>objType
("rect"
obj~>bBox=path
);
(("polygon" "path")
obj~>points=path
);
(("label" "inst" "mosaic" "mosaicInst")
obj~>xy=car(path)
);
(t
println("Put On Grid: Encountered unknown shape");
);
);case
);foreach
);prog
);procedure
procedure(roundCoord(point grid)
prog((x y)
x=round((xCoord(point) + compFactor)/grid)*grid
y=round((yCoord(point) + compFactor)/grid)*grid
return(list(x y))
);prog
);procedure
;hiSetBindKey("layout" "<Key>0" "grid()")