hsheet 发表于 2010-1-15 14:54:51

选择外圈DWGEditor帮助

我有一个要修改的点的矩形数组。我想擦除位于圆形区域之外的点。如果要手动执行,我会简单地使用擦除命令并选择外圈选项,但无法理解如何在VBA中执行此操作。我假设我需要使用vicSelectionSetOutside Circle类型的选择方法创建一个要删除的点的选择集,但我不明白该类型是如何调用的。有人能向我解释一下它的语法吗?
**** Hidden Message *****

Bryco 发表于 2010-1-16 20:36:01

如果该点距离圆心的距离大于半径,请将其切掉,
并欢迎

fixo 发表于 2010-1-17 07:12:40


正如Bryco所说:
Option Explicit
Sub DelOutSide()
    Dim oSSet As AcadSelectionSet
    Dim delSet As AcadSelectionSet
    Dim oEnt As AcadEntity
    Dim oCircle As AcadCircle
    Dim oPoint As AcadPoint
    Dim cp As Variant
    Dim varp As Variant
    Dim rad As Double
    Dim ftype(0) As Integer
    Dim fdata(0) As Variant
    Dim dxfCode, dxfValue
    Dim name As String
    Dim count As Integer
    On Error GoTo Err_Control
    With ThisDrawing.SelectionSets
      While .count > 0
            .Item(0).Delete
      Wend
      Set oSSet = .Add("$Points$")
      Set delSet = .Add("$Delete$")
    End With
    ftype(0) = 0: fdata(0) = "POINT"
    dxfCode = ftype: dxfValue = fdata
    ThisDrawing.Utility.GetEntity oEnt, varp, vbLf & "Select circle:"
    If Not TypeOf oEnt Is AcadCircle Then
      Exit Sub
    End If
    Set oCircle = oEnt
    cp = oCircle.Center
    rad = oCircle.Radius
    oSSet.SelectOnScreen dxfCode, dxfValue
    For Each oEnt In oSSet
      Set oPoint = oEnt
      varp = oPoint.Coordinates
      If Distance(varp, cp) > rad Then
            Dim varobj(0) As AcadEntity
            Set varobj(0) = oEnt
            delSet.AddItems (varobj)
      End If
    Next
    MsgBox delSet.count
    delSet.Erase
Exit_Here:
    Exit Sub
Err_Control:
    If Err.Number0 Then
      MsgBox Err.Description
      Err.Clear
    End If
    Resume Exit_Here
End Sub
'' by Frank Oquendo
Public Function Distance(fPoint As Variant, sPoint As Variant) As Double
    Dim x1 As Double, x2 As Double
    Dim y1 As Double, y2 As Double
    Dim z1 As Double, z2 As Double
    Dim cDist As Double
    x1 = fPoint(0): y1 = fPoint(1): z1 = fPoint(2)
    x2 = sPoint(0): y2 = sPoint(1): z2 = sPoint(2)
    cDist = Sqr(((x2 - x1) ^ 2) + ((y2 - y1) ^ 2) + ((z2 - z1) ^ 2))
    Distance = cDist
End Function

~'J'~

hsheet 发表于 2010-1-18 10:16:25

谢谢你的帮助

fixo 发表于 2010-1-18 17:39:52

很高兴能帮上忙
干杯
~'J'~
页: [1]
查看完整版本: 选择外圈DWGEditor帮助