|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
对齐功能
axlCmdRegister( "aln" 'aln ?cmdType "interactive" ?doneCmd 'alnDone ?cancelCmd 'alnCancel )
when( (axlVersion('version) >= 16.3 && !axlUIMenuFind(nil "aln")) ; since 16.3
axlUIMenuRegister( "move" '( ("&Align" "aln") ) )
)
; reload script, only for development purpose
/*axlCmdRegister( "lo" 'lo)
procedure( lo()
load("o:/Sripts/align/align.il")
load("o:/Sripts/align/align_do.il")
load("o:/Sripts/align/align_utils.il")
)*/
procedure( aln()
(prog ()
when( axlOKToProceed()
axlDebug(nil)
; axlDebug(t)
axlClearSelSet()
alnInitGlobalVariable()
alnInitForm()
alnInitHotKeys()
popupA = axlUIPopupDefine( nil
(list
(list "Done" 'alnDone)
(list "Oops" 'alnOops)
(list "Cancel" 'alnCancel)
))
axlUIPopupSet( popupA )
axlSetFindFilter(?enabled '(GROUPS SYMBOLS PINS VIAS TEXT NAMEFORM ) ?onButtons _alnCheckedFilterBoxes) ; setup filter
axlMsgPut("Select object(s)")
_alnTransactionMark = axlDBTransactionStart()
while( _alnFinish == nil
; get objects from previous iteration
_alnSelectedObjects = axlGetSelSet()
if(_alnSelectedObjects then axlMsgPut("Choose action"))
; remove fixed objects from selection
_alnSelectedObjects = alnCheckFoRFixedObjects(_alnSelectedObjects)
; wait for object selection
axlSelect(?groupMode nil ?prompt nil)
; execute operation chosen in form
if( _alnHandler then
if( _alnSelectedObjects
then
axlDBTransactionMark(_alnTransactionMark)
; axlDBControl('drcEnable nil)
; axlDBControl('dynamicFilletsOn nil)
funcall(_alnHandler)
; refresh id
axlDBRefreshId(axlGetSelSet())
; restore selection
_alnSelectedObjects = alnRefreshIDs(_alnSelectedObjects)
axlSingleSelectObject(_alnSelectedObjects)
; axlDBControl('dynamicFilletsOn t)
; axlDBControl('drcEnable t)
;axlDRCUpdate(t)
else
axlMsgPut("No object(s) found")
)
_alnHandler = nil
)
);end-while
);endwhen
);end-prog
);endprocedure
;----------------- Menu Call--------------------------------
defun( alnDone ()
axlDBTransactionCommit( _alnTransactionMark )
alnExit()
);end-fun
defun( alnOops ()
if(_alnHandler then axlFinishEnterFun()) ;for exit from 'doPickH or 'doPickV
axlDBTransactionOops(_alnTransactionMark)
; restore selection
_alnSelectedObjects = alnRefreshIDs(_alnSelectedObjects)
axlAddSelectObject(_alnSelectedObjects)
);end-fun
defun( alnCancel ()
axlDBControl('drcEnable nil)
axlDBTransactionRollback( _alnTransactionMark )
alnExit()
);end-fun
defun( alnExit ()
_alnFinish = t
axlFormClose(_alnFormPtr)
axlDehighlightObject(_alnSelectedObjects)
axlCancelEnterFun()
axlClearSelSet()
axlUIPopupSet( nil )
popupA = nil
_alnCheckedFilterBoxes = axlGetFindFilter(t)
alnStoreFilter(_alnCheckedFilterBoxes)
_alnTransactionMark = nil
alnRestoreHotKeys()
axlDBControl('drcEnable t)
alnStoreFormData()
);end-defun
;-------------------Parameter form data ------------------
defun( alnInitForm () ;
let( (units multiplier)
when( (axlIsDebug) axlMsgPut("alnInitForm"))
_alnFormPtr = axlMiniStatusLoad( (gensym) "align.form" '_pARMCallBack)
;_alnFormPtr = axlFormCreate( (gensym) "align.form" '(ne canvas msglines 0) '_parmCallBack t)
units = axlDBGetDesignUnits()
case( car(units)
("mils" multiplier = 1)
("inches" multiplier = 0.001)
("microns" multiplier = 25.4)
("millimeters" multiplier = 0.0254)
("centimeters" multiplier = 0.00254)
)
when( ( _alnFormData == nil )
; first script launch in current session, trying restore settings
_alnFormData = alnRestoreFormData()
)
if( ( _alnFormData == nil )
then ; first script launch
_alnFormData = ncons(t)
_alnFormData->units = units
axlFormSetField(_alnFormPtr "bxPickH" nil)
_alnFormData->usePickH = nil
axlFormSetField(_alnFormPtr "bxStepH" nil)
_alnFormData->useStepH = nil
axlFormSetField(_alnFormPtr "bxPickV" nil)
_alnFormData->usePickV = nil
axlFormSetField(_alnFormPtr "bxStepV" nil)
_alnFormData->useStepV = nil
axlFormSetField(_alnFormPtr "fPickH" 0.0)
_alnFormData->pickH = 0.0
axlFormSetField(_alnFormPtr "fStepH" (100.0 * multiplier))
_alnFormData->stepH = 100.0 * multiplier
axlFormSetField(_alnFormPtr "fPickV" 0.0)
_alnFormData->pickV = 0.0
axlFormSetField(_alnFormPtr "fStepV" (100.0 * multiplier))
_alnFormData->stepV = 100.0 * multiplier
axlFormSetField(_alnFormPtr "bxGap" nil)
_alnFormData->useGap = nil
axlFormSetField(_alnFormPtr "bxStretch" t)
_alnFormData->useStretch = t
axlFormSetField(_alnFormPtr "bxRipup" nil)
_alnFormData->useRipup = nil
axlFormSetField(_alnFormPtr "bxSnapToGrid" t)
_alnFormData->snapToGrid = t
axlFormSetField(_alnFormPtr "cmbSnapPoint" "center")
_alnFormData->snapPoint = "center"
axlFormSetField(_alnFormPtr "sPinNumber" "1")
_alnFormData->snapPinNumber = "1"
else ; settings present in session or restored from design
when( car(_alnFormData->units) != car(units)
; units were changed, correct multiplier
case( car(_alnFormData->units)
; ("mils" multiplier = multiplier / 1)
("inches" multiplier = multiplier / 0.001)
("microns" multiplier = multiplier / 25.4)
("millimeters" multiplier = multiplier / 0.0254)
("centimeters" multiplier = multiplier / 0.00254)
)
_alnFormData->pickH = _alnFormData->pickH * multiplier
_alnFormData->stepH = _alnFormData->stepH * multiplier
_alnFormData->pickV = _alnFormData->pickV * multiplier
_alnFormData->stepV = _alnFormData->stepV * multiplier
_alnFormData->units = units
)
axlFormSetField(_alnFormPtr "bxPickH" _alnFormData->usePickH)
axlFormSetField(_alnFormPtr "bxStepH" _alnFormData->useStepH)
axlFormSetField(_alnFormPtr "bxPickV" _alnFormData->usePickV)
axlFormSetField(_alnFormPtr "bxStepV" _alnFormData->useStepV)
axlFormSetDecimal(_alnFormPtr "fPickH" cadr(units))
axlFormSetDecimal(_alnFormPtr "fStepH" cadr(units))
axlFormSetDecimal(_alnFormPtr "fPickV" cadr(units))
axlFormSetDecimal(_alnFormPtr "fStepV" cadr(units))
axlFormSetField(_alnFormPtr "fPickH" _alnFormData->pickH)
axlFormSetField(_alnFormPtr "fStepH" _alnFormData->stepH)
axlFormSetField(_alnFormPtr "fPickV" _alnFormData->pickV)
axlFormSetField(_alnFormPtr "fStepV" _alnFormData->stepV)
axlFormSetField(_alnFormPtr "bxGap" _alnFormData->useGap)
axlFormSetField(_alnFormPtr "bxStretch" _alnFormData->useStretch)
axlFormSetField(_alnFormPtr "bxRipup" _alnFormData->useRipup)
axlFormSetField(_alnFormPtr "bxSnapToGrid" _alnFormData->snapToGrid)
axlFormSetField(_alnFormPtr "cmbSnapPoint" _alnFormData->snapPoint)
axlFormSetField(_alnFormPtr "sPinNumber" _alnFormData->snapPinNumber)
)
if(_alnFormData->usePickH
then axlFormSetFieldEditable(_alnFormPtr "fPickH" t)
else axlFormSetFieldEditable(_alnFormPtr "fPickH" nil)
)
if(_alnFormData->usePickV
then axlFormSetFieldEditable(_alnFormPtr "fPickV" t)
else axlFormSetFieldEditable(_alnFormPtr "fPickV" nil)
)
if(_alnFormData->useStepH
then axlFormSetFieldEditable(_alnFormPtr "fStepH" t)
else axlFormSetFieldEditable(_alnFormPtr "fStepH" nil)
)
if(_alnFormData->useStepV
then axlFormSetFieldEditable(_alnFormPtr "fStepV" t)
else axlFormSetFieldEditable(_alnFormPtr "fStepV" nil)
)
if(_alnFormData->useStretch
then
axlFormSetField(_alnFormPtr "bxRipup" nil)
_alnFormData->useRipup = nil
)
if(_alnFormData->useRipup then
axlFormSetField(_alnFormPtr "bxStretch" nil)
_alnFormData->useStretch = nil
)
if( (_alnFormData->snapPoint == "pin")
then axlFormSetFieldVisible( _alnFormPtr "sPinNumber" 1)
else axlFormSetFieldVisible( _alnFormPtr "sPinNumber" 0)
)
when( (axlVersion('version) < 15.7) ; since 15.7
axlFormSetFieldEditable(_alnFormPtr "bxSnapToGrid" nil)
)
; axlFormDisplay(_alnFormPtr)
) ;end let
);end-defun
;---------------Form Call Back-----------------------------------------------
defun( _parmCallBack (form)
when( (axlIsDebug) axlMsgPut("_parmCallBack"))
case( get(form 'curField)
( "bnTop" alnOnTop() )
( "bnCenterH" alnOnCenterH() )
( "bnBottom" alnOnBottom() )
( "bnLeft" alnOnLeft() )
( "bnCenterV" alnOnCenterV() )
( "bnRight" alnOnRight() )
( "bxPickH" _alnFormData->usePickH = form->curValue
if(_alnFormData->usePickH
then axlFormSetFieldEditable(form "fPickH" t)
else axlFormSetFieldEditable(form "fPickH" nil)
)
)
( "fPickH" _alnFormData->pickH = form->curValue )
( "bnPickH" alnOnPickH() )
( "bxPickV" _alnFormData->usePickV = form->curValue
if(_alnFormData->usePickV
then axlFormSetFieldEditable(form "fPickV" t)
else axlFormSetFieldEditable(form "fPickV" nil)
)
)
( "fPickV" _alnFormData->pickV = form->curValue )
( "bnPickV" alnOnPickV() )
( "bxStepH"
_alnFormData->useStepH = form->curValue
if(_alnFormData->useStepH
then axlFormSetFieldEditable(form "fStepH" t)
else axlFormSetFieldEditable(form "fStepH" nil)
)
)
( "fStepH" _alnFormData->stepH = form->curValue )
( "bnDistributeH" alnOnDistributeH() )
( "bxStepV"
_alnFormData->useStepV = form->curValue
if(_alnFormData->useStepV
then axlFormSetFieldEditable(form "fStepV" t)
else axlFormSetFieldEditable(form "fStepV" nil)
)
)
( "fStepV" _alnFormData->stepV = form->curValue )
( "bnDistributeV" alnOnDistributeV() )
( "bxGap" _alnFormData->useGap = form->curValue)
( "bxStretch"
_alnFormData->useStretch = form->curValue
if(_alnFormData->useStretch
then
axlFormSetField(form "bxRipup" nil)
_alnFormData->useRipup = nil
)
)
( "bxRipup"
_alnFormData->useRipup = form->curValue
if(_alnFormData->useRipup then
axlFormSetField(form "bxStretch" nil)
_alnFormData->useStretch = nil
)
)
( "bxSnapToGrid" _alnFormData->snapToGrid = form->curValue )
( "cmbSnapPoint"
_alnFormData->snapPoint = form->curValue
if( (_alnFormData->snapPoint == "pin")
then axlFormSetFieldVisible( form "sPinNumber" 1)
else axlFormSetFieldVisible( form "sPinNumber" 0)
)
)
( "sPinNumber" _alnFormData->snapPinNumber = form->curValue)
);case
);end-defun
defun( alnInitGlobalVariable ()
_alnFinish = nil
when( !boundp('_alnFormData) _alnFormData = nil)
_alnFormPtr = nil
_alnHandler = nil
_alnSelectedObjects = nil
when( !boundp('_alnCheckedFilterBoxes)
_alnCheckedFilterBoxes = alnRestoreFilter()
when( !_alnCheckedFilterBoxes _alnCheckedFilterBoxes = '(SYMBOLS VIAS TEXT)
)
)
);end-defun
defun( alnInitHotKeys ()
let( (aliases alias aliasFunc funckeys funckey funckeyFunc)
; store all hotkeys and find hotkey for oops command
; funckeys
when( (axlVersion('version) >= 16.3) ; since 16.3
funckeys = axlGetFunckey(nil)
_alnOriginalFunckeys = nil
foreach( funckey funckeys
funckeyFunc = axlGetFunckey(funckey)
_alnOriginalFunckeys = cons(list(funckey funckeyFunc) _alnOriginalFunckeys)
when( funckeyFunc == "oops"
_oopsAlias = funckey
)
)
)
; aliases
aliases = axlGetAlias(nil)
_alnOriginalAliases = nil
foreach( alias aliases
aliasFunc = axlGetAlias(alias)
_alnOriginalAliases = cons(list(alias aliasFunc) _alnOriginalAliases)
when( aliasFunc == "oops"
_oopsAlias = alias
)
)
; define new actions
axlCmdRegister( "alnOops" 'alnOops ?cmdType "sub_cmd")
axlCmdRegister( "alnTop" 'alnOnTop ?cmdType "sub_cmd")
axlCmdRegister( "alnBottom" 'alnOnBottom ?cmdType "sub_cmd")
axlCmdRegister( "alnLeft" 'alnOnLeft ?cmdType "sub_cmd")
axlCmdRegister( "alnRight" 'alnOnRight ?cmdType "sub_cmd")
axlCmdRegister( "alnCenterH" 'alnOnCenterH ?cmdType "sub_cmd")
axlCmdRegister( "alnCenterV" 'alnOnCenterV ?cmdType "sub_cmd")
axlCmdRegister( "alnDistributeH" 'alnOnDistributeH ?cmdType "sub_cmd")
axlCmdRegister( "alnDistributeV" 'alnOnDistributeV ?cmdType "sub_cmd")
axlCmdRegister( "alnPickH" 'alnOnPickH ?cmdType "sub_cmd")
axlCmdRegister( "alnPickV" 'alnOnPickV ?cmdType "sub_cmd")
; define new hotkeys
if( boundp('_oopsAlias) && _oopsAlias
then axlSetAlias( _oopsAlias "alnOops")
else axlSetAlias( "F3" "alnOops") ; if hotkey for oops command not assigned
)
when( (axlVersion('version) >= 16.3) ; since 16.3
axlSetFunckey( "a" "alnLeft")
axlSetFunckey( "s" "alnBottom")
axlSetFunckey( "w" "alnTop")
axlSetFunckey( "d" "alnRight")
axlSetFunckey( "q" "alnCenterH")
axlSetFunckey( "z" "alnCenterV")
axlSetFunckey( "e" "alnDistributeH")
axlSetFunckey( "c" "alnDistributeV")
axlSetFunckey( "r" "alnPickH")
axlSetFunckey( "v" "alnPickV")
)
) ; let
);end-defun
defun( alnRestoreHotKeys ()
let( (funckey alias)
axlCmdUnregister("alnOops")
axlCmdUnregister("alnLeft")
axlCmdUnregister("alnBottom")
axlCmdUnregister("alnTop")
axlCmdUnregister("alnRight")
axlCmdUnregister("alnCenterH")
axlCmdUnregister("alnCenterV")
axlCmdUnregister("alnDistributeH")
axlCmdUnregister("alnDistributeV")
axlCmdUnregister("alnPickH")
axlCmdUnregister("alnPickV")
when( !boundp('_oopsAlias) || !_oopsAlias
axlSetAlias( "F3" nil)
)
when( (axlVersion('version) >= 16.3) ; since 16.3
axlSetFunckey( "a" nil)
axlSetFunckey( "s" nil)
axlSetFunckey( "w" nil)
axlSetFunckey( "d" nil)
axlSetFunckey( "q" nil)
axlSetFunckey( "z" nil)
axlSetFunckey( "e" nil)
axlSetFunckey( "c" nil)
axlSetFunckey( "r" nil)
axlSetFunckey( "v" nil)
; restore funckeys
foreach( funckey _alnOriginalFunckeys
when( !axlIsProtectAlias(car(funckey)) ; skip readonly
axlSetFunckey(car(funckey) cadr(funckey))
)
)
_alnOriginalFunckeys = nil
)
; restore aliases
foreach( alias _alnOriginalAliases
when( !axlIsProtectAlias(car(alias)) ; skip readonly
axlSetAlias(car(alias) cadr(alias))
)
)
_alnOriginalAliases = nil
) ; let
);end-defun
;
; Store form settings to attachment.
;
defun( alnStoreFormData ()
let( (sFormData attachment )
sFormData = sprintf(nil "%L" _alnFormData)
attachment = axlGetAttachment("AlignFormData" 'string)
if( attachment
then
attachment->data = sFormData
axlSetAttachment(attachment "QWE123qwe")
else
attachment = axlCreateAttachment("AlignFormData" "QWE123qwe" 0 'string sFormData)
);if
) ; let
);end-defun
;
; Restore form settings from attachment.
;
defun( alnRestoreFormData ()
prog( (formData attachment sFormData )
formData = nil
attachment = axlGetAttachment("AlignFormData" 'string)
sFormData = attachment->data
when( sFormData
formData = car(errsetstring(strcat("'" sFormData)))
)
return(formData)
) ; let
);end-defun
;
; Store selected Find filter checkboxes.
;
defun( alnStoreFilter (checked)
let( (attachment sChecked)
sChecked = sprintf(nil "%L" checked)
attachment = axlGetAttachment("AlignSelectFilter" 'string)
if( attachment
then
attachment->data = sChecked
axlSetAttachment(attachment "QWE123qwe")
else
attachment = axlCreateAttachment("AlignSelectFilter" "QWE123qwe" 0 'string sChecked)
);if
) ; let
);end-defun
;
; Restore selected Find filter checkboxes.
;
defun( alnRestoreFilter ()
prog( (checked attachment sChecked )
checked = nil
attachment = axlGetAttachment("AlignSelectFilter" 'string)
sChecked = attachment->data
when( sChecked
checked = car(errsetstring(strcat("'" sChecked)))
)
return(checked)
) ; let
);end-defun
|
|