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

【AutoCAD】.NET API入門②|ポリラインを自動生成するカスタムコマンドの作り方

【AutoCAD】.NET API入門|ポリラインを自動生成するカスタムコマンドの作り方

この記事の難易度

AutoCADを使っていると、同じような形の図形を何度も作成したり、ルールに従って図面を描く場面が多いと思います。
そんなとき、C#とAutoCAD .NET APIを使えば「ポリライン」をプログラムで自動生成でき、作業効率を大幅にアップできます。

この記事では「ポリラインの基本的な作成方法」をサンプルコード付きでわかりやすく解説します。
また、繰り返し使う処理をまとめて効率化する「ユーティリティ化」についても触れます。

この記事のポイント
  • AutoCADにカスタムコマンドを追加してポリラインを自動生成する方法
  • C#でのサンプルコードと動作の流れ
  • 共通処理をまとめる「ユーティリティ化」で開発効率を向上

※事前準備でVisualStudioのインストールやファイルの設定が必要です。
 ファイルの作り方やライブラリの参照方法、実行手順などは過去の記事を参考にセットアップをお願いします。

スポンサーリンク

 

カスタムコマンドの基本

まずは基本の型のおさらいです。
AutoCADに独自のコマンドを追加するには、C#で CommandMethod 属性 を持つメソッドを定義します。

例えばコマンドラインで「HelloWorld」と表示する簡単なコマンドは以下の通りです。

C# HelloWorldコマンド(C#)
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コマンドの実行
こたろー
こたろー

この手順で、ポリラインを自動生成するコマンドを追加していきます。

 

ポリラインを作成するコマンド(基本)

コマンド開発の前にポリラインについて詳しく知りたい方は過去の記事を参照ください。
👉【AutoCADの基本】PLINEコマンドでポリラインを作図!初心者でも簡単マスター

ポリラインの作図コード

ポリラインは複数の点をつないで作成される図形です。

以下のサンプルコードでは、始点 (0,0) → (100,0) → (100,100) → (0,100) → 閉じるという四角形を自動生成します。このコマンドをクラスの中に入れて編集します。

ポリラインの作図コード(C#)
[CommandMethod("CreatePolyline")]
public void CreatePolyline()
{ 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); // ★★★★★ここに図形を追加する処理を書く★★★★★ // Polylineの作成 Polyline pline = new Polyline(); pline.AddVertexAt(0, new Point2d(0, 0), 0, 0, 0); pline.AddVertexAt(1, new Point2d(100, 0), 0, 0, 0); pline.AddVertexAt(2, new Point2d(100, 100), 0, 0, 0); pline.AddVertexAt(3, new Point2d(0, 100), 0, 0, 0); pline.Closed = true; // 閉じた図形にする // モデル空間に追加 btr.AppendEntity(pline); tr.AddNewlyCreatedDBObject(pline, true); // ★★★★★作図はここまで★★★★★ // 保存 tr.Commit(); }
}

このコードを実行すると、四角形のポリラインが自動生成されます↓

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

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

コードのポイント解説

ポリラインの作図で覚えておきたいのは以下の5点です。

ポリライン作図コードの解説
  • Polyline pline = new Polyline();
      新しいポリラインのオブジェクトを作成します。
  • pline.AddVertexAt(index, new Point2d(x, y), 0, 0, 0);
     ポリラインに頂点を追加します。
     index は頂点の順番、Point2d(x, y) が座標を示します。
     
     👉「この点を経由して線を作図してね」と伝えるイメージ!
  • pline.Closed = true;
     図形を閉じる(最後の点と最初の点を結ぶ)設定です。
     四角形や多角形を作るときにマスト!
  • btr.AppendEntity(pline);
     作ったポリラインをモデル空間に追加する命令です。 
     
    👉「このポリラインを図面に描画してね」と伝えるイメージ!
  • tr.AddNewlyCreatedDBObject(pline, true);
     追加した線分をトランザクション(AutoCADのデータベース)に登録します。
      
    👉 「作ったポリラインをAutoCADがちゃんと管理できるようにする処理」と覚えておけばOK!

とりあえずは、この5つの流れでポリラインが描かれる と覚えて大丈夫です。
TransactionBlockTableRecord などは「おまじない」と思ってコピペでOK!

こたろー
こたろー

特にpline.Closed = trueは忘れがちなので注意!

 

ポリライン自動作成の活用例

ポリラインは単なる「連続線」ですが、工夫次第で実務でも活用できます。
ここではいくつかの事例を紹介します。

ポリライン自動作成の活用例
  • 部屋の外形を自動生成して図面のたたき台に
     
      ポリラインを使えば、建屋の外形を自動で作図できます。 
     👉繰り返し間取りを検討する際に便利です!打合せ用の下書きにも活用できます。
        AIと組み合わせて配置図を自動生成している会社もありますよ!
     
  • ロゴやマークを自動で描画
     
     ポリラインを使えば、会社ロゴやシンボルマークをCADに直接描画できます。
     自社のロゴを簡略化してポリラインで表現する企業は多いです。
     図面タイトルや社内テンプレートに自動配置もできますよ。 
     
  • 設計補助線・ガイドラインの自動生成
     
      ポリラインは、補助線やガイドラインにも応用できます。
     ・構造柱の通り芯を一括作成
     ・区画割りの基準線を自動生成
      ・レイアウト図の基準矩形を一瞬で描画
     ⋯など
     

 

ユーティリティ化(コードの共通化)で効率UP!

線分編と同様、ポリラインの作成コードでもユーティリティ化(コードの共通化)をすると共通処理を1つのメソッドにまとめて再利用できます。

今回はブロックテーブルを宣言してデータベースに処理を書き込む工程を例にします。
いつも同じコードなのでまとめてしまいます↓

ユーティリティ化した関数
// ★★★★★ユーティリティ化した関数の追加★★★★★
public static void AddEntityToModelSpace(Entity ent, Database db, Transaction tr)
{ BlockTable bt = (BlockTable)tr.GetObject(db.BlockTableId, OpenMode.ForRead); BlockTableRecord btr = (BlockTableRecord)tr.GetObject(bt[BlockTableRecord.ModelSpace], OpenMode.ForWrite); btr.AppendEntity(ent); tr.AddNewlyCreatedDBObject(ent, true);
}

この関数を使えば、コマンド側は以下のようにスッキリ書けます。

コマンドにユーティリティ関数を追加
[CommandMethod("CreatePolyline2")]
public void CreatePolyline2()
{ Document doc = Application.DocumentManager.MdiActiveDocument; Database db = doc.Database; using (Transaction tr = db.TransactionManager.StartTransaction()) { Polyline pline = new Polyline(); pline.AddVertexAt(0, new Point2d(0, 0), 0, 0, 0); pline.AddVertexAt(1, new Point2d(200, 0), 0, 0, 0); pline.AddVertexAt(2, new Point2d(200, 50), 0, 0, 0); pline.Closed = true; AddEntityToModelSpace(pline, db, tr); tr.Commit(); }
}

このようにユーティリティ化すると、簡素化されてコーディングの効率も上がります!

こたろー
こたろー

行数が減ってシンプルになった!使い回しもOKです!

 

まとめ

今回は「【AutoCAD】.NET API入門|ポリラインを自動生成するカスタムコマンドの作り方」として、C#を使ったポリラインの基本的な作図方法を紹介しました。

・ポリラインは AddVertexAt で頂点を追加して作成する
 
・コードの最後にClosed = true で多角形として閉じることができる
  
・共通処理(Transaction開始、BlockTable取得など)を関数にまとめると保守性UP!

ポリラインは建築・設備図面で頻繁に使われる基本図形です。
自動生成できるようになると、矩形・配管ルート・領域の作図などに役立ちます

こたろー
こたろー

以上、こたろーでした。 


スポンサーリンク

コメントを残す

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

CAPTCHA