Vielen Danke.
Ich hab das jetzt so gelöst.
Delphi-Quellcode:
type
TKinematic = procedure(x, y, z: double) of Object;
TTransformation = record
LinkProcedure: TKinematic;
x, y, z: double;
end;
TKinematicChain = class(TList<TTransformation>)
public
procedure AddKinematic(transformation: TKinematic; x, y, z: double);
constructor Create;
destructor destroy;
end;
implementation
{ TKinematicChain }
procedure TKinematicChain.AddKinematic(transformation: TKinematic; x, y, z: double);
var
transform: TTransformation;
begin
transform.LinkProcedure := transformation;
transform.x := x;
transform.y := y;
transform.z := z;
Add(transform)
end;
end.
Aufgerufen wird das ganze so :
Delphi-Quellcode:
kette := TKinematicChain.Create;
kette.AddKinematic(glGrafik.Translate, 0, 0, -40);
kette.AddKinematic(glGrafik.Rotate, 0, -45, 0);
Was mich jetzt dabei stört ist, dass ich gerne die übergebenen Methoden:
Delphi-Quellcode:
kette.AddKinematic( glGrafik.TranslateF, 0, 0, -40 );
kette.AddKinematic( glGrafik.Rotate, 0, -45, 0 );
so aufrufen würde :
Delphi-Quellcode:
kette.AddKinematic( glGrafik.TranslateF ( 0, 0, -40 ) );
kette.AddKinematic( glGrafik.Rotate ( 0, -45, 0 ) );
mit :
Delphi-Quellcode:
TKinematicChain = class(TList<TKinematic>)
...
procedure TKinematicChain.AddKinematic(transformation: TKinematic);
begin
Add(transform)
end;
Da bekomme ich aber Fehlermeldungen. Der mag die Parameter (x, y, z: double) nicht.
Kurz und gut : Ich würde gerne auf das record verzichten und die Methode mit Parametern direkt in der Kette speichern.
Ideen?? Vorschläge??
Gruß.