Jw_cadでPythonを活用するには(その2 コマンドの解説・動作)

#Jw_cadでPythonを活用するには(その2)
[その1](https://qiita.com/maehira/items/e3455722548a9bcf068f)でJw_cadの外部変形機能の.batファイルの作成と実行までを解説。
今回その2では、外部変形ファイル(.bat)の中に記載する`REM #~~~`と実際の動きを解説する。


#【REM #~~~】とは
[その1](https://qiita.com/maehira/items/e3455722548a9bcf068f)でもちょっとだけ触れたが、Jw_cad内のみで動作するコマンドである。

本来の意味は、バッチファイル内にコメントを残す時に`REM~~~`と記載すると
画面にも表示されず、実行もされない文字列として使用されるのだが、
Jw_cadでは、`REM`と`␣#`を組み合わせて、Jw_cad内で動作するコマンドとされている。

`REM #~~~`を下記にて解説。
#【基本的なREM #~~~】の解説
|コマンド名     |機能・動作      |備考   |
|:------------|:-------------|:-------------|
|REM ～～～|Jw_cad上での表示名称|REMの後に#は不要<br>　|
|REM #jww|JWW形式の宣言 |ブロック図形や寸法図形、文字フォントが扱える。<br>　|
|REM #jw|JW形式の宣言|上記とは逆に機能が制限される。<br>あまり使用することは無いかも？|
|REM #cd|実行ファイルと同じ場所にJWC_TEMP.TXT作成|記載していないと、<br>Jw_cadがインストールされているフォルダに作成|
[その1](https://qiita.com/maehira/items/e3455722548a9bcf068f)で作成したhogehoge.batにも上記の基本的コマンドを使用

```hogehoge.bat
@echo off
REM 外部変形起動(hello world!!)
REM #jww
REM #cd
echo hello world!!　
pause >nul
```
#【選択範囲.bat】での起動
メモ帳で下記の内容を打ち込み、名前をつけて保存で`範囲選択.bat`で保存。

```範囲選択.bat
@echo off
REM 範囲選択
REM #cd
REM #jww　
REM #0
call notepad.exe JWC_TEMP.TXT
pause >nul　
```
hogehoge.batと異なる所は、5行目に`REM #0`を6行目に`call notepad.exe JWC_TEMP.TXT`追加した。
`REM #0`を追加することで、外部変形`範囲選択.bat`を開くとJw_cad上に**No.0 基準点を指示して下さい。**と表示され、任意の点を基準に外部変形を実行する。

`call notepad.exe JWC_TEMP.TXT`は外部変形が終了する前に`JWC_TEMP.TXT`を開くコマンド
<img width="600" alt="外部変形実行" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/845477/20437e65-1f05-38a7-5910-f447de0e44c4.gif">
上記画面は、外部変形の選択～範囲選択～メモ帳が開くまでの図。
外部変形 → 範囲選択.bat → 任意の箇所をクリック → コマンドプロンプトが表示 → `JWC_TEMP.TXT`が開く。

#【JWC_TEMP.TXT】を編集し図面上へ反映させる。
[【外部変形ファイル】の動作](#【外部変形ファイル】の動作)で実行した、`範囲選択.bat`を実行し、
`JWC_TEMP.TXT`をメモ帳で表示させる。(JWC_TEMP.TXTを保存するまで、コマンドプロンプトは触らない。)

下の`JWC_TEMP.TXT`内容の通り、`#`の下に座標データを入力
また、`JWC_TEMP.TXT`の1行目の`hq`を削除し、上書き保存。
画面上にコマンドプロンプトが残っていれば、キーボードの適当なキーを押下。
すると外部変形を実行した際にクリックした任意の点に枠付きの**Qiita**が記載される。

```JWC_TEMP.TXT
hk0
~~~~~省略~~~~~
#
-125 -40 125 -40
-125 60 125 60
-125 -40 -125 60
125 -40 125 60
cn0 100 100 0 2
ch -125 -40 250 0 "Qiita
```

#【JWC_TEMP.TXT】と【動作までの流れ】の解説
`JWC_TEMP.TXT`には次のような文字列記載されている。(環境により内容が変わる。)

```JWC_TEMP.TXT
hq
hk 0
hs 100 100 100 600 600 100 100 100 100 1 100 100 60 100 1 1
hcw 2 2.5 2.8 3 3.2 2.5 5 7 2 5
hch 2.5 3.2 3.5 3.8 4 2.5 5 7 2 5
hcd 0 0 0.5 0 0.5 0 0 0 0 0
hcc      2      2      2      2      2      2      2      2      8      9
hn -433.572606382979 -313.508776595745 701.030585106383 140.759042553192
lg9
ly0
lc2
lt1
cn0 100 100 0 2
cn"$<ＭＳ ゴシック>
#
-125 -40 125 -40
-125 60 125 60
-125 -40 -125 60
125 -40 125 60
cn0 100 100 0 2
ch -125 -40 250 0 "Qiita
```
1行目`hq`～`#`まではCADデータ上の情報(レイヤ・縮尺等)が記載されている。
[先程](#【JWC_TEMP.TXT】を編集し図面上へ反映させる。)行ったように、`#`から下に線座標や文字+座標を記載することで、線や文字が図面上に反映されるのだが、
1行目の`hq`が残っていると、処理が完了していないと捉えられ、図面上には反映されない。
そのため、`hq`を削除し、図面に反映されるようにする。

ここで、外部変形の動きを噛み砕いて表すと以下の通り。
**Jw_cad上で外部変形コマンド押下** → **外部変形選択** → **Jw_cad上で選択(範囲や点を)** → **コマンドプロンプト起動** → **JWC_TEMP.TXT作成** → **JWC_TEMP.TXTに追記・編集・hq削除** → **Jw_cadに反映**。

今回`JWC_TEMP.TXT`は手入力・コピペで記載したが、この箇所をPythonで処理してあげればきっと捗る・・・仕事が・・・

#まとめ
このページでもPythonの動作する下地として
外部変形.batファイルの起動及びREMコマンド、JWC_TEMP.TXTの解説を行った。
次は外部変形実行時にCADから引数をもらい、pythonに渡すまでを解説したい。~~疲れた。~~


##参考文献・ソフトウェア
[Jw_cadのページ](https://www.jwcad.net/index.htm)　← Jw_cadの公式ページです。
[Markdown記法 チートシート](https://qiita.com/Qiita/items/c686397e4a0f4f11683d)　← Qittaの書き方で参考にさせてもらいました。
[JWW_SMPL.BAT検索](http://www.tmk-s.com/jww/bat-index.html)　← REMコマンドについて解説されています。参考にさせてもらいました。