自分は加工屋なので、データをCATIA→CAMソフトに頻繁にIgesでやり取り
しているのですが、"曲線およびサーフェスタイプ"を'Bスプライン'の設定で行っています。
色々試した結果、この設定が一番取りこぼしが少なかったです。
デフォルト設定は'標準'で、取り込み側のソフトにもよりますが'標準'ではかなり
面抜け・面化けを経験しました。よく「CATIAのIgesは悪い」と見かけるのですが
原因はこの辺りかと。(V4の場合は、CADのトレランスが甘いからでしょう)
但し、'Bスプライン'設定での欠点もあります。
直線・円弧はスプラインとなり、平面・円筒面も曲面となってしまいます。
受け取り側のソフトにもよりますが、特に困るのは、円弧から中心点が作成
できなかったり、円筒面から軸を作成できなかったりする点です。
(CATIA V5はこの辺も無難に作成出来ちゃうので、助かります)
穴あけ加工のNCデータを作成する際には、(穴としての)3Dの面よりも中心点が
必要になる場合が多いと思います(違う?)。 以前は面倒ですが、同じデータを
'Bスプライン'と'標準'に切り替え2回エクスポート・インポートさせていました。
(ある金型メーカーさんでは、穴加工部分は3Dではモデリングしない と
聞いたことがあります)
この方法では、あまりに効率が悪いので
「指定した面の境界から円の中心点を作成するマクロ」を作成し、一緒に
'Bスプライン'設定でエクスポートすることにしています。
'vba Dim oDoc 'As PartDocument Dim oSel 'As Section Dim oPart As Part Dim oFac As HybridShapeFactory Sub CatMain() Dim InputObjectType(0) InputObjectType(0) = "PlanarFace" Set oDoc = CATIA.ActiveDocument Set oSel = oDoc.selection Set oPart = oDoc.Part Set oFac = oPart.HybridShapeFactory With oSel Do .Clear Result = .SelectElement2(InputObjectType, "中心を作成する面を選択して下さい // [Esc]=キャンセル", False) If Result = "Cancel" Then Exit Do Set SelectRef = .item(1).Reference '① .Clear Call CreatePoint(SelectRef) Loop While Result = "Normal" .Clear End With End Sub 'データム中心点作成 Private Sub CreatePoint(ByVal oRef As Reference) Dim oHBody As HybridBody Dim oExtract As HybridShapeExtract Dim colDel As New Collection Set oHBody = oPart.HybridBodies.add() Set oExtract = oFac.AddNewExtract(oRef) With oExtract .PropagationType = 3 .ComplementaryExtract = False .IsFederated = False End With Call oPart.UpdateObject(oExtract) Call colDel.add(oExtract) Dim oBoundary As HybridShapeBoundary Dim oRef2 As Reference Set oRef2 = oPart.CreateReferenceFromObject(oExtract) Set oBoundary = oFac.AddNewBoundaryOfSurface(oRef2) '② Call oPart.UpdateObject(oBoundary) oHBody.AppendHybridShape oBoundary 'これは必要③ Call colDel.add(oBoundary) Dim oPointCenter As HybridShapePointCenter With oSel .Clear .add oBoundary .Search "Topology.CGMEdge,sel" '④ On Error Resume Next For i = 1 To .Count Set oRef3 = .item(i).Reference Set oPointCenter = oFac.AddNewPointCenter(oRef3) Call colDel.add(oPointCenter) If Err.Number = 0 Then Call oHBody.AppendHybridShape(oPointCenter) Call oPart.UpdateObject(oPointCenter) Set oRef4 = oPart.CreateReferenceFromObject(oPointCenter) Dim oPoint As HybridShapePointExplicit Set oPoint = oFac.AddNewPointDatum(oRef4) Call oHBody.AppendHybridShape(oPoint) Call oPart.UpdateObject(oPoint) End If Next Dim tmp For Each tmp In colDel Call oFac.DeleteObjectForDatum(tmp) '⑤ Next On Error GoTo 0 End With End Sub
大まかな流れとしては、選択した面から境界を取得し分解。
分解した要素全てに中心点を作成し、成功したものだけを形状セットに入れ
データム化。最後に余計な境界線などを削除しています。
(相変わらず、やり方が強引ですね・・・)
①:通常は ".item(1).Value" でオブジェクトを渡すのですが、
後々の処理を考えるとReferenceの方が好都合なので、そのようにしています。
②:選択面から境界線を作成しています。面から直接トポロジ-エッジを検索できない
のでこのようにしています。(と言うことを、今確認しました)
③:通常、一時的な要素(今回は最終的に点が必要で、境界自体は不要)は
HybridShapeFactoryで作成するだけで済ませているのですが、一度形状セット
に入れないと正しく処理できなかったので一度入れています。
④:トポロジ-エッジの検索を行い、「境界を分解した状態」で選択を保った状態に
しています。以前ここなさんが提示していた分解コマンドの方法です。
⑤:途中で作成した不要な要素を削除しています。
「マクロで作成した不要な要素を、全てを削除できているかどうか?」
を確認する方法は、CATDUAを利用するとわかります。
CATDUAのクリーン実行 → マクロ実行 → CATDUAのクリーン実行
で、2度目の実行後のレポートで何も処理されなければ、マクロ内で
全て処理できていると思います。