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