#include /* get HP-PHIGS definitions for C */ #include /* get standard I/O definitions */ #include /* compile with library "-lm" */ #define deg *3.1415926535897/180. /* convert deg to rad */ main() /* file "SingleView.c" */ { Pint WorkstnID = 1; /* workstation identifier */ Pint ConnID; /* connection identifier */ Pint Scene = 1, Cube = 2; /* structure IDs */ float Angle; /* rotation angle */ Pint Error; /* error indicator */ int I, J; /* loop control variables */ /*--- viewing parameters -----------------------------------------------*/ static Pview_map3 ViewMapping = { /* sent to "peval_view_map_matrix3" */ {-1.75, 1.75, -1.75, 1.75}, /* window limits: "u,v VRC values", {xmin, xmax,ymin,ymax} */ {0.0, 1.0, 0.0, 1.0, 0.0, 1.0}, /* projection viewport limits: {xmin,xmax, ymin,ymax,zmin,zmax}*/ PTYPE_PERSPECT, /* it is perspective projection; PTYPE_PARAL=parallel lehet meg */ {0.0, 0.0, 10.0}, /* projection reference point */ 0.0, -5.0, 5.0}; /* view/back/front plane distances (from "view reference plane", =u,v plane, where z=0)/ */ static Ppoint3 ViewRefPt = {0.0, 0.0, 0.0}; static Pvec3 ViewNormVec = {0.4, 0.3, 1.0}; static Pvec3 ViewUpVec = {0.0, 1.0, 0.0}; Pmatrix3 ViewMapMatrix; /* from "peval_view_map_matrix3" */ Pmatrix3 ViewOriMatrix; /* from "peval_view_ori_matrix3" */ static Plimit3 ClipLimits = {0.0, 1.0, 0.0, 1.0, 0.0, 1.0}; Pview_rep3 ViewRep; /*--- define other sundries --------------------------------------------*/ static Prgb Black = {0.0, 0.0, 0.0}; static Prgb White = {1.0, 1.0, 1.0}; Pmatrix3 Xmatrix, Ymatrix, Transform; popen_phigs(PDEF_ERR_FILE, PDEF_MEM_SIZE); /* errors go to "stderr" */ popen_ws(WorkstnID, NULL, phigs_ws_type_x_tool); peval_view_map_matrix3(&ViewMapping, &Error, ViewMapMatrix); if (Error) { fprintf(stderr, "Error %d in peval_view_map_matrix3; terminating.\n", Error); exit(1); } peval_view_ori_matrix3(&ViewRefPt, &ViewNormVec, &ViewUpVec, &Error, ViewOriMatrix); if (Error) { fprintf(stderr, "Error %d in peval_view_ori_matrix3; terminating.\n", Error); exit(1); } for (I = 0; I < 4; I++) for (J = 0; J < 4; J++) ViewRep.ori_matrix[I][J] = ViewOriMatrix[I][J], ViewRep.map_matrix[I][J] = ViewMapMatrix[I][J]; ViewRep.clip_limit = ClipLimits; ViewRep.xy_clip = ViewRep.back_clip = ViewRep.front_clip = PIND_CLIP; pset_view_rep3(WorkstnID, 1, &ViewRep); pset_colr_rep(WorkstnID, 0, (void *) &Black); pset_colr_rep(WorkstnID, 1, (void *) &White); BuildCube(Cube); protate_x(0.0, &Error, Transform); /* create an identity matrix */ popen_struct(Scene); pset_view_ind(1); pset_local_tran3(Transform, PTYPE_REPLACE); pexec_struct(Cube); pclose_struct(); ppost_struct(WorkstnID, Scene, 1.0); pupd_ws(WorkstnID, PFLAG_PERFORM); protate_x(0.0, &Error, Xmatrix); /* create identity matrices */ protate_x(0.0, &Error, Ymatrix); protate_x(0.0, &Error, Transform); pset_edit_mode(PEDIT_REPLACE); popen_struct(Scene); for (I = 0; I <= 1440; I++) { Angle = (I * 0.25) deg; protate_y(Angle, &Error, Ymatrix); protate_x(Angle, &Error, Xmatrix); pcompose_matrix3(Xmatrix, Ymatrix, &Error, Transform); pset_elem_ptr(2); pset_local_tran3(Transform, PTYPE_REPLACE); predraw_all_structs(WorkstnID, PFLAG_ALWAYS); } sleep(10); pclose_struct(); pclose_ws(WorkstnID); pclose_phigs(); } /****************************************************************************/ BuildCube(StructID) int StructID; /* structure ID for cube structure */ { static Ppoint3 TopPoints[5] = {-1,1,-1, -1,1,1, 0,1,1, 1,1,0, 1,1,-1}; static Ppoint_list3 Top = {5, TopPoints}; static Ppoint3 BottomPoints[4] = {-1,-1,1, -1,-1,-1, 1,-1,-1, 1,-1,1}; static Ppoint_list3 Bottom = {4, BottomPoints}; static Ppoint3 RightPoints[5] = {1,-1,-1, 1,1,-1, 1,1,0, 1,0,1, 1,-1,1}; static Ppoint_list3 Right = {5, RightPoints}; static Ppoint3 LeftPoints[4] = {-1,-1,1, -1,1,1, -1,1,-1, -1,-1,-1}; static Ppoint_list3 Left = {4, LeftPoints}; static Ppoint3 FrontPoints[5] = {1,-1,1, 1,0,1, 0,1,1, -1,1,1, -1,-1,1}; static Ppoint_list3 Front = {5, FrontPoints}; static Ppoint3 BackPoints[4] = {-1,-1,-1, -1,1,-1, 1,1,-1, 1,-1,-1}; static Ppoint_list3 Back = {4, BackPoints}; static Ppoint3 CornerPoints[3] = {1,0,1, 1,1,0, 0,1,1}; static Ppoint_list3 Corner = {3, CornerPoints}; static Ppoint_list3 CubePoints[7]; Ppoint_list_list3 Cube; /*--- text locations and orientations ----------------------------------*/ static Ppoint3 TopTextPos = {-0.75, 1.0, 0.0}; static Pvec3 TopTextOri[2] = {1,0,0, 0,0,-1}; static Ppoint3 RightTextPos = {1.0, -0.75, 0.75}; static Pvec3 RightTextOri[2] = {0,0,-1, 0,1,0}; static Ppoint3 FrontTextPos = {-0.75, -0.75, 1.0}; static Pvec3 FrontTextOri[2] = {1,0,0, 0,1,0}; int I; /* loop control variable */ CubePoints[0] = Top; CubePoints[1] = Bottom; CubePoints[2] = Right; CubePoints[3] = Left; CubePoints[4] = Front; CubePoints[5] = Back; CubePoints[6] = Corner; popen_struct(StructID); pset_face_cull_mode(PCULL_BACKFACE); Cube.num_point_lists = 1; for (I = 0; I < 7; I++) { Cube.point_lists = &(CubePoints[I]); pfill_area_set3(&Cube); } pset_char_ht(0.4); pset_char_expan(0.7); ptext3(&TopTextPos, TopTextOri, "Top"); ptext3(&RightTextPos, RightTextOri, "Right"); ptext3(&FrontTextPos, FrontTextOri, "Front"); pclose_struct(); }