⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 inqstructs.c

📁 Intro/: Directory containing introductory examples. HelloWorld.c A simple program that draws a bo
💻 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 + -