ダイナミックテキストとマルチテキストの作成と編集|AutoCAD VBAマクロの作成方法

AutoCADには図面にテキストボックスを作成するために[文字記入]コマンドと[マルチテキスト]コマンドが用意されています。AutoCAD VBAでも[文字記入]コマンドで作成されるダイナミックテキストとマルチテキストは別のオブジェクトとして扱われるため、本ページではこれら2つのオブジェクトについて、作成方法や取得方法、編集方法などを解説していきます。

本ページで学べる内容は以下のとおりです。

 TextオブジェクトとMTextオブジェクトについて

 ダイナミックテキストとマルチテキストの作成方法

 既に存在しているダイナミックテキストとマルチテキストの取得方法
ダイナミックテキストとマルチテキストの情報を取得する方法
ダイナミックテキストとマルチテキストの設定を変更する方法
ダイナミックテキストとマルチテキストを削除する方法

Text / MTextオブジェクト

AutoCADにはテキストとしてダイナミックテキストとマルチテキストの2種類のデータが用意されています。ダイナミックテキストは[文字記入](TEXT)コマンドで作成される単一行のテキストで、マルチテキストは[マルチテキスト](MTEXT)コマンドで作成される複数行をサポートしたテキストです。

AutoCAD VBAではこれらテキストがそれぞれ別のオブジェクトとして用意されており、ダイナミックテキストがTextオブジェクトマルチテキストがMTextオブジェクトとなっています。これらのオブジェクトには共通するプロパティ/メソッドが存在しますが、一部のプロパティはそれぞれが独自のものを持っているため、VBAの処理では条件に応じた分岐処理などが必要になる場合があります。

Text / MTextオブジェクトを取得する基本的な方法として「指定のインデックスからテキストを取得」「指定のオブジェクトID / ハンドルからテキストを取得」「テキストを新規作成して取得」「ユーザー選択から取得」の4つがあり、それぞれモデル空間オブジェクト(ThisDrawing.ModelSpace)から下記のコードで取得することができます。既存のテキストを編集したいのか新規でテキストを作成したいのかによって取得方法が異なるため、状況に応じて使い分ける必要があります。

上記コードはモデル空間内のテキストを対象としていますが、ペーパー空間内のテキストも同様の方法で取得可能です。両空間の違いについては「ModelSpaceとPaperSpace」を参照ください。
  

テキスト作成

Textオブジェクト作成

ダイナミックテキストを新規作成するためにはModelSpace,PaperSpace,BlockオブジェクトのAddTextメソッドを使って下記のように記載します。

   AddTextメソッド 

Dim oText As AcadText
Set oText= ThisDrawing.ModelSpace.AddText(TextString, InsertionPoint, Height)

引数は作成するテキストの文字列(TextString)と配置位置の座標が入った配列(InsertionPoint)、テキストの高さ(Height)です。これにより、指定した位置に指定の大きさのダイナミックテキストを作成することができ、戻り値(oText)としてAcadTextオブジェクトが取得できます。

下記はアクティブドキュメントのモデル空間にテキストボックス左下座標(10,10)で高さ25のテキストを作成するサンプルコードです。XY平面に配置するためZ座標の値は0としています。

 
 MTextオブジェクト作成

マルチテキストを新規作成するためにはModelSpace,PaperSpace,BlockオブジェクトのAddMTextメソッドを使って下記のように記載します。

   AddTextメソッド 

Dim oMText As AcadMText
Set oMText= ThisDrawing.ModelSpace.AddMText(InsertionPoint, Width, Text)

引数はテキスト配置位置の座標が入った配列(InsertionPoint)とテキストの幅(Width)、作成するテキストの文字列(Text)です。これにより、指定した位置に指定の大きさのマルチテキストを作成することができ、戻り値(oMText)としてAcadMTextオブジェクトが取得できます。

下記はアクティブドキュメントのモデル空間にテキストボックス左上座標(10,10)で幅100のマルチテキストを作成するサンプルコードです。XY平面に配置するためZ座標の値は0としています。

 

テキスト編集

文字列(値)の取得と変更

テキストの文字列はText / MTextオブジェクトのTextStringプロパティによって定義されています。

マルチテキストは複数行をサポートしているため、MTextオブジェクトのTextStringプロパティにはVBAの改行コード(vbLf)が入力でき、テキストとしてもその部分で改行がなされます。対してダイナミックテキストは単一行テキストであるた、改行コードを入力してもテキストの改行は行われません。

また、マルチテキストは一部の文字だけを太字にしたり、色を変更したりフォントやサイズを変更することができますが、これらの情報は全てこのTextStringプロパティに書式コードとして含まれます。例えば”Text”の”T”部分のみを太字にした際のTextStringプロパティの値は下記のようになります。

 icon-code  MText.TextString 

{\fArial|b1|i0|c0|p34;T}ext

マルチテキストの各文字が持つ書式はすべてTextStringプロパティが持つ書式コードで定義されているため、書式コードのない文字列で上書きすると書式の情報はすべて失われてしまうため注意が必要です。逆に上記のような書式コードを含めた文字列を動的に作成してTextStringプロパティに入力することで、指定の文字の書式を自在に変更することが可能です。
  

フォント(文字スタイル)の取得と変更

テキストのフォントは文字スタイルによって管理されており、VBAにおいて文字スタイルはText / MTextオブジェクトのStyleNameプロパティにより定義されています。このStyleNameの値を取得することで現在設定さてている文字スタイルの取得ができ、変更したい文字スタイルの名称に設定することで任意の文字スタイル、つまりはフォントの変更ができます。

StyleNameプロパティで設定可能な文字スタイルは図面内で定義されている文字スタイルのみのため、あらかじめ変更したいフォントを設定した文字スタイルを作成しておく必要があります(存在しない場合エラーが発生)。文字スタイルはAutoCAD VBAではTextStyleオブジェクトとして用意されており、TextStylesコレクションのAddメソッドを使うことで動的に作成することもできます。
 

文字サイズ(高さ)の取得と変更

テキストの文字サイズはText / MTextオブジェクトのHeightプロパティによって定義されています。

新規作成されたダイナミックテキストのHeightプロパティは、AddTextメソッドの引数として入力した文字の高さの値がそのまま設定されます。マルチテキストは新規作成時に横幅の設定しかできないため、文字サイズを指定の値にしたい場合は作成後に文字の高さを変える処理が別途必要になります。
 

位置の取得と変更

テキストの位置はText / MTextオブジェクトのInsertionPointプロパティによって定義されています。データの型としては座標が格納された要素数3の配列データのため、インデックスから各要素にアクセスすることで座標値の取得ができます。座標の変更はInsertionPointプロパティの要素に直接アクセスして値を変更することはできないので、配列ごと置き換える必要があります。

配列の要素には0にX座標、1にY座標、2にZ座標をWCS(ワールド座標系)基準でそれぞれ格納します。UCS(ユーザー座標系)基準での値にしたい場合は座標変換の計算が必要になります。
 

角度の取得と変更

テキストの角度はText /MTextオブジェクトのRotationプロパティによって定義されています。

Rotationプロパティの角度はラジアン単位のため、度単位で角度の取得や設定をしたい場合は、ラジアン⇔度の単位変換の計算を行わなければならないので注意が必要です。
 

 色の取得と変更

オブジェクトの色の取得と編集」ページを参照ください。

 

テキストの削除

Text / MTextオブジェクトはAcadObjectから継承されたオブジェクトのため、AcadObjectがもつDeleteメソッドを使用することができます。Deleteメソッドは実行したオブジェクト自信を削除するためのメソッドで、下記のように記載します。(※[Text] = 削除するText / MTextオブジェクト)

 icon-code  テキストの削除 

Call [Text].Delete

 

まとめ

今回の内容をまとめると以下のとおりです。

 ダイナミックテキストの操作はTextオブジェクトを使う
 マルチテキストの操作はMTextオブジェクトを使う
ダイナミックテキストとマルチテキストの作成方法は微小に違う
ダイナミックテキストとマルチテキストは共通のプロパティが多数存在する

 テキストの位置や値、サイズなどはプロパティを使うことで取得や変更が可能
 テキストの削除はDeleteメソッドを呼び出すだけ 

ダイナミックテキストは単一行かつ書式コードがないということもあり、かなり単純なオブジェクトとなっていますが、マルチテキストは少し複雑なオブジェクトとなっている(その分できることは多い)ので、ダイナミックテキスト→マルチテキストという流れで理解を深めるほうがスムーズにいきます。

本ページではテキストの編集方法としてプロパティ操作を行いましたが、どれもText / Mtext共通のプロパティであるため同じように扱うことができます。本ページには記載していませんが、マルチテキストでは行間やスペース幅、背景色の設定などができ、ダイナミックテキストでは尺度や文字の方向などの設定ができます。これらは各オブジェクトがもつ特有のプロパティとなっています。

 

メインページへ戻る
 

 関連書籍

 Autodesk公式リンク

参考:Text オブジェクト(ActiveX)
   MText オブジェクト(ActiveX)

2024年9月14日AutoCAD, VBA

Posted by Lic