From 50e271f2d7bfc7ddaae2e1e168949bffaa33ca8b Mon Sep 17 00:00:00 2001 From: devZoGok Date: Thu, 31 Mar 2022 19:08:09 +0300 Subject: [PATCH] cloning original bones as bones --- node.cpp | 8 ++++++-- nodeTest.cpp | 17 +++++++++++++---- 2 files changed, 19 insertions(+), 6 deletions(-) diff --git a/node.cpp b/node.cpp index aecc973..4da8090 100755 --- a/node.cpp +++ b/node.cpp @@ -79,8 +79,12 @@ namespace vb01{ Bone *originalBone = dynamic_cast(original); Node *clone = nullptr; - if(originalBone) - clone = new Bone(originalBone->getName(), originalBone->getLength(), originalBone->getPosition(), originalBone->getOrientation(), originalBone->getScale()); + if(originalBone){ + Bone *boneClone = new Bone(originalBone->getName(), originalBone->getLength(), originalBone->getPosition(), originalBone->getOrientation(), originalBone->getScale()); + boneClone->setIkChainLength(originalBone->getIkChainLength()); + boneClone->setIkTarget(originalBone->getIkTarget()); + clone = boneClone; + } else clone = new Node(original->getPosition(), original->getOrientation(), original->getScale(), original->getName()); diff --git a/nodeTest.cpp b/nodeTest.cpp index 9e4fa35..e2b41de 100644 --- a/nodeTest.cpp +++ b/nodeTest.cpp @@ -115,11 +115,18 @@ namespace vb01{ Skeleton *skeleton = new Skeleton(); originalC->dettachChild(originalD); originalA->dettachChild(originalC); + originalA->dettachChild(originalB); originalC = new Bone(originalC->getName(), .25); originalD = new Bone(originalD->getName(), .5); + originalB = new Bone(originalB->getName(), .1); originalC->attachChild(originalD); originalA->attachChild(originalC); + originalA->attachChild(originalB); + + dynamic_cast(originalB)->setIkChainLength(2); + dynamic_cast(originalB)->setIkTarget(originalD->getName()); + skeleton->addBone(dynamic_cast(originalB), nullptr); skeleton->addBone(dynamic_cast(originalC), nullptr); skeleton->addBone(dynamic_cast(originalD), nullptr); originalA->addSkeleton(skeleton); @@ -128,10 +135,12 @@ namespace vb01{ CPPUNIT_ASSERT(clonedA->getSkeleton(0)); Skeleton *clonedSkeleton = originalA->getSkeleton(0); - CPPUNIT_ASSERT(clonedSkeleton->getBone(0)->getName() == dynamic_cast(originalC)->getName()); - CPPUNIT_ASSERT(clonedSkeleton->getBone(0)->getLength() == dynamic_cast(originalC)->getLength()); - CPPUNIT_ASSERT(clonedSkeleton->getBone(1)->getLength() == dynamic_cast(originalD)->getLength()); - CPPUNIT_ASSERT(clonedSkeleton->getBone(1)->getName() == dynamic_cast(originalD)->getName()); + CPPUNIT_ASSERT(clonedSkeleton->getBone(originalB->getName())->getIkChainLength() == dynamic_cast(originalB)->getIkChainLength()); + CPPUNIT_ASSERT(clonedSkeleton->getBone(originalB->getName())->getIkTarget() == dynamic_cast(originalB)->getIkTarget()); + CPPUNIT_ASSERT(clonedSkeleton->getBone(originalC->getName())->getName() == dynamic_cast(originalC)->getName()); + CPPUNIT_ASSERT(clonedSkeleton->getBone(originalC->getName())->getLength() == dynamic_cast(originalC)->getLength()); + CPPUNIT_ASSERT(clonedSkeleton->getBone(originalD->getName())->getLength() == dynamic_cast(originalD)->getLength()); + CPPUNIT_ASSERT(clonedSkeleton->getBone(originalD->getName())->getName() == dynamic_cast(originalD)->getName()); } void NodeTest::testClonedMeshSkeleton(){