home *** CD-ROM | disk | FTP | other *** search
/ Turbo Toolbox / Turbo_Toolbox.iso / 1987 / 09 / grafik6 / segtrans.pas < prev    next >
Encoding:
Pascal/Delphi Source File  |  1987-07-06  |  5.0 KB  |  126 lines

  1. (*-------------------------------------------------------------------------*)
  2. (*                             SEGTRANS.PAS                                *)
  3. (*   Routinen zur 2D-Transformation von "Segmenten" fuer die Grafikserie   *)
  4. (*-------------------------------------------------------------------------*)
  5. (*                       "Segment" verschieben.                        *)
  6. (*    Das gesammte Objekt wird um deltaX bzw. deltaY verschoben. Wenn  *)
  7. (*  "absolut" TRUE ist, bezieht sich der Offset auf den Nullpunkt des  *)
  8. (*     Weltkoordinatensystems, sonst auf die vorherige Position.       *)
  9.  
  10. PROCEDURE XShiftSeg(Handle : INTEGER; deltaX : REAL; absolut : BOOLEAN);
  11.  
  12. BEGIN
  13.   IF Handle <> NULL THEN
  14.     IF SegTab[Handle].DFP <> NIL THEN (* Illegales Handle ? *)
  15.       IF absolut THEN
  16.         SegTab[Handle].XPos := deltaX
  17.       ELSE WITH SegTab[Handle] DO
  18.         XPos := XPos + deltaX;
  19. END;
  20.  
  21.  
  22. PROCEDURE YShiftSeg(Handle : INTEGER; deltaY : REAL; absolut : BOOLEAN);
  23.  
  24. BEGIN
  25.   IF Handle <> NULL THEN
  26.     IF SegTab[Handle].DFP <> NIL THEN (* Illegales Handle ? *)
  27.       IF absolut THEN
  28.         SegTab[Handle].YPos := deltaY
  29.       ELSE WITH SegTab[Handle] DO
  30.         YPos := YPos + deltaY;
  31. END;
  32.  
  33. (*---------------------------------------------------------------------*)
  34. (*                       "Segment" skalieren.                          *)
  35. (*   Das gesammte Objekt wird um Faktor XZoom bzw. YZoom vergroessert. *)
  36. (*      Wenn "absolut" TRUE ist, bezieht sich der Faktor auf die ur-   *)
  37. (*      spruengliche Groesse des Objekt, ansonsten wirkt er auf die    *)
  38. (*                           aktuelle Groesse.                         *)
  39.  
  40. PROCEDURE XSkaleSeg(Handle : INTEGER; XZoom : REAL; absolut : BOOLEAN);
  41.  
  42. BEGIN
  43.   IF Handle <> NULL THEN
  44.     IF SegTab[Handle].DFP <> NIL THEN (* Illegales Handle ? *)
  45.       IF absolut THEN
  46.         SegTab[Handle].XFaktor := XZoom
  47.       ELSE WITH SegTab[Handle] DO
  48.         XFaktor := XFaktor * XZoom;
  49. END;
  50.  
  51.  
  52. PROCEDURE YSkaleSeg(Handle : INTEGER; YZoom : REAL; absolut : BOOLEAN);
  53.  
  54. BEGIN
  55.   IF Handle <> NULL THEN
  56.     IF SegTab[Handle].DFP <> NIL THEN (* Illegales Handle ? *)
  57.       IF absolut THEN
  58.         SegTab[Handle].YFaktor := YZoom
  59.       ELSE WITH SegTab[Handle] DO
  60.         YFaktor := YFaktor * YZoom;
  61. END;
  62.  
  63. (*---------------------------------------------------------------------*)
  64. (*                       "Segment" scheren.                            *)
  65. (*       Das gesammte Objekt wird um Faktor XSh bzw. YSh verzerrt.     *)
  66. (*      Wenn "absolut" TRUE ist, bezieht sich der Faktor auf die ur-   *)
  67. (*      spruengliche Groesse des Objekt, ansonsten wirkt er auf die    *)
  68. (*                           aktuelle Groesse.                         *)
  69.  
  70. PROCEDURE XShearSeg(Handle : INTEGER; XSh : REAL; absolut : BOOLEAN);
  71.  
  72. BEGIN
  73.   IF Handle <> NULL THEN
  74.     IF SegTab[Handle].DFP <> NIL THEN (* Illegales Handle ? *)
  75.       IF absolut THEN
  76.         SegTab[Handle].XShear := XSh
  77.       ELSE WITH SegTab[Handle] DO
  78.         XShear := XShear * (1.0 + XSh); (* Scherungen werden als Bruch-  *)
  79. END;                                    (* teil von 1 angegeben.         *)
  80.                                         (* XSh = 0.05 <=> 5% X-Scherung. *)
  81.  
  82. PROCEDURE YShearSeg(Handle : INTEGER; YSh : REAL; absolut : BOOLEAN);
  83.  
  84. BEGIN
  85.   IF Handle <> NULL THEN
  86.     IF SegTab[Handle].DFP <> NIL THEN (* Illegales Handle ? *)
  87.       IF absolut THEN
  88.         SegTab[Handle].YShear := YSh
  89.       ELSE WITH SegTab[Handle] DO
  90.         YShear := YShear * (1.0 + YSh); (* Scherungen werden als Bruch-  *)
  91. END;                                    (* teil von 1 angegeben.         *)
  92.                                         (* XSh = 0.05 <=> 5% X-Scherung. *)
  93.  
  94. (*---------------------------------------------------------------------*)
  95. (*                       "Segment" rotieren.                           *)
  96. (*   Das gesammte Objekt wird um delta_Theta gedreht. Wenn "absolut"   *)
  97. (*   TRUE ist, bezieht sich die Drehung auf die urspruengliche Lage    *)
  98. (*        des Objekt, ansonsten auf die vorherige Position.            *)
  99.  
  100. PROCEDURE RotateSeg(Handle : INTEGER; delta_Theta : REAL;   (* in Grad *)
  101.                     absolut : BOOLEAN);
  102.  
  103. BEGIN
  104.   IF Handle <> NULL THEN
  105.     IF SegTab[Handle].DFP <> NIL THEN (* Illegales Handle ? *)
  106.       IF absolut THEN
  107.         SegTab[Handle].Drehwinkel := delta_Theta
  108.       ELSE WITH SegTab[Handle] DO
  109.         Drehwinkel := Drehwinkel + delta_Theta;
  110. END;
  111.  
  112. (*---------------------------------------------------------------------*)
  113. (*       Transformations-Reihenfolge fuer ein "Segment" festlegen.     *)
  114. (*                  Erlaeuterung siehe Begleitartikel.                 *)
  115.  
  116. PROCEDURE SetTransOrder(Handle, Reihenfolge : INTEGER);
  117.  
  118. BEGIN
  119.   IF Handle <> NULL THEN
  120.     IF SegTab[Handle].DFP <> NIL THEN (* Illegales Handle ? *)
  121.       SegTab[Handle].TransFolge := Reihenfolge;
  122. END;
  123.  
  124. (*-------------------------------------------------------------------------*)
  125. (*                       Ende von SEGTRANS.PAS                             *)
  126.