(191211)
(200515)
1.概要
百人町施設の記録図面からAutoDesk系のソフトで入力したIFC形式のデータは、ArchiCADでは読み出せない
一方、景観シミュレータの外部関数IFC.exe では、ArchiCADのサンプルが読み出せない
その原因を調べると、頂点→面→立体→部材→建物の構築のパスが異なることが判明した。
そこで、以下の取り組みを行った。
1.IFC.exe のバージョンアップにより、ArchiCADのサンプルを処理可能とする
2.メタファイル IFC.cmm を異なる構造のIFCファイルに関して作成する
3.新たに、WebGL上を用いてブラウザのcanvasタグにIFC形式を読み込むスクリプトを試作する
2.IFC.exeの改良
使用したサンプルデータ
(141219時点、AutoCAD系)
サンプル壁のみ.ifc
サンプル1.ifc
サンプル2スパンRC.ifc
→これらはBOOL演算及び回転を含む座標変換を使用
(150219時点、AutoCAD系)
01本館棟.ifc~16実大排煙実験室.ifc
→これらはシンプルな三角形分割モデル
(181206時点、ArchiCAD系
sample_RC_AC21.ifc
→BOOLを入れ子で使用
回転を含む座標変換を使用
百人町データのIFCファイルにおける階層構造(シンプルなサーフェスモデル)
IFCCARTESIANPOINT
→IFCPOLYLOOP(閉じた頂点列)
→IFCFACEOUTERBOUND (外周), IFCBOUND(穴)
→IFCFACE(面)
→IFCCONNECTEDFACESET(面群)
→IFCFACEBASEDSURFACEMODEL(多面体)
→IFCSHAPEREPRESENTATION(形状の種類と形状データ)
(以下同)
→IFCPRODUCTREPRESENTATION(部材の表現)
→IFCBUILDINGELEMENTPROXY(部材のID、和文名称、配置、部材の表現)
ArchiCADサンプルRC建物における階層構造(シンプルなサーフェスモデル)
IFCCARTESIANPOINT
→IFCPOLYLOOP(閉じた頂点列)
→IFCFACEOUTERBOUND(外周)
→IFCFACE(面)
→IFCOPENSHELL(開いた殻、異なる経路)
→IFCSHELLBASEDSURFACEMODEL(異なる経路)
→IFCSHAPEREPRESENTATION
(以下同)
(このサンプルにおいては、立体を表現するために、他のいくつかの手段が使われている(後述)が、
IFCFACEBASEDSURFACEMODELは使用されていない。
190918時点での成果
・入れ子になったBOOL演算に対応
・穴あき図形に対応(景観シミュレータの平面穴あけ機能を移植導入
→最新版は190918で、デバッガを用いてsample_RC_21.ifcを変換
・生成したgeoファイルを景観シミュレータにロードする時点でBOOL演算を実施
・ロードが終了後に、表示段階で面積微小のエラーを表示
・141219時点のサンプル3題に関しては解決
ただし、ksim/binにはこの時点でまだ反映していない。
残された課題
GetTransform関数で、「回転要素あり」としてエラー処理に入る場合への対応(15ヶ所)
(70060, 78436, 106858, 107128, 854871,
1238856, 1239202, 1240108, 1240378, 1253117,
1334290, 1334802, 1335715, 1335985, 1342881)
仮想線と交差する内輪処理において交差数が1しかない
→854871 I=1, i=4, j=24
→1138599 I=1, i=4, j=0
(これらについては、2005時点で解決)
BOOL演算の中間ファイルを削除する機能が必要(現状は、ifc.exeと同じディレクトリ)
カラー、マテリアルなど
02_土圧試験室.ifc について見ると、
IFCCOLOURRGBで根本定義されたカラーが、4階層を経て、
IFCSTYLEDITEM(モデル、スタイル)コマンドにより関連付けられる
このモデルは、屋根、建具、床、壁の4レイヤーをもつ。
屋根、床、壁はすべて(0.7,0.7,0.7)であるが、
建具だけは、(0, 1, 1)のカラーを有する。
IFCCOLOURRGB→IFCSURFACESTYLERENDERING→IFCSURFACESTYLE
→IFCREPRESENTATIONSTYLEASSIGNMENT→IFCSTYLEDITEM
サンプル集合住宅におけるマテリアルは、材質がわかるのみでカラー情報を持たない場合もある
→一般的な材料の表面光学特性をデフォルト・マテリアル(IFC.mtl)
個別IFCファイルの中で特にカラー指定されている場合について、
百人町施設のマテリアル(百人.mtl)
集合住宅サンプルのマテリアル(sample_RC_AC21.mtl)
として整理。景観シミュレータの外部関数としてのIFC.exeで変換する場合、
これらのファイルをkdb/material配下にコピーしておき、変換入力を行うと、
部材にマテリアルが定義され、表示段階でマテリアルファイルが参照される。
マテリアル・ファイルの作り方
新たなIFCファイルを変換したときに、既存のIFC.mtl等に定義されていないマテリアルが参照された場合、
表示段階でエラーメッセージが表示され、「確認のために光らせる」という選択肢が提示される。
IFC.exe の場合、変換出力するLSSGファイルの末尾にマテリアル定義をCOMMENT(ON); ~COMMENT(OFF);
で囲って出力しているので、この部分をコピーして既存のマテリアルファイル(例えばIFC.mtl)に追記するか、
または新しいマテリアルファイルを作成すれば、正常に表示されるようになる。
この作業を行うためには、コマンドプロンプトからIFCを次のように起動する。
>IFC.exe 変換元ファイル.IFC 変換先ファイル.GEO 1
最後のフラグ1は、メッセージ等を豊富に出力する場合に立てる。
景観シミュレータから外部関数として起動する場合には、通常0である。
200520時点での成果
BOOL演算における仮のファイル作成場所の明確化
従来の改良においては、IFC.exeを単独で起動し、引数として変換元ファイルと変換先ファイルを指定していた。
この場合、BOOL演算用のファイルを作成する場所はカレントであり、直前に行われた処理に影響されていた。
一方、sim.exeの外部関数として実行された場合には、sim.exeによって以下のように制御される。
パラメータ設定ダイアログが終了した時点:/ksim/temp/IFC.geo が作成される。この中で、
Gxx=FILE(IFC,変換元ファイル.ifc, 変換結果格納ファイル.geo,1);
という1行が、IFC.exeに与えるパラメータを定義している。
このファイルは、次のIFCダイアログが上書きするまで残っている。
このファイルを実行すると、ksim/temp/IFC.g という長いファイルが作成される。
IFC.exeが実行終了すると、次にsim.exeがこのファイルのロードを開始する。
このロードの過程で、BOOL演算に先立ってOUTPUT関数が、tempディレクトリに形状ファイルを出力し、
子プロセスとしてBOOL.exeを起動する。BOOL関数は、形状ファイルを二つ読み込んで、結果を第三のファイルに出力する。
この結果をsim.exe(IPライブラリ)が読み込んで、IFC.gファイルの読み込み処理を続行する。
形状ファイルの拡張子を「.geo」としても、「.g」としても正常に処理は完了する。後者の場合、
すべての変換処理が終了した時点で形状ファイルは削除される。また、拡張子を「.geo」とした場合、
形状ファイルはtempディレクトリに残る(デバッグに用いることができる)。この場合、
IFC.exeが生成した「IFC.geo.del.bat」を用いて、これらの形状ファイルを一括削除することができる。
BOOL.exeが処理に失敗した場合、二つの形状ファイルを構成する面群の内、失敗したペアを格納した
「u2FailCaseN.geo」というファイルがksim/tempディレクトリに作成される。
(大きなファイルの処理に際しては、数百に及ぶ多くのファイルが作成される場合がある)
CONCAVE(ON), CONCAVE(OFF)の切り換え(200422)
正常なLSS-Gファイルにおいては、凹多面体を出力する前に「CONCAVE(ON);」を実行し、
次の図形が凸であればその後に「CONCAVE(OFF);」を実行する。
しかしながら、テスト、デバッグに使用したサンプルデータ(IFC)には、
8の字状態に巻いた病的な図形が含まれていた。これをこのままCONCAVE(ON)として処理すると、
負の面積を有する残余図形が生じてエラーメッセージを発する。その数が非常に多い場合、
オペレータの負担が大きい。そこで、このような図形を検出した場合には、CONCAVE(OFF)として
出力するように、便宜的に対応した。自動修正を行う処理は、「園路生成」に作成例があるが、少し長い。
単位の処理(200424)
sim.exeにおいては、長さの単位がmであろうが、mmであろうが、結果を同じ縮尺で解釈すれば問題ない。
しかし、一つ例外があり、座標値の一致不一致の判定等を行う場合にEPSの意味が異なってくる。
そこで、IFCファイルの先頭部に、単位の定義があれば、以後の処理をその尺度で行うこととした。
[例]
#42= IFCSIUNIT(*,.LENGTHUNIT.,.MILLI.,.METRE.);
・・・
#78= IFCUNITASSIGNMENT((#42,#44,・・・));
(ここに列挙されるのは、長さ、面積、体積など異なる単位である。「mm」と「m」の両方が指定された場合エラー
BOOL演算における不適切な図形への対応(200417)
BOOL演算にかけられる図形が冗長に記述された図形である場合に、エラーを惹起する場合がある。
例えば、隣接する2頂点が同一座標値を有していたり、連続する3頂点が一直線上にある場合には、
一つの頂点を削除することが有効である。しかし、このような縮減処理を行った結果、片方の図形が
三角形未満となってしまったような場合、前捌きを行い、演算関数を呼び出さないこととした。
またこのような場合であっても、面を持たない空の立体を出力することにより、次の演算処理につなげる。
(そうしなければ、「結果ファイルがない」エラーとなる)
曲線断面から構成される掃引体図形の処理(200517)
サンプルデータでは、ハンガーレール(径30mm)の断面を定義するために、4の円弧を使用している。
「IFCEXTRUDEDAREASOLID(断面, 座標系, 掃引方向, 掃引長さ);」
という表現で掃引体を記述するのであるが、断面の記述方法の一として、
IFCARBITRARYPROFILEDEFINITIONWITHVOIDS('area', 断面名称, 曲線群, (曲線群, 曲線群));
で、最初の曲線群が外側図形の曲線群、配列を成す曲線群は中島図形の曲線群である。
一つの曲線群は、
IFCCOMPOSITECURVE((曲線1, 曲線2,・・・),.F.);
の形式で表現される。
一つの曲線は、
IFCCOMPOSITECURVESEGMENT(.CONTINUOUS.,.T.,円弧);
の形式で例えば円弧を参照する。
一つの円弧は、
IFCTRIMMEDCURVE(円、(開始点の座標, IFCPARAMETERVALUE(開始角)), (開始点の座標, IFCPARAMETERVALUE(開始角)),
.T., .CARTESIAN.);
の形で円とその周上の開始点と終了点を記述する。
実装に当たっては、角度で分割して多角形近似を行った。
ダウンロード
コンバータ本体
IFC.exe
ファイル選択ダイアログ
IFC_D_exe
マニフェストファイル
IFC_D.exe.manifest
リソースファイル
IFC_D.rc
リソースヘッダ
IFC_D.rc.h
以上は、ksim/bin 配下に配置します。
日本語リソース
IFC.ja.xml
*ksim/Language/ja に配置します。
インドネシア語リソース
IFC.id.xml
*ksim/Language/id に配置します。
関連する実行形式のアップデート
図形演算(連続する演算に対応)
BOOL.exe
景観シミュレータ(大量の変換エラーの中間表示省略)
Sim.exe
URLアクセス(https転送)
geoload.exe
(ID,パスワード付きURLアクセス)
URL.exe
*ksim/bin に配置します。(念のため、オリジナルをバックアップした上で更新)
(同、ヘルプ日本語)(
URL.ja.txt
*ksim/Language/jaに配置します
(同、インドネシア語)(
URL.id.txt
*ksim/Language/idに配置します
テスト用データ
百人町庁舎記録データの例.ifc
02.ifc

集合住宅サンプル
sample_RC_AC21.ifc"
IFC形式のデフォルト・マテリアル
IFC.mtl
百人町施設のマテリアル
百人.mtl
集合住宅サンプルのマテリアル
sample_RC_AC21.mtl
Geoload テスト用
集合住宅1スパン分(WEB)
LSS-Sデータ(web)
集合住宅1スパン分(LAN)
LSS-Sデータ(lan)
3.メタファイル IFC.cmm の増補
メタファイルを用いてIFC形式のデータを解読するためには、以下の手段がある。
(1)景観シミュレータの外部関数(VC-1C.exe)で変換する。
(2)景観シミュレータのプラグインDLL(VC-2V)で変換する。
(3)Android アプリ(VC-3M)で変換する。
(4)サーバ上で運用される三次元データ保管庫で変換する。
1.詳細未詳のIFC形式データに関しては、内部で使用されているコマンドの一覧と出現頻度を見るのが便利
変換処理を行わず、データ構造の解析だけを行うツール
IFCdebug.cmm
2.百人町庁舎の記録データを解読するためのメタファイル
IFC.cmm
3.集合住宅サンプルデータを解読するためのメタファイル
作成中
4.WebGLによるIFC形式の解読
HTMLにおいては、WEBブラウザ上で、JavaScriptからOpenGL表示を行うことができる(WebGL)。
JavaScriptで記述したページにおいて、クライアント側のIFCファイルを選択・ロードし、クライアント側の
計算資源だけを用いて表示を行う機能を試作した。データがホスト側に送付されることはない。
Windows上のIE,Vivaldiと、Android上のChrome,Vivaldi等で表示確認を行った。
試作ページ
テストページ