home *** CD-ROM | disk | FTP | other *** search
/ Turbo Toolbox / Turbo_Toolbox.iso / 1987 / 09 / grafik6 / segtest.pas < prev    next >
Encoding:
Pascal/Delphi Source File  |  1987-08-09  |  2.7 KB  |  101 lines

  1. PROGRAM SegmentTest(Input,Output);
  2.  
  3. CONST (*$I GRAFCONS.PAS *)
  4.  
  5. TYPE  (*$I GRAFTYPE.PAS *)
  6.  
  7. VAR (*$I GRAFVAR.PAS *)
  8.     WinHandle  : WinNrBereich;
  9.     Obj1, Obj2 : SegNrBereich;
  10.     i : INTEGER;
  11.  
  12. (*$I GRAPH.P *)
  13. (*$I GRAFSYS.PAS  *)
  14. (*$I INTDDA.PAS   *)
  15. (*$I LINE.PAS     *)
  16. (*$I WINSYS.PAS   *)
  17. (*$I WINGRAF.PAS  *)
  18. (*$I CLIPPING.PAS *)
  19. (*$I GRAFMAT.PAS  *)
  20. (*$I TRANS2D.PAS  *)
  21. (*$I LINEOBJ.PAS  *)
  22. (*$I LISTHAND.PAS *)
  23. (*$I SEGHAND.PAS  *)
  24. (*$I SEGTRANS.PAS *)
  25. (*$I SEGDISP.PAS  *)
  26. (*$I DFREAD.PAS   *)
  27.  
  28. (*--------------------------------------------------------------------*)
  29. (*  Hilfsprozedur, die nur zwei Objekte auf dem Bildschirm dreht.     *)
  30.  
  31. PROCEDURE Show(Obj1, Obj2 : SegNrBereich);
  32.  
  33. BEGIN
  34.   IF (Obj1 <> NULL) AND (Obj2 <> NULL) THEN BEGIN
  35.     FOR i := 1 TO 36 DO BEGIN
  36.       RotateSeg(Obj2,10,FALSE);  (* Objekt 2 drehen *)
  37.       ProcessSeg(Obj2,FALSE);    (* Objekt 2 zeichnen *)
  38.       IF i > 1 THEN
  39.         ProcessSeg(Obj1,TRUE);   (* Wenn schon vorh., Objekt 1 loeschen *)
  40.       RotateSeg(Obj1,10,FALSE);  (* Objekt 1 drehen *)
  41.       ProcessSeg(Obj1,FALSE);    (* Objekt 1 zeichnen *)
  42.       ProcessSeg(Obj2,TRUE);     (* Objekt 2 loeschen *)
  43.     END;
  44.     ProcessSeg(Obj1,TRUE);       (* Letztes Objekt 1 loeschen *)
  45.   END;
  46. END;
  47.  
  48. (* MAIN *)
  49. BEGIN
  50.   Enter_Graphic;
  51.   InitWindows;
  52.   (* Window & Viewport selectieren *)
  53.   WinHandle := SelectViewport(0,0,ScreenXmax,ScreenyMax);
  54.   SelectWorld(WinHandle,-400,-400,400,400);
  55.  
  56.   InitSeg;
  57.  
  58.   (* Dreieck und Viereck einlesen *)
  59.   DFRead(DFInpArray,'VIERECK.DAT'); (* Kommandos einlesen *)
  60.   Obj1 := OpenSeg(DFInpArray);
  61.   DFRead(DFInpArray,'DREIECK.DAT'); (* Kommandos einlesen *)
  62.   Obj2 := OpenSeg(DFInpArray);
  63.  
  64.   (* Objekte vom Nullpunkt entfernen *)
  65.   XShiftSeg(Obj1,-150,TRUE);
  66.   XShiftSeg(Obj2,150,TRUE);
  67.  
  68.   (* Dreieck und Viereck parallel rotieren lassen *)
  69.   Show(Obj1,Obj2);
  70.  
  71.   DFRead(DFInpArray,'DREIECK2.DAT');  (* Zweites Dreieck einlesen *)
  72.   ExtendSeg(Obj2,1,DFInpArray);       (* und in erstes Einfuegen  *)
  73.  
  74.   Show(Obj1,Obj2);
  75.  
  76.   XSkaleSeg(Obj1,0.5,FALSE); (* Viereck auf Haelfte verkleinern *)
  77.   YSkaleSeg(Obj1,0.5,FALSE);
  78.  
  79.   XSkaleSeg(Obj2,1.3,FALSE); (* Stern um 30% vergroessern *)
  80.   YSkaleSeg(Obj2,1.3,FALSE);
  81.  
  82.   Show(Obj1,Obj2);
  83.  
  84.   CutSeg(Obj2,1,4);          (* Stern wieder zu Dreieck machen *)
  85.  
  86.   Show(Obj1,Obj2);
  87.  
  88.   XShiftSeg(Obj1,0,TRUE);    (* Viereck in die Mitte *)
  89.   XSkaleSeg(Obj2,0.5,FALSE); (* Stern wieder verkleinern *)
  90.   YSkaleSeg(Obj2,0.5,FALSE);
  91.  
  92.   SetTransOrder(Obj2,4);  (* Transformationsreihenfolge f. Dreieck aendern *)
  93.   Show(Obj1,Obj2);        (* Dreieck kreist um Viereck *)
  94.  
  95.   Read;
  96.   CloseSeg(Obj1);
  97.   CloseSeg(Obj2);
  98.   CloseWindow(WinHandle);
  99.   Exit_Graphic;
  100. END.
  101.