この記事の難易度
AutoCADを使っていると、図面内に文字を繰り返し入力する場面は非常に多いです。
例えば、部品番号・寸法補足・注記や備考など。
そんなとき、C#とAutoCAD .NET APIを使えば DBText や MText をプログラムで自動生成 でき、文字入力作業を効率化できます。
この記事では「文字(DBText・MText)の基本的な作成方法」をサンプルコード付きでわかりやすく解説します。
- AutoCADにカスタムコマンドを追加して文字を自動生成する方法
- C#での DBText・MText のサンプルコード
- DBText・MTextの違いと主な利用方法
※事前準備でVisualStudioのインストールやファイルの設定が必要です。
ファイルの作り方やライブラリの参照方法、実行手順などは過去の記事を参考に設定下さい。
👉過去の.NET APIコーディングに関する記事はこちら
・【AutoCAD】.NET API入門①|線分を自動生成する方法
・【AutoCAD】.NET API入門②|ポリラインを自動生成する方法
・【AutoCAD】.NET API入門③|円・楕円を自動生成する方法
・【AutoCAD】.NET API入門④|円弧を自動生成するカスタムコマンドの作り方
カスタムコマンドのおさらい
まずはおさらいです。AutoCADに独自のコマンドを追加するには、C#で CommandMethod 属性 を持つメソッドを定義します。
例えばコマンドラインで「HelloWorld」と表示する簡単なコマンドは以下の通りです。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
//AutoCAD用のライブラリ追加
using Autodesk.AutoCAD.ApplicationServices;
using Autodesk.AutoCAD.EditorInput;
using Autodesk.AutoCAD.Runtime;
namespace HelloWorld
{ public class Class1 {
//コマンドの作成 [CommandMethod("HelloWorld")] public void HelloWorld() { Editor ed = Application.DocumentManager.MdiActiveDocument.Editor; ed.WriteMessage("\nHelloWorld!"); } }
}CommandMethod 属性を使えば、AutoCADのオリジナルコマンドとして登録できます。
このコードをVisualStudioでリビルドしてから、NETLOADコマンドで作成したdllファイルを読み込みます。

次にコマンドラインで 「HelloWorld」と入力するとメッセージが表示されます↓


この流れで、今回は円弧を作図するカスタムコマンドを追加していきます。
DBText(単一行文字)を作成するコード
DBText は シンプルな1行文字 を作成するときに使います。
今回は「座標(10, 20)に”部品A-001”」という単一行文字を挿入します。
[CommandMethod("CreateDBText")]
public void CreateDBText()
{ Document doc = Application.DocumentManager.MdiActiveDocument; Database db = doc.Database; using (Transaction tr = db.TransactionManager.StartTransaction()) { BlockTable bt = (BlockTable)tr.GetObject(db.BlockTableId, OpenMode.ForRead); BlockTableRecord btr = (BlockTableRecord)tr.GetObject(bt[BlockTableRecord.ModelSpace], OpenMode.ForWrite); // ★★★★★ 文字の作成 ★★★★★ DBText text = new DBText(); text.Position = new Point3d(10, 20, 0); // 挿入位置 text.Height = 5; // 文字高さ text.TextString = "部品A-001"; // 表示する文字列 // モデル空間に追加 btr.AppendEntity(text); tr.AddNewlyCreatedDBObject(text, true); // ★★★★★ ここまで ★★★★★ tr.Commit(); }
}自作コマンドを実行するとこうなります↓

※NETLOADコマンドでdllファイルをロードすると作成したコマンドが表示されます。

タグナンバーをユーザーに設定してもらったり、連番にしたりもできますよ!
DBTextの作図で覚えておきたいのは以下の通りです。
- ① DBText text = new DBText();
新しい単一行文字オブジェクトを生成します。 - ② text.TextString = “部品A-001”;
ここで文字列の内容を入力します。 - ③ text.Position = new Point3d(10, 20, 0);
文字の挿入位置を指定します。座標 (10,20) に配置されます。 - ④ text.Height = 5;
文字の高さを指定します。 - ⑤ btr.AppendEntity(text);
tr.AddNewlyCreatedDBObject(text, true);
作成した文字をモデル空間に登録します。

他にも文字の回転角度やフォントについても設定できます。
先ほどのコード以外にも設定できるものがあります↓
- text.Rotation ・・・ 文字の回転角度
例)30°回転させる
text.Rotation = Math.PI / 6; - text.TextStyleId ・・・ 文字スタイルの指定
例)現在のスタイルを適用
text.TextStyleId = db.Textstyle; - text.HorizontalMode ・・・ 水平方向の基準位置
例)中央基準で配置
text.HorizontalMode = TextHorizontalMode.TextCenter;
他にはTextLeft(左寄せ)、TextRight(右寄せ)、TextMid(文字幅の中央基準)などもあります。 - text.VerticalMode ・・・ 垂直方向の基準位置
例)上下中央基準で配置
text.VerticalMode = TextVerticalMode.TextVerticalMid;
他にはTextBase(ベースライン基準)、TextBottom(下寄せ)、TextTop(上寄せ)などもあります。
⚠ 注意:縦書きではなく 上下の揃え制御 です。
MText(複数行文字)の自動生成するコード
MText は 複数行の文字(改行あり)を作成したいときに使います。
今回は「座標(20, 10)に複数行のテキスト」を挿入します。
[CommandMethod("CreateMText")]
public void CreateMText()
{ Document doc = Application.DocumentManager.MdiActiveDocument; Database db = doc.Database; using (Transaction tr = db.TransactionManager.StartTransaction()) { BlockTable bt = (BlockTable)tr.GetObject(db.BlockTableId, OpenMode.ForRead); BlockTableRecord btr = (BlockTableRecord)tr.GetObject(bt[BlockTableRecord.ModelSpace], OpenMode.ForWrite); MText mtext = new MText(); mtext.Contents = "これはMTextのテストです。\n複数行表示可能"; mtext.Location = new Point3d(20, 10, 0); // 挿入位置 mtext.TextHeight = 5; // 文字高さ mtext.Width = 60; // 幅(折り返し制御) btr.AppendEntity(mtext); tr.AddNewlyCreatedDBObject(mtext, true); tr.Commit(); }
}自作コマンドを実行するとこうなります↓

※NETLOADコマンドでdllファイルをロードすると作成したコマンドが表示されます。
DBTextの作図で覚えておきたいのは以下の通りです。
- ① MText mtext = new MText();
複数行文字オブジェクトを生成します。 - ② mtext.Contents = “〜”;
改行文字\nで複数行のテキストを指定できます。 - ③ mtext.Location = new Point3d(20, 10, 0);
文字の挿入位置を指定します。今回は座標 (20,10) に配置されます。 - ④ mtext.Width = 60;
折り返し幅を指定し、整形表示が可能です。 - ⑤ btr.AppendEntity(mtext);
tr.AddNewlyCreatedDBObject(mtext, true);
作成した文字をモデル空間に登録します。
先ほどのコード以外にも設定できるものがあります↓
- 文字スタイルの指定
例)現在のスタイルを適用
mtext.TextStyleId = db.Textstyle; - 文字の回転角度
例)30°回転させる
mtext.Rotation = Math.PI / 6; - 配置(基準位置)
例)中央基準で配置
mtext.Attachment = AttachmentPoint.MiddleCenter;
他にもTopLeft(左上揃え)、TopCenter(中央上揃え)、BottomRight(右下揃え) などもあります。 - 文字幅(折り返し制御)
例)60の幅で自動改行
mtext.Width = 60; - 背景マスク(文字枠)
例)背景枠を有効化し、文字周囲に余白を持たせる
mtext.BackgroundFill = true;
mtext.BackgroundScaleFactor = 1.2;

MTextはDBTextよりも柔軟です。
次の章ではその使い分けについて説明します!
DBText と MText の使い分け
これまでにDBTextとMTextのコードを説明しました。それぞれの特徴について軽く説明すると⋯
- DBText:単一行、軽量(座標ラベル、機器番号、寸法値などでよく使う)
- MText:複数行、リッチテキスト対応、背景枠可(注記、凡例、タイトル、説明文などでよく使う)
次に、DBTextとMTextでの各メソッドをまとめます。
中には同じような操作なのに違うメソッド名のものもあるので注意して下さい↓
| 項目 | DBText | MText |
|---|---|---|
| 高さ | Height | TextHeight |
| 回転角度 | Rotation | Rotation |
| フォント | TextStyleId | TextStyleId |
| 揃え | HorizontalMode / VerticalMode + AlignmentPoint | Attachment |
| 内容 | TextString | Contents(改行や書式OK) |
| 枠 | ― | WidthとBackgroundFill |
| 背景マスク | ― | BackgroundFill = true |

過去の記事でも普通のテキストとマルチテキストの違いを
まとめているので参考にしてみて下さい!
まとめ
今回は 「【AutoCAD】.NET API入門⑤|文字(DBText・MText)を自動配置するカスタムコマンドの作り方」 を解説しました。
・DBText:単一行文字、軽量で座標ラベルや番号に最適
部品番号や寸法値、座標ラベルなど軽量な注記に最適
(例:text.TextString = “部品A-001”;)
・MText:複数行文字、注釈や凡例に最適
改行、幅指定、背景枠などを持たせられるため、注記や凡例に最適
(例:mtext.Contents = “これはMTextのテストです。\n複数行表示可能”;)
・MTextでは背景マスク(文字枠)や自動折り返しなど機能が多い
AutoCADでの文字入力は非常に多い作業のひとつですが、.NET APIを使えば 部品番号や注記を一括自動生成 できて、作図効率を大幅に向上させられます。
ぜひ本記事のコードをテンプレート化して、日常の図面作成や自動化に役立ててみてください。

以上、こたろーでした。
