feat: AR-VMS-Seaman initial commit — Python FastAPI + PySide6 (runtime server + desktop studio client)
This commit is contained in:
@@ -73,22 +73,37 @@ class SymbolSpec:
|
||||
|
||||
|
||||
class _BaseSymbol(QGraphicsItemGroup):
|
||||
"""Símbolo base. Subclases dibujan en `_build()`."""
|
||||
"""Símbolo base. Subclases dibujan en `_build()`.
|
||||
|
||||
Cuando el usuario arrastra el símbolo, `itemChange` propaga la nueva
|
||||
posición al `SymbolSpec` para que sobreviva a re-renders del editor.
|
||||
"""
|
||||
|
||||
KIND: ClassVar[str] = "base"
|
||||
|
||||
def __init__(self, spec: SymbolSpec) -> None:
|
||||
super().__init__()
|
||||
# NOTA: asignar self.spec ANTES de setPos para que itemChange tenga
|
||||
# acceso al spec cuando Qt dispare ItemPositionHasChanged durante init.
|
||||
self.spec = spec
|
||||
self.setFlag(QGraphicsItem.ItemIsMovable, True)
|
||||
self.setFlag(QGraphicsItem.ItemIsSelectable, True)
|
||||
self.setFlag(QGraphicsItem.ItemSendsGeometryChanges, True)
|
||||
self.setPos(spec.x, spec.y)
|
||||
self.setRotation(spec.rotation_deg)
|
||||
self.spec = spec
|
||||
self._build()
|
||||
if spec.label:
|
||||
self._add_label(spec.label)
|
||||
|
||||
def itemChange(self, change, value): # type: ignore[override]
|
||||
"""Propaga la posición arrastrada al SymbolSpec en vivo."""
|
||||
if change == QGraphicsItem.GraphicsItemChange.ItemPositionHasChanged:
|
||||
spec = getattr(self, "spec", None)
|
||||
if spec is not None:
|
||||
spec.x = float(self.pos().x())
|
||||
spec.y = float(self.pos().y())
|
||||
return super().itemChange(change, value)
|
||||
|
||||
def _build(self) -> None:
|
||||
raise NotImplementedError
|
||||
|
||||
|
||||
Reference in New Issue
Block a user