📄 scene_dump.c
字号:
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 + -