AFsoft WebSite(エーエフソフト・ウェブサイト)
 

オペレーティング・システムについて

プログラミングについて
ホームページについて
キャドについて
電子カタログについて
書籍・雑誌
イベント
リンク集
CADを考える:SXF仕様とフィーチャ
「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_YearInt図面作成年(西暦)
D_MonthInt  〃 月1≦月≦12
D_DayInt  〃 日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言語でいうと構造体)で定義しておきます。これに値を入れる場合には
CData.P_Name := ・・・;
みたいな。
 
それでは超簡単なテストプログラムです。実行型ファイルは、サイズが大きくなるので含めていません。ソースだけです。
 
CAD装置(1)
CAD装置(2)
メディア
AutoCADの
DIESELマクロ
CSV
DXF
PCES
IGES
STEP
数学とCAD
CAD作ろ!
CADを考える
 ▲PREV
 ▼NEXT
M7
Jw_cad
 
お問い合わせ 
本サイトはリンクフリーです
リンクバナー
(C)Copyright 1999-2015 By AFsoft All Rights Reserved.