明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 2642|回复: 10

请教如何修改块定义

[复制链接]
发表于 2012-5-2 18:32:08 | 显示全部楼层 |阅读模式
本帖最后由 gmstcn 于 2012-5-3 12:17 编辑

比如原来块里面是一个圆,现在想替换成一个矩形。
我这ENTMAKE和ENTGET函数不能用,有其他方法么(VLA-什么的)?

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
目的是通过修改块定义将以下DEMO_A.DWG处理成DEMO_B.DWG





本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x
发表于 2012-5-2 18:40:50 | 显示全部楼层
最简单的方法,用command方法重定义block
发表于 2012-5-2 20:29:40 | 显示全部楼层
vla函数处理教方便,但楼主的问题需要描述清楚,最好提供测试实例
 楼主| 发表于 2012-5-3 12:17:48 | 显示全部楼层
楼上请见顶楼更新~
 楼主| 发表于 2012-5-4 17:10:48 | 显示全部楼层
这是我写的代码~~关键地方不知道怎么处理了

  1. (defun START();块处理后
  2. (setq ss (ssget "x"))
  3. (setq maxidx (sslength ss) idx 1)
  4.   (while
  5.     (<= idx maxidx)
  6.     (setq ename (ssname ss (- idx 1)))
  7.     (setq obj (vlax-ename->vla-object ename))
  8.     (if  (= (vlax-get-property obj "ObjectName") "AcDbBlockReference") (搞块 obj))
  9.     (setq idx (1+ idx))
  10.   )
  11. (princ)
  12. )
  13. (defun 搞块(insertobj);//对不同的块,需做不同的修改
  14.   (princ "B---->")(princ insertobj)
  15.   (setq blockname (vlax-get-property insertobj "Name"))
  16.   (setq blocks (vla-get-blocks (vla-get-activedocument (vlax-get-acad-object))))
  17.   (setq blockobj (vlax-ename->vla-object (tblobjname "BLOCK" blockname)))
  18.   ;;;;;;;;;;;;;;;;;;;;;;
  19.   (vlax-for x (vla-item blocks blockname)
  20.     (if  (= (vlax-get-property obj "ObjectName") "CIRCLE") (vla-delete obj));删除圆
  21.     (if  (= (vlax-get-property obj "ObjectName") "HATCH") (vla-delete obj));删除圆的填充
  22.   )
  23.   ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  24.   ;删完了,这里怎么添加矩形或者直线……?用Vla函数的
  25.   ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  26. )

 楼主| 发表于 2012-5-7 17:22:24 | 显示全部楼层
沉的快啊
求指点
我没理解BLOCKS和BLOCK的说明
不知道怎么得到块定义的OBJ
 楼主| 发表于 2012-5-8 13:46:36 | 显示全部楼层
求指点[em0]
发表于 2012-5-8 18:02:36 | 显示全部楼层
本帖最后由 caoyin 于 2012-5-8 18:04 编辑

BLOCKS----块定义的集合
BLOCK------具体到某个实际的块定义,例如文件DEMO_B.dwg中的块A(不是在屏幕实际显示的INSERT)
INSERT-----块的插入实例(屏幕实际显示的INSERT)

;;;
(setq BLOCKS (vla-get-blocks(vla-get-ActiveDocument (vlax-get-acad-object))))
(setq BLOCK (vla-item BLOCKS "A"))
(vlax-for OBJ BLOCK
;;我这里举例把块A中的直线改为红色,请按照自己要求修改
(if (=(vla-get-objectName OBJ)"AcDbLine")
   (vla-put-color OBJ 1)
)
)
;;REGEN一下看修改结果
 楼主| 发表于 2012-5-9 15:07:49 | 显示全部楼层
版大~块定义里面的修改、删除我能做到,但是不知道怎么用vla添加新图元
(VLA-ADDLINE BLOCK PT1 PT2)??

点评

(vlax-3D-point point)  发表于 2012-5-9 15:51
发表于 2012-5-9 16:05:52 | 显示全部楼层
不用编程,直接用图块的在为编辑
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2025-7-23 12:03 , Processed in 0.176682 second(s), 27 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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