feat: close builder mutation and roundtrip evidence gaps

This commit is contained in:
2026-08-10 21:27:42 -04:00
parent 3907f50ff1
commit 26ea9b57d7
49 changed files with 5797 additions and 687 deletions

View File

@@ -4,6 +4,8 @@ import FreeCAD as App
import Part
import Sketcher
from freecad_mutation_evidence import capture_property_mutation
def version_text():
return ".".join(str(value) for value in App.Version()[:3])
@@ -50,7 +52,9 @@ def feature_linear_pattern():
pattern.Direction = (document.X_Axis, [""])
pattern.Occurrences = 3
pattern.Length = 12
mutation = capture_property_mutation(document, pattern, "Occurrences", 4)
result = shape_result("linear-feature-list", document, pattern)
result["mutation"] = mutation
result.update({
"transformMode": pattern.TransformMode,
"originals": [item.Name for item in pattern.Originals],
@@ -79,7 +83,9 @@ def feature_mirrored():
mirrored.TransformMode = "Features"
mirrored.Originals = [boss]
mirrored.MirrorPlane = (document.YZ_Plane, [""])
mutation = capture_property_mutation(document, mirrored, "Refine", False)
result = shape_result("mirrored-feature-list", document, mirrored)
result["mutation"] = mutation
result.update({
"transformMode": mirrored.TransformMode,
"originals": [item.Name for item in mirrored.Originals],
@@ -105,7 +111,9 @@ def feature_polar_pattern():
pattern.Occurrences = 4
pattern.Refine = True
body.addObject(pattern)
mutation = capture_property_mutation(document, pattern, "Occurrences", 3)
result = shape_result("polar-feature-list", document, pattern)
result["mutation"] = mutation
result.update({
"transformMode": pattern.TransformMode,
"originals": [item.Name for item in pattern.Originals],
@@ -149,7 +157,9 @@ def feature_multi_transform():
polar.Occurrences = 4
body.addObject(polar)
multi.Transformations = [mirrored, linear, polar]
mutation = capture_property_mutation(document, multi, "Length", 15.0, target=linear, property_path="Transformations[1].Length")
result = shape_result("multi-transform-feature-list", document, multi)
result["mutation"] = mutation
result.update({
"transformMode": multi.TransformMode,
"originals": [item.Name for item in multi.Originals],
@@ -255,7 +265,9 @@ def iso_hole(modeled):
hole.ThreadDirection = "Left" if modeled else "Right"
hole.ThreadDepthType = "Dimension"
hole.ThreadDepth = 6
mutation = capture_property_mutation(document, hole, "Diameter", 6.5)
result = shape_result(case_id, document, hole)
result["mutation"] = mutation
result.update({
"threaded": bool(hole.Threaded),
"modeled": bool(hole.ModelThread),