1 ファイル仕様

1.1 文字コード

  • テキストファイルで文字コードはUTF8(BOM無し)です。改行コードはLF(0x0A)もしくはCRLF(0x0D, 0x0A)です。

1.2 コメント

  • #以降は文字列内を除きコメントです。
  • ファイルの一行目に#precoと記入すると、クリップボード経由などで貼り付けるとタイプ識別が行われます(予定)。

1.3 数値

  • 数値は整数もしくは実数で小数点は.(ピリオド)です。
  • 整数は、16進表記も可能です(主に色に使います)。16進表記は最初に0xを付けます。xやaからfは大文字と小文字を区別しません(0xffaa12340XCC1234AAなど)。
  • 色は32ビットで並びはARGBです。
  • 角度の単位は度(degree)で反時計回りが正です。ただし、フォントの傾きは右回りが正です。

1.4 文字列

  • 文字列は"(ダブルクォーテーション)で囲みます。
  • 文字列中に"が必要な場合は\"とします。文字列中に\が必要な場合は\\です。
  • 文字列は複数行にわたることがあります。ただし、改行は無視されます。文字列として改行したい場合は\nを使います。例えば、
"The Martians are
 coming!"

は、The Martians are coming! となります。改行が必要な場合は、The Martians are\n coming!とします。

1.5

  • 一行ごとに図形、属性などを指示します(複数行にわたることもあります)。
  • 各行は、最初に数値がある場合は線の座標、最初に識別子がある場合はコマンド行です。コマンド行は、最初にコマンド、その後にパラメータが続きます。
  • パラメータは数値、文字列、いくつかの識別子(色や線幅、線種で使われるbylayer、線種で使われるconstruction、色名など)があります。パラメータの区切りは少なくとも一つの空白文字(スペース、タブ)です。
    ただし、パラメータが文字列の場合は区切り文字を省略できます(見にくいので推奨はしません)。
text"abcdefg"100 10#This line is OK, but not recommended. It's easier to read if there are spaces.
  • 複数のパラメータがある場合、行末に&を付けることで次の行へ続けて書くことができます(&はパラメータと同じ記法で書くこと)。

line 0 0 10 10 20 20
#これを以下のように書くことはできない。
line 0 0 10 10 20&
20
#次のようにすること。
line 0 0 10 10 20 &
20

参考例

#preco

line 0 0 100 0 100 -50  # lines (0,0)-(100,0)-(100,-50)
lc red  # Line color is red.

# Indent is OK.
  circle 0 0 100  # circle center=(0,0) radius=100
  text "The Martians are coming!" 100 100 0

1.5.1 座標行

行が数値から始まる場合、それ以降の数値を座標とみなして線分を引きます。
XY座標を空白文字(スペースorタブ)で区切ります。一行に複数のXY座標を書くことも可能です。
空行を含む数値以外の行があるまでが一つのセグメントで連続線を描きます。
以下の例では、辺の長さが40と80の2つの正方形(と円)を描きます。
線しかない場合はこれでもいいのですが、他の図形がある場合はlineコマンドかpolylineコマンドを使うことを推奨します。

-20 -20
 20 -20
 20  20
-20  20
-20 -20

-40 -40 40 -40 40  40 -40  40
-40 -40 
circle 0 0 50

1.5.2 コマンド行

コマンド行は、最初にコマンドがあり、パラメータが続きます。
パラメータは省略できるものがあります。パラメータが省略された場合、特別な意味がある場合とデフォルト値が使われる場合があります。
パラメータは空白で区切るため、複数のパラメータの途中のパラメータのみを省略することはできません。
この仕様書上でのパラメータは次の記法によります。

  • 省略可能なパラメータは[]で囲みます。
  • 省略されたパラメータにデフォルト値があれば=で右辺に記入します。

下記の例では、x, y, radiusは省略できませんが、angleを省略した場合はangle=0.0、flatnessも省略した場合は、flatness=1.0、angle=0.0となります。

circle x y radius [flatness=1.0] [angle=0.0]

また、下記の例ではx, y片方のみは省略できませんが、x, yのペアは省略できます。

p0 [x y]

1.6 用語

1.6.1 属性

図形の色や線種など図形の装飾に関するもの。

1.6.2 カレント属性

PreCadのツールバーで現在選択されている色、線種、線幅。
色については要素により、カレント線色、カレント文字色、カレント塗りつぶし色などと呼びます。単にカレント値と呼ぶこともあります。
フォントについてもカレントフォント名等、同様です。

1.6.3 カレントレイヤ

PreCadのレイヤリストで選択されている書き込みレイヤ。

1.6.4 用紙寸・実寸

用紙上で表示される大きさを用紙寸、それを縮尺で割った物が実寸です。
線幅は常に用紙寸で書かれます。

2 コマンド解説

2.1 制御コマンド

2.1.1 ps

ps f

fが0の場合は座標や長さは実寸、fが1の場合は用紙寸となります。初期値は0(実寸)です。
グループ化中は使用しないでください。

2.1.2 p0

p0 [x y]

マウスで指示する座標を(x, y)にします。
これは、座標を(-X, -Y)オフセットすることと同様です。設定される座標値はpsコマンドの影響をうけます。
初期値は(0, 0)です。
パラメータなしの場合、初期値(0, 0)に戻します。
グループ化中は使用しないでください。
また、p0コマンドの値は加算されるので注意してください(通常は複数使うことはないと思います)。

p0 100 50
line 100 50 200 50  # マウス位置から右横に100の長さの線を引きます。
p0 10 20  # 座標値は(100+10, 50+20)
line 100 50 200 50  # マウス位置から(-10, -20)の位置で右横に100の長さの線を引きます。
p0        # 初期化
line 100 50 200 50  # マウス位置から(100, 50)の位置で右横に100の長さの線を引きます。

2.2 ドキュメントコマンド

文書構造に関するコマンドです。

2.2.1 layer

layer [name]

書き込みレイヤをnameのレイヤにします。nameは文字列です。レイヤ名がない場合、カレントレイヤが書き込みレイヤになります。
初期値はカレントレイヤが書き込みレイヤです。
nameのレイヤが存在しない場合、その名前のレイヤが新たに作られます。
グループ化中は使用しないでください。

layer "Layer1"  # レイヤ名"Layer1"を選択
layer           # カレントレイヤを選択

2.3 属性コマンド

色や線種などの図形の属性を指定するコマンドです。

2.3.1 lc

lc [color]

これ以降の図形で使う線色を設定します。colorがない場合、カレント線色が使われます。 初期値はカレント線色です。
colorは整数値(32ビット、アルファ値も含む)及びいくつかの定義値が使えます。

名称 定義
bylayer レイヤカラー
black 黒(0xff000000)
blue 青(0xff0000ff)
red 赤(0xffff0000)
magenta 紫(0xffff00ff)
green 緑(0xff00ff00)
cyan 水色(0xff00ffff)
yellow 黄色(0xffffff00)
white 白(0xffffffff)
gray 灰色(0xff808080)
lightgray 明るい灰色(0xffd3d3d3)
darkgray 暗い灰色(0xffa9a9a9)
transparent 透明(0x00ffffff)
lc -65536     # 0xffff0000(赤)。32ビットで上位から、ARGB
lc 0xffff0000 # 16進表記(赤)。xやaからfは大文字でも可
lc red        # 赤
lc bylayer    # レイヤ線色
lc            # カレント線色

2.3.2 lt

lt [name]

これ以降の図形で使う線種を設定します。nameがない場合、カレント線種が使われます。
初期値はカレント線種です。
bylayerはレイヤ線種、constructionは補助線、文字列の場合は線種名となります。
線種名は下表によります。

線種名 パターン 説明
solid なし 実線
dashed 12.0, 3.0 破線
dash_space 12.0, 12.0 跳び破線
center 24.0, 3.0, 7.0, 3.0 一点鎖線
phantom 24.0, 3.0, 7.0, 3.0, 7.0, 3.0 二点鎖線
long-dash_dot 24.0, 3.0, 0.5, 3.0 一点長鎖線
long-dash_2dot 24.0, 3.0, 0.5, 3.0, 0.5, 3.0 二点長鎖線
long-dash_3dot 24.0, 3.0, 0.5, 3.0, 0.5, 3.0, 0.5, 3.0 二点長鎖線
dot 0.5, 3.0 点線
dash_dot 12.0, 3.0, 0.5, 3.0 一点短鎖線
2dash_dot 12.0, 3.0, 12.0, 3.0, 0.5, 3.0 一点二短鎖線
dash_2dot 12.0, 3.0, 0.5, 3.0, 0.5, 3.0 二点短鎖線
2dash_2dot 12.0, 3.0, 12.0, 3.0, 0.5, 3.0, 0.5, 3.0 二点二短鎖線
dash_3dot 12.0, 3.0, 0.5, 3.0, 0.5, 3.0, 0.5, 3.0 三点短鎖線
2dash_3dot 12.0, 3.0, 12.0, 3.0, 0.5, 3.0, 0.5, 3.0, 0.5, 3.0 三点二短鎖線

※パターンは線分長と空白のペアで、長さはこれに線幅を掛ける。
※パターンはSXF規格を参考にした。
※個人的にはsolid, dashed, center, phantom, dotあたりを使うと思います。
※線種名が上記の表にない場合、エラーではなく警告レベルで線種はsolid(実線)とします。

lt "solid"      # 実線
lt bylayer      # レイヤ線種
lt construction # 補助線
lt              # カレント線種

2.3.3 lw

lw [width]

これ以降の図形で使う線幅を設定します。線幅は用紙上の寸法です。widthがない場合、カレント線幅が使われます。
初期値はカレント線幅です。
bylayerはレイヤ線幅です。

lw 0.25         # 太さ0.25mm
lw bylayer      # レイヤ線幅
lw              # カレント線幅

2.3.4 lz

lz f fが1の場合、以降のline, arc, polyline, spline, bezierの終点と始点が結ばれます(図形を閉じます)。fが0の場合は終点と始点を結びません。
初期値は0(終点と始点を結ばない)です。

2.3.5 fc

fc [color]

これ以降の図形で使う塗りつぶし色を設定します。色の指定方法はlcと同じです。
初期値はカレント塗りつぶし色です。

2.3.6 mt

mt [name]

マーカー名を文字列で設定します。マーカー名がない場合はカレントマーカー名が使われます。初期値はカレントマーカー名です。マーカー名は下表によります。

名称 種類 備考
asterisk
circle
dot sizeを使わず、大きさは設定を使用する。
plus
square 四角
triangle 三角形
x X
mt "plus" # マーカー '+'
mt    # カレントマーカー

2.3.7 ms

ms [size]

マーカーサイズを設定します。マーカーサイズは用紙寸になります(マーカーサイズは用紙寸なのでpsが0の場合、注意が必要です)。マーカーサイズがない場合はカレントマーカーサイズが使われます。初期値はカレントマーカーサイズです。
マーカー名がdotの場合、このサイズは使われません。

ms 4  # マーカーサイズ 4
ms    # カレントマーカーサイズ

2.3.8 tc

tc [color]

これ以降の図形で使う文字色を設定します。色の指定方法はlcと同じです。
初期値はカレント文字色です。

2.3.9 tb

tb f

文字の配置基準です。
fは0:左下、1:中下、2:右下、3:左中、4:中央、5:右中、6:左上、7:中上、8:右上。
初期値は0(左下)です。

2.3.10 fn

fn [name]

nameのフォント名を指定します。nameがない場合はカレントフォント名が使われます。
初期値はカレントフォント名です。

2.3.11 fh

fh [h]
文字の高さを指定します。hがない場合はカレント文字高さが使われます。 psが0の場合、ここで指定するサイズは実寸になります。 初期値はカレント文字高さです。

2.3.12 fw

fw [w]
文字幅の比率を指定します。wがない場合はカレント文字幅比率が使われます。 初期値はカレント文字幅です。

2.3.13 fs

fs [s]
文字と文字の間隔を指定します。sがない場合はカレント文字間隔が使われます。
psが0の場合、ここで指定するサイズは実寸になります。
初期値はカレント文字間隔です。

2.3.14 fa

fa [a]

フォントの傾斜角を指定します。フォントの傾斜角は時計回りが正となるので注意してください。aがない場合はカレント傾斜角が使われます。
初期値はカレント傾斜角です。

2.3.15 ff

ff [f]

文字の修飾(イタリック、ボールドなど)を設定します。
fは、以下の値の組み合わせです。

1 : イタリック
2 : ボールド
4 : 下線
8 : 取り消し線
16 :(予約:不使用)
32 :(予約:不使用)
64 : 文字のみ傾斜
128 : 枠線

fがない場合はカレント文字修飾が使われます。
初期値はカレント文字修飾です。

2.3.16 fnt

fnt [h] [w] [s] [a] [f]

フォントに関するフォント名以外のパラメータを設定します。
h: 文字高さ、w: 文字幅の比率、s: 文字間隔、a: 文字傾斜角、f:文字修飾
パラメータを全て省略した場合は全てカレント値が使われます。パラメータを一部省略した場合、そのパラメータは変更されません。
初期値はカレント値です。
各パラメータ詳細は、fh,fw,fs,fa,ffを参照してください。

2.4 図形コマンド

2.4.1 line

line [x0 y0] [x1 y1] [x2 y2] ... [xn yn]

線を引きます。複数のxy座標のペアをパラメータとして渡すとそれらを結んだ線を引きます。
lzが1の場合は終点と始点の間に線を引きます。
通常、直線は2点が必要ですが、2点より少なくてもエラーにはなりません(何も書かれません)。また、パラメータは偶数個必要です。

# (0,0)、(100,0)、(100,50)の座標をつなぐ線。
line 0 0 100 0 100 50  

2.4.2 circle

circle x y radius [flatness=1.0] [angle=0.0]

中心座標(x,y)、半径radius、扁平率flatness、傾きangleの楕円を描きます。塗りつぶしができます。

circle 0 0 100        # 中心(0,0)、半径100の円
circle 0 0 100 0.5    # 中心(0,0)、半径100、扁平率0.5の楕円
circle 0 0 100 0.5 30 # 中心(0,0)、半径100、扁平率0.5、傾き30度の楕円

2.4.3 arc

arc x y radius start sweep [flatness=1.0] [angle=0.0]

中心座標(x,y)、半径radius、開始角start、角幅sweep、扁平率flatness、傾きangleの楕円弧を描きます。塗りつぶしができます。startから、sweepが正の場合は左回り、負の場合は右回りの円弧になります。
lzが1の場合は終点と始点の間に線を引きます(円弧ではなくベジェ曲線になります)。

arc 0 0 100 30 45         # 中心(0,0)、半径100、開始角30、角幅45の円弧
arc 0 0 100 30 -45 0.5    # 中心(0,0)、半径100、開始角30、角幅-45(時計回りで45度)、扁平率0.5の楕円弧
arc 0 0 100 30 -45 0.5 30 # 中心(0,0)、半径100、開始角30、角幅-45(時計回りで45度)、扁平率0.5、傾き30度の楕円弧
arc 0 0 100 30 45         # 中心(0,0)、半径100、開始角30、角幅45の円弧
arc 0 0 100 30 -45 0.5    # 中心(0,0)、半径100、開始角30、角幅-45(時計回りで45度)、扁平率0.5の楕

2.4.4 fan

fan x y radius start sweep [flatness=1.0] [angle=0.0]

中心座標(x,y)、半径radius、開始角start、角幅sweep、扁平率flatness、傾きangleの扇形(ベジェ曲線)を描きます。塗りつぶしができます。

2.4.5 polyline

polyline [x0 y0] [x1 y1] [x2 y2] ... [xn yn]

複数のxy座標のペアをパラメータとして渡すとそれらを結んだ線(ポリライン)を描きます。
lzが1の場合は終点と始点の間に線を引きます。
塗りつぶしができます。

2.4.6 spline

spline [x0 y0] [x1 y1] [x2 y2] ... [xn yn]

複数のxy座標のペアをパラメータとして渡すとそれらを結んだスプライン曲線を描きます。
lzが1の場合は終点と始点を曲線で結びます。
塗りつぶしができます。

2.4.7 bezier

bezier x0 y0 dx0 dy0 cx1 cy1 x1 y1 [dx1 dy1 cx2 cy2 x2 y2] ... [dxn-1 dyn-1 cxn cyn xn yn]

3次ベジェ曲線です。頂点、制御点1(dx,dy)、制御点2(cx,cy),頂点の順に並べてあります。頂点数をmとした場合、制御点と頂点の合計は3*m+1になります。
lzが1の場合は終点と始点の間に直線を引きます。
塗りつぶしができます。

2.4.8 text

text str x y [angle=0.0]

文字列strを座標(x,y)、角度angleで描きます。塗りつぶし色で背景を塗ることができます。

text "test" 0 0
text "test" 0 0 30

2.4.9 marker

marker x y [angle=0.0]

マーカーを座標(x,y)、角度angleでマーカーを描きます。
スタイルはマーカーの種類はmt、マーカーサイズはms、色などは線の属性を使用します(色はlc、線幅はlw、線種ltはconstructionのみ有効)。

2.4.10 group

group
....
....
end group

groupend group間の図形をグループ化します。group中にgroupを入れることもできます。
group中ではlayerコマンド、psコマンド、p0コマンドは使えません。
また、end groupが存在しない場合、そのグループ図形は追加されません(エラーにするか未定)。

3 履歴

  • 2026/04/26
    • ver 1.1 Rev.1
    • 誤記および書式の修正。
  • 2025/04/17
    • ver 1.1 Rev.0
    • 属性の初期値をカレント値に変更。
    • 誤記修正
  • 2025/04/09
    • ver 1.0 Rev.0
    • 初版