边界内的修剪和删除
大家好,我是这个论坛的新成员,这是我的第一篇帖子..希望我能从你们那里得到更好的回复..我的任务来了...
我只需要编写一个VBA代码,该代码将修剪与用户选择的矩形边界相交的线条。边界外的所有其他对象或线/Pline将被删除,穿过边界的线将被修剪掉。与“EXTRIM”命令完全相同。我需要通过VBA或LISP来完成..请帮我一把.....
预先感谢............
**** Hidden Message ***** 在LSP中应该很容易做到(因为不支持VBA)。
您已经有EXTRIM,所以现在另一个缺失的部分正在清除边界外的所有内容。很容易做到。只需启动ERASE命令,然后键入'EXW(包括撇号),然后指定一个窗口的两个角(您的边界),然后*噗!*边界外的所有内容都被删除。 非常感谢...你能提供LISP代码吗...我不太了解LISP...在VBA中工作...所以...............谢谢...... 我有一些旧代码,你可以看看,那是VBA。它将删除所有未选定的实体
Public Sub EraseUnselected()
Dim objSelSet As AcadSelectionSet
Dim objUnSelectedSet As AcadSelectionSet
Dim objEnts() As AcadEntity
Dim lngCnt As Long
On Error GoTo Err_Control
Set objSelSet = ThisDrawing.PickfirstSelectionSet
Set objUnSelectedSet = ThisDrawing.SelectionSets.Add("Unselected")
objSelSet.SelectOnScreen
objUnSelectedSet.Select acSelectionSetAll
ReDim objEnts(0 To objSelSet.Count - 1) As AcadEntity
For lngCnt = 0 To objSelSet.Count - 1
Set objEnts(lngCnt) = objSelSet(lngCnt)
Next lngCnt
objUnSelectedSet.RemoveItems objEnts
objUnSelectedSet.Erase
objSelSet.Delete
objUnSelectedSet.Delete
Exit_Here:
Exit Sub
Err_Control:
Select Case Err.Number
Case -2145320851
For lngCnt = 0 To ThisDrawing.SelectionSets.Count - 1
If ThisDrawing.SelectionSets.Item(lngCnt).Name = "Unselected" Then
Set objUnSelectedSet = ThisDrawing.SelectionSets.Item(lngCnt)
Resume Next
Else
Resume Exit_Here
End If
Next
Case Else
InputBox Err.Description, "Erase Unselected", Err.Number
Resume Exit_Here
End Select
End Sub
谢谢你的代码chuckhardin...让我用这个敲我的头,我会回来的... 我试着用你的代码来完成我的任务...但是需要选择不应该删除的对象...所有其他的都将被删除...这是我尝试过的...
ThisDrawing.SendCommand"_extrim"&vbCr
这将做我想要的wat的主要任务,保留修剪和外部边界对象...我不想删除所有其他的... ur代码需要用户选择要保留的对象...任何更多的建议都会很有帮助...谢谢...
尽可能远离SendCommand语句。
换句话说,您可以修改宏,采用边界框修剪所有实体,然后删除不在该框中的实体。你可以用a框来选择。用户需要选择该框吗?盒子是不是在一个特殊的图层上,上面没有任何其他对象?
对于erase
Public Sub EraseUnselected(varLL as variant,varUR as variant)
varLL是边界框的左下角
varUR是边界框的右上角
然后修改objSelSet。选择屏幕上的
以使用objSelSet。Select acSelectionSetCrossing,varLL,varUR
此方法支持过滤机制。
以下选择模式可用:
窗口
选择完全位于矩形区域内的所有对象,矩形区域的角由点1和点2定义。交叉选择矩形区域内并与之交叉的对象,矩形区域的角由点1和点2定义。上一个选择最近的选择集。如果在图纸空间和模型空间之间切换并尝试使用选择集,此模式将被忽略。
最后
选择最近创建的可见对象。全部选择所有对象。
但是我需要修剪掉穿过多边形的线,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
请看看代码,告诉我一些想法...
页:
[1]