明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1050|回复: 19

[经验] 新开一贴,我的最终:炸属性快

[复制链接]
发表于 2024-7-19 19:19:50 | 显示全部楼层 |阅读模式
本帖最后由 尘缘一生 于 2024-7-19 19:53 编辑

http://bbs.mjtd.com/thread-190689-1-1.html
上一贴太乱,各种解决办法,做一个最终用的吧,三领现在暂时用,不排除假以时日,还有更精炼的,那么为什么发这个问题呢?
因为三领在这个问题上,代码也换了7,8次了,各种不完美,当然,接到那份图之后呢,竟然炸开丢失,最大可能是我电脑
引起来这个问题,竟然有人说啊,这个问题我不懂!是吧?我只有送你两个字“呵呵”。
深入再一次研究一番,不用迷信洋鬼子,对于茹毛饮血的原始鬼子,你迷信它干什么?BURST吗,很早以前就用的是它,后来,又换了那段冗长的,这都不能解决彻底.....


今早晨哪,我又重新写代码,把这个问题,作一下子,各种代码看看,到底怎么回事!!
实际上,不用那么多的语句,冗长无比,

代码共55句,弄那么多长代码,还不解决问题,不能放之四海而皆准!如果不能,就干脆不作这个事,也绝不允许无效。
对于代码里面的函数,本坛基本都有,看字面模样就是了。
  1. ;;炸属性块bnam----(一级)--------
  2. ;(slblka2t (car (entsel)))
  3. ;;Modify by  SLdesign V3.0  QQ:15290049 2024年7月9号
  4. (defun slblka2t (bnam / e_lst e attnam atdef nam obj str p h ly lt col ly0 lt0 col0 ang ss ss-layer ss-color ss-ltype)
  5.   (if (and (= (dxf1 bnam 0) "INSERT") (= (dxf1 bnam 66) 1) (setq obj (en2obj bnam)) (= (vla-get-hasattributes obj) :vlax-true))
  6.     (progn
  7.       (setq e_lst (sysvar '("QAFLAGS" "CMDECHO")))
  8.       (setvar "CMDECHO" 0)
  9.       (setvar "QAFLAGS" 0)
  10.       (setq ly (dxf1 bnam 8) lt (sl-linetype bnam) col (sl-getcolor bnam))
  11.       (setq attnam (entnext bnam) e (entlast))
  12.       (while (= "ATTRIB" (dxf1 attnam 0))
  13.         (setq p (e9pt attnam 5) str (dxf1 attnam 1) h (dxf1 attnam 40) ang (angle-sharp (dxf1 attnam 50)))
  14.         (if (/= "STAR" (dxf1 attnam 2))
  15.           (progn
  16.             (slmkwz str p (/ h slbl) ang 0.7 (dxf1 attnam 8) $hz (sl-getcolor attnam) "m") ;写文字函数,居中
  17.             (text:alignmod (entlast) "L");文字变左定位系统
  18.             (if (if-color) ;三领变色开关,总设置,注销即可
  19.               (vla-put-color (en2obj (entlast)) (atoi (slsjqs)))
  20.             )
  21.           )
  22.         )
  23.         (setq attnam (entnext attnam))
  24.       )
  25.       (command "explode" bnam) ;对于炸开,原始这句最奏效,其余的集成还不如这句,虽然我最恶心COMMAND
  26.       (setq ss-layer (ssadd) ss-color (ssadd) ss-ltype (ssadd) ss (last_ent e))
  27.       (while (setq nam (ssname ss 0))
  28.         (setq ly0 (dxf1 nam 8) col0 (dxf1 nam 62) lt0 (dxf1 nam 6))
  29.         (if (= (dxf1 nam 0) "ATTDEF" )
  30.           (sl-att-text nam) ;(entdel atdef) 此时此刻呢,还需要思量的
  31.           (cond
  32.             ((and (= ly0 "0")(/= ly0 ly))
  33.               (ssadd nam ss-layer)
  34.             )
  35.             ((and (= col0 "0")(/= col0 col))
  36.               (ssadd nam ss-color)
  37.             )
  38.             ((and (= lt0 "BYBLOCK") (/= lt0 lt))
  39.               (ssadd nam ss-ltype)
  40.             )
  41.           )
  42.         )
  43.         (ssdel nam ss)
  44.       )
  45.       (if (> (sslength ss-layer) 0)
  46.         (command  "_.chprop" ss-layer "" "_LA" ly "") ;改图层罢了,没想集成,实际都可以不这么用,但仅一句,省事。
  47.       )
  48.       (if (> (sslength ss-color) 0)
  49.         (slchcol ss-color col) ;此处集成三领,选择集换颜色系统
  50.       )
  51.       (if (> (sslength ss-ltype) 0)
  52.         (command "_.chprop" ss-ltype "" "_LT" lt "") ;改线型罢了,没想集成,实际都可以不这么用,但仅一句,省事。
  53.       )
  54.       (mapcar 'eval e_lst)
  55.     )
  56.   )
  57.   (princ)
  58. )






评分

参与人数 2明经币 +2 收起 理由
USER2128 + 1 很给力!
tranque + 1 很给力!

查看全部评分

"觉得好,就打赏"
还没有人打赏,支持一下
 楼主| 发表于 2024-7-22 16:15:22 | 显示全部楼层
moshouhot 发表于 2024-7-22 16:07
老哥,sl:list-substassoc函数能不能发一下?

;根据 lstSub 子表中的首元素 替换 lstSource 中对应表元-----(一级)--------
;lstSub需要替换的列表   lstSource源列表   bAdd是否向源列表中追加 原本没有的元素
(defun sl:list-substassoc (lstSub        lstSource        bAdd / e e1)
        (foreach e lstSub
                (if (setq e1 (assoc (car e) lstSource))
                        (setq lstSource (subst e (assoc (car e) lstSource) lstSource))
                        (if bAdd (setq lstSource (append lstSource (list e))))
                )
        )
        lstSource
)

评分

参与人数 2明经币 +2 金钱 +5 收起 理由
bai2000 + 1
moshouhot + 1 + 5 赞一个!

查看全部评分

回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2024-7-20 10:11:16 | 显示全部楼层
本帖最后由 尘缘一生 于 2024-7-20 10:28 编辑

不客气,对于块来说呢,光炸这个功能,就是个很复杂的,因为很多情况。
要做到任何块,加密的也好,都万能炸开,本坛并没有谁给出集成源码,我发的也是一部分。
大致来说,有这么些方面。



本帖子中包含更多资源

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

x
回复 支持 0 反对 1

使用道具 举报

 楼主| 发表于 2024-7-19 19:32:32 | 显示全部楼层
本帖最后由 尘缘一生 于 2024-7-19 20:27 编辑
bai2000 发表于 2024-7-19 19:29
text:alignmod 是什么函数?

本坛有的,就是啊,原位改文字定位方式函数,因为三领是左定位系统,可以直接注销这一句。
对于文字定位方式:历史演变是这样的:最早啊,PKPM,就用的双穴点定位,那么中科院为什么这么用?哪当然好处是大大的好。可以作到系统对文字
准确定位,为什么后来左定位的多了?哪都因为天正的出现,中科院根本不在乎建筑界的发展的!所以才有了,当你打开别人的图纸,总说明部分,由于字库的不同,右侧总是参差不齐的毛病,没办法,这都是历史演变造成的。好在啊,这个问题早已不是个问题了。那么三领的开发呢,在前10年,是紧跟PKPM系统的。后来又出现了,装潢,室内....这些行业,更乱了。为了适应,才改为了全部左定位。

  1. ;原位修改文字对齐方式---(一级)----
  2. (defun text:alignmod (nam mode / p10 p11 ent box b ang)
  3.   (setq ent (entget nam) p10 (dxf1 ent 10) b (cadr (textbox ent)) ang (dxf1 ent 50))
  4.   (setq ent
  5.     (entmod
  6.       (cond
  7.         ((= (strcase mode) "L") ;左对齐
  8.           (sl:list-substassoc (list (cons 10 p10) '(72 . 0) '(73 . 0)) ent t)
  9.         )
  10.         ((= (strcase mode) "C") ;中对齐
  11.           (sl:list-substassoc (list (cons 11 p10) '(72 . 1) '(73 . 0)) ent t)
  12.         )
  13.         ((= (strcase mode) "R") ;右对齐
  14.           (sl:list-substassoc (list (cons 11 p10) '(72 . 2) '(73 . 0)) ent t)
  15.         )
  16.         ((= (strcase mode) "M") ;中心对齐
  17.           (sl:list-substassoc (list (cons 11 p10) '(72 . 4) '(73 . 0)) ent t)
  18.         )
  19.         ((= (strcase mode) "A") ;对齐
  20.           (setq p11 (polar p10 ang (car b)))
  21.           (sl:list-substassoc (list (cons 10 p10) (cons 11 p11) '(72 . 3) '(73 . 0)) ent t)
  22.         )
  23.         ((= (strcase mode) "F") ;调整
  24.           (setq p11 (polar p10 ang (car b)))
  25.           (sl:list-substassoc (list (cons 10 p10) (cons 11 p11) '(72 . 5) '(73 . 0)) ent t)
  26.         )
  27.         ((= (strcase mode) "BL") ;左下
  28.           (sl:list-substassoc (list (cons 11 p10) '(72 . 0) '(73 . 1)) ent t)
  29.         )
  30.         ((= (strcase mode) "BC") ;中下
  31.           (sl:list-substassoc (list (cons 11 p10) '(72 . 1) '(73 . 1)) ent t)
  32.         )
  33.         ((= (strcase mode) "BR") ;右下
  34.           (sl:list-substassoc (list (cons 11 p10) '(72 . 2) '(73 . 1)) ent t)
  35.         )
  36.         ((= (strcase mode) "ML") ;左中
  37.           (sl:list-substassoc (list (cons 11 p10) '(72 . 0) '(73 . 2)) ent t)
  38.         )
  39.         ((= (strcase mode) "MC") ;正中
  40.           (sl:list-substassoc (list (cons 11 p10) '(72 . 1) '(73 . 2)) ent t)
  41.         )
  42.         ((= (strcase mode) "MR") ;右中
  43.           (sl:list-substassoc (list (cons 11 p10) '(72 . 2) '(73 . 2)) ent t)
  44.         )
  45.         ((= (strcase mode) "tL") ;左上
  46.           (sl:list-substassoc (list (cons 11 p10) '(72 . 0) '(73 . 3)) ent t)
  47.         )
  48.         ((= (strcase mode) "tC") ;中上
  49.           (sl:list-substassoc (list (cons 11 p10) '(72 . 1) '(73 . 3)) ent t)
  50.         )
  51.         ((= (strcase mode) "tR") ;右上
  52.           (sl:list-substassoc (list (cons 11 p10) '(72 . 2) '(73 . 3)) ent t)
  53.         )
  54.         (t ent)
  55.       )
  56.     )
  57.   )
  58.   (setq ent (entget (dxf1 ent -1)))
  59.   (setq p11 (mapcar '+ (mapcar '- p10 (dxf1 ent 10)) (dxf1 ent 11)))
  60.   (entmod (sl:list-substassoc (list (cons 10 p10) (cons 11 p11)) ent t))
  61. )



发表于 2024-7-19 19:28:16 | 显示全部楼层
不管怎么说,谢谢大佬分享了这么多代码!
目前我用的是LeeMac的炸块代码,还没遇到不能炸开的。
当然我图里面的块不多,也许没遇到过那么多问题过。

点评

lee mac 代码不少,最大好处是:兼容,外国人写的太长,各种考虑,中国人就思路不一样,文化不同,作程序也不一样。  发表于 2024-7-19 19:40
发表于 2024-7-19 19:29:25 | 显示全部楼层
text:alignmod 是什么函数?
发表于 2024-7-19 21:02:19 | 显示全部楼层
啥也不说,支持大佬
发表于 2024-7-19 22:03:17 | 显示全部楼层
感谢大佬 支持
发表于 2024-7-19 22:42:51 | 显示全部楼层
感谢大佬,无私奉献
发表于 2024-7-19 22:59:32 | 显示全部楼层
感谢无私分享,支持大佬
发表于 2024-7-19 22:59:38 来自手机 | 显示全部楼层
支持陈总,支持陈总
发表于 2024-7-20 08:08:53 | 显示全部楼层
大佬无私!大佬牛逼!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-11-25 11:59 , Processed in 0.172274 second(s), 29 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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