■ nanoCAD 5 メモ
 2024/07/07 f.izawa


nanoCAD 5 を使って良いのか?

 ・・・と思いながら試用しています。(メインの CAD は、BricsCAD V20 です)
 dwg / dxf の読み書きは AutoCAD 互換と呼ばれる他の CAD と同じライブラリ使っているので、問題ないかと思います。
 2013
形式の DWG/DXF を読み書ききます。
 サポート OS は Winodos XP, 8 ですが、Windows 10, 11 でも問題なく動iいています。

 DWGDXF を扱える CAD は多いですが、内部で独自のファイル形式に変換しているどの CAD よりも再現性が良く、扱いやすいと思います。

 AutoCAD 、その他の CAD と同じフォントファイル、線種ファイル を使うと線の尺度が異なるくらいで、
 ほぼ同じように表示されます。印刷設定もそのまま使えます。

 2018 年に使った時の感想として某 BBS に「DraftSight より軽くて速い」と書き込んでいます。
 軽くて速いかというとそうでもなく、BricsCAD と比べた場合、起動も読み込みも、コマンド、LISP のロード、実行も遅いようです。
 日本語化した場合、起動が若干遅くなるようです。

■ 他のCAD (AutoCAD, BricsCAD ... ) で開くと、「プロキシ情報」のダイアログが表示される

 nanoCAD で保存すると、プロキシグラフィックが追加されることがあります。
 これは、nanoCAD で新規に作成した図面だけなく、他のCAD の図面を読み込み、保存しても追加されることがあります。
 どうも nanoCAD で作成した寸法、ノート(注釈、引出線)、テーブル図形があるとそうなるようです。

 AutoCAD, BricsCAD で開く可能性がある場合は、気を付けたほうが良いでしょう。
 ちなみに、IJCAD では表示されません。 



 回避方法ですが、2つあります。
 1:WBLOCK コマンドで、図面全体を書き出します。2013 DWG 形式でも保存できます。
  ただ、保存先とファイル名を指定する必要があるため少し面倒です。
 2:SAVEAS コマンドで名前を変えて保存。ファイル形式として 「R11 互換形式」で保存します。
  R11(R12) 形式でサポートされていない図形は、変換または削除されます。
  ファイル名をそのまま使えるので、手軽です。

■ コードページ(DWGCODEPAGE) の問題

 nanoCAD の規定値は ANSI_1251(キリル言語)。
 2023 Nanosoft AS に変わってからは、ANSI_1252(西ヨーロッパ言語)になっています。
 ODA File Converter で古い形式で DWG -> DXF 変換すると、文字化けすることがあります。
 ユニコードに対応した 2007 形式であれば、問題ないと思われます。

 文字が正しく表示されない時は、システム変数 DWGCODEPAGE を確認します。
 メモ帳で DXF ファイルを開き、$DWGCODEPAGE を検索。
 その数行下にある ANSI_xxxxANSI_932 に変えて保存。
 CAD でその DXF ファイルを開くと正常に表示される。・・・はず。です。

 テンプレートファイルを nanoCAD デフォルトのものではなく、日本語版 CAD のものを使用すると解決します。
 テンプレートファイルの場所は、
 メニュー-[ツール]-[オプション] または [Ctrl]+[9] でオプションダイアログを表示。
 「標準ディレクトリ」の中に「テンプレートファイルの場所」があります。
 既定値では、<C:\Users\owner\AppData\Roaming\Nanosoft AS\nanoCAD Int 5.0\Templates>です。

■ ノート、テーブル図形

 ノート(注釈、引出線)は、多機能で簡単、非常に便利です。
 テーブルは、Excel のアクティブなセルのデータをそのまま表として取り込めたりします。
 が、いずれも nanoCAD 独自の図形のようです。

 IJCAD では、ACAD PROXY ENTITY として読み込まれ、そのままでは編集不可。分解する必要があります。
 BricsCAD ではプロキシ情報のダイアログが表示され、図形としては何も表示されなかったりします。
 他の CAD で開く可能性がある場合は、分解しておくほうが良いと思います。

 ちなみに、AutoCAD 他の CAD で作成した引出線は、nanoCAD では、LEADER + MTEXT として読み込まれます。
 矢印の大きさは、変更できません。(プロパティーに出てこない)

 AutoCAD 他の CAD で作成したテーブル(表)は、nanoCAD では、AutoCAD Table として読み込まれます。
 そのままでは編集できません。分解する必要があります。 


■ [Shift] キーで一時的に直交モード反転
 
 座標を指示する時に、[Shift] キーを押している間、一時的に直交モードが反転します。
 BricsCAD と同じで、非常に便利です。

■ 短縮コマンド、エイリアス

 短縮コマンド、エイリアスは、nCad,pgp ファイルにあります。
 nanoCAD 5 を再起動すると、反映されます。

TEXT, MTEXT の文字列編集

 TEXT 文字列のダブルクリックで、「文字設定ダイアログ」が表示されます。
 文字入力で[Enter]キーを押すと終了するので、使いやすいです。
 [OK]ボタンをクリックしても終了します。
 キャンセルは[ESC]キーか、[Cancel]ボタンです。

 画面上での編集は、DDEDIT(ED) ですが、
 日本語に対応していないため、「????」表示で内容が分かりません。
 日本語以外であれば、使えます。

 プロパティーウィンドウで変更するのが速いです。
 複数の TEXT を選択すると、一括で同じ文字列に変更できます。

 MTEXTを分解すると、日本語TrueTypeフォントは1文字ずつに分解されます。

 MTEXTを使う時は、日本語 SHX フォントを設定しておくと、マウスダブルクリックの編集で、
 そのまま編集できるようになります。
 また、分解しても一行文字 (TEXT) に変換されます。

■寸法作成

 システム変数: DIMSCALE の値は、無視されるようです。

 寸法が多い場合は、画面右下の [ M1:1 ] をクリック。
 ポップアップメニューから「シンボル尺度」を選択。
 [M1:1]の表示が [ m1:1 ] に変わるので、これをクリック。
 ポップアップメニューから希望の尺度、例えば「1:10」を選択。
  [ m1:10 ] に変わり、文字、矢印サイズが尺度 1/10 用に変わります。

 寸法が少ない場合は、とりあえず寸法を作成。
 それを選択して、プロパティーウィンドウの「尺度」1:1 を 1:10 に変更。
 文字、矢印サイズが尺度 1/10 用に変わります。
 すでに作成されている他の寸法にこれを適用する場合は、
 MATCHPROP コマンド、またはメニュー-「変更」-「図形のプロパティコピー」で
 元図形、合わせる図形の順で選択します。

 あるいは、対象の図形をすべて選択して、プロパティウィンドウで一括で「尺度」を
 変更するのが簡単で速いです。

 例えば直径寸法の場合、対象の円の大きさを変更すると、寸法も追従して変わりますが、
 nanoCAD の寸法を他の CAD で読み込んだ場合、この連携(追従)がされません。
 その反対 他の CAD -> nanoCAD の場合も同様です。

■ ブロック挿入

 ATTDIA, ATTREQAutoCAD と同じです。
 ATTREQ は機能していないので、属性があるブロックでは挿入時に必ず属性入力になり、
 入力属性の分だけ [Enter] が必要になります。

 -INSERTDXF ファイルは挿入できない。拡張子は ..dwg に限るようです。
 また、ファイル名に "" を付けると、「無効なブロック名...」になります。

 プログラムから DXF ファイルを挿入する場合は、
 blk := doc.ModelSpace.InsertBlock(vpt, fname, 1, 1, 1, 0, EmptyParam);
 で、適当な位置に挿入して、挿入したブロックを削除すると、図面内にブロックが作成されるので、
 そのブロック名が -INSERT のブロック名として使えるようになります。

 あるいは、同じように適当な位置に挿入して COPYBASE でそれをコピー、削除。
 PASTECLIP コマンドで任意の位置挿入にできるようになります。
 属性の多いブロックにも有効です。

 いずれも、パージは必要に応じて・・・。

■ 属性の編集

 ATTEDIT または BATTMAN です。
 ピックした属性の入力項目がアクティブにはなりません。
 属性の数が多い時は、ページ数が多くなり探すのが面倒です。

 プロパティーウィンドウで変更するのが速いです。
 複数のブロックを選択すると、同じ属性名の値を一括で同じ値に変更できます。

■ ブロックの編集

 ブロックをダブルクリックすると「ブロック編集ダイアログ」が表示されます。
 [OK] ボタンをクリックすると、REFEDIT コマンドが実行され、ブロックの編集に入ります。
 REFCLOSE (破棄して終了)で編集終了になります。

 確認ダイアログ 「Do you really want to dose editing and discard changes?
 「行った編集と変更を破棄しますか?"」に[YES]をクリックすると、破棄されます。
 コマンドラインに REFCLOSED を入力しても同様です。

 コマンドラインに REFCLOSES (保存して終了)を入力すると、
 ダイアログ 「Do you really want to close editing and save changes ?

 「編集を終了し、変更を保存しますか?」が表示されます。
 
■ 印刷

 こちらの環境ではどうしてもモノクロ印刷ができないことがありました。現在は出来ています。

 用紙サイズに ISO A0 .. , A0x2 ... とかが表示される場合は、
 メニュー「ツール」-「オプション」-「用紙」のチェックをすべて外して[OK]をクリックすると、表示されなくなります。

DWG プレビューイメージ(サムネイル)

 作成されないようです。システム変数 THUMBSAVE は存在せず、THUMBSIZE だけが存在します。

 AutoCADIJCAD では表示されず、BricsCAD では、表示されますが、これは BricsCAD が独自に描画しているようです。
 (BricsCAD では、DXF ファイルもプレビューが表示されます。)

■ コマンドラインでの LISP コード の実行

 LSP[Enter]C[Enter]で、コマンドラインが _>: 表示になります。
 この状態で、(entget(car(entsel))) とかが動きます。
 [ESC] で元のコマンドラインに戻ります。

PDF のアタッチ、インポートは対応していません。

■ペースト(PASTECLIP)

 こちらの環境では環境では、図形数の多いブロックを [Ctrl]+[C] または [Ctrl]+[Shift]+[C] でクリップボードにコピー。
 [Ctrl]+[V] でペーストすると、nanoCAD が無応答になります。
 タスクマネージャーから終了するしかありません。
 図形数の関係か、内部図形の関係かは不明です。 

■ コマンドラインでの LISP のロード、実行

 ロード:
 LSP[Enter] LEneter]
 LSP ファイルのフルパスファイル名[Enter]

 ※不具合があれば表示されます。
 | システム変数が実装されていません: PRODUCT
 |エラー:引数の型が無効です: STRINGP: nil
 |...

 実行:
 LISPコマンド名[Enter]

 上記で実行されない場合は、LSP[Enter]O(オー)[Enter]
 追加されたコマンドの一覧を表示したあとに、LISPコマンド名[Enter]

AutoSave ファイルの在り処

 こちらの環境では、
 C:\Users\owner\AppData\Local\Tempフォルダ内に
 ファイル名+(10-58-13_2024-06-08).autosave のように
 (時刻、日付)が追加された .autosave ファイルが作成されます。

 自動保存時、コマンドラインにファイル名が表示されるので、コマンド履歴からも確認できます。

■ その他

 ・システム変数 LASTPOINT は機能していないようです。
 ・FILEDIA の値を変えても、動作が変わらないことがあります。

 ・LISP でのユーザー入力待ち PAUSE は無視されます。

 ・UNDO コマンドに BEGIN, END, .MARK ... はありません。
  COM (ActiveX) BeginUndo, EndUndo は実装されていません。

 ・ENTMAKE した図形は UNDO コマンドでは戻せないようです。

 ・一時オブジェクトスナップ
  必要な時に [Shift] または [Ctrl]+右クリックで一時オブジェクトスナップを指定できます。
  コマンドラインに end ... とかを入力しても、エラーになります。

 (command "") enter と同じ。キャンセルは (command)
 グリップ表示の解除はできないので、(command "regen") が必要。

 (command ...) は完結してる必要がある。分割して送れない。
 その代わり、終了待ち しなくても良い。

 command "line" (getpoint)(getpoint)"") は意図どおりに動かない。
 ユーザー入力待ち pause は使えない。

 lisp コマンドは enter または space で再実行できるとはかぎらない。
 lisp がきれいに終了していない場合、最後に実行された (command ...) が走る確率が高い。

 作画領域でマウス右クリックのポップアップメニューの先頭にコマンドが出てくる
 LISP コマンドは2番目になっているので、そういう仕様なのだと思う。
 マウス右クリックの動作については、オプションで変更できる。
 Tools - Options ... Right button usage
 [Ctrl]+[9]:オプション設定

 UNDO BEGIN、UNDO MARK、UNDO END は使えない。
 座標指示で、コマンドラインに m2p、mtp、nea、qua ... 等、一時オブジェクトスナップは使えない。
 [Shift] + 右クリックのポップアップメニューから選ぶ。m2p, mtp はない

 コマンドで割り込みは使えない・・・。

 EXYMIN, EXTMAX は機能していない。

 entsel enter または選択失敗したとき nil を返さず、エラーとなる。

 VLISP 関数、定数を使う場合は、必ず (vl-load-com) が必要。

 vbssendCommand はコマンドラインに文字列を送っているだけなので、
 vbs とは同期がとれない。別のタイミングで動く。
 sendCommand はかなり後から実行される感じ。
 
 サブ図形の選択 NENTSEL は実装されていない

 LISP のロードにかなり時間がかかる。開発効率が悪すぎる。

 VLISP 関数はかなり動く

nanoCAD VBS について

 nanoCAD 用の VBS は、VBS コマンドで実行できます。
 nanoCAD 内部で動くので、外部からExcel や(nanoCAD 用でない普通の)VBS, Delphi で操作するより速いです。

 コマンドとしては作成できないので、LISP から
 (setvar "FILEDIA" 0)
 (command "VBS"
ファイル名...)
 (setvar "FILEDIA" 1)

 で呼び出すのが良いようです。最後の一行は、VBS 側で SetVariable "FILEDIA" 1 しても良いでしょう。
 変数を受け渡す必要があるときは、システム変数 USER.. を使います。
 
 図形ハンドルの受け渡しは、
  LISP 側:
  (setq sHandle (cdr (assoc 5 (entget ename))))
  (setvar "users1" sHandle)
  VBS, COM 側:
  Set Obj = doc.HandleToObject(getVariable "users1")
 のように、受け取ることができます。

 VBSGetPoint では 2点目を指示するとき、ラバーバンドが表示されません。
 この部分を LISP で作成し、後の処理を VBS で行う使い方が出来ます。

 外部から実行する VBS が扱いやすくて便利ですが、
 コマンドとして登録できないので、[Enter] での再実行はできません。
 やはり LISP + nanoCAD 内部で動く VBS が良いのかなと思います。

 VLISP 関数もかなり動くので、LISP で出来ることは LISP のほうが良いように思います。
 何よりも Visual Studio Code で作成できるので、快適です。

■ 速さの違い

 特殊なケースかも知れませんが、ブロック内部の図形情報の取り出し時間を計測してみました。
 ブロック内部の図形数約 43000 のデータ取り出し時間
  ・外部からの VBS: 4分57秒
  ・nanoCAD VBS: 36秒
  ・nanoCAD LISP: 3,6秒 (すべての情報をファイルに書き出す時間を含む)
 ということで、LISP が圧倒的に速いです。

 ちなみに同じ LISP BricsCAD V20 で実行すると、0.8 ~ 0.9 秒程度。
 IJCAD 2023 だと 1.9 秒程度でした。