LoginSignup
8
12

【!CADデータからデータを取り出す!】STEPcodeの紹介と*.stp形式のファイルについて

Last updated at Posted at 2021-03-13

概要

 需要があるかはわからないが、以前、CAD点群データの抽出のために、.stpファイルを使ったシステムの構築をしていたことがあって、簡単にメモ書き程度にその構文を残しておく。
 なお、
.stpファイルはSTEPファイルと呼ばれ、CADデータから得られる中間的なデータに相当します。

目次

※今後追加します

インストール

ライブラリ

米国NIST認定の無料ライブラリがありますので、こちらを使用します。
そして、なんとこちらはMITライセンスです。通常STEP系を含むCADデータの読み取りを扱ったライブラリはライセンスが煩く、GPL/LGPLであることが多いのですが、こちらはMITライセンスなので一応商用などで扱いやすいメリットがあります。

日本国内では、コミュニティが全くないような状況ですので、もし興味があってSTPE中間データでプログラミングしたいなぁ〜と思うようなものがあれば、一緒にやりましょう!!

どんな応用をしたか

スクリーンショット 2021-03-13 23.56.25.png

こんな構造をした構造をした「スプロケット」と呼ばれる部品を、点群データで構成して、そのデータと三角測量方式のセンサを一緒に紐付けて、どのように観察されるかを検討しました。

環境

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で読み取ることができます。

8
12
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
12