📄 inqstructs.c
字号:
#include <phigs.h> /* get HP-PHIGS definitions for C */#include <stdio.h> /* get standard I/O definitions */main() /* file "InqStructs.c" */{ Pint WorkstnID = 1; /* workstation identifier */ Pint ConnID; /* connection identifier */ Pint WorkstnType = POIDDX; /* out/in, direct, dbl bfr, Xwindow */ Pint StructureID = 1; /* structure ID (chosen by user) */ static Ppoint3 SquarePts[4] = { 0.25, 0.25, 0.0, 0.75, 0.25, 0.0, 0.75, 0.75, 0.0, 0.25, 0.75, 0.0}; static Ppoint_list3 Square = { 4, SquarePts}; static Ppoint TextLocation = {0.3, 0.5}; Pelem_type ElementType; Pint Error; /* error-return variable */ Pin_status ChoiceStatus; /* returned from "preq_choice" */ Pint ChoiceNum; /* choice value */ Pint ElementPos, NumElements, CurrentElement; size_t ElementSize; static char ElementNames[][28] = { "PELEM_ALL", "PELEM_NIL", "PELEM_POLYLINE3", "PELEM_POLYLINE", "PELEM_POLYMARKER3", "PELEM_POLYMARKER", "PELEM_TEXT3", "PELEM_TEXT", "PELEM_ANNO_TEXT_REL3", "PELEM_ANNO_TEXT_REL", "PELEM_FILL_AREA3", "PELEM_FILL_AREA", "PELEM_FILL_AREA_SET3", "PELEM_FILL_AREA_SET", "PELEM_CELL_ARRAY3", "PELEM_CELL_ARRAY", "PELEM_GDP3", "PELEM_GDP", "PELEM_LINE_IND", "PELEM_MARKER_IND", "PELEM_TEXT_IND", "PELEM_INT_IND", "PELEM_EDGE_IND", "PELEM_LINETYPE", "PELEM_LINEWIDTH", "PELEM_LINE_COLR_IND", "PELEM_MARKER_TYPE", "PELEM_MARKER_SIZE", "PELEM_MARKER_COLR_IND", "PELEM_TEXT_FONT", "PELEM_TEXT_PREC", "PELEM_CHAR_EXPAN", "PELEM_CHAR_SPACE", "PELEM_TEXT_COLR_IND", "PELEM_CHAR_HT", "PELEM_CHAR_UP_VEC", "PELEM_TEXT_PATH", "PELEM_TEXT_ALIGN", "PELEM_ANNO_CHAR_HT", "PELEM_ANNO_CHAR_UP_VEC", "PELEM_ANNO_PATH", "PELEM_ANNO_ALIGN", "PELEM_ANNO_STYLE", "PELEM_INT_STYLE", "PELEM_INT_STYLE_IND", "PELEM_INT_COLR_IND", "PELEM_EDGE_FLAG", "PELEM_EDGETYPE", "PELEM_EDGEWIDTH", "PELEM_EDGE_COLR_IND", "PELEM_PAT_SIZE", "PELEM_PAT_REF_POINT_VECS", "PELEM_PAT_REF_POINT", "PELEM_ADD_NAMES_SET", "PELEM_REMOVE_NAMES_SET", "PELEM_INDIV_ASF", "PELEM_HLHSR_ID", "PELEM_LOCAL_MODEL_TRAN3", "PELEM_LOCAL_MODEL_TRAN", "PELEM_GLOBAL_MODEL_TRAN3", "PELEM_GLOBAL_MODEL_TRAN", "PELEM_MODEL_CLIP_VOL3", "PELEM_MODEL_CLIP_VOL", "PELEM_MODEL_CLIP_IND", "PELEM_RESTORE_MODEL_CLIP_VOL", "PELEM_VIEW_IND", "PELEM_EXEC_STRUCT", "PELEM_LABEL", "PELEM_APPL_DATA", "PELEM_GSE", "PELEM_PICK_ID"}; popen_phigs((char *) stderr, 0); /* errors go to "stderr" */ pescape_u4("/dev/screen/phigs_window", &ConnID); popen_ws(WorkstnID, (void *) ConnID, WorkstnType); ppost_struct(WorkstnID, StructureID, 1.0); /*---- define the structure ---------------------------------------------*/ popen_struct(StructureID); pset_int_style(PSTYLE_HOLLOW); pfill_area3(&Square); pset_char_ht(0.04); ptext(&TextLocation, "Hello World"); pclose_struct(); /*---- display the structure --------------------------------------------*/ ppost_struct(WorkstnID, StructureID, 1.0); pupd_ws(WorkstnID, PFLAG_PERFORM); /*---- make keyboard a choice device so "[Return] to go on." works ------*/ printf("Press [Return] to continue.\n"); pset_choice_mode(WorkstnID, 2, POP_REQ, PSWITCH_NO_ECHO); preq_choice(WorkstnID, 2, &ChoiceStatus, &ChoiceNum); /*---- edit the structure -----------------------------------------------*/ pset_edit_mode(PEDIT_REPLACE); popen_struct(StructureID); pinq_elem_ptr(&Error, &ElementPos); if (Error) { printf("Error %d in pinq_elem_ptr; terminating.", Error); exit(1); } printf("Number of elements in structure: %d\n", ElementPos); NumElements = ElementPos; for (CurrentElement = 1; CurrentElement <= NumElements; CurrentElement++){ pset_elem_ptr(CurrentElement); pinq_cur_elem_type_size(&Error, &ElementType, &ElementSize); if (Error) { printf("Error %d in pinq_cur_elem_type_size; terminating.",Error); exit(1); } printf("---------------------------------------------------------\n"); printf("Element type: %d (%s)\n", ElementType, ElementNames[ElementType]); if (ElementType == PELEM_INT_STYLE) /* if int. style, replace */ pset_int_style(PSTYLE_SOLID); GetInfo(ElementType); } pclose_struct(); pupd_ws(WorkstnID, PFLAG_PERFORM); pclose_ws(WorkstnID); pclose_phigs();}/****************************************************************************//* Note that the routine below deals only with element types use in this *//* program: integers, floats, text, and a 3D point list. These examples *//* are sufficient to communicate the technique. Other types may added by *//* the user as necessary. *//****************************************************************************/GetInfo(ElementType)Pelem_type ElementType;{ Pstore Store; /* storage area */ Pint Error; /* error return variable */ Pelem_data *ElementData; /* the data */ pcreate_store(&Error, &Store); /* allocate storage memory */ if (Error) { printf("Error %d in pcreate_store; terminating.\n", Error); exit(1); } pinq_cur_elem_content(Store, &Error, &ElementData); if (Error) { printf("Error %d in pinq_cur_elem_content; terminating.\n", Error); exit(1); } switch (ElementType) { case PELEM_ALL: /* 0 */ break; case PELEM_NIL: /* 1 */ break; case PELEM_POLYLINE3: /* 2 */ break; case PELEM_POLYLINE: /* 3 */ break; case PELEM_POLYMARKER3: /* 4 */ break; case PELEM_POLYMARKER: /* 5 */ break; case PELEM_TEXT3: /* 6 */ break; case PELEM_TEXT: /* 7 */ ElemText("Text", ElementData->text.pos, ElementData->text.char_string); break; case PELEM_ANNO_TEXT_REL3: /* 8 */ break; case PELEM_ANNO_TEXT_REL: /* 9 */ break; case PELEM_FILL_AREA3: /* 10 */ ElemPtLst3("Fill Area 3", &(ElementData->point_list3)); break; case PELEM_FILL_AREA: /* 11 */ break; case PELEM_FILL_AREA_SET3: /* 12 */ break; case PELEM_FILL_AREA_SET: /* 13 */ break; case PELEM_CELL_ARRAY3: /* 14 */ break; case PELEM_CELL_ARRAY: /* 15 */ break; case PELEM_GDP3: /* 16 */ break; case PELEM_GDP: /* 17 */ break; case PELEM_LINE_IND: /* 18 */ break; case PELEM_MARKER_IND: /* 19 */ break; case PELEM_TEXT_IND: /* 20 */ break; case PELEM_INT_IND: /* 21 */ break; case PELEM_EDGE_IND: /* 22 */ break; case PELEM_LINETYPE: /* 23 */ break; case PELEM_LINEWIDTH: /* 24 */ break; case PELEM_LINE_COLR_IND: /* 25 */ break; case PELEM_MARKER_TYPE: /* 26 */ break; case PELEM_MARKER_SIZE: /* 27 */ break; case PELEM_MARKER_COLR_IND: /* 28 */ break; case PELEM_TEXT_FONT: /* 29 */ break; case PELEM_TEXT_PREC: /* 30 */ break; case PELEM_CHAR_EXPAN: /* 31 */ break; case PELEM_CHAR_SPACE: /* 32 */ break; case PELEM_TEXT_COLR_IND: /* 33 */ break; case PELEM_CHAR_HT: /* 34 */ ElemFloat("Character height", ElementData->float_data); break; case PELEM_CHAR_UP_VEC: /* 35 */ break; case PELEM_TEXT_PATH: /* 36 */ break; case PELEM_TEXT_ALIGN: /* 37 */ break; case PELEM_ANNO_CHAR_HT: /* 38 */ break; case PELEM_ANNO_CHAR_UP_VEC: /* 39 */ break; case PELEM_ANNO_PATH: /* 40 */ break; case PELEM_ANNO_ALIGN: /* 41 */ break; case PELEM_ANNO_STYLE: /* 42 */ break; case PELEM_INT_STYLE: /* 43 */ ElemInt("Interior style", ElementData->int_style); break; case PELEM_INT_STYLE_IND: /* 44 */ break; case PELEM_INT_COLR_IND: /* 45 */ break; case PELEM_EDGE_FLAG: /* 46 */ break; case PELEM_EDGETYPE: /* 47 */ break; case PELEM_EDGEWIDTH: /* 48 */ break; case PELEM_EDGE_COLR_IND: /* 49 */ break; case PELEM_PAT_SIZE: /* 50 */ break; case PELEM_PAT_REF_POINT_VECS: /* 51 */ break; case PELEM_PAT_REF_POINT: /* 52 */ break; case PELEM_ADD_NAMES_SET: /* 53 */ break; case PELEM_REMOVE_NAMES_SET: /* 54 */ break; case PELEM_INDIV_ASF: /* 55 */ break; case PELEM_HLHSR_ID: /* 56 */ break; case PELEM_LOCAL_MODEL_TRAN3: /* 57 */ break; case PELEM_LOCAL_MODEL_TRAN: /* 58 */ break; case PELEM_GLOBAL_MODEL_TRAN3: /* 59 */ break; case PELEM_GLOBAL_MODEL_TRAN: /* 60 */ break; case PELEM_MODEL_CLIP_VOL3: /* 61 */ break; case PELEM_MODEL_CLIP_VOL: /* 62 */ break; case PELEM_MODEL_CLIP_IND: /* 63 */ break; case PELEM_RESTORE_MODEL_CLIP_VOL: /* 64 */ break; case PELEM_VIEW_IND: /* 65 */ break; case PELEM_EXEC_STRUCT: /* 66 */ break; case PELEM_LABEL: /* 67 */ break; case PELEM_APPL_DATA: /* 68 */ break; case PELEM_GSE: /* 69 */ break; case PELEM_PICK_ID: /* 70 */ break; }}/****************************************************************************/ElemInt(Name, Value)char *Name;Pint Value;{ printf("%s: %d\n", Name, Value);}/****************************************************************************/ElemFloat(Name, Value)char *Name;Pfloat Value;{ printf("%s: %5.2f\n", Name, Value);}/****************************************************************************/ElemText(Name, Pos, Value)char *Name;Ppoint Pos;char *Value;{ printf("%s: \"%s\" at (%5.3f, %5.3f)\n", Name, Value, Pos.x, Pos.y);}/****************************************************************************/ElemPtLst3(Name, Value)char *Name;Ppoint_list3 *Value;{ int I; /* loop control variable */ printf("%s (%d points):\n", Name, Value->num_points); for (I = 0; I < Value->num_points; I++) printf(" (%5.3f, %5.3f, %5.3f)\n", Value->points[I].x, Value->points[I].y, Value->points[I].z);}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -