3Dな線を3DCAD中間ファイルでエクスポートする
- 新着としてマーク
- ブックマーク
- 購読
- ミュート
- RSS フィードを購読する
- パーマリンクを表示
- 印刷
- 報告
最後に添付しているデータなのですが、
こんな感じの中身です。
三次元的な線なのですが、Treeを見て頂くと
ちょっと不思議な感じがしないでしょうか?
線がsketchに入っているのでは無く、Bodyに
入った状態となっています。
これはスプリクトを利用して作ったもので、恐らく手動の操作では作成出来ないだろうと思います。
実は、この状態であれば三次元の線としてエクスポート出来る事を確認しました。(Iges,Step,Sat)
実験的なスプリクトな為、不完全ですがこちらです。
#FusionAPI_python #Author-kantoku #Description-指定したスケッチの線を新規デザインでBRepWireとして作成する import adsk.core, adsk.fusion, traceback def run(context): ui = None try: app = adsk.core.Application.get() ui = app.userInterface #選択 sel = Sel('スケッチ選択','Sketches') if sel is None: return skt = sel.entity #上手く選択解除出来ない。何故? ui.activeSelections.clear() geos = GetSketchCurvesGeos(skt) #新規デザイン NewDoc(app) des = adsk.fusion.Design.cast(app.activeProduct) root = des.rootComponent #ダイレクト des.designType = adsk.fusion.DesignTypes.DirectDesignType #tempBRep tmpMgr = adsk.fusion.TemporaryBRepManager.get() crvs,_ = tmpMgr.createWireFromCurves(geos) #実体化 bodies = root.bRepBodies bodies.add(crvs) #おしまい ui.messageBox('Done') except: if ui: ui.messageBox('Failed:\n{}'.format(traceback.format_exc())) #選択 def Sel(msg, selFilter): app = adsk.core.Application.get() ui = app.userInterface try: return ui.selectEntity(msg, selFilter) except: return None def NewDoc(app): desDoc = adsk.core.DocumentTypes.FusionDesignDocumentType return app.documents.add(desDoc) def GetSketchCurvesGeos(skt): if len(skt.sketchCurves) < 1: return None adsk.fusion.SketchCurve.toGeoTF = SketchCurveToGeoTransform mat = skt.transform geos = [crv.toGeoTF(mat) for crv in skt.sketchCurves] return geos #adsk.fusion.SketchCurve def SketchCurveToGeoTransform(self,mat3d): geo = self.geometry.copy() geo.transformBy(mat3d) return geo
1)スプリクト実行後、Tree側のスケッチを選択する。
2)新規デザインに、スケッチ内の線を添付したようなBody状態が出来上がる。
○確認している問題点や制限です。
・元のスケッチを指定した側のファイルですが、スプリクト実行後
選択されたままの状態になり、操作が直ぐに出来ない状態になります。
何度かESCキーを押すと通常の状態になります。
(コードで選択解除しているのですが上手く行かないです・・・)
・指定したスケッチ内に閉じた円弧(円)、自己交差した折れ線
閉じた楕円等、一部閉じた形状がある場合、エラーになります。
(四角、単独の直線が交差していてもOK)
・基本的に直線以外は正しく表示出来ないようです。但しエクスポートした
ものは正しく出来ているようです。
左はスケッチに描いた線です。上がスプラインで下が円弧です。
中央は上記のスプリクトで作成されたBodyです。
右が処理前と処理後を重ねた状態です。
曲線に関しては始点終点でしか表示出来ないようです。(その為、閉じた円弧等はエラーとなるのかも)
手前味噌で申し訳ないですが、こちらの3D曲線インポートスプリクトで
再インポートしてみると重なっています。
又、スケッチの "3Dジオメトリを含める" を利用すると
同様に正しい形状を取得できそうです。
・スプリクト処理後に出来上がる新規デザインは、履歴をキャプチャしない
モードです。(そうしないと処理できなかったので・・・基準フューチャーもNG)
ご注意ください。