明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 84326|回复: 233

[【Gu_xl】] 【Gu_xl】原创实用工具:Block 自动转为Lisp源代码

    [复制链接]
发表于 2011-2-12 17:29:17 | 显示全部楼层 |阅读模式
本帖最后由 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函数代码:
  1. (defun gxl-Blk-Check (B_Name / curlay B_Name1 gxl-Str-Subst)
  2.   (defun gxl-Str-Subst (new-str pattern string / s)
  3.     (while (/= string
  4.          (setq s (vl-string-subst new-str pattern string))
  5.      )
  6.       (setq string s)
  7.     )
  8.     string
  9.   )
  10.   ;;替换块名称中括号
  11.   (setq B_Name1 (gxl-Str-Subst "]" ")" (gxl-Str-Subst "[" "(" B_Name)))
  12.   (setq curlay (getvar "Clayer"))
  13.   (if (not (TBLSEARCH "block" B_Name))
  14.     (progn
  15.       (if
  16.   (or (= 'USUBR
  17.          (type (eval (read (strcat "MakeBlock-" B_Name1))))
  18.       )
  19.       (= 'SUBR (type (eval (read (strcat "MakeBlock-" B_Name1)))))
  20.   )
  21.    (eval (read (strcat "(MakeBlock-" B_Name1 ")")))
  22.       )
  23.     )
  24.   )
  25.   (setvar "clayer" curlay)
  26.   B_Name
  27. )






本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x

点评

G版,经过测试,导出的源码在布局空间插入不能实现,插到模型空间去了  发表于 2021-12-16 22:19
这个程序附件怎么要作者授权呀?如何授权?  发表于 2013-3-27 20:43
很好的程序。学习了。  发表于 2012-3-13 14:23
才子啊。  发表于 2011-11-10 22:06
很好!  发表于 2011-2-12 18:42

评分

参与人数 16威望 +1 明经币 +4 金钱 +274 收起 理由
菜鸟初来乍到 + 1 神马都是浮云
flytoday + 1
LLL2011 + 1 G版主的为人,一人之下,万人之上。相信!
zark + 20 楼主太厉害了
alwtyp + 20
jsj_306 + 20
yanshengjiang + 20 濂界▼搴
longer1000 + 6 很深的创意
wyzcm + 12 好程序
chpmould + 30 有创意...

查看全部评分

"觉得好,就打赏"
还没有人打赏,支持一下

本帖被以下淘专辑推荐:

发表于 2021-4-21 16:46:19 | 显示全部楼层
版主能不能提供一个 (foo blockname) --> 返回文件句柄或者路径而不是打开文件的接口。我现在想做一个带块预览的GUI的导入同名块工具。核心是你另外一个贴中的用objectdbx导入同名块函数。刚刚翻这个帖子的时候意识到,要是这个生成的文本是稳定的话(主要是顺序稳定),那文本相同块定义就可以认为没有变化,可是这个vlx封装成了生成txt打开了,无法直接使用,如果能提供一个输入块名生成临时文件并返回临时文件路径,这样后续就可以读取文件比较两个块定义了
发表于 2024-4-26 23:09:30 | 显示全部楼层
stonedesign 发表于 2022-9-10 09:48
是的   希望版主更修改下  支持动态块就好了,完美

想用代码自动做动态块就可以洗洗睡了。
最好的支持一切的方式是块WBLOCK成DWG再转换成文本格式的TXT作为资源文件打包到VLX中。执行时读取资源文件转TXT为DWG再插入。
发表于 2022-9-10 09:48:09 | 显示全部楼层
MUSIC-DIE 发表于 2021-12-16 15:49
对属性块也可以使用,但是动态块就不行了,我试着做了一个拉伸的动态块    生成代码,代码不能生成动态块 ...

是的   希望版主更修改下  支持动态块就好了,完美
发表于 2011-2-12 18:27:21 | 显示全部楼层
本帖最后由 自贡黄明儒 于 2011-2-12 21:59 编辑

版主太有才了!!!我来先尝尝。谢谢啦!!!!
发表于 2011-2-12 21:44:21 | 显示全部楼层
版主太有才了!!!
发表于 2011-2-12 21:47:27 | 显示全部楼层
发表于 2011-2-12 22:46:04 | 显示全部楼层
我也来尝鲜啦
发表于 2011-2-13 11:56:36 | 显示全部楼层
太有才了,太给力了。
发表于 2011-2-13 12:36:04 | 显示全部楼层
谢谢版主的分享。
发表于 2011-2-13 15:47:48 | 显示全部楼层
下载不了
发表于 2011-2-14 12:01:20 | 显示全部楼层
给钱了,又下载不了
发表于 2011-2-14 13:31:50 | 显示全部楼层
版主厉害。这样。我们的图块就不会轻易被借用了。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-12-28 10:21 , Processed in 0.204582 second(s), 31 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表