Source code for RWESharp.Renderable.Renderable
from __future__ import annotations
from PySide6.QtCore import QPointF, QPoint, QRect
from RWESharp.Modify.Module import Module
from abc import abstractmethod, ABC
from typing import TYPE_CHECKING
[docs]
class Renderable(ABC):
"""Renderable allows for drawing with modules and editors
Simply create `Renderable` connected to the `Module`, and it will be shown on `Viewport`
"""
[docs]
def __init__(self, module: Module, depth: int, add_renderable: bool = True):
self.depth: int = -depth
# self.pos: QPointF = QPointF()
self.offset: QPointF = QPointF()
self.scale = 1
self.opacity = 1
self.module: Module = module
self._graphics_initiated = False
if add_renderable:
self.module.add_renderable(self)
[docs]
def remove_myself(self):
if self.module is None:
return
if self.viewport is not None:
self.remove_graphics(self.viewport)
self.module.renderables.remove(self)
self.module = None
[docs]
@abstractmethod
def init_graphics(self, viewport):
self._graphics_initiated = True
self.move_event()
[docs]
def post_init_graphics(self, viewport):
pass
[docs]
@abstractmethod
def remove_graphics(self, viewport):
self._graphics_initiated = False
[docs]
@abstractmethod
def zoom_event(self):
pass
[docs]
def move_event(self):
pass
@property
def is_initiated_grapgics(self):
return self._graphics_initiated
[docs]
def setPos(self, pos: QPoint | QPointF):
if pos is None:
return
if isinstance(pos, QPoint):
self.offset = pos.toPointF()
return
self.offset = pos
[docs]
def setScale(self, scale):
self.scale = scale
self.zoom_event()
[docs]
def setOpacity(self, opacity):
self.opacity = opacity
@property
def actual_offset(self):
return self.pos + self.offset * self.zoom
@property
def zoom(self) -> float:
if self.viewport is None:
return 1
return self.viewport.zoom
@property
def pos(self) -> QPointF:
if self.viewport is None:
return QPointF(0, 0)
return self.viewport.topleft.pos()
[docs]
def level_resized(self, rect: QRect):
pass
@property
def manager(self):
return self.module.manager
@property
def viewport(self):
return self.module.viewport
@property
def level(self):
return self.module.viewport.level