Files
Qinventor/tests/ribbon_camera_probe.FCMacro
T

66 lines
3.7 KiB
Plaintext

import os, sys, json, traceback
import FreeCAD as App
import FreeCADGui as Gui
from PySide import QtCore, QtGui, QtWidgets
from PySide6 import QtTest
from PySide6 import QtOpenGLWidgets
ROOT = os.path.abspath(os.environ.get('QI_ROOT') or os.getcwd())
sys.path.insert(0, os.path.join(ROOT, 'src', 'QInventor'))
os.environ['QI_TEST'] = 'camera'
App.ParamGet('User parameter:BaseApp/Preferences/View').SetString('NavigationStyle', 'Gui::RevitNavigationStyle')
def run():
rows=[]
try:
Gui.activateWorkbench('QInventorWorkbench')
import qi_ui, qi_commands, qi_model
main=Gui.getMainWindow(); main.resize(1440,940); main.hide(); main.showNormal(); main.raise_(); main.activateWindow()
QtTest.QTest.qWaitForWindowExposed(main.windowHandle(),5000)
for force in [False, True]:
App.ParamGet('User parameter:BaseApp/Preferences/Mod/Sketcher/General').SetBool('ForceOrtho',force)
doc=qi_model.new_part('Проверка камеры')
body=doc.addObject('PartDesign::Body','Body')
sketch=body.newObject('Sketcher::SketchObject','Sketch')
doc.recompute()
Gui.activeDocument().setEdit(sketch.Name)
QtTest.QTest.qWait(1400)
view=Gui.activeDocument().activeView()
row={'force':force,'camera':view.getCamera(),'viewer_type':str(type(view.getViewer())), 'viewer_dir':dir(view.getViewer())}
row['exposed']=main.windowHandle().isExposed()
rows.append(row)
manager=view.getViewer().getSoRenderManager()
row['auto_clip']=manager.getAutoClipping()
row['auto_redraw']=manager.isAutoRedraw()
row['viewport']=str(manager.getViewportRegion().getViewportSizePixels().getValue())
row['manager_graph']=str(manager.getSceneGraph())
row['manager_camera']=str(manager.getCamera())
graph=view.getSceneGraph()
row['root_children']=[str(graph.getChild(i).getTypeId().getName()) for i in range(graph.getNumChildren())]
root=sketch.ViewObject.RootNode
row['edit_children']=[str(root.getChild(i).getTypeId().getName()) for i in range(root.getNumChildren())]
gl=[w for w in main.findChildren(QtWidgets.QWidget) if w.isVisible() and w.metaObject().className()=='QOpenGLWidget' and w.parent().metaObject().className()=='Gui::View3DInventorViewer'][0]
row['gl_valid']=gl.isValid()
row['gl_context_valid']=gl.context().isValid() if gl.context() else None
row['gl_geometry']=[gl.width(),gl.height()]
main.grab().save(os.path.join(ROOT,'artifacts','camera-%s.png'%force))
Gui.runCommand('Sketcher_CreateRectangle')
QtTest.QTest.qWait(200)
for x,y in [(.25,.65),(.42,.35)]:
pt=QtCore.QPoint(int(gl.width()*x),int(gl.height()*y))
QtGui.QCursor.setPos(gl.mapToGlobal(pt))
QtTest.QTest.mouseMove(gl,pt); QtTest.QTest.qWait(80)
QtTest.QTest.mouseClick(gl,QtCore.Qt.LeftButton,QtCore.Qt.NoModifier,pt)
QtTest.QTest.qWait(120)
row['geometry']=sketch.GeometryCount
QtTest.QTest.keyClick(gl,QtCore.Qt.Key_Escape)
Gui.runCommand('Sketcher_LeaveSketch')
App.closeDocument(doc.Name)
except Exception:
rows.append({'error':traceback.format_exc()})
with open(os.path.join(ROOT,'artifacts','camera-probe.json'),'w',encoding='utf-8') as f:
json.dump(rows,f,indent=2,ensure_ascii=False,default=str)
for n in list(App.listDocuments()):App.closeDocument(n)
Gui.getMainWindow().close()
QtCore.QTimer.singleShot(100,QtCore.QCoreApplication.quit)
QtCore.QTimer.singleShot(5000,run)