home *** CD-ROM | disk | FTP | other *** search
Text File | 1993-08-21 | 3.4 KB | 149 lines | [TEXT/PJMM] |
- program ShuttleBuild;
-
- uses
- Matrix, Transformations, OffscreenCore, GrafSysCore, GrafSysScreen, GrafSysObject, Resources, OffScreenGraphics, GrafSysC;
-
- const
- cMaxPoly = 100;
- cTheWindow = 400;
- degrees = 0.01745329; (* π/180 *)
-
-
- procedure BuildObject (var Obj: TSObject3D);
-
- var
- OK: longint;
- theGreen: RGBColor;
- dummyBool: boolean;
-
- begin
- OK := Obj.AddPoint(-60, 0, 0);
- OK := Obj.AddPoint(-57, 3, 3);
- OK := Obj.AddPoint(-57, 3, -3);
- OK := Obj.AddPoint(-57, -3, 3);
- OK := Obj.AddPoint(-57, -3, -3);
- OK := Obj.AddPoint(-42, 6, 9);
- OK := Obj.AddPoint(-42, 9, -6);
- OK := Obj.AddPoint(-42, -6, 9);
- OK := Obj.AddPoint(-42, -9, -6);
- OK := Obj.AddPoint(-15, 9, -6);
- OK := Obj.AddPoint(-15, -9, -6);
- OK := Obj.AddPoint(0, 15, -6);
- OK := Obj.AddPoint(0, -15, -6);
- OK := Obj.AddPoint(21, 36, -6);
- OK := Obj.AddPoint(21, -36, -6);
- OK := Obj.AddPoint(30, 36, -6);
- OK := Obj.AddPoint(30, -36, -6);
- OK := Obj.AddPoint(30, 9, -6);
- OK := Obj.AddPoint(30, -9, -6);
- OK := Obj.AddPoint(36, 9, -6);
- OK := Obj.AddPoint(36, -9, -6);
- OK := Obj.AddPoint(36, 6, 9);
- OK := Obj.AddPoint(36, -6, 9);
- OK := Obj.AddPoint(9, 0, 9);
- OK := Obj.AddPoint(27, 0, 9);
- OK := Obj.AddPoint(21, 0, 27);
- OK := Obj.AddPoint(30, 0, 27);
-
- (* now add the lines *)
- OK := Obj.AddLine(1, 2);
- OK := Obj.AddLine(2, 6);
- OK := Obj.AddLine(6, 22);
- OK := Obj.AddLine(22, 23);
- OK := Obj.AddLine(23, 21);
- OK := Obj.AddLine(21, 20);
- OK := Obj.AddLine(20, 18);
- OK := Obj.AddLine(18, 16);
- OK := Obj.AddLine(16, 14);
- OK := Obj.AddLine(14, 12);
- OK := Obj.AddLine(12, 10);
- OK := Obj.AddLine(10, 7);
- OK := Obj.AddLine(7, 3);
- OK := Obj.AddLine(3, 1);
-
- OK := Obj.AddLine(1, 4);
- OK := Obj.AddLine(4, 8);
- OK := Obj.AddLine(8, 23);
-
- OK := Obj.AddLine(20, 22);
-
- OK := Obj.AddLine(24, 26);
- OK := Obj.AddLine(26, 27);
- OK := Obj.AddLine(27, 25);
-
- OK := Obj.AddLine(1, 5);
- OK := Obj.AddLine(5, 9);
- OK := Obj.AddLine(9, 11);
- OK := Obj.AddLine(11, 13);
- OK := Obj.AddLine(13, 15);
- OK := Obj.AddLine(15, 17);
- OK := Obj.AddLine(17, 19);
- OK := Obj.AddLine(19, 21);
-
-
-
-
- end;
-
- procedure Check (theErr: integer);
- begin
- if theErr <> noErr then
- DebugStr(InterPretError(theErr));
- end;
-
- {MAIN PROGRAM}
-
- var
- theCube: TSObject3D;
- EyeLoc: Vector4;
- theWindow: WindowPtr;
- dummyLong: longint;
- copyRect: Rect;
- time: longint;
- done: boolean;
- theID: integer;
-
- begin
- InitCursor;
- InitGrafSys;
- theWindow := GetNew3DWindow(cTheWindow, pointer(-1));
- SetVector4(EyeLoc, 0, 0, -300);
- SetEyeChar(TRUE, EyeLoc, 0, 0, 0, 90 * degrees, fast);
- { theCube := GetNewNamedObject('Shuttle');{}
- New(theCube);
- {}
- theCube.Init;
- { }
- BuildObject(theCube);
- { }
- {SaveNamedObject(theCube, 'Shuttle', theID);}
- Check(AttachOffscreen(theWindow, pointer(-1)));
- (* does automatic sanity check *)
- theCube.Scale(3, 3, 3);
- theCube.Draw;
- theCube.SetAutoErase(True);
- repeat
- Check(BeginOSDraw(theWindow));
- theCube.Draw; (* erase it and redraw it*)
- Check(EndOSDraw(theWindow));
- UnionRect(theCube.oldBounds, theCube.bounds, copyrect);
- Check(CopyOS2Screen(theWindow, copyrect, srcCopy));
- {FRAMERECT(COPYRECT);{}
- Delay(1, dummyLong);{}
-
- theCube.Rotate(5 * degrees, 2 * degrees, 1 * degrees);
- if button then
- begin
- time := TickCount - time;
- if time < GetDblTime then
- done := true
- else
- repeat
- until not button;
- time := tickCount;
- end;
-
- until done;
- repeat
- until not button;
- end.