Phantom 250
Showtec
Christian Nöding
MovingHead mit 14 Kanälen
unit Phantom250;
interface
procedure InitDevice(Device: String);
procedure FormShow;
procedure FormRefresh(channel:Integer);
procedure FormClose;
procedure PositionXYChange(Top, Left: Integer);
procedure ColorBoxChange;
procedure speedsliderchange;
procedure goboboxchange;
procedure gobosliderchange;
procedure shutterboxchange;
procedure lampboxchange;
procedure prismasliderchange;
procedure dimmersliderchange;
procedure effektesliderchange;
procedure fokussliderchange;
procedure rainbowslider;
procedure panfineslider;
procedure tiltfineslider;
implementation
var
// hier können globale Variablen definiert werden
DontRefresh:boolean;
procedure InitDevice(Device: String);
begin
// diese Funktion wird für alle Geräte dieses Typs beim Laden des Projekts ausgeführt.
end;
procedure FormShow;
begin
// diese Funktion wird bei jedem Laden der Form ausgeführt.
end;
procedure FormRefresh(channel:Integer);
var
Wert:integer;
r,phi,temp:single;
begin
if not DontRefresh then
case channel of
0..3: // PAN/TILT
begin
if usemhcontrol.checked then
begin
// Moving-Head-Steuerung
temp:=get_channel('tilt')+(get_channel('tiltfine')/256);
case round(temp) of
0..127: r:=((127-temp)/127);
128..255: r:=((temp-128)/127);
end;
phi:=(get_channel('pan')+(get_channel('panfine')/256))/255*6.283185307179586476925286766559; //(X/255)*PI
PositionXY.Left:=round(r*sin(phi)*(Fadenkreuz.Width/2)+(Fadenkreuz.Width/2)-(PositionXY.Width div 2));
PositionXY.Top:=round(r*cos(phi)*(Fadenkreuz.Height/2)+(Fadenkreuz.Height/2)-(PositionXY.Width div 2));
end else
begin
// Scanner-Steuerung
PositionXY.Left:=round(Fadenkreuz.Width * (get_channel('pan')+get_channel('panfine')/256)/255)-(PositionXY.Width div 2);
PositionXY.Top:=round(Fadenkreuz.Height * (get_channel('tilt')+get_channel('tiltfine')/256)/255)-(PositionXY.Height div 2);
end;
end;
4: // Speed
begin
speedslider.position:=get_channel('speed');
end;
5: // Color
begin
wert:=get_channel('color1');
case wert of
0..5: colorbox.itemindex:=0;
15..15: colorbox.itemindex:=1;
23..23: colorbox.itemindex:=2;
31..31: colorbox.itemindex:=3;
38..38: colorbox.itemindex:=4;
45..45: colorbox.itemindex:=5;
55..55: colorbox.itemindex:=6;
62..62: colorbox.itemindex:=7;
end;
end;
6: // Gobo
begin
wert:=get_channel('gobo1');
case wert of
0..9: gobobox.itemindex:=0;
10..19: gobobox.itemindex:=1;
20..29: gobobox.itemindex:=2;
30..39: gobobox.itemindex:=3;
40..49: gobobox.itemindex:=4;
50..59: gobobox.itemindex:=5;
60..69: gobobox.itemindex:=6;
70..79: gobobox.itemindex:=7;
end;
end;
7: // Rotation
begin
goboslider.position:=get_channel('gobo1rot');
end;
8: // Shutter
begin
wert:=get_channel('shutter');
case wert of
0..7: shutterbox.itemindex:=0;
8..22: shutterbox.itemindex:=1;
23..50: shutterbox.itemindex:=2;
51..85: shutterbox.itemindex:=3;
101..130: shutterbox.itemindex:=4;
131..165: shutterbox.itemindex:=5;
181..210: shutterbox.itemindex:=6;
211..245: shutterbox.itemindex:=7;
end;
end;
9: // Dimmer
begin
dimmerslider.position:=get_channel('dimmer');
end;
10: // Einstellungen
begin
wert:=get_channel('special1');
case wert of
0..9: lampbox.itemindex:=0;
10..19: lampbox.itemindex:=1;
20..99: lampbox.itemindex:=0;
100..109: lampbox.itemindex:=2;
110..129: lampbox.itemindex:=0;
130..145: lampbox.itemindex:=3;
146..161: lampbox.itemindex:=4;
162..177: lampbox.itemindex:=5;
178..193: lampbox.itemindex:=6;
194..209: lampbox.itemindex:=7;
210..225: lampbox.itemindex:=8;
226..241: lampbox.itemindex:=9;
242..255: lampbox.itemindex:=10;
end;
end;
11: // Effekte
begin
effekteslider.position:=get_channel('special2');
end;
12: // Prisma
begin
prismaslider.position:=get_channel('prisma');
end;
13: // Fokus
begin
fokusslider.position:=get_channel('focus');
end;
end;
DontRefresh:=false;
end;
procedure FormClose;
begin
// diese Funktion wird bei jedem Schließen der Form ausgeführt.
end;
procedure PositionXYChange(Top, Left: Integer);
var
phi,r,x,y:single;
pan, tilt, panfine, tiltfine:single;
begin
if usemhcontrol.checked then
begin
// Moving-Head-Steuerung (Polarkoordinaten)
x:=((PositionXY.Left+(PositionXY.Width div 2)-(fadenkreuz.Width/2))/fadenkreuz.Width)*2; //-1..0..1
y:=((PositionXY.Top+(PositionXY.Height div 2)-(fadenkreuz.Width/2))/fadenkreuz.Height)*2; //-1..0..1
r:=sqrt(x*x+y*y);
if (r>0) then
begin
if (y>=0) then
phi:=arccos(x/r)
else
phi:=6.283185307179586476925286766559-arccos(x/r);
end else
phi:=64;
r:=128-((r/2)*255);
phi:=(phi/6.283185307179586476925286766559)*255;
if 64>=phi then
phi:=phi+191
else
phi:=phi-64;
pan:=255-phi;
tilt:=255-r;
end else
begin
// Scannersteuerung (Kartesische Koordinaten)
pan:=((PositionXY.Left+(PositionXY.Width div 2))/fadenkreuz.Width)*255;
tilt:=((PositionXY.Top+(PositionXY.Height div 2))/fadenkreuz.Height)*255;
end;
// Ausgabe
if panmirror.checked then
begin
dontrefresh:=true;
set_channel('pan',trunc(255-pan),trunc(255-pan),0);
dontrefresh:=true;
set_channel('panfine',trunc(frac(255-pan)*255),trunc(frac(255-pan)*255),0);
end else
begin
dontrefresh:=true;
set_channel('pan',trunc(pan),trunc(pan),0);
dontrefresh:=true;
set_channel('panfine',trunc(frac(pan)*255),trunc(frac(pan)*255),0);
end;
if tiltmirror.checked then
begin
dontrefresh:=true;
set_channel('tilt',trunc(255-tilt),trunc(255-tilt),0);
dontrefresh:=true;
set_channel('tiltfine',trunc(frac(255-tilt)*255),trunc(frac(255-tilt)*255),0);
end else
begin
dontrefresh:=true;
set_channel('tilt',trunc(tilt),trunc(tilt),0);
dontrefresh:=true;
set_channel('tiltfine',trunc(frac(tilt)*255),trunc(frac(tilt)*255),0);
end;
end;
procedure ColorBoxChange;
begin
// Werten Sie hier die eingestellte Farbe der Farbbox aus. z.B. wie folgt:
case colorbox.itemindex of
0: set_channel('COLOR1', -1, 0, 0);
1: set_channel('COLOR1', -1, 15, 0);
2: set_channel('COLOR1', -1, 23, 0);
3: set_channel('COLOR1', -1, 31, 0);
4: set_channel('COLOR1', -1, 38, 0);
5: set_channel('COLOR1', -1, 45, 0);
6: set_channel('COLOR1', -1, 55, 0);
7: set_channel('COLOR1', -1, 62, 0);
end;
end;
procedure speedsliderchange;
begin
DontRefresh:=true;
set_channel('speed',-1,speedslider.position,0,0);
end;
procedure goboboxchange;
begin
DontRefresh:=true;
case gobobox.itemindex of
0: set_channel('gobo1', -1, 0, 0);
1: set_channel('gobo1', -1, 10, 0);
2: set_channel('gobo1', -1, 20, 0);
3: set_channel('gobo1', -1, 30, 0);
4: set_channel('gobo1', -1, 40, 0);
5: set_channel('gobo1', -1, 50, 0);
6: set_channel('gobo1', -1, 60, 0);
7: set_channel('gobo1', -1, 70, 0);
end;
end;
procedure gobosliderchange;
begin
DontRefresh:=true;
set_channel('gobo1rot',-1,goboslider.position,0,0);
end;
procedure shutterboxchange;
begin
Dontrefresh:=true;
case shutterbox.itemindex of
0: set_channel('shutter', -1, 0, 0);
1: set_channel('shutter', -1, 8, 0);
2: set_channel('shutter', -1, 23, 0);
3: set_channel('shutter', -1, 85, 0);
4: set_channel('shutter', -1, 101, 0);
5: set_channel('shutter', -1, 165, 0);
6: set_channel('shutter', -1, 181, 0);
7: set_channel('shutter', -1, 245, 0);
end;
end;
procedure lampboxchange;
begin
DontRefresh:=true;
case lampbox.itemindex of
0: set_channel('special1', -1, 0, 0);
1: set_channel('special1', -1, 10, 0);
2: set_channel('special1', -1, 100, 0);
3: set_channel('special1', -1, 130, 0);
4: set_channel('special1', -1, 146, 0);
5: set_channel('special1', -1, 162, 0);
6: set_channel('special1', -1, 178, 0);
7: set_channel('special1', -1, 194, 0);
8: set_channel('special1', -1, 210, 0);
9: set_channel('special1', -1, 226, 0);
10: set_channel('special1', -1, 242, 0);
end;
end;
procedure prismasliderchange;
begin
DontRefresh:=true;
set_channel('prisma',-1,prismaslider.position,0,0);
end;
procedure dimmersliderchange;
begin
DontRefresh:=true;
set_channel('dimmer',-1,dimmerslider.position,0,0);
end;
procedure effektesliderchange;
begin
DontRefresh:=true;
set_channel('special2',-1,effekteslider.position,0,0);
end;
procedure fokussliderchange;
begin
DontRefresh:=true;
set_channel('focus',-1,fokusslider.position,0,0);
end;
procedure rainbowslider;
begin
DontRefresh:=true;
set_channel('COLOR1',-1,RainbowSlider4.position,0);
end;
procedure panfineslider;
begin
DontRefresh:=true;
set_channel('PanFine',-1,PanFineSlider.position,0);
end;
procedure tiltfineslider;
begin
DontRefresh:=true;
set_channel('TiltFine',-1,TiltFineSlider.position,0);
end;
end.