尘缘一生 发表于 2024-7-19 19:19:50

新开一贴,我的最终:炸属性快

本帖最后由 尘缘一生 于 2024-7-19 19:53 编辑

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


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

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





尘缘一生 发表于 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
)

尘缘一生 发表于 2024-7-20 10:11:16

本帖最后由 尘缘一生 于 2024-7-20 10:28 编辑

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



尘缘一生 发表于 2024-7-19 19:32:32

本帖最后由 尘缘一生 于 2024-7-19 20:27 编辑

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

;原位修改文字对齐方式---(一级)----
(defun text:alignmod (nam mode / p10 p11 ent box b ang)
(setq ent (entget nam) p10 (dxf1 ent 10) b (cadr (textbox ent)) ang (dxf1 ent 50))
(setq ent
    (entmod
      (cond
      ((= (strcase mode) "L") ;左对齐
          (sl:list-substassoc (list (cons 10 p10) '(72 . 0) '(73 . 0)) ent t)
      )
      ((= (strcase mode) "C") ;中对齐
          (sl:list-substassoc (list (cons 11 p10) '(72 . 1) '(73 . 0)) ent t)
      )
      ((= (strcase mode) "R") ;右对齐
          (sl:list-substassoc (list (cons 11 p10) '(72 . 2) '(73 . 0)) ent t)
      )
      ((= (strcase mode) "M") ;中心对齐
          (sl:list-substassoc (list (cons 11 p10) '(72 . 4) '(73 . 0)) ent t)
      )
      ((= (strcase mode) "A") ;对齐
          (setq p11 (polar p10 ang (car b)))
          (sl:list-substassoc (list (cons 10 p10) (cons 11 p11) '(72 . 3) '(73 . 0)) ent t)
      )
      ((= (strcase mode) "F") ;调整
          (setq p11 (polar p10 ang (car b)))
          (sl:list-substassoc (list (cons 10 p10) (cons 11 p11) '(72 . 5) '(73 . 0)) ent t)
      )
      ((= (strcase mode) "BL") ;左下
          (sl:list-substassoc (list (cons 11 p10) '(72 . 0) '(73 . 1)) ent t)
      )
      ((= (strcase mode) "BC") ;中下
          (sl:list-substassoc (list (cons 11 p10) '(72 . 1) '(73 . 1)) ent t)
      )
      ((= (strcase mode) "BR") ;右下
          (sl:list-substassoc (list (cons 11 p10) '(72 . 2) '(73 . 1)) ent t)
      )
      ((= (strcase mode) "ML") ;左中
          (sl:list-substassoc (list (cons 11 p10) '(72 . 0) '(73 . 2)) ent t)
      )
      ((= (strcase mode) "MC") ;正中
          (sl:list-substassoc (list (cons 11 p10) '(72 . 1) '(73 . 2)) ent t)
      )
      ((= (strcase mode) "MR") ;右中
          (sl:list-substassoc (list (cons 11 p10) '(72 . 2) '(73 . 2)) ent t)
      )
      ((= (strcase mode) "tL") ;左上
          (sl:list-substassoc (list (cons 11 p10) '(72 . 0) '(73 . 3)) ent t)
      )
      ((= (strcase mode) "tC") ;中上
          (sl:list-substassoc (list (cons 11 p10) '(72 . 1) '(73 . 3)) ent t)
      )
      ((= (strcase mode) "tR") ;右上
          (sl:list-substassoc (list (cons 11 p10) '(72 . 2) '(73 . 3)) ent t)
      )
      (t ent)
      )
    )
)
(setq ent (entget (dxf1 ent -1)))
(setq p11 (mapcar '+ (mapcar '- p10 (dxf1 ent 10)) (dxf1 ent 11)))
(entmod (sl:list-substassoc (list (cons 10 p10) (cons 11 p11)) ent t))
)


cchessbd 发表于 2024-7-19 19:28:16

不管怎么说,谢谢大佬分享了这么多代码!
:lol:lol:lol 目前我用的是LeeMac的炸块代码,还没遇到不能炸开的。
当然我图里面的块不多,也许没遇到过那么多问题过。

bai2000 发表于 2024-7-19 19:29:25

text:alignmod 是什么函数?

muai2010 发表于 2024-7-19 21:02:19

啥也不说,支持大佬

gble119 发表于 2024-7-19 22:03:17

感谢大佬 支持

_admin 发表于 2024-7-19 22:42:51

感谢大佬,无私奉献

paulpipi 发表于 2024-7-19 22:59:32

感谢无私分享,支持大佬

hubeiwdlue 发表于 2024-7-19 22:59:38

支持陈总,支持陈总

MZ_li 发表于 2024-7-20 08:08:53

大佬无私!大佬牛逼!
页: [1] 2
查看完整版本: 新开一贴,我的最终:炸属性快