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

【AutoCAD】.NET API入門③|円、楕円を自動生成するカスタムコマンドの作り方

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

この記事の難易度

AutoCADを使っていると、円や楕円を繰り返し書く作図することが多いと思います。
例えば、ボルトの穴、配管の断面、家具や機器のレイアウトなど。

そんなとき、C#とAutoCAD .NET APIを使えば「円や楕円」をプログラムで自動生成でき、作業効率を大幅にアップできます。

この記事では「円と楕円の基本的な作成方法」をサンプルコード付きでわかりやすく解説します。

この記事のポイント
  • AutoCADにカスタムコマンドを追加して円・楕円を自動生成する方法
  • C#でのサンプルコードと動作の流れ
  • 応用例(部品配置や図面テンプレートへの活用など)

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

 

カスタムコマンドのおさらい

まずはおさらいです。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コマンドの実行
こたろー
こたろー

この手順で、円や楕円を自動生成するコマンドを追加していきます。

 

円を作成するコマンド(基本)

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

円の作図コード

次のコードは、中心座標 (50,50) 半径 30 の円を自動生成するサンプルです。

円の作図コード(C#)

[CommandMethod("CreateCircle")]
public void CreateCircle()
{
    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);

        // ★★★★★ここに図形を追加する処理を書く★★★★★
        // 円の作成
        Circle circle = new Circle();
        circle.Center = new Point3d(50, 50, 0); // 中心座標の設定
        circle.Radius = 30;                     // 半径の設定

        // モデル空間に追加
        btr.AppendEntity(circle);
        tr.AddNewlyCreatedDBObject(circle, true);
        // ★★★★★ ここまで ★★★★★

        // 保存
        tr.Commit();
    }
}

このコードを実行すると、座標(50,50)に半径30の円が自動生成されます↓

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

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

コードのポイント解説

円の作図で覚えておきたいのは以下の3点です。

円作図コードの解説
  • Circle circle = new Circle();
      新しい円のオブジェクトを作成します。
  • circle.Center = new Point3d(50, 50, 0);
     中心座標を指定しています。座標点(50, 50, 0)
     👉「この点を中心に作図してね」と伝えるイメージ!
  • circle.Radius = 30;
     半径を設定しています。今回の場合半径は30となります。

 

楕円を作成するコマンド(基本)

楕円の作図コード

次は楕円です。中心 (60,50)、長軸方向に半径50、短軸に半径20の楕円を作成します。

楕円の作図コード(C#)

[CommandMethod("CreateEllipse")]
public void CreateEllipse()
{
    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);

        // ★★★★★ 図形の作成処理 ★★★★★
        Point3d center = new Point3d(60, 50, 0);
        Vector3d majorAxis = new Vector3d(50, 0, 0); // 長軸方向ベクトル
        double radiusRatio = 20.0 / 50.0;           // 短軸 / 長軸 の比率

        Ellipse ellipse = new Ellipse(center, Vector3d.ZAxis, majorAxis, radiusRatio, 0, 2 * Math.PI);

        // モデル空間に追加
        btr.AppendEntity(ellipse);
        tr.AddNewlyCreatedDBObject(ellipse, true);
        // ★★★★★ ここまで ★★★★★

        tr.Commit();
    }
}

このコードを実行すると、指定した楕円が自動生成されます↓

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

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

コードのポイント解説

楕円の作図で覚えておきたいのは以下の3点です。

円作図コードの解説
  • Vector3d majorAxis = new Vector3d(50, 0, 0);
    楕円の長軸方向と長さを設定します。
    👉 今回の場合はx軸方向に長さ50の楕円になります。
  • double radiusRatio = 20.0 / 50.0;
    短軸 / 長軸 の比率の比率です。
    👉 今回の場合はx軸方向に長さ50、y軸方向に長さ20の楕円になります。
  • Ellipse ellipse = new Ellipse(center, Vector3d.ZAxis, majorAxis, radiusRatio, 0, 2 * Math.PI);
    新しい楕円を作成するコンストラクタ

    center : 中心座標
    Vector3d.ZAxis : 楕円の法線ベクトル(XY平面上ならZ軸)
    majorAxis : 長軸方向と長さ
    radiusRatio : 短軸 / 長軸 の比率
     
    👉ちなみに引数の最後の(0, 2 * Math.PI)はそれぞれ、開始角度終了角度です。
      0 → 開始角度 = 0ラジアン(=0°、X軸の正方向)
      2 * Math.PI → 終了角度 = 2πラジアン(=360°)
もしmajorAxis = new Vector3d(100, 100, 0)にしたらどうなる??

斜め45°方向に長さ √(100²+100²)=141.4 のベクトルということになります。
つまり、長軸が斜めに傾いた楕円になります。

 

円・楕円 自動作成の活用例

実務では以下のように活用できます。

  • 配管の断面図を自動生成(口径や厚みなどの規格をあらかじめ設定しておく)
  • 家具や設備の配置図のテンプレート化(楕円で机・椅子を表現)
  • ボルト穴や機械部品のパターン化(規格をあらかじめ設定しておく)
  • レイアウト図のチェック用補助図形(楕円で可動範囲を表現など)
こたろー
こたろー

配管やボルト穴は企画が決まっているのでよく使います
ユーザーで規格を選択させるプログラムを作ると便利です!

 

まとめ

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

・円は Circle クラス、楕円は Ellipse クラスを使う
 
・円は「中心座標」「半径」を指定
 楕円は「中心」「長軸ベクトル」「半径比」を指定するのがポイント
   
・部品配置やレイアウトなど実務に応用できる場面が多数

次回は「矩形」や「テキスト」の自動生成についても解説していきます。

こたろー
こたろー

以上、こたろーでした。 


スポンサーリンク

コメントを残す

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

CAPTCHA