概要
需要があるかはわからないが、以前、CAD点群データの抽出のために、.stpファイルを使ったシステムの構築をしていたことがあって、簡単にメモ書き程度にその構文を残しておく。
なお、.stpファイルはSTEPファイルと呼ばれ、CADデータから得られる中間的なデータに相当します。
目次
※今後追加します
インストール
ライブラリ
米国NIST認定の無料ライブラリがありますので、こちらを使用します。
そして、なんとこちらはMITライセンスです。通常STEP系を含むCADデータの読み取りを扱ったライブラリはライセンスが煩く、GPL/LGPLであることが多いのですが、こちらはMITライセンスなので一応商用などで扱いやすいメリットがあります。
日本国内では、コミュニティが全くないような状況ですので、もし興味があってSTPE中間データでプログラミングしたいなぁ〜と思うようなものがあれば、一緒にやりましょう!!
どんな応用をしたか
こんな構造をした構造をした「スプロケット」と呼ばれる部品を、点群データで構成して、そのデータと三角測量方式のセンサを一緒に紐付けて、どのように観察されるかを検討しました。
環境
Windows 10及びDebianでインストール可能です。
Windows 10の場合はVisual Studio C++が必携になるのと、VS2017以降に導入されたcmakeを使ってインストールする必要がある点に注意します。
言語はC++またはPythonです。Python版の使い方は実はまだ調査できていないのですが、需要があるかな?と思ったらまとめたりしてみたいな〜と思っています。
また確か、Windows 10のインストールの場合は、詰まりポイントがあって、例えばSTEPファイルの中にも規格データが多様に用意されていて、例えばAP204とかAP213と言った規格が存在するのですが、そのスキーマを別々に読み込まないとインストールできない、という現象がありました。
*.stpファイルの構文
これだけ知っていれば、とりあえず「点群データの点」だけは抽出可能です
なお、以下のサイトから出してますが、noteのやつも私が書いているので、転載には問題なしです。
#1833 = CARTESIAN_POINT( '', 1.00, 2.00, 3.00)
直交座標系の固定座標点です。
# 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スプライン曲線?などなど)が入ります。
データ読み込み時に注意
以前、製造部品関連大手のミスミ社のCADデータを使って、簡単にデータが読めるかを試したのですが、実はエラーが発生していました。
理由としては、裏にST-Developerと呼ばれるCADのクラウドアプリケーションと連携がされているみたいで、ST-Developerで管理されているSTEPファイルを読み取る際には、ちょっとした注意がいるようです。
※注意! ミスミ社のSTEPファイルは原則許可なく外にリソースとして出力してシステム化することは認められておりません。CADデータの著作権には十分注意しましょう。
例えば、とあるCADデータでは、このような表記がされています。
#46 = ( NAMED_UNIT( #64 )PLANE_ANGLE_UNIT( )SI_UNIT( $, .RADIAN. ) );
#47 = ( NAMED_UNIT( #64 )SI_UNIT( $, .STERADIAN. )SOLID_ANGLE_UNIT( ) );
こちらを、
#46 = ( NAMED_UNIT( * )PLANE_ANGLE_UNIT( )SI_UNIT( $, .RADIAN. ) );
#47 = ( NAMED_UNIT( * )SI_UNIT( $, .STERADIAN. )SOLID_ANGLE_UNIT( ) );
とすることで、CADデータを無事STEPCodeで読み取ることができます。