Skip to content
未検証

外部変形 書き込みデータ仕様

このページでできるようになること

外部変形を実行したときに 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 hp1hzk lg ly lc lt lw bz z1z5環境・属性設定
一般的な図形データ(線データ)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.jww

hk ── 軸角

現在の軸角を書き出します。軸角0°なら hk 0

hs ── 縮尺(レイヤグループ別)

レイヤグループ0〜Fの 縮尺の分母値(分子を1とした場合)を16個並べて書き出します。

縮尺設定書き出し例
全グループ 1/2hs 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
全グループ 2/1hs 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

hp1hp99 ── 指示点座標

バッチで指定した REM #1REM #99 の指示点座標を書き出します。

hp1 100 50
hp2 200 50

仮線表示付き指示点 hp1-hp99-

REM #1-#99- の指示点は、識別子末尾に - が付きます。

hp1- 100 50

線指定付き指示点 hp1lnhp99ln

REM #1ln#99ln で線も同時選択した場合、指示点の後に hhp1ln ヘッダ+線データが続きます。

hp1ln 0 0
hhp1ln
 -5 0 5 0

円指定付き指示点 hp1cihp99ci

REM #1ci#99ci で円・円弧を同時選択した場合。

hp1ci 10 0
hhp1ci
ci 0 0 10

文字指定付き指示点 hp1chhp99ch

REM #1ch#99ch で文字を同時選択した場合。

hp1ch 0 0
hhp1ch
ch 0 0 6.5 0 "123

hzk ── 日影図計算条件

バッチに 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 指定がある場合、各座標が 図面寸法(縮尺反映後) で書き込まれます。

z1z5 ── 属性情報

バッチに 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 10

ci ── 円弧・楕円データ

書式: 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.000000

cz ── 日影建物高さデータ

書式: cz x1 y1 x2 y2 "文字列

cz -3.75 0 7.5 0 "10.000

c2 ── 2.5Dデータ

書式: c2 x1 y1 x2 y2 "文字列

c2 -3.75 0 7.5 0 "10 , 0

Tips: c2 は2.5D機能で線端部に設定されている 高さ・奥行データ を保持する識別子です。詳細は 2.5D(立体表示・アイソメ図) ※準備中 を参照。


特殊な図形データ

pn ── 点の色番号

点の色設定。値は1〜9。

pt ── 点データ

書式: pt x y

pt 0 0

点マーカデータ

書式: pt x y 倍率 角度 マーカコード

pt 0 0 1 0 -7
マーカコード一覧
番号マーカ
1blanked arrow
2blanked box
3blanked dot
4dimension origin
5filled box
6filled arrow
7filled dot
8integral symbol
9open arrow
10slash
11unfilled arrow
-1asterisk
-2circle
-3dot
-4plus
-5square
-6triangle
-7X

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) × 65536RGB値の数値表現

例: 純赤(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 10

sc / 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 11

lgn ── レイヤグループ名

書式: lgn名前(直前の lg 行の次の行)

lg0 11
lgn図面1

ly ── レイヤ状態

書式: ly番号 状態数値

ly0 11

lyn ── レイヤ名

書式: 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行頭の識別子から「何が書き出されているか」を確認
5call 行を戻して外部プログラムへ渡す

識別子の読み取りは「行頭で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
end

PERSCの推奨: 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は 行頭2〜3文字の識別子 で意味が決まる
  • 5カテゴリ(書込設定/一般図形/文字/特殊図形/レイヤ状態)に分かれる
  • hq は外部プログラム実行チェック文字。残っていると「未実行」扱い
  • 線・円・文字は最も基本(x1 y1 x2 y2 / ci x y 半径 / ch x1 y1 x2 y2 "文字列
  • 文字種設定は hcw hch hcd hcc の4要素を10個並列で書き出し
  • ソリッド図形の角度はラジアン、任意色は 赤+緑×256+青×65536
  • レイヤ状態は2桁数値(1の位=表示/非表示、10の位=編集可否)
  • デバッグはバッチの call を一旦コメントアウトして JWC_TEMP.TXT を直接開くのが定石