What to build
Die 3D-Layer folgt jetzt dem Footprint (ADR-0005), nicht mehr stur EasyEDA. Drei Pfade, ein gemeinsamer Copy-/Reference-Mechanismus.
3D Resolution Order (Phase 2)
- Footprint = Template: parse Template
.kicad_mod für (model "...")-References.
- Pfad löst innerhalb Template-Lib auf → Carry-Over: kopiere File nach
<ActiveLib>.3dshapes/<basename> (idempotent, content-hash-dedupliziert — shared 3D-Files zwischen mehreren Template-FPs landen nur einmal); rewrite Reference auf ${KIPRJMOD}/<ActiveLib>.3dshapes/....
- Pfad ist KiCad-System-Variable (
${KICAD9_3DMODEL_DIR}, ${KISYS3DMOD}) oder absoluter System-Pfad → Reference 1:1 belassen, kein File-Copy.
- Footprint = Template, aber keine
(model ...)-Ref im Template-FP: Fallback auf EasyEDA-3D (alte V2-Logik). EasyEDA-3D wird geladen, in <ActiveLib>.3dshapes/ abgelegt, Reference an Template-FP angehängt.
- Footprint = EasyEDA: EasyEDA-3D wie in V2, in
<ActiveLib>.3dshapes/X.step, Reference applied.
- Keine 3D-Quelle:
no 3D progress message, Footprint ohne Model-Reference geschrieben, kein Fehler.
Implementation notes
- Multiple
(model ...)-References pro Footprint sind möglich (KiCad erlaubt das). Alle behandeln, nicht nur die erste.
- Content-Hash-Dedup heißt: vor dem Copy SHA-256 des Source-Files berechnen; wenn
<ActiveLib>.3dshapes/<basename> schon existiert UND gleiches Hash → skip. Wenn existiert aber anderes Hash → fail (verhindert stilles Überschreiben). User-actionable error.
- Template-Lib-Pfad-Auflösung:
${KIPRJMOD} im Template-FP referenziert die Template-Lib-Root, nicht die Active-Lib. Resolver muss das wissen.
Acceptance criteria
Blocked by
V3 context
- ADR-0005 (3D Layer follows the Footprint)
- V3-SPEC.md §2 (refined: 3D resolution order)
- CONTEXT.md terms: 3D Layer, Template-3D Carry-Over
- Memory:
project_v3_3d_layer.md (updated)
What to build
Die 3D-Layer folgt jetzt dem Footprint (ADR-0005), nicht mehr stur EasyEDA. Drei Pfade, ein gemeinsamer Copy-/Reference-Mechanismus.
3D Resolution Order (Phase 2)
.kicad_modfür(model "...")-References.<ActiveLib>.3dshapes/<basename>(idempotent, content-hash-dedupliziert — shared 3D-Files zwischen mehreren Template-FPs landen nur einmal); rewrite Reference auf${KIPRJMOD}/<ActiveLib>.3dshapes/....${KICAD9_3DMODEL_DIR},${KISYS3DMOD}) oder absoluter System-Pfad → Reference 1:1 belassen, kein File-Copy.(model ...)-Ref im Template-FP: Fallback auf EasyEDA-3D (alte V2-Logik). EasyEDA-3D wird geladen, in<ActiveLib>.3dshapes/abgelegt, Reference an Template-FP angehängt.<ActiveLib>.3dshapes/X.step, Reference applied.no 3Dprogress message, Footprint ohne Model-Reference geschrieben, kein Fehler.Implementation notes
(model ...)-References pro Footprint sind möglich (KiCad erlaubt das). Alle behandeln, nicht nur die erste.<ActiveLib>.3dshapes/<basename>schon existiert UND gleiches Hash → skip. Wenn existiert aber anderes Hash → fail (verhindert stilles Überschreiben). User-actionable error.${KIPRJMOD}im Template-FP referenziert die Template-Lib-Root, nicht die Active-Lib. Resolver muss das wissen.Acceptance criteria
.stepin<ActiveLib>.3dshapes/, korrekte(model ...)-Ref im Footprint. (V2-Verhalten)<ActiveLib>.3dshapes/, Ref rewritten auf${KIPRJMOD}/<ActiveLib>.3dshapes/....<ActiveLib>.3dshapes/, beide Footprints referenzieren es korrekt (content-hash-dedup).${KICAD9_3DMODEL_DIR}/...): Reference 1:1 im geschriebenen Footprint, kein File-Copy.no 3Dprogress, Footprint ohne Model-Ref geschrieben, kein Fehler.Blocked by
V3 context
project_v3_3d_layer.md(updated)