BRD导出单个symbol(大家来挑错版)!
网络传的BRD导出单个symbol的skill代码,一时兴起,下午写个类似的,但执行起来感觉怪怪的,大家来挑挑错。;load("dump_lib.il");by chen_ck
;
axlCmdRegister("E_lib" , 'dump_lib ?cmdType "general" )
defun(dump_lib ()
type_symbol = axlUIMultipleChoice("Select a type" '("Package" "Mechanical" ) "Dump Lib")
if(type_symbol == 0
then
lib_db = axlUIDataBrowse( 'PACKAGE_SYMBOL '(RETRIEVE_OBJECT EXAMINE_DATABASE) "Export Libraries" t )
else if(type_symbol == 1
then
lib_db = axlUIDataBrowse( 'BOARD_SYMBOL'(RETRIEVE_OBJECT EXAMINE_DATABASE) "Export Libraries" t )
);else if
);if
pad_db = cadr(lib_db)->pins
ref = car(cadr(lib_db)->instances)->refdes
name_list = nil
foreach(db pad_db
unless(member( db->name name_list)
name_list = tconc(name_list db->name)
);unless
);foreach
foreach(db1 car(name_list)
system(sprintf( nil "dump_libraries -b %s -b %s -b %s %s"ref car(lib_db) db1 axlCurrentDesign()))
);
);defun
为什么大家整得这么复杂呢?我都是随便一个命令选中器件,然后用下面这个skill,就可以导出了
axlWritePackageFile(car(axlGetSelSet())->definition)
如果导出的库没有焊盘的那是因为库里没这个焊盘,要把导出的焊盘放到焊盘库路径下,然后再执行一次上面这行skill,就搞定了.
;load("dump_lib.il")
;by chen_ck
;
axlCmdRegister("E_lib" , 'dump_lib ?cmdType "general" )
defun(dump_lib ()
;修正Version 15.7 axlUIMultipleChoice()只有兩個參數 ----- by XYX365
if(axlVersion( 'version ) > 16.0 then
type_symbol = axlUIMultipleChoice("Select a type" '("Package" "Mechanical" ) "Dump Lib")
else
type_symbol = axlUIMultipleChoice("Select a type" '("Package" "Mechanical" ))
)
if(type_symbol == 0 then
lib_db = axlUIDataBrowse( 'PACKAGE_SYMBOL '(RETRIEVE_OBJECT EXAMINE_DATABASE) "Export Libraries" t )
else if(type_symbol == 1 then
lib_db = axlUIDataBrowse( 'BOARD_SYMBOL'(RETRIEVE_OBJECT EXAMINE_DATABASE) "Export Libraries" t )
);else if
);if
pad_db = cadr(lib_db)->pins
ref = car(cadr(lib_db)->instances)->refdes
name_list = nil
foreach(db pad_db
unless(member( db->name name_list)
name_list = tconc(name_list db->name)
);unless
);foreach
foreach(db1 car(name_list)
system(sprintf( nil "dump_libraries -b %s -b %s -b %s %s"ref car(lib_db) db1 axlCurrentDesign()))
);
);defun
;修正Version 15.7 axlUIMultipleChoice()只有兩個參數 ----- by XYX365
還有一個問題就是"Mechanical" symbol 沒有ref時,代碼會error
XYX365 发表于 2013-6-18 10:14 static/image/common/back.gif
;修正Version 15.7 axlUIMultipleChoice()只有兩個參數 ----- by XYX365
還有一個問題就是"Mechanical" sy ...
您说的对,我还有一个问题,导出来的symbol貌似有时没有焊盘,我用dump libraries这个命令对吗,如何避免dos的弹出窗口呢。 chuankay 发表于 2013-6-18 12:15 static/image/common/back.gif
您说的对,我还有一个问题,导出来的symbol貌似有时没有焊盘,我用dump libraries这个命令对吗,如何避免 ...
您说的对,我还有一个问题,导出来的symbol貌似有时没有焊盘,我用dump libraries这个命令对吗
=> 還可以使用這幾個函數來取資料
axlUIDataBrowse()
axlPadstackToDisk()
axlSelectByName()
axlWritePackageFile()
如何避免dos的弹出窗口呢
=> 可以使用axlRunBatchDBProgram() 函數,以下試試看
tCmd = sprintf( nil "dump_libraries -b %s -b %s -b %s %s" ref car(lib_db) db1 axlCurrentDesign())
axlRunBatchDBProgram("dump_lib" tCmd ?silent t) XYX365 发表于 2013-6-18 14:29 static/image/common/back.gif
您说的对,我还有一个问题,导出来的symbol貌似有时没有焊盘,我用dump libraries这个命令对吗
=> 還可以 ...
HI XYX365 :
非常感谢耐心解答!
你提供的解决办法可以有效解决问题,axlWritePackageFile()可以代替dump_libraries命令,那么就不存在dos弹窗了。另批处理函数不会出现dos弹窗。
chuankay 发表于 2013-6-18 15:30 static/image/common/back.gif
HI XYX365 :
非常感谢耐心解答!
你提供的解决办法可以有效解决问题,axlWritePackage ...
Hi chuankay,
能把修改后的代码贴出来共享学习吗? bavol 发表于 2014-1-8 15:21 static/image/common/back.gif
Hi chuankay,
能把修改后的代码贴出来共享学习吗?
可以 ,导出的器件貌似不是那么理想哦。 根据XYX365提供的建议,贴上改正后的代码(但导出后还是有问题,看来单纯的导出貌似不能很好的工作,要想别的办法了)
;load("dump_lib.il")
;by chen_ck
;
axlCmdRegister("E_lib" , 'dump_lib ?cmdType "general" )
defun(dump_lib ()
if(axlVersion( 'version ) > 16.0 then
type_symbol = axlUIMultipleChoice("Select a type" '("Package" "Mechanical" ) "Dump Lib")
else
type_symbol = axlUIMultipleChoice("Select a type" '("Package" "Mechanical" ))
)
if(type_symbol == 0
then
lib_db = axlUIDataBrowse( 'PACKAGE_SYMBOL '(RETRIEVE_OBJECT EXAMINE_DATABASE) "Export Libraries" t )
else if(type_symbol == 1
then
lib_db = axlUIDataBrowse( 'BOARD_SYMBOL'(RETRIEVE_OBJECT EXAMINE_DATABASE) "Export Libraries" t )
);else if
);if
pad_db = cadr(lib_db)->pins
;ref = car(cadr(lib_db)->instances)->refdes
name_list = nil
foreach(db pad_db
unless(member( db->name name_list)
name_list = tconc(name_list db->name)
);unless
);foreach
if(name_list
then
export_sym(lib_db name_list)
)
);defun
defun( export_sym (lib_db name_list)
axlWritePackageFile(cadr(lib_db))
foreach(db1 car(name_list)
axlPadstackToDisk(db1)
;system(sprintf( nil "dump_libraries -b %s -b %s -b %s %s"ref car(lib_db) db1 axlCurrentDesign()))
);
)
chuankay 发表于 2014-1-10 15:52 static/image/common/back.gif
根据XYX365提供的建议,贴上改正后的代码(但导出后还是有问题,看来单纯的导出貌似不能很好的工作,要想别 ...
谢谢,我试试 bavol 发表于 2014-1-12 15:42 static/image/common/back.gif
谢谢,我试试
axlCmdRegister("lib"'extract_lib)
procedure(extract_lib()
let( (type_symbol lib_db pad_db db name_list )
type_symbol = axlUIMultipleChoice("Select a type" '("Package" "Mechanical" ) "Extract Lib") ;Displays a dialog box
cond(
(type_symbol == 0
lib_db = axlUIDataBrowse( 'PACKAGE_SYMBOL '(RETRIEVE_OBJECT EXAMINE_DATABASE) "Export Lib" t )
)
(type_symbol == 1
lib_db = axlUIDataBrowse( 'BOARD_SYMBOL'(RETRIEVE_OBJECT EXAMINE_DATABASE) "Export Lib" t )
)
);end cond
pad_db = cadr(lib_db)->pins ;Returns the tail of the list->dbid
name_list = nil
foreach(db pad_db
unless(member( db->name name_list) ;exclude same PAD
name_list = tconc(name_list db->name)
);unless
);foreach
if(name_list then
export_sym(lib_db name_list)
)
);end let
);end procedure
;--------------------------------------------------------------------------------------------------------------------------------
defun( export_sym (lib_db name_list)
axlWritePackageFile(cadr(lib_db) "D:\\SPB_Data\\extract_pcb_lib")
foreach(db1 car(name_list)
axlPadstackToDisk(db1)
);end foreach
);end defun
学习临摹了一下,感觉还可以。缺点是只能每次只能导出1个器件。如何能导出多个器件?高手指点。
页:
[1]
2