OpenCASCADE で IGES ファイルを読み込むには、IGESControl_Reader クラスを用います。
[cpp]
目次
- 1 include <stdio.h>
- 2 include <Standard_TypeDef.hxx> // Standard_Boolean
- 3 include <Standard_Macro.hxx> // Handle()
- 4 include <TopAbs_ShapeEnum.hxx> // ShapeType
- 5 include <TopoDS.hxx> // TopoDS::
- 6 include <TopoDS_Shape.hxx> // TopoDS_Shape
- 7 include <TopoDS_Face.hxx> // TopoDS_Face
- 8 include <IGESControl_Reader.hxx> // IGES Reader
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日かかっちゃいました)
これからもよろしくお願い致します。