明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 557|回复: 2

插入图块--探讨

[复制链接]
发表于 2025-1-23 21:37:44 | 显示全部楼层 |阅读模式
本帖最后由 尘缘一生 于 2025-1-23 22:07 编辑

复制代码
看到一些插入图块的代码,我组织一下子,说实话,有的地方,我还拿不准。在晓东哪边,看到黄大师部分代码而来。
关于炸开不炸开,还有动态块就不炸开等等,我认为也应该代码里面智能做了它。
人为再干预是炸还是不炸,能省去即该省去。当然,以下代码只是插入罢了。

比如:做图库插入部分吧,如果插入的是动态块,属性块,程序应该智能不炸,其他,可以弹出个人为干预,炸OR NO。

  1. ;;插入图块----(一级)-----
  2. ;;Modify by SLdesign V3.0  尘缘一生   QQ:15290049
  3. (defun vla-ins-b (bname pt xscale yscale zscale rot / e en p10 str)
  4.   (defun vla-ins-b1 (bname pt xscale yscale zscale rot / mspace)
  5.     (if (= (getvar "CTAB") "Model") (setq mspace *Model-Space*) (setq mspace *Paper-Space*))
  6.     (vla-InsertBlock mspace (vlax-3d-point pt) bname xscale yscale zscale rot)
  7.   )
  8.   ;;-----------------
  9.   (defun mkattrib (pt str h)
  10.     (entmake
  11.       (list
  12.         '(0 . "ATTRIB")
  13.         '(100 . "AcDbEntity")
  14.         '(100 . "AcDbText")
  15.         (cons 10 pt)
  16.         (cons 40 h)
  17.         (cons 1 str)
  18.         '(100 . "AcDbAttribute")
  19.         (cons 2 str)
  20.         '(70 . 0)
  21.       )
  22.     )   
  23.   )
  24.   ;;-----------------
  25.   (setq pt (trans pt 1 0)) ;若此句不要,会如何不好呢?
  26.   (if (setq e (tblobjname "Block" bname))
  27.     (cond   
  28.       ((equal (assoc 70 (entget e)) '(70 . 0))
  29.         (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)))
  30.       )
  31.       (T
  32.         (entmake (list '(0 . "INSERT") '(66 . 1) (cons 2 bname) (cons 10 pt) (cons 41 xscale) (cons 42 yscale) (cons 43 zscale) (cons 50 rot)))
  33.         (while (setq e (entnext e))
  34.           (setq en (entget e))
  35.           (cond
  36.             ((equal (assoc 0 en) '(0 . "ATTDEF"))  
  37.               (setq p10 (mapcar '+ pt (cdr (assoc 10 en))))
  38.               (setq str (cdr (assoc 1 en)))  
  39.               (mkattrib p10 str (cdr (assoc 40 en)))
  40.             )
  41.           )
  42.         )
  43.         (entmake '((0 . "SEQEND")))
  44.       )
  45.     )
  46.     (vla-ins-b1 bname pt xscale yscale zscale rot)
  47.   )
  48.   (entlast)
  49. )


回复

使用道具 举报

发表于 2025-1-23 21:49:53 | 显示全部楼层
支持一下老陈。。。。。
回复 支持 反对

使用道具 举报

 楼主| 发表于 6 天前 | 显示全部楼层
再次斟酌

  1. ;;插入图块----(一级)-----
  2. ;;Modify by SLdesign V3.0  尘缘一生   QQ:15290049
  3. ;;(vla-ins-b "\\ XYZ\\kuai.dwg" '(0 0 0) 1 1 1 0)
  4. (defun vla-ins-b (bname pt xscale yscale zscale rot / e en p0 mspace nam)
  5.   (defun vla-ins-b1 (bname pt xscale yscale zscale rot)
  6.     (if (= (getvar "CTAB") "Model") (setq mspace *Model-Space*) (setq mspace *Paper-Space*))
  7.     (vla-InsertBlock mspace (vlax-3d-point pt) bname xscale yscale zscale rot)
  8.   )
  9.   ;;-----------------
  10.   (defun mkattrib (pt str h)
  11.     (entmake
  12.       (list
  13.         '(0 . "ATTRIB")
  14.         '(100 . "AcDbEntity")
  15.         '(100 . "AcDbText")
  16.         (cons 10 pt)
  17.         (cons 40 h)
  18.         (cons 1 str)
  19.         '(100 . "AcDbAttribute")
  20.         (cons 2 str)
  21.         '(70 . 0)
  22.       )
  23.     )   
  24.   )
  25.   ;;----------------
  26.   (setq pt (trans pt 1 0) nam (vl-filename-base bname))
  27.   (if (setq e (tblobjname "Block" nam)) ;如果图中已存在改名字图块
  28.     (if (/= (dxf1 e 66) 1)  
  29.       (entmake (list '(0 . "INSERT") (cons 2 nam) (cons 10 pt) (cons 41 xscale) (cons 42 yscale) (cons 43 zscale) (cons 50 rot)))
  30.       ;;;(vla-ins-b1 nam pt xscale yscale zscale rot)
  31.       (progn
  32.         (entmake (list '(0 . "INSERT") '(66 . 1) (cons 2 nam) (cons 10 pt) (cons 41 xscale) (cons 42 yscale) (cons 43 zscale) (cons 50 rot)))
  33.         (while (setq e (entnext e))
  34.           (setq en (entget e))
  35.           (cond
  36.             ((equal (assoc 0 en) '(0 . "ATTDEF"))  
  37.               (setq p0 (mapcar '+ pt (cdr (assoc 10 en))))
  38.               (mkattrib p0 (cdr (assoc 1 en)) (cdr (assoc 40 en)))
  39.             )
  40.           )
  41.         )
  42.         (entmake '((0 . "SEQEND")))
  43.       )
  44.     )
  45.     (vla-ins-b1 bname pt xscale yscale zscale rot)
  46.   )
  47. )


回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2025-2-1 01:51 , Processed in 0.178529 second(s), 22 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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