home *** CD-ROM | disk | FTP | other *** search
- (*-------------------------------------------------------------------------*)
- (* SEGTRANS.PAS *)
- (* Routinen zur 2D-Transformation von "Segmenten" fuer die Grafikserie *)
- (*-------------------------------------------------------------------------*)
- (* "Segment" verschieben. *)
- (* Das gesammte Objekt wird um deltaX bzw. deltaY verschoben. Wenn *)
- (* "absolut" TRUE ist, bezieht sich der Offset auf den Nullpunkt des *)
- (* Weltkoordinatensystems, sonst auf die vorherige Position. *)
-
- PROCEDURE XShiftSeg(Handle : INTEGER; deltaX : REAL; absolut : BOOLEAN);
-
- BEGIN
- IF Handle <> NULL THEN
- IF SegTab[Handle].DFP <> NIL THEN (* Illegales Handle ? *)
- IF absolut THEN
- SegTab[Handle].XPos := deltaX
- ELSE WITH SegTab[Handle] DO
- XPos := XPos + deltaX;
- END;
-
-
- PROCEDURE YShiftSeg(Handle : INTEGER; deltaY : REAL; absolut : BOOLEAN);
-
- BEGIN
- IF Handle <> NULL THEN
- IF SegTab[Handle].DFP <> NIL THEN (* Illegales Handle ? *)
- IF absolut THEN
- SegTab[Handle].YPos := deltaY
- ELSE WITH SegTab[Handle] DO
- YPos := YPos + deltaY;
- END;
-
- (*---------------------------------------------------------------------*)
- (* "Segment" skalieren. *)
- (* Das gesammte Objekt wird um Faktor XZoom bzw. YZoom vergroessert. *)
- (* Wenn "absolut" TRUE ist, bezieht sich der Faktor auf die ur- *)
- (* spruengliche Groesse des Objekt, ansonsten wirkt er auf die *)
- (* aktuelle Groesse. *)
-
- PROCEDURE XSkaleSeg(Handle : INTEGER; XZoom : REAL; absolut : BOOLEAN);
-
- BEGIN
- IF Handle <> NULL THEN
- IF SegTab[Handle].DFP <> NIL THEN (* Illegales Handle ? *)
- IF absolut THEN
- SegTab[Handle].XFaktor := XZoom
- ELSE WITH SegTab[Handle] DO
- XFaktor := XFaktor * XZoom;
- END;
-
-
- PROCEDURE YSkaleSeg(Handle : INTEGER; YZoom : REAL; absolut : BOOLEAN);
-
- BEGIN
- IF Handle <> NULL THEN
- IF SegTab[Handle].DFP <> NIL THEN (* Illegales Handle ? *)
- IF absolut THEN
- SegTab[Handle].YFaktor := YZoom
- ELSE WITH SegTab[Handle] DO
- YFaktor := YFaktor * YZoom;
- END;
-
- (*---------------------------------------------------------------------*)
- (* "Segment" scheren. *)
- (* Das gesammte Objekt wird um Faktor XSh bzw. YSh verzerrt. *)
- (* Wenn "absolut" TRUE ist, bezieht sich der Faktor auf die ur- *)
- (* spruengliche Groesse des Objekt, ansonsten wirkt er auf die *)
- (* aktuelle Groesse. *)
-
- PROCEDURE XShearSeg(Handle : INTEGER; XSh : REAL; absolut : BOOLEAN);
-
- BEGIN
- IF Handle <> NULL THEN
- IF SegTab[Handle].DFP <> NIL THEN (* Illegales Handle ? *)
- IF absolut THEN
- SegTab[Handle].XShear := XSh
- ELSE WITH SegTab[Handle] DO
- XShear := XShear * (1.0 + XSh); (* Scherungen werden als Bruch- *)
- END; (* teil von 1 angegeben. *)
- (* XSh = 0.05 <=> 5% X-Scherung. *)
-
- PROCEDURE YShearSeg(Handle : INTEGER; YSh : REAL; absolut : BOOLEAN);
-
- BEGIN
- IF Handle <> NULL THEN
- IF SegTab[Handle].DFP <> NIL THEN (* Illegales Handle ? *)
- IF absolut THEN
- SegTab[Handle].YShear := YSh
- ELSE WITH SegTab[Handle] DO
- YShear := YShear * (1.0 + YSh); (* Scherungen werden als Bruch- *)
- END; (* teil von 1 angegeben. *)
- (* XSh = 0.05 <=> 5% X-Scherung. *)
-
- (*---------------------------------------------------------------------*)
- (* "Segment" rotieren. *)
- (* Das gesammte Objekt wird um delta_Theta gedreht. Wenn "absolut" *)
- (* TRUE ist, bezieht sich die Drehung auf die urspruengliche Lage *)
- (* des Objekt, ansonsten auf die vorherige Position. *)
-
- PROCEDURE RotateSeg(Handle : INTEGER; delta_Theta : REAL; (* in Grad *)
- absolut : BOOLEAN);
-
- BEGIN
- IF Handle <> NULL THEN
- IF SegTab[Handle].DFP <> NIL THEN (* Illegales Handle ? *)
- IF absolut THEN
- SegTab[Handle].Drehwinkel := delta_Theta
- ELSE WITH SegTab[Handle] DO
- Drehwinkel := Drehwinkel + delta_Theta;
- END;
-
- (*---------------------------------------------------------------------*)
- (* Transformations-Reihenfolge fuer ein "Segment" festlegen. *)
- (* Erlaeuterung siehe Begleitartikel. *)
-
- PROCEDURE SetTransOrder(Handle, Reihenfolge : INTEGER);
-
- BEGIN
- IF Handle <> NULL THEN
- IF SegTab[Handle].DFP <> NIL THEN (* Illegales Handle ? *)
- SegTab[Handle].TransFolge := Reihenfolge;
- END;
-
- (*-------------------------------------------------------------------------*)
- (* Ende von SEGTRANS.PAS *)
-