SimObject* UniversalJoint::clone() const { UniversalJoint* newUniversalJoint = new UniversalJoint(); //copy SimObject members newUniversalJoint->copyStandardMembers(this); bool createsNewMovID = newUniversalJoint->adjustMovableID(); //copy joint members //axes std::vector<AxisDescription>::const_iterator axesIter; for(axesIter = axes.begin(); axesIter != axes.end(); ++axesIter) { newUniversalJoint->axes.push_back(*axesIter); if(axesIter->motor != NULL) { newUniversalJoint->motors.push_back(axesIter->motor->clone()); newUniversalJoint->axes.back().motor = newUniversalJoint->motors.back(); } } //currentMotor if(!newUniversalJoint->motors.empty()) { newUniversalJoint->currentMotor = newUniversalJoint->motors.back(); } //copy universal joint members newUniversalJoint->anchorPoint = anchorPoint; newUniversalJoint->axis1 = &(newUniversalJoint->axes[0]); newUniversalJoint->axis2 = &(newUniversalJoint->axes[1]); //copy child nodes std::list<SimObject*>::const_iterator pos; for(pos = childNodes.begin(); pos != childNodes.end(); ++pos) { SimObject* childNode = (*pos)->clone(); newUniversalJoint->addChildNode(childNode, false); } if(createsNewMovID) { simulation->removeCurrentMovableID(); } SimObject* newObject = newUniversalJoint; return newObject; }