LNXSDK/leenkx/blender/lnx/logicnode/draw/LN_draw_image_sequence.py

68 lines
3.2 KiB
Python
Raw Normal View History

2025-01-22 16:18:30 +01:00
from lnx.logicnode.lnx_nodes import *
class DrawImageSequenceNode(LnxLogicTreeNode):
"""Draws a sequence of image (images changing over time). The file names
of images used in a sequence need to follow a certain pattern:
`<prefix><frame-index>.<extension>`, `<prefix>` is an arbitrary filename
that must be constant for the entire sequence, `<frame-index>`
corresponds to the frame number of the image in the sequence.
`<extension>` is the file extension (without a period ".").
Image file names for a valid 2-frame sequence would for example
look like this:
```
myImage1.png
myImage2.png
```
@input Start: Evaluate the image filenames and start the sequence.
If the sequence is currently running, nothing happens. If the
sequence has finished and `Loop` is false, this input restarts
the sequence.
@input Stop: Stops the sequence and its drawing.
@input Image File Prefix: See `<prefix>` above.
@input Image File Extension: See `<extension>` above.
@input Color: The color that the pixels of the images are multiplied with.
@input X/Y: Position of the images, in pixels from the top left corner.
@input Width/Height: Size of the images in pixels. The images
grow towards the bottom right corner.
@input Start Index: The first `<frame-index>` of the sequence (inclusive).
@input End Index: The last `<frame-index>` of the sequence (inclusive).
@input Frame Duration: Duration of a frame in seconds.
@input Loop: Whether the sequence starts again from the first frame after the last frame.
@input Wait For Load: If true, start the sequence only after all
image files have been loaded. If false, the sequence starts immediately,
but images that are not yet loaded are not rendered.
@output On Start: Activated after the sequence has started. This output
is influenced by the `Wait For Load` input.
@output On Stop: Activated if the sequence ends or the `Stop` input
is activated. This is not activated when the sequence restarts
due to looping.
"""
bl_idname = 'LNDrawImageSequenceNode'
bl_label = 'Draw Image Sequence'
lnx_section = 'draw'
lnx_version = 1
def lnx_init(self, context):
self.add_input('LnxNodeSocketAction', 'Start')
self.add_input('LnxNodeSocketAction', 'Stop')
self.add_input('LnxStringSocket', 'Image File Prefix')
self.add_input('LnxStringSocket', 'Image File Extension')
self.add_input('LnxColorSocket', 'Color', default_value=[1.0, 1.0, 1.0, 1.0])
self.add_input('LnxFloatSocket', 'X')
self.add_input('LnxFloatSocket', 'Y')
self.add_input('LnxFloatSocket', 'Width')
self.add_input('LnxFloatSocket', 'Height')
self.add_input('LnxIntSocket', 'Start Index')
self.add_input('LnxIntSocket', 'End Index', default_value=1)
self.add_input('LnxFloatSocket', 'Frame Duration', default_value=1.0)
self.add_input('LnxBoolSocket', 'Loop', default_value=True)
self.add_input('LnxBoolSocket', 'Wait For Load', default_value=True)
self.add_output('LnxNodeSocketAction', 'On Start')
self.add_output('LnxNodeSocketAction', 'On Stop')