7.2 KiB
7.2 KiB
Offene Punkte — bei jedem Start prüfen und abhaken
Reihenfolge: Paul · Marcel (fire-visual / Bundle) · cpq.
Paul
[ ] Schutzzaun „Element" kaputt
- Wo:
adesso-cpq/packages/frontend/src/components/building-blocks/ProductBrowser.vue, Filterzeile (TODO (Paul)). - Stand: Kataloggruppe
Elementimschutzzaun_basicper Filter rausgenommen. - Nötig: Element richtig fixen statt ausfiltern.
Marcel — cpq-Selection
[ ] Selection-Logik
- Wo:
adesso-cpq/packages/frontend/src/components/visual/DefaultCommandProzessor.ts, Eventsselection/selection-click(FIXME (Marcel)). - Nötig: Selection-Logik sauber in den Griff bekommen.
Marcel — Scale
[ ] Scale-Hack vs. PlacementMode — wie lösen?
- Hack:
Fire3D.vueskaliert perscaleScenejedes Root-Handle zur Laufzeit mit0.002. - Konflikt: PlacementMode überschreibt die Subject-Matrix mit
Vector3.one(subject.matrix = bestMatrix · dragPointTransform⁻¹). DragPoint-Transform trägtS, sein Inverses1/S, Subject bekommt1/S→ Geometrie nettoS·1/S = 1→ ~500×. - Folge: Jeder einheitliche Laufzeit-Scale (Root, Wrapper, „kleine" Selection) überlebt den Snap nicht. Hack und PlacementMode sind auf demselben Subject unvereinbar.
- Einzige überlebende Lösung:
S=1, also reale kleine Koordinaten in den Daten selbst — Geometrie und PMIs konsistent, kein Laufzeit-Scale — plus Kamera-Config (camera-controllerdefaultPosition/fixPoint, Ortho-Frustum auf mm). - Offen/ungeprüft: Ob fire-visual einen vorgesehenen Mechanismus hat (Unit-System
unitConverter/environment.units; FBXUnitScaleFactorgreift bisher nur beim Import, nicht auf fertige JSON-SceneGraphen). - Entscheidung nötig: Daten in realer Einheit liefern vs. Lib-Eingriff (PlacementMode behält Subject-Scale).
Marcel (Montag) — fire-visual
[ ] Lib-Bug movementMode — an fire-visual melden
- Wo:
fire-visualthreed/interaction/module/src/interactionMode/movementMode.ts,updateArrowHighlight. - Bug: Z. 295–299 greift
(this.interactionHelperHandle.find('.xy-plane') as Handle).renderer…ohne null-Prüfung — die Achsen (Z. 305–318) sind dagegen abgesichert (if (!arrowElement) return; if (arrowHandle?.renderer)). - Trigger: Plane-Kind fehlt (Gizmo-Helper existiert, Planes weg — z. B. wenn ein voller
setScenedas Gizmo bei aktivem Move abräumt) →Cannot read properties of null (reading 'renderer')in jedem rAF-Frame → kompletter Freeze. - Fix: Upstream — Z. 295–299 konsistent zu Z. 305–318 absichern.
- Stand: Cpq-seitig vorerst umschifft, Upstream-Fix trotzdem nötig.
[ ] Funktionierendes Bundle (@ad/fire mit Relations-Resolver)
- Ist: cpq lädt
@ad/fire@1.0.5(gebündelt inpackages/runtime/visualviatsup, gelinkt nachpackages/frontend/node_modules/@ad-cpq/visual-runtime). - Lücke: 1.0.5 hat
RelationsFeature+createRelation, aber nichtresolveRelations/ Commandresolve_relations(im Bundle 0 Vorkommen) — der Resolver kam in der fire-visual-Quelle (~/projects/fire-visual) erst nach 1.0.5 dazu. - Folge:
attachment_relations(mitconstraint_position) wird beim Placement zwar geschrieben und die Relation instanziiert, bleibt aber inert (kein Resolver, kein Trigger) → verbundene Teile ziehen beim Move nicht mit. - Nötig:
@ad/fireauf Stand mit Resolver bringen — fire-visual lokal bauen (build:local, yarn-workspaces-Monorepo) → neues@ad/fire, cpq's@ad/fire@1.0.5darauf umbiegen (pnpm-override /file:-Link),packages/runtime/visualneu bauen. Achtung API-Drift neuere fire-visual vs. cpq/Runtime. - Zusätzlich offen, sobald Resolver da:
- Auto-Trigger fehlt auch in der Quelle —
resolveRelationsnur via Command, kein Update-Hook/Transform-Abo; sauber wäre der Trigger im Move-/Placement-Mode der Engine (mit gezogenem Teil gepinnt), sonst muss cpq es von außen treiben. - Persistenz — aufgelöste Nachbar-Transforms leben in der Engine, nicht im cpq-eventStore → Readback (
get_transformation) nötig, sonst Rücksprung beim nächstensetScene.
- Auto-Trigger fehlt auch in der Quelle —
[ ] Sichtbarer Gap beim Verbau-Ziehen
- Symptom: Beim Ziehen eines verbundenen Teils hängen die Follower sichtbar hinterher.
- Ursache:
resolutionSchedulerlöst deferred auf — das gegriffene Teil bewegt der Gizmo in der Input/Update-Phase desselben Frames, die Relationen werden nur markiert (_onTransformChange) und erst in der Process-Phase (_resolveNow) aufgelöst, also einen Schritt später. - Effekt: Follower trailen konstant um eine Frame-Bewegung (Gap skaliert mit Ziehgeschwindigkeit; bei Stillstand holen sie im nächsten Frame auf → „im Block"). Kein Timer/Throttle,
MAX_ITERATIONS=10. - Erwartung: fire-visual nimmt den Gap raus (Auflösung synchron zum Move) oder animiert das Nachziehen sauber.
- Stand: Cpq-seitig nicht lösbar ohne den Resolver gegen die Lib synchron zu treiben.
[ ] Null-Matrix-Crash beim setScene-Teardown (Relationen + Rotation)
- Symptom: Nach mehreren Rotationen verbundener Teile (jede über cpq-
setScene→ Rebuild):Uncaught Error: Matrix4_4(...zeros...) - inverse: can't be calculatedinVolumeContext.updateWTL←ColliderComponent.syncTransformation←SynchronizeQueue.process← rAF, jeden Frame → Freeze. Davor flutet der Log mitFeatureComponent - deregister(Teardown der alten Szene). - Ursache: Ein Collider synchronisiert während/nach dem
setScene-Teardown gegen eine bereits abgeräumte/genullte Transform → Null-Matrix → Inverse unmöglich. - Repro: Aktive
attachment_relations(Position+Rotation) + wiederholtessetScene; kumulativ (nach einigen Rebuilds, gleiche Transform-Paarung). - Ausgeschlossen: Nicht das Quaternion-Format (
values=[w,x,y,z], verifiziert), nicht Resolver/localA/constraint_rotation(mit vollständigem Constraint-Satz unverändert). Während des Ziehens (Engine-Live-Resolve) alles korrekt — nur der cpq-setScene-Rebuild beim Loslassen triggert es. - Einordnung: Gleiche Klasse wie der movementMode-null-renderer-Freeze — Lib räumt beim Rebuild nicht sauber ab bzw. Collider-Sync läuft gegen tote Transform. Upstream-Fix nötig.
- Stand: Cpq-seitig umschifft —
handleRotateEndmacht keinsetScenemehr (Engine hat den Rotations-Endzustand live korrekt; Event wird nur recorded). - Offen: Ein nachfolgendes
setScene(z. B. Placement nach Rotation) replayt die Rotation und könnte denselben Crash auslösen. Eigentlicher Fix: upstream oder inkrementelles Transform-Update (set_transformation) statt Full-setScenefür Move/Rotate.
cpq
[ ] Verbau-Code refactoren (nach den Klärungen)
- Wo:
DefaultCommandProzessor/SceneReplayProcessor/EventStore/eventDataUtil. - Gewachsen über die Klärungsrunden (A-Modell):
- Move-Ende recorded bewegtes Teil + transitive Follower als eine
pushGroup-Gruppe. - Placement schreibt EIN gemeinsames
attachment_relations(wegen Clobber imrelationsProcessor). - Position-Korrektur
pos = event.position − dragPMI-Offset. - Subject-Ausschluss in DropPoints via
:not.
- Move-Ende recorded bewegtes Teil + transitive Follower als eine
- Stand: Funktioniert (Kette ≥4, Undo/Redo gruppiert), aber aufräumen.