home *** CD-ROM | disk | FTP | other *** search
- unit Gr3d_obj;
-
- interface
-
- uses
- Graph, MM_Mem, Gr3d_pt;
-
- type
-
- PPoint = ^TPoint;
- TPoint = object(TPointGroup)
- constructor Init(InitX, InitY, InitZ: integer);
- procedure Draw; virtual;
- end;
-
- PPolygon = ^TPolygon;
- TPolygon = object(TPointGroup)
- C: integer;
- constructor Init(InitX, InitY, InitZ, InitC: integer);
- procedure Draw; virtual;
- procedure DrawFilled; virtual;
- end;
-
- PRect = ^TRect;
- TRect = object(TPolygon)
- H, W: integer;
- constructor Init(InitX, InitY, InitZ, InitC: integer; InitH, InitW: integer);
- procedure Draw; virtual;
- end;
-
- PPoly6 = ^TPoly6;
- TPoly6 = object(TPolygon)
- Side: integer;
- constructor Init(InitX, InitY, InitZ, InitC: integer; InitSide: integer);
- end;
-
- procedure MConvertPoints(M: PMatrix; var S: PMatrix);
-
- implementation
-
- {-------------------------}
- { global }
- procedure MConvertPoints(M: PMatrix; var S: PMatrix);
- var
- i : integer;
- PM: P3dPoint;
- PS: P2dPoint;
- begin
- NewMatrix(S, M^.DimRow+1, 2);
- for i := 1 to M^.DimRow do
- begin
- PM := P3dPoint(GetPtr(M, i, 1));
- PS := P2dPoint(GetPtr(S, i, 1));
- ConvertPoint(PM^.x, PM^.y, PM^.z, PS^.x, PS^.y);
- end;
- P2dPoint(GetPtr(S,S^.DimRow,1))^ := P2dPoint(S^.Buf)^
- end;
-
- {-------------------------}
- constructor TPolygon.Init(Initx, InitY, InitZ, InitC: integer);
- begin
- TPointGroup.Init(InitX, InitY, InitZ);
- C := InitC;
- end;
-
- procedure TPolygon.Draw;
- var
- S: PMatrix;
- begin
- MConvertPoints(M, S);
- SetColor(DefaultColor);
- DrawPoly(N+1, S^.Buf^);
- DelMatrix(S);
- end;
-
- procedure TPolygon.DrawFilled;
- var
- S: PMatrix;
- begin
- SetFillStyle(SolidFill, C);
- MConvertPoints(M, S);
- FillPoly(N+1, S^.Buf^);
- DelMatrix(S);
- end;
-
- {-----------------------}
- { TPoint }
-
- constructor TPoint.Init(InitX, InitY, InitZ: integer);
- begin TPointGroup.Init(InitX, InitY, InitZ);
- end;
-
- procedure TPoint.Draw;
- var
- Sx, Sy: integer;
- begin
- ConvertPoint(GetX(1),GetY(1),GetZ(1),Sx,Sy);
- PutPixel(Sx, Sy, DefaultColor);
- end;
-
- {-----------------------}
- { TRect }
-
- constructor TRect.Init(InitX, InitY, InitZ, InitC: integer; InitH, InitW: integer);
- begin
- TPolygon.Init(InitX, InitY, InitZ, InitC);
- InsertPoint(InitX+H, InitY, InitZ);
- InsertPoint(InitX+H, InitY+W, InitZ);
- InsertPoint(InitX, InitY+W, InitZ);
- H := InitH;
- W := InitW;
- end;
-
- procedure TRect.Draw;
- begin
- TPolygon.Draw;
- end;
-
- {----------------------}
- { TPoly6 }
-
- constructor TPoly6.Init(InitX, InitY, InitZ, InitC: integer; InitSide: integer);
- var
- Temp : integer;
- begin
- TPolygon.Init(InitX, InitY, InitZ, InitC);
- Temp := Trunc(InitSide * Sqrt(5));
- InsertPoint(InitX-InitSide div 2 , InitY+Temp div 2, InitZ);
- InsertPoint(InitX , InitY+Temp , InitZ);
- InsertPoint(InitX+(3*InitSide) div 2, InitY+Temp , InitZ);
- InsertPoint(InitX+InitSide*2 , InitY+Temp div 2, InitZ);
- InsertPoint(InitX+(3*InitSide) div 2, InitY , InitZ);
- Side := InitSide;
- end;
-
-
- end.