CAD开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

AutoCAD 2025 开发者帮助

关于计算定义区域 (ActiveX)

2024-5-18 19:18| 发布者: admin| 查看: 151| 评论: 0|原作者: admin|来自: AutoCAD

关于计算定义区域 (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

路过

雷人

握手

鲜花

鸡蛋

最新评论

QQ|Archiver|CAD开发者社区 ( 苏ICP备2022047690号-1   苏公网安备32011402011833)

GMT+8, 2025-3-31 13:11

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

返回顶部