public override CommandNode DeepClone(GameObject dataHolder)
        {
            CNJointGroups clone = CRTreeNode.CreateInstance <CNJointGroups>(dataHolder);

            clone.objectsA_  = ObjectsA.DeepClone();
            clone.objectsB_  = ObjectsB.DeepClone();
            clone.locatorsC_ = LocatorsC.DeepClone();

            clone.Name         = Name;
            clone.needsUpdate_ = needsUpdate_;

            clone.creationMode_             = creationMode_;
            clone.isRigidGlue_              = isRigidGlue_;
            clone.contactDistanceSearch_    = contactDistanceSearch_;
            clone.contactAreaMin_           = contactAreaMin_;
            clone.contactAngleMaxInDegrees_ = contactAngleMaxInDegrees_;
            clone.contactNumberMax_         = contactNumberMax_;

            clone.matchingDistanceSearch_    = matchingDistanceSearch_;
            clone.limitNumberOfActiveJoints_ = limitNumberOfActiveJoints_;
            clone.activeJointsMaxInABPair_   = activeJointsMaxInABPair_;

            clone.disableCollisionsByPairs_       = disableCollisionsByPairs_;
            clone.disableAllCollisionsOfAsWithBs_ = disableAllCollisionsOfAsWithBs_;

            clone.forcemaxMode_ = forcemaxMode_;
            clone.forceMax_     = forceMax_;
            clone.forceMaxRand_ = forceMaxRand_;
            clone.forceProfile_ = new AnimationCurve();

            int nKeys = forceProfile_.length;

            Keyframe[] arrKeys = forceProfile_.keys;

            Keyframe[] arrClonedKey = new Keyframe[nKeys];

            for (int i = 0; i < nKeys; i++)
            {
                arrClonedKey[i] = arrKeys[i];
            }
            clone.forceProfile_.keys = arrClonedKey;

            clone.enableCollisionIfBreak_    = enableCollisionIfBreak_;
            clone.breakIfForceMax_           = breakIfForceMax_;
            clone.breakAllIfLeftFewUnbroken_ = breakAllIfLeftFewUnbroken_;
            clone.unbrokenNumberForBreakAll_ = unbrokenNumberForBreakAll_;
            clone.breakIfDistExcedeed_       = breakIfDistExcedeed_;
            clone.distanceForBreak_          = distanceForBreak_;
            clone.distanceForBreakRand_      = distanceForBreakRand_;
            clone.breakIfHinge_ = breakIfHinge_;

            clone.plasticity_             = plasticity_;
            clone.distanceForPlasticity_  = distanceForPlasticity_;
            clone.plasticityRateAcquired_ = plasticityRateAcquired_;

            return(clone);
        }
    protected override void CloneData(CommandNode node)
    {
      base.CloneData(node);

      CNJointGroups clone = (CNJointGroups)node;

      clone.objectsA_  = ObjectsA.DeepClone();
      clone.objectsB_  = ObjectsB.DeepClone();
      clone.locatorsC_ = LocatorsC.DeepClone();

      clone.delayedCreationTime_        = delayedCreationTime_;
      clone.creationMode_               = creationMode_;
      clone.isRigidGlue_                = isRigidGlue_;
      clone.contactDistanceSearch_      = contactDistanceSearch_;
      clone.contactAreaMin_             = contactAreaMin_;
      clone.contactAngleMaxInDegrees_   = contactAngleMaxInDegrees_;
      clone.contactNumberMax_           = contactNumberMax_;

      clone.matchingDistanceSearch_     = matchingDistanceSearch_;
      clone.limitNumberOfActiveJoints_  = limitNumberOfActiveJoints_;
      clone.activeJointsMaxInABPair_    = activeJointsMaxInABPair_;

      clone.disableCollisionsByPairs_       = disableCollisionsByPairs_;
      clone.disableAllCollisionsOfAsWithBs_ = disableAllCollisionsOfAsWithBs_;

      clone.forcemaxMode_                = forcemaxMode_;
      clone.forceMax_                    = forceMax_;
      clone.forceMaxRand_                = forceMaxRand_;
      clone.forceProfile_                = forceProfile_.DeepClone();
      
      clone.enableCollisionIfBreak_    = enableCollisionIfBreak_;
      clone.breakIfForceMax_           = breakIfForceMax_;
      clone.breakAllIfLeftFewUnbroken_ = breakAllIfLeftFewUnbroken_;
      clone.unbrokenNumberForBreakAll_ = unbrokenNumberForBreakAll_;
      clone.breakIfDistExcedeed_       = breakIfDistExcedeed_;
      clone.distanceForBreak_          = distanceForBreak_;
      clone.distanceForBreakRand_      = distanceForBreakRand_;
      clone.breakIfHinge_              = breakIfHinge_;

      clone.plasticity_                = plasticity_;
      clone.distanceForPlasticity_     = distanceForPlasticity_;
      clone.plasticityRateAcquired_    = plasticityRateAcquired_;

      clone.delayedCreationTime_       = delayedCreationTime_;
      clone.damping_                   = damping_;
    }