【AI×CAD 第2回】見積もりのたびに穴を数えていませんか。STEPのB-Repから穴・ザグリ・皿ザグリを自動で拾う
解析曲面として出力されたSTEPでは、穴・ザグリ・皿ザグリ・フィレットの寸法が数値として記録されています。無料の3D CADビューワー兼AI解析ツールCADASのフィーチャ認識で、12個の穴を5行の表にし、厳密解析でSTEPに記録された正確な寸法に置き換えるまでを、実測値と実装の中身で解説します。
こんにちは!
今回は、「AI × CAD・設計情報」シリーズ全5回の第2回目です!
見積もりのたびに、図面を開いて穴を数える。
φ6が4つ、φ8の止まりが3つ、ザグリはこれとこれ。
数えた結果をExcelに転記して、拾い忘れたザグリの深さを後から電話で確認する。3Dデータはとっくに手元にあるのに、拾い出しだけは今日も目視です。
解析曲面として出力されたSTEPでは、穴・ザグリ・皿ザグリ・フィレットを構成する曲面の寸法が数値として記録されています。
円筒面の半径、円錐面の開き角、面の向き。人が数えているものは、機械が読めるものです。
第1回ではSTEPをブラウザで開いて見る・測る・切る・渡すところまでを扱いました。今回は一段深く潜って、当社が無料公開している3D CADビューワー兼AI解析ツール「CADAS」に積んだフィーチャ認識、つまり穴・ザグリ・皿ザグリ・フィレットをSTEPのB-Repから自動で拾って表にする機能の中身を、実装した側の目線で書きます。数値はすべて実測値です。
まずは実物からどうぞ↓
下の穴種プレートは、厳密解析まで済ませた状態で埋め込んであります。右の表の行をクリックすると、その穴が3Dで光ります。ドラッグで回転、ホイールで拡大。ザグリ穴は赤、皿ザグリ穴は青、止まり穴は黄で塗り分けてあります。
この埋め込み自体もCADASの機能です。解析結果とマーキングを付けたままの状態を、iframeでWebサイトやブログに貼れます。仕組みはこのあと順に書きます。

穴種プレートを開くと、12個の穴が5行の表になる
CADASのサンプルギャラリーに「穴種プレート」というモデルを入れてあります。100×70×12mmの板に、通し穴・止まり穴・ザグリ穴・皿ザグリ穴・ボス上の止まり穴を配置したもので、当社がcadqueryで自前生成したものなので正解の寸法が分かっています。
読み込むと右ペインに「穴テーブル」タブが出ます。筆者環境(Windows+Chrome)で、ギャラリーの決定ボタンを押してから表が出るまで2.8秒でした。

通し穴が4つ、止まり穴が3つ、皿ザグリが2つ、ザグリが2つ、ボスの止まり穴が1つ。種別と個数は設計どおりですが、直径の欄をよく見ると φ5.96、φ7.95、φ6.56 と、少しずつずれています。設計値は φ6、φ8、φ6.6 です。
このずれには理由があります。
ブラウザ内の解析は「三角形から円を推定」している
ブラウザに読み込んだ直後のCADASが持っているのは、STEPをパースして得た三角形メッシュと、その三角形がB-Repのどの面に属するかの対応表です。ここから穴を見つけるには、面ごとに三角形の法線の分布を調べて「これは円筒面らしい」「これは円錐面らしい」と統計的に判定し、円をあてはめて半径を推定します。
三角形の頂点は円周上に乗っていますが、三角形の重心は円周の少し内側に落ちます。φ6の穴に対して φ5.96 が出るのはそのためで、この重心ベースの推定法では避けられない近似です。種別の判定と個数の集計にはこれで十分ですが、
見積もりに書く数字としては、もう一歩ほしい。
そこでCADASは二段構えにしました。
穴テーブルの下にある「高度な分析(厳密解析)」を押すと、確認のダイアログが出ます。

同意して送ると、サーバー側でSTEPの本文から解析曲面のエンティティを直接読み取り、その結果だけを返します。穴種プレート(109KB)で往復0.82秒。1.03MBの減速ギアユニットでも同じ0.82秒でした。

φ6.000、φ8.000、皿 φ10.400 の90°、ザグリ φ11.000 の深さ4.000。設計値と小数第3位まで一致しました。メッシュ推定と厳密解析を並べると、こうなります。
| 穴 | 設計値 | メッシュ推定 | 厳密解析 |
|---|---|---|---|
| 通し穴 ×4 | φ6.0 貫通 | φ5.96 | φ6.000 |
| 止まり穴 ×3 | φ8.0 深さ6 | φ7.95 深さ6 | φ8.000 深さ6.000 |
| ザグリ穴 ×2 | 下穴φ6.6 / ザグリφ11 深さ4 | φ6.56 / φ10.95 深さ4 | φ6.600 / φ11.000 深さ4.000 |
| 皿ザグリ穴 ×2 | 下穴φ5.5 / 皿φ10.4 90° | φ5.46 / φ10.33 90° | φ5.500 / φ10.400 90.0° |
| ボスの止まり穴 ×1 | φ5.0 深さ10 | φ4.97 深さ10 | φ5.000 深さ10.000 |
種別と個数はどちらの経路でも全問正解、寸法は厳密解析でSTEPに記録された値そのもの(このサンプルでは設計値と一致)。この使い分けが、CADASのフィーチャ認識の骨格です。機密のファイルはブラウザ内の推定だけで数えて、寸法の正確さが要るときにサーバーへ送るかどうかを自分で決められます。
STEPのB-Repには何が書いてあるのか
ここからは中身の話です。
STEP(ISO 10303)のAP203/AP214/AP242では、ソリッド形状をB-Rep(境界表現)で表現でき、一般的な機械CADのSTEP交換ではこの表現が広く使われています。ソリッドは閉じた面の集合で、各面は「どの曲面の上にあるか」と「どの辺で区切られているか」で定義されます。この曲面の部分が肝心で、解析曲面として出力されている場合、円筒なら CYLINDRICAL_SURFACE に軸の位置・方向・半径が、円錐なら CONICAL_SURFACE に半頂角が、トーラス面なら TOROIDAL_SURFACE に大半径と小半径が、そのまま数値で書かれています。
穴種プレートのSTEPを数えると、円筒面19・円錐面2・トーラス面1・平面13、面の総数35でした。内訳は、通し穴4・止まり穴3・ザグリ穴の下穴とザグリで4・皿ザグリの下穴2・ボスの止まり穴1・ボスの外周1・四隅のR6が4で、円筒面が19。皿ザグリの皿が円錐面2、ボス根元のR2がトーラス面1、という対応です。
厳密解析のサーバー側がやっているのは、STEPの本文をレコードに分割して、
ソリッド→シェル→面→曲面
と参照を辿り、この数値を取り出すことです。
面がどちらを向いているかは、ADVANCED_FACE の same_sense フラグ(面の向きが曲面の法線と同じか逆かを表す)と、曲面の法線の向きを組み合わせて求めます。まあこれはふつうの3Dグラフィックでもやるポリゴン平面の向きの計算といっしょですね。で、これで穴の内壁とボスの外周を区別できます。境界の頂点を軸に投影すれば、その円筒がどの高さからどの高さまで続いているか(つまり穴の深さ)も出ます。
取り出した曲面を、穴に組み立てるのが分類器です。ルールは次のとおりです。
| 同じ軸線上にある内向き曲面の構成 | 判定 |
|---|---|
| 円筒1径・両端とも底がない | 通し穴 |
| 円筒1径・片側に底がある | 止まり穴 |
| 円筒2径・大径側が開口端に達している | ザグリ穴(大径がザグリ、小径が下穴) |
| 開き角15〜75°の円錐が開口端にある | 皿ザグリ穴(円錐が皿) |
| 上記以外の複数径 | 段付き穴 |
「同じ軸線上」の判定は軸間距離0.3mm以内、「同じ径」は直径差0.06mm以内としています。分類器はメッシュ推定の曲面にも厳密解析の曲面にも同じものを使います。
貫通判定で一度失敗した話
最初の実装では、貫通かどうかを「穴の高さレンジが局所の板厚をほぼ覆っているか」で決めていました。板厚は、穴の周囲にある頂点の高さの幅から推定します。
これが止まり穴で外れました。穴の周囲に頂点が少ないと板厚が過小に推定され、深さ6の止まり穴が「板厚をほぼ覆っている=貫通」と判定されたのです。テッセレーションの粗さに依存するやり方は、こういう形で裏切られます。
今は、穴の両端で軸線を少しだけ延ばし、そこに三角形(穴の底面)があるかどうかを直接検査しています。底があれば止まり、両端とも無ければ貫通。テッセレーションの粗さに左右されにくい判定にしてから、穴種プレート・減速ギアユニット・24部品の時計ムーブメントの3サンプルで全問正解になりました。
もう一つ、平面が巨大なトーラス面に誤判定される件と、軸の向きが反転した円錐で皿の大径側と小径側を取り違える件も、この段階で潰しています。フィーチャ認識は、ルールを書くこと自体より、正解の分かっているモデルで外れ方を見ることに時間がかかります。
行をクリックすると、その穴が光る
表の数字だけでは、どの穴の話か分かりません。
行をクリックすると、3D表示でその種別の穴がすべてハイライトされます。


厳密解析の後は面の対応表を持たないので、穴の位置と径から軸方向に透過のマーカーを立てる方式にしています。壁の向こうにある穴も見えるので、板の裏から入る穴でも見失いません。
フィレットも同じ仕組みで拾える
「フィレット」タブには、トーラス帯と部分円筒帯をR値でまとめた一覧が出ます。穴種プレートでは、ボス根元のR2(トーラス帯・凹のすみ肉)が1箇所、プレート四隅のR6(円筒帯・凸の丸み)が4箇所でした。こちらも厳密解析で R2.000、R6.000 です。

最小Rが1mmを切ると、一覧の上に警告が出ます。工具径や応力集中の目安として、小さすぎるRを一覧の先頭で知らせる仕組みです。
アセンブリでも、部品をまたいで数えられる
単品の板だけでは実務に足りません。減速ギアユニット(5部品)で試します。
厳密解析の結果は、ザグリ穴 φ5.5(ザグリφ9×深さ3)が4個、φ10の通し穴が2個、φ10.2の通し穴が2個。φ10は歯車2枚のボア、φ10.2はベースプレートの軸穴で、歯車とプレートは別部品です。部品ごとの寸法が一つの表に集まっています。

こちらも実物を埋め込んでおきます。「ザグリ穴」の行をクリックしてみてください。ベースプレート四隅の4箇所が光ります。
アセンブリのSTEPでは、各部品は自分のローカル座標で定義され、配置関係と座標変換が別のエンティティ群で表現されています。厳密解析ではこの変換を親から順に再帰的に合成して、穴の位置をワールド座標に直しています。四隅のザグリが (±45, ±22) の位置に出ることを回帰テストで固定してあり、部品を動かしてもハイライトがずれません。
数えた先で、表をどう使うか
穴テーブルは「CSVに書き出し」でそのまま落とせます。穴種プレートの実物はこうです。
"種別","φ (mm)","深さ (mm)","個数","詳細","部品"
"通し穴","6","12","4","貫通","hole-plate"
"止まり穴","8","6","3","止まり","hole-plate"
"皿ザグリ穴","5.5","12","2","皿 φ10.4・90°","hole-plate"
"ザグリ穴","6.6","12","2","ザグリ φ11 × 深さ 4","hole-plate"
"止まり穴","5","10","1","止まり","hole-plate"見積もりの拾い出しなら、この5行を単価表と突き合わせるだけです。
転記も、数え直しもありません。
もう一つ、行の右端にある「タグ」ボタンを押すと、その種別の穴の面がまとめて面マーキングに登録されます。減速ギアユニットでザグリ穴の行をタグ付けすると、4箇所×2面の8面、合計6.83cm²が「要確認」タグに入りました。

この状態を第1回で紹介した共有パッケージ(.cadas)にして渡せば、受け取った側は穴テーブルとマーキングが入った状態でモデルを開けます。「このザグリ、全部同じ深さでいいですか」を、穴に色が付いた3Dを見ながら聞けるわけです。
ファイルを渡す代わりに、この分析済みの状態をそのままWebページに埋め込む手もあります。この記事の冒頭と、減速ギアユニットの節に貼ってあるのがその実物で、「ファイル > 埋め込み・共有リンクを発行」から発行したiframeタグを貼っただけです。社内ポータルに貼れば、CADを持たない部門が穴テーブルを見ながら3Dを回せます。閲覧者を限定したいときは、発行時にユーザー名とパスワードを付けられます。
正解の分かるモデルで検証している
フィーチャ認識は、それらしい表が出るだけでは信用できません。
私たちは次の形で検証しています。
題材は自前生成のモデルだけにしました。
穴種プレートも減速ギアユニットもcadqueryのスクリプトから作っていて、φ6.6のザグリが (−20, 22) と (10, 22) にある、といった設計値がスクリプトに書いてあります。回帰テストはこの設計値と突き合わせ、メッシュ推定は近似許容、厳密解析は0.001mm以内の一致を要求します。
そのうえで、テストが本当に欠陥を捕まえるかも確かめました。貫通判定のキャップ検査を無効にする、円錐の端半径の入れ替えを外す、アセンブリの変換合成を止める、という3種類の欠陥をわざと注入し、それぞれでテストが落ちることを確認してから採用しています。
通るテストより、落ちるべきときに落ちるテストのほうが大事ですね。
まとめ
解析曲面として出力されたSTEPでは、穴・ザグリ・皿ザグリ・フィレットを構成する曲面の寸法が数値として記録されています。CADASはそれをブラウザ内のメッシュ推定で数え、必要なときだけサーバーの厳密解析で、STEPの解析曲面に記録された正確な幾何値に置き換えます。
今回の自前サンプルでは、その値が設計値と小数第3位まで一致しました。穴種プレートの12個の穴は5行の表になり、CSVに落ち、面に色が付き、共有パッケージで渡せます。
目視で数えていた拾い出しが、読み込んで一回クリックする作業になります。
次回の第3回は、金型の話です。
「この形、抜けません」
を設計中に知るための、抜き勾配・アンダーカット・肉厚の自動チェックを、正解の分かる樹脂ケースで実走します。
まずは穴種プレートを開いてみてください
CADASは無料・登録不要です。「ファイル > サンプルギャラリー」から穴種プレートを選び、右ペインの「穴テーブル」タブを開いてください。手元のSTEPを読ませる場合は、そのままブラウザ内の推定で数えられます。
当社コンサル部門では、ソースコードから3D CADデータまで、AI/ITを活用した設計現場のイノベーションを課題調査からソリューション導入まで一気通貫のご支援を提供しています。もしご興味あれば、 AI × CAD・設計情報コンサルティング(無料相談) まで、お気軽にご相談くださいませ。
それでは、また次回、お会いしましょう!
関連リンク
【AI×CAD 第1回】設計の3Dデータ、設計部門の外で誰も見られない問題を無料+ブラウザだけで解決する(当ブログ)