Somit kann man viel Code sparen.
Ich hätte nicht gedacht, das dies funktioniert.
TStandRohr, TStandRohrSchnitt, etc. sind alles Nachkommen von TKoerper.
Code: Alles auswählen
var
StandRohr: TStandRohr;
StandRohrSchnitt: TStandRohrSchnitt;
Stutzen: TStutzen;
StutzenSchnitt: TStutzenSchnitt;
RohrFlansch: TRohrFlansch;
.................
procedure Draw(Koerper, Schnitt: TKoerper; var Matrix: TMatrix; Geschnitten: boolean);
begin
Koerper.Draw(Matrix);
if Geschnitten then begin
if Schnitt <> nil then begin
Schnitt.Draw(Matrix);
end;
end else begin
MatrixModif.SpiegelnX(Matrix);
OpenGL.SwapFrontFace;
Koerper.Draw(Matrix);
OpenGL.SwapFrontFace;
end;
end;
// StandRohr
FlugelMatrix := AnzeigerPosMatrix;
Draw(StandRohr, StandRohrSchnitt, FlugelMatrix, Geschnitten);
// Stutzen unten
FlugelMatrix := AnzeigerPosMatrix;
Draw(Stutzen, StutzenSchnitt, flugelMatrix, Geschnitten);
// Stutzen oben;
FlugelMatrix := AnzeigerPosMatrix;
MatrixModif.Translate(FlugelMatrix, 0.0, TUrAnzeiger.AnzeigerMasse.StandRohr.L, 0.0);
Draw(Stutzen, StutzenSchnitt, FlugelMatrix, Geschnitten);
// RohrFlansch
FlugelMatrix := AnzeigerPosMatrix;
Draw(RohrFlansch, nil, FlugelMatrix, Geschnitten);