Vla-translatecoordinates

提供:GizmoLabs - だいたい CAD LISP なサイト
構文
(vla-translatecoordinates vla-object Point FromCoordSystem ToCoordSystem Displacement OCSNormal)


機能
点を、ある座標系から他の座標系に変換する。


引数
  • vla-object … Utility のVLAオブジェクト
  • Point … 追加する頂点を指定する座標。
  • FromCoordSystem … 点の変換前の座標系。
  • ToCoordSystem … 点の変換後の座標系。
  • Displacement … 変位ベクトル フラグ。
  • vlax-True : Point は変位ベクトルとみなされる。
  • vlax-False: Point は点とみなされる。
  • OCSNormal … OCS の法線。


戻り値
変換後の 3D WCS 座標。


注意 : ある OCS の座標を、直接別の OCS の座標に変換することはできない。この変換を行うには、まず、ある OCS の座標を WCS などの、中間の座標系の座標に変換し、次にこの座標をもう 1 つの OCS の座標に変換する。
  • Polyline または LWPolyline オブジェクトの点を OCS から WCS に変換するには、次のようにする。
  1. OCS の点の X、Y 座標を Coordinate または Coordinates プロパティから取得。
  2. OCS の点の Z 座標を Elevation プロパティから取得。
  3. ポリラインに対する法線を Normal プロパティから取得。
  4. X、Y、Z 座標および Normal を使用して TranslateCoordinates を呼び出す。


サンプル
(vl-load-com)
(defun c:Example_TranslateCoordinates()
    ;; 2,2,2 のUCS点を作成。WCS と UCS の座標点を表示するサンプル
    (setq acadObj (vlax-get-acad-object))
    (setq doc (vla-get-ActiveDocument acadObj))

    ;; "New_UCS" というUCSを作成する
    (setq origin (vlax-3d-point 2 2 2)
          xAxisPnt (vlax-3d-point 5 2 2)
          yAxisPnt (vlax-3d-point 2 6 2))
    
    ;; UCS を UserCoordinatesSystems コレクションに追加
    (setq ucsObj (vla-Add (vla-get-UserCoordinateSystems doc) origin xAxisPnt yAxisPnt "New_UCS"))
    (vla-put-ActiveUCS doc ucsObj)

    ;; UCSアイコンを表示
    (setq viewportObj (vla-get-ActiveViewport doc))
    (vla-put-UCSIconOn viewportObj :vlax-true)
    (vla-put-UCSIconAtOrigin viewportObj :vlax-true)
    (vla-put-ActiveViewport doc viewportObj)

    ;; 点を入力
    (setq pointWCS (vlax-variant-value (vla-GetPoint (vla-get-Utility doc) nil "\nEnter で点を変換 :")))

    ;; UCS 座標点を変換
    (setq pointUCS (vlax-variant-value (vla-TranslateCoordinates (vla-get-Utility doc) pointWCS acWorld acUCS :vlax-false)))
    
    ;; 座標点を表示
    (alert (strcat 
              "座標点は次のようになります:"
              "\nWCS: " 
              (rtos (vlax-safearray-get-element pointWCS 0) 2) ", "
              (rtos (vlax-safearray-get-element pointWCS 1) 2) ", "
              (rtos (vlax-safearray-get-element pointWCS 2) 2)
              "\nUCS: " 
              (rtos (vlax-safearray-get-element pointUCS 0) 2) ", "
              (rtos (vlax-safearray-get-element pointUCS 1) 2) ", "
              (rtos (vlax-safearray-get-element pointUCS 2) 2)))
)

関連事項