75 lines
2.9 KiB
Python
75 lines
2.9 KiB
Python
import json
|
|
import os
|
|
|
|
import FreeCAD as App
|
|
|
|
|
|
FREECAD_COMMIT = "0108fd4b4850cc46e625b60e53cea7a7bbe69f8d"
|
|
ASSET = os.path.abspath(".cache/freecad/FreeCAD/data/tests/mesh.obj")
|
|
|
|
|
|
def mesh_snapshot(obj):
|
|
mesh = getattr(obj, "Mesh", None)
|
|
if mesh is None:
|
|
return {"applicable": False}
|
|
try:
|
|
bounds = mesh.BoundBox
|
|
return {
|
|
"applicable": True,
|
|
"facets": len(mesh.Facets),
|
|
"vertices": len(mesh.Points),
|
|
"bounds": [round(float(value), 9) for value in (bounds.XMin, bounds.YMin, bounds.ZMin, bounds.XMax, bounds.YMax, bounds.ZMax)],
|
|
"isEmpty": len(mesh.Facets) == 0,
|
|
}
|
|
except Exception as error:
|
|
return {"applicable": True, "error": str(error)}
|
|
|
|
|
|
def snapshot(document, obj, requested):
|
|
recompute_result = bool(document.recompute())
|
|
return {
|
|
"requested": requested,
|
|
"value": str(obj.FileName),
|
|
"propertyTypeId": obj.getTypeIdOfProperty("FileName"),
|
|
"propertyStatus": [str(item) for item in obj.getPropertyStatus("FileName")],
|
|
"editorMode": [str(item) for item in obj.getEditorMode("FileName")],
|
|
"objectState": [str(item) for item in obj.State],
|
|
"statusString": str(obj.getStatusString()),
|
|
"mustExecute": bool(obj.mustExecute()) if hasattr(obj, "mustExecute") else None,
|
|
"recomputeResult": recompute_result,
|
|
"mesh": mesh_snapshot(obj),
|
|
"objectSet": [{"name": candidate.Name, "typeId": candidate.TypeId} for candidate in document.Objects],
|
|
}
|
|
|
|
|
|
def run():
|
|
document = App.newDocument("PropertyFileSuccess")
|
|
try:
|
|
obj = document.addObject("Mesh::Import", "FileProbe")
|
|
document.recompute()
|
|
phases = {"default": snapshot(document, obj, "")}
|
|
obj.FileName = ASSET
|
|
phases["valid-mesh"] = snapshot(document, obj, ASSET)
|
|
obj.FileName = "mesh-data/Cube.stl"
|
|
phases["relative-path"] = snapshot(document, obj, "mesh-data/Cube.stl")
|
|
obj.FileName = ASSET
|
|
phases["restored"] = snapshot(document, obj, ASSET)
|
|
return {
|
|
"schemaVersion": 1,
|
|
"status": "pass",
|
|
"baselineId": "freecad-1.1.1-property-file-success",
|
|
"freecadVersion": ".".join(str(value) for value in App.Version()[:3]),
|
|
"gitCommit": FREECAD_COMMIT,
|
|
"propertyType": "App::PropertyFile",
|
|
"object": {"name": obj.Name, "typeId": obj.TypeId},
|
|
"property": {"name": "FileName", "typeId": obj.getTypeIdOfProperty("FileName"), "group": obj.getGroupOfProperty("FileName")},
|
|
"asset": {"path": ASSET, "exists": os.path.isfile(ASSET), "bytes": os.path.getsize(ASSET) if os.path.isfile(ASSET) else 0},
|
|
"phases": phases,
|
|
"diagnostics": {"exception": None, "documentObjectCount": len(document.Objects)},
|
|
}
|
|
finally:
|
|
App.closeDocument(document.Name)
|
|
|
|
|
|
print("FREECAD_PROPERTY_FILE_SUCCESS_RESULT=" + json.dumps(run(), sort_keys=True))
|