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

📄 create_thermal_flash.il

📁 skill语言在Cadence平台二次开发中大量使用
💻 IL
📖 第 1 页 / 共 2 页
字号:
;	message will be displayed.
;
; DEPENDENCIES:
;	input_list - the list of coordinates for the shape corner points.
;	
;	start_angle - the angle in degrees from which the arc segment will be
;			constructed from.
;	num_spokes - the number of contact spokes. Limit to 1,2,3 or 4.		
;
;	For more information see:
;	_THRP_MkPath, axlDBCreateCloseShape, axlDBCreateOpenShape, axlMsgPut.
;
;===============================================================================
;-
defun( _THRP_BuildTHShape ( coord_list sangle num_spoke)
prog( ()
	let( (counter add_angle shapeid)
	counter = 0
	shapeid = nil
	add_angle = 360 / num_spoke
	while( (counter < num_spoke)
		path = _THRP_MkPath( coord_list sangle)
		shapeid = axlDBCreateCloseShape(axlDBCreateOpenShape( path t  "etch/top" nil ))
		when( shapeid == nil
                     axlMsgPut("ERROR - Could Not Generate Shape")
		     return( nil )
		)
		sangle = sangle + add_angle
		counter++
	);while
	return( t )
)));defun

;+
;===============================================================================
; NAME:
;	_THRP_BuildMasterCoord
;
; SYNOPSIS:
;	 _THRP_BuildMasterCoord( input_list )
;
; DESCRIPTION:
;	This function takes a list five floating integers and returns a list of
;	four lists of XY coordinates. The function identifes four corners from
;	the first, second third and fifth elements in the input list. This first
;	and second input coordinates are the minimum Y, maximum Y coordinates
;	respectively. The third element is the X coordinate, the fith coordinate is
;	the number of divisions which will be divided by 360 degrees.
;	 The return list is a series of XY list coordinates in a sequential order
;	for the adding of a polygonal outline for an arc type object.
;
; DEPENDENCIES:
;	input_list - This list is generated by _THRP_GetCoord()
;
;	For more information see:
;	_THRP_GetCoord()
;
;===============================================================================
;-
defun( _THRP_BuildMasterCoord (point_list)
prog( ()
let( ( arcswing corner1 corner2 corner3 corner4)
	arcswing = 360 / nthelem( 5 point_list) 
	if( nthelem( 5 point_list) > 2 then
		arcswing = ( nthelem( 5 point_list) - 1) * arcswing
	);if
	corner1 = list( nthelem( 3 point_list) nthelem( 1 point_list))
	corner2 = _clpRotatePt( list( (-1* nthelem(3 point_list)) nthelem(1 point_list)) '(0 0) arcswing)
	corner3 = _clpRotatePt( list( (-1* nthelem(3 point_list)) nthelem(2 point_list)) '(0 0) arcswing)
	corner4 = list( nthelem( 3 point_list) nthelem( 2 point_list))
	return( list( corner1 corner2 corner3 corner4))
)));

;+
;===============================================================================
; NAME:
;      _THRP_GetCoord
;
; SYNOPSIS:
;        _THRP_GetCoord()
;
; DESCRIPTION:
;        This function reads the data entered in the form passed by the global
;	variable THRP_FormData. This function uses the inner diameter, outer
;	diameter data, and spoke width to calculate a vertex point for an arc.
;	The values for number of spokes and angle are also converted from ASCII
;	to numeric. 
;	 This Function returns a list of coordinates from which to
;	calculate vertices. The return format in the list is inner y coordinate,
;	outer Y coordinate, X coordinate, rotation angle, number of spokes.
; 
; DEPENDENCIES:
;         This function requires the following input:
;	THRP_FormData->indiam,THRP_FormData->outdia,THRP_FormData->spkwdth,
;	THRP_FormData->spkangl,THRP_FormData->spknum
;
;        For more information see:
;            axlCreateForm()
;
;===============================================================================
;-
defun( _THRP_GetCoord ()
prog( ()
let( (innerR outerR spc counter set_angle)
	innerR= THRP_FormData->indiam / 2.0
        outerR = THRP_FormData->outdia / 2.0
	spc = THRP_FormData->spkwdth / 2.0

	coordin = sqrt( (innerR * innerR) - ( spc * spc) )
	coordout = sqrt( (outerR * outerR) - ( spc * spc) )

        set_angle = case( (THRP_FormData->spkangl)
              ("0"  0)
	      ("15" 15)
              ("30" 30)
              ("45" 45)
              ("60" 60)
	      ("75" 75)
              ("90" 90)
         );case
	num_spokes = THRP_FormData->spknum
	coord_data = list( coordin coordout spc set_angle num_spokes) 
	return(coord_data)
)));defun

;+
;===============================================================================
; NAME:
;      _THRP_MkPath
;
; SYNOPSIS:
;        _THRP_FormCallBack(
;		coord_list
;		angle
;		)
;
; DESCRIPTION:
;	This function returns a Path for the generation of a shape which represents
;	a section of a Thermal relief pad. This function will cause the shape path
;	to be rotated as required. 
;
; DEPENDENCIES:
;	coord_list - a list of four coordinate list pairs which represent the
;		     four corners of an arc type shape.
;	angle - The angle in degrees for the rotation of the shape from 0:0.
;
;	For more information see:
;		axlPathStart, axlPathArcCenter, axlPathLine, _THRP_RotatePt
;
;===============================================================================
;-
defun( _THRP_MkPath ( coord_list angle)
prog( ()
let( (path coord_pair coord_pairp first_pair next_pair)
	path = nil
	coord_pairp = _clpRotatePt( nthelem( 1 coord_list) '(0 0) angle)
	path = axlPathStart(  list( car(coord_pairp):cadr(coord_pairp)))
	coord_pair = _clpRotatePt( nthelem( 2 coord_list) '(0 0) angle)
        path = axlPathArcCenter( path,0.0, car(coord_pair):cadr(coord_pair), t, 0:0 )
	coord_pair = _clpRotatePt( nthelem( 3 coord_list) '(0 0) angle)
        path = axlPathLine( path,0.0, car(coord_pair):cadr(coord_pair))
	coord_pair = _clpRotatePt( nthelem( 4 coord_list) '(0 0) angle)
        path = axlPathArcCenter( path,0.0, car(coord_pair):cadr(coord_pair), nil, 0:0 )
        path = axlPathLine( path,0.0, car(coord_pairp):cadr(coord_pairp))
        return( path )

)));defun

;+
;===============================================================================
; NAME:
;      _THRP_FormCallBack
;
; SYNOPSIS:
;        _THRP_FormCallBack()
;
; DESCRIPTION:
;        This function is used in the axlCreateForm command. This Call is to
;	identify values and actions from the form currently displayed.
;     
;        For more information see:
;            axlCreateForm()
;
;===============================================================================
;-
defun(  _THRP_FormCallBack ( form )
    case( get( THRP_FormPtr 'curField)
	( "outdia" putprop( THRP_FormData get( THRP_FormPtr 'curValue) 'outdia))
	( "indiam" putprop( THRP_FormData get( THRP_FormPtr 'curValue) 'indiam))
	( "spkwdth" putprop( THRP_FormData get( THRP_FormPtr 'curValue) 'spkwdth))
	( "spkangl" putprop( THRP_FormData get( THRP_FormPtr 'curValue) 'spkangl))
	( "spknum" putprop( THRP_FormData get( THRP_FormPtr 'curValue) 'spknum))
	( "trgtdt" putprop( THRP_FormData get( THRP_FormPtr 'curValue) 'trgtdt))
	( "trgtdia" putprop( THRP_FormData get( THRP_FormPtr 'curValue) 'trgtdia))
        ( "okay" _THRP_RunCmd())
        ( "cancel" _THRP_Quit())
	( "vhelp" _THRP_Help())
    );case
);defun
  
;+
;===============================================================================
; NAME:
;      _THRP_FormDisplay
;
; SYNOPSIS:
;        _THRP_FormDisplay()
;
; DESCRIPTION:
;        This function is used in the axlCreateForm command. This Call is to
;	identify values and actions from the form currently displayed.
;     
;        For more information see:
;            axlCreateForm()
;
;===============================================================================
;-
defun(  _THRP_FormDisplay ( formname )
   prog( ()
   THRP_FormData = nil
   let( (form)
   form = axlFormCreate( (gensym) formname '(CENTER) '_THRP_FormCallBack t)
   setq(THRP_FormPtr  form)
   if( THRP_FormData == nil then
        setq( THRP_FormData t)
        axlFormSetField( THRP_FormPtr "trgtdia" 0.0)
        putprop( THRP_FormData 0.0 'trgtdia)
        axlFormSetField( THRP_FormPtr "trgtdt" nil)
        putprop( THRP_FormData nil 'trgtdt)
        axlFormSetField( THRP_FormPtr "spkangl" "45")
        putprop( THRP_FormData "45" 'spkangl)
        axlFormSetField( THRP_FormPtr "spknum" 4)
        putprop( THRP_FormData 4 'spknum)
        axlFormSetField( THRP_FormPtr "spkwdth" 20.0)
        putprop( THRP_FormData 20.0 'spkwdth)
        axlFormSetField( THRP_FormPtr "indiam" 90.0)
        putprop( THRP_FormData 90.0 'indiam)
        axlFormSetField( THRP_FormPtr "outdia" 110.0)
        putprop( THRP_FormData 110.0 'outdia)
        axlFormDisplay( form )
   );if
  when( isFile( formname )  deleteFile( formname ))
)));defun

   
;+
;===============================================================================
; NAME:
;      _THRP_MkForm
;
; SYNOPSIS:
;        file_name = _THRP_MkForm()
;
; DESCRIPTION:
;        This function creates a form file in the directory pointed to by the tmp
;        environment varaible with a temporary
;        name. The temporary name is returned. This form file is used to collect
;        information 
;     
;        For more information see:
;            makeTempFileName(), outfile()
;
;===============================================================================
;-
defun( _THRP_MkForm ()
prog( ()
let( (tempformfile formPort)
	tempformfile = makeTempFileName(strcat(tmp_path "/THRPhelp"))
	tempformfile = strcat(tempformfile ".form")
	formPort = outfile( tempformfile )
    fprintf( formPort "FILE_TYPE = FORM_DEFN VERSION=2\n FORM\nFIXED\nPORT 64 12\n")
    fprintf( formPort "HEADER \"Thermal Pad Symbol Defaults\"\n\n")
    fprintf( formPort "POPUP <CURSANGLE>\"0\"\"0\",\"30\"\"30\",\"45\"\"45\",\"60\"\"60\",\"90\"\"90\".\n")
    fprintf( formPort "POPUP <CURSSPOKES>\"1\"\"1\",\"2\"\"2\",\"3\"\"3\",\"4\"\"4\".\n\n")
    fprintf( formPort "TILE\n\nGROUP \"Thermal Pad Definition\"\nGLOC 1 1\nGSIZE 30 10\nENDGROUP\n\n")
    fprintf( formPort "TEXT \"Inner Diameter:\"\n TLOC 2 4\n FGROUP \"Thermal Pad Definition\"\n ENDTEXT\n \n")
    fprintf( formPort "FIELD indiam\n FLOC 18 4\n REALFILLIN 9 9\n DECIMAL 4\n FGROUP \"Thermal Pad Definition\"\n ENDFIELD\n \n")
    fprintf( formPort "TEXT \"Outer Diameter:\"\n TLOC 2 6\n FGROUP \"Thermal Pad Definition\"\n ENDTEXT\n \n")
    fprintf( formPort "FIELD outdia\n FLOC 18 6\n REALFILLIN 9 9\n DECIMAL 4\n FGROUP \"Thermal Pad Definition\"\n ENDFIELD\n \n")
    fprintf( formPort "GROUP \"Spoke Definition\"\n GLOC 33 1\n GSIZE 30 10\n ENDGROUP\n \n")
    fprintf( formPort "TEXT \"Spoke Width:\"\n TLOC 34 4\n FGROUP \"Spoke Definition\"\n ENDTEXT\n \n")
    fprintf( formPort "FIELD spkwdth\n FLOC 50 4\n REALFILLIN 9 9\n DECIMAL 4\n FGROUP \"Spoke Definition\"\n ENDFIELD\n \n")
    fprintf( formPort "TEXT \"Num. of spokes\"\n TLOC 34 6\n FGROUP \"Spoke Definition\"\n ENDTEXT\n\n")
    fprintf( formPort "FIELD spknum\n FLOC 50 6\n INTSLIDEBAR 2 2\n MIN 1\n MAX 4\n FGROUP \"Spoke Definition\"\n ENDFIELD\n\n")
    fprintf( formPort "TEXT \"Spoke Angle:\"\n TLOC 34 8\n FGROUP \"Spoke Definition\"\n ENDTEXT\n\n")
    fprintf( formPort "FIELD spkangl\n FLOC 50 8\n ENUMSET 3\n POP \"CURSANGLE\"\n FGROUP \"Spoke Definition\"\n ENDFIELD\n\n")

    fprintf( formPort "GROUP \"Center Dot Option\"\n GLOC 1 12\n GSIZE 62 6\n ENDGROUP\n\n")
    fprintf( formPort "FIELD trgtdt\n FLOC 2 15\n CHECKLIST \"Add Center Dot\"\n FGROUP \"Center Dot Option\"\n ENDFIELD\n\n")
    fprintf( formPort "TEXT \"Dot Diameter\"\n TLOC 34 15\n FGROUP \"Center Dot Option\"\n ENDTEXT\n\n FIELD trgtdia\n FLOC 50 15\n")
    fprintf( formPort "REALFILLIN 9 9\n DECIMAL 4\n FGROUP \"Center Dot Option\"\n ENDFIELD\n\n")

    fprintf( formPort "FIELD okay\n FLOC 3 20\n MENUBUTTON \" OK \" 10 3\n ENDFIELD\n\n")
    fprintf( formPort "FIELD cancel\n FLOC 27 20\n MENUBUTTON \"Cancel\" 10 3\n ENDFIELD\n\n")
    fprintf( formPort "FIELD vhelp\n FLOC 49 20\n MENUBUTTON \" Help \" 10 3\n ENDFIELD\n\n")

    fprintf( formPort "ENDTILE\n ENDFORM\n")
	close( formPort )

	return( tempformfile )

))); defun

⌨️ 快捷键说明

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