Hello Worldシリーズの最終回は、みんな知ってる.NETプログラミングで、C#で組んでみようじゃないかということ。以下BRXやTXがプロまたはマニア向けとしたならば、とっても扱いやすいからね。
BricsCAD『BRX』でHello World!
Teigha eXtension(略してTX)がデキター!
おいらとしても知識なくイチから取り組むわけにもいかないし、英語のドキュメントを読み解く気合いもないので、他の人が書いたブログを見て自分でやってみて、焼き直したような感じ。最新のBricsCAD でやっていることと文字を追加していることくらいは新鮮味があるかしら。
開発環境はVisualStudio 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.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と同じなんでネットからサンプル探してサクっと書けた。
初っ端のVisualStudio新規プロジェクトでちょっとつまずいたのは、クラスライブラリ(.NET Framework)じゃなくて、ただのクラスライブラリとしてしまったこと。ターゲットフレームワークに.NET Coreや.NET Standaradしか出なくて、ハテ?となってそのへんの用語を調べるも何やら新しいものだということしかわからず、行き詰ったかとあきらめそうになったところで、新しいプロジェクトの作成のリストを下にスクロールしたら目的のものが見つかって解決。C++使いのおいらにとって、.NET Coreや.NET Standaradは他人事だったけど、今の仕事ではがっつり使うことになりそうなんで、その一端をのぞくことができてよかったかね。
APPLOAD問題にも遭遇。作ったDLLをAPPLOADで指定して、ロードのチェックを入れようとクリックしてもチェック付かず。DLLのロードはされている。なんのこっちゃとサポートに問い合わせようかとも考えたが、ググっているうちに真理が判明。.NETのプログラムはアンロードができないので、チェックボックスにチェックを入れない仕様である。NETLOADが.NETプログラムをロードするためのコマンドであり、こいつはDLLを指定して終わりだからアンロードもできないって訳だ。
なーんて感じで、メインのHello Worldを出すという要件以外にいろんなハマりがあって半日弱の時間を使ってしまったとさ。やれやれ。