插入图块--探讨
本帖最后由 尘缘一生 于 2025-1-23 22:07 编辑看到一些插入图块的代码,我组织一下子,说实话,有的地方,我还拿不准。在晓东哪边,看到黄大师部分代码而来。
关于炸开不炸开,还有动态块就不炸开等等,我认为也应该代码里面智能做了它。
人为再干预是炸还是不炸,能省去即该省去。当然,以下代码只是插入罢了。
比如:做图库插入部分吧,如果插入的是动态块,属性块,程序应该智能不炸,其他,可以弹出个人为干预,炸OR NO。
;;插入图块----(一级)-----
;;Modify by SLdesign V3.0尘缘一生 QQ:15290049
(defun vla-ins-b (bname pt xscale yscale zscale rot / e en p10 str)
(defun vla-ins-b1 (bname pt xscale yscale zscale rot / mspace)
(if (= (getvar "CTAB") "Model") (setq mspace *Model-Space*) (setq mspace *Paper-Space*))
(vla-InsertBlock mspace (vlax-3d-point pt) bname xscale yscale zscale rot)
)
;;-----------------
(defun mkattrib (pt str h)
(entmake
(list
'(0 . "ATTRIB")
'(100 . "AcDbEntity")
'(100 . "AcDbText")
(cons 10 pt)
(cons 40 h)
(cons 1 str)
'(100 . "AcDbAttribute")
(cons 2 str)
'(70 . 0)
)
)
)
;;-----------------
(setq pt (trans pt 1 0)) ;若此句不要,会如何不好呢?
(if (setq e (tblobjname "Block" bname))
(cond
((equal (assoc 70 (entget e)) '(70 . 0))
(entmake (list '(0 . "INSERT") (cons 2 bname) (cons 10 pt) (cons 10 pt) (cons 41 xscale) (cons 42 yscale) (cons 43 zscale) (cons 50 rot)))
)
(T
(entmake (list '(0 . "INSERT") '(66 . 1) (cons 2 bname) (cons 10 pt) (cons 41 xscale) (cons 42 yscale) (cons 43 zscale) (cons 50 rot)))
(while (setq e (entnext e))
(setq en (entget e))
(cond
((equal (assoc 0 en) '(0 . "ATTDEF"))
(setq p10 (mapcar '+ pt (cdr (assoc 10 en))))
(setq str (cdr (assoc 1 en)))
(mkattrib p10 str (cdr (assoc 40 en)))
)
)
)
(entmake '((0 . "SEQEND")))
)
)
(vla-ins-b1 bname pt xscale yscale zscale rot)
)
(entlast)
)
支持一下老陈。。。。。 再次斟酌
;;插入图块----(一级)-----
;;Modify by SLdesign V3.0尘缘一生 QQ:15290049
;;(vla-ins-b "\\ XYZ\\kuai.dwg" '(0 0 0) 1 1 1 0)
(defun vla-ins-b (bname pt xscale yscale zscale rot / e en p0 mspace nam)
(defun vla-ins-b1 (bname pt xscale yscale zscale rot)
(if (= (getvar "CTAB") "Model") (setq mspace *Model-Space*) (setq mspace *Paper-Space*))
(vla-InsertBlock mspace (vlax-3d-point pt) bname xscale yscale zscale rot)
)
;;-----------------
(defun mkattrib (pt str h)
(entmake
(list
'(0 . "ATTRIB")
'(100 . "AcDbEntity")
'(100 . "AcDbText")
(cons 10 pt)
(cons 40 h)
(cons 1 str)
'(100 . "AcDbAttribute")
(cons 2 str)
'(70 . 0)
)
)
)
;;----------------
(setq pt (trans pt 1 0) nam (vl-filename-base bname))
(if (setq e (tblobjname "Block" nam)) ;如果图中已存在改名字图块
(if (/= (dxf1 e 66) 1)
(entmake (list '(0 . "INSERT") (cons 2 nam) (cons 10 pt) (cons 41 xscale) (cons 42 yscale) (cons 43 zscale) (cons 50 rot)))
;;;(vla-ins-b1 nam pt xscale yscale zscale rot)
(progn
(entmake (list '(0 . "INSERT") '(66 . 1) (cons 2 nam) (cons 10 pt) (cons 41 xscale) (cons 42 yscale) (cons 43 zscale) (cons 50 rot)))
(while (setq e (entnext e))
(setq en (entget e))
(cond
((equal (assoc 0 en) '(0 . "ATTDEF"))
(setq p0 (mapcar '+ pt (cdr (assoc 10 en))))
(mkattrib p0 (cdr (assoc 1 en)) (cdr (assoc 40 en)))
)
)
)
(entmake '((0 . "SEQEND")))
)
)
(vla-ins-b1 bname pt xscale yscale zscale rot)
)
)
页:
[1]