シートを基準としたテキストボックスの座標取得|CATIAマクロの作成方法
以前の「CATDrawingのテキストボックスサイズの取得」に引き続き、テキストボックスの座標を取得するためのコードも必要だったためここにまとめておきます。
テキストボックスのアンカーポイントの座標は「DrawingTextオブジェクト」の「xプロパティ」「yプロパティ」で取得することができます。
ただ、これで取得できる座標はそのテキストボックスのビューを基準としています。
そのためシート上でビューの位置を変更したとしても、ビュー内のテキストボックスの位置をさえ変えなければ取得できる座標は全く同じものとなってしまいます。
これをどうしてもビューではなくシート基準での座標で取得したいという機会があったためページを作成しました。以下では、テキストボックスの座標をビューではなくシート(図面の左下)が基準となる座標を取得する方法を紹介していきます。
シート基準でのテキストボックスの座標を取得する方法
取得方法は至ってシンプルです。
直接シート基準の座標を取得するためのプロパティ/メソッドは存在しないため、用意されているいくつかのプロパティを使って計算で求めていきます。
大まかな流れは以下のとおりです。
① ビューの原点座標を取得(シート基準)
② テキストボックスの座標取得(ビュー基準)
③ ①、②の座標を使って計算で求める
①は「DrawingViewオブジェクト」の「xAxisDataプロパティ」「yAxisDataプロパティ」
②は「DrawingTextオブジェクト」の「xプロパティ」「yプロパティ」で取得可能です。
取得した座標を以下のように表すと③でどのような計算をすればいいのかすぐにわかると思います。
図を見たまま単純に考えればシート基準のテキストボックスの座標は
X座標:「View.xAxisData + Text.x」
Y座標:「View.yAxisData + Text.y」
で取得できることがわかります。
ただ、ここで注意しないといけないのはビューのスケールは必ずしも「1:1」でないという点です。
ビューのスケールが「1:1」の場合は上記の計算式で問題ありませんが、
「1:2」の場合は「Text.x」「Text.y」の数値を0.5倍にしないと
シート基準で考えたときにおかしな座標になってしまいます。
つまり、「Text.x」「Text.y」にはビューのスケールをかける必要があります。
ビューのスケールは「DrawingViewオブジェクト」の「Scaleプロパティ」で取得することができます。
(※「1:2」の場合は「0.5」、「1:4」の場合は「0.25」のように小数で取得されます。)
結論、以下の式でシート基準でのテキストボックスの座標を取得することができるということです。
X座標:「View.xAxisData + (Text.x ×View.Scale)」
Y座標:「View.yAxisData + (Text.y × View.Scale)」
サンプルコード
上記の式を使ったサンプルコードです。
テキストボックスを1つ選択した状態で以下のコードを実行すると
シート基準でのテキストボックスの座標を取得しメッセージボックスで表示します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
Option Explicit Sub CATMain() Dim DRWDOC As DrawingDocument Set DRWDOC = CATIA.ActiveDocument Dim SEL As Selection Set SEL = DRWDOC.Selection '選択中のテキストボックスを取得 Dim Text As DrawingText Set Text = SEL.Item(1).Value '選択中のテキストボックスを含んだビューを取得 Dim View 'As DrawingView Set View = Text.Parent.Parent 'シート基準のテキストボックスの座標取得 Dim TXTCoordX As Double TXTCoordX = View.xAxisData + (Text.x * View.Scale) Dim TXTCoordY As Double TXTCoordY = View.yAxisData + (Text.y * View.Scale) MsgBox "[シート基準でのテキストボックスの座標]" & vbLf & _ "X座標 : " & TXTCoordX & vbLf & _ "Y座標 : " & TXTCoordY End Sub |
まとめ
今回はシート基準でのテキストボックス座標の取得方法についての内容でした。
以前紹介した「CATDrawingのテキストボックスサイズの取得」と組み合わせれば、シート基準でのテキストボックスの座標はほとんど取得することができるようになります。(4隅の頂点のようなアンカーポイント以外の座標)
あまり需要はないかもしれませんが、テキストボックスを使ったマクロ作成中につまづいた内容(主に以前紹介したサイズの方でつまづいていましたが)だったのでここにまとめておきます。
CATIAマクロを本気で勉強するなら