add robert juliat dalis 861

This commit is contained in:
Philipp Kramer 2025-05-26 17:12:37 +02:00
parent 13aee5255b
commit 11aa4c90de
5 changed files with 137 additions and 65 deletions

View file

@ -1,10 +1,11 @@
[gd_scene load_steps=6 format=3 uid="uid://dafh3tlcmos4p"]
[gd_scene load_steps=7 format=3 uid="uid://dafh3tlcmos4p"]
[ext_resource type="Script" uid="uid://bgpsbsunf8fwf" path="res://scripts/artnet.gd" id="1_hsiae"]
[ext_resource type="Texture2D" uid="uid://buuvoh3jf0f52" path="res://sprites/cross.png" id="2_vgkya"]
[ext_resource type="Script" uid="uid://cpncgkw0ns8ry" path="res://scripts/dmx_movinghead.gd" id="3_he00n"]
[ext_resource type="Texture2D" uid="uid://glyt8h1eag1u" path="res://sprites/pixel.png" id="3_qvw8c"]
[ext_resource type="Script" uid="uid://b0qusiobeu8d4" path="res://scripts/dmx_color.gd" id="4_velje"]
[ext_resource type="Script" uid="uid://lkit8whq53i1" path="res://scripts/dmx_direct.gd" id="6_tefeu"]
[node name="Node2D" type="Node2D"]
@ -17,12 +18,22 @@ update_frequency = 40
texture = ExtResource("2_vgkya")
script = ExtResource("3_he00n")
artnet = NodePath("../ArtNet")
output = false
channel_offset = 100
[node name="ColorRect" type="Sprite2D" parent="." node_paths=PackedStringArray("artnet")]
modulate = Color(1, 0.760784, 0, 1)
modulate = Color(0, 0.12549, 1, 1)
position = Vector2(162.125, 549.375)
scale = Vector2(283.75, 328.75)
texture = ExtResource("3_qvw8c")
script = ExtResource("4_velje")
artnet = NodePath("../ArtNet")
output = false
channel_offset = 93
model = 1
[node name="Test" type="Node" parent="." node_paths=PackedStringArray("artnet")]
script = ExtResource("6_tefeu")
artnet = NodePath("../ArtNet")
channel_offset = 93
values = Array[float]([255.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 255.0, 0.0, 0.0, 0.0, 0.0])

View file

@ -29,19 +29,21 @@ func _process(delta: float) -> void:
'''
sendDMX(data)
func setDMXChannel(ch,val,twobytes:bool=false):
func setDMXChannel(ch,val,size:int=8):
if (ch-1>512):
print("DMX Error: Channel out of bounds")
return 0
if (!twobytes):
if (size==8):
if val>255:
print("DMX Error: Value too high")
print("DMX Error: Value too high. CH="+str(ch)+" val="+str(val) )
return 0
data[ch-1]=int(val)
else:
elif (size==16):
data[ch-1]=int(val/256)
data[ch-1+1]=int(val%256)
else:
print("Wrong size. Use 8 or 16 bit.")
return 1

View file

@ -1,29 +1,64 @@
extends Node2D
@export var artnet:Node
# Direct control Colored Light.
# Only One color for whole device.
@export var artnet:Node
@export var output:bool=true
@export_range(0,255,1) var master = 255
@export_range(1,512,1) var channel_offset=1
var colormix=[
[1.0,0,0], #red
[0,1.0,0], #green
[0,0,1.0], #blue
[1.0,1.0,1.0], #white
[1.0,0.8,0], #amber
]
var colorchannels=[3,4,5,6,7] #same order as colormix
var values=[]
enum Model {cameo_clp_flatpro_18, robtertjuliat_dalis_861_fullmode8b}
@export var model: Model
var colormix=[]
var colorchannels=[]
var colorvalues=[]
var fixedchannels=[]
var fixedvalues=[]
func _ready() -> void:
values.resize(colorchannels.size())
if (model==Model.cameo_clp_flatpro_18):
colormix=[
[1.0,0,0], #red
[0,1.0,0], #green
[0,0,1.0], #blue
[1.0,1.0,1.0], #white
[1.0,0.75,0], #amber
]
colorchannels=[3,4,5,6,7] #same order as colormix
fixedchannels=[2,8]
fixedvalues=[0,0]
elif (model==Model.robtertjuliat_dalis_861_fullmode8b):
#https://www.robertjuliat.com/PDF/Documents/DN41108200_m_DALIS_861.pdf
colormix=[
[1.0,0,0], #red
[0,1.0,0], #green
[0,1.0,1.0], #blue (looks cyan)
[0.0,0.0,1.0], #royal blue (looks more blue)
[0,1.0,0.8], #cyan (looks more green)
[1.0,0.75,0], #amber
[1.0,1.0,1.0], #white
[1.0,0.9,0.8], #warm white
]
colorchannels=[2,3,4,5,6,7,8,9] #same order as colormix
fixedchannels=[10,11,12,13]
fixedvalues=[0,0,255,0]
colorvalues.resize(colorchannels.size())
func _process(delta: float) -> void:
var rgb=[modulate.r,modulate.g,modulate.b]
values.fill(0.0)
colorvalues.fill(0.0)
var passes=0
while rgb[0]+rgb[1]+rgb[2]>0.01:
@ -37,29 +72,30 @@ func _process(delta: float) -> void:
var cmixsums_min=matrixMinIndex(cmixsums)
var colormix_min=matrixDivide(rgb,colormix[cmixsums_min]).min()
rgb = matrixSubtract(rgb,matrixMult(colormix[cmixsums_min],colormix_min))
values[cmixsums_min]+=colormix_min
colorvalues[cmixsums_min]+=colormix_min
#print("Result color mix:"+str(values)+" passes="+str(passes)+ " remaining error="+str(rgb[0]+rgb[1]+rgb[2]))
#print("Result color mix:"+str(colorvalues)+" passes="+str(passes)+ " remaining error="+str(rgb[0]+rgb[1]+rgb[2]))
if output:
artnet.setDMXChannel(channel_offset-1+1,master) #master dimmer
artnet.setDMXChannel(channel_offset-1+1,master) #master dimmer
artnet.setDMXChannel(channel_offset-1+2,0) #strobo
artnet.setDMXChannel(channel_offset-1+8,0) #macros
#artnet.setDMXChannel(channel_offset-1+2,0) #strobo
#artnet.setDMXChannel(channel_offset-1+8,0) #macros
var vi=0
for v in values:
artnet.setDMXChannel(channel_offset-1+colorchannels[vi],v*255)
for v in colorvalues:
if output:
artnet.setDMXChannel(channel_offset-1+colorchannels[vi],v*255)
vi+=1
var fi=0
for f in fixedvalues:
if output:
artnet.setDMXChannel(channel_offset-1+fixedchannels[fi],f)
fi+=1
'''
artnet.setDMXChannel(channel_offset-1+3,modulate.r*255) #red
artnet.setDMXChannel(channel_offset-1+4,modulate.g*255) #green
artnet.setDMXChannel(channel_offset-1+5,modulate.b*255) #blue
artnet.setDMXChannel(channel_offset-1+6,modulate.b*255) #white
artnet.setDMXChannel(channel_offset-1+7,modulate.b*255) #amber
'''
func matrixDivide(m1:Array,m2:Array) -> Array:
var res=[]

18
scripts/dmx_direct.gd Normal file
View file

@ -0,0 +1,18 @@
extends Node
@export var artnet:Node
@export var output:bool=true
@export_range(1,512,1) var channel_offset=1
@export_range(0,255,1) var values: Array[float]
func _process(delta: float) -> void:
#https://www.martin.com/en/site_elements/martin-manuals-mac-encore-performance-bedienungsanleitung
var vi=0
for v in values:
if output:
artnet.setDMXChannel(channel_offset-1+ (vi+1),v,8)
vi+=1

View file

@ -2,6 +2,9 @@ extends Node2D
@export var artnet:Node
@export var output:bool=true
@export_range(1,512,1) var channel_offset=1
@export_range(0,255,1) var master = 0
@export_range(0,255,1) var red = 0
@ -16,38 +19,40 @@ func _ready() -> void:
func _process(delta: float) -> void:
#https://www.martin.com/en/site_elements/martin-manuals-mac-encore-performance-bedienungsanleitung
artnet.setDMXChannel(channel_offset-1+1,master,false)
artnet.setDMXChannel(channel_offset-1+2,0,true) #master dimmer
artnet.setDMXChannel(channel_offset-1+4,red,false)
artnet.setDMXChannel(channel_offset-1+5,green,false)
artnet.setDMXChannel(channel_offset-1+6,blue,false)
artnet.setDMXChannel(channel_offset-1+7,0,false) #ctc
artnet.setDMXChannel(channel_offset-1+8,0,false) #farbrad
artnet.setDMXChannel(channel_offset-1+9,0,false) #gobo
artnet.setDMXChannel(channel_offset-1+10,32768,true) #goborad index/ drehung
artnet.setDMXChannel(channel_offset-1+12,0,false) #animationsrad, pos und funktion
artnet.setDMXChannel(channel_offset-1+13,127,false) #animationsrad, index/ drehung
artnet.setDMXChannel(channel_offset-1+14,0,false) #frost
artnet.setDMXChannel(channel_offset-1+15,0,false) #iris
artnet.setDMXChannel(channel_offset-1+16,32768,true) #zoom
artnet.setDMXChannel(channel_offset-1+18,32768,true) #fokus
artnet.setDMXChannel(channel_offset-1+20,0,false) #blendenschieber 1 Pos
artnet.setDMXChannel(channel_offset-1+21,127,false) #blendenschieber 1 Winkel
artnet.setDMXChannel(channel_offset-1+22,0,false) #blendenschieber 2 Pos
artnet.setDMXChannel(channel_offset-1+23,127,false) #blendenschieber 2 Winkel
artnet.setDMXChannel(channel_offset-1+24,0,false) #blendenschieber 3 Pos
artnet.setDMXChannel(channel_offset-1+25,127,false) #blendenschieber 3 Winkel
artnet.setDMXChannel(channel_offset-1+26,0,false) #blendenschieber 4 Pos
artnet.setDMXChannel(channel_offset-1+27,127,false) #blendenschieber 4 Winkel
artnet.setDMXChannel(channel_offset-1+28,127,false) #Index blendenschiebermodul
artnet.setDMXChannel(channel_offset-1+29,pan,true) #Pan (default 32768)
artnet.setDMXChannel(channel_offset-1+31,tilt,true) #Tilt (default 32768)
artnet.setDMXChannel(channel_offset-1+33,0,false) #Gerätesteuerkanal
artnet.setDMXChannel(channel_offset-1+34,0,false) #Fx1
artnet.setDMXChannel(channel_offset-1+35,128,false) #Fx1 geschw
artnet.setDMXChannel(channel_offset-1+36,0,false) #Fx2
artnet.setDMXChannel(channel_offset-1+37,128,false) #Fx2 geschw
artnet.setDMXChannel(channel_offset-1+38,0,false) #FX Sync
if output:
artnet.setDMXChannel(channel_offset-1+1,master,8)
artnet.setDMXChannel(channel_offset-1+2,0,16) #master dimmer
artnet.setDMXChannel(channel_offset-1+4,red,8)
artnet.setDMXChannel(channel_offset-1+5,green,8)
artnet.setDMXChannel(channel_offset-1+6,blue,8)
artnet.setDMXChannel(channel_offset-1+7,0,8) #ctc
artnet.setDMXChannel(channel_offset-1+8,0,8) #farbrad
artnet.setDMXChannel(channel_offset-1+9,0,8) #gobo
artnet.setDMXChannel(channel_offset-1+10,32768,16) #goborad index/ drehung
artnet.setDMXChannel(channel_offset-1+12,0,8) #animationsrad, pos und funktion
artnet.setDMXChannel(channel_offset-1+13,127,8) #animationsrad, index/ drehung
artnet.setDMXChannel(channel_offset-1+14,0,8) #frost
artnet.setDMXChannel(channel_offset-1+15,0,8) #iris
artnet.setDMXChannel(channel_offset-1+16,32768,16) #zoom
artnet.setDMXChannel(channel_offset-1+18,32768,16) #fokus
artnet.setDMXChannel(channel_offset-1+20,0,8) #blendenschieber 1 Pos
artnet.setDMXChannel(channel_offset-1+21,127,8) #blendenschieber 1 Winkel
artnet.setDMXChannel(channel_offset-1+22,0,8) #blendenschieber 2 Pos
artnet.setDMXChannel(channel_offset-1+23,127,8) #blendenschieber 2 Winkel
artnet.setDMXChannel(channel_offset-1+24,0,8) #blendenschieber 3 Pos
artnet.setDMXChannel(channel_offset-1+25,127,8) #blendenschieber 3 Winkel
artnet.setDMXChannel(channel_offset-1+26,0,8) #blendenschieber 4 Pos
artnet.setDMXChannel(channel_offset-1+27,127,8) #blendenschieber 4 Winkel
artnet.setDMXChannel(channel_offset-1+28,127,8) #Index blendenschiebermodul
artnet.setDMXChannel(channel_offset-1+29,pan,16) #Pan (default 32768)
artnet.setDMXChannel(channel_offset-1+31,tilt,16) #Tilt (default 32768)
artnet.setDMXChannel(channel_offset-1+33,0,8) #Gerätesteuerkanal
artnet.setDMXChannel(channel_offset-1+34,0,8) #Fx1
artnet.setDMXChannel(channel_offset-1+35,128,8) #Fx1 geschw
artnet.setDMXChannel(channel_offset-1+36,0,8) #Fx2
artnet.setDMXChannel(channel_offset-1+37,128,8) #Fx2 geschw
artnet.setDMXChannel(channel_offset-1+38,0,8) #FX Sync