示例#1
0
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;
}