BricsCAD® V23 の .NET(C#) でHello World![寄稿]
プログラムでの開発で各種の言語を使いはじめる際に「Hello world」と表示してみることで最低限の流れを把握する。というお約束がありますが、「CAD日記」様より 『BricsCAD の TX / BRX での解説』に続き .NET(C#)での「Hello World! 」もご寄稿いただきましたので紹介させていただきます。
BricsCAD の各 API での Hello world!
API 毎の Hello World は以下になります。
.NET(C#)で HelloWorld!:本記事
必要な環境
BricsCAD の .NET 開発で必要になる環境は以下のとおりです。
BricsCAD V23
.NET開発環境
BricsCAD V23は、.NET Frameworkバージョン4.8を使用しています。.NET プラグイン開発には Visual Studio 2019 以降 (Visual Studio Community Edition を含む) を推奨。
以下、寄稿内容です。掲載にあたり若干文体等を整形・追記をしています。
Hello Worldシリーズの最終回は、みんな知ってる.NETプログラミングで、C#で組んでみようじゃないかということ。BRX や TX がプロまたはマニア向けとしたならば、とっても扱いやすいからね。
おいらとしても知識なくイチから取り組むわけにもいかないし、英語のドキュメントを読み解く気合いもないので、他の人が書いたブログを見て自分でやってみて、焼き直したような感じ。最新の BricsCAD でやっていることと文字を追加していることくらいは新鮮味があるかしら。
開発環境は Visual Studio 2019(C#)で、BricsCAD V23を動かす前提。
SDK は不要で、BricsCAD さえインストールしてあればよい。
※BRXとTRXだと、開発者登録してSDKをダウンロードしなければならないんで、この点だけでもイージー。
1.Visual Studioで新規プロジェクト作成
クラスライブラリ(.NET Framework)を選択して次へ。
プロジェクト名と場所を任意に指定。
フレームワークは .NET Framework 4.8。
2.参照の追加
BricsCADをインストールしたフォルダを参照して、BrxMgd.dllとTD_Mgd.dll を指定する。
※追加したら、ソリューションエクスプローラの参照の中から今追加した2つについて、「ローカルにコピー」を False に切り替えておく。
3.プロジェクトのプロパティをいじる
『ビルド⇒対象プラットフォーム』でx64とする。
『デバッグ⇒開始動作』で外部プログラムの開始として、以下BricsCADのexeを指定。
C:\Program Files\Bricsys\BricsCAD V23 ja_JP\bricscad.exe
4.コードを書く(コピペで流し込む)
Class.csの中身を以下のようにする。コマンドラインに Hello World!と出しつつ、カレントデータベースに文字を追加している。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Bricscad.Runtime;
using Teigha.DatabaseServices;
using Teigha.Geometry;
using Bricscad.ApplicationServices;
using Bricscad.EditorInput;
using Teigha.Runtime;
namespace DotNetTest
{
public class Class1
{
[CommandMethod("Hello")]
public void HelloWorld()
{
Document doc = Application.DocumentManager.MdiActiveDocument;
Editor ed = doc.Editor;
using (Transaction tr = doc.TransactionManager.StartTransaction())
{
Database db = doc.Database;
ObjectId id = SymbolUtilityServices.GetBlockModelSpaceId(db);
BlockTableRecord model = tr.GetObject(id, OpenMode.ForWrite) as BlockTableRecord;
DBText ntext = new DBText();
ntext.SetDatabaseDefaults();
ntext.Height = 20;
Point3d pos = new Point3d(200, 100, 0);
ntext.Position = pos;
ntext.TextString = "Hello World !";
model.AppendEntity(ntext);
ed.WriteMessage("Hello World !");
tr.Commit();
}
}
}
}
5.ビルドする
ビルド結果は、bin\Debugの中にDotNetTest.dllのような名前で出来上がる。
6.BricsCADで動作させる
F5 のデバッグ実行で BricsCAD が起動するので、NETLOAD コマンドから DotNetTest.dll を指定。コマンドHelloを実行すると、はいこの通り。
以下余談。
文字を配置するのに、最初マルチテキスト(MText)でやったらうまく描画できなくてノーマルテキスト(DBText)に変更した。幅系の情報を書き込まなきゃいけなかったのかな。。深い入りするところではないのでスルー。
モデルのブロックテーブルにnewしたエンティティを追加するなんてところは、BRXやTXと同じなんでネットからサンプル探してサクっと書けた。
初っ端の Visua lStudio 新規プロジェクトでちょっとつまずいたのは、クラスライブラリ(.NET Framework)じゃなくて、ただのクラスライブラリとしてしまったこと。
ターゲットフレームワークに.NET Coreや.NET Standaradしか出なくて、ハテ?となってそのへんの用語を調べるも何やら新しいものだということしかわからず、行き詰ったかとあきらめそうになったところで、新しいプロジェクトの作成のリストを下にスクロールしたら目的のものが見つかって解決。
C++使いのおいらにとって、.NET Coreや.NET Standaradは他人事だったけど、今の仕事ではがっつり使うことになりそうなんで、その一端をのぞくことができてよかったかね。
APPLOAD 問題にも遭遇。作った DLL を APPLOAD で指定して、ロードのチェックを入れようとクリックしてもチェック付かず。DLL のロードはされている。なんのこっちゃとサポートに問い合わせようかとも考えたが、ググっているうちに真理が判明。.NETのプログラムはアンロードができないので、チェックボックスにチェックを入れない仕様である。NETLOADが.NETプログラムをロードするためのコマンドであり、こいつはDLLを指定して終わりだからアンロードもできないって訳だ。
なーんて感じで、メインの Hello World を出すという要件以外にいろんなハマりがあって半日弱の時間を使ってしまったとさ。やれやれ。
寄稿者: CAD日記 さん
以上が、寄稿していただいた BRX を使用した Hello World の例となります。
BricsCAD の .NET API の特徴
BricsCAD の .NET API によるアプリケーション開発は、Lite や Shape で利用できない制限はありますが、C# や VB での開発ができ、VBA アプリケーションの移行先として利用することができます。(BricsCAD は VBAにも対応していますが、VBA 自体は microsoft の開発が終了したものなので更新されません。)
また、同じソースコードを使用して、BricsCAD と AutoCAD の両方をターゲットとするアセンブリを構築することが可能です。名前空間の違いを解決する一般的なテクニックは、ターゲットアプリケーションプラットフォームによって異なる解決をする短い名前空間エイリアスを使用することです。
BricsCAD V23 - Developer Reference をご参照ください。
なお、BricsCAD 独自の機能に対する API も整備されています。
Linux/Macでの .NET API
BricsCAD の .NET API は Windows OS環境のみが対象になっているため利用できません。
Linux/Mac でAPIを使用した開発をする場合は、Lisp、DCL、DIESEL、BRX のいづれかをご利用ください。
BRX のサンプルプログラム
BricsCAD をインストールしたフォルダの中に APIというフォルダがあります。その中の dotNetフォルダに、 .NETのサンプルプログラムがありますので、眺めてみください。内容は README.txt を参照
では。
#CAD #CADカスタマイズ #DWG #API #BricsCAD