本帖最后由 Gu_xl 于 2021-9-23 10:36 编辑
程序下载 :
我们在编写AutoCAD应用程序时,经常会使用到符号库,在程序分发时必须将符号库随程序一起分发,一般符号库的图形很多,拷贝分发不是很方便,而且符号库都暴露在任何人面前。为了避免这种情况,将符号在程序中用代码生成是一种很好的办法,但是这么多符号,一句一句用代码来写,好像不太现实!
好了,我这提供一个程序,能够自动将符号转成源代码,成百上千个符号,转瞬间即可全部转为lisp源代码,实现符号库的封装!
请下载附件,加载“图块代码生成器.VLX”调用命令:BlockToLisp.
使用方法:
1、假设符号库文件存放在“c:\符号库\”目录下,新建图形,加载图块代码生成器.VLX,键入命令:blockin,选择“c:\符号库\”目录,将符号库内DWG文件以块全部插入该图形。
2、键入命令:blocktolisp,将刚才插入的图块全部自动生成MakeBlock.Lsp程序文件源码.
3、将MakeBlock.Lsp打包到你的程序文件中,每次插入符号前调用(gxl-Blk-Check 图块名)函数,该函数自动创建图块并返回图块名,如果创建不成功,也返回图块名,即可实现图块的自动定义,如符号库中有符号名为:路灯.dwg文件,则程序自动生成的图块定义函数名为:MakeBlock-路灯 ,块名为:“路灯”,使用如下方法,即可实现图块“路灯”的自动创建和插入:
(command "_insert" (gxl-Blk-Check "路灯") (getpoint "\n图块插入点:") 1 1 0)
gxl-Blk-Check函数代码:
- (defun gxl-Blk-Check (B_Name / curlay B_Name1 gxl-Str-Subst)
- (defun gxl-Str-Subst (new-str pattern string / s)
- (while (/= string
- (setq s (vl-string-subst new-str pattern string))
- )
- (setq string s)
- )
- string
- )
- ;;替换块名称中括号
- (setq B_Name1 (gxl-Str-Subst "]" ")" (gxl-Str-Subst "[" "(" B_Name)))
- (setq curlay (getvar "Clayer"))
- (if (not (TBLSEARCH "block" B_Name))
- (progn
- (if
- (or (= 'USUBR
- (type (eval (read (strcat "MakeBlock-" B_Name1))))
- )
- (= 'SUBR (type (eval (read (strcat "MakeBlock-" B_Name1)))))
- )
- (eval (read (strcat "(MakeBlock-" B_Name1 ")")))
- )
- )
- )
- (setvar "clayer" curlay)
- B_Name
- )
|