Coppel.Damien Posted February 15, 2022 Share Posted February 15, 2022 Hello, I have multiple models that I load from .node files. NodeReferencePtr nodeRef = NodeReference::create(nodePath.c_str()); _node = nodeRef->getReference(); _node->setEnabled(true); A node can be composed of one ObjectMeshStatic(like pillar_concrete_1) or multiple ObjectMeshStatic in subgroups (Fuselage_R, BackMotor...) Is it possible to recover a list of all materials used by a node ? Link to comment
danvern Posted February 16, 2022 Share Posted February 16, 2022 Hi Damien, You can do a recursive walk and grab all materials. Something like that: #include <UnigineWorld.h> #include <UnigineFileSystem.h> using namespace Unigine; void process_node(const NodePtr &node) { if (node->isObject()) { ObjectPtr object = static_ptr_cast<Object>(node); int num_surfaces = object->getNumSurfaces(); for (int i = 0; i < num_surfaces; ++i) { Log::message("object name %s, surface name %s, material path %s\n", object->getName(), object->getSurfaceName(i), FileSystem::getVirtualPath(object->getMaterial(i)->getPath()).get()); } } if (node->getType() == Node::NODE_REFERENCE) { NodeReferencePtr node_ref = static_ptr_cast<NodeReference>(node); process_node(node_ref->getReference()); } int num_children = node->getNumChildren(); for (int i = 0; i < num_children; ++i) process_node(node->getChild(i)); } int AppWorldLogic::init() { if (NodePtr node = World::getNodeByName("test")) { process_node(node); } return 1; } Thanks! 1 Link to comment
Coppel.Damien Posted February 17, 2022 Author Share Posted February 17, 2022 Hello, Thank you ! This is exactly what I was looking for. 1 Link to comment
Recommended Posts