draftwright 0.4.14__tar.gz → 0.4.15__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.14 → draftwright-0.4.15}/PKG-INFO +1 -1
- {draftwright-0.4.14 → draftwright-0.4.15}/pyproject.toml +1 -1
- {draftwright-0.4.14 → draftwright-0.4.15}/src/draftwright/annotations/_common.py +49 -11
- {draftwright-0.4.14 → draftwright-0.4.15}/src/draftwright/annotations/from_model.py +25 -14
- {draftwright-0.4.14 → draftwright-0.4.15}/src/draftwright/builder.py +400 -63
- {draftwright-0.4.14 → draftwright-0.4.15}/src/draftwright/compose.py +9 -4
- {draftwright-0.4.14 → draftwright-0.4.15}/src/draftwright/drawing.py +13 -1
- {draftwright-0.4.14 → draftwright-0.4.15}/tests/refactor_golden/flange_dense.json +70 -89
- {draftwright-0.4.14 → draftwright-0.4.15}/tests/refactor_golden/turned_stepped.json +7 -26
- {draftwright-0.4.14 → draftwright-0.4.15}/tests/test_add_dimension.py +2 -1
- {draftwright-0.4.14 → draftwright-0.4.15}/tests/test_adr0018_view_selection.py +3 -4
- {draftwright-0.4.14 → draftwright-0.4.15}/tests/test_audit_differential.py +4 -1
- {draftwright-0.4.14 → draftwright-0.4.15}/tests/test_compiled_plan_boundary.py +2 -1
- {draftwright-0.4.14 → draftwright-0.4.15}/tests/test_e2e_standards.py +6 -3
- {draftwright-0.4.14 → draftwright-0.4.15}/tests/test_issue_1130_view_planning_evidence.py +8 -9
- {draftwright-0.4.14 → draftwright-0.4.15}/tests/test_issue_1217_the_facility_is_shared.py +16 -3
- draftwright-0.4.15/tests/test_issue_1262_automatic_turned_views.py +85 -0
- {draftwright-0.4.14 → draftwright-0.4.15}/tests/test_issue_1298_manufacturing_requirements.py +3 -1
- {draftwright-0.4.14 → draftwright-0.4.15}/tests/test_issue_1299_page_escalation.py +22 -9
- {draftwright-0.4.14 → draftwright-0.4.15}/tests/test_issue_1308_machined_leader_analytics.py +14 -9
- draftwright-0.4.15/tests/test_issue_1332_zone_labels.py +70 -0
- {draftwright-0.4.14 → draftwright-0.4.15}/tests/test_issue_1334_prevent_ink.py +29 -0
- {draftwright-0.4.14 → draftwright-0.4.15}/tests/test_issue_443_grm03_axial_coverage.py +4 -2
- {draftwright-0.4.14 → draftwright-0.4.15}/tests/test_issue_798_silhouette_lint.py +8 -2
- {draftwright-0.4.14 → draftwright-0.4.15}/tests/test_make_drawing.py +92 -29
- {draftwright-0.4.14 → draftwright-0.4.15}/tests/test_script_detail_parity.py +2 -1
- {draftwright-0.4.14 → draftwright-0.4.15}/tests/test_view_plan.py +8 -2
- draftwright-0.4.14/tests/test_issue_1332_zone_labels.py +0 -49
- {draftwright-0.4.14 → draftwright-0.4.15}/.gitignore +0 -0
- {draftwright-0.4.14 → draftwright-0.4.15}/CHANGELOG.md +0 -0
- {draftwright-0.4.14 → draftwright-0.4.15}/LICENSE +0 -0
- {draftwright-0.4.14 → draftwright-0.4.15}/README.md +0 -0
- {draftwright-0.4.14 → draftwright-0.4.15}/docs/adr/README.md +0 -0
- {draftwright-0.4.14 → draftwright-0.4.15}/docs/reference/recogniser-capabilities.md +0 -0
- {draftwright-0.4.14 → draftwright-0.4.15}/docs/reference/sheet.md +0 -0
- {draftwright-0.4.14 → draftwright-0.4.15}/docs/research/1062-repeating-radial-profile-evidence.md +0 -0
- {draftwright-0.4.14 → draftwright-0.4.15}/skills/SKILL.md +0 -0
- {draftwright-0.4.14 → draftwright-0.4.15}/src/draftwright/__init__.py +0 -0
- {draftwright-0.4.14 → draftwright-0.4.15}/src/draftwright/_build_profile.py +0 -0
- {draftwright-0.4.14 → draftwright-0.4.15}/src/draftwright/_core.py +0 -0
- {draftwright-0.4.14 → draftwright-0.4.15}/src/draftwright/_geometry.py +0 -0
- {draftwright-0.4.14 → draftwright-0.4.15}/src/draftwright/_pmi_part21.py +0 -0
- {draftwright-0.4.14 → draftwright-0.4.15}/src/draftwright/_warnings.py +0 -0
- {draftwright-0.4.14 → draftwright-0.4.15}/src/draftwright/analysis.py +0 -0
- {draftwright-0.4.14 → draftwright-0.4.15}/src/draftwright/annotate.py +0 -0
- {draftwright-0.4.14 → draftwright-0.4.15}/src/draftwright/annotations/__init__.py +0 -0
- {draftwright-0.4.14 → draftwright-0.4.15}/src/draftwright/annotations/balloons.py +0 -0
- {draftwright-0.4.14 → draftwright-0.4.15}/src/draftwright/annotations/gears.py +0 -0
- {draftwright-0.4.14 → draftwright-0.4.15}/src/draftwright/annotations/holes.py +0 -0
- {draftwright-0.4.14 → draftwright-0.4.15}/src/draftwright/annotations/leaders.py +0 -0
- {draftwright-0.4.14 → draftwright-0.4.15}/src/draftwright/annotations/orchestrator.py +0 -0
- {draftwright-0.4.14 → draftwright-0.4.15}/src/draftwright/annotations/sections.py +0 -0
- {draftwright-0.4.14 → draftwright-0.4.15}/src/draftwright/audit.py +0 -0
- {draftwright-0.4.14 → draftwright-0.4.15}/src/draftwright/cli.py +0 -0
- {draftwright-0.4.14 → draftwright-0.4.15}/src/draftwright/evaluation/__init__.py +0 -0
- {draftwright-0.4.14 → draftwright-0.4.15}/src/draftwright/evaluation/step_analysis.py +0 -0
- {draftwright-0.4.14 → draftwright-0.4.15}/src/draftwright/export.py +0 -0
- {draftwright-0.4.14 → draftwright-0.4.15}/src/draftwright/fits.py +0 -0
- {draftwright-0.4.14 → draftwright-0.4.15}/src/draftwright/fonts/IBMPlexMono-Regular.ttf +0 -0
- {draftwright-0.4.14 → draftwright-0.4.15}/src/draftwright/fonts/IBMPlexSansCondensed-Regular.ttf +0 -0
- {draftwright-0.4.14 → draftwright-0.4.15}/src/draftwright/fonts/LICENSE-IBMPlexMono-OFL.txt +0 -0
- {draftwright-0.4.14 → draftwright-0.4.15}/src/draftwright/fonts/LICENSE-IBMPlexSansCondensed-OFL.txt +0 -0
- {draftwright-0.4.14 → draftwright-0.4.15}/src/draftwright/fonts/__init__.py +0 -0
- {draftwright-0.4.14 → draftwright-0.4.15}/src/draftwright/intents.py +0 -0
- {draftwright-0.4.14 → draftwright-0.4.15}/src/draftwright/layout.py +0 -0
- {draftwright-0.4.14 → draftwright-0.4.15}/src/draftwright/linting/__init__.py +0 -0
- {draftwright-0.4.14 → draftwright-0.4.15}/src/draftwright/linting/channel_coverage.py +0 -0
- {draftwright-0.4.14 → draftwright-0.4.15}/src/draftwright/linting/coverage.py +0 -0
- {draftwright-0.4.14 → draftwright-0.4.15}/src/draftwright/linting/evidence.py +0 -0
- {draftwright-0.4.14 → draftwright-0.4.15}/src/draftwright/linting/flat_coverage.py +0 -0
- {draftwright-0.4.14 → draftwright-0.4.15}/src/draftwright/linting/gear_coverage.py +0 -0
- {draftwright-0.4.14 → draftwright-0.4.15}/src/draftwright/linting/hole_coverage.py +0 -0
- {draftwright-0.4.14 → draftwright-0.4.15}/src/draftwright/linting/ink_overlap.py +0 -0
- {draftwright-0.4.14 → draftwright-0.4.15}/src/draftwright/linting/issues.py +0 -0
- {draftwright-0.4.14 → draftwright-0.4.15}/src/draftwright/linting/pmi_coverage.py +0 -0
- {draftwright-0.4.14 → draftwright-0.4.15}/src/draftwright/linting/polygonal_stock_coverage.py +0 -0
- {draftwright-0.4.14 → draftwright-0.4.15}/src/draftwright/linting/profiled_bore_coverage.py +0 -0
- {draftwright-0.4.14 → draftwright-0.4.15}/src/draftwright/linting/quality.py +0 -0
- {draftwright-0.4.14 → draftwright-0.4.15}/src/draftwright/linting/slot_coverage.py +0 -0
- {draftwright-0.4.14 → draftwright-0.4.15}/src/draftwright/linting/structural.py +0 -0
- {draftwright-0.4.14 → draftwright-0.4.15}/src/draftwright/linting/suggest.py +0 -0
- {draftwright-0.4.14 → draftwright-0.4.15}/src/draftwright/make_drawing.py +0 -0
- {draftwright-0.4.14 → draftwright-0.4.15}/src/draftwright/model/__init__.py +0 -0
- {draftwright-0.4.14 → draftwright-0.4.15}/src/draftwright/model/callout.py +0 -0
- {draftwright-0.4.14 → draftwright-0.4.15}/src/draftwright/model/compiled.py +0 -0
- {draftwright-0.4.14 → draftwright-0.4.15}/src/draftwright/model/declare.py +0 -0
- {draftwright-0.4.14 → draftwright-0.4.15}/src/draftwright/model/detect.py +0 -0
- {draftwright-0.4.14 → draftwright-0.4.15}/src/draftwright/model/ir.py +0 -0
- {draftwright-0.4.14 → draftwright-0.4.15}/src/draftwright/model/planner.py +0 -0
- {draftwright-0.4.14 → draftwright-0.4.15}/src/draftwright/model/pmi_lowering.py +0 -0
- {draftwright-0.4.14 → draftwright-0.4.15}/src/draftwright/pmi.py +0 -0
- {draftwright-0.4.14 → draftwright-0.4.15}/src/draftwright/projection.py +0 -0
- {draftwright-0.4.14 → draftwright-0.4.15}/src/draftwright/py.typed +0 -0
- {draftwright-0.4.14 → draftwright-0.4.15}/src/draftwright/recogniser_contract.py +0 -0
- {draftwright-0.4.14 → draftwright-0.4.15}/src/draftwright/recognition/__init__.py +0 -0
- {draftwright-0.4.14 → draftwright-0.4.15}/src/draftwright/recognition_cache.py +0 -0
- {draftwright-0.4.14 → draftwright-0.4.15}/src/draftwright/registry.py +0 -0
- {draftwright-0.4.14 → draftwright-0.4.15}/src/draftwright/repair.py +0 -0
- {draftwright-0.4.14 → draftwright-0.4.15}/src/draftwright/score.py +0 -0
- {draftwright-0.4.14 → draftwright-0.4.15}/src/draftwright/sheet.py +0 -0
- {draftwright-0.4.14 → draftwright-0.4.15}/src/draftwright/sheet_emit.py +0 -0
- {draftwright-0.4.14 → draftwright-0.4.15}/src/draftwright/view_plan.py +0 -0
- {draftwright-0.4.14 → draftwright-0.4.15}/tests/_kernel.py +0 -0
- {draftwright-0.4.14 → draftwright-0.4.15}/tests/_layout_sig.py +0 -0
- {draftwright-0.4.14 → draftwright-0.4.15}/tests/conftest.py +0 -0
- {draftwright-0.4.14 → draftwright-0.4.15}/tests/fixtures/ap242_single_cylinder_diameter.step +0 -0
- {draftwright-0.4.14 → draftwright-0.4.15}/tests/fixtures/evaluation/README.md +0 -0
- {draftwright-0.4.14 → draftwright-0.4.15}/tests/fixtures/evaluation/ambiguous-open-semicircle.step +0 -0
- {draftwright-0.4.14 → draftwright-0.4.15}/tests/fixtures/evaluation/blind-hole.step +0 -0
- {draftwright-0.4.14 → draftwright-0.4.15}/tests/fixtures/evaluation/corpus-v1.json +0 -0
- {draftwright-0.4.14 → draftwright-0.4.15}/tests/fixtures/evaluation/plain-block.step +0 -0
- {draftwright-0.4.14 → draftwright-0.4.15}/tests/fixtures/evaluation/topology-a.step +0 -0
- {draftwright-0.4.14 → draftwright-0.4.15}/tests/fixtures/evaluation/topology-b.step +0 -0
- {draftwright-0.4.14 → draftwright-0.4.15}/tests/fixtures/grm03_thumbwheel_drive_screw.step +0 -0
- {draftwright-0.4.14 → draftwright-0.4.15}/tests/fixtures/grm03_thumbwheel_drive_screw_ap242_pmi.step +0 -0
- {draftwright-0.4.14 → draftwright-0.4.15}/tests/fixtures/grm04_drive_plate.step +0 -0
- {draftwright-0.4.14 → draftwright-0.4.15}/tests/fixtures/if_step_flat_across_cylinder.step +0 -0
- {draftwright-0.4.14 → draftwright-0.4.15}/tests/fixtures/issue_1058_wheel_rh.step +0 -0
- {draftwright-0.4.14 → draftwright-0.4.15}/tests/fixtures/issue_909_basic_part_design_017_body.step +0 -0
- {draftwright-0.4.14 → draftwright-0.4.15}/tests/fixtures/issue_915_case_study_2.step +0 -0
- {draftwright-0.4.14 → draftwright-0.4.15}/tests/fixtures/nist_ctc_01_asme1_ap203.stp +0 -0
- {draftwright-0.4.14 → draftwright-0.4.15}/tests/fixtures/nist_ctc_01_asme1_ap242.stp +0 -0
- {draftwright-0.4.14 → draftwright-0.4.15}/tests/fixtures/nist_ctc_02_asme1_ap203.stp +0 -0
- {draftwright-0.4.14 → draftwright-0.4.15}/tests/fixtures/nist_ctc_02_asme1_ap242.stp +0 -0
- {draftwright-0.4.14 → draftwright-0.4.15}/tests/fixtures/nist_ctc_03_asme1_ap203.stp +0 -0
- {draftwright-0.4.14 → draftwright-0.4.15}/tests/fixtures/nist_ctc_03_asme1_ap242.stp +0 -0
- {draftwright-0.4.14 → draftwright-0.4.15}/tests/fixtures/nist_ctc_04_asme1_ap203.stp +0 -0
- {draftwright-0.4.14 → draftwright-0.4.15}/tests/fixtures/nist_ctc_04_asme1_ap242.stp +0 -0
- {draftwright-0.4.14 → draftwright-0.4.15}/tests/fixtures/nist_ctc_05_asme1_ap203.stp +0 -0
- {draftwright-0.4.14 → draftwright-0.4.15}/tests/fixtures/nist_ctc_05_asme1_ap242.stp +0 -0
- {draftwright-0.4.14 → draftwright-0.4.15}/tests/fixtures/tuner_jig_blind_obround_pockets.step +0 -0
- {draftwright-0.4.14 → draftwright-0.4.15}/tests/refactor_golden/bracket_section.json +0 -0
- {draftwright-0.4.14 → draftwright-0.4.15}/tests/refactor_golden/centered_rebate.json +0 -0
- {draftwright-0.4.14 → draftwright-0.4.15}/tests/refactor_golden/chamfered.json +0 -0
- {draftwright-0.4.14 → draftwright-0.4.15}/tests/refactor_golden/filleted.json +0 -0
- {draftwright-0.4.14 → draftwright-0.4.15}/tests/refactor_golden/grid_plate.json +0 -0
- {draftwright-0.4.14 → draftwright-0.4.15}/tests/refactor_golden/grooved_shaft.json +0 -0
- {draftwright-0.4.14 → draftwright-0.4.15}/tests/refactor_golden/hex_bar.json +0 -0
- {draftwright-0.4.14 → draftwright-0.4.15}/tests/refactor_golden/holed_slot.json +0 -0
- {draftwright-0.4.14 → draftwright-0.4.15}/tests/refactor_golden/pocketed.json +0 -0
- {draftwright-0.4.14 → draftwright-0.4.15}/tests/refactor_golden/prismatic_ladder.json +0 -0
- {draftwright-0.4.14 → draftwright-0.4.15}/tests/refactor_golden/scattered_plate.json +0 -0
- {draftwright-0.4.14 → draftwright-0.4.15}/tests/refactor_golden/side_drilled.json +0 -0
- {draftwright-0.4.14 → draftwright-0.4.15}/tests/test_adr0018_arrangement_gate.py +0 -0
- {draftwright-0.4.14 → draftwright-0.4.15}/tests/test_adr0018_view_routing.py +0 -0
- {draftwright-0.4.14 → draftwright-0.4.15}/tests/test_agents_guide.py +0 -0
- {draftwright-0.4.14 → draftwright-0.4.15}/tests/test_api_docs.py +0 -0
- {draftwright-0.4.14 → draftwright-0.4.15}/tests/test_architecture_docs.py +0 -0
- {draftwright-0.4.14 → draftwright-0.4.15}/tests/test_balloon_ring_standoff.py +0 -0
- {draftwright-0.4.14 → draftwright-0.4.15}/tests/test_build_profile_harness.py +0 -0
- {draftwright-0.4.14 → draftwright-0.4.15}/tests/test_carve_free_position_callers.py +0 -0
- {draftwright-0.4.14 → draftwright-0.4.15}/tests/test_counting_calls.py +0 -0
- {draftwright-0.4.14 → draftwright-0.4.15}/tests/test_declare.py +0 -0
- {draftwright-0.4.14 → draftwright-0.4.15}/tests/test_declared_recognition_gate.py +0 -0
- {draftwright-0.4.14 → draftwright-0.4.15}/tests/test_dense_sheet_canary.py +0 -0
- {draftwright-0.4.14 → draftwright-0.4.15}/tests/test_deprecation_dates.py +0 -0
- {draftwright-0.4.14 → draftwright-0.4.15}/tests/test_detect_once.py +0 -0
- {draftwright-0.4.14 → draftwright-0.4.15}/tests/test_detect_registry.py +0 -0
- {draftwright-0.4.14 → draftwright-0.4.15}/tests/test_dimension_role_vocabulary.py +0 -0
- {draftwright-0.4.14 → draftwright-0.4.15}/tests/test_drawing_encapsulation.py +0 -0
- {draftwright-0.4.14 → draftwright-0.4.15}/tests/test_e2e_slice.py +0 -0
- {draftwright-0.4.14 → draftwright-0.4.15}/tests/test_export_dxf_curves.py +0 -0
- {draftwright-0.4.14 → draftwright-0.4.15}/tests/test_export_dxf_zoom.py +0 -0
- {draftwright-0.4.14 → draftwright-0.4.15}/tests/test_external_recognition_boundary.py +0 -0
- {draftwright-0.4.14 → draftwright-0.4.15}/tests/test_fillets_adjacency.py +0 -0
- {draftwright-0.4.14 → draftwright-0.4.15}/tests/test_fits.py +0 -0
- {draftwright-0.4.14 → draftwright-0.4.15}/tests/test_flat_completeness.py +0 -0
- {draftwright-0.4.14 → draftwright-0.4.15}/tests/test_flat_stock_identity.py +0 -0
- {draftwright-0.4.14 → draftwright-0.4.15}/tests/test_flat_stock_opposition.py +0 -0
- {draftwright-0.4.14 → draftwright-0.4.15}/tests/test_gdt_placement.py +0 -0
- {draftwright-0.4.14 → draftwright-0.4.15}/tests/test_grid_lattice_convention.py +0 -0
- {draftwright-0.4.14 → draftwright-0.4.15}/tests/test_import_boundaries.py +0 -0
- {draftwright-0.4.14 → draftwright-0.4.15}/tests/test_iso_nts_caption_placement.py +0 -0
- {draftwright-0.4.14 → draftwright-0.4.15}/tests/test_issue_1000_envelope_reuse.py +0 -0
- {draftwright-0.4.14 → draftwright-0.4.15}/tests/test_issue_1058_wheel_profile.py +0 -0
- {draftwright-0.4.14 → draftwright-0.4.15}/tests/test_issue_1073_cross_body_patterns.py +0 -0
- {draftwright-0.4.14 → draftwright-0.4.15}/tests/test_issue_1082_polygonal_stock.py +0 -0
- {draftwright-0.4.14 → draftwright-0.4.15}/tests/test_issue_1086_declared_gears.py +0 -0
- {draftwright-0.4.14 → draftwright-0.4.15}/tests/test_issue_1116_ap242_hole_tolerance_lowering.py +0 -0
- {draftwright-0.4.14 → draftwright-0.4.15}/tests/test_issue_1142_hole_leader_labels.py +0 -0
- {draftwright-0.4.14 → draftwright-0.4.15}/tests/test_issue_1143_hole_completeness.py +0 -0
- {draftwright-0.4.14 → draftwright-0.4.15}/tests/test_issue_1144_transactional_hole_table.py +0 -0
- {draftwright-0.4.14 → draftwright-0.4.15}/tests/test_issue_1146_scale_completeness.py +0 -0
- {draftwright-0.4.14 → draftwright-0.4.15}/tests/test_issue_1147_legibility_pair_aggregation.py +0 -0
- {draftwright-0.4.14 → draftwright-0.4.15}/tests/test_issue_1153_contradictory_dimensions.py +0 -0
- {draftwright-0.4.14 → draftwright-0.4.15}/tests/test_issue_1154_one_owner_per_measurement.py +0 -0
- {draftwright-0.4.14 → draftwright-0.4.15}/tests/test_issue_1155_grm04_sheet_use.py +0 -0
- {draftwright-0.4.14 → draftwright-0.4.15}/tests/test_issue_1166_cross_pass_feature_leaders.py +0 -0
- {draftwright-0.4.14 → draftwright-0.4.15}/tests/test_issue_1176_quality_fidelity.py +0 -0
- {draftwright-0.4.14 → draftwright-0.4.15}/tests/test_issue_1177_angular_dimensions.py +0 -0
- {draftwright-0.4.14 → draftwright-0.4.15}/tests/test_issue_1187_unroutable_leaders.py +0 -0
- {draftwright-0.4.14 → draftwright-0.4.15}/tests/test_issue_1188_per_view_assignment.py +0 -0
- {draftwright-0.4.14 → draftwright-0.4.15}/tests/test_issue_1190_section_decision.py +0 -0
- {draftwright-0.4.14 → draftwright-0.4.15}/tests/test_issue_1196_deterministic_view_names.py +0 -0
- {draftwright-0.4.14 → draftwright-0.4.15}/tests/test_issue_1202_observed_drawing_consumer.py +0 -0
- {draftwright-0.4.14 → draftwright-0.4.15}/tests/test_issue_1204_multiscale_view_issues.py +0 -0
- {draftwright-0.4.14 → draftwright-0.4.15}/tests/test_issue_1209_linear_pmi_witnesses.py +0 -0
- {draftwright-0.4.14 → draftwright-0.4.15}/tests/test_issue_1215_envelope_tolerance.py +0 -0
- {draftwright-0.4.14 → draftwright-0.4.15}/tests/test_issue_1215_no_approved_tolerance_is_dropped.py +0 -0
- {draftwright-0.4.14 → draftwright-0.4.15}/tests/test_issue_1216_callout_reservation_measures_ink.py +0 -0
- {draftwright-0.4.14 → draftwright-0.4.15}/tests/test_issue_1216_pairwise_across_scale_groups.py +0 -0
- {draftwright-0.4.14 → draftwright-0.4.15}/tests/test_issue_1217_claimed_representations.py +0 -0
- {draftwright-0.4.14 → draftwright-0.4.15}/tests/test_issue_1219_location_claims_its_own_axis.py +0 -0
- {draftwright-0.4.14 → draftwright-0.4.15}/tests/test_issue_1229_ledger_member_keying.py +0 -0
- {draftwright-0.4.14 → draftwright-0.4.15}/tests/test_issue_1240_iso_above_strip_visibility.py +0 -0
- {draftwright-0.4.14 → draftwright-0.4.15}/tests/test_issue_1254_turned_chamfers.py +0 -0
- {draftwright-0.4.14 → draftwright-0.4.15}/tests/test_issue_1260_view_constraints.py +0 -0
- {draftwright-0.4.14 → draftwright-0.4.15}/tests/test_issue_1276_turned_leader_targets.py +0 -0
- {draftwright-0.4.14 → draftwright-0.4.15}/tests/test_issue_1281_turned_fillets.py +0 -0
- {draftwright-0.4.14 → draftwright-0.4.15}/tests/test_issue_1296_cylindrical_diameter_pmi.py +0 -0
- {draftwright-0.4.14 → draftwright-0.4.15}/tests/test_issue_1312_engine_costs.py +0 -0
- {draftwright-0.4.14 → draftwright-0.4.15}/tests/test_issue_1332_overlap_remedy.py +0 -0
- {draftwright-0.4.14 → draftwright-0.4.15}/tests/test_issue_1332_overlap_remedy_fast.py +0 -0
- {draftwright-0.4.14 → draftwright-0.4.15}/tests/test_issue_1336_grm03_ap242_pmi_fixture.py +0 -0
- {draftwright-0.4.14 → draftwright-0.4.15}/tests/test_issue_1338_scale_before_page_escalation.py +0 -0
- {draftwright-0.4.14 → draftwright-0.4.15}/tests/test_issue_367_leader_ink.py +0 -0
- {draftwright-0.4.14 → draftwright-0.4.15}/tests/test_issue_676_polygonal_boss.py +0 -0
- {draftwright-0.4.14 → draftwright-0.4.15}/tests/test_issue_676_polygonal_boss_declare.py +0 -0
- {draftwright-0.4.14 → draftwright-0.4.15}/tests/test_issue_740_leader_assignment.py +0 -0
- {draftwright-0.4.14 → draftwright-0.4.15}/tests/test_issue_798_floor_cardinality.py +0 -0
- {draftwright-0.4.14 → draftwright-0.4.15}/tests/test_issue_798_material_field.py +0 -0
- {draftwright-0.4.14 → draftwright-0.4.15}/tests/test_issue_885_prismatic_coverage.py +0 -0
- {draftwright-0.4.14 → draftwright-0.4.15}/tests/test_issue_909_sloped_profile.py +0 -0
- {draftwright-0.4.14 → draftwright-0.4.15}/tests/test_issue_915_dense_case.py +0 -0
- {draftwright-0.4.14 → draftwright-0.4.15}/tests/test_issue_916_pocket_leader.py +0 -0
- {draftwright-0.4.14 → draftwright-0.4.15}/tests/test_issue_917_open_channel.py +0 -0
- {draftwright-0.4.14 → draftwright-0.4.15}/tests/test_issue_924_zero_length_shoulders.py +0 -0
- {draftwright-0.4.14 → draftwright-0.4.15}/tests/test_issue_955_height_contingency.py +0 -0
- {draftwright-0.4.14 → draftwright-0.4.15}/tests/test_issue_958_cross_solid_recognition.py +0 -0
- {draftwright-0.4.14 → draftwright-0.4.15}/tests/test_label_provenance.py +0 -0
- {draftwright-0.4.14 → draftwright-0.4.15}/tests/test_layout.py +0 -0
- {draftwright-0.4.14 → draftwright-0.4.15}/tests/test_layout_cleanliness.py +0 -0
- {draftwright-0.4.14 → draftwright-0.4.15}/tests/test_layout_hypothesis.py +0 -0
- {draftwright-0.4.14 → draftwright-0.4.15}/tests/test_layout_property.py +0 -0
- {draftwright-0.4.14 → draftwright-0.4.15}/tests/test_leader_footprint.py +0 -0
- {draftwright-0.4.14 → draftwright-0.4.15}/tests/test_lint_box_cache.py +0 -0
- {draftwright-0.4.14 → draftwright-0.4.15}/tests/test_lint_ink_overlap.py +0 -0
- {draftwright-0.4.14 → draftwright-0.4.15}/tests/test_lint_reconciliation.py +0 -0
- {draftwright-0.4.14 → draftwright-0.4.15}/tests/test_lint_structural.py +0 -0
- {draftwright-0.4.14 → draftwright-0.4.15}/tests/test_linting.py +0 -0
- {draftwright-0.4.14 → draftwright-0.4.15}/tests/test_location_vocabulary.py +0 -0
- {draftwright-0.4.14 → draftwright-0.4.15}/tests/test_note_verb.py +0 -0
- {draftwright-0.4.14 → draftwright-0.4.15}/tests/test_object_aspects.py +0 -0
- {draftwright-0.4.14 → draftwright-0.4.15}/tests/test_occupancy_boxes.py +0 -0
- {draftwright-0.4.14 → draftwright-0.4.15}/tests/test_parameter_id.py +0 -0
- {draftwright-0.4.14 → draftwright-0.4.15}/tests/test_part_model.py +0 -0
- {draftwright-0.4.14 → draftwright-0.4.15}/tests/test_pitch_dim_footprint.py +0 -0
- {draftwright-0.4.14 → draftwright-0.4.15}/tests/test_pmi.py +0 -0
- {draftwright-0.4.14 → draftwright-0.4.15}/tests/test_pmi_datum_lowering.py +0 -0
- {draftwright-0.4.14 → draftwright-0.4.15}/tests/test_pmi_gtol_lowering.py +0 -0
- {draftwright-0.4.14 → draftwright-0.4.15}/tests/test_pmi_part21.py +0 -0
- {draftwright-0.4.14 → draftwright-0.4.15}/tests/test_pocket_pattern.py +0 -0
- {draftwright-0.4.14 → draftwright-0.4.15}/tests/test_pocket_pattern_recognition.py +0 -0
- {draftwright-0.4.14 → draftwright-0.4.15}/tests/test_principal_profile_classifier.py +0 -0
- {draftwright-0.4.14 → draftwright-0.4.15}/tests/test_private_test_attr_reads.py +0 -0
- {draftwright-0.4.14 → draftwright-0.4.15}/tests/test_private_test_imports.py +0 -0
- {draftwright-0.4.14 → draftwright-0.4.15}/tests/test_quality_components.py +0 -0
- {draftwright-0.4.14 → draftwright-0.4.15}/tests/test_recogniser_adoption.py +0 -0
- {draftwright-0.4.14 → draftwright-0.4.15}/tests/test_recogniser_capabilities.py +0 -0
- {draftwright-0.4.14 → draftwright-0.4.15}/tests/test_recogniser_contract.py +0 -0
- {draftwright-0.4.14 → draftwright-0.4.15}/tests/test_recognition.py +0 -0
- {draftwright-0.4.14 → draftwright-0.4.15}/tests/test_recognition_manifest.py +0 -0
- {draftwright-0.4.14 → draftwright-0.4.15}/tests/test_recognition_result.py +0 -0
- {draftwright-0.4.14 → draftwright-0.4.15}/tests/test_refactor_golden.py +0 -0
- {draftwright-0.4.14 → draftwright-0.4.15}/tests/test_registry.py +0 -0
- {draftwright-0.4.14 → draftwright-0.4.15}/tests/test_render_seam.py +0 -0
- {draftwright-0.4.14 → draftwright-0.4.15}/tests/test_repack_geometry_seam.py +0 -0
- {draftwright-0.4.14 → draftwright-0.4.15}/tests/test_score.py +0 -0
- {draftwright-0.4.14 → draftwright-0.4.15}/tests/test_shared_box_memo.py +0 -0
- {draftwright-0.4.14 → draftwright-0.4.15}/tests/test_sheet_emit.py +0 -0
- {draftwright-0.4.14 → draftwright-0.4.15}/tests/test_sheet_gdt.py +0 -0
- {draftwright-0.4.14 → draftwright-0.4.15}/tests/test_sheet_identity_invariant.py +0 -0
- {draftwright-0.4.14 → draftwright-0.4.15}/tests/test_sheet_notes.py +0 -0
- {draftwright-0.4.14 → draftwright-0.4.15}/tests/test_sheet_of.py +0 -0
- {draftwright-0.4.14 → draftwright-0.4.15}/tests/test_sheet_section.py +0 -0
- {draftwright-0.4.14 → draftwright-0.4.15}/tests/test_sheet_tables.py +0 -0
- {draftwright-0.4.14 → draftwright-0.4.15}/tests/test_slanted_blind_step.py +0 -0
- {draftwright-0.4.14 → draftwright-0.4.15}/tests/test_slot_completeness.py +0 -0
- {draftwright-0.4.14 → draftwright-0.4.15}/tests/test_slot_pattern.py +0 -0
- {draftwright-0.4.14 → draftwright-0.4.15}/tests/test_slot_pattern_recognition.py +0 -0
- {draftwright-0.4.14 → draftwright-0.4.15}/tests/test_soft_deprecation.py +0 -0
- {draftwright-0.4.14 → draftwright-0.4.15}/tests/test_solve_trace.py +0 -0
- {draftwright-0.4.14 → draftwright-0.4.15}/tests/test_step_analysis_evaluation.py +0 -0
- {draftwright-0.4.14 → draftwright-0.4.15}/tests/test_strip_layout.py +0 -0
- {draftwright-0.4.14 → draftwright-0.4.15}/tests/test_suppression_ledger.py +0 -0
- {draftwright-0.4.14 → draftwright-0.4.15}/tests/test_suppression_marks.py +0 -0
- {draftwright-0.4.14 → draftwright-0.4.15}/tests/test_tolerances.py +0 -0
- {draftwright-0.4.14 → draftwright-0.4.15}/tests/test_turned_steps.py +0 -0
- {draftwright-0.4.14 → draftwright-0.4.15}/tests/test_witness_label_reconciliation.py +0 -0
- {draftwright-0.4.14 → draftwright-0.4.15}/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.15
|
|
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
|
|
@@ -1471,6 +1471,7 @@ def prevent_dimension_label_ink(
|
|
|
1471
1471
|
page=None,
|
|
1472
1472
|
immutable=(),
|
|
1473
1473
|
obstacles=(),
|
|
1474
|
+
perpendicular_step=None,
|
|
1474
1475
|
):
|
|
1475
1476
|
"""Choose small along-line label offsets for a just-built dimension batch.
|
|
1476
1477
|
|
|
@@ -1493,6 +1494,9 @@ def prevent_dimension_label_ink(
|
|
|
1493
1494
|
neighbour's. If the bounded choices cannot improve the batch, the natural deterministic
|
|
1494
1495
|
placement survives and the normal ``annotation_ink_overlap`` lint remains explicit
|
|
1495
1496
|
evidence of the infeasible fallback. Names in *immutable* are never shifted (pins win).
|
|
1497
|
+
When ``perpendicular_step`` is supplied, a conflicting dimension may also move one
|
|
1498
|
+
established stacking tier away from the view. This is the generic fallback for a chain
|
|
1499
|
+
whose line-work cannot be cleared by moving labels along their measured spans.
|
|
1496
1500
|
Fixed *obstacles* do not make an existing contact this local batch's responsibility, but
|
|
1497
1501
|
no selected move may introduce a new label contact with one.
|
|
1498
1502
|
|
|
@@ -1645,6 +1649,7 @@ def prevent_dimension_label_ink(
|
|
|
1645
1649
|
conflicts = _conflicts(batch)
|
|
1646
1650
|
fixed_conflicts = sum(conflict[0] == "fixed" for conflict in conflicts)
|
|
1647
1651
|
offsets = []
|
|
1652
|
+
tier_offsets = []
|
|
1648
1653
|
for (_name, dim), info, natural in zip(batch, infos, natural_centres, strict=True):
|
|
1649
1654
|
label = _box(dim)
|
|
1650
1655
|
offsets.append(
|
|
@@ -1652,9 +1657,18 @@ def prevent_dimension_label_ink(
|
|
|
1652
1657
|
if info is None or natural is None or label is None
|
|
1653
1658
|
else abs((label[info[0]] + label[info[0] + 2]) / 2.0 - natural)
|
|
1654
1659
|
)
|
|
1660
|
+
for (_name, dim), (_original_name, original_dim) in zip(batch, original, strict=True):
|
|
1661
|
+
spec = getattr(dim, "_dw_spec", None)
|
|
1662
|
+
original_spec = getattr(original_dim, "_dw_spec", None)
|
|
1663
|
+
tier_offsets.append(
|
|
1664
|
+
0.0
|
|
1665
|
+
if spec is None or original_spec is None
|
|
1666
|
+
else abs(float(spec.distance) - float(original_spec.distance))
|
|
1667
|
+
)
|
|
1655
1668
|
return (
|
|
1656
1669
|
fixed_conflicts,
|
|
1657
1670
|
len(conflicts),
|
|
1671
|
+
sum(value > 1e-9 for value in tier_offsets),
|
|
1658
1672
|
round(sum(offsets), 9),
|
|
1659
1673
|
round(max(offsets, default=0.0), 9),
|
|
1660
1674
|
tuple(round(value, 9) for value in offsets),
|
|
@@ -1665,10 +1679,10 @@ def prevent_dimension_label_ink(
|
|
|
1665
1679
|
if not conflicts:
|
|
1666
1680
|
return current # overwhelmingly common path: no extra Dimension construction
|
|
1667
1681
|
|
|
1668
|
-
cache: dict[tuple[int, float], Any] = {}
|
|
1682
|
+
cache: dict[tuple[int, float, float], Any] = {}
|
|
1669
1683
|
|
|
1670
|
-
def _rebuild(index, centre):
|
|
1671
|
-
key = (index, round(centre, 6))
|
|
1684
|
+
def _rebuild(index, centre, distance_delta=0.0):
|
|
1685
|
+
key = (index, round(centre, 6), round(distance_delta, 6))
|
|
1672
1686
|
if key in cache:
|
|
1673
1687
|
return cache[key]
|
|
1674
1688
|
name, dim = original[index]
|
|
@@ -1682,7 +1696,14 @@ def prevent_dimension_label_ink(
|
|
|
1682
1696
|
kwargs["label_offset_x"] = (
|
|
1683
1697
|
kwargs.get("label_offset_x", 0.0) + (centre - natural) * direction
|
|
1684
1698
|
)
|
|
1685
|
-
rebuilt = _dim(
|
|
1699
|
+
rebuilt = _dim(
|
|
1700
|
+
spec.p1,
|
|
1701
|
+
spec.p2,
|
|
1702
|
+
spec.side,
|
|
1703
|
+
spec.distance + distance_delta,
|
|
1704
|
+
spec.draft,
|
|
1705
|
+
**kwargs,
|
|
1706
|
+
)
|
|
1686
1707
|
# The producer attaches semantic evidence before the corridor commits the
|
|
1687
1708
|
# survivor. Rebuilding only the rendered Dimension must not erase that evidence:
|
|
1688
1709
|
# hole-table escalation and coverage lint read these riders from the final object.
|
|
@@ -1765,13 +1786,30 @@ def prevent_dimension_label_ink(
|
|
|
1765
1786
|
name, _dim_obj = original[index]
|
|
1766
1787
|
if name in immutable or infos[index] is None:
|
|
1767
1788
|
continue
|
|
1768
|
-
|
|
1769
|
-
|
|
1770
|
-
|
|
1771
|
-
|
|
1772
|
-
|
|
1773
|
-
|
|
1774
|
-
|
|
1789
|
+
distances = (0.0,) if perpendicular_step is None else (0.0, perpendicular_step)
|
|
1790
|
+
for distance_delta in distances:
|
|
1791
|
+
for centre in _centres_for(index, current):
|
|
1792
|
+
rebuilt = _rebuild(index, centre, distance_delta)
|
|
1793
|
+
if page is not None:
|
|
1794
|
+
box = _anno_box(rebuilt)
|
|
1795
|
+
if box is not None and not (
|
|
1796
|
+
page[0] <= box[0]
|
|
1797
|
+
and box[2] <= page[2]
|
|
1798
|
+
and page[1] <= box[1]
|
|
1799
|
+
and box[3] <= page[3]
|
|
1800
|
+
):
|
|
1801
|
+
continue
|
|
1802
|
+
trial = list(current)
|
|
1803
|
+
trial[index] = (name, rebuilt)
|
|
1804
|
+
objective, trial_conflicts = _objective(trial)
|
|
1805
|
+
key = (
|
|
1806
|
+
objective,
|
|
1807
|
+
index,
|
|
1808
|
+
round(distance_delta, 9),
|
|
1809
|
+
round(centre, 9),
|
|
1810
|
+
)
|
|
1811
|
+
if objective < current_objective and (best is None or key < best[0]):
|
|
1812
|
+
best = (key, trial, objective, trial_conflicts)
|
|
1775
1813
|
if best is None:
|
|
1776
1814
|
break
|
|
1777
1815
|
_key, current, current_objective, conflicts = best
|
|
@@ -3592,6 +3592,7 @@ def _draw_step_chain(
|
|
|
3592
3592
|
for seg in segs
|
|
3593
3593
|
]
|
|
3594
3594
|
mean_v = sum(vals) / len(vals)
|
|
3595
|
+
tier_step = draft.font_size + 2 * draft.pad_around_text
|
|
3595
3596
|
if (
|
|
3596
3597
|
allow_collapse
|
|
3597
3598
|
and all(seg.label is None for seg in segs)
|
|
@@ -3610,7 +3611,6 @@ def _draw_step_chain(
|
|
|
3610
3611
|
typ_name = f"{name_prefix}_typ" if start == 0 else f"{name_prefix}_typ{start}"
|
|
3611
3612
|
candidates = [(typ_name, dim, _step_measurements(segs))]
|
|
3612
3613
|
else:
|
|
3613
|
-
tier_step = draft.font_size + 2 * draft.pad_around_text
|
|
3614
3614
|
tiers = [0] * len(segs)
|
|
3615
3615
|
if horizontal:
|
|
3616
3616
|
cw = [
|
|
@@ -3699,6 +3699,7 @@ def _draw_step_chain(
|
|
|
3699
3699
|
[(name, dim) for name, dim, _measurements in candidates],
|
|
3700
3700
|
page=page,
|
|
3701
3701
|
obstacles=strip_obstacles(dwg, view=view, crossable=CROSSABLE_TYPES),
|
|
3702
|
+
perpendicular_step=tier_step if horizontal else None,
|
|
3702
3703
|
)
|
|
3703
3704
|
]
|
|
3704
3705
|
|
|
@@ -4599,7 +4600,7 @@ def _global_axis_centerline(first, second):
|
|
|
4599
4600
|
|
|
4600
4601
|
def render_rotational(dwg, plan, a, *, ctx) -> int:
|
|
4601
4602
|
"""Rotational furniture from the IR `RotationalFeature` (#237): the OD dim (above
|
|
4602
|
-
the
|
|
4603
|
+
the profile view), rotation-axis centrelines on planned profile projections, and concentric
|
|
4603
4604
|
bore leaders stacked to the left of the front view. Returns the count placed.
|
|
4604
4605
|
|
|
4605
4606
|
The OD/bore dimensions consume only approved compiled entries. Suppressed entries
|
|
@@ -4621,6 +4622,14 @@ def render_rotational(dwg, plan, a, *, ctx) -> int:
|
|
|
4621
4622
|
# Planner-fed value + authored tolerance/fit suffix (#754).
|
|
4622
4623
|
return f"ø{dim.value_text}{_tol_suffix(dim.tolerance, draft)}"
|
|
4623
4624
|
|
|
4625
|
+
def _place_axis_centerline(item, name, view):
|
|
4626
|
+
# Automatic view selection may omit one of a turned body's two equivalent profile
|
|
4627
|
+
# projections. Furniture is not a semantic requirement and therefore does not pass
|
|
4628
|
+
# through the dimension planner's missing-view gate; guard it explicitly so it cannot
|
|
4629
|
+
# leave an orphan dashed line at the absent view's former page position (#1262).
|
|
4630
|
+
if view in dwg.views:
|
|
4631
|
+
ctx.place(item, name, view=view)
|
|
4632
|
+
|
|
4624
4633
|
if axis == "z":
|
|
4625
4634
|
# Vertical turning axis (the common case): OD across the top of the front
|
|
4626
4635
|
# (profile) view; axis centrelines vertical on front + side.
|
|
@@ -4640,21 +4649,21 @@ def render_rotational(dwg, plan, a, *, ctx) -> int:
|
|
|
4640
4649
|
measurement=od_dim.id,
|
|
4641
4650
|
)
|
|
4642
4651
|
n += 1
|
|
4643
|
-
|
|
4652
|
+
_place_axis_centerline(
|
|
4644
4653
|
_global_axis_centerline(
|
|
4645
4654
|
(FX(a.cx), FZ(a.bb.min.Z) - 5, 0),
|
|
4646
4655
|
(FX(a.cx), FZ(a.bb.max.Z) + 5, 0),
|
|
4647
4656
|
),
|
|
4648
4657
|
"centerline_front",
|
|
4649
|
-
|
|
4658
|
+
"front",
|
|
4650
4659
|
)
|
|
4651
|
-
|
|
4660
|
+
_place_axis_centerline(
|
|
4652
4661
|
_global_axis_centerline(
|
|
4653
4662
|
(SX(a.cy), SZ(a.bb.min.Z) - 5, 0),
|
|
4654
4663
|
(SX(a.cy), SZ(a.bb.max.Z) + 5, 0),
|
|
4655
4664
|
),
|
|
4656
4665
|
"centerline_side",
|
|
4657
|
-
|
|
4666
|
+
"side",
|
|
4658
4667
|
)
|
|
4659
4668
|
|
|
4660
4669
|
# Concentric bore leaders to the left of the front view, centred on the axis.
|
|
@@ -4738,21 +4747,21 @@ def render_rotational(dwg, plan, a, *, ctx) -> int:
|
|
|
4738
4747
|
measurement=od_dim.id,
|
|
4739
4748
|
)
|
|
4740
4749
|
n += 1
|
|
4741
|
-
|
|
4750
|
+
_place_axis_centerline(
|
|
4742
4751
|
_global_axis_centerline(
|
|
4743
4752
|
(FX(a.bb.min.X) - 5, FZ(a.cz), 0),
|
|
4744
4753
|
(FX(a.bb.max.X) + 5, FZ(a.cz), 0),
|
|
4745
4754
|
),
|
|
4746
4755
|
"centerline_front",
|
|
4747
|
-
|
|
4756
|
+
"front",
|
|
4748
4757
|
)
|
|
4749
|
-
|
|
4758
|
+
_place_axis_centerline(
|
|
4750
4759
|
_global_axis_centerline(
|
|
4751
4760
|
(PX(a.bb.min.X) - 5, PY(a.cy), 0),
|
|
4752
4761
|
(PX(a.bb.max.X) + 5, PY(a.cy), 0),
|
|
4753
4762
|
),
|
|
4754
4763
|
"centerline_plan",
|
|
4755
|
-
|
|
4764
|
+
"plan",
|
|
4756
4765
|
)
|
|
4757
4766
|
elif axis == "y":
|
|
4758
4767
|
# Horizontal turning axis along Y (#222): the OD is the Z extent — a vertical
|
|
@@ -4774,21 +4783,21 @@ def render_rotational(dwg, plan, a, *, ctx) -> int:
|
|
|
4774
4783
|
measurement=od_dim.id,
|
|
4775
4784
|
)
|
|
4776
4785
|
n += 1
|
|
4777
|
-
|
|
4786
|
+
_place_axis_centerline(
|
|
4778
4787
|
_global_axis_centerline(
|
|
4779
4788
|
(SX(a.bb.min.Y) - 5, SZ(a.cz), 0),
|
|
4780
4789
|
(SX(a.bb.max.Y) + 5, SZ(a.cz), 0),
|
|
4781
4790
|
),
|
|
4782
4791
|
"centerline_side",
|
|
4783
|
-
|
|
4792
|
+
"side",
|
|
4784
4793
|
)
|
|
4785
|
-
|
|
4794
|
+
_place_axis_centerline(
|
|
4786
4795
|
_global_axis_centerline(
|
|
4787
4796
|
(PX(a.cx), PY(a.bb.min.Y) - 5, 0),
|
|
4788
4797
|
(PX(a.cx), PY(a.bb.max.Y) + 5, 0),
|
|
4789
4798
|
),
|
|
4790
4799
|
"centerline_plan",
|
|
4791
|
-
|
|
4800
|
+
"plan",
|
|
4792
4801
|
)
|
|
4793
4802
|
return n
|
|
4794
4803
|
|
|
@@ -4813,6 +4822,8 @@ def render_local_turned_centerlines(dwg, a, *, ctx) -> int:
|
|
|
4813
4822
|
|
|
4814
4823
|
def _place(item, name, view):
|
|
4815
4824
|
nonlocal placed
|
|
4825
|
+
if view not in dwg.views:
|
|
4826
|
+
return
|
|
4816
4827
|
if ctx.registry.named(name) is not None:
|
|
4817
4828
|
return
|
|
4818
4829
|
ctx.place(item, name, view=view)
|