Vla-rotate3d

提供:GizmoLabs - だいたい CAD LISP なサイト
構文
(vla-rotate3d vla-object Point1 Point2 RotationAngle)


機能
3 次元の軸を中心にして、オブジェクトを回転する。Point1 と Point2 によって、回転軸の線分を定義。


引数
  • vla-object … VLAオブジェクト(すべての図形オブジェクト、AttributeReference、Dimension )
  • Point1… 軸の 1 番目の点を指定する 3D WCS 座標。
  • Point2… 軸の 2 番目の点を指定する 3D WCS 座標。
  • RotationAngle … 選択した軸を中心にしてオブジェクトを回転する角度の値(ラジアン)。


戻り値
nil


サンプル
(vl-load-com)
(defun c:Example_Rotate3D()
    ;; ボックス作って軸を元に回転するサンプル
    (setq acadObj (vlax-get-acad-object))
    (setq doc (vla-get-ActiveDocument acadObj))

    ;; ボックスの下準備
    (setq center (vlax-3d-point 5 5 0)
          boxLength 5
	  boxWidth 7
	  boxHeight 10)
    
    ;; ボックス生成
    (setq modelSpace (vla-get-ModelSpace doc))
    (setq boxObj (vla-AddBox modelSpace center boxLength boxWidth boxHeight))
    
    ;; ビューポートを調整
    (setq NewDirection (vlax-3d-point -1 -1 1))
    (setq activeViewport (vla-get-ActiveViewport doc))
    (vla-put-Direction activeViewport NewDirection)
    (vla-put-ActiveViewport doc activeViewport)
    (vla-ZoomAll acadObj)
        
    ;; 回転の軸になる2点の下準備
    (setq rotatePt1 (vlax-3d-point -3 4 0)
          rotatePt2 (vlax-3d-point -3 -4 0)
          rotateAngle (/ (* 30 3.141592) 180))
    
    ;; 親切なサンプルなんで軸を書いとくマジ感謝しろよな
    (setq axisLine (vla-AddLine modelSpace rotatePt1 rotatePt2))
    (vla-Update axisLine)
    (alert "30度回転するよ")

    ;; 回転
    (vla-Rotate3D boxObj rotatePt1 rotatePt2 rotateAngle)
    (vla-Regen doc :vlax-true)
    (alert "30度回転したべ")
)

関連事項