TMH X-4
Eurolite
Klaus
Eurolite TMH X-4
unit NewDeviceUnit;
interface
procedure InitDevice(Device: String);
procedure FormShow;
procedure FormRefresh(channel:Integer);
procedure FormClose;
procedure PositionXYChange(Top, Left: Integer);
procedure PANFINEchange;
procedure TILTFINEchange;
procedure SPEEDchange;
procedure PositionXYChange(Top, Left: Integer);
procedure panfinechange;
procedure tiltfinechange;
procedure speedchange;
procedure zoomchange;
procedure dimmerchange;
procedure shutterchange;
procedure ColorPickerChange(R, G, B: Byte);
procedure SwitchColorPicker;
procedure wchange;
procedure wchange;
procedure Wchange;
procedure EXTRAchange;
procedure SPEEDchange;
procedure SPECIAL1change;
procedure SPECIAL2change;
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
panfineslider1.position:=get_channel('panfine');
end;
2:
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;
3:
begin
tiltfineslider3.position:=get_channel('tiltfine');
end;
4:
begin
speedslider4.position:=get_channel('speed');
end;
5:
begin
zoomslider5.position:=get_channel('zoom');
end;
6:
begin
dimmerslider6.position:=get_channel('dimmer');
end;
7:
begin
shutterslider7.position:=get_channel('shutter');
end;
8:
begin
// RGB-Änderungen werden derzeit nicht im DDF angezeigt
end;
9:
begin
// RGB-Änderungen werden derzeit nicht im DDF angezeigt
end;
10:
begin
// RGB-Änderungen werden derzeit nicht im DDF angezeigt
end;
11:
begin
wslider11.position:=get_channel('w');
end;
12:
begin
// RGB-Änderungen werden derzeit nicht im DDF angezeigt
end;
13:
begin
// RGB-Änderungen werden derzeit nicht im DDF angezeigt
end;
14:
begin
// RGB-Änderungen werden derzeit nicht im DDF angezeigt
end;
15:
begin
wslider15.position:=get_channel('w');
end;
16:
begin
// RGB-Änderungen werden derzeit nicht im DDF angezeigt
end;
17:
begin
// RGB-Änderungen werden derzeit nicht im DDF angezeigt
end;
18:
begin
// RGB-Änderungen werden derzeit nicht im DDF angezeigt
end;
19:
begin
Wslider19.position:=get_channel('W');
end;
20:
begin
EXTRAslider20.position:=get_channel('EXTRA');
end;
21:
begin
SPEEDslider21.position:=get_channel('SPEED');
end;
22:
begin
SPECIAL1slider22.position:=get_channel('SPECIAL1');
end;
23:
begin
SPECIAL2slider23.position:=get_channel('SPECIAL2');
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 PANFINEchange;
begin
DontRefresh:=true;
set_channel('PANFINE',-1,PANFINEslider1.position,0);
end;
procedure TILTFINEchange;
begin
DontRefresh:=true;
set_channel('TILTFINE',-1,TILTFINEslider3.position,0);
end;
procedure SPEEDchange;
begin
DontRefresh:=true;
set_channel('SPEED',-1,SPEEDslider4.position,0);
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 panfinechange;
begin
DontRefresh:=true;
set_channel('panfine',-1,panfineslider1.position,0);
end;
procedure tiltfinechange;
begin
DontRefresh:=true;
set_channel('tiltfine',-1,tiltfineslider3.position,0);
end;
procedure speedchange;
begin
DontRefresh:=true;
set_channel('speed',-1,speedslider4.position,0);
end;
procedure zoomchange;
begin
DontRefresh:=true;
set_channel('zoom',-1,zoomslider5.position,0);
end;
procedure dimmerchange;
begin
DontRefresh:=true;
set_channel('dimmer',-1,dimmerslider6.position,0);
end;
procedure shutterchange;
begin
DontRefresh:=true;
set_channel('shutter',-1,shutterslider7.position,0);
end;
procedure ColorPickerChange(R, G, B: Byte);
begin
set_channel('r',-1,r,0);
set_channel('g',-1,g,0);
set_channel('b',-1,b,0);
set_channel('c',-1,255-r,0);
set_channel('m',-1,255-g,0);
set_channel('y',-1,255-b,0);
end;
procedure SwitchColorPicker;
begin
if colorpicker.visible then
begin
colorpicker.visible:=false;
colorpicker2.visible:=true;
end else
begin
colorpicker.visible:=true;
colorpicker2.visible:=false;
end;
end;
procedure wchange;
begin
DontRefresh:=true;
set_channel('w',-1,wslider11.position,0);
end;
procedure wchange;
begin
DontRefresh:=true;
set_channel('w',-1,wslider15.position,0);
end;
procedure Wchange;
begin
DontRefresh:=true;
set_channel('W',-1,Wslider19.position,0);
end;
procedure EXTRAchange;
begin
DontRefresh:=true;
set_channel('EXTRA',-1,EXTRAslider20.position,0);
end;
procedure SPEEDchange;
begin
DontRefresh:=true;
set_channel('SPEED',-1,SPEEDslider21.position,0);
end;
procedure SPECIAL1change;
begin
DontRefresh:=true;
set_channel('SPECIAL1',-1,SPECIAL1slider22.position,0);
end;
procedure SPECIAL2change;
begin
DontRefresh:=true;
set_channel('SPECIAL2',-1,SPECIAL2slider23.position,0);
end;
end.