OpenCASCADE で IGES ファイルを読み込むには、IGESControl_Reader クラスを用います。
[cpp]
include <stdio.h>
include <Standard_TypeDef.hxx> // Standard_Boolean
include <Standard_Macro.hxx> // Handle()
include <TopAbs_ShapeEnum.hxx> // ShapeType
include <TopoDS.hxx> // TopoDS::
include <TopoDS_Shape.hxx> // TopoDS_Shape
include <TopoDS_Face.hxx> // TopoDS_Face
include <IGESControl_Reader.hxx> // IGES Reader
int main(int c, char** v)
{
Standard_CString path = "sample28.igs";
// IGES制御リーダで読み込む
IGESControl_Reader reader;
if (reader.ReadFile(path) != IFSelect_RetDone) {
// エラーが起きた
reader.PrintCheckLoad(Standard_True, IFSelect_ItemsByEntity);
return 1;
}
// 変換対象のルート数
printf("number of roots = %d\n", reader.NbRootsForTransfer());
// IGES内のルートを OCC で扱えるように変換
reader.TransferRoots();
// 得られたシェイプ数
printf("number of shapes = %d\n", reader.NbShapes());
// シェイプの取得
for (int i=1;i<=reader.NbShapes(); i++) {
TopoDS_Shape s = reader.Shape(i);
if (s.ShapeType() == TopAbs_FACE) {
TopoDS_Face f = TopoDS::Face(s);
// 取得した Face で何かする
printf("%04X\n", f.HashCode(0xFFFF));
}
}
// 一つのシェイプにして返す場合
// TopoDS_Shape s = reader.OneShape();
return 0;
}
[/cpp]
次のようにビルドします。TKIGES にリンクするのを忘れないように注意してください。
[bash]
$ g++ -g -lTKernel -lTKMath -lTKBinL -lTKIGES -L/usr/lib/opencas -I/usr/include/opencascade -o occtest occtest.cxx
[/bash]
IGES関連のクラスについての解説は、$CASROOT/../doc/iges.pdf にドキュメンテーションが同梱されているので、そちらを参考にしてください。また、IGES ファイル自体の仕様(PDF)は、US Product Data Association で公開されています。
初めまして。
dyama様のブログ、OpenCASCADEを利用する上で、とても貴重な資料として読ませていただいています。
Ubuntu 13.04 x64上で Qt 4.6.2, OpenCASCADE 6.6.0を野良ビルドして、こちらのサンプルソースを実行するところまでようやく辿り着きました。(3日かかっちゃいました)
これからもよろしくお願い致します。
>>Tofslaさん
コメントありがとうございます。
OpenCASCADEの日本語情報って本当に少ないですよね。私も手探り状態で、覚え書きとして記事を書いておりますが参考にしていただけるのは嬉しい限りです。
職場では Windows7/32bit, VC++, C# で開発をしており、自宅では Ubuntu 13.04 x64 をクライアントに、Debian GNU/Linux 7.0 x86 と OCC6.3.0, OCC6.5.4, OCC6.6.0 を切り替えて作業をしています。
6.6.0 は昨日、ビルドしたばかりです。これから見て行こうと思います。