PHS-250
Futurelight
Hantschel
PHS-250
unit NewDeviceUnit;
interface
procedure InitDevice(Device: String);
procedure FormShow;
procedure FormRefresh(channel:Integer);
procedure FormClose;
procedure PositionXYChange(Top, Left: Integer);
procedure SPEEDchange;
procedure ColorBoxChange;
procedure GOBO1change;
procedure GOBO2change;
procedure GOBO2ROTchange;
procedure PRISMAchange;
procedure FOCUSchange;
procedure SHUTTERchange;
procedure DIMMERchange;
procedure EXTRAchange;
procedure DoReset;
procedure DoLampOn;
procedure DoLampOff;
procedure DoShutterClose;
procedure DoShutterOpen;
procedure ShutterLinear;
procedure ShutterRandom;
implementation
var
DontRefresh:boolean;
procedure InitDevice(Device: String);
begin
end;
procedure FormShow;
begin
end;
procedure FormRefresh(channel:Integer);
var
Value:integer;
r,phi,temp:Double;
begin
if not DontRefresh then
case channel of
0:
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;
1:
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;
2:
begin
SPEEDslider2.position:=get_channel('SPEED');
end;
3:
begin
value:=get_channel('color1');
case value of
0..13: colorbox.itemindex:=0;
14..27: colorbox.itemindex:=1;
28..41: colorbox.itemindex:=2;
42..55: colorbox.itemindex:=3;
56..69: colorbox.itemindex:=4;
70..83: colorbox.itemindex:=5;
84..97: colorbox.itemindex:=6;
98..111: colorbox.itemindex:=7;
0..0: colorbox.itemindex:=8;
129..188: colorbox.itemindex:=9;
189..194: colorbox.itemindex:=10;
195..255: colorbox.itemindex:=11;
end;
end;
4:
begin
value:=get_channel('gobo1');
case value of
0..13: gobobox1.itemindex:=0;
14..27: gobobox1.itemindex:=1;
28..41: gobobox1.itemindex:=2;
42..55: gobobox1.itemindex:=3;
56..69: gobobox1.itemindex:=4;
70..83: gobobox1.itemindex:=5;
84..97: gobobox1.itemindex:=6;
98..111: gobobox1.itemindex:=7;
end;
end;
5:
begin
value:=get_channel('gobo2');
case value of
0..31: gobobox2.itemindex:=0;
32..63: gobobox2.itemindex:=1;
64..95: gobobox2.itemindex:=2;
96..127: gobobox2.itemindex:=3;
128..159: gobobox2.itemindex:=4;
160..191: gobobox2.itemindex:=5;
255..223: gobobox2.itemindex:=6;
end;
end;
6:
begin
GOBO2ROTslider6.position:=get_channel('GOBO2ROT');
end;
7:
begin
PRISMAslider7.position:=get_channel('PRISMA');
end;
8:
begin
FOCUSslider8.position:=get_channel('FOCUS');
end;
9:
begin
SHUTTERsliderlinear.position:=get_channel('SHUTTER');
end;
10:
begin
SHUTTERsliderrandom.position:=get_channel('SHUTTER');
end;
11:
begin
DIMMERslider10.position:=get_channel('DIMMER');
end;
end;
DontRefresh:=false;
end;
procedure FormClose;
begin
end;
procedure PositionXYChange(Top, Left: Integer);
var
phi,r,x,y:Double;
pan, tilt, panfine, tiltfine:Double;
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 SPEEDchange;
begin
DontRefresh:=true;
set_channel('SPEED',-1,SPEEDslider2.position,0);
end;
procedure ColorBoxChange;
begin
case colorbox.itemindex of
0: set_channel('color1', -1, 0, 0);
1: set_channel('color1', -1, 14, 0);
2: set_channel('color1', -1, 28, 0);
3: set_channel('color1', -1, 42, 0);
4: set_channel('color1', -1, 56, 0);
5: set_channel('color1', -1, 70, 0);
6: set_channel('color1', -1, 84, 0);
7: set_channel('color1', -1, 98, 0);
8: set_channel('color1', -1, 0, 0);
9: set_channel('color1', -1, 129, 0);
10: set_channel('color1', -1, 189, 0);
11: set_channel('color1', -1, 195, 0);
end;
end;
procedure GOBO1change;
begin
case gobobox1.itemindex of
0:
begin
set_channel('gobo1',0,0,0);
end;
1:
begin
if goboshakeon.checked then
set_channel('gobo1',112+goboshakeslider.position,112+goboshakeslider.position,0)
else
set_channel('gobo1',14,14,0);
end;
2:
begin
if goboshakeon.checked then
set_channel('gobo1',128+goboshakeslider.position,128+goboshakeslider.position,0)
else
set_channel('gobo1',28,28,0);
end;
3:
begin
if goboshakeon.checked then
set_channel('gobo1',144+goboshakeslider.position,144+goboshakeslider.position,0)
else
set_channel('gobo1',42,42,0);
end;
4:
begin
if goboshakeon.checked then
set_channel('gobo1',160+goboshakeslider.position,160+goboshakeslider.position,0)
else
set_channel('gobo1',56,56,0);
end;
5:
begin
if goboshakeon.checked then
set_channel('gobo1',176+goboshakeslider.position,176+goboshakeslider.position,0)
else
set_channel('gobo1',70,70,0);
end;
6:
begin
if goboshakeon.checked then
set_channel('gobo1',192+goboshakeslider.position,192+goboshakeslider.position,0)
else
set_channel('gobo1',84,84,0);
end;
7:
begin
if goboshakeon.checked then
set_channel('gobo1',208+goboshakeslider.position,208+goboshakeslider.position,0)
else
set_channel('gobo1',98,98,0);
end;
end;
end;
procedure GOBO2change;
begin
case gobobox2.itemindex of
0: set_channel('gobo2', -1, 0, 0);
1: set_channel('gobo2', -1, 32, 0);
2: set_channel('gobo2', -1, 64, 0);
3: set_channel('gobo2', -1, 96, 0);
4: set_channel('gobo2', -1, 128, 0);
5: set_channel('gobo2', -1, 160, 0);
6: set_channel('gobo2', -1, 255, 0);
end;
end;
procedure GOBO2ROTchange;
begin
DontRefresh:=true;
set_channel('GOBO2ROT',-1,GOBO2ROTslider6.position,0);
end;
procedure PRISMAchange;
begin
DontRefresh:=true;
set_channel('PRISMA',-1,PRISMAslider7.position,0);
end;
procedure FOCUSchange;
begin
DontRefresh:=true;
set_channel('FOCUS',-1,FOCUSslider8.position,0);
end;
procedure SHUTTERchange;
begin
dontrefresh:=true;
case shutterbox.itemindex of
0:
begin
set_channel('shutter',0,0,0);
end;
1:
begin
set_channel('shutter',35,35,0);
end;
2:
begin
set_channel('shutter',0+shuttersliderlinear.position,0+shuttersliderlinear.position,0);
end;
3:
begin
set_channel('shutter',0+shuttersliderrandom.position,0+shuttersliderrandom.position,0);
end;
end;
end;
procedure DIMMERchange;
begin
DontRefresh:=true;
set_channel('DIMMER',-1,DIMMERslider10.position,0);
end;
procedure EXTRAchange;
begin
DontRefresh:=true;
set_channel('EXTRA',-1,EXTRAslider11.position,0);
end;
procedure DoReset;
begin
if MessageDlg('Soll das Gerät resettet werden?',mtConfirmation,[mbYes,mbNo],0)=mrYes then
begin
set_channel('extra',45,45,0);
ShowMessage('Klicken Sie auf "OK", wenn der Resetvorgang begonnen hat...');
set_channel('extra',0,0,0);
end;
end;
procedure DoLampOn;
begin
if MessageDlg('Soll die Lampe eingeschaltet werden?',mtConfirmation,[mbYes,mbNo],0)=mrYes then
begin
set_channel('extra',25,25,0);
set_channel('shutter',0,0,0);
ShowMessage('Klicken Sie auf "OK", wenn die Lampe gezündet hat...');
set_channel('extra',0,0,0);
end;
end;
procedure DoLampOff;
begin
if MessageDlg('Soll die Lampe ausgeschaltet werden?',mtConfirmation,[mbYes,mbNo],0)=mrYes then
begin
set_channel('extra',230,230,0);
set_channel('shutter',0,0,0);
ShowMessage('Klicken Sie auf "OK", wenn die Lampe aus ist...');
set_channel('extra',0,0,0);
end;
end;
procedure DoShutterClose;
begin
set_channel('shutter',0,0,0);
end;
procedure DoShutterOpen;
begin
set_channel('shutter',33,33,0);
end;
procedure ShutterLinear;
begin
DontRefresh:=true;
set_channel('Shutter',-1,shuttersliderlinear.position,0);
end;
procedure ShutterRandom;
begin
DontRefresh:=true;
set_channel('Shutter',-1,shuttersliderrandom.position,0);
end;
end.