尘缘一生 发表于 2025-1-23 21:37:44

插入图块--探讨

本帖最后由 尘缘一生 于 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)
)

bai2000 发表于 2025-1-23 21:49:53

支持一下老陈。。。。。

尘缘一生 发表于 2025-1-26 18:27:22

再次斟酌

;;插入图块----(一级)-----
;;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]
查看完整版本: 插入图块--探讨