draftwright 0.4.31__tar.gz → 0.4.33__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {draftwright-0.4.31 → draftwright-0.4.33}/PKG-INFO +3 -3
- {draftwright-0.4.31 → draftwright-0.4.33}/docs/reference/recogniser-capabilities.md +11 -3
- {draftwright-0.4.31 → draftwright-0.4.33}/pyproject.toml +3 -3
- {draftwright-0.4.31 → draftwright-0.4.33}/src/draftwright/__init__.py +7 -1
- {draftwright-0.4.31 → draftwright-0.4.33}/src/draftwright/_core.py +61 -1
- {draftwright-0.4.31 → draftwright-0.4.33}/src/draftwright/_warnings.py +4 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/src/draftwright/annotations/_common.py +25 -4
- {draftwright-0.4.31 → draftwright-0.4.33}/src/draftwright/annotations/from_model.py +104 -11
- {draftwright-0.4.31 → draftwright-0.4.33}/src/draftwright/annotations/orchestrator.py +54 -12
- {draftwright-0.4.31 → draftwright-0.4.33}/src/draftwright/annotations/sections.py +42 -26
- {draftwright-0.4.31 → draftwright-0.4.33}/src/draftwright/builder.py +74 -5
- {draftwright-0.4.31 → draftwright-0.4.33}/src/draftwright/drawing.py +51 -9
- {draftwright-0.4.31 → draftwright-0.4.33}/src/draftwright/inspection_contract.py +1 -1
- draftwright-0.4.33/src/draftwright/linting/envelope_coverage.py +211 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/src/draftwright/linting/quality.py +32 -2
- {draftwright-0.4.31 → draftwright-0.4.33}/src/draftwright/linting/structural.py +38 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/src/draftwright/model/__init__.py +6 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/src/draftwright/model/compiled.py +3 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/src/draftwright/model/declare.py +8 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/src/draftwright/model/detect.py +93 -36
- {draftwright-0.4.31 → draftwright-0.4.33}/src/draftwright/model/ir.py +86 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/src/draftwright/model/pmi_lowering.py +274 -1
- {draftwright-0.4.31 → draftwright-0.4.33}/src/draftwright/pmi.py +34 -1
- {draftwright-0.4.31 → draftwright-0.4.33}/src/draftwright/projection.py +73 -15
- {draftwright-0.4.31 → draftwright-0.4.33}/src/draftwright/recogniser_schema.py +8 -8
- {draftwright-0.4.31 → draftwright-0.4.33}/src/draftwright/recognition_ownership.py +51 -1
- {draftwright-0.4.31 → draftwright-0.4.33}/src/draftwright/repair.py +29 -3
- {draftwright-0.4.31 → draftwright-0.4.33}/src/draftwright/reporting.py +6 -1
- {draftwright-0.4.31 → draftwright-0.4.33}/src/draftwright/section_recess_contract.py +28 -8
- {draftwright-0.4.31 → draftwright-0.4.33}/src/draftwright/sheet.py +98 -1
- {draftwright-0.4.31 → draftwright-0.4.33}/src/draftwright/sheet_emit.py +55 -4
- {draftwright-0.4.31 → draftwright-0.4.33}/src/draftwright/view_plan.py +90 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/test_add_dimension.py +3 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/test_boss_ownership.py +153 -5
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/test_compiled_plan_boundary.py +13 -6
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/test_declare.py +36 -1
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/test_detail_views.py +58 -1
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/test_drawing_state.py +50 -1
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/test_feature_edit_replay.py +14 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/test_flat_stock_identity.py +39 -1
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/test_inspection_contract.py +1 -1
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/test_issue_1157_no_implicit_general_tolerance.py +18 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/test_issue_1298_manufacturing_requirements.py +462 -10
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/test_issue_1308_machined_leader_analytics.py +34 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/test_issue_1333_bounded_ink_repair.py +5 -1
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/test_issue_1450_boss_blend_ownership.py +9 -16
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/test_issue_1485_curved_pockets.py +4 -4
- draftwright-0.4.33/tests/test_issue_1560_envelope_axes.py +221 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/test_lint_structural.py +9 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/test_pareto_loop_canary_issue_1753.py +2 -2
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/test_prismatic_classification.py +24 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/test_recogniser_capabilities.py +19 -20
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/test_repair.py +36 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/test_section_recess_pockets.py +40 -16
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/test_sheet_emit.py +117 -12
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/test_strip_layout.py +157 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/test_through_step_semantics.py +2 -1
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/test_view_plan.py +70 -0
- draftwright-0.4.31/tests/test_issue_1560_envelope_axes.py +0 -69
- {draftwright-0.4.31 → draftwright-0.4.33}/.gitignore +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/CHANGELOG.md +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/LICENSE +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/README.md +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/docs/adr/README.md +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/docs/reference/sheet.md +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/docs/research/1062-repeating-radial-profile-evidence.md +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/skills/SKILL.md +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/src/draftwright/_build_profile.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/src/draftwright/_geometry.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/src/draftwright/_pmi_part21.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/src/draftwright/analysis.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/src/draftwright/angular_geometry.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/src/draftwright/annotate.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/src/draftwright/annotations/__init__.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/src/draftwright/annotations/angular.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/src/draftwright/annotations/balloons.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/src/draftwright/annotations/gears.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/src/draftwright/annotations/holes.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/src/draftwright/annotations/leaders.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/src/draftwright/audit.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/src/draftwright/blend_contract.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/src/draftwright/cli.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/src/draftwright/compose.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/src/draftwright/document.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/src/draftwright/document_evidence.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/src/draftwright/document_input.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/src/draftwright/evaluation/__init__.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/src/draftwright/evaluation/step_analysis.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/src/draftwright/export.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/src/draftwright/feature_identity.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/src/draftwright/fits.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/src/draftwright/fonts/IBMPlexMono-Regular.ttf +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/src/draftwright/fonts/IBMPlexSansCondensed-Regular.ttf +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/src/draftwright/fonts/LICENSE-IBMPlexMono-OFL.txt +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/src/draftwright/fonts/LICENSE-IBMPlexSansCondensed-OFL.txt +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/src/draftwright/fonts/__init__.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/src/draftwright/inspection.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/src/draftwright/intents.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/src/draftwright/layout.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/src/draftwright/leader_policy.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/src/draftwright/linting/__init__.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/src/draftwright/linting/_registry.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/src/draftwright/linting/angled_step_coverage.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/src/draftwright/linting/angular.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/src/draftwright/linting/blend_coverage.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/src/draftwright/linting/chamfer_coverage.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/src/draftwright/linting/channel_coverage.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/src/draftwright/linting/circular_blind_step_coverage.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/src/draftwright/linting/coverage.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/src/draftwright/linting/evidence.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/src/draftwright/linting/fillet_coverage.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/src/draftwright/linting/flat_coverage.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/src/draftwright/linting/gear_coverage.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/src/draftwright/linting/groove_coverage.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/src/draftwright/linting/gusset_rib_coverage.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/src/draftwright/linting/hole_coverage.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/src/draftwright/linting/ink_overlap.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/src/draftwright/linting/issues.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/src/draftwright/linting/oriented_slot_coverage.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/src/draftwright/linting/pad_coverage.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/src/draftwright/linting/paired_ramp_step_coverage.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/src/draftwright/linting/passage_coverage.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/src/draftwright/linting/plate_coverage.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/src/draftwright/linting/pmi_coverage.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/src/draftwright/linting/pocket_coverage.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/src/draftwright/linting/pocket_pattern_coverage.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/src/draftwright/linting/polygonal_boss_coverage.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/src/draftwright/linting/polygonal_stock_coverage.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/src/draftwright/linting/prismatic_pocket_coverage.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/src/draftwright/linting/profiled_bore_coverage.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/src/draftwright/linting/rectangular_blind_slot_coverage.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/src/draftwright/linting/requirements.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/src/draftwright/linting/round_bottom_blind_slot_coverage.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/src/draftwright/linting/schedule_evidence.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/src/draftwright/linting/section_recess_coverage.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/src/draftwright/linting/slot_coverage.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/src/draftwright/linting/suggest.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/src/draftwright/linting/through_step_coverage.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/src/draftwright/linting/turned_step_coverage.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/src/draftwright/location_contract.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/src/draftwright/make_drawing.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/src/draftwright/measurement_support.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/src/draftwright/model/callout.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/src/draftwright/model/planner.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/src/draftwright/oriented_slot_contract.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/src/draftwright/plate_correspondence.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/src/draftwright/profile_angles.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/src/draftwright/progress.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/src/draftwright/py.typed +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/src/draftwright/recogniser_contract.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/src/draftwright/recogniser_policy.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/src/draftwright/recognition/__init__.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/src/draftwright/recognition_cache.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/src/draftwright/recognition_frame.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/src/draftwright/registry.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/src/draftwright/replay_assessment.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/src/draftwright/score.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/_burden_report.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/_corpus_cover.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/_drawing_helpers.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/_evidence_contract.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/_kernel.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/_layout_helpers.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/_layout_sig.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/_mutation_corpus.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/_parts.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/_recogniser_public_contract.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/_section_recess_cases.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/_tier_manifest.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/_unit_manifest.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/conftest.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/fixtures/ap242_single_cylinder_diameter.step +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/fixtures/evaluation/README.md +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/fixtures/evaluation/ambiguous-open-semicircle.step +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/fixtures/evaluation/blind-hole.step +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/fixtures/evaluation/chamfer-asymmetric.step +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/fixtures/evaluation/chamfer-compound.step +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/fixtures/evaluation/chamfer-overlap.step +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/fixtures/evaluation/chamfer-plain.step +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/fixtures/evaluation/chamfer-planar-x.step +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/fixtures/evaluation/chamfer-planar-y.step +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/fixtures/evaluation/chamfer-planar-z.step +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/fixtures/evaluation/chamfer-topology-a.step +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/fixtures/evaluation/chamfer-topology-b.step +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/fixtures/evaluation/chamfer-turned.step +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/fixtures/evaluation/corpus-chamfers-v1.json +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/fixtures/evaluation/corpus-countersinks-v1.json +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/fixtures/evaluation/corpus-double-d-bores-v1.json +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/fixtures/evaluation/corpus-fillets-v1.json +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/fixtures/evaluation/corpus-flats-v1.json +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/fixtures/evaluation/corpus-grooves-v1.json +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/fixtures/evaluation/corpus-hole-patterns-v1.json +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/fixtures/evaluation/corpus-plates-v1.json +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/fixtures/evaluation/corpus-pocket-patterns-v1.json +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/fixtures/evaluation/corpus-pockets-v1.json +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/fixtures/evaluation/corpus-polygonal-bosses-v1.json +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/fixtures/evaluation/corpus-polygonal-stock-v1.json +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/fixtures/evaluation/corpus-rectangular-pads-v1.json +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/fixtures/evaluation/corpus-turned-steps-v1.json +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/fixtures/evaluation/corpus-v1.json +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/fixtures/evaluation/countersink-deburr.step +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/fixtures/evaluation/countersink-external-cone.step +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/fixtures/evaluation/countersink-mixed-pair.step +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/fixtures/evaluation/countersink-single.step +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/fixtures/evaluation/countersink-topology-a.step +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/fixtures/evaluation/countersink-topology-b.step +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/fixtures/evaluation/double-d-axis-x.step +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/fixtures/evaluation/double-d-axis-y.step +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/fixtures/evaluation/double-d-blind.step +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/fixtures/evaluation/double-d-coaxial-compound.step +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/fixtures/evaluation/double-d-opposed-blind.step +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/fixtures/evaluation/double-d-roll-30.step +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/fixtures/evaluation/double-d-round-bore.step +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/fixtures/evaluation/double-d-single-z.step +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/fixtures/evaluation/double-d-topology-a.step +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/fixtures/evaluation/double-d-topology-b.step +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/fixtures/evaluation/fillet-compound.step +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/fixtures/evaluation/fillet-overlap.step +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/fixtures/evaluation/fillet-plain.step +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/fixtures/evaluation/fillet-planar-x.step +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/fixtures/evaluation/fillet-planar-y.step +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/fixtures/evaluation/fillet-planar-z.step +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/fixtures/evaluation/fillet-repeated.step +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/fixtures/evaluation/fillet-topology-a.step +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/fixtures/evaluation/fillet-topology-b.step +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/fixtures/evaluation/fillet-turned.step +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/fixtures/evaluation/flat-coaxial.step +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/fixtures/evaluation/flat-double-d.step +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/fixtures/evaluation/flat-lone-d.step +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/fixtures/evaluation/flat-nonround.step +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/fixtures/evaluation/flat-slanted-double-d.step +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/fixtures/evaluation/flat-topology-a.step +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/fixtures/evaluation/flat-topology-b.step +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/fixtures/evaluation/groove-compound.step +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/fixtures/evaluation/groove-lone-x.step +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/fixtures/evaluation/groove-lone-y.step +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/fixtures/evaluation/groove-lone-z.step +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/fixtures/evaluation/groove-monotonic-negative.step +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/fixtures/evaluation/groove-narrow.step +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/fixtures/evaluation/groove-topology-a.step +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/fixtures/evaluation/groove-topology-b.step +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/fixtures/evaluation/pad-compound-equal.step +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/fixtures/evaluation/pad-detached-body-negative.step +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/fixtures/evaluation/pad-full-span-ledge-negative.step +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/fixtures/evaluation/pad-nested-staircase-negative.step +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/fixtures/evaluation/pad-topology-a.step +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/fixtures/evaluation/pad-topology-b.step +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/fixtures/evaluation/pad-x-negative.step +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/fixtures/evaluation/pad-x-positive.step +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/fixtures/evaluation/pad-y-negative.step +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/fixtures/evaluation/pad-y-positive.step +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/fixtures/evaluation/pad-z-negative.step +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/fixtures/evaluation/pad-z-positive.step +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/fixtures/evaluation/pattern-ambiguous.step +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/fixtures/evaluation/pattern-grid.step +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/fixtures/evaluation/pattern-topology-a.step +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/fixtures/evaluation/pattern-topology-b.step +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/fixtures/evaluation/plain-block.step +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/fixtures/evaluation/plate-compound-equal.step +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/fixtures/evaluation/plate-cross-topology-a.step +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/fixtures/evaluation/plate-cross-topology-b.step +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/fixtures/evaluation/plate-detached-negative.step +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/fixtures/evaluation/plate-rotational-negative.step +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/fixtures/evaluation/plate-single-negative.step +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/fixtures/evaluation/plate-t-xz.step +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/fixtures/evaluation/plate-t-yz.step +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/fixtures/evaluation/plate-thick-negative.step +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/fixtures/evaluation/plate-u-additive.step +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/fixtures/evaluation/plate-u-cut.step +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/fixtures/evaluation/pocket-compound.step +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/fixtures/evaluation/pocket-edge-anchored.step +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/fixtures/evaluation/pocket-lone.step +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/fixtures/evaluation/pocket-opposed.step +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/fixtures/evaluation/pocket-pattern-ambiguous.step +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/fixtures/evaluation/pocket-pattern-grid.step +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/fixtures/evaluation/pocket-pattern-linear.step +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/fixtures/evaluation/pocket-pattern-pair.step +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/fixtures/evaluation/pocket-pattern-topology-a.step +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/fixtures/evaluation/pocket-pattern-topology-b.step +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/fixtures/evaluation/pocket-prismatic-negative.step +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/fixtures/evaluation/pocket-side.step +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/fixtures/evaluation/pocket-through-negative.step +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/fixtures/evaluation/pocket-topology-a.step +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/fixtures/evaluation/pocket-topology-b.step +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/fixtures/evaluation/pocket-two-equal.step +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/fixtures/evaluation/polygonal-boss-compound-equal.step +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/fixtures/evaluation/polygonal-boss-detached-negative.step +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/fixtures/evaluation/polygonal-boss-in-plane-rotated.step +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/fixtures/evaluation/polygonal-boss-other-protrusions-negative.step +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/fixtures/evaluation/polygonal-boss-recess-negative.step +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/fixtures/evaluation/polygonal-boss-stock-negative.step +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/fixtures/evaluation/polygonal-boss-topology-a.step +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/fixtures/evaluation/polygonal-boss-topology-b.step +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/fixtures/evaluation/polygonal-boss-x.step +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/fixtures/evaluation/polygonal-boss-y.step +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/fixtures/evaluation/polygonal-boss-z.step +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/fixtures/evaluation/polygonal-stock-compound-negative.step +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/fixtures/evaluation/polygonal-stock-cylinder-negative.step +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/fixtures/evaluation/polygonal-stock-irregular-negative.step +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/fixtures/evaluation/polygonal-stock-octagon-negative.step +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/fixtures/evaluation/polygonal-stock-recess-negative.step +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/fixtures/evaluation/polygonal-stock-roll17.step +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/fixtures/evaluation/polygonal-stock-topology-a.step +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/fixtures/evaluation/polygonal-stock-topology-b.step +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/fixtures/evaluation/polygonal-stock-translated.step +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/fixtures/evaluation/polygonal-stock-x.step +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/fixtures/evaluation/polygonal-stock-y.step +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/fixtures/evaluation/topology-a.step +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/fixtures/evaluation/topology-b.step +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/fixtures/evaluation/turned-step-axis-x.step +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/fixtures/evaluation/turned-step-axis-y.step +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/fixtures/evaluation/turned-step-axis-z.step +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/fixtures/evaluation/turned-step-compound.step +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/fixtures/evaluation/turned-step-repeated-lengths.step +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/fixtures/evaluation/turned-step-through-bore.step +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/fixtures/evaluation/turned-step-topology-a.step +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/fixtures/evaluation/turned-step-topology-b.step +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/fixtures/evaluation/turned-step-translated-blind-bore.step +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/fixtures/grm03_thumbwheel_drive_screw.step +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/fixtures/grm03_thumbwheel_drive_screw_ap242_pmi.step +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/fixtures/grm04_drive_plate.step +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/fixtures/if_step_flat_across_cylinder.step +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/fixtures/issue_1058_wheel_rh.step +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/fixtures/issue_1247_angled_blind_step.step +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/fixtures/issue_1595_whistle_key_frame.step +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/fixtures/issue_1595_whistle_key_lever.step +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/fixtures/issue_909_basic_part_design_017_body.step +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/fixtures/issue_915_case_study_2.step +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/fixtures/nist_ctc_01_asme1_ap203.stp +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/fixtures/nist_ctc_01_asme1_ap242.stp +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/fixtures/nist_ctc_02_asme1_ap203.stp +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/fixtures/nist_ctc_02_asme1_ap242.stp +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/fixtures/nist_ctc_03_asme1_ap203.stp +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/fixtures/nist_ctc_03_asme1_ap242.stp +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/fixtures/nist_ctc_04_asme1_ap203.stp +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/fixtures/nist_ctc_04_asme1_ap242.stp +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/fixtures/nist_ctc_05_asme1_ap203.stp +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/fixtures/nist_ctc_05_asme1_ap242.stp +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/fixtures/tuner_jig_blind_obround_pockets.step +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/fixtures/whistle_frame_reference.step +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/refactor_golden/bracket_section.json +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/refactor_golden/centered_rebate.json +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/refactor_golden/chamfered.json +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/refactor_golden/filleted.json +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/refactor_golden/flange_dense.json +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/refactor_golden/grid_plate.json +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/refactor_golden/grooved_shaft.json +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/refactor_golden/hex_bar.json +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/refactor_golden/holed_slot.json +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/refactor_golden/pocketed.json +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/refactor_golden/prismatic_ladder.json +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/refactor_golden/scattered_plate.json +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/refactor_golden/side_drilled.json +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/refactor_golden/turned_stepped.json +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/test_adr0018_view_routing.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/test_adr0018_view_selection.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/test_adr_corpus.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/test_agent_improvement_canary_issue_1716.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/test_agents_guide.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/test_analysis_geometry.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/test_angle_patterns.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/test_angular_references.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/test_angular_rendering.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/test_annotation_box_composition.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/test_annotation_box_corpus.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/test_api_docs.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/test_architecture_docs.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/test_arrangement_gate.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/test_assessment_comparison_issue_1712.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/test_audit_differential.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/test_axial_dimensions.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/test_balloon_ring_standoff.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/test_build_drawing_entrypoints.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/test_build_profile_harness.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/test_burden_report.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/test_candidate_evidence_issue_1726.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/test_canonical_angles.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/test_carve_free_position_callers.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/test_channel_ownership.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/test_circular_blind_step_semantics.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/test_cli_behavior.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/test_cli_report_sidecar.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/test_clone_budget.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/test_compose_then_pack.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/test_corpus_cover.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/test_counting_calls.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/test_coverage_mode.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/test_declaration_identity_issue_1710.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/test_declaration_report_issue_1710.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/test_declared_recognition_gate.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/test_declared_report_issue_1688.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/test_deferred_edits.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/test_dense_sheet_canary.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/test_deprecation_dates.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/test_depth_estimators.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/test_detect_once.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/test_detect_registry.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/test_diameter_deduplication.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/test_diameter_leaders.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/test_dimension_lane_canary_issue_1757.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/test_dimension_role_vocabulary.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/test_document_build.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/test_document_claim_authority.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/test_document_claims.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/test_document_coverage.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/test_document_report.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/test_document_report_authority.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/test_drawing_encapsulation.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/test_drawing_operations.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/test_dynamic_corridors.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/test_e2e_slice.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/test_e2e_standards.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/test_equivalent_dimension_presentations_issue_1759.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/test_export_dxf_curves.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/test_export_dxf_zoom.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/test_export_formats.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/test_export_reproducible.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/test_export_shape.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/test_external_recognition_boundary.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/test_feature_edit_corridors.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/test_feature_edit_verbs.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/test_feature_leader_candidate_regions.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/test_feature_provenance.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/test_feature_queries.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/test_fillets_adjacency.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/test_fit_calculations.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/test_fits.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/test_flat_completeness.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/test_flat_stock_opposition.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/test_format_selector.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/test_formatting.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/test_framed_step_family_evidence.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/test_gdt_placement.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/test_geometry_graph_spike.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/test_grid_lattice_convention.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/test_groove_completeness_evidence.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/test_groove_profile.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/test_gusset_rib_semantics.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/test_hole_annotations.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/test_hole_pattern_callouts.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/test_hole_table.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/test_import_boundaries.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/test_interior_label_placement.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/test_iso_layout.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/test_iso_nts_caption_placement.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/test_isometric_orientation.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/test_isometric_placement.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/test_issue_1000_envelope_reuse.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/test_issue_1006_measurement_comparison.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/test_issue_1058_wheel_profile.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/test_issue_1073_cross_body_patterns.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/test_issue_1082_polygonal_stock.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/test_issue_1086_declared_gears.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/test_issue_1116_ap242_hole_tolerance_lowering.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/test_issue_1126_requesting_less_never_scores_better.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/test_issue_1130_view_planning_evidence.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/test_issue_1132_turned_profile_span_is_reported.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/test_issue_1142_hole_leader_labels.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/test_issue_1143_hole_completeness.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/test_issue_1144_transactional_hole_table.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/test_issue_1146_scale_completeness.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/test_issue_1147_legibility_pair_aggregation.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/test_issue_1153_contradictory_dimensions.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/test_issue_1154_one_owner_per_measurement.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/test_issue_1155_grm04_sheet_use.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/test_issue_1166_cross_pass_feature_leaders.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/test_issue_1176_quality_fidelity.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/test_issue_1177_angular_dimensions.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/test_issue_1187_unroutable_leaders.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/test_issue_1188_per_view_assignment.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/test_issue_1190_section_decision.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/test_issue_1196_deterministic_view_names.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/test_issue_1202_observed_drawing_consumer.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/test_issue_1204_multiscale_view_issues.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/test_issue_1209_linear_pmi_witnesses.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/test_issue_1215_envelope_tolerance.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/test_issue_1215_no_approved_tolerance_is_dropped.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/test_issue_1216_callout_reservation_measures_ink.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/test_issue_1216_pairwise_across_scale_groups.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/test_issue_1217_claimed_representations.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/test_issue_1217_the_facility_is_shared.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/test_issue_1219_location_claims_its_own_axis.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/test_issue_1229_ledger_member_keying.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/test_issue_1240_iso_above_strip_visibility.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/test_issue_1245_passage_disposition.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/test_issue_1246_prismatic_pocket_disposition.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/test_issue_1247_angled_step_disposition.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/test_issue_1254_turned_chamfers.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/test_issue_1260_view_constraints.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/test_issue_1262_automatic_turned_views.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/test_issue_1276_turned_leader_targets.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/test_issue_1281_turned_fillets.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/test_issue_1296_cylindrical_diameter_pmi.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/test_issue_1299_page_escalation.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/test_issue_1312_engine_costs.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/test_issue_1325_nominal_agreement.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/test_issue_1332_overlap_remedy.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/test_issue_1332_zone_labels.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/test_issue_1334_prevent_ink.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/test_issue_1336_grm03_ap242_pmi_fixture.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/test_issue_1338_scale_before_page_escalation.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/test_issue_1349_precision_display.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/test_issue_1350_detected_takeover.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/test_issue_1351_structured_note_coverage.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/test_issue_1352_searchable_pdf_text.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/test_issue_1353_cnc_authoritative_workflow.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/test_issue_1357_framed_activation.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/test_issue_1357_framed_boundary.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/test_issue_1357_plural_turned_profiles.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/test_issue_1357_pmi_frame.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/test_issue_1360_thread_depth.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/test_issue_1369_hole_completeness_evidence.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/test_issue_1370_countersink_completeness_evidence.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/test_issue_1370_double_d_completeness_evidence.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/test_issue_1370_hole_pattern_completeness_evidence.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/test_issue_1371_flat_completeness_evidence.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/test_issue_1371_polygonal_stock_completeness_evidence.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/test_issue_1373_plate_completeness_evidence.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/test_issue_1374_chamfer_completeness_evidence.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/test_issue_1374_fillet_completeness_evidence.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/test_issue_1374_turned_step_completeness_evidence.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/test_issue_1378_diameter_leader_targets.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/test_issue_1390_sheet_registration.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/test_issue_1392_recognisers_048.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/test_issue_1395_degenerate_iso_region.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/test_issue_1396_layout_advisories.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/test_issue_1397_unverifiable_requirement_message.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/test_issue_1421_rectangular_blind_slot_completeness.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/test_issue_1421_rectangular_blind_slot_semantics.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/test_issue_1421_round_bottom_blind_slot_completeness.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/test_issue_1421_round_bottom_blind_slot_semantics.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/test_issue_1432_adoption.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/test_issue_1432_boundary_failures.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/test_issue_1432_oriented_slot_semantics.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/test_issue_1433_blend_semantics.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/test_issue_1460_step_inspection.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/test_issue_1466_dimension_options.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/test_issue_1466_semantic_sides.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/test_issue_1479_radius_leader_targets.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/test_issue_1485_quiddity_024_boundary.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/test_issue_1485_rounded_pockets.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/test_issue_1505_diameter_coverage.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/test_issue_1505_short_axial_chains.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/test_issue_1511_turned_boss_heights.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/test_issue_1514_projection_safeguard.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/test_issue_1515_first_angle.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/test_issue_1516_dimension_text.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/test_issue_1517_through_indicator.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/test_issue_1518_explicit_rear.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/test_issue_1524_tolerance_magnitude.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/test_issue_1530_section_provenance.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/test_issue_1531_semantic_hole_counts.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/test_issue_1532_authored_section_examples.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/test_issue_1533_review_diagnostics.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/test_issue_1534_build_progress.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/test_issue_1536_title_overflow.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/test_issue_1543_feature_schedules.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/test_issue_1543_schedule_requirements.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/test_issue_1544_frame_document_canary.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/test_issue_1555_turned_recognition_format_invariance.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/test_issue_1563_sheet_pmi_reconciliation.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/test_issue_1585_title_block_date.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/test_issue_1593_title_block_keepout.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/test_issue_1596_bolt_circle_corroboration.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/test_issue_1598_hex_pockets.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/test_issue_1599_duplicate_slot_widths.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/test_issue_1601_flat_precision.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/test_issue_1603_cli_output_paths.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/test_issue_1604_internal_section.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/test_issue_1612_frame_sergio_coverage.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/test_issue_1612_sheet_margins.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/test_issue_1613_circular_channel.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/test_issue_367_leader_ink.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/test_issue_443_grm03_axial_coverage.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/test_issue_563_placement_intent.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/test_issue_676_polygonal_boss.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/test_issue_676_polygonal_boss_declare.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/test_issue_740_leader_assignment.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/test_issue_798_floor_cardinality.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/test_issue_798_material_field.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/test_issue_798_silhouette_lint.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/test_issue_827_real_part_canary.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/test_issue_883_location_identity.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/test_issue_885_prismatic_coverage.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/test_issue_909_sloped_profile.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/test_issue_915_dense_case.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/test_issue_916_pocket_leader.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/test_issue_917_open_channel.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/test_issue_924_zero_length_shoulders.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/test_issue_955_height_contingency.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/test_issue_958_cross_solid_recognition.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/test_label_provenance.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/test_layout.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/test_layout_cleanliness.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/test_layout_constants.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/test_layout_evidence_issue_1711.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/test_layout_generalisation.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/test_layout_hypothesis.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/test_layout_override_lane_issue_1757.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/test_layout_override_side_issue_1757.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/test_layout_property.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/test_leader_footprint.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/test_leader_region_policy.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/test_lint_box_cache.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/test_lint_coverage.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/test_lint_ink_overlap.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/test_lint_reconciliation.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/test_lint_suggestions.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/test_lint_summary.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/test_linting.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/test_location_dimensions.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/test_location_vocabulary.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/test_machined_feature_callouts.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/test_make_drawing_entrypoints.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/test_nested_recognition_ownership.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/test_note_verb.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/test_object_aspects.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/test_occupancy_boxes.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/test_occurrence_recognition_ownership.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/test_overall_height_coverage.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/test_pad_completeness_evidence.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/test_paired_ramp_semantics.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/test_parameter_id.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/test_part_classification.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/test_part_model.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/test_pattern_ownership.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/test_pitch_dim_footprint.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/test_place_dimension.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/test_plate_ownership.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/test_pmi.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/test_pmi_common_labels.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/test_pmi_datum_lowering.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/test_pmi_gtol_lowering.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/test_pmi_part21.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/test_pocket_completeness_evidence.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/test_pocket_pattern.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/test_pocket_pattern_completeness_evidence.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/test_pocket_pattern_recognition.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/test_polygonal_boss_completeness_evidence.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/test_principal_profile_classifier.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/test_prismatic_boss_diameter.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/test_prismatic_dimensions.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/test_private_test_attr_reads.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/test_private_test_imports.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/test_profile_angles.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/test_projection_symbol_default.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/test_quality_components.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/test_quiddity_lifecycle_boundary.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/test_real_part_fixtures.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/test_recogniser_adoption.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/test_recogniser_contract.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/test_recogniser_policy.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/test_recogniser_step_inventory.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/test_recognition_boundary_failures.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/test_recognition_evidence_schema.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/test_recognition_policy_dispositions.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/test_recognition_result.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/test_refactor_golden.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/test_registry.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/test_render_seam.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/test_repack_geometry_seam.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/test_replay_assessment_issue_1715.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/test_report_projection.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/test_report_status_reasons_issue_1618.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/test_report_writer.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/test_requirement_applicability.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/test_requirement_carriers.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/test_requirement_catalog.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/test_requirement_catalog_families.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/test_scale_policy.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/test_scale_selection.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/test_score.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/test_script_detail_parity.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/test_section_hatching.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/test_section_recess_contract.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/test_shared_box_memo.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/test_shared_drawing_cache.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/test_sheet_furniture.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/test_sheet_gdt.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/test_sheet_generation_snapshot.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/test_sheet_identity_invariant.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/test_sheet_notes.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/test_sheet_of.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/test_sheet_section.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/test_sheet_tables.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/test_slanted_blind_step.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/test_slot_completeness.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/test_slot_pattern.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/test_slot_pattern_recognition.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/test_slot_recognition.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/test_soft_deprecation.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/test_solve_trace.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/test_step_analysis_evaluation.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/test_strip_zones.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/test_suite_shape.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/test_suppression_ledger.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/test_suppression_marks.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/test_through_step_ownership.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/test_tier_manifest.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/test_title_block_units_format.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/test_tolerances.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/test_turned_diameters.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/test_turned_lengths.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/test_turned_step_ownership.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/test_turned_steps.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/test_two_pass_layout.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/test_typ_dimensions.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/test_typed_remediation_projection_issue_1759.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/test_version_bump_ci.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/test_view_blocks.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/test_view_coordinates.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/test_witness_label_reconciliation.py +0 -0
- {draftwright-0.4.31 → draftwright-0.4.33}/tests/test_workflows.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.5
|
|
2
2
|
Name: draftwright
|
|
3
|
-
Version: 0.4.
|
|
3
|
+
Version: 0.4.33
|
|
4
4
|
Summary: Automated technical-drawing generation for build123d
|
|
5
5
|
Project-URL: Homepage, https://github.com/pzfreo/draftwright
|
|
6
6
|
Project-URL: Repository, https://github.com/pzfreo/draftwright
|
|
@@ -684,7 +684,7 @@ Classifier: Programming Language :: Python :: 3.14
|
|
|
684
684
|
Classifier: Topic :: Scientific/Engineering
|
|
685
685
|
Requires-Python: <3.15,>=3.10
|
|
686
686
|
Requires-Dist: antlr4-python3-runtime<4.10
|
|
687
|
-
Requires-Dist: build123d-drafting-helpers>=0.15.
|
|
687
|
+
Requires-Dist: build123d-drafting-helpers>=0.15.5
|
|
688
688
|
Requires-Dist: build123d<0.11,>=0.9.0; python_full_version < '3.13'
|
|
689
689
|
Requires-Dist: build123d<0.12,>=0.11; python_full_version >= '3.13'
|
|
690
690
|
Requires-Dist: cadquery-ocp-novtk!=7.9.3.1.1; python_full_version >= '3.13'
|
|
@@ -692,7 +692,7 @@ Requires-Dist: numpy>=1.24
|
|
|
692
692
|
Requires-Dist: ocp-gordon<0.3
|
|
693
693
|
Requires-Dist: pillow>=10
|
|
694
694
|
Requires-Dist: pypdfium2>=4
|
|
695
|
-
Requires-Dist: quiddity==0.3.
|
|
695
|
+
Requires-Dist: quiddity==0.3.3
|
|
696
696
|
Requires-Dist: reportlab>=4.0
|
|
697
697
|
Requires-Dist: rich>=10.11
|
|
698
698
|
Requires-Dist: steputils==0.1
|
|
@@ -70,11 +70,19 @@ issue. The contract test derives package record outputs, converter registries, l
|
|
|
70
70
|
and emitter branches independently, so copying a new name into the declaration alone cannot make CI
|
|
71
71
|
pass.
|
|
72
72
|
|
|
73
|
-
### Quiddity 0.3.
|
|
73
|
+
### Quiddity 0.3.3 runtime contract
|
|
74
74
|
|
|
75
|
-
The runtime pins the published `quiddity==0.3.
|
|
75
|
+
The runtime pins the published `quiddity==0.3.3` package. This release adds material-side
|
|
76
|
+
reconstruction facts to fillets, planar chamfers and angled steps, paired ramps, and open-section
|
|
77
|
+
profiles. Draftwright consumes these records to describe and annotate the recognised part; it does
|
|
78
|
+
not reconstruct a cut solid from them, so the new `side`, `corner`, `opening_direction`,
|
|
79
|
+
`half_width`, and `material_side` fields do not enter the drafting IR. The exact consumer schema
|
|
80
|
+
declarations advance with the provider, and the section-recess adapter accepts document schema 4
|
|
81
|
+
while continuing to reject unknown later schemas.
|
|
82
|
+
|
|
83
|
+
Version 0.3.2 followed the 0.2.4 adoption in
|
|
76
84
|
[#1486](https://github.com/pzfreo/draftwright/pull/1486) and the migration in
|
|
77
|
-
[#1471](https://github.com/pzfreo/draftwright/issues/1471).
|
|
85
|
+
[#1471](https://github.com/pzfreo/draftwright/issues/1471). It advanced the public
|
|
78
86
|
`Slot` record to schema 2: `end_radius` distinguishes two semicircular stadium ends and
|
|
79
87
|
`corner_radius` distinguishes rounded rectangular corners. Draftwright consumes
|
|
80
88
|
`end_radius` for through-slot radius requirements; rounded-corner rectangular slots remain a
|
|
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "draftwright"
|
|
7
|
-
version = "0.4.
|
|
7
|
+
version = "0.4.33"
|
|
8
8
|
description = "Automated technical-drawing generation for build123d"
|
|
9
9
|
readme = "README.md"
|
|
10
10
|
license = { file = "LICENSE" }
|
|
@@ -22,8 +22,8 @@ dependencies = [
|
|
|
22
22
|
# This novtk release lacks OCP.GccEnt on macOS. The exclusion must reach
|
|
23
23
|
# published wheels, not only uv's development resolver constraints.
|
|
24
24
|
"cadquery-ocp-novtk!=7.9.3.1.1 ; python_full_version >= '3.13'",
|
|
25
|
-
"build123d-drafting-helpers>=0.15.
|
|
26
|
-
"quiddity==0.3.
|
|
25
|
+
"build123d-drafting-helpers>=0.15.5",
|
|
26
|
+
"quiddity==0.3.3",
|
|
27
27
|
"numpy>=1.24",
|
|
28
28
|
# PNG raster export (SVG→PDF→PNG). Both permissively licensed (Pillow HPND; pypdfium2
|
|
29
29
|
# Apache-2.0 wrapping Google PDFium BSD-3) and ship pre-built wheels with NO native system
|
|
@@ -57,6 +57,7 @@ _LAZY = {
|
|
|
57
57
|
# to reach, and the pytest filterwarnings entry naming it paid that on every invocation.
|
|
58
58
|
"SoftDeprecationWarning": "draftwright._warnings",
|
|
59
59
|
"ScaleCompletenessWarning": "draftwright._warnings",
|
|
60
|
+
"ProjectionGeometryWarning": "draftwright._warnings",
|
|
60
61
|
}
|
|
61
62
|
|
|
62
63
|
|
|
@@ -93,7 +94,11 @@ _sys.modules[__name__].__class__ = _DraftwrightModule
|
|
|
93
94
|
|
|
94
95
|
|
|
95
96
|
if TYPE_CHECKING: # static analysers / IDEs — no runtime import, no kernel cost
|
|
96
|
-
from draftwright._warnings import
|
|
97
|
+
from draftwright._warnings import (
|
|
98
|
+
ProjectionGeometryWarning,
|
|
99
|
+
ScaleCompletenessWarning,
|
|
100
|
+
SoftDeprecationWarning,
|
|
101
|
+
)
|
|
97
102
|
from draftwright.builder import ScaleIncompatibilityError, build_drawing, make_drawing
|
|
98
103
|
from draftwright.compose import choose_scale
|
|
99
104
|
from draftwright.document import Document, DocumentBuildError, DocumentResult
|
|
@@ -147,6 +152,7 @@ __all__ = [
|
|
|
147
152
|
"Sheet",
|
|
148
153
|
"ScaleIncompatibilityError",
|
|
149
154
|
"ScaleCompletenessWarning",
|
|
155
|
+
"ProjectionGeometryWarning",
|
|
150
156
|
"ViewPlanIncomplete",
|
|
151
157
|
"ViewConstraints",
|
|
152
158
|
"ViewSpec",
|
|
@@ -1689,7 +1689,13 @@ def _add_title_block(dwg, a: Analysis):
|
|
|
1689
1689
|
bx + cell["max_x"],
|
|
1690
1690
|
margins.bottom + cell["max_y"],
|
|
1691
1691
|
)
|
|
1692
|
-
place_annotation(
|
|
1692
|
+
place_annotation(
|
|
1693
|
+
dwg.registry,
|
|
1694
|
+
dwg.items,
|
|
1695
|
+
tb,
|
|
1696
|
+
"title_block",
|
|
1697
|
+
feature=dwg._build.general_tolerance_source,
|
|
1698
|
+
)
|
|
1693
1699
|
|
|
1694
1700
|
|
|
1695
1701
|
def _make_sheet_frame(a: Analysis) -> Compound:
|
|
@@ -1768,6 +1774,60 @@ def _add_scale_note(dwg, a: Analysis):
|
|
|
1768
1774
|
place_annotation(dwg.registry, dwg.items, note, "scale_note")
|
|
1769
1775
|
|
|
1770
1776
|
|
|
1777
|
+
def _add_default_surface_finish(dwg, a: Analysis):
|
|
1778
|
+
"""Draw an imported document-wide ISO 1302 requirement without a leader.
|
|
1779
|
+
|
|
1780
|
+
The reserved band above the title block is sheet furniture space. A document default
|
|
1781
|
+
belongs there: hanging it from model geometry would falsely narrow its scope to one face.
|
|
1782
|
+
"""
|
|
1783
|
+
requirement = dwg._build.default_surface_finish_source
|
|
1784
|
+
if requirement is None:
|
|
1785
|
+
return
|
|
1786
|
+
|
|
1787
|
+
from build123d_drafting import SurfaceFinish
|
|
1788
|
+
|
|
1789
|
+
symbol = SurfaceFinish(
|
|
1790
|
+
f"Ra {requirement.ra}",
|
|
1791
|
+
(0, 0),
|
|
1792
|
+
draft=draft_preset(
|
|
1793
|
+
font_size=dwg.draft.font_size,
|
|
1794
|
+
decimal_precision=dwg.draft.decimal_precision,
|
|
1795
|
+
font_path=PLEX_SANS_CONDENSED,
|
|
1796
|
+
),
|
|
1797
|
+
)
|
|
1798
|
+
box = symbol.bounding_box()
|
|
1799
|
+
width, height = box.max.X - box.min.X, box.max.Y - box.min.Y
|
|
1800
|
+
label = symbol.label_bbox
|
|
1801
|
+
label_x = (label[0] + label[2] - box.min.X - box.max.X) / 2
|
|
1802
|
+
label_y = (label[1] + label[3] - box.min.Y - box.max.Y) / 2
|
|
1803
|
+
# Occupy the left end of the title-block furniture band. Scale and projection method use
|
|
1804
|
+
# its right end, leaving independent document controls readable on every standard sheet.
|
|
1805
|
+
cx = a.PAGE_W - a.TB_W - _title_margins(a).right + width / 2
|
|
1806
|
+
cy = _title_block_top(a) + _TB_FURNITURE_GAP + height / 2
|
|
1807
|
+
symbol = symbol.locate(Location((cx - box.min.X - width / 2, cy - box.min.Y - height / 2, 0)))
|
|
1808
|
+
symbol.pdf_text_relative_specs = (
|
|
1809
|
+
(
|
|
1810
|
+
symbol.label,
|
|
1811
|
+
label_x,
|
|
1812
|
+
label_y,
|
|
1813
|
+
dwg.draft.font_size,
|
|
1814
|
+
PLEX_SANS_CONDENSED,
|
|
1815
|
+
"IBM Plex Sans Condensed",
|
|
1816
|
+
"REGULAR",
|
|
1817
|
+
"center",
|
|
1818
|
+
"middle",
|
|
1819
|
+
),
|
|
1820
|
+
)
|
|
1821
|
+
symbol.is_default_surface_finish = True
|
|
1822
|
+
place_annotation(
|
|
1823
|
+
dwg.registry,
|
|
1824
|
+
dwg.items,
|
|
1825
|
+
symbol,
|
|
1826
|
+
"default_surface_finish",
|
|
1827
|
+
feature=requirement,
|
|
1828
|
+
)
|
|
1829
|
+
|
|
1830
|
+
|
|
1771
1831
|
def _add_projection_symbol(dwg, a: Analysis):
|
|
1772
1832
|
"""Place the ISO 5456-2 projection-method glyph (#769) in the reserved title-block band,
|
|
1773
1833
|
just above the drawn title block (deterministic empty space — the block reserves _TB_H but
|
|
@@ -45,3 +45,7 @@ class ScaleCompletenessWarning(UserWarning):
|
|
|
45
45
|
Callers can filter this policy decision independently of unrelated user warnings while
|
|
46
46
|
still inspecting the complete machine-readable record on ``Drawing.scale_decision``.
|
|
47
47
|
"""
|
|
48
|
+
|
|
49
|
+
|
|
50
|
+
class ProjectionGeometryWarning(UserWarning):
|
|
51
|
+
"""A projector emitted geometry outside the source shape's possible view envelope."""
|
|
@@ -3583,18 +3583,39 @@ def place_strip_candidates(
|
|
|
3583
3583
|
todo = todo + rejected_total
|
|
3584
3584
|
solved.extend(placed)
|
|
3585
3585
|
|
|
3586
|
-
if
|
|
3586
|
+
if solved:
|
|
3587
3587
|
assert len({name for name, _dim_obj in solved}) == len(solved), (
|
|
3588
3588
|
"strip survivor names must be unique before label selection"
|
|
3589
3589
|
)
|
|
3590
3590
|
natural_solved = dict(solved)
|
|
3591
|
-
|
|
3592
|
-
|
|
3591
|
+
# Local dimensions already participate through strip occupancy, and dimensions
|
|
3592
|
+
# owned by another view retain their independent corridor/repair contract. The
|
|
3593
|
+
# missing class is non-dimension ink whose semantic owner is another view: an
|
|
3594
|
+
# outboard leader can physically enter this corridor even though the projected
|
|
3595
|
+
# view blocks are disjoint (#1781).
|
|
3596
|
+
committed = []
|
|
3597
|
+
for name, annotation in dwg.iter_annotations():
|
|
3598
|
+
owner = dwg.view_of(name)
|
|
3599
|
+
if (
|
|
3600
|
+
owner is not None
|
|
3601
|
+
and owner != view
|
|
3602
|
+
and not isinstance(annotation, (Dimension, SafeDimension, AngularDimension))
|
|
3603
|
+
and type(annotation).__name__ not in CROSSABLE_TYPES
|
|
3604
|
+
):
|
|
3605
|
+
committed.append((name, annotation))
|
|
3606
|
+
committed_names = {name for name, _annotation in committed}
|
|
3607
|
+
adjusted_batch = prevent_dimension_label_ink(
|
|
3608
|
+
[*committed, *solved],
|
|
3593
3609
|
page=(
|
|
3594
3610
|
_drawing_bounds(dwg) if hasattr(dwg, "page_w") and hasattr(dwg, "page_h") else None
|
|
3595
3611
|
),
|
|
3596
|
-
immutable={
|
|
3612
|
+
immutable={
|
|
3613
|
+
*committed_names,
|
|
3614
|
+
*(name for name, _dim_obj in solved if (anchored or {}).get(name, False)),
|
|
3615
|
+
},
|
|
3616
|
+
perpendicular_step=tier + strip.spacing,
|
|
3597
3617
|
)
|
|
3618
|
+
adjusted = adjusted_batch[len(committed) :]
|
|
3598
3619
|
# A label shift normally stays inside the dimension's measured span and
|
|
3599
3620
|
# therefore inside its already-validated footprint. Keep the validation
|
|
3600
3621
|
# contract explicit nevertheless: if an unusual helper/style grows the real
|
|
@@ -990,8 +990,10 @@ def _obround_radius_candidates(
|
|
|
990
990
|
|
|
991
991
|
|
|
992
992
|
# Corridor-ladder ordering (ADR 2 (was 0009) end state, #346): feature-SIZE dims sit nearer the
|
|
993
|
-
# view (inner run), datum-referenced LOCATION dims
|
|
994
|
-
#
|
|
993
|
+
# view (inner run), while datum-referenced LOCATION dims form one ascending outer chain.
|
|
994
|
+
# Step-height rungs measure from the common height datum, so they belong to that value-ordered
|
|
995
|
+
# run rather than to producer registration order (#1779). Segregating ordinary feature sizes
|
|
996
|
+
# keeps a slot length or local boss height from landing mid-ladder.
|
|
995
997
|
_SIZE_SUBCHAIN = 0
|
|
996
998
|
_LOC_SUBCHAIN = 1
|
|
997
999
|
_OVERALL_SUBCHAIN = 2
|
|
@@ -2704,6 +2706,7 @@ def place_machined_leader_jobs(
|
|
|
2704
2706
|
expand_lanes=True,
|
|
2705
2707
|
region_policy=LeaderRegionPolicy.EXTERIOR,
|
|
2706
2708
|
source_ids_by_name=None,
|
|
2709
|
+
source_drop_severity="warning",
|
|
2707
2710
|
priority=0.0,
|
|
2708
2711
|
) -> int:
|
|
2709
2712
|
"""Lower every machined callout to the one shared ``FeatureLeaderJob`` path.
|
|
@@ -2819,8 +2822,25 @@ def place_machined_leader_jobs(
|
|
|
2819
2822
|
feature,
|
|
2820
2823
|
)
|
|
2821
2824
|
|
|
2822
|
-
|
|
2823
|
-
|
|
2825
|
+
source_features = tuple(
|
|
2826
|
+
{
|
|
2827
|
+
id(getattr(identity, "feature", None)): getattr(identity, "feature", None)
|
|
2828
|
+
for identity in measurement
|
|
2829
|
+
if getattr(identity, "feature", None) is not None
|
|
2830
|
+
}.values()
|
|
2831
|
+
)
|
|
2832
|
+
|
|
2833
|
+
def _build(
|
|
2834
|
+
tip,
|
|
2835
|
+
elbow,
|
|
2836
|
+
_feature,
|
|
2837
|
+
*,
|
|
2838
|
+
_label=label,
|
|
2839
|
+
_source_features=source_features,
|
|
2840
|
+
):
|
|
2841
|
+
leader = Leader(tip=(tip[0], tip[1], 0), elbow=elbow, label=_label, draft=dwg.draft)
|
|
2842
|
+
leader.source_features = _source_features
|
|
2843
|
+
return leader
|
|
2824
2844
|
|
|
2825
2845
|
def _fallback_accept(
|
|
2826
2846
|
candidate,
|
|
@@ -2883,8 +2903,13 @@ def place_machined_leader_jobs(
|
|
|
2883
2903
|
):
|
|
2884
2904
|
validation = reason == "geometry_validation"
|
|
2885
2905
|
detail = "rendered geometry validation failed" if validation else "no clear room"
|
|
2906
|
+
severity = (
|
|
2907
|
+
("error" if _source_ids else "warning")
|
|
2908
|
+
if source_drop_severity == "source"
|
|
2909
|
+
else source_drop_severity
|
|
2910
|
+
)
|
|
2886
2911
|
ctx.record_issue(
|
|
2887
|
-
|
|
2912
|
+
severity,
|
|
2888
2913
|
drop_code,
|
|
2889
2914
|
f"{noun} callout {_label} not placed ({detail})",
|
|
2890
2915
|
measurement=_measurement,
|
|
@@ -2934,7 +2959,7 @@ def place_machined_leader_jobs(
|
|
|
2934
2959
|
fallback_accept=_fallback_accept,
|
|
2935
2960
|
interior_label_clear=interior_label_clear,
|
|
2936
2961
|
allow_policy_b_fixed=True,
|
|
2937
|
-
on_drop=_on_drop if source_ids else None,
|
|
2962
|
+
on_drop=(_on_drop if source_ids or source_drop_severity == "source" else None),
|
|
2938
2963
|
)
|
|
2939
2964
|
)
|
|
2940
2965
|
|
|
@@ -2996,6 +3021,7 @@ def render_chamfers(dwg, plan, a, *, ctx, only=None) -> int:
|
|
|
2996
3021
|
collapse.setdefault(spec, []).append((g, pd))
|
|
2997
3022
|
|
|
2998
3023
|
jobs = []
|
|
3024
|
+
source_ids_by_name = {}
|
|
2999
3025
|
for gi, (_spec, members) in enumerate(sorted(collapse.items())):
|
|
3000
3026
|
if only is not None:
|
|
3001
3027
|
# Filter after enumerating the full collapse so a surviving group keeps the same
|
|
@@ -3023,9 +3049,17 @@ def render_chamfers(dwg, plan, a, *, ctx, only=None) -> int:
|
|
|
3023
3049
|
label = _chamfer_label(representative_pd.value_text, representative_pd.value, ch)
|
|
3024
3050
|
if len(members) > 1:
|
|
3025
3051
|
label = f"{len(members)}× {label}"
|
|
3052
|
+
name = f"m_chamfer_{axis}{gi}"
|
|
3053
|
+
source_ids_by_name[name] = tuple(
|
|
3054
|
+
dict.fromkeys(
|
|
3055
|
+
source_id
|
|
3056
|
+
for member, _pd in members
|
|
3057
|
+
for source_id in getattr(member.facts, "source_ids", ())
|
|
3058
|
+
)
|
|
3059
|
+
)
|
|
3026
3060
|
jobs.append(
|
|
3027
3061
|
(
|
|
3028
|
-
|
|
3062
|
+
name,
|
|
3029
3063
|
view,
|
|
3030
3064
|
vb,
|
|
3031
3065
|
label + _tol_suffix(representative_pd.tolerance, draft),
|
|
@@ -3050,6 +3084,8 @@ def render_chamfers(dwg, plan, a, *, ctx, only=None) -> int:
|
|
|
3050
3084
|
ctx=ctx,
|
|
3051
3085
|
joint=True,
|
|
3052
3086
|
region_policy=LeaderRegionPolicy.AUTO,
|
|
3087
|
+
source_ids_by_name=source_ids_by_name,
|
|
3088
|
+
source_drop_severity="source",
|
|
3053
3089
|
)
|
|
3054
3090
|
|
|
3055
3091
|
|
|
@@ -3695,6 +3731,37 @@ def _flat_label(across_text, sfx="") -> str:
|
|
|
3695
3731
|
return f"{across_text}{sfx} A/F"
|
|
3696
3732
|
|
|
3697
3733
|
|
|
3734
|
+
def _flat_definition_count(members) -> int:
|
|
3735
|
+
"""Count repeated flat definitions without counting one centred opposed set as many.
|
|
3736
|
+
|
|
3737
|
+
``axis_line`` and ``stock_span`` identify the provider's stock region, but interrupted
|
|
3738
|
+
housing geometry can give several independent flat supports that share both. A true
|
|
3739
|
+
double-D or hex remains one definition because every support has its reflection through
|
|
3740
|
+
that stock axis; a non-centred family retains one instance per source support.
|
|
3741
|
+
"""
|
|
3742
|
+
|
|
3743
|
+
if len(members) <= 1:
|
|
3744
|
+
return 1
|
|
3745
|
+
facts = members[0][0].facts
|
|
3746
|
+
transverse = tuple(index for index, axis in enumerate("xyz") if axis != facts.axis)
|
|
3747
|
+
centre = tuple(float(value) for value in facts.axis_line)
|
|
3748
|
+
points = tuple(
|
|
3749
|
+
tuple(float(member.facts.frame.origin[index]) for index in transverse)
|
|
3750
|
+
for member, _dimension in members
|
|
3751
|
+
)
|
|
3752
|
+
centred = all(
|
|
3753
|
+
any(
|
|
3754
|
+
all(
|
|
3755
|
+
abs(candidate[index] - (2.0 * centre[index] - point[index])) <= 0.01
|
|
3756
|
+
for index in range(2)
|
|
3757
|
+
)
|
|
3758
|
+
for candidate in points
|
|
3759
|
+
)
|
|
3760
|
+
for point in points
|
|
3761
|
+
)
|
|
3762
|
+
return 1 if centred else len(members)
|
|
3763
|
+
|
|
3764
|
+
|
|
3698
3765
|
def render_flats(dwg, plan, a, *, ctx, only=None) -> int:
|
|
3699
3766
|
"""Render physical stock definitions, counting identical ones without counting faces.
|
|
3700
3767
|
|
|
@@ -3757,8 +3824,9 @@ def render_flats(dwg, plan, a, *, ctx, only=None) -> int:
|
|
|
3757
3824
|
vb = dwg.view_bounds(view)
|
|
3758
3825
|
if vb is None:
|
|
3759
3826
|
continue
|
|
3760
|
-
|
|
3761
|
-
|
|
3827
|
+
definition_count = sum(_flat_definition_count(members) for _, members, _ in stocks)
|
|
3828
|
+
if definition_count > 1:
|
|
3829
|
+
label = f"{definition_count}× {label}"
|
|
3762
3830
|
candidates = _flat_candidates(
|
|
3763
3831
|
dwg,
|
|
3764
3832
|
view,
|
|
@@ -6807,8 +6875,10 @@ def _render_height_ladder_in_view(dwg, plan, frame, *, ctx, detail_view, view) -
|
|
|
6807
6875
|
# compiler's own number instead of re-deriving a convention from the rendered string,
|
|
6808
6876
|
# which is the pattern ADR 4 (was 0016 Amendment 1) exists to stop.
|
|
6809
6877
|
chain: list = []
|
|
6878
|
+
order_values: dict[str, float] = {}
|
|
6810
6879
|
if rung_set is not None and rung_set.representative:
|
|
6811
6880
|
(rep,) = rungs
|
|
6881
|
+
order_values["dim_step_typ"] = rep.value
|
|
6812
6882
|
chain.append(
|
|
6813
6883
|
(
|
|
6814
6884
|
"dim_step_typ",
|
|
@@ -6899,6 +6969,7 @@ def _render_height_ladder_in_view(dwg, plan, frame, *, ctx, detail_view, view) -
|
|
|
6899
6969
|
if has_shoulders and rung.value * frame.scale < _MIN_STEP_DIM_MM:
|
|
6900
6970
|
short_rungs.append(rung)
|
|
6901
6971
|
continue
|
|
6972
|
+
order_values[f"dim_step_{col}"] = rung.value
|
|
6902
6973
|
chain.append(
|
|
6903
6974
|
(
|
|
6904
6975
|
f"dim_step_{col}",
|
|
@@ -7069,11 +7140,13 @@ def _render_height_ladder_in_view(dwg, plan, frame, *, ctx, detail_view, view) -
|
|
|
7069
7140
|
build=_build,
|
|
7070
7141
|
# Steps stack inner→outer in chain order; the overall height rides the
|
|
7071
7142
|
# OVERALL subchain so it lands outermost by construction (as the envelope
|
|
7072
|
-
# dims do)
|
|
7143
|
+
# dims do). Ordinary rungs join the same value-ordered baseline run as
|
|
7144
|
+
# off-axis-hole heights (#1779), outside the inner boss-size run, instead
|
|
7145
|
+
# of retaining producer registration order.
|
|
7073
7146
|
order=(
|
|
7074
7147
|
(_OVERALL_SUBCHAIN, 0, name)
|
|
7075
7148
|
if name == "dim_height"
|
|
7076
|
-
else (
|
|
7149
|
+
else (_LOC_SUBCHAIN, order_values[name], name)
|
|
7077
7150
|
),
|
|
7078
7151
|
on_place=lambda nm: None,
|
|
7079
7152
|
on_drop=_drop,
|
|
@@ -8872,6 +8945,26 @@ def _pmi_source_ids(item) -> tuple[str, ...]:
|
|
|
8872
8945
|
return tuple(dict.fromkeys(((singular,) if singular else ()) + plural))
|
|
8873
8946
|
|
|
8874
8947
|
|
|
8948
|
+
def render_document_notes(dwg, model) -> int:
|
|
8949
|
+
"""Place source-proven drawing-wide requirements in one solver-owned notes block."""
|
|
8950
|
+
notes = [feature for feature in model.features if feature.kind == "document_note"]
|
|
8951
|
+
if not notes:
|
|
8952
|
+
return 0
|
|
8953
|
+
rows = [("GENERAL NOTES",)] + [
|
|
8954
|
+
(f"{index} {_font_safe_text(note.text)}",) for index, note in enumerate(notes, 1)
|
|
8955
|
+
]
|
|
8956
|
+
placed = dwg.add_table(
|
|
8957
|
+
rows,
|
|
8958
|
+
prefer="tr",
|
|
8959
|
+
name="general_notes",
|
|
8960
|
+
_source_ids=tuple(source_id for note in notes for source_id in _pmi_source_ids(note)),
|
|
8961
|
+
_features=tuple(notes),
|
|
8962
|
+
_drop_code="pmi_dropped",
|
|
8963
|
+
_drop_severity="error",
|
|
8964
|
+
)
|
|
8965
|
+
return len(notes) if placed is not None else 0
|
|
8966
|
+
|
|
8967
|
+
|
|
8875
8968
|
def _gdt_glyph(item, draft):
|
|
8876
8969
|
"""Build the ISO 1101/5459/1302 glyph sketch for one GD&T IR item at the origin
|
|
8877
8970
|
(the :class:`Leader` repositions it). A fresh sketch per call — the leader translate
|
|
@@ -24,6 +24,7 @@ from draftwright._core import (
|
|
|
24
24
|
Analysis,
|
|
25
25
|
DetailRequest,
|
|
26
26
|
HoleRef,
|
|
27
|
+
_add_default_surface_finish,
|
|
27
28
|
_add_projection_symbol,
|
|
28
29
|
_add_scale_note,
|
|
29
30
|
_add_sheet_frame,
|
|
@@ -124,16 +125,50 @@ from draftwright.model.planner import annotation_groups, internal_section_rows
|
|
|
124
125
|
from draftwright.progress import stage
|
|
125
126
|
from draftwright.registry import MeasurementCell
|
|
126
127
|
from draftwright.repair import reconcile_witness_labels
|
|
127
|
-
from draftwright.view_plan import
|
|
128
|
+
from draftwright.view_plan import (
|
|
129
|
+
DERIVED_VIEW_IDENTIFIERS,
|
|
130
|
+
DerivedViewIdentifierPool,
|
|
131
|
+
ViewConstraints,
|
|
132
|
+
derived_view_identifier,
|
|
133
|
+
)
|
|
134
|
+
|
|
135
|
+
|
|
136
|
+
def _derived_view_identifier_pool(a) -> DerivedViewIdentifierPool:
|
|
137
|
+
"""Reserve every authored section/detail identity before any derived view renders."""
|
|
138
|
+
|
|
139
|
+
constraints = a.view_constraints
|
|
140
|
+
if not isinstance(constraints, ViewConstraints):
|
|
141
|
+
return DerivedViewIdentifierPool(candidates=DERIVED_VIEW_IDENTIFIERS)
|
|
142
|
+
requested = (
|
|
143
|
+
constraints.derived
|
|
144
|
+
if constraints.derived_source == "authored"
|
|
145
|
+
else constraints.added_derived
|
|
146
|
+
)
|
|
147
|
+
identifiers = []
|
|
148
|
+
for item in requested:
|
|
149
|
+
identifier = derived_view_identifier(item.spec.kind, item.spec.name)
|
|
150
|
+
if identifier is None:
|
|
151
|
+
raise ValueError(
|
|
152
|
+
f"derived view {item.spec.name!r} from {item.source} has no canonical identifier"
|
|
153
|
+
)
|
|
154
|
+
identifiers.append(identifier)
|
|
155
|
+
return DerivedViewIdentifierPool(identifiers, candidates=DERIVED_VIEW_IDENTIFIERS)
|
|
128
156
|
|
|
129
157
|
|
|
130
|
-
def _planned_sections(a, model, feature_keys) -> tuple[SectionPlan, ...]:
|
|
158
|
+
def _planned_sections(a, model, feature_keys, *, identifiers) -> tuple[SectionPlan, ...]:
|
|
131
159
|
"""Combine the automatic section candidate with ADR 2 (was 0018) authored/add requests."""
|
|
132
160
|
|
|
133
161
|
constraints = a.view_constraints
|
|
134
162
|
if not isinstance(constraints, ViewConstraints):
|
|
135
163
|
automatic = plan_sections(model, feature_keys)
|
|
136
|
-
|
|
164
|
+
if automatic is None:
|
|
165
|
+
return ()
|
|
166
|
+
label = identifiers.allocate()
|
|
167
|
+
if label is None:
|
|
168
|
+
raise ValueError(
|
|
169
|
+
"automatic section cannot be named: derived-view identifiers exhausted"
|
|
170
|
+
)
|
|
171
|
+
return (replace(automatic, label=label),)
|
|
137
172
|
|
|
138
173
|
requested = (
|
|
139
174
|
constraints.derived
|
|
@@ -157,8 +192,9 @@ def _planned_sections(a, model, feature_keys) -> tuple[SectionPlan, ...]:
|
|
|
157
192
|
f"section {item.spec.name!r} from {item.source} cuts at y={cut_y:g}, outside "
|
|
158
193
|
f"the part interior ({a.bb.min.Y:g}, {a.bb.max.Y:g})"
|
|
159
194
|
)
|
|
160
|
-
|
|
161
|
-
|
|
195
|
+
label = derived_view_identifier(item.spec.kind, item.spec.name)
|
|
196
|
+
if label is None:
|
|
197
|
+
raise ValueError(f"section {item.spec.name!r} has no canonical identifier")
|
|
162
198
|
plans.append(
|
|
163
199
|
SectionPlan(
|
|
164
200
|
cut_y,
|
|
@@ -172,12 +208,13 @@ def _planned_sections(a, model, feature_keys) -> tuple[SectionPlan, ...]:
|
|
|
172
208
|
|
|
173
209
|
if constraints.derived_source != "authored":
|
|
174
210
|
automatic = plan_sections(model, feature_keys)
|
|
211
|
+
if automatic is not None and any(plan.cut_y == automatic.cut_y for plan in plans):
|
|
212
|
+
automatic = None
|
|
175
213
|
if automatic is not None:
|
|
176
|
-
|
|
177
|
-
auto_label = next((letter for letter in "ABCDEFGH" if letter not in used), None)
|
|
214
|
+
auto_label = identifiers.allocate()
|
|
178
215
|
if auto_label is None:
|
|
179
216
|
raise ValueError(
|
|
180
|
-
"automatic section cannot be named:
|
|
217
|
+
"automatic section cannot be named: derived-view identifiers exhausted"
|
|
181
218
|
)
|
|
182
219
|
plans.insert(0, replace(automatic, label=auto_label))
|
|
183
220
|
return tuple(plans)
|
|
@@ -201,7 +238,9 @@ def _queue_authored_details(dwg, a, ctx, plan) -> None:
|
|
|
201
238
|
if not (isinstance(target, tuple) and len(target) == 2 and target[0] == "feature"):
|
|
202
239
|
raise ValueError(f"detail {item.spec.name!r} has no semantic feature target")
|
|
203
240
|
feature = target[1]
|
|
204
|
-
label = item.spec.
|
|
241
|
+
label = derived_view_identifier(item.spec.kind, item.spec.name)
|
|
242
|
+
if label is None:
|
|
243
|
+
raise ValueError(f"detail {item.spec.name!r} has no canonical identifier")
|
|
205
244
|
factor = item.spec.scale_factor or 2.0
|
|
206
245
|
if queue_step_detail(
|
|
207
246
|
dwg,
|
|
@@ -625,7 +664,8 @@ def _auto_annotate(dwg, a: Analysis, *, detail_view: bool = False):
|
|
|
625
664
|
# Decide the section trigger + cut-plane row now (pure function of _model/
|
|
626
665
|
# feature_keys, no placement dependency); the "reserve_section" stage reserves
|
|
627
666
|
# its row and the "section" stage renders it.
|
|
628
|
-
|
|
667
|
+
_derived_identifiers = _derived_view_identifier_pool(a)
|
|
668
|
+
_sections = _planned_sections(a, _model, feature_keys, identifiers=_derived_identifiers)
|
|
629
669
|
ctx.dense_internal_section = any(section.internal_detail for section in _sections)
|
|
630
670
|
|
|
631
671
|
# ── the stage thunks, run in _PASS_SEQUENCE order (#699 slice b) ─────────
|
|
@@ -901,7 +941,8 @@ def _auto_annotate(dwg, a: Analysis, *, detail_view: bool = False):
|
|
|
901
941
|
# still render after it and avoid the section view.
|
|
902
942
|
if _sections:
|
|
903
943
|
for section in _sections:
|
|
904
|
-
_add_section_view(dwg, a, section, ctx=ctx)
|
|
944
|
+
if not _add_section_view(dwg, a, section, ctx=ctx):
|
|
945
|
+
_derived_identifiers.release(section.label)
|
|
905
946
|
else:
|
|
906
947
|
# Recorded, not left at the initial `not_evaluated`: the planner DID run and
|
|
907
948
|
# found no counterbore/spotface/blind Z-hole, which is a different fact from
|
|
@@ -916,7 +957,7 @@ def _auto_annotate(dwg, a: Analysis, *, detail_view: bool = False):
|
|
|
916
957
|
# crowded turned heads alike — through the one generic detailer, now that all
|
|
917
958
|
# views and main-view annotations are placed (so the detail avoids them).
|
|
918
959
|
_queue_authored_details(dwg, a, ctx, _compiled)
|
|
919
|
-
_resolve_details(dwg, a, ctx=ctx)
|
|
960
|
+
_resolve_details(dwg, a, ctx=ctx, identifiers=_derived_identifiers)
|
|
920
961
|
|
|
921
962
|
def _s_title_block():
|
|
922
963
|
_add_title_block(dwg, a)
|
|
@@ -936,6 +977,7 @@ def _auto_annotate(dwg, a: Analysis, *, detail_view: bool = False):
|
|
|
936
977
|
# ISO 5456-2 projection-method glyph (#769) in the reserved title-block band.
|
|
937
978
|
_add_projection_symbol(dwg, a)
|
|
938
979
|
_add_scale_note(dwg, a)
|
|
980
|
+
_add_default_surface_finish(dwg, a)
|
|
939
981
|
|
|
940
982
|
def _s_tabulate():
|
|
941
983
|
# Escalate to a hole table when the plan view is too dense to dimension
|