概要 - ユーザ座標系を定義する(VBA/ActiveX)

原点(0, 0, 0)の位置、XY 平面と Z 軸の方向を変更するには、ユーザ座標系(UCS)オブジェクトを定義します。

3D 空間の任意の場所および方向に UCS を配置することができます。必要な数のユーザ座標系の定義、保存、呼び出しが可能です。座標の指定および表示は、現在の UCS を基準とした相対的な値で行います。

UCS の原点および方向を示すために、UCSIconAtOrigin プロパティを使用して、UCS の原点に UCS アイコンを表示することができます。UCS アイコンが有効になっていて (UCSIconOn プロパティを参照)、原点に表示されない場合は、システム変数 UCSORG により定義された WCS 座標に表示されます。

Add メソッドを使用して、新しくユーザ座標系を作成することができます。このメソッドでは、原点の座標、X 軸および Y 軸上の座標、UCS の名前の 4 つの値を入力する必要があります。

AutoCAD ActiveX オートメーションの座標は、すべてワールド座標系(WCS)で入力されます。GetUCSMatrix メソッドを使用して、特定の UCS の変換マトリックスを返します。この UCS に相当する WCS を検索するには、この変換マトリックスを使用します。

UCS をアクティブにするには、Document オブジェクトで ActiveUCS プロパティを使用します。アクティブな UCS に変更を加えた場合に、変更を反映させるためには新しい UCS オブジェクトをリセットしてアクティブにする必要があります。アクティブな UCS をリセットするには、更新した UCS オブジェクトの ActiveUCS プロパティをもう一度呼び出します。

新しい UCS を作成してアクティブ化し、点の座標を UCS 座標へ変換する

以下のサブルーチンでは、新しい UCS を作成し、図面に対しアクティブな UCS として設定します。次にユーザに図面内の点をクリックするようプロンプトを表示し、その点の WCS および UCS の両座標を返します。

Sub Ch8_NewUCS()
    ' Define the variables we will need
    Dim ucsObj As AcadUCS
    Dim origin(0 To 2) As Double
    Dim xAxisPnt(0 To 2) As Double
    Dim yAxisPnt(0 To 2) As Double
    ' Define the UCS points
    origin(0) = 4: origin(1) = 5: origin(2) = 3
    xAxisPnt(0) = 5: xAxisPnt(1) = 5: xAxisPnt(2) = 3
    yAxisPnt(0) = 4: yAxisPnt(1) = 6: yAxisPnt(2) = 3

    ' Add the UCS to the
    ' UserCoordinatesSystems collection
    Set ucsObj = ThisDrawing.UserCoordinateSystems. _
 Add(origin, xAxisPnt, yAxisPnt, "New_UCS")
    ' Display the UCS icon
    ThisDrawing.ActiveViewport.UCSIconAtOrigin = True
    ThisDrawing.ActiveViewport.UCSIconOn = True

    ' Make the new UCS the active UCS
    ThisDrawing.ActiveUCS = ucsObj
    MsgBox "The current UCS is : " & ThisDrawing.ActiveUCS.Name _
 & vbCrLf & " Pick a point in the drawing."

    ' Find the WCS and UCS coordinate of a point
    Dim WCSPnt As Variant
    Dim UCSPnt As Variant

    WCSPnt = ThisDrawing.Utility.GetPoint(, "Enter a point: ")
    UCSPnt = ThisDrawing.Utility.TranslateCoordinates _
 (WCSPnt, acWorld, acUCS, False)

    MsgBox "The WCS coordinates are: " & WCSPnt(0) & ", " _
 & WCSPnt(1) & ", " & WCSPnt(2) & vbCrLf & _
 "The UCS coordinates are: " & UCSPnt(0) & ", " _
 & UCSPnt(1) & ", " & UCSPnt(2)
End Sub