feat: advance FreeCAD parity and native OCCT history
This commit is contained in:
68
scripts/freecad-reference-probe.py
Normal file
68
scripts/freecad-reference-probe.py
Normal file
@@ -0,0 +1,68 @@
|
||||
import importlib
|
||||
import json
|
||||
|
||||
import FreeCAD as App
|
||||
|
||||
|
||||
def property_metadata(obj):
|
||||
properties = []
|
||||
for name in obj.PropertiesList:
|
||||
try:
|
||||
type_id = obj.getTypeIdOfProperty(name)
|
||||
except Exception:
|
||||
type_id = "unknown"
|
||||
try:
|
||||
group = obj.getGroupOfProperty(name)
|
||||
except Exception:
|
||||
group = ""
|
||||
try:
|
||||
status = list(obj.getPropertyStatus(name))
|
||||
except Exception:
|
||||
status = []
|
||||
properties.append({"name": name, "typeId": type_id, "group": group, "status": status})
|
||||
return properties
|
||||
|
||||
|
||||
def probe_object(document, type_id):
|
||||
try:
|
||||
obj = document.addObject(type_id, "Reference" + type_id.replace(":", "_"))
|
||||
except Exception as error:
|
||||
return {"typeId": type_id, "available": False, "error": str(error)}
|
||||
return {
|
||||
"typeId": type_id,
|
||||
"available": True,
|
||||
"runtimeTypeId": obj.TypeId,
|
||||
"properties": property_metadata(obj),
|
||||
}
|
||||
|
||||
|
||||
def probe_module(name):
|
||||
try:
|
||||
module = importlib.import_module(name)
|
||||
return {"name": name, "available": True, "file": getattr(module, "__file__", None)}
|
||||
except Exception as error:
|
||||
return {"name": name, "available": False, "error": str(error)}
|
||||
|
||||
|
||||
document = App.newDocument("ReferenceProbe")
|
||||
version = App.Version()
|
||||
result = {
|
||||
"schemaVersion": 1,
|
||||
"baselineId": "freecad-1.1.1",
|
||||
"freecadVersion": ".".join(str(value) for value in version[:3]),
|
||||
"revision": str(version[3]),
|
||||
"gitBranch": str(version[6]) if len(version) > 6 else "",
|
||||
"gitCommit": str(version[7]) if len(version) > 7 else "",
|
||||
"guiUp": bool(getattr(App, "GuiUp", False)),
|
||||
"buildPurpose": "headless-reference-oracle",
|
||||
"modules": [probe_module(name) for name in [
|
||||
"Part", "Material", "Measure", "Sketcher", "PartDesign", "TechDraw",
|
||||
"Spreadsheet", "Draft", "Mesh", "Fem", "CAM", "Assembly",
|
||||
]],
|
||||
"objects": [probe_object(document, type_id) for type_id in [
|
||||
"Part::Box", "Part::Cylinder", "Part::Sphere", "Part::Cone",
|
||||
"Part::Feature", "PartDesign::Feature", "Sketcher::SketchObject",
|
||||
]],
|
||||
}
|
||||
App.closeDocument(document.Name)
|
||||
print("FREECAD_REFERENCE_RESULT=" + json.dumps(result, sort_keys=True, separators=(",", ":")))
|
||||
Reference in New Issue
Block a user