OpenCASCADE で IGES ファイルを読み込む

最終更新日

Comments: 2

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(&quot;number of roots = %d\n&quot;, reader.NbRootsForTransfer());

// IGES内のルートを OCC で扱えるように変換
reader.TransferRoots();

// 得られたシェイプ数
printf(&quot;number of shapes = %d\n&quot;, reader.NbShapes());

// シェイプの取得
for (int i=1;i&lt;=reader.NbShapes(); i++) {
    TopoDS_Shape s = reader.Shape(i);
    if (s.ShapeType() == TopAbs_FACE) {
        TopoDS_Face f = TopoDS::Face(s);
        // 取得した Face で何かする
        printf(&quot;%04X\n&quot;, 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 で公開されています。

佐世保のシステムエンジニアです。詳しいプロフィールやこのブログについてはこちらをご覧ください。

2件のフィードバック

  1. 初めまして。
    dyama様のブログ、OpenCASCADEを利用する上で、とても貴重な資料として読ませていただいています。
    Ubuntu 13.04 x64上で Qt 4.6.2, OpenCASCADE 6.6.0を野良ビルドして、こちらのサンプルソースを実行するところまでようやく辿り着きました。(3日かかっちゃいました)
    これからもよろしくお願い致します。

  2. >>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 は昨日、ビルドしたばかりです。これから見て行こうと思います。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

コメントする

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください