【AutoCAD】ダイナミックブロックまとめ記事10選 について図面がダウンロードできない不具合を修正しました。

【AutoCAD】.NET API入門⑤|文字(DBText・MText)を自動配置するカスタムコマンドの作り方

【AutoCAD】.NET API入門⑤|文字(DBText・MText)を自動配置するカスタムコマンドの作り方

この記事の難易度

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」と表示する簡単なコマンドは以下の通りです。

C# 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ファイルを読み込みます。

NETLOADコマンドでdllファイル読み込み
NETLOADコマンドでdllファイル読み込み

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

HELLOWORLDコマンドの実行
HELLOWORLDコマンドの実行
こたろー
こたろー

この流れで、今回は円弧を作図するカスタムコマンドを追加していきます。

 

DBText(単一行文字)を作成するコード

DBText は シンプルな1行文字 を作成するときに使います。

DBText作図コード(C#)

今回は「座標(10, 20)に”部品A-001”」という単一行文字を挿入します。

DBTextの作図コード(C#)
[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(); }
}

自作コマンドを実行するとこうなります↓

CreateDBTextコマンド 実行結果
CreateDBTextコマンド 実行結果

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

こたろー
こたろー

タグナンバーをユーザーに設定してもらったり、連番にしたりもできますよ!

コードのポイント解説

DBTextの作図で覚えておきたいのは以下の通りです。

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(上寄せ)などもあります。
    ⚠ 注意:縦書きではなく 上下の揃え制御 です。
Horizontal / Vertical の設定をするとテキストが原点になってしまう⋯

Horizontal / Vertical の設定を有効にする場合は、基準点を AlignmentPoint で指定します。

例)text.AlignmentPoint = new Point3d(60, 60, 0);
この例では「座標 (60,60) を文字の中央基準点として配置」しています。

 

MText(複数行文字)の自動生成するコード

MText は 複数行の文字(改行あり)を作成したいときに使います。

MText作図コード(C#)

今回は「座標(20, 10)に複数行のテキスト」を挿入します。

MTextの作図コード(C#)
[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(); }
}

自作コマンドを実行するとこうなります↓

CreateMTextコマンド 実行結果
CreateMTextコマンド 実行結果

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

コードのポイント解説

DBTextの作図で覚えておきたいのは以下の通りです。

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の文字スタイル・幅・背景枠など)

先ほどのコード以外にも設定できるものがあります↓

  • 文字スタイルの指定
    例)現在のスタイルを適用
      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での各メソッドをまとめます。
中には同じような操作なのに違うメソッド名のものもあるので注意して下さい↓

項目DBTextMText
高さHeightTextHeight
回転角度RotationRotation
フォントTextStyleIdTextStyleId
揃えHorizontalMode / VerticalMode + AlignmentPointAttachment
内容TextStringContents(改行や書式OK)
WidthとBackgroundFill
背景マスクBackgroundFill = true
DBTextとMTextのメソッドについて
こたろー
こたろー

過去の記事でも普通のテキストとマルチテキストの違いを
まとめているので参考にしてみて下さい!

 

まとめ

今回は 「【AutoCAD】.NET API入門⑤|文字(DBText・MText)を自動配置するカスタムコマンドの作り方」 を解説しました。

・DBText:単一行文字、軽量で座標ラベルや番号に最適
 部品番号や寸法値、座標ラベルなど軽量な注記に最適
 (例:text.TextString = “部品A-001”;)
 
・MText:複数行文字、注釈や凡例に最適
 改行、幅指定、背景枠などを持たせられるため、注記や凡例に最適
 (例:mtext.Contents = “これはMTextのテストです。\n複数行表示可能”;)
   
・MTextでは背景マスク(文字枠)や自動折り返しなど機能が多い

AutoCADでの文字入力は非常に多い作業のひとつですが、.NET APIを使えば 部品番号や注記を一括自動生成 できて、作図効率を大幅に向上させられます。

ぜひ本記事のコードをテンプレート化して、日常の図面作成や自動化に役立ててみてください。

こたろー
こたろー

以上、こたろーでした。 


スポンサーリンク

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA