7.1 KiB
7.1 KiB
Offene Punkte — bei jedem Start prüfen und abhaken
- Paul / Schutzzaun "Element": In
adesso-cpq/packages/frontend/src/components/building-blocks/ProductBrowser.vueist die kataloggruppeElementimschutzzaun_basicper Filter rausgenommen (TODO (Paul) an der Filterzeile). Element ist kaputt, muss richtig gefixt werden. - Marcel / Selection: In
adesso-cpq/packages/frontend/src/components/visual/DefaultCommandProzessor.tssind für die Eventsselectionundselection-clickFIXME (Marcel)-Kommentare gesetzt. Selection-Logik sauber in den Griff bekommen. - Marcel / Scale-Hack vs. PlacementMode — wie lösen?
Fire3D.vueskaliert perscaleScenejedes Root-Handle mit0.002(Laufzeit). Der PlacementMode überschreibt die Subject-Matrix mitVector3.one(subject.matrix = bestMatrix · dragPointTransform⁻¹); der DragPoint-Transform trägt den FaktorS, sein Inverses1/S, das Subject bekommt1/S→ Geometrie nettoS·1/S = 1→ ~500×. Ergebnis: jeder einheitliche Laufzeit-Scale (Root, Wrapper, „kleine" Selection) überlebt den Snap nicht. Hack und PlacementMode sind auf demselben Subject unvereinbar. Einziger überlebender Wert:S=1, d. h. 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 dafür einen vorgesehenen Mechanismus hat (Unit-SystemunitConverter/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) / Lib-Bug movementMode — an fire-visual melden:
fire-visualthreed/interaction/module/src/interactionMode/movementMode.tsupdateArrowHighlight(Z. 295–299) greift(this.interactionHelperHandle.find('.xy-plane') as Handle).renderer…ohne null-Prüfung zu — während dieselbe Funktion die Achsen (Z. 305–318) sehr wohl absichert (if (!arrowElement) return; if (arrowHandle?.renderer)). Fehlt das Plane-Kind (Gizmo-Helper existiert, Planes weg — z. B. wenn ein vollersetScenedas Gizmo bei aktivem Move abräumt), wirft esCannot read properties of null (reading 'renderer')in jedem rAF-Frame → kompletter Freeze. Lib ist nicht unser Code → upstream an fire-visual: Z. 295–299 konsistent zu Z. 305–318 absichern. Cpq-seitig vorerst umschifft (siehe unten), aber Upstream-Fix nötig. - Marcel (Montag) / funktionierendes Bundle (
@ad/firemit Relations-Resolver): cpq lädt@ad/fire@1.0.5(gebündelt inpackages/runtime/visualviatsup, gelinkt nachpackages/frontend/node_modules/@ad-cpq/visual-runtime). Diese Version hatRelationsFeature+createRelation, aber nichtresolveRelationsbzw. das Commandresolve_relations(im Bundle 0 Vorkommen) — der Resolver kam in der fire-visual-Quelle (~/projects/fire-visual) erst nach 1.0.5 dazu. Folge: das Constraint-Attachment (attachment_relationsmitconstraint_position) wird beim Placement zwar in den Szenegraph geschrieben und die Relation instanziiert, bleibt aber inert (kein Resolver, kein Trigger) → verbundene Teile ziehen beim Move nicht mit. Nötig:@ad/fireauf einen 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: (1) Auto-Trigger fehlt auch in der Quelle —resolveRelationswird nur via Command aufgerufen, 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. (2) Persistenz: aufgelöste Nachbar-Transforms leben in der Engine, nicht im cpq-eventStore → Readback (get_transformation) nötig, sonst Rücksprung beim nächstensetScene. - Marcel / fire-visual — sichtbarer Gap beim Verbau-Ziehen: Beim Ziehen eines verbundenen Teils hängen die Follower sichtbar hinterher. Ursache: der
resolutionSchedulerlöst deferred auf — das gegriffene Teil bewegt der Gizmo im Input/Update-Phase desselben Frames, die Relationen werden aber nur markiert (_onTransformChange) und erst in der Process-Phase (_resolveNow) aufgelöst, also einen Schritt später. Damit trailen die Follower konstant um die Bewegung eines Frames (Gap skaliert mit Ziehgeschwindigkeit; bei Stillstand holen sie im nächsten Frame auf → „im Block"). Kein Timer/Throttle,MAX_ITERATIONS=10. Erwartung: fire-visual soll den Gap rausnehmen (Auflösung synchron zum Move) oder das Nachziehen sauber animieren. Cpq-seitig nicht lösbar ohne den Resolver gegen die Lib synchron zu treiben. - Marcel / fire-visual — Null-Matrix-Crash beim
setScene-Teardown (mit Relationen + Rotation): Nach mehreren Rotationen verbundener Teile (jede über cpq-setScene→ Rebuild) crasht es: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). Ein Collider synchronisiert während/nach demsetScene-Teardown gegen eine bereits abgeräumte/genullte Transform → Null-Matrix → Inverse unmöglich. Reproduzierbar mit aktivenattachment_relations(Position+Rotation) und wiederholtemsetScene; kumulativ (tritt nach einigen Rebuilds auf, gleiche Transform-Paarung). Nicht das Quaternion-Format (valuesist[w,x,y,z], verifiziert) und nicht der Resolver/localA/constraint_rotation(mit vollständigem Constraint-Satz unverändert). Während des Ziehens (Engine-Live-Resolve) ist alles korrekt — nur der cpq-setScene-Rebuild beim Loslassen triggert es. Gleiche Klasse wie der movementMode-null-renderer-Freeze: Lib räumt beim Rebuild nicht sauber ab bzw. der Collider-Sync läuft gegen eine tote Transform. Upstream-Fix nötig. Cpq-seitig vorerst umschifft:handleRotateEndmacht keinsetScenemehr (die Engine hat den Rotations-Endzustand live schon korrekt; Event wird nur recorded). Offen bleibt: ein nachfolgendessetScene(z. B. Placement nach Rotation) replayt die Rotation und könnte denselben Teardown-Crash auslösen — der eigentliche Fix ist upstream oder ein inkrementelles Transform-Update (set_transformation) statt Full-setScenefür Move/Rotate. - cpq / Verbau-Code refactoren (nach den Klärungen):
DefaultCommandProzessor/SceneReplayProcessor/EventStore/eventDataUtilsind über die Klärungsrunden gewachsen (A-Modell: Move-Ende recorded bewegtes Teil + transitive Follower als einepushGroup-Gruppe; Placement schreibt EIN gemeinsamesattachment_relationswegen Clobber imrelationsProcessor; Position-Korrekturpos = event.position − dragPMI-Offset; Subject-Ausschluss in DropPoints via:not). Funktioniert (Kette ≥4, Undo/Redo gruppiert), aber aufräumen.