乐筑天下

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

边界内的修剪和删除

[复制链接]

6

主题

23

帖子

14

银币

初来乍到

Rank: 1

铜币
34
发表于 2012-1-27 07:52:07 | 显示全部楼层 |阅读模式
大家好,
我是这个论坛的新成员,这是我的第一篇帖子..希望我能从你们那里得到更好的回复..我的任务来了...
我只需要编写一个VBA代码,该代码将修剪与用户选择的矩形边界相交的线条。边界外的所有其他对象或线/Pline将被删除,穿过边界的线将被修剪掉。与“EXTRIM”命令完全相同。我需要通过VBA或LISP来完成..请帮我一把.....
预先感谢............

本帖以下内容被隐藏保护;需要你回复后,才能看到!

游客,如果您要查看本帖隐藏内容请回复
回复

使用道具 举报

86

主题

744

帖子

6

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1092
发表于 2012-1-27 08:24:09 | 显示全部楼层
在LSP中应该很容易做到(因为不支持VBA)。
您已经有EXTRIM,所以现在另一个缺失的部分正在清除边界外的所有内容。很容易做到。只需启动ERASE命令,然后键入'EXW(包括撇号),然后指定一个窗口的两个角(您的边界),然后*噗!*边界外的所有内容都被删除。
回复

使用道具 举报

6

主题

23

帖子

14

银币

初来乍到

Rank: 1

铜币
34
发表于 2012-1-27 23:08:54 | 显示全部楼层
非常感谢...你能提供LISP代码吗...我不太了解LISP...在VBA中工作...所以...............谢谢......
回复

使用道具 举报

3

主题

33

帖子

1

银币

初来乍到

Rank: 1

铜币
45
发表于 2012-1-30 12:41:26 | 显示全部楼层
我有一些旧代码,你可以看看,那是VBA。它将删除所有未选定的实体
  1. Public Sub EraseUnselected()
  2. Dim objSelSet As AcadSelectionSet
  3. Dim objUnSelectedSet As AcadSelectionSet
  4. Dim objEnts() As AcadEntity
  5. Dim lngCnt As Long
  6. On Error GoTo Err_Control
  7. Set objSelSet = ThisDrawing.PickfirstSelectionSet
  8. Set objUnSelectedSet = ThisDrawing.SelectionSets.Add("Unselected")
  9. objSelSet.SelectOnScreen
  10. objUnSelectedSet.Select acSelectionSetAll
  11. ReDim objEnts(0 To objSelSet.Count - 1) As AcadEntity
  12. For lngCnt = 0 To objSelSet.Count - 1
  13.       Set objEnts(lngCnt) = objSelSet(lngCnt)
  14. Next lngCnt
  15. objUnSelectedSet.RemoveItems objEnts
  16. objUnSelectedSet.Erase
  17. objSelSet.Delete
  18. objUnSelectedSet.Delete
  19.   
  20. Exit_Here:
  21. Exit Sub
  22. Err_Control:
  23. Select Case Err.Number
  24.       Case -2145320851
  25.            For lngCnt = 0 To ThisDrawing.SelectionSets.Count - 1
  26.                 If ThisDrawing.SelectionSets.Item(lngCnt).Name = "Unselected" Then
  27.                      Set objUnSelectedSet = ThisDrawing.SelectionSets.Item(lngCnt)
  28.                      Resume Next
  29.                 Else
  30.                      Resume Exit_Here
  31.                 End If
  32.            Next
  33.       Case Else
  34.            InputBox Err.Description, "Erase Unselected", Err.Number
  35.            Resume Exit_Here
  36. End Select
  37. End Sub

回复

使用道具 举报

6

主题

23

帖子

14

银币

初来乍到

Rank: 1

铜币
34
发表于 2012-1-31 06:30:52 | 显示全部楼层
谢谢你的代码chuckhardin...让我用这个敲我的头,我会回来的...
回复

使用道具 举报

6

主题

23

帖子

14

银币

初来乍到

Rank: 1

铜币
34
发表于 2012-2-1 01:24:43 | 显示全部楼层
我试着用你的代码来完成我的任务...但是需要选择不应该删除的对象...所有其他的都将被删除...这是我尝试过的...
ThisDrawing.SendCommand"_extrim"&vbCr
这将做我想要的wat的主要任务,保留修剪和外部边界对象...我不想删除所有其他的... ur代码需要用户选择要保留的对象...任何更多的建议都会很有帮助...谢谢...
回复

使用道具 举报

3

主题

33

帖子

1

银币

初来乍到

Rank: 1

铜币
45
发表于 2012-2-1 09:13:21 | 显示全部楼层
尽可能远离SendCommand语句。
换句话说,您可以修改宏,采用边界框修剪所有实体,然后删除不在该框中的实体。你可以用a框来选择。用户需要选择该框吗?盒子是不是在一个特殊的图层上,上面没有任何其他对象?
对于erase
Public Sub EraseUnselected(varLL as variant,varUR as variant)
varLL是边界框的左下角
varUR是边界框的右上角
然后修改objSelSet。选择屏幕上的
以使用objSelSet。Select acSelectionSetCrossing,varLL,varUR
此方法支持过滤机制。
以下选择模式可用:
窗口
选择完全位于矩形区域内的所有对象,矩形区域的角由点1和点2定义。交叉选择矩形区域内并与之交叉的对象,矩形区域的角由点1和点2定义。上一个选择最近的选择集。如果在图纸空间和模型空间之间切换并尝试使用选择集,此模式将被忽略。
最后
选择最近创建的可见对象。全部选择所有对象。
回复

使用道具 举报

6

主题

23

帖子

14

银币

初来乍到

Rank: 1

铜币
34
发表于 2012-2-2 00:22:14 | 显示全部楼层
但是我需要修剪掉穿过多边形的线,EXTRIM会做得很好..所以我必须用它..让我公布一下我到目前为止所做的工作..它几乎完成了我想要的任务..但是EXTRIM命令的边是随机选取的..有时,它会修剪和删除边界内的线条..我总是想在边界外修剪..欢迎对宏进行任何修改..Public Sub EraseUnselected()
Dim objSelSet As AcadSelectionSet
Dim objunselected Set As AcadSelectionSet
Dim objEnts()As acad entity
Dim LNG CNT As Long,Coords As Variant,new _ ent As acad entity
Dim Pt3 As Variant,Pt1 As Variant,wanted _ ent As acad entity
Dim polygon line As acadlw polyline,polygon Coords As Variant
Dim lwl pline As acadlw polyline
Dim varall As Variant,varUR设置objUnSelectedSet = ThisDrawing。SelectionSets.Add("未选定")

objSelSet。选择屏幕上的“对象集合”。Select acSelectionSetCrossing,varLL,varUR objUnSelectedSet。select acSelectionSetAll

ReDim objEnts(0到objSelSet。Count - 1)作为acad entity

For LNG CNT = 0 To objSelSet。count-1

Set objEnts(LNG CNT)= objSelSet(LNG CNT)
Set new _ ent = objEnts(LNG CNT)
Set polygon line = new _ ent
new _ ent。GetBoundingBox Pt3,Pt1
本图。send command " _ extrim " & vbCr & Pt1(0)& "," & Pt1(1) & vbCr & Pt3(0) & "," & Pt3(1) & vbCr

下一个LNG CNT


objUnSelectedSet。RemoveItems Unwanted_ent。擦除objSelSet。删除objUnSelectedSet。delete

Exit _ Here:
Exit Sub

Err _ Control:
Select Case Err。本图纸中lngCnt = 0的编号。selections sets . Count-1
如果该绘图。SelectionSets.Item(lngCnt)。Name = "Unselected "然后
设置objUnSelectedSet = ThisDrawing。selection sets . Item(LNG CNT)
Resume Next
Else
Resume Exit _ Here
End If
Next
Case Else
InputBox Err。描述,“擦除未选择的”,错误。number
Resume Exit _ Here
End Select

End Sub
请看看代码,告诉我一些想法...
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-6-30 11:04 , Processed in 0.857820 second(s), 69 queries .

© 2020-2025 乐筑天下

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