こちらの続きです。
画面を原寸大にする3 - C#ATIA
先日のスクリプトを実行すると、新たなドキュメントを作成し
スケッチを作成し50mmX50mmの四角形を描いて終わります。
この時、スクリプトが終了した時に表示されている四角形の
一辺の長さが原寸大になっている! ・・・はずです。
が、会社のPCのモニター(1920x1080)では良いのですが
自宅のPCの場合はちょっと小さい感じ(48mmぐらい)になりました。
原因はモニターの解像度っぽいです。
そこでこんな感じに修正してみました。
# Fusion360API Python script import traceback import adsk.fusion import adsk.core from tkinter import * def run(context): ui = adsk.core.UserInterface.cast(None) try: app: adsk.core.Application = adsk.core.Application.get() ui = app.userInterface app.documents.add(adsk.core.DocumentTypes.FusionDesignDocumentType) des: adsk.fusion.Design = app.activeProduct root: adsk.fusion.Component = des.rootComponent skt: adsk.fusion.Sketch = root.sketches.add( root.xYConstructionPlane ) skt.sketchCurves.sketchLines.addTwoPointRectangle( adsk.core.Point3D.create(0,0,0), adsk.core.Point3D.create(5,5,0), ) sels: adsk.core.Selections = ui.activeSelections sels.clear() sels.add(skt) app.executeTextCommand(u'Commands.Start SketchActivate') vp: adsk.core.Viewport = app.activeViewport vp.fit() execFullSize() except: if ui: ui.messageBox('Failed:\n{}'.format(traceback.format_exc())) def execFullSize(): app: adsk.core.Application = adsk.core.Application.get() ui: adsk.core.UserInterface = app.userInterface def get_dpi(): screen = Tk() current_dpi = screen.winfo_fpixels('1i') return current_dpi def getViewLength(length = 100): app: adsk.core.Application = adsk.core.Application.get() vp: adsk.core.Viewport = app.activeViewport p0 = adsk.core.Point3D.create(0,0,0) p1 = adsk.core.Point3D.create(length*0.1,0,0) m0 = vp.modelToViewSpace(p0) m1= vp.modelToViewSpace(p1) return m0.distanceTo(m1) def dumpmsg(s): adsk.core.Application.get().log(s) print(s) try: vp: adsk.core.Viewport = app.activeViewport pixel2millimeter = 25.4 / get_dpi() dist = getViewLength() dumpmsg(f'ViewSpace Dist {dist}-{dist * pixel2millimeter}') viewLength = dist * pixel2millimeter ratio = (viewLength / 100) ** 2 cam: adsk.core.Camera = vp.camera cam.viewExtents = cam.viewExtents * ratio vp.camera = cam vp.refresh() dist = getViewLength() dumpmsg(f'ViewSpace Dist {dist}-{dist * pixel2millimeter}') dumpmsg('**') except: if ui: ui.messageBox('Failed:\n{}'.format(traceback.format_exc()))
結果は自宅に帰ってからになりますが・・・。