【CADプログラミング】 STEP中間ファイル ap203とap214


○ STEPデータを使用する前提

定義されているISOの規格は多種多様ですが、今回想定する規格は

・ap203(模型のみで色によるラベリングなし)

・ap214(模型のみで色によるラベリングあり)

の二つを採用する予定です。

また、今回は私の会社ではとある部品メーカーのCADを利用しながら見せていくと言う形式を取る予定ですが、このページ内では著作権もあるので提示しない予定です。一応、自分自身でそれに近いCADデータを作って、どんな構想をして行ったか、と言うことを伝えたいと思います。

○ STEPデータの構文

APIは以下のサイト(英語)

ただし、詳しい説明はありません。実際にいろいろなCADソフトの挙動を見ながら、これはこうだというのを理解していく必要があります。また、そもそもSTEPファイルは「モデリングデータの規格で容器に過ぎない」ので、あるソフトで作られたSTEPファイルが、違うソフトで読めないということは普通にあります。

現時点で、数値情報が見える構文をちょっとだけお見せします。とは言っても簡単なものばかりです。

ボトムアップで追っていって、少しずつモデルを使うと言う形式をとっています。3Dセンサの連携ではそもそも面形状だとか、面がどう囲われているか、と言った情報を使うことは今のところないので、たやすく理解できるところだけを追求しています。


# 1358 = VERTEX_POINT('', # 1833)

頂点を定義します。#~と書いているところに、実際の座標を表します。


# 1833 = CARTESIAN_POINT( '', 1.00, 2.00, 3.00)

カルテシアン点ですが、これは直交座標系での座標位置を表します。カルテシアン座標と言うのは、直交座標のことで、かの有名な数学者のデカルト(Des Cartes)を文字っているようですよ。


# 1832 = VECTOR('', # 2199, 1000.0)

ベクトルを表します。第二引数は方向、第三引数はベクトルの長さを表します。

# 2199 = DIRECTION('', (0.00, 1.00, 0.00))

方向を表します。この場合の方向は、y軸に並行な正規化単位ベクトルになりますね。

# 1225 = LINE('', # 1543, # 1544)

線を表します。直線を定義するには、第二引数を表す直線の中に含まれる一つの点と、第三引数を表す並進ベクトルがあれば定義できますね。

# 1242 = CIRCLE('', # 1584, 17.5)

円ですね。第二引数の#1584は基準面、第三引数は円の半径を表します。

# 1584 = AXIS2_PLACEMENT_3D('', # 2146, # 2147, # 2148)

円は円の方程式(X-X0)^2+(Y-Y0)^2=R^2の形式で表されますね。この円の方程式を定義するのに必要なものは、円の中心と円の法線ベクトルが必要になります。この場合、第二引数は直行座標、第三引数は法線ベクトル、第四引数は法線ベクトルと垂直な方向の1本目のベクトルになります。例えば、

# 1242 = CIRCLE( '', # 1584, 17.5)

# 1584 = AXIS2_PLACEMENT_3D('', # 2146, # 2147, # 2148)

# 2146 = CARTESIAN_POINT( '', 3.5, 0, 0)

# 2147 = DIRECTION( 0.0, 0.0, 1.0)

# 2148 = DIRECTION( 1.0, 0.0, 0.0)

とかけば、z軸に垂直で、x軸を一番目の平行なベクトルとした、(3.5, 0, 0)の座標が中心の円を、半径17.5で描画しなさい、と言うことになります。プログラミングと似ていますね。

# 3166 = B_SPLINE_CURVE_WITH_KNOTS( '', 3, ( ... ), ..., ..., ..., ...)

この構文は長いので、現時点では取り扱っていませんが、Bスプライン曲線を表します。この解析が出来るレベルにまで到達すると、それなりに面白そうなことが出来るかと思います。ただし、センサ側の空間分解能との兼ね合いが難しいので、今回の業務ではこの内容は省いています。

# 1033 = EDGE_CURVE('', # 1223, # 1224, # 1225, T. );

最後ですが、辺を表します。# 1223, # 1224には、最初に示した”頂点”が定義されます。また、# 1225はカーブの形状(直線?円弧?Bスプライン曲線?などなど)が入ります。最後のパラメータはsame_senseと言うパラメータで、まだわかっていませんが、ここはもっと上位の構文と関係がある部分と予想しています。


この記事が気に入ったらサポートをしてみませんか?