/*! Updates \a path to be the same path as this path. */ void SoLightPath::makeTempPath(SoTempPath *path) const { const int n = this->indices.getLength(); SoNode *node = this->headnode; path->setHead(node); for (int i = 1; i < n; i++) { int childidx = this->indices[i]; // check validity of path, return if invalid SoChildList *children = node->getChildren(); if (children == NULL || childidx < 0 || childidx >= children->getLength()) break; node = (*children)[childidx]; path->append(childidx); // childidx should be ok } }
/*! Returns the indexth node in path. */ SoNode * SoLightPath::getNode(const int index) const { #if COIN_DEBUG && 1 // debug if (index < 0 || index >= this->indices.getLength()) { SoDebugError::postInfo("SoLightPath::getNode", "index %d out of bounds", index); } #endif // debug SoNode *node = this->headnode; for (int i = 1; i < index; i++) { int childidx = this->indices[i]; SoChildList *children = node->getChildren(); node = NULL; if (children == NULL || childidx < 0 || childidx >= children->getLength()) break; node = (*children)[childidx]; } return node; }