添加cadfs_to_cdsl代码,优化cad生成
This commit is contained in:
@@ -647,6 +647,60 @@ def _coaxial_through_bore_group(expected: dict[str, Any], facts: dict[str, Any])
|
||||
return _pass({"diameter_mm": expected["diameter_mm"], "axes": deviations, "tolerance_mm": tolerance}) if all(item["axis_dot"] >= 1 - 1e-6 and item["axis_distance_mm"] <= tolerance for item in deviations) else _fail({"diameter_mm": expected["diameter_mm"], "axes": deviations, "tolerance_mm": tolerance})
|
||||
|
||||
|
||||
def _concentric_bore_to_outer_cylinder(expected: dict[str, Any], facts: dict[str, Any]) -> ClaimResult:
|
||||
"""Verify one bore axis coincides with one external cylindrical shell.
|
||||
|
||||
This is distinct from ``coaxial_through_bore_group``, which compares two
|
||||
or more inner bores. A centered flange bore has only one inner cylinder,
|
||||
so treating its outer wall as a second bore makes the old verifier
|
||||
permanently pending.
|
||||
"""
|
||||
if not _records(facts):
|
||||
return _pending("topology is unavailable")
|
||||
tolerance = float(expected["tolerance_mm"])
|
||||
bore = _matching_cylinders({
|
||||
"diameter_mm": expected["bore_diameter_mm"],
|
||||
"tolerance_mm": tolerance,
|
||||
}, facts)
|
||||
outer_shells = _outer_cylinder_shells({
|
||||
"diameter_mm": expected["outer_diameter_mm"],
|
||||
"tolerance_mm": tolerance,
|
||||
}, facts)
|
||||
if not bore:
|
||||
return _pending("the target bore has not been introduced at this checkpoint")
|
||||
if not outer_shells:
|
||||
return _pending("the target outer cylindrical surface has not been introduced at this checkpoint")
|
||||
if len(bore) != 1 or len(outer_shells) != 1:
|
||||
return _fail({
|
||||
"expected_bore_count": 1,
|
||||
"actual_bore_count": len(bore),
|
||||
"expected_outer_count": 1,
|
||||
"actual_outer_count": len(outer_shells),
|
||||
"bore_diameter_mm": expected["bore_diameter_mm"],
|
||||
"outer_diameter_mm": expected["outer_diameter_mm"],
|
||||
})
|
||||
bore_point = _cylinder_axis_point(bore[0])
|
||||
bore_axis = _cylinder_axis_direction(bore[0])
|
||||
outer_point = _cylinder_axis_point(outer_shells[0][0])
|
||||
outer_axis = _cylinder_axis_direction(outer_shells[0][0])
|
||||
if None in {bore_point, bore_axis, outer_point, outer_axis}:
|
||||
return _pending("the bore or outer-cylinder axis is not measurable")
|
||||
assert bore_point is not None and bore_axis is not None
|
||||
assert outer_point is not None and outer_axis is not None
|
||||
axis_dot = abs(sum(bore_axis[index] * outer_axis[index] for index in range(3)))
|
||||
delta = tuple(bore_point[index] - outer_point[index] for index in range(3))
|
||||
axial = sum(delta[index] * outer_axis[index] for index in range(3))
|
||||
radial_distance = sqrt(sum((delta[index] - axial * outer_axis[index]) ** 2 for index in range(3)))
|
||||
evidence = {
|
||||
"bore_record_id": bore[0].get("record_id"),
|
||||
"outer_record_ids": [record.get("record_id") for record in outer_shells[0]],
|
||||
"axis_dot": axis_dot,
|
||||
"axis_distance_mm": radial_distance,
|
||||
"tolerance_mm": tolerance,
|
||||
}
|
||||
return _pass(evidence) if axis_dot >= 1 - 1e-6 and radial_distance <= tolerance else _fail(evidence)
|
||||
|
||||
|
||||
def _orthogonal_intersecting_through_bores(expected: dict[str, Any], facts: dict[str, Any]) -> ClaimResult:
|
||||
first = _matching_cylinders({"diameter_mm": expected["first_diameter_mm"], "tolerance_mm": expected["tolerance_mm"]}, facts)
|
||||
second = _matching_cylinders({"diameter_mm": expected["second_diameter_mm"], "tolerance_mm": expected["tolerance_mm"]}, facts)
|
||||
@@ -889,6 +943,7 @@ def default_registry() -> VerifierRegistry:
|
||||
ClaimDefinition("circular_hole_pattern", _closed_object({"count": {"type": "integer", "minimum": 2}, "diameter_mm": positive, "pitch_radius_mm": positive, "concentric_bore_diameter_mm": positive, "tolerance_mm": tolerance}, ["count", "diameter_mm", "pitch_radius_mm", "tolerance_mm"]), ("topology",), _hole_pattern),
|
||||
ClaimDefinition("collinear_through_bore_chain", bore_chain, ("topology",), _collinear_bore_chain),
|
||||
ClaimDefinition("coaxial_through_bore_group", _closed_object({"diameter_mm": positive, "count": {"type": "integer", "minimum": 2, "maximum": 16}, "tolerance_mm": alignment_tolerance}, ["diameter_mm", "count", "tolerance_mm"]), ("topology",), _coaxial_through_bore_group),
|
||||
ClaimDefinition("concentric_bore_to_outer_cylinder", _closed_object({"bore_diameter_mm": positive, "outer_diameter_mm": positive, "tolerance_mm": alignment_tolerance}, ["bore_diameter_mm", "outer_diameter_mm", "tolerance_mm"]), ("topology",), _concentric_bore_to_outer_cylinder),
|
||||
ClaimDefinition("orthogonal_intersecting_through_bores", _closed_object({"first_diameter_mm": positive, "second_diameter_mm": positive, "first_axis": {"enum": ["x", "y", "z"]}, "second_axis": {"enum": ["x", "y", "z"]}, "tolerance_mm": alignment_tolerance}, ["first_diameter_mm", "second_diameter_mm", "first_axis", "second_axis", "tolerance_mm"]), ("topology",), _orthogonal_intersecting_through_bores),
|
||||
ClaimDefinition("rectangular_corner_through_bore_pattern", _closed_object({"diameter_mm": positive, "count": {"const": 4}, "edge_offset_mm": positive, "tolerance_mm": tolerance}, ["diameter_mm", "count", "edge_offset_mm", "tolerance_mm"]), ("rebuild_report", "topology"), _rectangular_corner_bore_pattern),
|
||||
ClaimDefinition("coaxial", _closed_object({"record_ids": {"type": "array", "items": {"type": "string", "minLength": 1}, "minItems": 2, "maxItems": 2, "uniqueItems": True}, "tolerance": alignment_tolerance}, ["record_ids", "tolerance"]), ("topology",), _coaxial),
|
||||
|
||||
Reference in New Issue
Block a user