⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 align_sym.il

📁 Allegro常用skill
💻 IL
📖 第 1 页 / 共 2 页
字号:
;+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+
;
;	Author: Edward B. Acheson
;		Sr Division AE
;		SPG Division
;		Benchmark Center
;		Cadence Design Systems
;		270 Billerica Road
;		Chelmsford MA 01824
;		(508) 262-6465
;
;	File Name:  align_sym.il
;	Revision 0: December 20,1993
;
;	
;	Purpose: To allow the User to align Component
;		Package symbols by Component Origin or
;		by component pin 1.
;	Usage: Once this file is loaded into the Allegro database
;		enter align_sym<ret> and a form will display
;		Items may be picked by top, bottom or both. Items
;		may be selected by window, group or tolerance. In
;		selecting by group or window, the user may specify
;		choice by class. The tolerance value is the distance
;		to each side of the alignment axis.
;		1. Select Form Options
;		2. Select "Key Componen" to align other symbols to.
;		3. If Group or window is selected, define the window or
;			define group elements, and pick complete in
;			popup window ( middle mouse button).
;		4. Go on to next or hit done.
;	Special notes:
;		1. All Symbol definitions must exist in a Library Path.
;		2. Shape in symbols not recognized.
;		3. Any etch connected will be deleted.
;		4. Symbol definition as found in library will
;			be maintained. (this includes alt_symbols).
;
;
;	Other files required:  align_sym.form
;=========================================================
;==================== MAIN ROUTINE =======================
;=========================================================
axlCmdRegister(
	"align_sym"
	'align_sym
	)

procedure( align_sym( )
(prog ()
when( axlOKToProceed() 
_ASInitVar()
_ASCreateFormFile()
_ASInitParmForm()
while( fini == nil
	_ASsetsymmaster()
	if( _ASFormData->group == t && fini == nil then
		_ASselectGrp()
		if( _ASFormData->horizontal == t then
			_ASMoveHorzComp( cmpgrp)
		else
			_ASMoveVertComp( cmpgrp)
		)
		
	)
	if( _ASFormData->tolerance == t && fini == nil then
		if( _ASFormData->horizontal == t then
			_ASHorzSelTol()
			_ASMoveHorzComp( cmpgrp)
		else
			_ASVertSelTol()
			_ASMoveVertComp( cmpgrp)
		)
	)
	if( _ASFormData->window == t && fini == nil then
		_ASWindSel()
		if( _ASFormData->horizontal == t then
			_ASMoveHorzComp( cmpgrp)
		else
			_ASMoveVertComp( cmpgrp)
		)
	)
	cmpgrp = nil
);end-while
axlUIPopupSet( nil)
);endwhen
);end-prog
);endprocedure

;-----------------------define master component location-------------------

(defun _ASsetsymmaster ( )
(prog ()
	_ASPopUpA()
	setq( efound  nil)
while( (efound == nil) && (fini == nil)
	axlMsgPut("Select Key Component.")
	good = nil
	mpinl = nil
	pnloc = nil
	axlSetFindFilter( ?enabled (list "symbols" )
			  ?onButtons (list "symbols"))
	axlOpenFindFilter()
	if( fini ==  nil && axlSingleSelectPoint( ) then
		elem = axlGetSelSet()
		axlMsgPut( "Key Component %L Selected." car(elem)->refdes)
	else
	 	if( fini == nil then axlMsgPut( "Nothing Found, Select Again."))
	);end-if
	if( fini == nil then
		axlHighlightObject( elem)
		if(_ASFormData->top == t && (car elem)->isMirrored == nil then
			good = t
		);endif
		if(_ASFormData->bottom == t && (car elem)->isMirrored == t then
			good = t
		);endif
		
		if(_ASFormData->both == t then good = t)
		if(good == t then
			;---------stor current data
			setq(locat (car elem)->xy)
			setq(cmpid (car elem)->refdes) 
			setq(cmpname (car elem)->name)
			setq(cmptype (car elem)->type)
			setq(cmprot (car elem)->rotation)
			setq(cmpmir (car elem)->isMirrored)
			efound = t
			if( _ASFormData->pin == t then
				r = 1
				setq( mpinl car(elem)->pins)
				while( nthelem( r mpinl) != nil
					if( nthelem( r mpinl)->number == "1" then
						setq( pnloc nthelem( r mpinl)->xy)
					)
				++r
				)
				if( pnloc == nil then
					efound == nil
					axlMsgPut("Component Selected Has No Pin 1.")
					axlMsgPut("Reset Parameters And Try Again.")
				)
			)
					
		else
			axlDehighlightObject( elem)
			axlMsgPut( "Selected Component is not on Selected Layer.")
			axlSubSelectAll()
		);endif
	);endif
);end-while
axlCancelEnterFun()
);end-prog
);end-defun
;-------------------select components by group-----------------------
(defun  _ASselectGrp ()
(prog ()
if( efound == t && cmpgrp == nil then
	grsel = nil
      	_ASPopUpB()
       	axlSetFindFilter( ?enabled (list "symbols" )
       	                  ?onButtons (list "symbols"))
      	axlOpenFindFilter()
	while( (grsel == nil && efound == t) 
       		axlMsgPut("Select Component to be Aligned.")
       		good = nil
		
		if( grsel == nil then
       			if( axlSingleSelectPoint( ) then
       			        setq( gelem axlGetSelSet())
       			        axlMsgPut( "Component %L Group Selected." car(gelem)->refdes)
       			else
       				if( grsel == nil then axlMsgPut( "Nothing Found, Select Again."))
       			);end-if
       		);end-if
       		if(_ASFormData->top == t && (car gelem)->isMirrored == nil then
       		         good = t
       		);endif
       		if(_ASFormData->bottom == t && (car gelem)->isMirrored == t then
       		         good = t
       		);endif
       		if(_ASFormData->both == t then good = t)
		if( grsel == nil then
	       		if(good == t then 
				if( (car gelem)->type == "PACKAGE" then
					cmpgrp=cons( nthelem( 1 gelem) cmpgrp)
					axlHighlightObject( cons( car(elem) cmpgrp))
				else
					axlMsgPut( "Component Not A PACKAGE Type")
					axlDehighlightObject( gelem)
				);end-if

			 else	
				axlMsgPut( "Component Is Not On Appropriate Layer")
				axlDehighlightObject( gelem)
			);endif
		);endif
	);end-while
	return( cmpgrp)
);end-if
axlCancelEnterFun()
);end-prog
);end-defun
;-------------------select by vertical orientation------------------
(defun _ASVertSelTol ()
(prog ()
if( efound == t then
	i = 1
	good = nil
	if( _ASFormData->pin == t then
		mlocat = pnloc
	else
		mlocat = locat
	)
	setq(allsym axlDBGetDesign()->symbols)
	setq(allcmp axlDBGetDesign()->components)
	while( nthelem( i allsym) != nil
		if( nthelem( i allsym)->type == "PACKAGE" && nthelem( i allsym)->refdes != car(elem)->refdes then
			if( _ASFormData->pin == t then
				r = 1
				setq( tpinl nthelem( i allsym)->pins)
				while( nthelem( r tpinl) != nil
					if( nthelem( r tpinl)->number == "1" then
						setq( tlocat nthelem( r tpinl)->xy)
					)
					++r
				)
			else
				setq( tlocat (nthelem(i allsym)->xy))
			)
			if( (car tlocat) <= ( car mlocat)+_ASFormData->tol && (car tlocat) >= ( car mlocat)-_ASFormData->tol then
       		 		if(_ASFormData->top == t && (car gelem)->isMirrored == nil then
       		         		good = t
       		 		);endif
       		 		if(_ASFormData->bottom == t && (car gelem)->isMirrored == t then
       		       		  	good = t
       		 		);endif
       		 		if(_ASFormData->both == t then good = t)
				setq( srefdes (nthelem(i allsym)->refdes))
				h = 1
				while( nthelem( h allcmp) != nil
					if( (nthelem( h allcmp)->name) == srefdes && good == t then
						if( _ASFormData->class == "Any" || nthelem( h allcmp)->class == _ASFormData->class then
							cmpgrp=cons(nthelem( i allsym) cmpgrp)
							axlHighlightObject( cons( car(elem) cmpgrp))
							axlMsgPut( "Component %L Selected." srefdes)
						);end-if
					);endif
					++h	
				);end-while
			);end-if
			good = nil
		);end-if
		++i
	);endwhile
	efound = nil
	fini = nil
);end-if
return( cmpgrp)
);end-prog
);end-defun
;-------------------select by horizontal orientation------------------
(defun _ASHorzSelTol ()
(prog ()
	i = 1
	good = nil
	if( _ASFormData->pin == t then
		mlocat = pnloc
	else
		mlocat = locat
	)
	setq(allsym axlDBGetDesign()->symbols)
	setq(allcmp axlDBGetDesign()->components)
	while( nthelem( i allsym) != nil
		if( nthelem( i allsym)->type == "PACKAGE" then
			if( _ASFormData->pin == t then
				r = 1
				setq( tpinl nthelem( i allsym)->pins)
				while( nthelem( r tpinl) != nil
					if( nthelem( r tpinl)->number == "1" then
						setq( tlocat nthelem( r tpinl)->xy)
					)
					++r
				)
			else
				setq( tlocat (nthelem(i allsym)->xy))
			)
			if((cadr tlocat) <= ( cadr locat)+_ASFormData->tol && (cadr tlocat) >= ( cadr locat)-_ASFormData->tol then
       		 		if(_ASFormData->top == t && (car gelem)->isMirrored == nil then
       		         		good = t
       		 		);endif
       		 		if(_ASFormData->bottom == t && (car gelem)->isMirrored == t then
       		       		  	good = t
       		 		);endif
       		 		if(_ASFormData->both == t then good = t)
				setq( srefdes (nthelem(i allsym)->refdes))
				h = 1
				while( nthelem( h allcmp) != nil
					if( ( nthelem( h allcmp)->name) == srefdes && good == t then
						if( _ASFormData->class == "Any" || nthelem( h allcmp)->class == _ASFormData->class then
							cmpgrp=cons(nthelem( i allsym) cmpgrp)
							axlHighlightObject( cons( car(elem) cmpgrp))
							axlMsgPut( "Component %L Selected" srefdes)
						);end-if
					);end-if
				++h	
				);end-while
			);end-if
		);end-if
		++i
	);end-while
	efound = nil
	fini = nil
	return( cmpgrp)
);end-prog
);end-defun
;-------------------select by window ---------------------------------
(defun _ASWindSel ()
(prog ()
if( efound == t then
	i = 1
	good = nil
	axlSetFindFilter( ?enabled (list "symbols" )
			  ?onButtons (list "symbols"))
	axlOpenFindFilter()
	axlSingleSelectBox()
	allsym = axlGetSelSet()
	if( allsym == nil then axlMsgPut( "No Elements Found."))
	setq(allcmp axlDBGetDesign()->components)
	while( nthelem( i allsym) != nil
		if( nthelem( i allsym)->type == "PACKAGE" then
       		 	if(_ASFormData->top == t && (car gelem)->isMirrored == nil then
       		        	good = t
       		 	);endif
       		 	if(_ASFormData->bottom == t && (car gelem)->isMirrored == t then
       		       	  	good = t
       		 	);endif
       		 	if(_ASFormData->both == t then good = t)
			setq( srefdes (nthelem(i allsym)->refdes))
			h = 1
			while( nthelem( h allcmp) != nil
				if( ( nthelem( h allcmp)->name) == srefdes && good == t then
					if( _ASFormData->class == "Any" || nthelem( h allcmp)->class == _ASFormData->class then
						cmpgrp=cons(nthelem( i allsym) cmpgrp)
						axlHighlightObject( nthelem( i allsym))
						axlMsgPut( "Component %L Window Selected." srefdes)
					);end-if
				);end-if
			++h	
			);end-while
		);end-if
		good = nil
	++i	
	);end-while
);endif
	efound = nil
	return( cmpgrp)
);end-prog
);end-defun
;-------------------relocate vertical position -----------------------
	
(defun _ASMoveVertComp (cmpgrp)
(prog ()
	i = 1
	tmpnew= nil
	ocmpdata=nil
	ocmpmir=nil
	ocmprot=nil
	olocat=nil
	while( nthelem( i cmpgrp) != nil
		if( nthelem( i cmpgrp)->refdes != cmpid then
			cmpdata=nil
			tlocat = nil
			setq(tlocat nthelem( i cmpgrp)->xy)
			setq(tcmpid nthelem( i cmpgrp)->refdes)
			setq(tcmpname nthelem( i cmpgrp)->name)
			setq(tcmptype nthelem( i cmpgrp)->type)
			setq(tcmprot nthelem( i cmpgrp)->rotation)
			setq(tcmpmir nthelem( i cmpgrp)->isMirrored)
			cmpdata=cons(tcmpid cmpdata)
			cmpdata=cons(tcmptype cmpdata)

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -