乐筑天下

搜索
欢迎各位开发者和用户入驻本平台 尊重版权,从我做起,拒绝盗版,拒绝倒卖 签到、发布资源、邀请好友注册,可以获得银币 请注意保管好自己的密码,避免账户资金被盗
查看: 274|回复: 10

如何通过vba删除块中的某些对象?

[复制链接]

1

主题

4

帖子

1

银币

初来乍到

Rank: 1

铜币
8
发表于 2007-8-19 12:32:00 | 显示全部楼层 |阅读模式
我想通过vba,在不炸开块的前提下,直接删除块定义中的某些对象,以达到修改块的目的。
另外,能否在不炸开块的前提下获得块中各个对象的相关参数?比如,块中某个圆的半径等。
回复

使用道具 举报

16

主题

129

帖子

7

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
196
发表于 2018-3-7 10:35:00 | 显示全部楼层

请问怎么用VBA把选择集中的对象添加到已经建好的块中?请高手赐教!!!
回复

使用道具 举报

1

主题

4

帖子

1

银币

初来乍到

Rank: 1

铜币
8
发表于 2007-8-19 15:52:00 | 显示全部楼层
麻烦各位大侠们指点一二!
回复

使用道具 举报

11

主题

326

帖子

9

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
370
发表于 2007-8-20 09:33:00 | 显示全部楼层
我也想知道,但也许不可能。
在块中增加一个图元很容易,但删除...我没有找到简单的方法,
但在CAD的LSP说明中有一句,可以将想要去掉的实体去掉后,再重新定义这个块,以达到删除图元的目的。
在LISP中,用Nentsel取得块中的图元名,再将块中的所有图元名与之比例,如果相同则过滤之。再重新定义这个块。
在VBA中我却也不知道怎么做。
回复

使用道具 举报

11

主题

326

帖子

9

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
370
发表于 2007-8-20 10:03:00 | 显示全部楼层
刚刚找了找VBA的帮助,找到了个方法GETSUBENTY,我就知道,可以做到了,以下是源程序。
Sub delsubent()
    ' This example prompts the user to select on object on the screen with a mouse click,
    ' and returns some information about the selected object.
   
    Dim Object As AcadEntity
    Dim PickedPoint As Variant, TransMatrix As Variant, ContextData As Variant
    Dim HasContextData As String
   
    On Error GoTo NOT_ENTITY
        Err.Clear
TRYAGAIN:
        
   ' MsgBox "Use the mouse to click on an object in the current drawing after dismissing this dialog box."
        
    ' Get information about selected object
    ThisDrawing.Utility.GetSubEntity Object, PickedPoint, TransMatrix, ContextData
   
    ' Process and display selected object properties
If VarType(ContextData)  vbEmpty Then
      
   Object.Delete
   ThisDrawing.Regen acActiveViewport
End If
GoTo TRYAGAIN
   
NOT_ENTITY:
  
End Sub
回复

使用道具 举报

1

主题

4

帖子

1

银币

初来乍到

Rank: 1

铜币
8
发表于 2007-8-20 11:05:00 | 显示全部楼层
非常感谢英雄无敌!不过GetSubEntity好像只能通过鼠标选择,如果我想让程序后台操作,该如何实现呢?
比如,我想把一个块中的直线全部替换成以各直线为直径的圆。
回复

使用道具 举报

11

主题

326

帖子

9

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
370
发表于 2007-8-20 11:49:00 | 显示全部楼层
用VBA我也不知道,但可以结合VLISP,用(ssget'((0 . "insert")))取得所有的块,但分别取得每个块中的子图元名,如果图元类型是直线,则调用VBA将其删除,然后用ADD方法增加。
回复

使用道具 举报

158

主题

2315

帖子

10

银币

顶梁支柱

Rank: 50Rank: 50

铜币
2951
发表于 2007-8-20 12:15:00 | 显示全部楼层
图纸除了模型空间、图纸空间外,还有一个是块空间,也就是一个块定义有一个块空间。你可以和操作模型空间一样来操作块空间,但选择就没有那么自由了,只能使用GetSubEntity方法来选择。
我们在图上所见到的是块参照,通过块参照的块名能够找到其块定义的块空间,再通过块空间来操作块。操作后,记住图纸要重新生成一下就可以了。
回复

使用道具 举报

11

主题

326

帖子

9

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
370
发表于 2007-8-20 16:15:00 | 显示全部楼层
用VBA不知道怎么做,主要是不知道怎么取得块内的子图元,我用VLISP编写了一个,不知对你是否有帮助。
请点击此处下载

请先注册会员后在进行下载

已注册会员,请先登录后下载

文件名称:3khbmgyluqn.LSP 
下载次数:0  文件大小:1.6 KB  售价:2银币 [记录]
下载权限: 不限 以上或 Vip会员   [开通Vip]   [签到领银币]  [免费赚银币]

回复

使用道具 举报

1

主题

4

帖子

1

银币

初来乍到

Rank: 1

铜币
8
发表于 2007-8-21 14:46:00 | 显示全部楼层
非常感谢英雄无敌和管理员同志!
看来用VBA,还是无法提取块中的各个对象(子图元)的相关参数。
我对lisp不太懂,而且cad的vba开发也是刚开始摸索,所以看来只能把块参照删除(保存块
参照位置),然后炸开原块,获得各个参数,修改完(包括删除)炸开对象后,再用与原块相同的块参数(如块名、插
入点等)重新定义块,并在原来各个块参照的位置插入新块。这样是可以实现的,只是觉得绕的路是否太多,所以想
知道是否能够得到块中各个对象的参数,比如是否存在某些数据库中;既然连管理员都说不行,看来是真的不行了。
不过还是【衷心】的感谢英雄无敌,和你的lisp程序,等我研究研究lisp和ARX,我想也许能找到更好的办法。
当然也非常感谢管理员同志权威的回答!
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

QQ|关于我们|小黑屋|乐筑天下 繁体中文

GMT+8, 2024-11-22 09:54 , Processed in 0.169101 second(s), 77 queries .

© 2020-2024 乐筑天下

联系客服 关注微信 帮助中心 下载APP 返回顶部 返回列表