Appearance
外部変形 書き込みデータ仕様
このページでできるようになること
外部変形を実行したときに Jw_cadが JWC_TEMP.TXT に書き出すデータ書式 を体系的に理解できるようになります。書き込みデータには「設定情報(縮尺・文字種・レイヤ等)」「指示点情報」「図形データ」「特殊図形(ソリッド・ブロック・曲線)」「レイヤ状態」が含まれており、各行の 行頭2〜3文字(識別子) で意味が決まります。この記事ではすべての識別子を意味別に整理し、外部プログラム側で読み取る際の書式を一覧化します。
背景: Jw_cad は外部変形を実行すると、現在の作図情報をテキストファイル
JWC_TEMP.TXTに書き出します。このファイルを 外部プログラム(exe/awk/ruby等)が読み取り、加工した結果を同じファイルに上書き することで、結果がJw_cadに反映される仕組みです。書き込みデータの書式を理解しておくと、自作プログラム開発・既存プログラムのデバッグ・トラブル時の原因切り分けがすべて可能になります。
Tips: バッチファイルに書く
REM #〜のコマンド一覧は別記事 外部変形バッチファイルのコマンド一覧 ※準備中、外部プログラムからJw_cadへ返すデータ書式は 外部変形 読み込みデータ仕様 ※準備中 で扱います。本記事は Jw_cad → 外部プログラムの方向 に特化しています。
JWC_TEMP.TXTの全体構造
書き出される情報の分類
書き出されるデータは 行頭の識別子 で意味が決まります。s-projects解説の整理に従えば、次の5カテゴリです。
| カテゴリ | 主な識別子 | 役割 |
|---|---|---|
| 書込設定等 | hq hk hs hzs hcw hch hcd hcc hn hp1〜 hzk lg ly lc lt lw bz z1〜z5 | 環境・属性設定 |
| 一般的な図形データ | (線データ)ci | 線・円・円弧の幾何データ |
| 文字データ | cn cc ch cv cs cr co cp ct ck cz c2 | 文字種・各種文字データ |
| 特殊な図形データ | pn pt msg BL pl lc10 sl sc se so sg | 点・寸法図形・ブロック・曲線・ソリッド |
| レイヤ状態 | lg lgn ly lyn | レイヤグループ/レイヤの状態・名称 |
書き出し例(最小構成)
最小バッチファイル(REM #jww 1行のみ)を実行したときに書き出される典型例を示します。s-projects解説に基づきます。
hq
hk 0
hs 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
hcw 2 2.5 3 4 5 6 7 8 9 10
hch 2 2.5 3 4 5 6 7 8 9 10
hcd 0 0 0.5 0.5 0.5 0.5 1 1 1 1
hcc 1 1 2 2 3 3 4 4 5 5
hn 0 0 0 0
lg0
ly0
lc2
lt1
cn4
cn"$<MS ゴシック>
#Tips: 行頭が
hqで始まっている=外部プログラムが処理を開始していない状態です。外部プログラムが正常に動作すると、このhq行が消えて代わりに結果データが書き込まれます。
行頭 # はコメント
行の先頭に # を置くと、その行は読み込み時に無視されます。コメントとして任意のメモを残せます。
書込設定等
hq ── 外部プログラム実行チェック文字
書き出された JWC_TEMP.TXT の 冒頭に必ず 書き込まれる文字です。外部プログラムが処理を完了せずに終了した場合(hqを削除しなかった場合)、Jw_cadは「未実行」と判断して読み込みを行いません。
背景:
hqの存在チェックが、外部変形の 「処理が走ったかどうか」を判定するゲート になっています。自作プログラムでは「処理開始時に hq 行を削除する/結果書き込み時に hq を含めない」のいずれかの作法が必要です。
file=ファイル名
バッチに REM #hf 指定がある場合、現在編集中のJw_cadファイルの フルパス が書き出されます。
file=C:\Work\drawing.jwwhk ── 軸角
現在の軸角を書き出します。軸角0°なら hk 0。
hs ── 縮尺(レイヤグループ別)
レイヤグループ0〜Fの 縮尺の分母値(分子を1とした場合)を16個並べて書き出します。
| 縮尺設定 | 書き出し例 |
|---|---|
| 全グループ 1/2 | hs 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 |
| 全グループ 2/1 | hs 0.5 0.5 0.5 ... |
hzs ── 用紙寸法(mm)
バッチに REM #zs 指定がある場合、用紙サイズ(mm単位)を hzs 横寸法 縦寸法 で書き出します。
hcw / hch / hcd / hcc ── 文字種設定
文字種1〜10の 幅・高さ・間隔・色No. を10個並べて書き出します。
| 識別子 | 内容 | 例 |
|---|---|---|
hcw | 文字幅寸法 | hcw 2 2.5 3 4 5 6 7 8 9 10 |
hch | 文字高寸法 | hch 2 2.5 3 4 5 6 7 8 9 10 |
hcd | 文字間隔寸法 | hcd 0 0 0.5 0.5 0.5 0.5 1 1 1 1 |
hcc | 文字色番号 | hcc 1 1 2 2 3 3 4 4 5 5 |
hn ── 範囲選択座標
バッチで範囲選択を行った場合の 左下と右上の座標 を書き出します。hn x1 y1 x2 y2。
hp1 〜 hp99 ── 指示点座標
バッチで指定した REM #1〜REM #99 の指示点座標を書き出します。
hp1 100 50
hp2 200 50仮線表示付き指示点 hp1- 〜 hp99-
REM #1-〜#99- の指示点は、識別子末尾に - が付きます。
hp1- 100 50線指定付き指示点 hp1ln 〜 hp99ln
REM #1ln〜#99ln で線も同時選択した場合、指示点の後に hhp1ln ヘッダ+線データが続きます。
hp1ln 0 0
hhp1ln
-5 0 5 0円指定付き指示点 hp1ci 〜 hp99ci
REM #1ci〜#99ci で円・円弧を同時選択した場合。
hp1ci 10 0
hhp1ci
ci 0 0 10文字指定付き指示点 hp1ch 〜 hp99ch
REM #1ch〜#99ch で文字を同時選択した場合。
hp1ch 0 0
hhp1ch
ch 0 0 6.5 0 "123hzk ── 日影図計算条件
バッチに REM #zk 指定がある場合、hzk 緯度 日赤緯 測定高 測定時間帯番号 の順で書き出されます。
hzk 36 -23.45 1.5 0| 値 | 意味 |
|---|---|
| 緯度 | 度(-90〜90) |
| 日赤緯 | 度 |
| 測定高 | m |
| 測定時間帯番号 | 0=8時〜16時、1=9時〜15時 |
lg / ly / lc / lt / lw ── 書込属性
| 識別子 | 内容 | 例 |
|---|---|---|
lg | 書込レイヤグループ(0〜F) | lg0 |
ly | 書込レイヤ(0〜F) | ly0 |
lc | 書込線色(1〜9) | lc2 |
lt | 書込線種(1〜9) | lt1 |
lw | 線幅(1/100mm単位の整数) | lw 25 |
背景:
lwはバッチにREM #zw指定がある場合に書き出されます。s-projects解説の追記事項によれば、書き出される値は 「線幅 × 4.234」(小数点以下四捨五入) となる挙動が報告されており、印刷時の太さ設定が反映されている可能性があります。
bz ── 図面寸法でデータ書き込み
バッチに REM #bz 指定がある場合、各座標が 図面寸法(縮尺反映後) で書き込まれます。
z1 〜 z5 ── 属性情報
バッチに REM #zz 指定がある場合、図形に付随する属性が書き込まれます。
| 属性 | 対象 |
|---|---|
z1 | ハッチ |
z2 | 図形 |
z3 | 寸法 |
z4 | 建具(包絡処理対象外) |
z5 | 建具(包絡処理対象) |
一般的な図形データ
線データ
書式: x1 y1 x2 y2
-5 0 5 0| 値 | 意味 |
|---|---|
| x1, y1 | 始点座標 |
| x2, y2 | 終点座標 |
ci ── 円データ
書式: ci x y 半径
ci 0 0 10ci ── 円弧・楕円データ
書式: ci x y 半径 開始角度 終了角度 扁平率 傾き角度
ci 0 0 10 0 90 1 0| 値 | 意味 |
|---|---|
| x, y | 中心座標 |
| 半径 | 半径 |
| 開始角度・終了角度 | 度 |
| 扁平率 | 1=真円、それ以外で楕円 |
| 傾き角度 | 度 |
Tips: 完全な円なら3値、円弧・楕円なら7値という見分け方になります。読み取り側プログラムでは値の数で分岐します。
文字データ
cn ── 文字種設定
文字種1〜10の選択。cn1 で文字種1。
任意サイズ文字は cn0 で、後ろに 幅 高さ 間隔 色No. を付けます。
cn0 4 4 0.5 2背景: バッチに
REM #jwwがない場合(DOS版宣言)は、任意サイズ文字も近似する文字種で書き込まれます。
cn"$<フォント名> ── 文字フォント
REM #jww 指定時のみ書き込まれます。
cn"$<MS ゴシック>斜体文字付き
斜体は末尾に / を付けます。
cn"$<MS ゴシック>/cc ── 文字基準点
REM #zc 指定時のみ書き込まれます。基準点は0〜8の数値。
| 6=左上 | 7=中上 | 8=右上 |
|---|---|---|
| 3=左中 | 4=中中 | 5=右中 |
| 0=左下 | 1=中下 | 2=右下 |
ch ── 横文字
書式: ch x1 y1 x2 y2 "文字列
ch -11 0 22 0 "あいうえお| 値 | 意味 |
|---|---|
| x1, y1 | 基準点座標 |
| x2, y2 | 文字作図方向の座標(基準点を原点としたときの相対座標) |
cv ── 縦文字
書式: cv x1 y1 x2 y2 "文字列
cv 0 11 0 -22 "あいうえお座標の意味は ch と同じ。
寸法系文字 cs / cr / co / cp / ct
寸法コマンドで作図された文字は専用の識別子になります。座標の意味は ch と同じです。
| 識別子 | 意味 | 例 |
|---|---|---|
cs | 寸法値(線寸法・円周寸法) | cs 0 0 4.25 0 "10 |
cr | 半径寸法値 | cr 0 0 6.5 0 "R10 |
co | 直径寸法値 | co 0 0 8.75 0 "φ20 |
cp | 角度寸法値 | cp 0 0 6.5 0 "45° |
ct | 累寸寸法値 | ct 0 0 4.25 0 "10 |
背景: 寸法値には縦字の概念がないため、すべて横文字(
cs系)で書き出されます。
ck ── 日影真北データ
書式: ck x1 y1 x2 y2 "文字列
ck -5.625 0 11.25 0 "90.000000cz ── 日影建物高さデータ
書式: cz x1 y1 x2 y2 "文字列
cz -3.75 0 7.5 0 "10.000c2 ── 2.5Dデータ
書式: c2 x1 y1 x2 y2 "文字列
c2 -3.75 0 7.5 0 "10 , 0Tips:
c2は2.5D機能で線端部に設定されている 高さ・奥行データ を保持する識別子です。詳細は 2.5D(立体表示・アイソメ図) ※準備中 を参照。
特殊な図形データ
pn ── 点の色番号
点の色設定。値は1〜9。
pt ── 点データ
書式: pt x y
pt 0 0点マーカデータ
書式: pt x y 倍率 角度 マーカコード
pt 0 0 1 0 -7マーカコード一覧
| 番号 | マーカ |
|---|---|
| 1 | blanked arrow |
| 2 | blanked box |
| 3 | blanked dot |
| 4 | dimension origin |
| 5 | filled box |
| 6 | filled arrow |
| 7 | filled dot |
| 8 | integral symbol |
| 9 | open arrow |
| 10 | slash |
| 11 | unfilled arrow |
| -1 | asterisk |
| -2 | circle |
| -3 | dot |
| -4 | plus |
| -5 | square |
| -6 | triangle |
| -7 | X |
msg ── 寸法図形データ
書式(msz ヘッダで開始):
msz
0 0 10 0
cs 0 0 4.25 0 "10寸法線本体と寸法値テキストがセットで書き出されます。
BL ── ブロックデータ
書式: BL x y "ブロック名 + 終端 #
BL 0 0 "ブロック1
#pl ── 曲線データ
書式: pl ヘッダ + 連続する線データ + 終端 #
pl
0 0 10 10
10 10 20 -10
20 -10 30 10
#lc10 ── 任意色の指定
ソリッド図形等で任意色を指定。lc10 の後に色を表す数値を書きます。
| 計算式 | 内容 |
|---|---|
| 赤(0〜255) + 緑(0〜255) × 256 + 青(0〜255) × 65536 | RGB値の数値表現 |
例: 純赤(R=255, G=0, B=0)→ lc10 255、純緑 → lc10 65280、純青 → lc10 16711680
ソリッド図形
sl ── 線形・三角形・四角形ソリッド
座標数で識別:
- 線形:
sl x1 y1 x2 y2 - 三角形:
sl x1 y1 x2 y2 x3 y3 - 四角形:
sl x1 y1 x2 y2 x3 y3 x4 y4
sl -5 0 5 0 5 10 -5 10sc / se / so / sg ── 円・円周・円環ソリッド
書式: 識別子 x y 半径 扁平率 傾き角度 開始角度 円弧角度 ソリッド形状(または内円半径)
sc 0 0 10 1 0 0 6.283 100| 識別子 | 内容 |
|---|---|
sc | 円ソリッド |
se | 円周ソリッド |
so | 円環ソリッド(扁平率一定) |
sg | 円環ソリッド(幅一定) |
sc のソリッド形状値
| 値 | 形状 |
|---|---|
| 100(10以上はすべて円) | 円 |
| 5 | 弓形 |
| 0(5以外の一桁) | 扇形 |
| -1 | 円外側(円弧角度がπ/2を超える場合は扇形) |
背景: ソリッド図形の角度はすべて ラジアン で書き込まれます。度数で扱う場合は外部プログラム側で π/180 を掛けて変換します。
レイヤ状態
バッチに REM #gn 指定がある場合、レイヤグループ・レイヤの状態が書き出されます。
lg ── レイヤグループ状態
書式: lg番号 状態数値
lg0 11lgn ── レイヤグループ名
書式: lgn名前(直前の lg 行の次の行)
lg0 11
lgn図面1ly ── レイヤ状態
書式: ly番号 状態数値
ly0 11lyn ── レイヤ名
書式: lyn名前(直前の ly 行の次の行)
ly0 11
lyn寸法状態を表す2桁数値の意味
| 桁 | 値 | 意味 |
|---|---|---|
| 1の位 | 0 | 非表示状態 |
| 1の位 | 1 | 表示状態 |
| 10の位 | 0 | 編集不可 |
| 10の位 | 1 | 編集可能 |
| 10の位 | 2 | 編集不可・プロテクトレイヤ(表示・編集状態の変更可能) |
| 10の位 | 3 | 編集可能・プロテクトレイヤ(表示・編集状態の変更可能) |
| 10の位 | 6 | 編集不可・プロテクトレイヤ(表示・編集状態の変更不可) |
| 10の位 | 7 | 編集可能・プロテクトレイヤ(表示・編集状態の変更不可) |
例: ly0 11 → レイヤ0が「編集可能・表示状態」
実務での使い方 ★PERSC独自
自作外部変形のデバッグはJWC_TEMP.TXTを直接開く
外部変形を自作するときは、処理途中で出力される JWC_TEMP.TXT をテキストエディタで開いて中身を確認 するのが定石です。バッチ実行直後(外部プログラム呼出前)にバッチを停止すれば、Jw_cadが書き出した生のテキストが確認できます。
| デバッグ手順 | 内容 |
|---|---|
| 1 | バッチの call 行をコメントアウト |
| 2 | 外部変形を実行 |
| 3 | 生成された JWC_TEMP.TXT を開く |
| 4 | 行頭の識別子から「何が書き出されているか」を確認 |
| 5 | call 行を戻して外部プログラムへ渡す |
識別子の読み取りは「行頭でswitch」
外部プログラム側で JWC_TEMP.TXT を解析するときは、1行ずつ読み込んで行頭の識別子で分岐する のが基本パターンです。AWK・Ruby・Pythonいずれの言語でも同じ構造で書けます。
ruby
# Ruby例(概念)
File.foreach("JWC_TEMP.TXT") do |line|
case line
when /^hq/ then next # 未実行マーカーをスキップ
when /^lc(\d+)/ then current_color = $1.to_i
when /^ci / then 円処理
when /^ch / then 横文字処理
when /^[\d\-]/ then 線データ処理
end
endPERSCの推奨: AWK/Ruby/Python のどれを選んでも問題ありません。Jw_cadユーザーコミュニティではAWKが伝統的に多く使われていますが、最近はRuby/Pythonの方が学習資料が豊富です。新規開発するならRuby/Pythonを推奨します。
文字データを処理する際の注意
ch cv cs 等の文字データは " 以降が文字列 になります。文字列内に空白・カンマ・引用符等が含まれても、行末まで全部が1つの文字列として扱われる点に注意します。
ch 0 0 6.5 0 "Hello, World! ← カンマ・空白を含むがすべて1文字列縮尺と座標の関係
Jw_cadの内部座標は 「実寸(mm)」 で扱われています。hs の縮尺値はあくまで「印刷時にこの倍率で縮める」という指示であり、JWC_TEMP.TXTに書き出される座標は実寸です。REM #bz を入れた場合のみ、座標が 図面寸法(縮尺後) で書き出されます。
つまずきポイント・対処 ★PERSC独自
Q: JWC_TEMP.TXTが文字化けする
→ 文字コードが Shift_JIS で書き出されている可能性が高いです。テキストエディタで開く際は文字コードを Shift_JIS に切り替えてください。最近のエディタは自動判定しますが、UTF-8固定設定だと化けます。
Q: hp1 等の指示点が書き出されない
→ バッチに REM #1 等の指示点指定がない、またはユーザーが指示点入力をスキップした可能性があります。
Q: ソリッド図形を読み込んだら向きや形が変
→ 角度が ラジアン単位 であることに注意してください。度数(degree)で計算すると2π倍ずれます。また sc 等のソリッド形状値(100/5/0/-1)の解釈が外部プログラム側で正しいか確認してください。
Q: 任意色 lc10 の数値計算が合わない
→ 「赤+緑×256+青×65536」が正しい計算式です。緑と青の桁を取り違えると別の色になります。RGB(255, 128, 0)なら 255 + 128*256 + 0*65536 = 33023。
Q: 文字列の途中で改行されてしまう
→ ch cv 等の文字データは 1行に書ききる 必要があります。書き込み側プログラムで文字列内に改行コードを混入させないよう注意してください。
Q: ブロック・曲線データの末尾が分からない
→ BL pl は終端記号 # で区切られます。# を見落とすと次の図形データと連続してしまうため、行頭が # の行を必ず終端として処理してください。
Q: レイヤ状態の数値の意味が分からない
→ 1の位=表示/非表示、10の位=編集可否+プロテクト属性、という2桁での意味づけです。本記事の表を参照してください。ly0 11 = 「編集可能・表示」が最も一般的な状態です。
Q: lw の値が設定値と違う
→ s-projects解説の追記事項によれば、書き出される値は 「線幅 × 4.234」 となる現象が報告されています(理由は不明)。線幅情報が必要な場合は実機で実測してから処理に組み込んでください。
Q: 寸法図形 msg が複雑で扱いにくい
→ 寸法図形は「寸法線(線データ)+寸法値(cs)」の 複合データ です。msz ヘッダで開始されるブロックを1単位として処理してください。
関連項目
- 外部変形の基本(使い方とバッチ起動) — 外部変形の概念とJWC_TEMP.TXT介在の仕組み
- 外部変形バッチファイルのコマンド一覧 ※準備中 —
REM #〜のバッチコマンド網羅 - 外部変形 読み込みデータ仕様 ※準備中 — Jw_cadへ返すデータ書式
- 外部変形プログラムの導入 — 配布物の導入手順
- 座標ファイルの書式仕様 — 図形データ書式の参考(多くの識別子が共通)
- 2.5D(立体表示・アイソメ図) ※準備中 —
c2識別子の解説 - 日影図 ※準備中 —
hzkckczを使う標準添付外変
まとめ
- JWC_TEMP.TXTは 行頭2〜3文字の識別子 で意味が決まる
- 5カテゴリ(書込設定/一般図形/文字/特殊図形/レイヤ状態)に分かれる
hqは外部プログラム実行チェック文字。残っていると「未実行」扱い- 線・円・文字は最も基本(
x1 y1 x2 y2/ci x y 半径/ch x1 y1 x2 y2 "文字列) - 文字種設定は
hcwhchhcdhccの4要素を10個並列で書き出し - ソリッド図形の角度はラジアン、任意色は
赤+緑×256+青×65536 - レイヤ状態は2桁数値(1の位=表示/非表示、10の位=編集可否)
- デバッグはバッチの
callを一旦コメントアウトして JWC_TEMP.TXT を直接開くのが定石