CAD开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

AutoCAD 2024 开发者帮助

MomentOfInertia 属性 (ActiveX)

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

MomentOfInertia 属性 (ActiveX)

获取固体的惯性矩。

支持的平台:仅限 Windows

签名

VBA:

object.MomentOfInertia
对象

类型:3DSolid区域

此属性应用于的对象。

属性值

只读:是的

类型:变体(双元素或三元素的双精度数组)

基于当前坐标系的 2D 或 3D 坐标。

言论

转动惯量返回为定义为变体的 XYZ 坐标。

例子

VBA:

Sub Example_MomentOfInertia2D()
    ' This example creates a region in model space.
    ' It then returns the MomentOfInertia for that region.
    Dim curves(0 To 1) As AcadEntity

    ' Define the arc
    Dim centerPoint(0 To 2) As Double
    Dim radius As Double
    Dim startAngle As Double
    Dim endAngle As Double
    centerPoint(0) = 5#: centerPoint(1) = 3#: centerPoint(2) = 0#
    radius = 2#
    startAngle = 0
    endAngle = 3.141592
    Set curves(0) = ThisDrawing.ModelSpace.AddArc(centerPoint, radius, startAngle, endAngle)
    
    ' Define the line
    Set curves(1) = ThisDrawing.ModelSpace.AddLine(curves(0).StartPoint, curves(0).EndPoint)
        
    ' Create the region
    Dim regionObjArr As Variant
    regionObjArr = ThisDrawing.ModelSpace.AddRegion(curves)
    ZoomAll
    
    ' Return the MomentOfInertia for the region
    Dim regionObj As AcadRegion
    Set regionObj = regionObjArr(0)

    Dim momentOfInertia As Variant
    momentOfInertia = regionObj.momentOfInertia
    MsgBox "The MomentOfInertia for the region is " & momentOfInertia(0) & "," & momentOfInertia(1), , "MomentOfInertia Example"
        
End Sub

Sub Example_MomentOfInertia3D()
    ' This example creates a box in model space.
    ' It then returns the MomentOfInertia for that box.
        
    Dim boxObj As Acad3DSolid
    Dim length As Double, width As Double, height As Double
    Dim center(0 To 2) As Double
    
    ' Define the box
    center(0) = 5#: center(1) = 5#: center(2) = 0
    length = 5#: width = 7: height = 10#
    
    ' Create the box (3DSolid) object in model space
    Set boxObj = ThisDrawing.ModelSpace.AddBox(center, length, width, height)
    
    ' Change the viewing direction of the viewport to better see the box
    Dim NewDirection(0 To 2) As Double
    NewDirection(0) = -1: NewDirection(1) = -1: NewDirection(2) = 1
    ThisDrawing.ActiveViewport.direction = NewDirection
    ThisDrawing.ActiveViewport = ThisDrawing.ActiveViewport
    ZoomAll
    
    ' Return the MomentOfInertia for the box
    Dim momentOfInertia As Variant
    momentOfInertia = boxObj.momentOfInertia
    MsgBox "The MomentOfInertia for the box is " & momentOfInertia(0) & "," & momentOfInertia(1) & "," & momentOfInertia(2), , "MomentOfInertia Example"
        
End Sub

可视化 LISP:

(vl-load-com)
(defun c:Example_MomentOfInertia2D()
    ;; This example creates a region in model space.
    ;; It then returns the MomentOfInertia for that region.
    (setq acadObj (vlax-get-acad-object)
          doc (vla-get-ActiveDocument acadObj)
          modelSpace (vla-get-ModelSpace doc))

    ;; Define the arc
    (setq centerPoint (vlax-3d-point 5 3 0)
          radius 2
          startAngle 0
          endAngle 3.141592)
    (setq arc (vla-AddArc modelSpace centerPoint radius startAngle endAngle))
    
    ;; Define the line
    (setq line (vla-AddLine modelSpace (vla-get-StartPoint arc) (vla-get-EndPoint arc)))

    (setq curves (vlax-make-safearray vlax-vbObject '(0 . 1)))
    (vlax-safearray-put-element curves 0 arc)
    (vlax-safearray-put-element curves 1 line)
  
    ;; Create the region
    (setq regionObjArr (vla-AddRegion modelSpace curves))
    (vla-ZoomAll acadObj)

    ;; Return the MomentOfInertia for the region
    (setq regionObj (vlax-safearray-get-element (vlax-variant-value regionObjArr) 0)
          momentOfInertia (vlax-variant-value (vla-get-MomentOfInertia regionObj)))
    (alert (strcat "The MomentOfInertia for the region is " 
                   (rtos (vlax-safearray-get-element momentOfInertia 0) 2) ","
                   (rtos (vlax-safearray-get-element momentOfInertia 1) 2)))
)

;; The following example only applies to AutoCAD and not AutoCAD LT
(defun c:Example_MomentOfInertia3D()
    ;; This example creates a box in model space.
    ;; It then returns the MomentOfInertia for that box.
    (setq acadObj (vlax-get-acad-object)
          doc (vla-get-ActiveDocument acadObj))
    
    ;; Define the box
    (setq center (vlax-3d-point 5 5 0)
          boxLength 5
          boxWidth 7
          boxHeight 10)
    
    ;; Create the box (3DSolid) object in model space
    (setq modelSpace (vla-get-ModelSpace doc)
          boxObj (vla-AddBox modelSpace center boxLength boxWidth boxHeight))
    
    ;; Change the viewing direction of the viewport to better see the box
    (setq NewDirection (vlax-3d-point -1 -1 1)
          activeViewport (vla-get-ActiveViewport doc))
    (vla-put-Direction activeViewport NewDirection)
    (vla-put-ActiveViewport doc activeViewport)
    (vla-ZoomAll acadObj)
    
    ;; Return the MomentOfInertia for the box
    (setq momentOfInertia (vlax-variant-value (vla-get-MomentOfInertia boxObj)))
    (alert (strcat "The MomentOfInertia for the box is "
                   (rtos (vlax-safearray-get-element momentOfInertia 0) 2) ","
                   (rtos (vlax-safearray-get-element momentOfInertia 1) 2) ","
                   (rtos (vlax-safearray-get-element momentOfInertia 2) 2)))
)

路过

雷人

握手

鲜花

鸡蛋

最新评论

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

GMT+8, 2025-3-28 17:00

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

返回顶部