OpenCascadeLink を使う

このセクションでは,OpenCascadeLink が適用できる方法のいくつかについて説明する.OpenCascadeLink を使うには,まずロードする必要がある.

OpenCascadeの例の多くは,有限要素メッシュの機能と関係があるので,有限要素パッケージもロードする.

OpenCascade のプリミティブ

まず最初に OpenCascade オブジェクトを作成する必要がある.いくつかの方法でこれを行うことができる.3Dオブジェクトについては以下がある:

三次元立体プリミティブ

Wolfram言語のさまざまなGraphics3Dプリミティブを OpenCascade で表すことが可能である.これらのプリミティブは立体として表される.

Ball(球体)

2つの異なるBallプリミティブを OpenCascade で作成する.
OpenCascade の形状タイプを調べる.
境界付きのElementMeshを1つ目の OpenCascade の形状から生成する.
境界付きのElementMeshを2つ目の OpenCascade の形状から生成する.
境界付きのElementMeshを可視化する.
完全なElementMeshを生成する.
いくつかのBallプリミティブを OpenCascade で生成する.

CapsuleShape(カプセル形)

CapsuleShapeプリミティブを OpenCascade で作成する.
OpenCascade の形状タイプを調べる.
境界付きのElementMeshOpenCascade の形状から生成する.
境界付きのElementMeshを可視化する.
完全にメッシュをかけられたElementMeshを可視化する.

Cone(円錐)

Coneプリミティブを OpenCascade で作成する.
OpenCascade の形状タイプを調べる.
境界付きのElementMeshOpenCascade の形状から生成する.
境界付きのElementMeshを可視化する.
完全にメッシュをかけられたElementMeshを可視化する.

Cuboid(直方体)

Cuboidプリミティブを OpenCascade で作成する.
OpenCascade の形状タイプを調べる.
境界付きのElementMeshOpenCascade の形状から生成する.
境界付きのElementMeshを可視化する.
完全にメッシュをかけられたElementMeshを可視化する.

Cylinder(円柱)

Cylinderプリミティブを OpenCascade で作成する.
OpenCascade の形状タイプを調べる.
境界付きのElementMeshOpenCascade の形状から生成する.
境界付きのElementMeshとグラフィックスプリミティブを可視化する.
完全にメッシュをかけられたElementMeshを可視化する.

Ellipsoid(楕円体)

Ellipsoidプリミティブを OpenCascade で作成する.
OpenCascade の形状タイプを調べる.
境界付きのElementMeshOpenCascade の形状から生成する.
境界付きのElementMeshとグラフィックスプリミティブを可視化する.
完全にメッシュをかけられたElementMeshを可視化する.

FilledTorus(非空のトーラス)

FilledTorusプリミティブを OpenCascade で作成する.
OpenCascade の形状タイプを調べる.
境界付きのElementMeshOpenCascade の形状から生成する.
境界付きのElementMeshとグラフィックスプリミティブを可視化する.
完全にメッシュをかけられたElementMeshを可視化する.

Hexahedron(六面体)

Hexahedronプリミティブを OpenCascade で作成する.
OpenCascade の形状タイプを調べる.
境界付きのElementMeshOpenCascade の形状から生成する.
境界付きのElementMeshを可視化する.
完全にメッシュをかけられたElementMeshを可視化する.

Parallelepiped(平行六面体)

Parallelepipedプリミティブを OpenCascade で作成する.
OpenCascade の形状タイプを調べる.
境界メッシュとParallelepipedを抽出して可視化する.

Prism(角柱)

Prismプリミティブを OpenCascade で作成する.
OpenCascade の形状タイプを調べる.
境界付きのElementMeshOpenCascade の形状から生成する.
境界付きのElementMeshとグラフィックスプリミティブを可視化する.
完全にメッシュをかけられたElementMeshを可視化する.

Polyhedron(多面体)

Polyhedronプリミティブを OpenCascade で作成する.
OpenCascade の形状タイプを調べる.
境界付きのElementMeshOpenCascade の形状から生成する.
境界付きのElementMeshを可視化する.
完全にメッシュをかけられたElementMeshを可視化する.
境界要素マーカーの和を調べ,マーカーに色を付ける.
マーカーを強調した,境界付きのElementMeshを可視化する.
Polyhedronプリミティブを OpenCascade で作成する.
OpenCascade の形状タイプを調べる.
境界付きのElementMeshOpenCascade の形状から生成する.
境界付きのElementMeshを可視化する.
完全にメッシュをかけられたElementMeshを可視化する.

Pyramid(錐体)

Pyramidプリミティブを OpenCascade で作成する.
OpenCascade の形状タイプを調べる.
境界付きのElementMeshOpenCascade の形状から生成する.
境界付きのElementMeshを可視化する.
完全にメッシュをかけられたElementMeshを可視化する.

SphericalShell(球体殻)

SphericalShellプリミティブを OpenCascade で作成する.
OpenCascade の形状タイプを調べる.
境界付きのElementMeshOpenCascade の形状から生成する.
境界付きのElementMeshを可視化する.
領域の穴を残したまま,領域にメッシュをかける.完全にメッシュをかけられたElementMeshを可視化する.

Tetrahedron(四面体)

Tetrahedronプリミティブを OpenCascade で作成する.
OpenCascade の形状タイプを調べる.
境界付きのElementMeshOpenCascade の形状から生成する.
境界付きのElementMeshを可視化する.
完全にメッシュをかけられたElementMeshを可視化する.

拡張された三次元立体プリミティブ

OpenCascade は,Wolfram言語には直接対応するものがないプリミティブも提供する.

Torus(トーラス)

ここで引数は,トーラスが置かれている場所の周りの軸,その軸からトーラスの内部までの半径,トーラスの内側の半径を指定する2つ目の半径である.

Torusプリミティブを OpenCascade で作成する.
OpenCascade の形状タイプを調べる.
境界付きのElementMeshOpenCascade の形状から生成する.
境界付きのElementMeshを可視化する.
完全なElementMeshを生成する.

部分的なトーラスを生成することも可能である.

OpenCascade で細かいメッシュの部分的なTorusプリミティブを作成し,可視化する.

曲面プリミティブ

3Dに埋め込まれた曲面グラフィックスプリミティブのインスタンスを作成することも可能である.

BSplineSurface(Bスプライン曲面)

重み付きのBスプライン曲面を使って,パイプ片を設定する.
BSplineSurfaceプリミティブを OpenCascade で作成する.
OpenCascade の形状タイプを調べる.
境界付きのElementMeshOpenCascade の形状から生成する.
Bスプライン曲面を持つ,境界付きのElementMeshを可視化する.

完全にメッシュをかけられたElementMeshを非閉曲面から作成することはできない.

結び目と重みがAutomaticに設定されている,Bスプライン閉曲面はサポートされる.

重み付きのBスプライン閉曲面を使った,パイプ片を設定する.
BSplineSurfaceプリミティブを OpenCascade で作成する.
OpenCascade の形状タイプを調べる.
境界付きのElementMeshOpenCascade の形状から生成する.
Bスプライン曲面を持つ,境界付きのElementMeshを可視化する.

3Dでの円板

OpenCascade は,Wolfram言語に直接対応していないプリミティブも提供する.

中心が{0,0,1}にあり,法線が{0,-1,0}の方向にある平面を持ち,半径が1/2で,弧の長さが π から 2 π までである円板を可視化する.
OpenCascadeDiskプリミティブを OpenCascade で作成する.
OpenCascade の形状タイプを調べる.
境界付きのElementMeshOpenCascade の形状から生成する.
境界付きのElementMeshを可視化する.
境界付きのElementMeshをグラフィックスとともに表示する.

完全にメッシュを付けられたElementMeshを曲面から作成することはできない.

Polygon(多角形)

Polygonプリミティブを OpenCascade で作成する.
OpenCascade の形状タイプを調べる.
境界付きのElementMeshOpenCascade の形状から生成する.
境界付きのElementMeshを可視化する.

完全にメッシュをかけられたElementMeshを曲面から作成することはできない.

穴が開いたPolygonOpenCascade で作成する.
OpenCascade の形状タイプを調べる.

シェルは,面の集合である.

境界付きのElementMeshOpenCascade の形状から生成する.
境界付きのElementMeshを可視化する.
自己交差するPolygonOpenCascade で指定する.
OpenCascade の形状タイプを調べる.
曲面メッシュを自己交差するPolygonから生成することはできない.

Triangle(三角形)

Triangleプリミティブを OpenCascade で作成する.
OpenCascade の形状タイプを調べる.
境界付きのElementMeshOpenCascade の形状から生成する.
境界付きのElementMeshを可視化する.

完全にメッシュをかけられたElementMeshを非閉曲面から作成することはできない.

曲面メッシュ

ElementMesh(要素メッシュ)

ElementMeshは,Wolfram言語で有限要素解析に使われるメッシュ構造である.ElementMeshの作成については,ToBoundaryMeshおよびToElementMeshの関数ページ,または 「要素メッシュの生成」 のチュートリアルのドキュメントを参照されたい.

境界付きのElementMeshを作成して可視化する.
境界付きのElementMeshOpenCascade オブジェクトに変換する.

それぞれの曲面要素が OpenCascade オブジェクトにマップされてから縫いつなげられるので,この変換は計算量的に高くつく.このようなタイプの形状の作成は,他に方法がない場合にのみ使用されるべきである.

OpenCascade の形状タイプを調べる.

開曲面も閉曲面も変換できる.

境界付きのElementMeshを作成して可視化する.
境界付きのElementMeshOpenCascade オブジェクトに変換する.
OpenCascade の形状タイプを調べる.

辺プリミティブ

3Dに埋め込まれた辺グラフィックスプリミティブのインスタンスを作成することも可能である.

Line(線)

Lineプリミティブを OpenCascade で作成する.
OpenCascade の形状タイプを調べる.

境界付きのElementMeshをワイヤタイプの OpenCascade 形状から作成することはできない.しかし,ワイヤオブジェクトを回転スイープあるいは線形スイープに使うことや,他のワイヤや辺のオブジェクトと組み合せることはできる.

ワイヤを組み合せる

複数のワイヤを組み合せて1つのワイヤにすることができる.

複数の線を作成する.
線を可視化する.
複数のワイヤを作成する.
複数のワイヤを組み合せて1つのワイヤを作る.
OpenCascade の形状タイプを調べる.

これは主に利便のために使われる.

BezierCurve(ベジエ曲線)

BezierCurveを作成する.
BezierCurveを可視化する.
BezierCurveプリミティブを OpenCascade で作成する.
OpenCascade の形状タイプを調べる.

境界付きのElementMeshは,ワイヤタイプの OpenCascade 形状から作成することはできない.しかし,ワイヤオブジェクトを回転スイープあるいは線スイープに使うか,他のワイヤや辺のオブジェクトと組み合せることはできる.

線を作成する.
OpenCascade の面をBezierCurveとLineのワイヤから作成する.
メッシュの面を可視化する.

BSplineCurve(Bスプライン曲線)

BSplineCurveを作成する.
BSplineCurveを可視化する.
BSplineCurveプリミティブを OpenCascade で作成する.
OpenCascade の形状タイプを調べる.

境界付きのElementMeshは,ワイヤタイプの OpenCascade 形状から作成することはできない.しかし,ワイヤオブジェクトを回転スイープあるいは線スイープに使うか,他のワイヤや辺のオブジェクトと組み合せることはできる.

Bスプライン曲線を周りで回転させる軸を作成し可視化する.
BSplineCurveの回転スイープを作成する.
離散化された曲面ともとのBスプライン曲線を可視化する.

拡張された辺プリミティブ

OpenCascade は,Wolfram言語に直接対応しないプリミティブも提供する.

三次元の円

中心が{0,0,1}にある円と,{0,-1,0}の方向に法線,1/2の半径, π から2 π の弧長を持つ平面を可視化する.
OpenCascadeCircleプリミティブを OpenCascade で作成する.
OpenCascade の形状タイプを調べる.

境界付きのElementMeshをワイヤタイプの OpenCascade 形状から作成することはできない.しかし,ワイヤオブジェクトを回転スイープあるいは線形スイープに使うことや,他のワイヤや辺のオブジェクトと組み合せることはできる.

辺から曲面を作成する

ワイヤを使って曲面の境界を構築することも可能である.しかし,いくつかの制約がある.ワイヤは自己交差してはならない.ワイヤは閉じたループでなければならない.形成される曲面は平面でなければならない.

辺プリミティブをいくつか作成する.
辺を可視化する.
数本のワイヤを作成する.
複数のワイヤを組み合せて1本のワイヤにする.
閉じたワイヤを曲面に変換する.
曲面を離散化して可視化する.

二次元立体プリミティブ

OpenCascade は,3DのCAD(コンピュータを使った設計システム)エンジンである.とは言っても,DiskRectangle等の2Dグラフィックスプリミティブを OpenCascade 形状に変換することも可能である.これを行うことには2つの理由が考えられる.

ワークフロー

最初のステップとして,両方の場合のワークフローを示す.まず半円板を作成することから始めよう.

半円板を作成する.
形状のタイプを調べる.
OpenCascade の形状を境界付きのメッシュに変換する.

生成された境界付きのメッシュは3Dに埋め込まれ, 方向は0であることに注意する.このメッシュの3Dへの投影を下に示す.

境界付きのメッシュを可視化する.

先ほどの半円板オブジェクトに戻る.このオブジェクトは,変換関数を使うと他のどの位置にでも投影できる.これは他の OpenCascade 形状でも同じようにできる.

変換関数を作成する.
変換関数を OpenCascade 形状に適用する.
境界付きのメッシュを可視化する.

2Dの境界付きメッシュを作成するためには,関数ElementMeshProjectionが使える.

半円板を作成し,境界付きメッシュを生成してメッシュを2Dに投影する.

境界付きメッシュの精緻化は標準的な方法で行える.この詳細については,曲面メッシュの生成のセクションに説明がある.

半円板を作成し,精緻化した境界付きメッシュを生成してメッシュを2Dに投影する.

これで境界表現のでこぼこが少なくなった.

Annulus(環体)

2DのAnnulusOpenCascade で作成する.
形状タイプを調べる.
曲面メッシュを可視化する.

Disk(円板)

2DのDiskOpenCascade で作成する.
形状タイプを調べる.
曲面メッシュを可視化する.

FilledCurve(非空の曲線)

FilledCurveは領域プリミティブではない.このグラフィックスの操作が部分的に OpenCascadeLink でサポートされている主な理由は,現行バージョンのMathematicaでは,2Dに埋め込まれている1Dの線分を繋げることによって2D領域を作成することができないからである.

2Dに埋め込まれている1Dの線分の境界付き曲線を作成する.

グラフィックスでは,FilledCurveを使って曲線で囲まれた領域を指すことができる.

2DのFilledCurveを作成する.
2DのFilledCurveOpenCascade で作成する.
形状タイプを調べる.
境界付きの曲面メッシュを作成して可視化する.

OpenCascadeLinkFilledCurveJoinedCurveをサポートする方法は,Graphicsがこれらをサポートするのとは少し異なる.例えば,CircleはGraphicsでは線分として使えないが,OpenCascadeLink では使える.

Circleの線分で非空の曲線を作成する.
ヘルパー関数を使って,非空の曲線のグラフィックスを可視化する.
OpenCascade 形状を作成する.
形状タイプを調べる.
境界付きの曲面メッシュを作成し可視化する.

OpenCascadeLink の実装では,FilledCurveJoinedCurveに欠けている線分があってはならない.

線分が繋がっていない非空の曲線を作成する.
OpenCascade への変換はうまくいかない.

JoinedCurveFilledCurveのオプションは現在サポートされていない.

Parallelogram/Parallelepiped(平行四辺形/平行六面体)

2DのParallelogramOpenCascade で作成する.
形状タイプを調べる.
曲面メッシュを可視化する.

Polygon(多角形)

2DのPolygonOpenCascade で作成する.
形状タイプを調べる.
曲面メッシュを可視化する.

Rectangle

2DのRectangleOpenCascade で作成する.
形状タイプを調べる.
曲面メッシュを可視化する.

RegularPolygon(正多角形)

2DのRegularPolygonOpenCascade で作成する.
形状タイプを調べる.
曲面メッシュを可視化する.

Triangle(三角形)

2DのTriangleOpenCascade で作成する.
形状タイプを調べる.
曲面メッシュを可視化する.

この例では,2Dのグラフィックスプリミティブを使って境界付きの要素メッシュを作成する方法について示す.ベジエ(Bezier)曲線で示される切取りがある複数材料の領域を作成する.

グラフィックスプリミティブを作成する.
空のFaceFormと黒のEdgeFormでグラフィックスプリミティブを可視化する.
Disk面の和集合を作成する.
切取りの形状を作成する.
切取りのある領域との差を計算する.
精緻化された境界付きの曲面メッシュを作成する.
3D曲面メッシュを2Dメッシュに投影する.
2Dメッシュを可視化する.
2Dの境界付きメッシュを作成し可視化する.
マーカーと精緻化された部分領域を持つ,完全な2D要素メッシュを作成し可視化する.

境界付きの2Dプリミティブ

2D立体プリミティブのセクションで説明したように,2D立体グラフィックスプリミティブが変換できるのと同じように,LineCircle等の2Dの辺や境界付きグラフィックスプリミティブも変換できる.

これがうまく行く基本的な方法は,2Dの埋込みオブジェクトを3Dの - 平面で作成し, 値を0と想定する.作成された形状は押出しのような3Dの OpenCascade 操作に埋め込まれるので,プール演算等がシステムの他の部分と同じように適用できる.

ワークフロー

最初のステップとして,両方の場合のワークフローを示す.まず半円と半円を閉じる線を作成することから始めよう.

半円と線を作成する.
形状タイプを調べる.

次のステップは,ワイヤを繋げて,それらから面を作成することである.

ワイヤを繋げて面を作成する.
形状タイプを調べる.

複数のワイヤから面を作成することは1ステップで行える.

ワイヤを繋げて面を作成する.
形状タイプを調べる.
OpenCascade 形状を境界付きメッシュに変換する.

生成された境界付きのメッシュは3Dに埋め込まれ, 方向は0であることに注意する.このメッシュの3Dへの投影を下に示す.

境界付きメッシュを可視化する.

先ほどの半円と線のオブジェクトに戻る.このオブジェクトは,変換関数を使うと他のどの位置にでも投影できる.これは他の OpenCascade 形状でも同じようにできる.

変換関数を作成する.
変換関数を OpenCascade 形状に適用する.
境界付きのメッシュを可視化する.

2Dの境界付きメッシュを作成するためには,関数ElementMeshProjectionが使える.

境界付きメッシュを生成し,メッシュを2Dに投影する.

境界付きメッシュの精緻化は標準的な方法で行える.この詳細については,曲面メッシュの生成のセクションに説明がある.

精緻化された境界付きメッシュを生成し,メッシュを2Dに投影する.

これで境界表現のでこぼこが少なくなった.

BezierCurve(ベジエ曲線)

BezierCurveを作成する.
曲線を OpenCacade 形状に変換する.
形状タイプを調べる.

BSplineCurve(Bスプライン曲線)

BSplineCurveを作成する.
曲線を OpenCacade 形状に変換する.
形状タイプを調べる.

Circle(円)

Circleを作成する.
円を OpenCacade 形状に変換する.
形状タイプを調べる.

JoinedCurve(結合曲線)

JoinedCurveは領域プリミティブではない.このグラフィックスの操作が部分的に OpenCascadeLink でサポートされている主な理由は,現行バージョンのMathematicaでは,2Dに埋め込まれている1Dの線分を繋げることによって2D領域を作成することができないからである.

2Dに埋め込まれている1Dの線分の境界付き曲線を作成する.

グラフィックスでは,JoinedCurveを使って曲線で囲まれた領域を指すことができる.

JoinedCurveを作成する.
JoinedCurveOpenCascade で作成する.
形状タイプを調べる.

OpenCascadeLinkFilledCurveJoinedCurveをサポートする方法は,Graphicsがこれらをサポートするのとは少し異なる.例えば,CircleはGraphicsでは線分として使えないが,OpenCascadeLink では使える.

Circleの線分で結合曲線を作成する.
ヘルパー関数を使って,結合曲線のグラフィックスを可視化する.
OpenCascade 形状を作成する.
形状タイプを調べる.

OpenCascadeLink の実装では,FilledCurveJoinedCurveに欠けている線分があってはならない.

線分が繋がっていない結合曲線を作成する.
OpenCascade への変換はうまくいかない.

JoinedCurveFilledCurveのオプションは現在サポートされていない.

Line(線)

Lineを作成する.
線を OpenCacade 形状に変換する.
形状タイプを調べる.

OpenCascade オブジェクトに対する操作

OpenCascade オブジェクトには以下の操作を施すことができる:

曲面メッシュの生成

OpenCascade オブジェクトの曲面にメッシュをかけることはできる.

OpenCascade オブジェクトを生成する.
曲面メッシュを生成する.
メッシュをかけられた形状から座標を抽出して可視化する.
メッシュをかけられた形状から曲面要素を抽出して可視化する.
OpenCascadeShapeSurfaceMeshには以下のオプションが含まれる.

"AngularDeflection""LinearDeflection"は,切片が真の局面から逸脱してもよい最大量を指定する.この概念は,以下の図で説明すると一番分かりやすい.

"AngularDeflection"が切片の端のノードにおける最大偏角 α を指定するのに対し,"LinearDeflection"は,切片内の真の曲線に対する最大偏向 を指定する."AngularDeflection"Automaticのデフォルトは,0.5度に,"LinearDeflection"Automaticのデフォルトは,形状の0.01単位の相対サイズに設定されている.この詳細については, OpenCascadeのドキュメントを参照されたい.

"ComputeInParallel"は,複数のCPUコア上で曲面の離散化が行われるべきかどうかを指定する.Automaticのデフォルトは Falseに設定されている.

"RelativeDeflection"は,偏向が形状の大きさに対して相対であるか,それとも絶対であるかを指定する.AutomaticのデフォルトはTrueに設定されている.

"Rediscretization"は,入力形状の一つがすでに離散化として形状に付けられていて,その離散化が再利用される場合に指定する.AutomaticのデフォルトはFalseに設定される.この機能は,複数のマテリアルを持つオブジェクト内のさまざまな部分にさまざまなレベルの離散化を持たせる場合に便利である.例は,縫合による内部境界の細分化のセクションにある.

OpenCascade と有限要素法を使うことを容易にするために,曲面にメッシュをかけ,境界付きのElementMeshを返す関数が提供されている.

境界付きのElementMeshOpenCascade 形状から抽出する.
OpenCascade 形状から抽出した境界付きのElementMeshを可視化する.
部分曲面には適切な境界マーカーが付いている.
完全なメッシュを作成して可視化する.
OpenCascadeShapeSurfaceMeshToBoundaryMeshには以下のオプションが含まれる.

ElementMesh生成に関係のあるオプションはすべて"ElementMeshOptions"を通して,OpenCascadeShapeSurfaceMeshに関係のあるオプションは"ShapeSurfaceMeshOptions"を通して指定できる.

"MarkerMethod"オプションで,マーカーを追加するかどうかと,どのようにマーカーを計算すべきかを指定することができる.デフォルトは"OpenCascade"である."ElementMesh"Noneのオプションを使って,マーカーを完全にオフにすることもできる."ElementMesh""MarkerMethod"オプションとして使うことは,生成された曲面が数多くの単一曲面からなる場合に役立つ.その場合,"OpenCascade"メソッドは,各要素に異なるマーカーを割り当てるので,これは望ましくないこともあるかも知れない.しかし,メソッド"ElementMesh"では,マーカーは面の法線に基づいて,法線がある一定量逸脱するかどうかによって,追加される.この詳細については,ToBoundaryMeshの関数ページを参照されたい.

洗練化された曲面メッシュを持つ OpenCascade の形状から境界付きのElementMeshを抽出する.
OpenCascade 形状から抽出した境界付きのElementMeshを可視化する.

部分の抽出

形状を作成する.
面の数を抽出する.
面を抽出する.
タイプを抽出する.
面のツから境界メッシュを生成する.
頂点の数を抽出する.
頂点を抽出する.
タイプを抽出する.

幾何学的変換

形状を作成する.
形状を回転する.
境界付きのElementMeshOpenCascade の形状から抽出する.
Wolfram言語で回転させた,境界付きのElementMeshと形状を可視化する.

もう一つの方法として,TransformedRegionを利用して,OpenCascade の形状の作成中にTransformationFunctionを直接適用することもできる.

回転させた形状を作成する.
Wolfram言語で回転させた,境界付きのElementMeshと形状を抽出し,可視化する.

形状の鏡映を作るには,ReflectionTransformを使うとよい.

鏡映された形状を作成する.
境界付きのElementMeshと鏡映された形状をWolfram言語で作成し,可視化する.

スイープ

RotationalSweeps(回転スイープ)

OpenCascade は回転スイープを行うことができる.この場合,曲面を軸の周りで回転させる.回転は完全な一回転より小さくてもよい.

OpenCascade で多角形の面を作成する.
OpenCascade の形状タイプを調べる.
回転軸と回転量を指定する.
OpenCascade の形状タイプを調べる.
境界付きのメッシュ,回転の回転軸,多角形の面を抽出して可視化する.
完全なメッシュを生成する.

OpenCascade は,ワイヤオブジェクトに対して回転スイープを行うこともできる.

Lineプリミティブを OpenCascade で作成する.
OpenCascade の形状タイプを調べる.
回転軸と回転量を指定する.
OpenCascade の形状タイプを調べる.
境界付きのメッシュ,回転の回転軸,Lineの辺を抽出して可視化する.

回転スイープは,SolidあるいはCompoundSolidの OpenCascade 形状タイプには使えない.

OpenCascade は,辺オブジェクトにも回転スイープを行うことができる.

三次元の円を可視化する.
OpenCascadeCricleプリミティブを OpenCascade で作成する.
OpenCascade の形状タイプを調べる.
回転軸と回転量を指定する.
OpenCascade の形状タイプを調べる.
境界メッシュ,回転の回転軸,Lineの辺を抽出して可視化する.

回転スイープは,SolidあるいはCompoundSolidの OpenCascade 形状タイプには使えない.

考えられる問題

回転スイープは,軸がスイープされる形状と交差し,その形状が交点で頂点も辺も持たない場合には行えない.以下の例を見てみよう.

Lineプリミティブを OpenCascade で作成する.
軸を作成し,線を3Dで可視化する.
スイープは行えない.

この問題を修正する1つの方法は,回転が起るところに頂点または辺がある形状を作成することである.

軸とワイヤの交点に頂点を挿入する.
スイープを可視化する.

より一般的な方法としては,例えばスプライン曲線の場合,半分の形状だけをモデル化し,2π についてスイープを行うことが可能である.

2π の周りで形状の半分をスイープする.

回転スイープは,SolidあるいはCompoundSolidの OpenCascade 形状タイプには使えない.

LinearSweeps(線形スイープ)

曲面の線形スイープには方向を与える必要がある.その後,曲面はその方向に沿ってスイープされる.

OpenCascade で多角形の面を作成する.
OpenCascade の形状タイプを調べる.
{1/2,1/2,0}から{1,1,1}までの方向に沿って曲面をスイープする.
OpenCascade の形状タイプを調べる.
境界付きのメッシュ,移動の軸,多角形の面を抽出して可視化する.
完全なメッシュを生成する.

OpenCascade は,ワイヤオブジェクトに対して線形スイープを行うこともできる.

Lineプリミティブを OpenCascade で作成する.
OpenCascade の形状タイプを調べる.
{1/2,1/2,0}から{1,1,1}までの軸に沿って曲面をスイープする.
OpenCascade の形状タイプを調べる.
境界付きのメッシュ,移動の軸,Lineの辺を抽出して可視化する.

線形スイープは,SolidあるいはComSolidの OpenCascade 形状タイプには使えない.

経路に沿ったスイープ

面と経路が与えられると,OpenCascade はその面を経路に沿ってスイープすることができる.

ベジエ(Bezier)曲線と多角形を作成する.
幾何学的プリミティブを可視化する.
OpenCascade 形状を作成する.

経路は,タイプ"Edge"かタイプ"Wire"でなければならず,曲面には立体や複合体を含んではならない.

形状タイプを調べる.
経路のスイープを作成する.
スイープの形状タイプを調べる.
境界付きの要素メッシュを作成する.
要素メッシュ,最初の面,赤色の経路を可視化する.

ブール演算

ブール演算を行う際の制約については,ブール演算の問題のセクションと立体に対するブール演算のセクションに詳しい説明がある.

ブール演算は常に結合オブジェクトを返す.

形状の幾何学的な差を計算する.

Ball形状を2個生成する.
OpenCascade の形状タイプを調べる.
2つの形状の幾何学的な差を計算する.
OpenCascade の形状タイプを調べる.
境界付きのメッシュを抽出する.
境界要素マーカーの和を調べ,マーカーの色を作成する.
マーカーを強調した,境界付きのElementMeshを可視化する.
完全なメッシュを生成する.
PrismBallGraphics3Dプリミティブを生成する.
シーンを可視化する.
OpenCascade 形状のインスタンスを生成する.
幾何学的な差を計算する.
OpenCascade の形状タイプを調べる.
境界付きのメッシュを抽出する.
境界要素マーカーの和を調べ,マーカーの色を作成する.
マーカーを強調した,境界付きのElementMeshを可視化する.
完全なメッシュを生成する.
SphericalShellCylinderの形状を作成する.
形状の幾何学的な差を計算する.
境界付きのメッシュを抽出する.
境界要素マーカーの和を調べ,マーカーの色を作成する.
マーカーを強調した,境界付きのElementMeshを可視化する.
完全なメッシュを生成する.
PolyhedronBallのプリミティブを OpenCascade で作成する.
形状の幾何学的な差を計算する.
境界付きのメッシュを抽出する.
境界要素マーカーの和を調べ,マーカーの色を作成する.
マーカーを強調し,境界付きのElementMeshを通して,横断面を可視化する.
完全なメッシュを生成する.

形状の幾何学的な和を計算する.

Ball形状を2個生成する.
OpenCascade の形状タイプを調べる.
幾何学的な和を計算する.
OpenCascade の形状タイプを調べる.
境界付きのメッシュを抽出する.
境界要素マーカーの和を調べ,マーカーの色を作成する.
マーカーを強調した,境界付きのElementMeshを可視化する.
完全なメッシュを生成する.
BallHexahedronの形状を作成する.
形状の幾何学的な和を計算する.
境界付きのメッシュを抽出する.
境界要素マーカーの和を調べ,マーカーの色を作成する.
マーカーを強調した,境界付きのElementMeshを可視化する.
完全なメッシュを生成する.
BallPyramidの形状を作成する.
形状の幾何学的な和を計算する.
境界付きのメッシュを抽出する.
境界要素マーカーの和を調べ,マーカーの色を作成する.
マーカーを強調した,境界付きのElementMeshを可視化する.
完全なメッシュを生成する.
SphericalShellCylinderの形状を作成する.
OpenCascade の形状タイプを調べる.
形状の幾何学的な和を計算する.
OpenCascade の形状タイプを調べる.
境界付きのメッシュを抽出する.
境界付きのElementMeshを可視化する.
完全なメッシュを生成する.

形状の幾何学的な積を計算する.

Ball形状を2個生成する.
幾何学的な積を計算する.
境界付きのメッシュを抽出する.
境界要素マーカーの和を調べ,マーカーの色を作成する.
マーカーを強調した,境界付きのElementMeshを可視化する.
完全なメッシュを生成する.
BallHexahedronの形状を作成する.
形状の幾何学的な積を計算する.
境界付きのメッシュを抽出する.
境界要素マーカーの和を調べ,マーカーの色を作成する.
マーカーを強調した,境界付きのElementMeshを可視化する.
完全なメッシュを生成する.
BallPyramidの形状を作成する.
形状の幾何学的な積を計算する.
境界付きのメッシュを抽出する.
境界要素マーカーの和を調べ,マーカーの色を作成する.
マーカーを強調した,境界付きのElementMeshを可視化する.
完全なメッシュを生成する.
SphericalShellCylinderの形状を作成する.
OpenCascade の形状タイプを調べる.
形状の幾何学的な積を計算する.
OpenCascade の形状タイプを調べる.
境界付きのメッシュを抽出する.
境界付きのElementMeshを可視化する.
完全なメッシュを生成する.

積は,より低い次元の領域オブジェクトから生成することもできる.

ConePolygonの形状を作成する.
OpenCascade の形状タイプを調べる.
形状の幾何学的な積を計算する.
OpenCascade の形状タイプを調べる.
境界付きのメッシュを抽出する.
境界付きのElementMeshを可視化する.
Coneに入った境界付きのElementMeshを可視化する.

ブール演算の簡略化

ブール演算で得た曲面を簡略化することが可能な場合もある.

2つの直方体のデフォルトの和集合.
曲面を簡略化した2つの直方体の和集合.

BooleanRegion(ブール領域)

OpenCascadeLink は,直接BooleanRegionオブジェクトを使うことができる機能を提供する.

BooleanRegion形状を生成する.

便利なことに,OpenCascadeShapeBooleanRegionオブジェクトに使うことも可能である.

BooleanRegion形状を生成する別の方法.
境界付きのメッシュを抽出する.
境界要素マーカーの和を調べ,マーカーの色を作成する.
マーカーを強調した,境界付きのElementMeshを可視化する.
完全なメッシュを生成する.
BooleanRegion形状を生成する.
境界付きのメッシュを抽出して可視化する.
BooleanRegion形状を生成する.
境界付きのメッシュを抽出して可視化する.

立体に対するブール演算

OpenCascade は,Wolfram言語のブール演算子であるRegionUnionRegionIntersectionRegionDifferenceとは少し異なる形でブール演算を処理する.いくつかの例題を通して見てみよう.

立体の重なり
重なり合った2つの立方体を作成する.
形状を設定する.
積を計算する.
ブール演算を可視化する.
和を計算する.
ブール演算を可視化する.
最初の差を計算する.
ブール演算を可視化する.
2つ目の差を計算する.
ブール演算を可視化する.
面が触れ合っている立体
触れ合っている2つの立方体を作成する.
形状を設定する.
積を計算する.

OpenCascase のブール演算から得ることができる最低次元のオブジェクトは,ブール演算に与えられた任意引数の最低次元のオブジェクトである.例えば,2つの OpenCascade の立体のブール演算が OpenCascade の面オブジェクトを返すことはできない.

面の数を抽出する.

立体も面もないので,境界要素メッシュへの変換は失敗する.

面も立体もない形状の変換は失敗する.
和を計算する.
ブール演算を可視化する.

結果の完全なメッシュは,触れ合っている面で開いている.

完全なメッシュを可視化し,立体の和は触れ合っている面の部分は開いていることに注目する.
最初の差を計算する.
ブール演算を可視化する.

結果の立体は,触れ合っているオブジェクトの形状に従って,その表面が分割されている.

境界メッシュとその分割された表面を可視化する.
2つ目の差を計算する.
ブール演算を可視化する.

結果の立体は,触れ合っているオブジェクトの形状に従って,その表面が分割されている.

辺の部分で接触している立体
辺の部分で触れ合っている2つの立方体を作成する.
形状を設定する.
積を計算する.

OpenCascase のブール演算から得ることができる最低次元のオブジェクトは,ブール演算に与えられた任意引数の最低次元のオブジェクトである.例えば,2つの OpenCascade の立体のブール演算が OpenCascade の面オブジェクトを返すことはできない.

辺の数を抽出する.
和を計算する.
ブール演算を可視化する.

結果の完全なメッシュの辺は,触れ合っている辺で分割されている.

完全なメッシュを可視化し,立体の和が触れ合っている辺で分割されていることに注目する.
最初の差を計算する.
ブール演算を可視化する.

結果の境界メッシュの辺は,触れ合っている辺で分割されている.

境界メッシュとその分割された表面を可視化する.
2つ目の差を計算する.
ブール演算を可視化する.

結果の境界メッシュの辺は,触れ合っている辺で分割されている.

形状の分割

立体等の形状がある場合に,そのオブジェクトを複数の部分に分割したいことがある.立体は別の立体あるいは面で分割できる.分割される形状はオブジェクトと呼ばれ,分割を行う形状はツールと呼ばれる.

分割される形状を定義する.
分割ツールである形状を定義する.
オブジェクトの形状タイプを調べる.
ツールの形状タイプを調べる.
オブジェクトとツールを可視化する.
オブジェクトをツールで分割する.

OpenCascade 形状式のリストが得られる.

分割されたオブジェクトから境界付きメッシュを生成する.
境界付きメッシュを可視化する.
分割されたオブジェクトの辺の枠をもとのオブジェクトとツールの上に表示する.
分割されたオブジェクトから完全なメッシュを生成する.

ツールは別の立体である必要はなく,面も使える.

分割ツールとして曲面を定義する.
ツールの形状タイプを調べる.
形状とツールを可視化する.
形状をツールで分割する.
分割されたオブジェクトの境界付きメッシュを可視化する.

立体はワイヤでは分割できない.面は別の面かワイヤで分割できる.

オブジェクトを作成する.
ツールを作成する.
ツールの形状タイプを調べる.
オブジェクトとツールを可視化する.
形状をツールで分割する.
分割されたオブジェクトの境界付きメッシュを可視化する.

ツールは正しい形状タイプであることが重要である."Edge"タイプの形状ツールが与えられると,自動的に"Wire"ツールに変換される.

縫合

辺を共有する曲面は縫い合わせることができる.より正確には,縫合とは位相的に不連続である面を縫い合せて殻にすることである.

多角形のリストを生成する.
OpenCacade で多角形を作成する.
OpenCascade の形状タイプを調べる.
面と面を縫い合わせる.
OpenCascade の形状タイプを調べる.

殻は,面の集合である.立体を作成するためには,縫合の過程でオプションを使うか,関数OpenCascadeShapeSolidを使うかすればよい.

面と面を縫い合せる.
OpenCascade の形状タイプを調べる.
境界付きのElementMeshを抽出して可視化する.
完全なメッシュを作成して可視化する.

Bスプライン曲面を他のオブジェクトと縫い合わせることは可能である.ただし,ノードが合致しなければならない.

PolarPlotを作成する.
PolarPlotから座標を抽出する.
形状の座標をパラメータ化する関数を利用する.
BSplineSurfaceを構築する.
BSplineSurfaceと上下のキャップを可視化する.
OpenCascade で曲面を構築する.
曲面と曲面を縫い合わせる.
OpenCascade の形状タイプを調べる.
立体に変換する.
境界付きのメッシュを抽出して可視化する.
完全なメッシュを生成する.

もう一つの例として,8個のBSplineSurfaceパッチからEllipsoidを作成する.

Ellipsoidを作成して可視化する.
Ellipsoidの固有値と固有ベクトルを計算する.
TransformationFunctionを計算して,単位BallEllipsoid上にマップする.
8個のBスプライン曲線の制御点を設定し,曲面を生成する.

以下で説明するように,ここで制御点の順序が重要となる.

Bスプライン曲線を OpenCascade 式に変換する.
曲面と曲面を縫い合せて,立体を作成する.
OpenCascade の形状タイプを調べる.
境界メッシュを抽出して可視化する.

可能な問題として,縫合に与えられる曲面の順序に対して OpenCascade が敏感であるということが挙げられる.表示された曲面が問題なく見えても,例えばブーリアン演算をオブジェクトに対して行ったときに予期しない結果が起る可能性があるので,この問題には注意が必要である.

楕円体と直方体のブーリアン演算の和を計算する.

内部境界

OpenCascade には,内部境界を含む方法がいくつかある.

面の和による内部境界

立体の和を形成すると,重なり合っている位置が開いた状態になる.

辺で触れ合っている2つの立体を作成する.
OpenCascade の形状を作成する.
和を形成し,完全なメッシュを可視化する.

2つの直方体が触れ合っている部分では,和は閉じないことに注意する.複数のマテリアル領域を扱っている場合にはこのことは望ましくないかもしれない.重なり合った部分で面を閉じる1つのオプションは,立体の面すべての和を計算することである.

立体からすべての面を抽出し,面の和を計算する.
完全なメッシュを可視化する.
境界メッシュを抽出する.

これで,2つの立体の間に面が存在するようになったことに注意する.

縫合による内部境界

形状の縫合を使って,内部に境界を持つ形状を生成することもできる.

2つの形状の幾何学的な和を計算する.
結果の和を可視化する.
2つの形状の幾何学的な積を計算する.
結果の積を可視化する.

積を計算すると閉形状が返されることに注意する.

面と面を縫い合わせる.
境界付きのメッシュを抽出する.
境界要素マーカーの和を調べ,マーカーの色を作成する.
マーカーを強調した,境界付きのElementMeshを可視化する.

2つの形状の積は閉じているので,その閉形状を形状の和に縫い合わせることによって,3つの内部領域が生成される.直方体の上の円柱,直方体内部にある円柱,そして残りの直方体の3つである.

完全なメッシュを生成する.
すべてのマーカーが存在することを確かめる.
マーカーで指定される部分を可視化する.
マーカーを強調して,メッシュを通した横断面を可視化する.

縫合による内部境界の細分化

複数の内部境界をさまざまな解像度で離散化することが望ましい場合もある.これは,それぞれの境界を希望するレベルで離散化し,それを縫い合せることによって可能である.

記号領域を作成する.
記号領域を OpenCascade に変換し,それらを縫い合せる.
境界を離散化し,その離散化を可視化する.

内部の円柱を細分化したいが,直方体の境界はしたくないという場合はどうだろうか.オブジェクトを縫い合せる最中に,線形偏向あるいは角偏向を変更すると,すべての境界が影響を受ける.それでもオブジェクト内の単一の形状の離散化を変更したい場合には,そのオブジェクトの曲面メッシュを施し,縫合の際にその離散化を保持することが可能である.

円柱を離散化する.

離散化はOpenCascadeShapeExpressionに施されていることに注意する.

形状を縫い合せる.

OpenCascadeShapeExpressionに施された境界の離散化を利用するためには,OpenCascadeShapeSurfaceMeshToBoundaryMeshにオプション"Rediscretization"Falseを使って,あれば前の離散化を利用する必要がある.

形状にすでに境界離散化が施されている場合には,再度離散化せずに境界ElementMeshを作成する.

今度は,内部円柱が残りの境界とは異なるレベルで離散化された.

フィレット

OpenCascade は,形状にフィレットを付ける機能を提供する.

形状を生成する.
OpenCascade の形状タイプを調べる.
すべての辺に半径0.25でフィレットを付ける.
OpenCascade の形状タイプを調べる.
境界付きのメッシュを抽出する.
境界要素マーカーの和を調べ,マーカーの色を作成する.
マーカーを強調した,境界付きのElementMeshを可視化する.
完全なメッシュを生成する.

一部の辺だけにフィレットを付けることも可能である.

形状を生成する.
形状に含まれる辺の数を調べる.

OpenCascade では,それぞれの面がその面を囲む辺すべてにアクセスできる.立方体の場合,それぞれの面は4つの辺に接続している.面は6つあるので,全部で24本の辺に操作を行うことが可能で,そのうち12本の辺が重複している.

辺1と辺7に半径0.25でフィレットを付ける.
境界付きのメッシュを抽出する.
境界要素マーカーの和を調べ,マーカーの色を作成する.
マーカーを強調した,境界付きのElementMeshを可視化する.

すべての辺について全体の形状にフィレットが与える影響を見ると便利なこともあれば,フィレットを付けたい辺を見極める必要があることもある.そのために使えるVisualizeEdgeFunctionというヘルパ関数があり,これは,索引で定義されている

形状の辺に対して,インタラクティブにフィレットを付ける関数を適用する.
形状を生成する.
形状に半径0.125でフィレットを付ける.
境界付きのメッシュを抽出する.
境界付きのElementMeshを可視化する.

要求されたフィレットの半径が大きすぎる場合にはフィレットを付けることに失敗する.

形状に大きすぎる半径でフィレットを付けようとすると失敗する.
フィレットが付けられる大きさの半径を使う.
境界付きのメッシュを抽出する.

C面取り

C面取りはフィレットに似ている.違いは,C面取りでは角は丸められず,平面である点である.作成されたC面取りは対称であり,関数のパラメータは,作成されるC面取りの曲面に接線方向である距離を指定する.

形状を生成する.
OpenCascade の形状タイプを調べる.
辺5と辺6にC面取りを施す.
OpenCascade の形状タイプを調べる.
境界付きのメッシュを抽出する.
境界要素マーカーの和を調べ,マーカーの色を作成する.
マーカーを強調した,境界付きのElementMeshを可視化する.
完全なメッシュを生成する.

すべての辺について全体の形状にC面取りが与える影響を見ると便利なこともあれば,C面取りを施したい辺を見極める必要があることもある.そのために使えるVisualizeEdgeFunctionというヘルパ関数があり,これは,索引で定義されている

形状の辺に対して,インタラクティブにC面取りを施す関数を適用する.

ロフト

ロフトとは,ワイヤを通過する曲面を作成することによって生成される曲面あるいは立体である.この概念は,可視化を使った説明で理解しやすい.

Lineオブジェクトの集合を作成して可視化する.

Loftコマンドは,与えられたオブジェクトを通過する曲面を作成することで曲面または立体を生成する.

グラフィックスプリミティブを OpenCascade の形状に変換する.

ロフトは,"Wire"あるいは"Face"の形状オブジェクトから生成できる.ただし,オブジェクトはすべて同じタイプでなければならない.

形状のタイプを調べる.
ロフトを作成する.
ロフトともとのワイヤを可視化する.

デフォルトで,ワイヤオブジェクトから作成されたロフトは,開いた殻を返す.

ロフトの形状タイプを調べる.

完全メッシュの生成に適切な立体を生成するためには,オプションを"BuildSolid"Trueに設定する.

立体のロフトを生成する.
完全メッシュを生成し,可視化する.
メッシュとワイヤを可視化する.

ロフトが面から生成される場合,立体が自動的に返される.

殻化

OpenCascade は,殻形状に対する機能を提供する.

形状を生成する.
OpenCascade の形状タイプを調べる.
形状に含まれる面の数を求める.
面2と面3を取り除くことによって,形状に殻の操作を施す.
OpenCascade の形状タイプを調べる.
境界付きのメッシュを抽出する.
境界要素マーカーの和を調べ,マーカーの色を作成する.
マーカーを強調した,境界付きのElementMeshを可視化する.
完全なメッシュを生成する.

すべての面について全体の形状に殻化が与える影響を見ると便利なこともあれば,殻の操作を施したい面を見極める必要があることもある.そのために使えるVisualizeFaceFunctionというヘルパ関数があり,これは,索引で定義されている

形状の面に対して,殻化の関数をインタラクティブに適用する.

特徴の削ぎ落とし

OpenCascade は,形状の特徴を削ぎ落す機能を提供する.

形状を生成する.
OpenCascade の形状タイプを調べる.
境界付きのメッシュを抽出する.
面の数を求める.
境界付きの要素マーカーを抽出する.
面11と面12を強調した,境界付きのElementMeshを可視化する.
面11と面12を削除することによって,形状の特徴を削ぎ落す.
形状を簡略化した,境界付きのElementMeshを抽出して可視化する.
面8と面12を強調した,境界付きのElementMeshを可視化する.
面8と面12を削除することによって,形状の特徴を削ぎ落す.
形状の特徴を削ぎ落した,境界付きのElementMeshを抽出して可視化する.
OpenCascade の形状タイプを調べる.

形状の簡略化

OpenCascade は,形状を簡略化する機能を提供する.

形状を生成する.
OpenCascade の形状タイプを調べる.
境界メッシュを抽出する.
面の数を求める.
境界要素マーカーを抽出する.
境界メッシュを抽出する.
面の数を求める.

形状の治癒

OpenCascade は,形状を治す機能を提供する.例えば,曲面の壊れた順序付けを修復することができる.

壊れた形状を修復する.

インポートとエキスポート

OpenCascade は,コンピュータを使ったさまざまな設計関連のファイル形式を読み取り,書き込むことができる.これらのファイル形式のインポートとエキスポートは一部実装されている.

STLのエキスポート

OpenCascade は,STLファイルをエキスポートすることができる.

形状を作成する.
形状をSTLファイルとしてエキスポートする.
Importを使って,生成されたSTLファイルをインポートする.
境界付きのElementMeshを可視化する.

OpenCascade における境界法線は,Wolfram言語におけるものとは逆方向である.エキスポートしたSTLの法線が「誤った」方向であるように見える場合には,これをElementMeshに変換し,それをMeshRegionに変換するとよい. その後MeshRegionは,Exportを使ってSTLファイルとしてエキスポートできる.

STLエキスポートのために,形状をMeshRegionに変換する.

STLのインポート

OpenCascade は,STLファイルをインポートすることができる.

STLファイルをインポートする.
境界付きのメッシュを抽出する.
境界付きのElementMeshを可視化する.

OpenCascadeShapeImportを使ってSTLファイルをインポートすると,曲面要素のそれぞれに異なるマーカーが割り当てられた境界メッシュになることに注意する.

境界要素マーカーを調べる.

これは望ましい結果ではないかもしれない.これを避けるために,"MarkerMethod""ElementMesh"または"MarkerMethod"Noneのオプションを指定することができる.

境界メッシュを抽出し,Wolfram言語でマーカーを計算する.
境界要素マーカーを調べる.
マーカーをハイライトして,境界付きのElementMeshを可視化する.

Stepのエキスポート

OpenCascade は,STEPファイルをエキスポートすることができる.

形状を作成する.
形状をSTEPファイルとしてエキスポートする.

Stepのインポート

OpenCascade は,STEPファイルをインポートすることができる.

例のディレクトリパスを設定する.
STEPファイルをインポートする.
境界付きのメッシュを抽出する.
境界要素マーカーの和を調べ,マーカーの色を作成する.
マーカーを強調した,境界付きのElementMeshを可視化する.
完全なメッシュを生成する.
STEPファイルをインポートする.
境界付きのメッシュを抽出する.
境界要素マーカーの和を調べ,マーカーの色を作成する.
マーカーを強調した,境界付きのElementMeshを可視化する.
完全なメッシュを生成する.

Stepの組立ては OpenCascade Compoundsとしてインポートできる.関数OpenCascadeShapeNumberOfSolidsで数多くの組立ての立体部品を探すことができ,関数OpenCascadeShapeSolidsでその部品を抽出することができる.

BRepのエキスポート

OpenCascade は,BRepファイルをエキスポートすることができる.

形状を作成する.
形状をBRepファイルとしてエキスポートする.

BRepのインポート

OpenCascade は,BRepファイルをインポートすることができる.

例のディレクトリパスを設定する.
BRepファイルをインポートする.
境界付きのメッシュを抽出する.
境界要素マーカーの和を調べ,マーカーの色を作成する.
マーカーを強調した,境界付きのElementMeshを可視化する.
完全なメッシュを生成する.

単位

OpenCascade はデフォルトでは単位を使わない.

例題のディレクトリパスを設定する.
stepファイルをインポートする.
境界メッシュを抽出する.
長さの単位を調べる.

デフォルトとして OpenCascade がミリメートルの長さの単位を使うようにリクエストすることができる.

単位をミリメートルとして境界メッシュを抽出する.
長さの単位を調べる.
境界メッシュを抽出してカスタム単位でスケールし直す.
長さの単位を調べる.
境界メッシュを完全なメッシュに変換し,単位を調べる.

考えられる問題

ブール演算の問題

OpenCascase のブール演算から得られる最も低い次元のオブジェクトは,ブール演算に与えられた任意の引数の最低次元のものである.例えば,OpenCascade の2つの立体のブール演算は,OpenCascade の面オブジェクトを返すことができない.

互いが触れ合う立方体2個を作成する.
OpenCascade の形状を2個作成する.
OpenCascade の形状タイプを調べる.
積を構築する.
積の形状タイプを調べる.

境界メッシュは生成できない.結果の OpenCascade の形状の共通部分には,より低次元の面オブジェクトについての情報が含まれていないからである.

境界メッシュを抽出する.
面の数を調べる.

面と直方体が触れ合っている場合を考える.

OpenCascade の形状を2個作成する.
OpenCascade の形状タイプを調べる.
積を構築する.
積の形状タイプを調べる.

OpenCascade の積についてのブール演算の最小次元の引数は,面オブジェクトである.結果の演算も面オブジェクトであるので,オブジェクト情報が結果の形状オブジェクトに存在し,メッシュを作成することができる.

境界メッシュを可視化する.

公差の問題

OpenCascadeの標準公差はである.その尺度の成分を持つ形状の作業を行っている場合には,形状の尺度を変更することをお勧めする.一旦形状が生成されたら,境界メッシュをもう一度もとの尺度に戻せばよい.

OpenCascadeの標準公差より低い公差で形状を作成して可視化する.

オペレーティングシステムによっては,それによって欠陥が明らかになることもある.以下は欠陥が見えるものである.

18.gif

OpenCascadeのデフォルト公差であるより低い公差でブール演算を行うと欠陥が生じる.

これを解決するために,形状の尺度を変える.

形状のスケールを変える.

次に境界メッシュのスケールを意図したスケールに戻す.

境界メッシュの長さの単位を調べる.
長さの単位を設定する.
メッシュの尺度を変更する.
領域境界を調べる.

一点注意したいことは,形状の尺度を変更したままにして,偏微分方程式係数を新しい長さの尺度に調整する方がこの後行う有限要素解析に役立つかもしれないということである.これは数値解の安定性を改善する.このことについては,例えば,固体力学のモノグラフに説明されている.

ユーティリティ関数

VisualizeEdgeFunction

関数VisualizeEdgeFunctionは,領域のそれぞれの辺に対して,順番に操作を適用するために使える.

辺の操作をインタラクティブに可視化するためのユーティリティ関数.
VisualizeFaceFunction

関数VisualizeFaceFunctionは,領域のそれぞれの面に対して,順番に操作を適用するために使える.

面の操作をインタラクティブに可視化するためのユーティリティ関数.

応用例