乐筑天下

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

[编程交流] 删除图形的一部分-VBA-

[复制链接]

4

主题

10

帖子

6

银币

初来乍到

Rank: 1

铜币
20
发表于 2022-7-6 14:14:06 | 显示全部楼层 |阅读模式
你好
 
我想知道如何擦除图形的一部分(通过VBA)。
 
要删除的区域在每个图形上始终相同
我想通过windows选择(点1:0,0,0点2:10,15,0)
 
我尝试使用AcSelectionSetWindow,但这不起作用
 
谢谢
 
ps:这是我测试的。我知道垃圾箱里有几行代码,但我保留了所有经过测试的代码行
 
  1. Private Sub test()
  2.    Dim ObjSelection As AcadSelectionSet
  3.    Dim ObjetOut As AcadEntity
  4.    Dim Point1(0 To 2) As Double
  5.    Dim Point2(0 To 2) As Double
  6.    Dim Point3(0 To 5) As Double
  7.    'Data
  8.    Point1(0) = 0#
  9.    Point1(1) = 0#
  10.    Point1(2) = 0#
  11.    Point2(0) = 10#
  12.    Point2(1) = 15#
  13.    Point2(2) = 0#
  14.    Point3(0) = 0#
  15.    Point3(1) = 0#
  16.    Point3(2) = 0#
  17.    Point3(3) = 10#
  18.    Point3(4) = 15#
  19.    Point3(5) = 0#
  20.     On Error Resume Next
  21.     'set ObjSelection = ThisDrawing.PaperSpace.Item
  22.    '. SelectionSets.Item.SelectByPolygon(acSelectionSetWindowPolygon, Point3)
  23.    ObjSelection.Clear
  24.    Set ObjetOut = ObjSelection.Select acSelectionSetWindow, Point1, Point2
  25.    'ByPolygon acSelectionSetWindow, Point3
  26.    'ObjSelection.Select acSelectionSetWindow, Point1, Point2
  27.     'Set ObjSelection = SelectionSets.Item
  28. '  objSelection.Clear
  29. '   Set objObjet = objSelection
  30. '   objSelection.AddItems objObjets
  31. '  objSelection.Erase
  32.    'objSelection.SelectByPolygon(acSelectionSetWindowPolygon, 0,0,0 10,15,0)
  33.    'Set objselectionset = selectionsetscollection.Add(strCartouche)
  34. End Sub
回复

使用道具 举报

10

主题

973

帖子

909

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
118
发表于 2022-7-6 14:23:51 | 显示全部楼层
试试这个。
 
  1. Private Sub test()
  2.    Dim ObjSelection As AcadSelectionSet
  3.    Dim ObjetOut As AcadEntity
  4.    Dim Point1(0 To 2) As Double
  5.    Dim Point2(0 To 2) As Double
  6.    Dim Point3(0 To 5) As Double
  7.    'Data
  8.    Point1(0) = 0#
  9.    Point1(1) = 0#
  10.    Point1(2) = 0#
  11.    Point2(0) = 10#
  12.    Point2(1) = 15#
  13.    Point2(2) = 0#
  14.      On Error Resume Next
  15.      ThisDrawing.SelectionSets.Item("TempSSet").Delete
  16.      On Error GoTo 0
  17.      
  18.      Set ObjSelection = ThisDrawing.SelectionSets.Add("TempSSet")
  19.    ObjSelection.Select acSelectionSetWindow, Point1, Point2
  20.    
  21.    For Each ObjetOut In ObjSelection
  22.      ObjetOut.Delete
  23.    Next
  24.   ThisDrawing.Regen acAllViewports
  25. End Sub
回复

使用道具 举报

4

主题

10

帖子

6

银币

初来乍到

Rank: 1

铜币
20
发表于 2022-7-6 14:36:57 | 显示全部楼层
谢谢
这非常有效。
 
我还有一个问题,什么是“TempSSet”?
回复

使用道具 举报

10

主题

973

帖子

909

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
118
发表于 2022-7-6 14:40:18 | 显示全部楼层
从VBA实现时,选择集需要有名称。如果VBA例程尝试创建已存在的命名选择集和/或尝试删除不存在的命名选择集,该例程将崩溃。有几种方法可以解决这些问题;我使用的方法(两个“On Error”之间的语句)是最基本的。
回复

使用道具 举报

4

主题

10

帖子

6

银币

初来乍到

Rank: 1

铜币
20
发表于 2022-7-6 14:48:38 | 显示全部楼层
谢谢你的提示。此外,感谢您抽出时间回答我们的问题
回复

使用道具 举报

4

主题

10

帖子

6

银币

初来乍到

Rank: 1

铜币
20
发表于 2022-7-6 14:59:14 | 显示全部楼层
你好,又是我!
 
我忘了,我必须保留一些信息。此信息不在每个图形的同一层上。
所以可以擦除图形的一部分,但只能在一层上,在擦除实体之前进行“过滤”?
 
谢谢
回复

使用道具 举报

10

主题

973

帖子

909

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
118
发表于 2022-7-6 15:10:36 | 显示全部楼层
是的,所有的选择方法(虽然不是Thisdrawing.Utility.GetEntity)都支持过滤。
 
此线程具有和使用按层过滤的选择的示例。该示例采用acSelectionSetAll模式,但与acSelectionSetWindow同样适用。
 
http://www.cadtutor.net/forum/showthread.php?t=38124
回复

使用道具 举报

4

主题

10

帖子

6

银币

初来乍到

Rank: 1

铜币
20
发表于 2022-7-6 15:17:18 | 显示全部楼层
你的快!
谢谢你的链接,我没有看到这个脚印
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-5 03:04 , Processed in 0.324565 second(s), 68 queries .

© 2020-2025 乐筑天下

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