chuankay 发表于 2013-6-12 21:38:28

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

二月花开早 发表于 2014-9-29 10:16:30

为什么大家整得这么复杂呢?我都是随便一个命令选中器件,然后用下面这个skill,就可以导出了
axlWritePackageFile(car(axlGetSelSet())->definition)
如果导出的库没有焊盘的那是因为库里没这个焊盘,要把导出的焊盘放到焊盘库路径下,然后再执行一次上面这行skill,就搞定了.

XYX365 发表于 2013-6-18 10:14:24


;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

chuankay 发表于 2013-6-18 12:15:02

XYX365 发表于 2013-6-18 10:14 static/image/common/back.gif
;修正Version 15.7 axlUIMultipleChoice()只有兩個參數 ----- by XYX365
還有一個問題就是"Mechanical" sy ...

您说的对,我还有一个问题,导出来的symbol貌似有时没有焊盘,我用dump libraries这个命令对吗,如何避免dos的弹出窗口呢。

XYX365 发表于 2013-6-18 14:29:44

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)

chuankay 发表于 2013-6-18 15:30:35

XYX365 发表于 2013-6-18 14:29 static/image/common/back.gif
您说的对,我还有一个问题,导出来的symbol貌似有时没有焊盘,我用dump libraries这个命令对吗
=> 還可以 ...

HI    XYX365 :
      非常感谢耐心解答!
      你提供的解决办法可以有效解决问题,axlWritePackageFile()可以代替dump_libraries命令,那么就不存在dos弹窗了。另批处理函数不会出现dos弹窗。

bavol 发表于 2014-1-8 15:21:52

chuankay 发表于 2013-6-18 15:30 static/image/common/back.gif
HI    XYX365 :
      非常感谢耐心解答!
      你提供的解决办法可以有效解决问题,axlWritePackage ...

Hi chuankay,

能把修改后的代码贴出来共享学习吗?

chuankay 发表于 2014-1-8 22:41:57

bavol 发表于 2014-1-8 15:21 static/image/common/back.gif
Hi chuankay,

能把修改后的代码贴出来共享学习吗?

可以 ,导出的器件貌似不是那么理想哦。

chuankay 发表于 2014-1-10 15:52:38

根据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()))
        );
)

bavol 发表于 2014-1-12 15:42:39

chuankay 发表于 2014-1-10 15:52 static/image/common/back.gif
根据XYX365提供的建议,贴上改正后的代码(但导出后还是有问题,看来单纯的导出貌似不能很好的工作,要想别 ...

谢谢,我试试

neo.dong 发表于 2014-5-13 18:22:02

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
查看完整版本: BRD导出单个symbol(大家来挑错版)!