CATIAの場合、普通にスケッチのクローンはコピペで簡単に出来るのですが
Fusion360では出来ないんですよね。結構不便な気がします。
どうしても行いたい場合は、
・予めコピー元のスケッチに入り、全ての要素をコピー
・目的のスケッチを作成
・スケッチに入りペースト
で出来ないことは無いのですが、やっぱりスケッチのクローンを作る
操作としてはイメージが異なりませんかね?
Helpをよく見ると、sketch.copyメソッドがあるじゃないですか。
Fusion 360 Help
じゃあ出来るじゃない と思い作ったのがこちら
#Author-kantoku #Description-Clone Sketch #Fusion360API Python script import adsk.core, adsk.fusion, traceback _app = adsk.core.Application.cast(None) _ui = adsk.core.UserInterface.cast(None) def run(context): try: global _app, _ui _app = adsk.core.Application.get() _ui = _app.userInterface filter =[ # 'Sketches' # 'SketchConstraints', 'Profiles', 'Texts', 'SketchCurves', 'SketchLines', 'SketchCircles', 'SketchPoints'] # select sketch entity msg :str = 'Select Sketch Entity' selFiltter :str = ','.join(filter) sel :adsk.core.Selection = selectEnt(_ui, msg ,selFiltter) if not sel: return # get sketch entities skt :adsk.fusion.Sketch = getSketch(sel.entity) objs :adsk.core.ObjectCollection = getSketchAllEntities(skt) # clone sketch support = skt.referencePlane comp :adsk.fusion.Component = skt.parentComponent mat = adsk.core.Matrix3D.create() clone :adsk.fusion.Sketch = comp.sketches.add(support) skt.copy(objs, mat, clone) except: if _ui: _ui.messageBox('Failed:\n{}'.format(traceback.format_exc())) def getSketch( ent ) -> adsk.fusion.Sketch: skt = adsk.fusion.Sketch.cast(ent) if skt: return skt return ent.parentSketch def getSketchAllEntities( skt :adsk.fusion.Sketch ) -> adsk.core.ObjectCollection: objs = adsk.core.ObjectCollection.create() [objs.add(e) for e in skt.sketchPoints if not e.isReference] [objs.add(e) for e in skt.sketchCurves] [objs.add(e) for e in skt.sketchTexts] return objs def selectEnt( _ui :adsk.core.UserInterface, msg :str, filtterStr :str ) -> adsk.core.Selection : try: sel = _ui.selectEntity(msg, filtterStr) return sel except: return None
原点までクローンされるのは困るのですが、避ける方法がちょっとわかりませんでした。