nanoCAD 5 .NET 2024/11/17, 18, 2024/12/01
こちら↓を参考にさせて頂きました。寄稿された CAD 日記 様に感謝します。
BricsCAD® V23 の .NET(C#) でHello World![寄稿]|BricsCAD (Bricsys Japan) の中の人
※リンクできないときは、[Shift]キーを押しながら↑をクリックしてみて下さい。
使用しているのは、手元にあった Visual Sutudio 2017 のスクリーンショットです。
自分用の覚書です。
■ プロジェクトの作成
メニュー - [ファイル] - [新規作成] - [プロジェクト]
「クラスライブラリ(.Net Framework) 」を選択
左下の「フレームワーク」が .Net Framework 3.5 になっているのを確認 (nanoCAD 5 の場合)
名前(作成される dll 名)、ソリューション名(作成されるフォルダ名)、場所(保存、出力されるフォルダ名)を変更します。
とりあえず、デフォルトのままで続けます。
VB.NET の場合は、こちら↓
[ OK ] ボタンをクリックすると、こんな画面↓になります。
■ 参照の追加
右側の「ソリューション エクスプローラー」にある Classlibrary9 をマウス右クリック。
ポップアップルメニューから [追加] - [参照] をクリックします。
[参照] ボタンをクリックして
・C:¥Program Files (x86)¥Nanosoft AS¥nanoCAD en 5.0¥bin¥hostmgd.dll
・C:¥Program Files (x86)¥Nanosoft AS¥nanoCAD en 5.0¥bin¥hostdbmgd.dll
2つの dll を追加。チェックを付けて[OK]をクリックします。
「ソリューション エクスプローラー」から、hostdbmgd.dll を選択し、ローカルコピーを False にします。hostmgd.dll
も同様です。
(画像の順序が前後しているのは、ローカルコピーの変更を忘れていたからです)
COM 参照を使う場合は、
・nanoCAD Type Library 5.0
・OdaX 3.08 Type Library
にチェックを付けて、[OK] をクリックします。
後から、メニュー - [プロジェクト] - [参照の追加] で行えます。
■ コードの追加
参考にさせて頂いた CAD日記さん のコードをコピー。
Bricscad 用のところ(赤い波線)を、nanoCAD 用に変更します。
赤い波線が消えたので、大丈夫そうです。
参考にさせて頂いた BricsCAD® V23 の .NET(C#) でHello World![寄稿]|BricsCAD (Bricsys Japan) の中の人
のコードの[CommandMethod("Hello")] 以下をコピー&ペーストします。
■ ビルド
メニュー - [ビルド] - [ソリューションのビルド]
下の出力ウィンドウに「ビルド: 1 正常終了 ...」 と出ればOKです。
こちらの環境では
C:\Users\owner\source\repos\ClassLibrary9\ClassLibrary9\bin\Debug フォルダに作成されました。
※すでに nanoCAD にロードされているときは、ビルドエラーになります。
...ということは、毎回再起動が必要ということでしょうか?アンロード出来ないので、それはそれで、とても面倒ですね。
※下2つの Interop....dll は COM 参照をしているためと思われます。今回は不要です。
■ ロード
nanoCAD 5 のNETLOAD コマンドで、dll をロード
または、メニュー - [アプリケーション] - [アプリケーションのロード...]、コマンドラインだと appload[Enter]
で、dll を探して、[ロード] ボタンをクリック。ロードされます。
ドキュメントごとに毎回自動でロードする場合は、「スタートアップスイート」の下のカバンボタンをクリック。
スタートアップスイートに追加します。
ちなみに、
(load "C:\\Users\\owner\\source\\repos\\ClassLibrary9\\ClassLibrary9\\bin\\Debug\\ClassLibrary9.dll")
は、エラーにはなりませんが、ロードできませんでした。dll はロードできないようです。
なので、ncad.lsp に記述して自動ロード・・・はできません。
nanoCAD 5 では、-NETLOAD コマンドでもファイル選択ダイアログが表示されてしまいます。
(vl-load-com)
(if (findfile "dotNetTestVB.dll")
(progn
;;(setvar "filedia" 0)
(vl-cmdf "-netload" "dotNetTestVB.dll")
;;(setvar "filedia" 1)
)
)
※ nanoCAD 24.0 の -NETLOAD コマンドは期待どおりに動きます。
■ 実行
コマンドラインに、 hello[Enter] を入力すると、期待どおりに動きました。
■ VB の場合
こちら↓が参考になりますね。有り難いことです。
BricsCAD® V23 の .NET(Visual Basic)でHello World!|BricsCAD (Bricsys Japan) の中の人
自分で分かりやすいように場所と名前を変えています。
C# と同じように参照を追加、ローカルコピーを False にします。
すでに nanoCAD にロードされているときは、ビルドエラーになります。
下2つの Interop....dll は COM 参照をしているためと思われます。今回は不要です。
NETLOAD コマンドで dll をロードしてコマンドラインに HelloVB[Enter]を入力します。
さて、何に使うのか?
・LISP 関数の作成(LISP では遅い部分、実現できない機能を関数化)
↑nanoCAD 5.0 では、LISP 関数は認識されませんでした。nanoCAD 24.0 では認識されます。2024/12/01
・図面内部のブロックのイメージの作成(外部から作成するより速いかも)
・・・ でしょうか。
LISP の2倍程度速いです。
nanoCAD 5 では動きませんでしたが、nanoCAD 24 では、COM を使うと LISP より少し遅いくらいの速さでした。
外部(Delphi)から COM を使うより、メチャクチャ速いです。
以前(2015年頃)につくった BricsCAD 用 VB.NET
何かの参考になるかもしれません。
http://izawa-web.com/bcadnet/bcaddotnetvb.html
http://izawa-web.com/mdplot/mdplot.html
http://izawa-web.com/bcaptdll/bcaptdll.html
以下、2024/11/18
■ ターゲット CPU の変更
nanoCAD 5 は x86 にします。
ターゲット CPU を x86 にします。
デバッグ用の nanoCAD を登録すると、[ ▶ 開始] (F5) ボタンで起動できるようになります。
COM ですが、遅延バインディングだと nanoCAD 5 でも動きました。(意味があるのかどうかは別にして)
速さは、
23958 Entities found in 258 Milliseconds nanoCAD 5(遅延バインディング)
.NET そのままでは、
23958 Entities found in 69 Milliseconds
LISP で同じことをすると、
23958 Entities found in 107 Milliseconds
外部(Delphi)から COM を使うと、
23958 Entities found in 84343 Milliseconds