So-net無料ブログ作成
検索選択

OCF最新動向ブログ [SXF]

CADのデータ交換といえば、AutoCAD(dxf,dwg)やJw_cad(jwc,jww)で
あるわけだが、建設CALSの関係から生まれたSXF(sfc,p21)だって
忘れてはいけない。
おいらもその設立に関与しているので、ここで改めてSXFについて
アピールしてみる。

最近の動きとしては、OCF最新動向ブログがある。
以下のように、SXFのZIP圧縮についての記事が投稿されているのだ。
SXFのZIP圧縮(1)~はじめに
SXFのZIP圧縮(2)~ZIP圧縮するメリットは?
少し引用してみる。
 皆様ご存知のようにSXFにはsfcとp21があり、いずれもテキスト形式で
 あるため ファイルサイズが大きくなりがちだったり、画像や属性を
 付加することで ファイルが分割されたりします。
 SXFによるデータ交換では、ファイルサイズとファイル分割は弊害となります。
 こんな弊害を解決する手法として「SXFのZIP圧縮」するのはどうでしょうか?
 という提案になります。

ふむふむ、これは期待できる変化だ。
ローカルなCADが乱立している日本のCAD業界において、データ交換は
重要なわけで、ましてやSXFは公共工事の電子納品としても使われて
いるんだから、どんどん進化してもらわないと。

じゃあ拡張子はどうなるのか、SXF対応CADの実装はどうなるのか、
それっていつから使えるようになるのかなど、そのブログでどんどん
書いてほしいものだ。

SXF技術者検定試験 [SXF]

ふと思い付いて、SXF技術者検定試験のバナーを載せてみた。

SXF技術者検定試験

「試」で切れているのには、何か意味があるのだろうか。
単純な間違いという気がしてならない。
それに、この素人臭さはちょっと問題。
クールでスタイリッシュに作り込んだサイトに、
このバナーを貼ると考えると、一歩引いてしまうだろう。
いやはや...。

クロソイドの限界 [SXF]

以前の記事で、こんなことを書いた。

> 試しに、簡単な曲線描画を行ってみようと思い、
> ここ数日あれやこれやと考えていたのだが、
> 一筋縄ではいかないことがわかった。
> らせん状にクルクル回っている感じを自分で
> 描画してみたかったのだが、なかなか。

どうしても頭から離れず、また何とかすべしという
義務感から再着手した。
下図のように、5回転半弱が限界だった。

[クリックすると高解像度の画像(1000×925)を表示]
クロソイド曲線

2000点の頂点を持つ折線で表現したので、
かなり高精度だと思われる。

SXFにおけるクロソイド曲線情報
配置基点X座標 0
配置基点Y座標 0
パラメータ 100
向きフラグ
(0:反時計廻り 1:時計廻り)
0
回転角 0
開始曲線長 0
終了曲線長 815

もっと何重にも描こうとすると、ガチャガチャの線になる。
こんな感じに。
ダメなクロソイド

どうやら、階乗の配列値がdoubleの最大値に近づいていることに
起因しているようだ。
以下のように128個の値を計算しているのだが、
最後の値は、3.8562048236258025e+215 にもなる。
有効桁が16桁程度しかないことも関係あるかもしれない。

int i;
double k[128];
for( k[0]=1.0, i=1; j<128; i++ )
  k[i] = (i+1) * k[i-1];

このくらいで勘弁してやることにした。
もう十分だ。

SXFのバージョン [SXF]

こうなったら、SXFのバージョンについても書かねばなるまい。
建設CALS/ECの一貫として生み出されたSXF。
(SXFとは、Scadec eXchange Format の略である。)
創世記から知っていたし、少しは関わってきたので、
それなりの知識はあるつもりだ。

SXFには、バージョンの前に「レベル」という考え方がある。
レベル1 画面(紙)上で、図面表示が正確に再現できるレベル
レベル2 2次元CAD製図データの要求を十分満たし、再利用時における使い勝手が確保され、 電子納品における要求を満たすレベル
レベル3 STEP/AP202における製図機能を全て満たすレベル
レベル4 STEP/AP202の製図機能だけではなく、図面に表される建設分野特有の意味合いも 属性情報として付け加え、図面データの高度利用を目指すレベル

今のところ、レベル2までが実用化されている。
Autodeskは、レベル3をすっとばしてレベル4に
取り組んでいたようだが、今はどうなっているやら。
レベル1は、線分や円、文字などの幾何図形だけ。
レベル2は、レベル1に加えて寸法線や複合図形(部分図、
作図部品、作図グループ)を加えたもの。

レベル2において、バージョンという考え方がある。
これは、共通ライブラリのバージョンと同期している。
(共通ライブラリとは、CADがSXFを読み書きするための
 プログラムライブラリのことで、CADを開発しているメーカーが
 利用するもの。)

V1.0 ファイルの拡張子は、SXF1種類のみ。
(のちに、仕様総称のSXFとの混同を避けるために廃止される。)
仕様的には、バージョン2.0ほぼ同じだが、既定義ハッチングが
存在しなかった。
共通ライブラリの機能が低く、メモリーリークや些細なバグ多数あり。
まだSXFの知名度は低く、一般にはほどんど知られていない。
V2.0 2次元CADデータが再利用性をもって交換できる仕様として、一般化。
ファイルの拡張子として、SFCとP21の2種類が取り決められた。
既定義ハッチングとして、馬踏みと45度重ねあじろが定義された。
共通ライブラリに、レベル1へのダウンコンバート機能が追加された。
V3.0 属性付加機構が採用され、図形に対して属性やターゲットを
設定することが可能。属性情報は、XML形式の別ファイル(拡張子SAF)
として保存。その他、図面表題欄、背景色、複数のラスター配置、
等高線の単位、Area_controlなど。
V3.1 新しいフィーチャー(図形)として、クロソイド曲線、弧長寸法線が追加。
図形の表示順、属性付加機構の改定など。
まだ運用が始まっていないので、詳細は不明。

クロソイド曲線 [SXF]

SXF Ver3.1では、クロソイド曲線が図形として追加される。
以下が、クロソイド曲線のデータ仕様。
 配置基点X座標 double(64bits)の範囲(有効桁15桁)
 配置基点Y座標 double(64bits)の範囲(有効桁15桁)
 パラメータ 0<パラメータ<10の15乗
 向きフラグ 0:反時計廻り 1:時計廻り
 回転角 0≦回転角<360
 開始曲線長 0≦開始曲線長<10の15乗
 終了曲線長 0≦終了曲線長<10の15乗

データ仕様としては、けっこう単純だ。
ところが、この曲線を実際に描画しようとなるとややこしくなる。
試しに、簡単な曲線描画を行ってみようと思い、
ここ数日あれやこれやと考えていたのだが、
一筋縄ではいかないことがわかった。
らせん状にクルクル回っている感じを自分で
描画してみたかったのだが、なかなか。

いろいろな記事を読んで、私が理解したところを書いてみる。
クロソイド曲線は、道路のカーブやジェットコースターの形などで
実際に利用されている。
道路のカーブで、直線と円弧を直接つなげるとハンドル操作が
困難になるため、そのあいだにクロソイド曲線を挿入する。
直線と円弧をつなげた場合、見た目上はなめらかにつながるので、
自然な運転操作ができるのではないか、と考えるのは間違いだ。
ハンドルを瞬間的に一気に回転させることが可能であればよいが、
そんなことは物理的に不可能だし、仮にできたとしても、
乗っている人間はかなりの衝撃を受けるはずだ。
一定速度でハンドルを回転させる、これが常識的な運転操作であり、
この場合の軌跡を描いたのが、クロソイド曲線だ。
ゆるいカープで始まって、だんだんカーブがきつくなっていく。
徐々に曲率が高くなってくわけだ。
結果、らせん状にグルグル回る形状になる。
実際の道路では、そんなグルグル回る形状までは使わないけれども。

SXFでクロソイド曲線が図形として追加されるということは、
SXF対応CADはクロソイド曲線をデータとして保持する必要が発生する。
AutoCADやJw_cadなどで、クロソイド曲線を描画するための機能はあっても、
データとして保持できるという話は聞いたことがない。
大量の点列を持ったポリラインでデータを保持することになる。
SXFに対応するということは、SXFファイルを読み込んで書き出した結果のSXFが、
最初のSXFと一致しなければなない。
少なくとも、OCF検定に合格するためには絶対求められることだ。

さて、現在SXFに対応しているCADはどうするだろうか。
新しい図形タイプであるクロソイド曲線に対応するために、
データ構造を変更しなければならない。
データ構造を変更すれば、変更したバージョンで保存したデータを
下位のバージョンで開くことができなくなる。
実例でいうと、AutoCAD2007でDWGのデータバージョンが変更に
なったことにより、2007で保存したデータが2006以下で開くことが
できなくなったことがあげられる。
(気の利いたデータ構造を持っていれば、話は別だけれども。)

クロソイド曲線が、道路設計で必須の機能だというのはわかる。
専用CADであれば、当たり前のように実装している機能であろう。
CADを使う分野は製造と建設があり、建設の中の一部の
分野として道路設計がある。
SXFは建設系の業界で利用されることを前提としたファイルフォーマット
なので、製造業は関係ないとしても、それにしてもある特定の分野に
限った機能という感が否めない。

SXF Ver3.1に対応するCADがどれだけ出てくるか?
注目してみていこうと思う。

SXFレイヤ [SXF]

SXFのレイヤは非常にシンプルだ。
名称(最大256バイト)、表示or非表示。
最大で256個のレイヤを保持することが可能。
以上である。

AutoCADの場合。
SXFが保持している情報プラス、
フリーズ、ロック、色、線種、線の太さ、印刷スタイル、印刷するかどうか、説明。
多彩な情報を持っている。
多ければいいというものでもないが、SXFはシンプルすぎるか。
また、AutoCADではレイヤと呼ばずに、画層と呼ぶ。
なかなか味のある命名で、意味的なものを考えるととてもよいが、
画層という単語は一般性がなく、少々違和感を感じる。
英語のレイヤを無理に日本語化した感じ。

さて、SXFのレイヤにおいて、決定的に不足している情報がある。
AutoCADで言うところの「現在の画層」だ。
他CADで言うところの、マスタ、アクティブ、カレント、書き込み。
要は、図形が追加される対象のレイヤ。
どんなCADでも、この考え方はあるだろう。
SXFに現在の画層がないことによる弊害がある。

●あるCADがSXFを読み込んだ場合
非表示のレイヤが表示されるかもしれない。
そのCADでは、アクティブなレイヤをどこかに設定しなければならない。
最も単純に考えれば、一番最初に現れるレイヤをアクティブにする。
一番最初に現れるレイヤが非表示だった場合、そこがアクティブになり
表示されてしまう。
少し気がきいていれば、「最初に現れる表示レイヤ」をアクティブにする。
これで大抵の場合にうまくいく。
では、SXF上で全てのレイヤが非表示だったらどうなるか。
妥当な線としては、最初のレイヤをアクティブにする。
結果、非表示のレイヤが表示されることになる。

●あるCADがSXFに書き出した場合
表示されているレイヤが非表示になるかもしれない。
そのCADには、アクティブだけれども非表示という状態がある。
アクティブでないときの表示/非表示を保持するということ。
アクティブという状態は、画面に表示されている状態だが、
設定状態としては、非表示。
さて、SXFに書き出すときに表示にするだろうか非表示にするだろうか。
判断がわかれるところだ。
アクティブという考え方は、SXFにはない、そのCAD固有のものなので、
非表示を優先するかもしれない。
いや、そのCADで実際に表示されているのだから、
表示で書き出すべきか。
悩ましい。

はやい話、SXFにアクティブという状態が保持できればいいのだけどね。
いずれ実現するだろうか。


SXFのメリット [SXF]

公平な観点から、DXFとSXFを比較するには、SXFのメリットについて
語る必要があると考え、この記事を書くことにした。

SXFの何が良いって、仕様が明確に公開されていること。
DXFの場合、AutodeskさんがDXF Referenceを公開してるんだけど、
詳細に書かれていない部分があったり、読む人によって解釈が違ったり、
英語がわからなかったりして、共通の理解が進まずに問題を引き起こす場合がある。
その点、SXFの仕様書は、日本語で書いてあるし、仕様書だけでなく、
実装規約というドキュメントがあったりして、誤解が生まれないようになっている。
もしCADベンダー間で解釈が異なった実装をしていた場合でも、
OCFという組織が統一見解を出して、どっちが正しいかの判定をしてくれる。
何が正しいかっていうのを、きっちりと決めてくれるのは、開発者としても頼もしく感じる。

よく言われるのは、一営利企業であるAutodeskさんの作ったCADフォーマットでは
半永久的に保持、運用することが想定されるCAD図面の保管には適さない、ってこと。
国が中心となって策定したSXFであれば、その信頼性が高まるってことだろうな。
まぁ、一理ある。

あとは、共通ライブラリの存在だな。
SXFの読み書きをするためのコンポーネントが無料で使える。
VC6でしか使えないというのは、やや幅がせまい気もするが、ないよりはいい。
開発者にとっては、ファイルIOにまつわるややこしい処理をしなくてもいいというのは、
大きなメリットだ。
ほとんどのCADベンダーは、この共通ライブラリを使ってるので、
ファイル内のちょっとした書式の違いが元でトラブルになるなんてことは皆無だ。
ユーザーにとっても、トラブルの少ないデータ形式ということでメリットがあるはず。

それから文字か。
CADのデータ交換で一番問題になるのは文字だからさ。
SXFでは、WindowsのTrueTypeフォントしか使えないことになっている。
CADの世界では永いこと、そのCAD独自のフォントを使うことが一般的だった。
CAD間で別のフォントを使うということは、文字の形状が維持できないということで、
特に文字幅が正しく渡らずに問題になる。
DXFのSHXフォントには泣かされてるよ。
その点、SXFはWindowsのフォントしか使えないから、問題が起きにくいわけ。
MacやLinuxユーザーはどうするのかって?
少数派だから切捨てか。

ということで、SXFのメリットってのもかなりある。
私個人の現段階における見解では、DXF(DWGも含めて)に分があると考えている。
何といってもDXFには長い歴史があって、デファクトスタンダードを勝ち取った
という経緯があるし、巨大企業Autodeskの繁栄はしばらく続きそうだし。
でも、将来的にどうなってるかはわからない。
歴史の浅いSXFではあるが、この先地道に地位を築いていって、
いずれは立場が逆転するなんてこともあるかもしれない。
目が離せない。


SXF複合曲線 [SXF]

SXFネタは久しぶりだ。
複合曲線=composite_curve
SFCやP21の中では、こう記述されている。

ハッチングの輪郭情報は、この複合曲線によって表現される。
複合図形に似ているけど、一線を画している。
複合曲線として登録可能な図形は、円弧、楕円弧、折線、
スプライン曲線に限られる。
線分、円、楕円がダメな理由がよくわからん。
円1個に対してハンチングを書いてある場合、
わざわざ円弧2個に分解してSXFに書き出さなきゃならん。
なんのこっちゃと嘆きつつ、コンバータを作ったのは記憶に新しいところだ。
たぶん、AP202だかのルールに従ったからなんだろーな。
それから「構成要素は、接続し閉じている必要があり、交差、重なりは許さない」
なんて仕様書に書いてあるんだけど、気の利かないCADから書き出された
SXFの場合、構成要素が繋がってる順番とは関係なくバラバラにくることがある。
最初の要素から、繋がる順に要素をソートするなんていう、
処理を入れたのは苦い思い出だ。
接続し、という状態もいろいろある。
座標がぴったりと合っているとは限らないので、ある程度許容誤差が必要になる。
円弧なんかだと、点を座標で持ってるわけじゃないから計算誤差が出るのよ。
中心点と半径と開始角から、開始点を求めるから。
そうすると、輪郭が繋がってないハッチングが出来て、
ハッチング線が輪郭からはみ出たりする。
そして、検定中止で不合格。
どんよりとした気持ちで検定会場を後にする。
そんなことを何度か経験した。

ハッチングには、4種類のタイプがある。
塗り、ユーザー定義、パターン、既定義。
塗りは単純、特定の色で塗り潰すってもの。
ユーザー定義は、線と線の間隔や線の角度を任意に指定できる。
パターンは、既定義シンボルをずらーっと並べたもの。
既定義シンボルは2個しかないから、大して意味ないかな。
(馬踏み、45度重ねあじろ)
いつか増やそうという意向でまず2個つくったんだろうけど、
その先が続かなかった。
既定義はV3でしか使えないもので、Area_controlとも呼ばれている。
属性付加機構において、空白の領域を定義するものなんだけど、
何に使うんだろうか。

複合曲線とは関係ないけど、もう1つ書いておこう。
#10 = pre_defined_colour_feature(¥’white¥’)
SFC内の記述を見ると、こんな風に書いてある。
既定義色の白が使われてるんだよってことなんだけど、
問題は、white の前後にある「¥’」(全角で書いたけど本当は半角) 。
C言語では、文字列としてシングルコーテーションそのものを表すのに
その前に¥マークを書くわけさ。
Cだったらそれいいけど、テキストファイルであるSXF内にそんな記述を
許しているあたり、何だかはずかしいね。
読み書きするのは、共通ライブラリだからそのフェーズさえ
合ってれば実害はないんだけどね。
なんかへんだよ。
こうでなければならない、という理由はないはずだからさ。

長く書いてしまったようだ。
今日、SXFとBLOGでググってみたら、けっこう上位になってたから、
そんじゃ、久しぶりにSXFネタいってみようってところ。


SFCとP21 [SXF]

SXFフォーマットにおける2つの種類、それがSFCとP21だ。
どちらもテキストファイルなので、テキストエディタで内容を確認できる。
SFCは記述が単純でわかりやすいので、だいたい何が書いてあるかわかるよ。

一方P21はとういと...ほんと、わけわからん。
国際標準である「STEP AP202」に準拠しているんだと。
EXPRESS言語で、うんたらかたんらという講釈を以前どこかの講習会で
聞いたような気がする。
CADの図形を表現するためには無駄な情報が多いので、
結果、ファイルサイズが膨大になる。
国際標準に準拠するための弊害が、ファイルサイズの膨大化に繋がったわけだ。
なんともアホらしい話だ。
SFCだけありゃ、いいんだよ。

今、巷では電子納品が活発に行われているようだ。
CALS/ECの一環としてさ。
そして、電子納品の標準フォーマットがP21になったわけだね。
国際的に通用するCADフォーマットとして、P21が採用された。
いや、 国際的に通用するのではなくて、国際標準に基づいているだけだった。
基づいていることには大して意味はなくて、ただ権威がほしかっただけだな。


OCF検定 [SXF]

久しぶりのCADネタだ。
行ってきました、OCF検定。
そして、今検定会場から家に帰ってきた。
疲れた。

よく考えたら、前にもOCF検定というタイトルのブログを書いていた。
読み返したみたら、けっこういいこと書いている。
検定の内容とか意義とか、けっこうわかりやすく書いていたりして。

社外の人との交流というのも興味深いものだ。
CADベンダーの集まりなので、
「AutoCAD2007でDWGのフォーマットが変わりましたね」
なんていう粋な会話も出来る。
転職するのに役立ったりして。

今回は、V2検定だけで受検することになった。
私ともうひとりの人の合計2人で検定に臨んだ。
事情があり、レンタルでノートPCを借りた。
2台を3週間で、5万円くらい。(実は再来週にも同じ検定を受ける。)
けっこう安い値段だと思う。
会場に直行直帰だったので、一昨日は会社から自宅に持ち帰り、
今日は会場から家に持って帰ってきた。
これが重い!
本体が3.5キロで、ACアダプタやらマウスやら何やらを含めると、
5キロくらい。

結果は良好。
他社は落ちたところもあって、哀愁が漂っていた。
丸一日拘束されて、結果が不合格だったら、
さぞかし、つらいだろう。
アホらしいと思うかもしれない。
わが社も過去に何度か経験している。

一応会社で受験するということになってるけど、
現場での操作やら説明をする必要があるので、
実質的には、受験する個人が評価されているようなもの。
正しい操作を行う、説明を求められたときの適切な返答、
こんなプレッシャーが受験者にはのしかかる。

今回の受験は、私が責任者兼プログラマー兼受験者として望んでいたので、
けっこう大きなプレッシャーだった。
合格したので、とりあえず一つ重荷を下ろせたかな。
一つのハードルは越えた。
最近の鬱々としていた気分の一部は晴れた。
少しだけど。

今日はパーっとやろう!