|
|
|
|
||
|
DEFINITION MODULE Graphics3D; (******************************************************************* Module Graphics3D (Version 1.0) Copyright (c) 1986-2006 by Markus Ulrich and ETH Zurich. Purpose Provides routines for three dimensional (3D) drawing and a graphic coordinate system (CS) editor. Remarks The module supports the definition of a 3D-CS, and drawing of the CS with axis labels and scaling. 3D points can be transformed to two dimensional user or pixel coordinates of the current output window. The outstanding feature of this module is its graphic CS-Editor. The position of all axes and the origin, as well as the scaling can be defined graphically with the mouse. In that way you can define your own view of the coordinate system. Namely, it is possible to change any 3D view to a two dimensional projection of one or two planes, behaving like any conventional 2D plot. This library module is an auxiliary library module working on top of the Dialog Machine. The plot has to be drawn with procedures of DMWindows. Programming o Design Markus Ulrich 25/03/1986 o Implementation Markus Ulrich 25/03/1986 ETH Zurich Systems Ecology CHN E 35.1 Universitaetstrasse 16 8092 Zurich SWITZERLAND URLs: <mailto:RAMSES@env.ethz.ch> <http://www.sysecol.ethz.ch> <http://www.sysecol.ethz.ch/SimSoftware/RAMSES> Last revision of definition: 15/07/1988 AF *******************************************************************) FROM DMWindows IMPORT RectArea; CONST MaxLabelLength = 4; TYPE Point3D = RECORD x,y,z: REAL END; AxisLabelString = ARRAY [0..MaxLabelLength-1] OF CHAR; CSType = RECORD origin, xPoint, yPoint, zPoint: RECORD x, y: INTEGER END; xMax, yMax, zMax : REAL; xLabel, yLabel, zLabel: AxisLabelString; END; PROCEDURE SetTermMenuText(mText,mCmdText: ARRAY OF CHAR; aliasChar: CHAR); (* defaults are set for German and English (in case of all other DM languages, maximum of 64 chars *) PROCEDURE GetTermMenuText(VAR mText,mCmdText: ARRAY OF CHAR; VAR aliasChar: CHAR); PROCEDURE InstallCS(r: RectArea; CS: CSType); (* Installs a 3D CS in the current output window. The location of the CS in the window is defined by the RectArea r, and the location, the scaling and the axis labels by CS. IMPORTANT: This procedure must be called before any of the below listed procedures! CS is defined as follows: The coordinates of the origin and of the axis endpoints, as well as the maximal values for each axis, have to be stored in the CS-record. All coordinates refer to the pixel coordinate sytem of the current output window (see DMWindows). Note: x-,y- and z-Point MUST all lie on the border of r, the origin MUST lie within r and all maxima MUST be positive! zPoint,zMax (r.x+r.h,r.y+r.w) ______________.________B | . | | . | | . | | . | yPoint,yMax .........o origin | pixel coordinates! | . | | . | | . | A____________.__________ (r.x,r.y) xPoint, xMax This procedure does not perform any drawing, but it sets the clip region to r, as most drawing procedures of Graphics3D do. All user coordinate procedures of DMWindows can be used, they refer to r ("InstallCS" calls "DMWindows.ScaleUC" with the parameter r. *) PROCEDURE GetCS(VAR CS: CSType); (* This procedure returns the parameters of the current CS. Editing of the CS changes the current CS. *) PROCEDURE DrawCS; (* This procedure sets the clip region to r, plots the CS with a frame around r. All labels are positionned automatically. *) PROCEDURE Convert3DToPoint(P:Point3D; VAR x,y: INTEGER); (* Projects P on the two dimensional drawing plane. Returns pixel-window coordinates of the current output window as defined by DMWindows. *) PROCEDURE Convert3DTo2D(P:Point3D; VAR xUC,yUC: REAL); (* Projects P on the two dimensional drawing plane. Returns user coordi- nates of the current output window as defined by DMWindows. *) PROCEDURE EditCS; (* This procedure calls the graphic coordinate system editor. Before calling this procedure, ALL menu commands must be disabled (EditCS supports no updating ), DeskAccessories are disabled by EditCS. It clears the content of the area r, draws the edit CS and supports the following editing actions: a) Changing the position of any axis by clicking and dragging the axis endpoint. b) Moving the origing by clicking and dragging it. c) Changing the scaling of any axis by clicking and dragging the axis scalepoint. Any changes of the scaling are possible. d) Ending the edit actions by clicking outside the area r. After the procedure EditCS, the content of the area r will be erased. Remark: All labels are positioned automatically. e) If current DM Language is German the terminate menu will be in German, in all other cases in English *) END Graphics3D.
|
||
|
|
|