


 
 
 
 
 
 
 |
「SXF仕様書」を見ると、まず、「フィーチャとは」とあります。
フィーチャとは、AP202 CC2での図面データ表現へのアクセスを容易にすることを目的に想定した、SXFの図面データ表現の根幹をなす単位のことをいい、大別して以下の4種類がある。
@ 図面情報
A 図面構造
B 幾何/表記要素
C 構造化要素 |
との事です。「フィーチャ」というと普通は「フィーチャモデル」つまり、意味のある形状のまとまり、という感じで思ってしまいますが、まぁ単純に「データ要素」と思ってしまうのが簡単な気がします。
図面情報フィーチャ
図面表題欄フィーチャ
図面構造フィーチャ
用紙フィーチャ
レイヤフィーチャ
既定義線種フィーチャ、ユーザ定義線種フィーチャ
既定義色フィーチャ、ユーザ定義色フィーチャ
線幅フィーチャ
文字フォントフィーチャ
幾何要素/表記要素フィーチャ
点マーカ、線分、折線、円、円弧、
楕円、楕円弧、文字、スプライン、クロソイド
構造化要素フィーチャ
複合図形定義、複合図形配置、既定義シンボル、
直線寸法、弧長寸法、角度寸法、半径寸法、直径寸法、
引出し線、バルーン、
ハッチング(既定義)、ハッチング(塗り)、
ハッチング(ユーザ定義)、ハッチング(パターン)、
複合曲線定義
SXF仕様にはレベルがあって、簡易版のレベル1、通常版のレベル2、があり、レベル1は印刷が出来ればいいというもので、表記要素は使用不可、構造化要素はほとんど使用しない、というもので、部分図も1つのみ、という仕様です。例えば、寸法線は寸法線としてのフィーチャではなく、線分、文字、というバラバラ状態になってしまい、印刷は出来るとしても、図面編集を行う場合や、取引先に図面を渡す場合など少々不都合な事になってしまいます。ここではレベル1ではなくレベル2を想定していきます。
図面データは、用紙がまずあって、原点(0,0)は用紙左下、用紙座標系 X軸は右方向がプラス、Y軸は上方向がプラス、となります。そこで、尺度やユーザー座標系を表現するのに部分図が利用されます。部分図に属するものを「幾何要素フィーチャ」、部分図に属さないもの=図面用紙に直接作図されるものを「表記要素フィーチャ」といいます。部分図は、構造化要素フィーチャの複合図形定義・複合図形配置で作成できます。部分図の中に更に部分図を、という階層化は出来ません。
構造化要素フィーチャの複合図形には、部分図のほか、作図部品、作図グループ、というものがあります。作図部品は、まぁCADでよくあるブロック図形要素みたいなものでしょう。作図グループは、これもよくあるグループ化のようなものでしょう。作図グループは1つの定義を1回だけ配置可能です。作図部品・作図グループは階層化が可能です。
(※レベル1では、部分図は1つのみ可能、作図部品は使用不可、作図グループは1階層のみ、という制限があります)
この辺りはちょっとややこしいですが、昔のDOS時代ではブロック図形の無いCADもありましたが、現在では、あって当然の機能となってますので避けて通れません。
用紙 | ┬─ | 表記要素 |
|
|
|
|
|
|
| │ | 作図部品── | ── | 表記要素 |
|
|
|
|
| │ | 作図グループ | ┬─ | 表記要素 |
|
|
|
|
| │ |
| └─ | 作図部品── | ── | 表記要素 |
|
|
|
│
│ |
|
|
|
|
|
|
|
| └─ | 部分図─── | ┬─ | 幾何要素 |
|
|
|
|
|
|
| ├─ | 作図部品── | ── | 幾何要素 |
|
|
|
|
| └─ | 作図グループ | ┬─ | 幾何要素 |
|
|
|
|
|
|
| └─ | 作図部品 | ── | 幾何要素 |
作図グループは配置点は用紙原点/部分図原点と同じ、回転角度=0、X尺度=1、Y尺度=1、であるため座標変換の必要はありませんが、部分図は、XY座標系(数学座標系)とYX座標系(測地座標系)・配置点指定・回転角指定・X方向尺度・Y方向尺度、作図部品は、配置点指定・回転角指定・X方向尺度・Y方向尺度、の指定があり、作図部品は階層化も可能です。そのため、ある線分を作図する際、どの領域に属するかで、座標変換を掛けていく必要があります。例えば、
用紙−部分図A−作図部品B−作図部品C−線分
という場合は、線分の座標を作図部品Cで変換→作図部品Bで変換→部分図Aで変換→用紙(CAD画面)に作図、という処理が必要になるでしょう。まぁ、何度も掛けるのが面倒であれば、変換行列(マトリックス)化してアフィン変換を予め行っておけば、1回の計算で座標変換は可能です。勿論、部分図・作図部品の指定値が変更された場合には、アフィン変換も再計算しないといけませんけれど。
なお、これまでの幾つかのCADでは、ブロック図形での座標変換は、回転計算をしてから尺度計算、を行う場合がありましたが、仕様書に明示はされていないようですが、尺度計算をしてから角度計算を行うような感じのようです。計算の順序によって形状が違ってきますから、この辺りは注意したほうが良いと思います。
という事は取り合えず抑えた上で、まずは、図面情報フィーチャ〜図面表題欄フィーチャから見ていきます。SXF仕様書では下記のようになっています。
パラメータ | 型 | 説明 | 範囲 |
P_Name[257] | Char | 事業名 | 0<文字列長≦256バイト |
C_Name[257] | Char | 工事名 | 0<文字列長≦256バイト |
C_type[257] | Char | 契約区分 | 0<文字列長≦256バイト |
D_title[257] | Char | 図面名 | 0<文字列長≦256バイト |
D_number[257] | Char | 図面番号 | 0<文字列長≦256バイト |
D_type[257] | Char | 図面種別 | 0<文字列長≦256バイト |
D_Scale[257] | Char | 尺度 | 0<文字列長≦256バイト |
D_Year | Int | 図面作成年(西暦) |
|
D_Month | Int | 〃 月 | 1≦月≦12 |
D_Day | Int | 〃 日 | 1≦日≦31 |
C_Contractor[257] | Char | 受注会社名 | 0<文字列長≦256バイト |
C_Owner[257] | Char | 発注事業者名 | 0<文字列長≦256バイト |
備考
・文字列長にNULL文字は含まない(すべてのchar型パラメータに共通)。
・D_numberは、図面番号 + $$ + 総図面数で構成される。ただし、$$以降はオプションとする。 |
Delphi2010では、文字列データは簡単に「string」型として定義すると、UnicodeString となります。従来のAnsiString型(=シフトJISコードが使用可能)ではありません。この辺りを注意して。また、string[100] のような型は ShortString型(Ansiの短い文字列型)になりますが、ShortString型は最大255文字までですので、使用できません。SXF仕様での文字列の扱いは基本的にシフトJISコードのようです(*)が、本コーナーでは、敢えて Unicodeを使う事にしますので、SXF仕様に準ずるならば AnsiString型にすべきなのでしょうけれども、ここでは String型(=UnicodeString型)としています。
*仕様書の最後の補足説明4)にて、
レイヤ名称、複合図形名称、文字フィーチャの文字列など、
交換される文字の符号化文字集合は、Unicodeである。
シフトJISからUnicodeへの変換表は、・・・
とありますが、正直なところ、意味がよく分かりません。
JACICライブラリを実際に使う段になれば分かるかもしれませんが・・・
シフトJISコード=AnsiString型では、全角文字1文字=2バイト、として勘定しますが、Unicodeでは、半角文字も全角文字も、1文字は1文字として、各関数・手続きで利用します。基本的にバイト数として判定はしません。この辺りの違いがありますので、実際に SXFファイル変換を行う場合には、うまくやってやらないとだめでしょうね。
それでは簡易例です。
unit UnitData;
interface
type
TDataField = record
P_Name : string; // 事業名
C_Name : string; // 工事名
C_type : string; // 契約区分
D_title : string; // 図面名
D_number : string; // 図面番号
D_type : string; // 図面種別
D_Scale : string; // 尺度
D_Year : integer; // 図面作成年(西暦)
D_Month : integer; // 〃月 1≦月≦12
D_Day : integer; // 〃日 1≦日≦31
C_Contractor : string; // 受注会社名
C_Owner : string; // 発注事業者名
end;
var
CData : TDataField ;
implementation
end. |
最初は record (C言語でいうと構造体)で定義しておきます。これに値を入れる場合には
みたいな。
それでは超簡単なテストプログラムです。実行型ファイルは、サイズが大きくなるので含めていません。ソースだけです。
|
|
CAD装置(1)
CAD装置(2)
メディア
AutoCADの
DIESELマクロ
CSV
DXF
PCES
IGES
STEP
数学とCAD
CAD作ろ!
CADを考える
▲PREV
▼NEXT
M7
Jw_cad
|