Implemented Add LED Strip operator
This commit is contained in:
parent
f7a9f6bb55
commit
edd5cba4b6
2 changed files with 109 additions and 2 deletions
1
.gitignore
vendored
Normal file
1
.gitignore
vendored
Normal file
|
@ -0,0 +1 @@
|
||||||
|
__pycache__
|
110
__init__.py
110
__init__.py
|
@ -1,5 +1,111 @@
|
||||||
|
import bpy
|
||||||
|
|
||||||
|
class MESH_OT_led_strip(bpy.types.Operator):
|
||||||
|
"""Add a LED strip"""
|
||||||
|
bl_idname = 'mesh.led_strip'
|
||||||
|
bl_label = 'Add LED Strip'
|
||||||
|
bl_options = { 'REGISTER', 'UNDO' }
|
||||||
|
|
||||||
|
led_num: bpy.props.IntProperty(
|
||||||
|
name = 'Addressable Leds',
|
||||||
|
description = 'Number of addresabble leds in the Strip',
|
||||||
|
default = 60, min = 1, soft_max = 300,
|
||||||
|
)
|
||||||
|
led_model: bpy.props.EnumProperty(
|
||||||
|
name = 'Model',
|
||||||
|
description = 'Led model (ej. WS2812)',
|
||||||
|
items = [
|
||||||
|
('WS2812', 'WS2812', 'Individually addressable'),
|
||||||
|
('WS2811', 'WS2811', 'Addressable every 3'),
|
||||||
|
],
|
||||||
|
default = 'WS2812'
|
||||||
|
)
|
||||||
|
led_density: bpy.props.EnumProperty(
|
||||||
|
name = 'Density',
|
||||||
|
description = 'Leds per meter',
|
||||||
|
items = [
|
||||||
|
('30', '30', '30 leds per meter'),
|
||||||
|
('60', '60', '60 leds per meter'),
|
||||||
|
('144', '144', '144 leds per meter'),
|
||||||
|
],
|
||||||
|
default = '60'
|
||||||
|
)
|
||||||
|
|
||||||
|
@classmethod
|
||||||
|
def poll(cls, context):
|
||||||
|
return context.area.type == 'VIEW_3D'
|
||||||
|
|
||||||
|
def execute(self, context):
|
||||||
|
|
||||||
|
separation = 0.05
|
||||||
|
x_size = (100 - (separation * int(self.led_density))) / int(self.led_density)
|
||||||
|
print(x_size)
|
||||||
|
|
||||||
|
if self.led_model == 'WS2811':
|
||||||
|
x_scale = 3
|
||||||
|
else:
|
||||||
|
x_scale = 1
|
||||||
|
|
||||||
|
last_object = None
|
||||||
|
|
||||||
|
for i in range(self.led_num):
|
||||||
|
x_loc = ((x_size + separation) * x_scale ) * i
|
||||||
|
bpy.ops.mesh.primitive_plane_add(size=1, location=(x_loc, 0, 0))
|
||||||
|
context.active_object.scale.x = x_scale * x_size # 3 leds for WS2811
|
||||||
|
bpy.ops.object.transform_apply()
|
||||||
|
if last_object is not None:
|
||||||
|
last_object.select_set(True)
|
||||||
|
bpy.ops.object.join()
|
||||||
|
last_object = bpy.context.active_object
|
||||||
|
|
||||||
|
context.active_object.name = 'Led Strip ' + \
|
||||||
|
self.led_model + ' ' + \
|
||||||
|
self.led_density + '/m'
|
||||||
|
context.active_object.color = [0.1, 0.1, 0.1, 1.0]
|
||||||
|
bpy.ops.object.transform_apply()
|
||||||
|
|
||||||
|
return {'FINISHED'}
|
||||||
|
|
||||||
|
|
||||||
|
class VIEW3D_PT_lidrop(bpy.types.Panel):
|
||||||
|
bl_space_type = 'VIEW_3D'
|
||||||
|
bl_region_type = 'UI'
|
||||||
|
bl_category = 'LiDrop'
|
||||||
|
bl_label = 'LiDrop'
|
||||||
|
|
||||||
|
def draw(self, context):
|
||||||
|
self.layout.operator('mesh.led_strip',
|
||||||
|
text = 'Add a new LED Strip',
|
||||||
|
icon = 'ONIONSKIN_ON')
|
||||||
|
|
||||||
|
# TODO agregar una propiedad que me diga si el objeto activo es una led strip
|
||||||
|
if context.active_object is not None \
|
||||||
|
and context.active_object.select_get():
|
||||||
|
nombre = context.active_object.name
|
||||||
|
self.layout.label(text = nombre, icon = 'OBJECT_DATA')
|
||||||
|
else:
|
||||||
|
self.layout.label(text = 'No LED strip selected')
|
||||||
|
|
||||||
|
# col = self.layout.column(align = True, heading = 'Light Drops')
|
||||||
|
|
||||||
|
# obj = context.active_object
|
||||||
|
# if obj is not None:
|
||||||
|
# col.prop(context.active_object, 'color') # cuando no tienes nada seleccionado no debería desaparecer
|
||||||
|
|
||||||
|
|
||||||
|
# col.prop(context.space_data.shading, 'color_type')
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
def register():
|
def register():
|
||||||
print("hola mundo")
|
print('Lidrop ON')
|
||||||
|
bpy.utils.register_class(VIEW3D_PT_lidrop)
|
||||||
|
bpy.utils.register_class(MESH_OT_led_strip)
|
||||||
|
|
||||||
|
|
||||||
def unregister():
|
def unregister():
|
||||||
print("Goodbye World")
|
print('Lidrop OFF')
|
||||||
|
bpy.utils.unregister_class(VIEW3D_PT_lidrop)
|
||||||
|
bpy.utils.unregister_class(MESH_OT_led_strip)
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue