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

📄 scene_dump.c

📁 一个用于智能手机的多媒体库适合S60 WinCE的跨平台开发库
💻 C
📖 第 1 页 / 共 5 页
字号:
GF_Err DumpNodeReplace(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 atNode=\"");		DumpNodeID(sdump, com->node);		fprintf(sdump->trace, "\">");		DumpNode(sdump, inf->new_node, 0, NULL);		fprintf(sdump->trace, "</Replace>\n");	} else {		fprintf(sdump->trace, "REPLACE ");		DumpNodeID(sdump, com->node);		fprintf(sdump->trace, " BY ");		DumpNode(sdump, inf->new_node, 0, NULL);		fprintf(sdump->trace, "\n");	}	return GF_OK;}GF_Err DumpFieldReplace(GF_SceneDumper *sdump, GF_Command *com){	GF_Err e;	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);	e = gf_node_get_field(com->node, inf->fieldIndex, &field);	DUMP_IND(sdump);	if (sdump->XMLDump) {		fprintf(sdump->trace, "<Replace atNode=\"");		DumpNodeID(sdump, com->node);		fprintf(sdump->trace, "\" atField=\"%s\" ", field.name);	} else {		fprintf(sdump->trace, "REPLACE ");		DumpNodeID(sdump, com->node);		fprintf(sdump->trace, ".%s BY ", field.name);	}	switch (field.fieldType) {	case GF_SG_VRML_SFNODE:		if (sdump->XMLDump) fprintf(sdump->trace, ">");		DumpNode(sdump, inf->new_node, 0, NULL);		if (sdump->XMLDump) fprintf(sdump->trace, "</Replace>");		else fprintf(sdump->trace, "\n");		break;	case GF_SG_VRML_MFNODE:		{			GF_ChildNodeItem *tmp;			if (sdump->XMLDump) {				fprintf(sdump->trace, ">");			} else {				fprintf(sdump->trace, " [\n");			}			sdump->indent++;			tmp = inf->node_list;			while (tmp) {				DumpNode(sdump, tmp->node, 1, NULL);				tmp = tmp->next;			}			sdump->indent--;			if (sdump->XMLDump) {				fprintf(sdump->trace, "</Replace>");			} else {				EndList(sdump, NULL);			}		}		break;	case GF_SG_VRML_SFCOMMANDBUFFER:		if (sdump->XMLDump) {			SFCommandBuffer *cb = (SFCommandBuffer*)inf->field_ptr;			fprintf(sdump->trace, ">\n");			gf_sm_dump_command_list(sdump, cb->commandList, sdump->indent+1, 0);			DUMP_IND(sdump);			fprintf(sdump->trace, "</Replace>\n");		} else {			SFCommandBuffer *cb = (SFCommandBuffer*)inf->field_ptr;			fprintf(sdump->trace, " {\n");			gf_sm_dump_command_list(sdump, cb->commandList, sdump->indent+1, 0);			DUMP_IND(sdump);			fprintf(sdump->trace, "}\n");		}		break;	default:		field.far_ptr = inf->field_ptr;		DumpFieldValue(sdump, field);		if (sdump->XMLDump) fprintf(sdump->trace, "/>");		fprintf(sdump->trace, "\n");	}	return e;}GF_Err DumpIndexReplace(GF_SceneDumper *sdump, GF_Command *com){	char posname[20];	GF_Err e;	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);	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;	switch (inf->pos) {	case 0:		strcpy(posname, "BEGIN");		break;	case -1:		strcpy(posname, sdump->XMLDump ? "END" : "LAST");		break;	default:		sprintf(posname, "%d", inf->pos);		break;	}	DUMP_IND(sdump);	if (sdump->XMLDump) {		fprintf(sdump->trace, "<Replace atNode=\"");		DumpNodeID(sdump, com->node);		fprintf(sdump->trace, "\" atField=\"%s\" position=\"%s\"", field.name, posname);	} else {		fprintf(sdump->trace, "REPLACE ");		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, " BY ");	}	if (field.fieldType == GF_SG_VRML_MFNODE) {		if (sdump->XMLDump) fprintf(sdump->trace, ">\n");		DumpNode(sdump, inf->new_node, 0, NULL);		fprintf(sdump->trace, (sdump->XMLDump) ? "</Replace>\n" : "\n");	} else {		field.fieldType = gf_sg_vrml_get_sf_type(field.fieldType);		field.far_ptr = inf->field_ptr;		DumpFieldValue(sdump, field);		fprintf(sdump->trace, sdump->XMLDump ? "/>\n" : "\n");	}	return GF_OK;}GF_Err DumpRouteReplace(GF_SceneDumper *sdump, GF_Command *com){	const char *name;	GF_Route r2;	if (!DumpFindRouteName(sdump, com->RouteID, &name)) return GF_BAD_PARAM;	memset(&r2, 0, sizeof(GF_Route));	r2.FromNode = SD_FindNode(sdump, com->fromNodeID);	r2.FromField.fieldIndex = com->fromFieldIndex;	r2.ToNode = SD_FindNode(sdump, com->toNodeID);	r2.ToField.fieldIndex = com->toFieldIndex;	DUMP_IND(sdump);	if (sdump->XMLDump) {		fprintf(sdump->trace, "<Replace atRoute=\"");		DumpRouteID(sdump, com->RouteID, (char *) name);		fprintf(sdump->trace, "\">\n");	} else {		fprintf(sdump->trace, "REPLACE ROUTE ");		DumpRouteID(sdump, com->RouteID, (char *) name);		fprintf(sdump->trace, " BY ");	}	DumpRoute(sdump, &r2, 1);	if (sdump->XMLDump ) fprintf(sdump->trace, "</Replace>");	return GF_OK;}GF_Err DumpRoute(GF_SceneDumper *sdump, GF_Route *r, u32 dump_type){	char toNode[512], fromNode[512];	const char *node_name;	u32 id;	if (!r->is_setup) {		gf_node_get_field(r->FromNode, r->FromField.fieldIndex, &r->FromField);		gf_node_get_field(r->ToNode, r->ToField.fieldIndex, &r->ToField);		r->is_setup = 1;	}	if (!r->FromNode || !r->ToNode) return GF_BAD_PARAM;		if (sdump->XMLDump || !dump_type) DUMP_IND(sdump);		node_name = gf_node_get_name_and_id(r->FromNode, &id);	if (node_name) {		strcpy(fromNode, node_name);		strcpy(toNode, gf_node_get_name(r->ToNode));	} else {		sprintf(fromNode, "N%d", id-1);		sprintf(toNode, "N%d", gf_node_get_id(r->ToNode) - 1);	}	if (sdump->XMLDump) {		fprintf(sdump->trace, "<ROUTE");		if (r->ID) {			StartAttribute(sdump, "DEF");			DumpRouteID(sdump, r->ID, r->name);			EndAttribute(sdump);		}		fprintf(sdump->trace, " fromNode=\"%s\" fromField=\"%s\" toNode=\"%s\" toField=\"%s\"/>\n", fromNode, r->FromField.name, toNode, r->ToField.name);	} else {		if (dump_type==2) fprintf(sdump->trace, "ROUTE ");		if (r->ID) {			fprintf(sdump->trace, "DEF ");			DumpRouteID(sdump, r->ID, r->name);			fprintf(sdump->trace, " ");		}		if (dump_type==1) {			fprintf(sdump->trace, "%s.%s TO %s.%s\n", fromNode, r->FromField.name, toNode, r->ToField.name);		} else {			if (dump_type!=2) fprintf(sdump->trace, "ROUTE ");			fprintf(sdump->trace, "%s.%s TO %s.%s\n", fromNode, r->FromField.name, toNode, r->ToField.name);		}	}	return GF_OK;}GF_Err DumpProtos(GF_SceneDumper *sdump, GF_List *protoList){	u32 i, j, count;	GF_FieldInfo field;	GF_Err e;	GF_SceneGraph *prev_sg;	GF_Proto *proto, *prev_proto;	prev_proto = sdump->current_proto;	i=0;	while ((proto = (GF_Proto*)gf_list_enum(protoList, &i))) {		sdump->current_proto = proto;			DUMP_IND(sdump);		if (!sdump->XMLDump) {			fprintf(sdump->trace, proto->ExternProto.count ? "EXTERNPROTO " : "PROTO ");			fprintf(sdump->trace, "%s [\n", proto->Name);		} else {			fprintf(sdump->trace, "<ProtoDeclare name=\"%s\" protoID=\"%d\"", proto->Name, proto->ID);			if (proto->ExternProto.count) {				fprintf(sdump->trace, " locations=\"");				DumpSFField(sdump, GF_SG_VRML_SFURL, &proto->ExternProto.vals[0], 0);				fprintf(sdump->trace, "\"");			}			fprintf(sdump->trace, ">\n");		}		if (sdump->XMLDump && sdump->X3DDump) fprintf(sdump->trace, "<ProtoInterface>");		sdump->indent++;		count = gf_list_count(proto->proto_fields);		for (j=0; j<count; j++) {			GF_ProtoFieldInterface *pf = (GF_ProtoFieldInterface *)gf_list_get(proto->proto_fields, j);			field.fieldIndex = pf->ALL_index;			field.eventType = pf->EventType;			field.far_ptr = pf->def_value;			field.fieldType = pf->FieldType;			field.name = pf->FieldName;			field.NDTtype = NDT_SFWorldNode;			field.on_event_in = NULL;						DumpDynField(sdump, NULL, field, pf->QP_Type ? 1 : 0);			if (!pf->QP_Type) continue;						/*dump interface coding - BT/TXT extensions, not supported by any other tool*/			sdump->indent++;			DUMP_IND(sdump);			if (sdump->XMLDump) {				fprintf(sdump->trace, "<InterfaceCodingParameters quantCategoy=\"%s\"", SD_GetQuantCatName(pf->QP_Type));			} else {				fprintf(sdump->trace, "{QP %d", pf->QP_Type);			}			if (pf->QP_Type==QC_LINEAR_SCALAR) fprintf(sdump->trace, sdump->XMLDump ? " nbBits=\"%d\"" : " nbBits %d", pf->NumBits);			if (pf->hasMinMax) {				switch (pf->QP_Type) {				case QC_LINEAR_SCALAR:				case QC_COORD_INDEX:					if (sdump->XMLDump) {						fprintf(sdump->trace, " intMin=\"%d\" intMax=\"%d\"", *((SFInt32 *)pf->qp_min_value), *((SFInt32 *)pf->qp_max_value));					} else {						fprintf(sdump->trace, " b {%d %d}", *((SFInt32 *)pf->qp_min_value), *((SFInt32 *)pf->qp_max_value));					}					break;				default:					if (sdump->XMLDump) {						fprintf(sdump->trace, " floatMin=\"%g\" floatMax=\"%g\"", FIX2FLT( *((SFFloat *)pf->qp_min_value) ), FIX2FLT( *((SFFloat *)pf->qp_max_value) ));					} else {						fprintf(sdump->trace, " b {%g %g}", FIX2FLT( *((SFFloat *)pf->qp_min_value) ), FIX2FLT( *((SFFloat *)pf->qp_max_value) ) );					}					break;				}			}			fprintf(sdump->trace, sdump->XMLDump ? "/>\n" : "}\n");			sdump->indent--;			if (sdump->XMLDump) {				DUMP_IND(sdump);				fprintf(sdump->trace, "</field>\n");			}		}				sdump->indent--;		DUMP_IND(sdump);		if (!sdump->XMLDump) {			fprintf(sdump->trace, "]");		} else if (sdump->X3DDump) fprintf(sdump->trace, "</ProtoInterface>\n");		if (proto->ExternProto.count) {			if (!sdump->XMLDump) {				fprintf(sdump->trace, " \"");				DumpSFField(sdump, GF_SG_VRML_SFURL, &proto->ExternProto.vals[0], 0);				fprintf(sdump->trace, "\"\n\n");			} else {				fprintf(sdump->trace, "</ProtoDeclare>\n");			}			continue;		}		if (!sdump->XMLDump) fprintf(sdump->trace, " {\n");		sdump->indent++;		if (sdump->XMLDump && sdump->X3DDump) fprintf(sdump->trace, "<ProtoBody>\n");				e = DumpProtos(sdump, proto->sub_graph->protos);		if (e) return e;		/*set namespace to the proto one*/		prev_sg = sdump->sg;		sdump->sg = gf_sg_proto_get_graph(proto);		count = gf_list_count(proto->node_code);		for (j=0; j<count; j++) {			GF_Node *n = (GF_Node*)gf_list_get(proto->node_code, j);			DumpNode(sdump, n, 1, NULL);		}		count = gf_list_count(proto->sub_graph->Routes);		for (j=0; j<count; j++) {			GF_Route *r = (GF_Route *)gf_list_get(proto->sub_graph->Routes, j);			if (r->IS_route) continue;			DumpRoute(sdump, r, 0);		}		if (sdump->XMLDump && sdump->X3DDump) fprintf(sdump->trace, "</ProtoBody>\n");		/*restore namespace*/		sdump->sg = prev_sg;		sdump->indent--;		DUMP_IND(sdump);		if (!sdump->XMLDump) {			fprintf(sdump->trace, "}\n");		} else {			fprintf(sdump->trace, "</ProtoDeclare>\n");		}	}	sdump->current_proto = prev_proto;	return GF_OK;}GF_Err DumpSceneReplace(GF_SceneDumper *sdump, GF_Command *com){	if (sdump->XMLDump) {		if (!sdump->X3DDump) {			StartElement(sdump, "Replace");			EndElementHeader(sdump, 1);			sdump->indent++;		}		StartElement(sdump, "Scene");		if (!sdump->X3DDump && com->use_names) DumpBool(sdump, "USENAMES", com->use_names);		EndElementHeader(sdump, 1);		sdump->indent++;	} else {		if (!sdump->skip_scene_replace) {			DUMP_IND(sdump);			fprintf(sdump->trace, "REPLACE SCENE BY ");		}	}	DumpProtos(sdump, com->new_proto_list);	DumpNode(sdump, com->node, 0, NULL);	if (!sdump->XMLDump) fprintf(sdump->trace, "\n\n");	return GF_OK;}GF_Err DumpProtoInsert(GF_SceneDumper *sdump, GF_Command *com){	DUMP_IND(sdump);	if (sdump->XMLDump) {		fprintf(sdump->trace, "<Insert extended=\"proto\">\n");	} else {		fprintf(sdump->trace, "INSERTPROTO [\n");	}	sdump->indent++;	DumpProtos(sdump, com->new_proto_list);	sdump->indent--;	DUMP_IND(sdump);	if (sdump->XMLDump) {		fprintf(sdump->trace, "</Insert>\n");	} else {		fprintf(sdump->trace, "]\n");	}	return GF_OK;}#ifndef GPAC_DISABLE_SVGstatic char *lsr_format_node_id(GF_Node *n, u32 NodeID, char *str){	if (!n) sprintf(str, "N%d", NodeID-1);	else {		const char *name = gf_node_get_name_and_id(n, &NodeID);		if (name) sprintf(str, "%s", name);		else sprintf(str, "N%d", NodeID - 1);	}	return str;}GF_Err DumpLSRNewScene(GF_SceneDumper *sdump, GF_Command *com){	fprintf(sdump->trace, "<lsr:NewScene>\n");	SD_DumpSVG_Element(sdump, com->node, NULL, 0);	fprintf(sdump->trace, "</lsr:NewScene>\n");	return GF_OK;}GF_Err DumpLSRAddReplaceInsert(GF_SceneDumper *sdump, GF_Command *com){	char szAtt[80000];	Bool is_text = 0;	GF_CommandField *f;	const char *com_name = (com->tag==GF_SG_LSR_REPLACE) ? "Replace" : ( (com->tag==GF_SG_LSR_ADD) ? "Add" : "Insert" );	DUMP_IND(sdump);	fprintf(sdump->trace, "<lsr:%s ref=\"%s\" ", com_name, lsr_format_node_id(com->node, com->RouteID, szAtt));	f = (GF_CommandField *) gf_list_get(com->command_fields, 0);	if (f && (f->pos>=0) ) fprintf(sdump->trace, "index=\"%d\" ", f->pos);	if (f) {		GF_FieldInfo info;		if (!f->new_node && !f->node_list) {			char *att_name = NULL;			if (f->fieldType==SVG_Transform_Scale_datatype) att_name = "scale

⌨️ 快捷键说明

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