关于计算定义区域 (ActiveX)
用户指定的点可用于获取封闭区域的面积。
您可以测量由用户指定的 2D 或 3D 点定义的任意闭合区域。这些点必须是共面的。
从用户处获取点指定的区域
- 在循环中使用该方法从用户那里获取点。GetPoint
- 根据用户提供的点创建轻量级折线。使用该方法创建折线。AddLightweightPolyline
- 使用该属性获取新创建的折线的面积。Area
- 使用该方法擦除折线。Erase
计算由用户输入的点定义的区域
本示例提示用户输入 5 个点。然后,从输入的点中创建折线。折线是闭合的,折线的面积显示在消息框中。
- AutoLISP
-
(vl-load-com)
(defun c:Ch3_CalculateDefinedArea()
(setq acadObj (vlax-get-acad-object)
doc (vla-get-ActiveDocument acadObj)
moSpace (vla-get-ModelSpace doc)
utilityObj (vla-get-Utility doc))
;; Get the points from the user
(setq p1 (vla-GetPoint utilityObj nil "\nFirst point: ")
p2 (vla-GetPoint utilityObj p1 "\nSecond point: ")
p3 (vla-GetPoint utilityObj p2 "\Third point: ")
p4 (vla-GetPoint utilityObj p3 "\Fourth point: ")
p5 (vla-GetPoint utilityObj p4 "\Fifth point: "))
(setq p1 (vlax-safearray->list (vlax-variant-value p1))
p2 (vlax-safearray->list (vlax-variant-value p2))
p3 (vlax-safearray->list (vlax-variant-value p3))
p4 (vlax-safearray->list (vlax-variant-value p4))
p5 (vlax-safearray->list (vlax-variant-value p5)))
;; Create the 2D polyline from the points
(setq vertices (vlax-make-safearray vlax-vbDouble '(0 . 9)))
(vlax-safearray-fill vertices (list
(nth 0 p1) (nth 1 p1)
(nth 0 p2) (nth 1 p2)
(nth 0 p3) (nth 1 p3)
(nth 0 p4) (nth 1 p4)
(nth 0 p5) (nth 1 p5)
))
(setq polyObj (vla-AddLightWeightPolyline moSpace vertices))
(vla-put-Closed polyObj :vlax-true)
(vla-ZoomAll acadObj)
;; Display the area for the polyline
(alert (strcat "The area defined by the points is "
(rtos (vla-get-Area polyObj) 2)))
)
- VBA(仅限 AutoCAD)
-
Sub Ch3_CalculateDefinedArea()
Dim p1 As Variant
Dim p2 As Variant
Dim p3 As Variant
Dim p4 As Variant
Dim p5 As Variant
' Get the points from the user
p1 = ThisDrawing.Utility.GetPoint(, vbCrLf & "First point: ")
p2 = ThisDrawing.Utility.GetPoint(p1, vbCrLf & "Second point: ")
p3 = ThisDrawing.Utility.GetPoint(p2, vbCrLf & "Third point: ")
p4 = ThisDrawing.Utility.GetPoint(p3, vbCrLf & "Fourth point: ")
p5 = ThisDrawing.Utility.GetPoint(p4, vbCrLf & "Fifth point: ")
' Create the 2D polyline from the points
Dim polyObj As AcadLWPolyline
Dim vertices(0 To 9) As Double
vertices(0) = p1(0): vertices(1) = p1(1)
vertices(2) = p2(0): vertices(3) = p2(1)
vertices(4) = p3(0): vertices(5) = p3(1)
vertices(6) = p4(0): vertices(7) = p4(1)
vertices(8) = p5(0): vertices(9) = p5(1)
Set polyObj = ThisDrawing.ModelSpace.AddLightWeightPolyline(vertices)
polyObj.Closed = True
ThisDrawing.Application.ZoomAll
' Display the area for the polyline
MsgBox "The area defined by the points is " & _
polyObj.Area, , "Calculate Defined Area"
End Sub
|