乐筑天下

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

代理实体

[复制链接]

10

主题

86

帖子

5

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
126
发表于 2006-8-29 15:45:53 | 显示全部楼层 |阅读模式
我在AUGI编程页面上发布了以下主题。本人'我把它贴在这里,以防任何人都能对一个棘手的问题有所了解;我们有一个永无止境的问题,工程顾问向我们提交文件,其中包含代理对象,通常来自他们购买的用于计算的第三方软件。我们已经尽力说服他们不要给我们发送带有代理的文件,但没有什么能阻止他们。我已经决定,更好的方法可能是删除我们端的对象
我的第一个想法是在VBA中使用选择过滤器来选择代理对象,然后删除它们。问题是找到DXG组码进行选择。我可以'不要让代码工作。在我的测试文件上弹出的代理通知指示170个对象。我能够从这个文件中生成DXF文件,并且;AcDbProxyObject“;出现在DXF文件中170次。这里是#039;作为DXF代码的示例:0ACAD\U PROXY\u对象p>9049991937952555929I我知道这其中的大部分是什么,但我可以#039;t获取获取170个代理的选择集。这里是#039;s my VBA code:Dim Sset As AcadSelectionSet作为整数Dim Codes(0)作为变量Dim CodeValues(0) 设置Sset=ThisDrawing.SelectionSets.Add(“代理”)
Sset。选择acSelectionSetAll、Codes、CodeValues调试。打印“;绘图;“有”&Sset。计数(&A)&引用;“代理实体”
这是正确的方法,还是有其他方法来完成消除代理的任务&引用

回复

使用道具 举报

71

主题

928

帖子

8

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1230
发表于 2006-8-29 16:04:04 | 显示全部楼层
我不确定您得到的是什么代理对象,但由LDT和Civil 3D生成的代理对象可以分解为块,然后再次分解为原生AutoCAD元素。
回复

使用道具 举报

170

主题

1424

帖子

8

银币

顶梁支柱

Rank: 50Rank: 50

铜币
2119
发表于 2006-8-29 16:08:45 | 显示全部楼层
首先,你不能过滤100个组码。改为使用0组。尽管如此,我'我不确定在没有object enabler的情况下,你能用代理对象做什么。我不知道't在这里有一个普通的安装来测试,但您可以尝试代码(0)=0和代码值(0)=*代理*“
当然,如果您要将这些图纸发回给顾问,并且这些图纸取决于这些物体的位置,他们可能会对您删除这些图纸产生异议。
回复

使用道具 举报

71

主题

928

帖子

8

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1230
发表于 2006-8-29 18:28:23 | 显示全部楼层
在副本上试试这个,我'我不太确定'这就是你想要的,当然还有杰夫说的
  1. Sub Apps()
  2.     Dim App As AcadRegisteredApplication
  3.     For Each App In ThisDrawing.RegisteredApplications
  4.         Debug.Print App.Name
  5.         DeleteApplicationXData App.Name
  6.     Next
  7. End Sub
  8. 'Cadvault
  9. Public Function DeleteApplicationXData(strAppName As String) As Boolean
  10.     Dim objSelSet As AcadSelectionSet
  11.     Dim objSelCol As AcadSelectionSets
  12.     Dim objEnt As AcadEntity
  13.     Dim intXData(0) As Integer
  14.     Dim varXData(0) As Variant
  15.     Dim varData(0) As Variant
  16.     Dim intData(0) As Integer
  17.     On Error GoTo Err_Control
  18.     Set objSelSet = ThisDrawing.PickfirstSelectionSet
  19.     intData(0) = 1001
  20.     varData(0) = strAppName
  21.     objSelSet.Select 5, FilterType:=intData, FilterData:=varData
  22.     For Each objEnt In objSelSet
  23.         objEnt.SetXData intData, varData
  24.     Next objEnt
  25.     objSelSet.Delete
  26.     DeleteApplicationXData = True
  27. Exit_Here:
  28.     Exit Function
  29. Err_Control:
  30.     Select Case Err.Number
  31.         Case Else
  32.         MsgBox Err.Description
  33.         Resume Exit_Here
  34.     End Select
  35. End Function

回复

使用道具 举报

7

主题

35

帖子

3

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
63
发表于 2006-8-30 02:11:42 | 显示全部楼层
选择集不会获取所有代理对象。有些人将生活在NOD(命名对象字典)的土地上,因此你也必须处理这些,但VBA可以#039;t来自内存。
回复

使用道具 举报

71

主题

928

帖子

8

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1230
发表于 2006-8-31 07:11:46 | 显示全部楼层
对于来自外部承包商的图纸中的代理对象,我也有类似的问题
最后,我使用Microstation来;“清理”;这些代理对象
然而,我用这个找到了他们:
  1. Option Explicit
  2. Public Sub Find_Proxy()
  3.   Dim objEnt As AcadEntity
  4.   Dim intCnt As Integer
  5.   Dim iLp As Integer
  6.   Dim iDx As Integer
  7.   Dim objDic As AcadDictionary
  8.   Dim tempObj As AcadObject
  9.   For Each objEnt In ThisDrawing.ModelSpace
  10.     If objEnt.HasExtensionDictionary Then
  11.       objEnt.Color = acRed
  12.       Set objDic = objEnt.GetExtensionDictionary
  13.       iLp = objDic.Count
  14.       For iDx = 0 To iLp - 1
  15.         Set tempObj = objDic.Item(iDx)
  16.         tempObj.Delete
  17.       Next iDx
  18.       intCnt = intCnt + objDic.Count
  19.     End If
  20.   Next objEnt
  21.   Debug.Print intCnt
  22. End Sub
回复

使用道具 举报

170

主题

1424

帖子

8

银币

顶梁支柱

Rank: 50Rank: 50

铜币
2119
发表于 2006-8-31 19:19:27 | 显示全部楼层
这对我来说也是一种痛苦。我刚刚试过你的两个's代码,它们不起作用。就像杰夫说的
我刚在脖子上做了双重融合,所以我现在不是百分之百。希望有人能想出一种方法,在没有处理程序的情况下把它们清理干净
有趣的是,它说它删除了Genius MDT的内容,但它仍然存在于图形数据库查看器中。我试着净化,但没有效果
我认为解决方案代码将导出我们想要的,而不是删除我们不需要的;t、 即便如此,谁知道呢?
回复

使用道具 举报

7

主题

35

帖子

3

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
63
发表于 2006-8-31 21:09:53 | 显示全部楼层
这可能是一个很好的起点:
  1. Option Explicit
  2. Sub main()
  3.   scanDictionary ThisDrawing.Dictionaries
  4.   scanTable ThisDrawing.DimStyles
  5.   scanTable ThisDrawing.Layers
  6.   scanTable ThisDrawing.Linetypes
  7.   scanTable ThisDrawing.TextStyles
  8.   scanObjects
  9. End Sub
  10. Sub scanDictionary(ByRef dictionary As Object)
  11.   Dim obj As AcadObject
  12.   For Each obj In dictionary
  13.     If obj.ObjectName Like "AcDbZombie*" Then
  14.       obj.Delete
  15.     Else
  16.       If obj.HasExtensionDictionary Then
  17.         scanDictionary obj.GetExtensionDictionary
  18.       End If
  19.     End If
  20.   Next obj
  21.   Set obj = Nothing
  22. End Sub
  23. Sub scanTable(ByRef table As Object)
  24.   Dim obj As Object
  25.   For Each obj In table
  26.     If obj.HasExtensionDictionary Then
  27.       scanDictionary obj.GetExtensionDictionary
  28.     End If
  29.   Next obj
  30.   Set obj = Nothing
  31. End Sub
  32. Sub scanObjects()
  33.   Dim block As AcadBlock
  34.   For Each block In ThisDrawing.Blocks
  35.     Dim ent As AcadEntity
  36.     For Each ent In block
  37.       If ent.ObjectName = "AcDbZombieEntity" Then
  38.         ent.Delete
  39.       Else
  40.         If ent.HasExtensionDictionary Then
  41.           scanDictionary ent.GetExtensionDictionary
  42.         End If
  43.       End If
  44.     Next ent
  45.     Set ent = Nothing
  46.   Next block
  47.   Set block = Nothing
  48. End Sub
回复

使用道具 举报

71

主题

928

帖子

8

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1230
发表于 2006-9-1 11:12:16 | 显示全部楼层
嘿,Chuck,我给你的代码介绍了一些旧的MDT代理
这里的行:
&quot&nbsp 如果obj.ObjectName类似于;AcDbZombie*”;然后&nbsp 删除“目标”
这抓住了这个名字;AcDbZombieObject“
然后它拒绝删除它,并出现了这个错误(见附件jpg):
对不起,我帮不了你解释为什么它赢了't删除。即使是100%的我也只是你们中的5%
还有,我确实把它跳到了下一行,它返回了:
?obj.HasExtensionDictionaryFalse
回复

使用道具 举报

7

主题

35

帖子

3

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
63
发表于 2006-9-1 12:46:58 | 显示全部楼层
当ObjectARX开发人员设计自定义对象时,他可以决定当他的代码未加载时,该对象的代理上允许哪些操作 显然,MDT开发人员决定禁止删除MDT代理(可能还包括所有其他操作)
我知道这对一些代理来说是个问题,但我认为我们可能会幸运地遇到迈克面临的特定代理 对不起,这是白费力气
我相信有人[编辑]呃……你我的意思是[编辑]提到了导出所有内容,但将代理导出到新绘图 我觉得这是个不错的主意;事实上,我提供的代码可以适应这样做,而不需要太多的努力。
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-7-6 12:55 , Processed in 1.092319 second(s), 72 queries .

© 2020-2025 乐筑天下

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