24 #include "FUtils/FUXmlParser.h"
58 for (xmlNode* child = node->children; child; child = child->next)
60 if (child->type == XML_ELEMENT_NODE && strcmp((
const char*)child->name, name) == 0)
69 for (xmlNode* child = node->children; child; child = child->next)
71 if (child->type == XML_ELEMENT_NODE)
73 if (strcmp((
const char*)child->name,
"node") == 0)
78 else if (strcmp((
const char*)child->name,
"instance_geometry") == 0)
81 if (! bind_material)
continue;
83 xmlUnlinkNode(bind_material);
84 xmlFreeNode(bind_material);
95 Log(
LOG_INFO,
"Applying fixes for 3ds Max exporter");
103 xmlUnlinkNode(library_images);
104 xmlFreeNode(library_images);
109 if (library_materials)
111 Log(
LOG_INFO,
"Found library_materials to delete");
112 xmlUnlinkNode(library_materials);
113 xmlFreeNode(library_materials);
121 xmlUnlinkNode(library_effects);
122 xmlFreeNode(library_effects);
126 xmlNode* library_visual_scenes =
findChildElement(root,
"library_visual_scenes");
127 if (library_visual_scenes)
129 xmlNode* visual_scene =
findChildElement(library_visual_scenes,
"visual_scene");
132 for (xmlNode* child = visual_scene->children; child; child = child->next)
134 if (child->type == XML_ELEMENT_NODE && strcmp((
const char*)child->name,
"node") == 0)
147 if (! asset)
return false;
149 if (! contributor)
return false;
151 if (! authoring_tool)
return false;
153 xmlNode* authoring_tool_text = authoring_tool->children;
154 if (! authoring_tool_text)
return false;
155 if (authoring_tool_text->type != XML_TEXT_NODE)
return false;
156 xmlChar* toolname = authoring_tool_text->content;
158 if (strcmp((
const char*)toolname,
"FBX COLLADA exporter") == 0)
168 size_t textSize = strlen(text);
169 xmlDocPtr doc = xmlParseMemory(text, (
int)textSize);
171 xmlNode* root = xmlDocGetRootElement(doc);
178 xmlDocDumpFormatMemory(doc, &mem, &size, 0);
179 *out = (
const char*)mem;
static bool applyFBXFixesNode(xmlNode *node)
static void out(const wchar_t *fmt,...)
static bool processDocument(xmlNode *root)
static bool applyFBXFixes(xmlNode *root)
static xmlNode * findChildElement(xmlNode *node, const char *name)
void FixBrokenXML(const char *text, const char **out, size_t *outSize)
Fixes some errors in COLLADA XML files that would otherwise prevent FCollada from loading them succes...
void Log(int severity, const char *msg,...)