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

📄 scene_dump.c

📁 一个用于智能手机的多媒体库适合S60 WinCE的跨平台开发库
💻 C
📖 第 1 页 / 共 5 页
字号:
				if (isProto) {					fprintf(sdump->trace, "<ProtoInstance name=\"%s\" DEF=\"", name);				} else {					fprintf(sdump->trace, "<%s DEF=\"", name);				}				DumpNodeID(sdump, node);				fprintf(sdump->trace, "\"/>\n");			} else {				if (isProto) {					fprintf(sdump->trace, "<ProtoInstance name=\"%s\"/>\n", name);				} else {					fprintf(sdump->trace, "<%s/>\n", name);				}			}		}		free(def_fields);		return;	}	if (!sdump->XMLDump) {		if (in_list) DUMP_IND(sdump);		if (isDEF) {			fprintf(sdump->trace, "DEF ");			DumpNodeID(sdump, node);			fprintf(sdump->trace, " ");		}		fprintf(sdump->trace, "%s {\n", name);	} else {		if (isProto) {			StartElement(sdump, "ProtoInstance");			StartAttribute(sdump, "name");			fprintf(sdump->trace, "%s", name);			EndAttribute(sdump);		} else {			StartElement(sdump, name);		}		if (isDEF) {			StartAttribute(sdump, "DEF");			DumpNodeID(sdump, node);			EndAttribute(sdump);		}	}	sdump->indent ++;	for (i=0;i<count; i++) {		switch (def_fields[i]) {		/*regular field*/		case 1:			gf_node_get_field(node, i, &field);			if (!isScript) {				DumpField(sdump, node, field);			}			/*special script dump case, static fields except url*/			else if (i==1 || i==2) {				if (*((SFBool *)field.far_ptr)) DumpField(sdump, node, field);			}			/*in bt first dump fields - in XMT first dump url*/			else if (i && !sdump->XMLDump) {				DumpDynField(sdump, node, field, 0);			} else if (!i && sdump->XMLDump) {				DumpField(sdump, node, field);			}			break;		/*IS field*/		case 3:			if (sdump->XMLDump) break;			gf_node_get_field(node, i, &field);			DumpISField(sdump, node, field, isScript, 0);			def_fields[i] = 0;			break;		default:			break;		}	}	if (fieldContainer) fprintf(sdump->trace, " fieldContainer=\"%s\"", fieldContainer);	if (isScript) sub_el = 1;	EndElementHeader(sdump, sub_el ? 1 : 0);		if (sub_el) {		/*dump all normal IS elements for XMT*/		if (hasISed && sdump->XMLDump) {			StartElement(sdump, "IS");			EndElementHeader(sdump, 1);			sdump->indent++;		}		for (i=0;i<count; i++) {			if (def_fields[i]==3) {				gf_node_get_field(node, i, &field);				DumpISField(sdump, node, field, isScript, 1);			}		}		if (hasISed && sdump->XMLDump) {			sdump->indent--;			EndElement(sdump, "IS", 1);		}		/*dump all sub elements and complex IS*/		for (i=0;i<count; i++) {			switch (def_fields[i]) {			case 2:				gf_node_get_field(node, i, &field);				if (!isScript) {					if (isProto && sdump->XMLDump) {						DumpProtoField(sdump, node, field);					} else {						DumpField(sdump, node, field);					}				} else {					/*X3D script metadata, NOT DYN*/					if ((i==3) && (node->sgprivate->tag==TAG_X3D_Script) ) {						if (*((GF_Node **)field.far_ptr)) DumpField(sdump, node, field);					} else {						DumpDynField(sdump, node, field, 0);					}				}				break;			case 4:				gf_node_get_field(node, i, &field);				DumpISField(sdump, node, field, isScript, 0);				break;			}		}	}	/*finally dump script - XMT dumping is broken!!*/	if (isScript && !sdump->XMLDump) {		gf_node_get_field(node, 0, &field);		DumpField(sdump, node, field);	} 	sdump->indent --;	if (!sdump->XMLDump && !in_list) {		DUMP_IND(sdump);		fprintf(sdump->trace, "}");	} else {		EndElement(sdump, isProto ? "ProtoInstance" : name, sub_el);	}	free(def_fields);}GF_Err DumpMultipleIndexedReplace(GF_SceneDumper *sdump, GF_Command *com){	u32 i;	GF_FieldInfo field;	GF_CommandField *inf;	if (!gf_list_count(com->command_fields)) return GF_OK;	inf = (GF_CommandField *) gf_list_get(com->command_fields, 0);	gf_node_get_field(com->node, inf->fieldIndex, &field);	field.fieldType = inf->fieldType;	DUMP_IND(sdump);	if (sdump->XMLDump) {		fprintf(sdump->trace, "<Replace extended=\"indices\" atNode=\"");		DumpNodeID(sdump, com->node);		fprintf(sdump->trace, "\" atField=\"%s\">\n", field.name);	} else {		fprintf(sdump->trace, "MULTIPLEINDREPLACE ");		DumpNodeID(sdump, com->node);		fprintf(sdump->trace, ".%s [\n", field.name);	}	sdump->indent++;	i=0;	while ((inf = (GF_CommandField *) gf_list_enum(com->command_fields, &i))) {		field.far_ptr = inf->field_ptr;		DUMP_IND(sdump);		if (sdump->XMLDump) {			fprintf(sdump->trace, "<repValue position=\"%d\" ", inf->pos);		} else {			fprintf(sdump->trace, "%d BY ", inf->pos);		}		DumpFieldValue(sdump, field);		if (sdump->XMLDump) {			fprintf(sdump->trace, "/>");		} else {			fprintf(sdump->trace, "\n");		}	}	sdump->indent--;	DUMP_IND(sdump);	if (sdump->XMLDump) {		fprintf(sdump->trace, "</Replace>\n");	} else {		fprintf(sdump->trace, "]\n");	}	return GF_OK;}GF_Err DumpMultipleReplace(GF_SceneDumper *sdump, GF_Command *com){	u32 i;	GF_FieldInfo info;	GF_CommandField *inf;	if (!gf_list_count(com->command_fields)) return GF_OK;	DUMP_IND(sdump);	if (sdump->XMLDump) {		fprintf(sdump->trace, "<Replace extended=\"fields\" atNode=\"");		DumpNodeID(sdump, com->node);		fprintf(sdump->trace, "\">\n");				sdump->indent++;		i=0;		while ((inf = (GF_CommandField *) gf_list_enum(com->command_fields, &i))) {			gf_node_get_field(com->node, inf->fieldIndex, &info);			info.far_ptr = inf->field_ptr;			DUMP_IND(sdump);			if (gf_sg_vrml_get_sf_type(info.fieldType) != GF_SG_VRML_SFNODE) {				fprintf(sdump->trace, "<repField atField=\"%s\" ", info.name);				DumpFieldValue(sdump, info);				fprintf(sdump->trace, "/>\n");			} else {				fprintf(sdump->trace, "<repField>");				DumpField(sdump, com->node, info);				fprintf(sdump->trace, "</repField>\n");			}		}		sdump->indent--;				DUMP_IND(sdump);		fprintf(sdump->trace, "</Replace>\n");	} else {		fprintf(sdump->trace, "MULTIPLEREPLACE ");		DumpNodeID(sdump, com->node);		fprintf(sdump->trace, " {\n");		sdump->indent++;		i=0;		while ((inf = (GF_CommandField *) gf_list_enum(com->command_fields, &i))) {			gf_node_get_field(com->node, inf->fieldIndex, &info);			info.far_ptr = inf->field_ptr;			DumpField(sdump, com->node, info);		}		sdump->indent--;		DUMP_IND(sdump);		fprintf(sdump->trace, "}\n");	}	return GF_OK;}GF_Err DumpGlobalQP(GF_SceneDumper *sdump, GF_Command *com){	GF_CommandField *inf;	if (!gf_list_count(com->command_fields)) return GF_OK;	inf = (GF_CommandField *) gf_list_get(com->command_fields, 0);	DUMP_IND(sdump);	if (sdump->XMLDump) {		fprintf(sdump->trace, "<Replace extended=\"globalQuant\">\n");	} else {		fprintf(sdump->trace, "GLOBALQP ");	}	DumpNode(sdump, inf->new_node, 0, NULL);	if (sdump->XMLDump) fprintf(sdump->trace, "</Replace>\n");	else fprintf(sdump->trace, "\n");	return GF_OK;}GF_Err DumpNodeInsert(GF_SceneDumper *sdump, GF_Command *com){	GF_CommandField *inf;	char posname[20];	if (!gf_list_count(com->command_fields)) return GF_OK;	inf = (GF_CommandField *) gf_list_get(com->command_fields, 0);	switch (inf->pos) {	case 0:		strcpy(posname, "BEGIN");		break;	case -1:		strcpy(posname, "END");		break;	default:		sprintf(posname, "%d", inf->pos);		break;	}	DUMP_IND(sdump);	if (sdump->XMLDump) {		fprintf(sdump->trace, "<Insert atNode=\"");		DumpNodeID(sdump, com->node);		fprintf(sdump->trace, "\" position=\"%s\">", posname);	} else {		if (inf->pos==-1) { fprintf(sdump->trace, "APPEND TO "); }		else fprintf(sdump->trace, "INSERT AT ");		DumpNodeID(sdump, com->node);		fprintf(sdump->trace, ".children");		if (inf->pos!=-1) fprintf(sdump->trace, "[%d]", inf->pos);		fprintf(sdump->trace, " ");	}	DumpNode(sdump, inf->new_node, 0, NULL);	if (sdump->XMLDump) fprintf(sdump->trace, "</Insert>");	fprintf(sdump->trace, "\n");	return GF_OK;}GF_Err DumpRouteInsert(GF_SceneDumper *sdump, GF_Command *com, Bool is_scene_replace){	GF_Route r;	memset(&r, 0, sizeof(GF_Route));	r.ID = com->RouteID;	r.name = com->def_name;	r.FromNode = SD_FindNode(sdump, com->fromNodeID);	r.FromField.fieldIndex = com->fromFieldIndex;	r.ToNode = SD_FindNode(sdump, com->toNodeID);	r.ToField.fieldIndex = com->toFieldIndex;	gf_list_add(sdump->inserted_routes, com);	if (is_scene_replace) {		DumpRoute(sdump, &r, 0);	} else {		DUMP_IND(sdump);		if (sdump->XMLDump) {			fprintf(sdump->trace, "<Insert>\n");		} else {			fprintf(sdump->trace, "INSERT ");		}		DumpRoute(sdump, &r, 2);		if (sdump->XMLDump) fprintf(sdump->trace, "</Insert>");	}	return GF_OK;}GF_Err DumpIndexInsert(GF_SceneDumper *sdump, GF_Command *com){	GF_Err e;	GF_FieldInfo field, sffield;	GF_CommandField *inf;	char posname[20];	if (!gf_list_count(com->command_fields)) return GF_OK;	inf = (GF_CommandField *) gf_list_get(com->command_fields, 0);	switch (inf->pos) {	case 0:		strcpy(posname, "BEGIN");		break;	case -1:		strcpy(posname, "END");		break;	default:		sprintf(posname, "%d", inf->pos);		break;	}	e = gf_node_get_field(com->node, inf->fieldIndex, &field);	if (e) return e;	if (gf_sg_vrml_is_sf_field(field.fieldType)) return GF_NON_COMPLIANT_BITSTREAM;	DUMP_IND(sdump);	if (sdump->XMLDump) {		fprintf(sdump->trace, "<Insert atNode=\"");		DumpNodeID(sdump, com->node);		fprintf(sdump->trace, "\" atField=\"%s\" position=\"%s\"", field.name, posname);	} else {		if (inf->pos==-1) { fprintf(sdump->trace, "APPEND TO "); }		else fprintf(sdump->trace, "INSERT AT ");		DumpNodeID(sdump, com->node);		fprintf(sdump->trace, ".%s", field.name);		if (inf->pos!=-1) fprintf(sdump->trace, "[%d]", inf->pos);		fprintf(sdump->trace, " ");	}		memcpy(&sffield, &field, sizeof(GF_FieldInfo));	sffield.fieldType = gf_sg_vrml_get_sf_type(field.fieldType);	if (field.fieldType==GF_SG_VRML_MFNODE) {		if (sdump->XMLDump) fprintf(sdump->trace, ">\n");		DumpNode(sdump, inf->new_node, 0, NULL);		if (sdump->XMLDump) fprintf(sdump->trace, "</Insert>");		fprintf(sdump->trace, "\n");	} else {		sffield.far_ptr = inf->field_ptr;		DumpFieldValue(sdump, sffield);		if (sdump->XMLDump) fprintf(sdump->trace, "/>");		fprintf(sdump->trace, "\n");	}	return e;}GF_Err DumpIndexDelete(GF_SceneDumper *sdump, GF_Command *com){	char posname[20];	GF_FieldInfo field;	GF_CommandField *inf;	if (!gf_list_count(com->command_fields)) return GF_OK;	inf = (GF_CommandField *) gf_list_get(com->command_fields, 0);	switch (inf->pos) {	case -1:		strcpy(posname, sdump->XMLDump ? "END" : "LAST");		break;	case 0:		strcpy(posname, "BEGIN");		break;	default:		sprintf(posname, "%d", inf->pos);		break;	}	gf_node_get_field(com->node, inf->fieldIndex, &field);	DUMP_IND(sdump);	if (sdump->XMLDump) {		fprintf(sdump->trace, "<Delete atNode=\"");		DumpNodeID(sdump, com->node);		fprintf(sdump->trace, "\" atField=\"%s\" position=\"%s\"/>", field.name, posname);	} else {		fprintf(sdump->trace, "DELETE ");		if (inf->pos==-1) fprintf(sdump->trace, "%s ", posname);		DumpNodeID(sdump, com->node);		fprintf(sdump->trace, ".%s", field.name);		if (inf->pos!=-1) fprintf(sdump->trace, "[%d]", inf->pos);		fprintf(sdump->trace, "\n");	}	return GF_OK;}GF_Err DumpNodeDelete(GF_SceneDumper *sdump, GF_Command *com){	DUMP_IND(sdump);	if (sdump->XMLDump) {		if (com->tag==GF_SG_NODE_DELETE_EX) {			fprintf(sdump->trace, "<Delete extended=\"deleteOrder\" atNode=\"");		} else {			fprintf(sdump->trace, "<Delete atNode=\"");		}		DumpNodeID(sdump, com->node);		fprintf(sdump->trace, "\"/>\n");	} else {		if (com->tag==GF_SG_NODE_DELETE_EX) fprintf(sdump->trace, "X");		fprintf(sdump->trace, "DELETE ");		DumpNodeID(sdump, com->node);		fprintf(sdump->trace, "\n");	}	return GF_OK;}GF_Err DumpRouteDelete(GF_SceneDumper *sdump, GF_Command *com){	DUMP_IND(sdump);	if (sdump->XMLDump) {		fprintf(sdump->trace, "<Delete atRoute=\"");		DumpRouteID(sdump, com->RouteID, com->def_name);		fprintf(sdump->trace, "\"/>\n");	} else {		fprintf(sdump->trace, "DELETE ROUTE ");		DumpRouteID(sdump, com->RouteID, com->def_name);		fprintf(sdump->trace, "\n");	}	return GF_OK;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -