PerforatedVertexState
Base class for all perforated shapes (shapes with holes)
Perforated shapes have an outer contour (defined by subclass) and zero or more vertex loops (specified via Shape objects). Subclasses implement _generate_outer_contour() to define their specific outer shape geometry (circle, star, ellipse, etc.). Visual attributes (fill_color, stroke_color, etc.) are inherited from VertexState and apply to the entire perforated shape uniformly.
Constructor
PerforatedVertexState(
pos: Optional[Point2D] = None,
scale: Optional[float] = None,
opacity: Optional[float] = None,
rotation: Optional[float] = None,
skew_x: Optional[float] = None,
skew_y: Optional[float] = None,
clip_state: Optional[State] = None,
mask_state: Optional[State] = None,
clip_states: Optional[List[State]] = None,
mask_states: Optional[List[State]] = None,
filter: Optional[Filter] = None,
NON_INTERPOLATABLE_FIELDS: frozenset[str] = frozenset({'DEFAULT_EASING', 'NON_INTERPOLATABLE_FIELDS'}),
fill_color: Optional[Color] = Color.NONE,
fill_opacity: float = 1,
fill_gradient: Optional[Gradient] = None,
fill_pattern: Optional[Pattern] = None,
stroke_color: Optional[Color] = Color.NONE,
stroke_opacity: float = 1,
stroke_width: float = 1,
stroke_gradient: Optional[Gradient] = None,
stroke_pattern: Optional[Pattern] = None,
closed: bool = True,
_num_vertices: Optional[int] = None,
_aligned_contours: Optional[VertexContours] = None,
holes: List[Shape] = <factory>,
holes_fill_color: Optional[Color] = Color.NONE,
holes_fill_opacity: Optional[float] = 0,
holes_stroke_color: Optional[Color] = Color.NONE,
holes_stroke_opacity: Optional[float] = None,
holes_stroke_width: Optional[float] = None
) -> None
Methods
get_contours
get_contours()
Get contours for this shape
get_renderer_class
get_renderer_class()
Get the primitive renderer for static/keystate rendering
get_vertex_renderer_class
get_vertex_renderer_class()
Get the vertex renderer for morphing transitions
get_vertices
get_vertices()
Get outer contour vertices (backwards compatibility)
is_angle
is_angle(field: field)
need_morph
need_morph(state)
with_x
with_x(x: float) -> State
with_y
with_y(y: float) -> State
Properties
xy