Files
Qinventor/tests/ribbon_probe.FCMacro
T

59 lines
4.1 KiB
Plaintext

import sys, os, json, traceback
import FreeCAD as App
import FreeCADGui as Gui
from PySide import QtCore, QtGui, QtWidgets
from PySide6 import QtTest
ROOT = os.path.abspath(os.environ.get('QI_ROOT') or os.getcwd())
sys.path.insert(0, ROOT + '/src/QInventor')
sys.path.insert(0, ROOT + '/tests')
os.environ['QI_TEST'] = 'ribbon'
def probe():
result = {}
try:
Gui.activateWorkbench('QInventorWorkbench')
main = Gui.getMainWindow()
main.resize(1440, 940)
main.show()
main.activateWindow()
import qi_model, qi_commands, qi_ui
doc = qi_model.new_part('Проба Qt')
old = qi_ui.choose_plane
qi_ui.choose_plane = lambda: 'XY'
try:
qi_commands._new_sketch()
finally:
qi_ui.choose_plane = old
QtWidgets.QApplication.processEvents()
QtTest.QTest.qWait(500)
result['gui_command_api'] = {n: str(getattr(Gui, n)) for n in dir(Gui) if 'Command' in n}
result['gui_command_dir'] = dir(Gui.Command) if hasattr(Gui, 'Command') else []
if hasattr(Gui, 'Command'):
try:
item = Gui.Command.get('Sketcher_Dimension')
result['command'] = {'repr': str(item), 'dir': dir(item), 'info': item.getInfo()}
action = item.getAction()
result['command_action'] = {'repr':str(action), 'type':str(type(action)), 'dir':dir(action), 'is_active':item.isActive(), 'shortcut_doc':item.setShortcut.__doc__, 'action_doc':item.getAction.__doc__}
result['native_info'] = {n:Gui.Command.get(n).getInfo() for n in ['Sketcher_NewSketch','Sketcher_CreatePolyline','Sketcher_CreateLine','Sketcher_CreateRectangle','Sketcher_CreateCircle','Sketcher_CreateArc','Sketcher_Dimension','Sketcher_ConstrainHorizontal','Sketcher_ConstrainVertical','Sketcher_ConstrainCoincident','Sketcher_ConstrainParallel','Sketcher_ConstrainPerpendicular','Sketcher_ConstrainEqual','Sketcher_ConstrainTangent','Sketcher_ConstrainBlock','Sketcher_ToggleConstruction','Sketcher_Trimming','Part_Box','Part_Cylinder','Std_New','Std_Open','Std_Save','Std_Export','Std_ViewFitAll','Assembly_CreateAssembly','Spreadsheet_NewSheet','TechDraw_PageDefault','TechDraw_View','TechDraw_ProjectionGroup'] if n in Gui.listCommands()}
result['gui_icon_api'] = {n:str(getattr(Gui,n)) for n in dir(Gui) if 'icon' in n.lower()}
except Exception:
result['command_error'] = traceback.format_exc()
result['widgets'] = [{'name': w.objectName(), 'class': w.metaObject().className(), 'size': [w.width(),w.height()], 'visible':w.isVisible()} for w in main.findChildren(QtWidgets.QWidget) if ('quarter' in w.metaObject().className().lower() or 'view' in w.objectName().lower())]
result['large_widgets'] = [{'name':w.objectName(),'class':w.metaObject().className(),'size':[w.width(),w.height()],'parent':w.parent().metaObject().className() if w.parent() else None} for w in main.findChildren(QtWidgets.QWidget) if w.isVisible() and w.width()>300 and w.height()>250]
result['active_view_methods'] = dir(Gui.activeDocument().activeView())
result['actions'] = [{'name': a.objectName(), 'text': a.text(), 'shortcuts':[s.toString() for s in a.shortcuts()], 'enabled':a.isEnabled()} for a in main.findChildren(QtGui.QAction) if ('Sketcher_Dimension' in a.objectName() or 'Std_New' in a.objectName() or 'QI_' in a.objectName())]
result['session'] = {'key': qi_commands._SKETCH_SESSION['key'], 'content':type(qi_commands._SKETCH_SESSION['content']).__name__}
result['pyside'] = __import__('PySide').__version__
main.grab().save(ROOT + '/artifacts/ribbon-probe.png')
qi_commands._cancel_sketch()
result['cancel_new'] = len([o for o in doc.Objects if o.isDerivedFrom('Sketcher::SketchObject')]) == 0
except Exception:
result['error'] = traceback.format_exc()
with open(ROOT + '/artifacts/ribbon-probe.json','w',encoding='utf-8') as stream:
json.dump(result,stream,ensure_ascii=False,indent=2,default=str)
for docname in list(App.listDocuments()):
App.closeDocument(docname)
Gui.getMainWindow().close()
QtCore.QTimer.singleShot(1800, probe)