Normal プロパティ(ActiveX)

オブジェクトの 3D 法線単位ベクトルを指定します。

サポートされているプラットフォーム: Windows のみ

構文と要素

VBA:

object.Normal
object

タイプ: ArcAttributeAttributeReferenceBlockReferenceCircleDim3PointAngularDimAlignedDimAngularDimArcLengthDimDiametricDimensionDimOrdinateDimRadialDimRadialLargeDimRotatedEllipseExternalReferenceHatchLeaderLineLWPolylineMInsertBlockMTextPointPolylineRegionSectionShapeSolidTextToleranceTrace

このプロパティが適用されるオブジェクト。

プロパティの値

読み込み専用: いいえ

タイプ: バリアント型(倍精度実数の 3 要素配列)

WCS の 3D 法線単位ベクトル

注意

この法線ベクトルは、指定されたオブジェクトの Z 軸を定義します。法線は WCS で戻されますが、オブジェクトを OCS で決定する場合にも使用できます。OCS との間で相互変換する場合は、TranslateCoordinates メソッドでこのプロパティを OCSNormal として使用してください。



このプロパティが指定するのはベクトルであって、点ではないことに注意してください。ベクトルは空間内の位置ではなく、法線の方向を定義します。ある点にこの法線ベクトルを加算して、別の点を取得できます。

Tolerance: 法線ベクトルは Tolerance オブジェクトの方向に垂直でなければなりません。Tolerance オブジェクトに垂直ではない法線はエラーになります。

VBA:

Sub Example_Normal()
    ' This example creates a circle in model space.
    ' It then finds the current normal to that circle
    ' and changes the normal.
    
    ' Define a circle
    Dim circleObj As AcadCircle
    Dim center(0 To 2) As Double
    Dim radius As Double
    center(0) = 4: center(1) = 4: center(2) = 0
    radius = 1
    
    ' Add the circle to model space
    Set circleObj = ThisDrawing.ModelSpace.AddCircle(center, radius)
    ZoomAll
    
    ' Find the normal for the circle
    Dim currNormal As Variant
    currNormal = circleObj.Normal
    MsgBox "The current normal for the circle is " & circleObj.Normal(0) & ", " & circleObj.Normal(1) & ", " & circleObj.Normal(2), , "Normal Example"
    
    ' Change the normal for the circle
    Dim newNormal(0 To 2) As Double
    newNormal(0) = 1: newNormal(1) = 1: newNormal(2) = -1
    circleObj.Normal = newNormal
    circleObj.Update
    MsgBox "The current normal for the circle is " & circleObj.Normal(0) & ", " & circleObj.Normal(1) & ", " & circleObj.Normal(2), , "Normal Example"
    
End Sub

Visual LISP:

(vl-load-com)
(defun c:Example_Normal()
    ;; This example creates a circle in model space.
    ;; It then finds the current normal to that circle
    ;; and changes the normal.
    (setq acadObj (vlax-get-acad-object))
    (setq doc (vla-get-ActiveDocument acadObj))

    ;; Define a circle
    (setq center (vlax-3d-point 4 4 0)
          radius 1)
    
    ;; Add the circle to model space
    (setq modelSpace (vla-get-ModelSpace doc))
    (setq circleObj (vla-AddCircle modelSpace center radius))
    (vla-ZoomAll acadObj)
    
    ;; Find the normal for the circle
    (setq currNormal (vlax-variant-value (vla-get-Normal circleObj)))
    (alert (strcat "The current normal for the circle is " (rtos (vlax-safearray-get-element currNormal 0) 2) ", "
                                                           (rtos (vlax-safearray-get-element currNormal 1) 2) ", "
                                                           (rtos (vlax-safearray-get-element currNormal 2) 2)))
    
    ;; Change the normal for the circle
    (setq newNormal (vlax-3d-point 1 1 -1))
    (vla-put-Normal circleObj newNormal)
    (vla-Update circleObj)
    (setq newNormal (vlax-variant-value newNormal))
    (alert (strcat "The current normal for the circle is " (rtos (vlax-safearray-get-element newNormal 0) 2) ", "
                                                           (rtos (vlax-safearray-get-element newNormal 1) 2) ", "
                                                           (rtos (vlax-safearray-get-element newNormal 2) 2)))
)