/* David A. Hess CS406.01 Assignment 1 Execute : phig.out */ /* * Example 2.1 from page 35-40 in * PHIGS by Example. * * RCC 9/9/92 */ #include #include #include #define X 0.1 #define Y 0.1 #define Z 0.1 #define WS_ID 1 /* PHIGS Workstation ID Number */ #define STRUCT_ID 1 /* PHIGS Structure ID Number */ int structopen,loop; int interrupt_handler(); int interrupt_handler(signal_no,code,scp,addr) int signal_no,code; struct sigcontext *scp; char *addr; { signal(SIGINT, SIG_IGN); if(structopen) pclosestruct(); loop = 0; printf("User entered control c interrupt: %d\n", signal_no); } main() { Pmatrix3 x_matrix,y_matrix,z_matrix,matrix,rotate_matrix; Pfloat angle_x,angle_y,angle_z; int i; Pmatrix3 trans_matrix,scale_matrix,offset_matrix,temp_matrix; Pvector3 trans_vector,scale_vector,offset_vec; Pint error_ind; signal(SIGUSR1, interrupt_handler); /* Open PHIGS ---- DIFFERENT FROM BOOK - RCC */ popenphigs((Pchar*)NULL, PDEFAULT_MEM_SIZE); /* Open a true-color workstation with a standard window. ---- DIFFERENT FROM BOOK - RCC */ popenws(WS_ID, (Pconnid)NULL, phigs_ws_type_sun_tool); /* Create a translation vector this is the x, y, * and z distance you wish to move the object */ trans_vector.x = 0.25; trans_vector.y = 0.25; trans_vector.z = 0.15; offset_vec.x = 0.5; offset_vec.y = 0.5; offset_vec.z = 0.00; scale_vector.x = 0.5; scale_vector.y = 0.5; scale_vector.z = 0.5; /* Generate a 3D transformation matrix - note: * this DOES NOT create a structure element */ ptranslate3 (&offset_vec,&error_ind,offset_matrix); pscale3(&scale_vector,&error_ind,scale_matrix); ptranslate3 (&trans_vector,&error_ind,matrix); pcomposematrix3(matrix,scale_matrix,&error_ind,trans_matrix); /* Open a structure to contain the output primitive. */ popenstruct(STRUCT_ID); structopen = 1; display_text(); plabel(1); /* An error handling routine could go here to check * the status of the error indicator. */ /* Set the matrix as the local transformation matrix * Note: This DOES create a structure element. The * PREPLACE flag is from the enumeration file and * means to replace the previous local trans- * formation matrix (in this case there was none) */ psetlocaltran3 (trans_matrix, PREPLACE); /* Create the object */ create_object(); pclosestruct(); structopen = 0; while(1) { angle_x = angle_y = angle_z = 0.0; loop = 1; while(loop) { protatex(angle_x,&error_ind,x_matrix); protatey(angle_y,&error_ind,y_matrix); protatez(angle_z,&error_ind,z_matrix); pcomposematrix3(x_matrix,y_matrix,&error_ind,rotate_matrix); pcomposematrix3(trans_matrix,rotate_matrix,&error_ind,temp_matrix); pcomposematrix3(z_matrix,temp_matrix,&error_ind,matrix); pcomposematrix3(offset_matrix,matrix,&error_ind,rotate_matrix); popenstruct(STRUCT_ID); structopen = 1; pseteditmode(PEDIT_REPLACE); psetelemptr(0); psetelemptrlabel(1); poffsetelemptr(1); psetlocaltran3(rotate_matrix,PREPLACE); pclosestruct(); structopen = 0; punpoststruct(WS_ID,STRUCT_ID); ppoststruct(WS_ID,STRUCT_ID,0.0); angle_x += X; angle_y += Y; angle_z += Z; } } pseteditmode(PEDIT_INSERT); /* Sleep awhile to let operator see object */ sleep(5); /* Close the workstation */ pclosews(WS_ID); /* Close PHIGS */ pclosephigs(); } display_text() { #include Ppoint3 x_points[1]; static Pvector3 dir[2] = {{1,0,0},{0,1,0}}; static Pfloat expan = 1.0; static Pfloat space = 0.0005; static Pfloat height = 0.02; static Pvector upvec = {0.0,1.0}; static Ptxpath path = {PTP_RIGHT}; static Ptxalign align = {PAH_CENTRE,PAV_HALF}; x_points[0].x = 0.5; x_points[0].y = 0.5; x_points[0].z = 0.00; psetcharexpan(expan); psetcharspace(space); psetcharheight(height); psetcharup(&upvec); psettextpath(path); psettextalign(&align); psettextcolourind(2); ptext3(x_points,dir,"Hello World"); } create_object() { Ppoint3 side_1_vertex[6]; Ppoint3 side_2_vertex[5]; Ppoint3 side_3_vertex[6]; Ppoint3 side_4_vertex[5]; Ppoint3 side_5_vertex[5]; Ppoint3 side_6_vertex[5]; Ppoint3 side_7_vertex[5]; /* initialize side 1 vertices */ side_1_vertex[0].x = -0.1; side_1_vertex[0].y = -0.1; side_1_vertex[0].z = 0.1; side_1_vertex[1].x = 0.1; side_1_vertex[1].y = -0.1; side_1_vertex[1].z = 0.1; side_1_vertex[2].x = 0.1; side_1_vertex[2].y = 0.0; side_1_vertex[2].z = 0.1; side_1_vertex[3].x = 0.0; side_1_vertex[3].y = 0.1; side_1_vertex[3].z = 0.1; side_1_vertex[4].x = -0.1; side_1_vertex[4].y = 0.1; side_1_vertex[4].z = 0.1; side_1_vertex[5].x = side_1_vertex[0].x; side_1_vertex[5].y = side_1_vertex[0].y; side_1_vertex[5].z = side_1_vertex[0].z; /* initialize side 2 verticies */ side_2_vertex[0].x = 0.1; side_2_vertex[0].y = -0.1; side_2_vertex[0].z = 0.1; side_2_vertex[1].x = 0.1; side_2_vertex[1].y = -0.1; side_2_vertex[1].z = -0.1; side_2_vertex[2].x = 0.1; side_2_vertex[2].y = 0.0; side_2_vertex[2].z = -0.1; side_2_vertex[3].x = 0.1; side_2_vertex[3].y = 0.0; side_2_vertex[3].z = 0.1; side_2_vertex[4].x = side_2_vertex[0].x; side_2_vertex[4].y = side_2_vertex[0].y; side_2_vertex[4].z = side_2_vertex[0].z; /* initialize side 3 verticies */ side_3_vertex[0].x = -0.1; side_3_vertex[0].y = -0.1; side_3_vertex[0].z = -0.1; side_3_vertex[1].x = 0.1; side_3_vertex[1].y = -0.1; side_3_vertex[1].z = -0.1; side_3_vertex[2].x = 0.1; side_3_vertex[2].y = 0.0; side_3_vertex[2].z = -0.1; side_3_vertex[3].x = 0.0; side_3_vertex[3].y = 0.1; side_3_vertex[3].z = -0.1; side_3_vertex[4].x = -0.1; side_3_vertex[4].y = 0.1; side_3_vertex[4].z = -0.1; side_3_vertex[5].x = side_3_vertex[0].x; side_3_vertex[5].y = side_3_vertex[0].y; side_3_vertex[5].z = side_3_vertex[0].z; /* initialize side 4 verticies */ side_4_vertex[0].x = -0.1; side_4_vertex[0].y = -0.1; side_4_vertex[0].z = -0.1; side_4_vertex[1].x = -0.1; side_4_vertex[1].y = -0.1; side_4_vertex[1].z = 0.1; side_4_vertex[2].x = -0.1; side_4_vertex[2].y = 0.1; side_4_vertex[2].z = 0.1; side_4_vertex[3].x = -0.1; side_4_vertex[3].y = 0.1; side_4_vertex[3].z = -0.1; side_4_vertex[4].x = side_4_vertex[0].x; side_4_vertex[4].y = side_4_vertex[0].y; side_4_vertex[4].z = side_4_vertex[0].z; /* initialize side 5 verticies */ side_5_vertex[0].x = -0.1; side_5_vertex[0].y = 0.1; side_5_vertex[0].z = 0.1; side_5_vertex[1].x = 0.0; side_5_vertex[1].y = 0.1; side_5_vertex[1].z = 0.1; side_5_vertex[2].x = 0.0; side_5_vertex[2].y = 0.1; side_5_vertex[2].z = 0.1; side_5_vertex[3].x = -0.1; side_5_vertex[3].y = 0.1; side_5_vertex[3].z = -0.1; side_5_vertex[4].x = side_5_vertex[0].x; side_5_vertex[4].y = side_5_vertex[0].y; side_5_vertex[4].z = side_5_vertex[0].z; /* initialize side 6 verticies */ side_6_vertex[0].x = -0.1; side_6_vertex[0].y = -0.1; side_6_vertex[0].z = 0.1; side_6_vertex[1].x = 0.1; side_6_vertex[1].y = -0.1; side_6_vertex[1].z = 0.1; side_6_vertex[2].x = 0.1; side_6_vertex[2].y = -0.1; side_6_vertex[2].z = -0.1; side_6_vertex[3].x = -0.1; side_6_vertex[3].y = -0.1; side_6_vertex[3].z = -0.1; side_6_vertex[4].x = side_6_vertex[0].x; side_6_vertex[4].y = side_6_vertex[0].y; side_6_vertex[4].z = side_6_vertex[0].z; /* initialize side 7 verticies */ side_7_vertex[0].x = 0.0; side_7_vertex[0].y = 0.1; side_7_vertex[0].z = 0.1; side_7_vertex[1].x = 0.1; side_7_vertex[1].y = 0.0; side_7_vertex[1].z = 0.1; side_7_vertex[2].x = 0.1; side_7_vertex[2].y = 0.0; side_7_vertex[2].z = -0.1; side_7_vertex[3].x = 0.0; side_7_vertex[3].y = 0.1; side_7_vertex[3].z = -0.1; side_7_vertex[4].x = side_7_vertex[0].x; side_7_vertex[4].y = side_7_vertex[0].y; side_7_vertex[4].z = side_7_vertex[0].z; /* set the line color index attribute structure element */ psetlinecolourind(1); /* create a polyline primitive structure element for * each side */ ppolyline3(6, side_1_vertex); ppolyline3(5, side_2_vertex); ppolyline3(6, side_3_vertex); ppolyline3(5, side_4_vertex); ppolyline3(5, side_5_vertex); ppolyline3(5, side_6_vertex); ppolyline3(5, side_7_vertex); }