Divide命令仅对线类有用吧。
下面的程序应该可以实现。
- [FONT=courier new]
- Sub DivideBlock()
- On Error GoTo ErrTrap
- Dim StartEntObj As AcadEntity
- Dim pPt As Variant
- ThisDrawing.Utility.GetEntity StartEntObj, pPt, "请选择第一个对象: "
- Dim EndEntObj As AcadEntity
- ThisDrawing.Utility.GetEntity EndEntObj, pPt, "请选择最后一个对象: "
- If StartEntObj.ObjectName <> "AcDbBlockReference" Or StartEntObj.ObjectName <> EndEntObj.ObjectName Then
- ThisDrawing.Utility.Prompt "您选择的不是块! "
- Exit Sub
- End If
- Dim SSetObj As AcadSelectionSet
- Set SSetObj = ThisDrawing.SelectionSets.Add("DivideBlock")
- SSetObj.SelectOnScreen
- If SSetObj.Count = 0 Then Exit Sub
- '计算块与块之间的间距
- Dim Dist As Double
- Dist = CalcDistance(StartEntObj.InsertionPoint, EndEntObj.InsertionPoint) / (SSetObj.Count + 1)
- '计算块分布的角度
- Dim Ang As Double
- Ang = ThisDrawing.Utility.AngleFromXAxis(StartEntObj.InsertionPoint, EndEntObj.InsertionPoint)
- Dim i As Integer
- For i = 0 To SSetObj.Count - 1
- SSetObj(i).InsertionPoint = ThisDrawing.Utility.PolarPoint(StartEntObj.InsertionPoint, Ang, Dist * (i + 1))
- Next
- SSetObj.Delete
- Set SSetObj = Nothing
- Exit Sub
- ErrTrap:
- If ThisDrawing.GetVariable("errno") = 7 Then Resume
- On Error GoTo 0
- End Sub
- '计算距离
- Public Function CalcDistance(ByVal Pt1 As Variant, Optional ByVal Pt2 As Variant) As Double
- CalcDistance = 0
- Dim dX As Double
- Dim dY As Double
- Dim dZ As Double
-
- On Error GoTo ErrTrap
- dX = Pt2(0) - Pt1(0)
- dY = Pt2(1) - Pt1(1)
- dZ = Pt2(2) - Pt1(2)
- CalcDistance = Sqr(dX ^ 2 + dY ^ 2 + dY ^ 2)
- Exit Function
- ErrTrap:
- On Error GoTo 0
- End Function
- [/FONT]
|