Check for a Geometry node when attaching bodyparts (Fixes #3957)

pull/280/head
scrawl 7 years ago
parent bc82c6a35d
commit 3fc8634206

@ -1130,6 +1130,8 @@ namespace NifOsg
triShapeToGeometry(triShape, geometry, parentNode, composite, boundTextures, animflags); triShapeToGeometry(triShape, geometry, parentNode, composite, boundTextures, animflags);
} }
geometry->setName(triShape->name);
if (geometry->getDataVariance() == osg::Object::DYNAMIC) if (geometry->getDataVariance() == osg::Object::DYNAMIC)
{ {
// Add a copy, we will alternate between the two copies every other frame using the FrameSwitch // Add a copy, we will alternate between the two copies every other frame using the FrameSwitch
@ -1219,6 +1221,7 @@ namespace NifOsg
osg::ref_ptr<SceneUtil::RigGeometry> rig(new SceneUtil::RigGeometry); osg::ref_ptr<SceneUtil::RigGeometry> rig(new SceneUtil::RigGeometry);
rig->setSourceGeometry(geometry); rig->setSourceGeometry(geometry);
rig->setName(triShape->name);
const Nif::NiSkinInstance *skin = triShape->skin.getPtr(); const Nif::NiSkinInstance *skin = triShape->skin.getPtr();

@ -32,29 +32,29 @@ namespace SceneUtil
virtual void apply(osg::MatrixTransform& node) virtual void apply(osg::MatrixTransform& node)
{ {
applyNode(node); traverse(node);
}
virtual void apply(osg::Geometry& node)
{
applyNode(node);
} }
virtual void apply(osg::Node& node) virtual void apply(osg::Node& node)
{ {
applyNode(node); traverse(node);
} }
virtual void apply(osg::Group& node) virtual void apply(osg::Group& node)
{ {
applyNode(node); traverse(node);
} }
void applyNode(osg::Node& node) virtual void apply(osg::Geometry& geom)
{ {
std::string lowerName = Misc::StringUtils::lowerCase(node.getName()); std::string lowerName = Misc::StringUtils::lowerCase(geom.getName());
if ((lowerName.size() >= mFilter.size() && lowerName.compare(0, mFilter.size(), mFilter) == 0) if ((lowerName.size() >= mFilter.size() && lowerName.compare(0, mFilter.size(), mFilter) == 0)
|| (lowerName.size() >= mFilter2.size() && lowerName.compare(0, mFilter2.size(), mFilter2) == 0)) || (lowerName.size() >= mFilter2.size() && lowerName.compare(0, mFilter2.size(), mFilter2) == 0))
mToCopy.push_back(&node); {
else osg::Node* node = &geom;
traverse(node); while (node && node->getNumParents() && !node->getStateSet())
node = node->getParent(0);
if (node)
mToCopy.push_back(node);
}
} }
void doCopy() void doCopy()

Loading…
Cancel
Save