/**
   * Sets the transform component of this TransformGroup to the value of the passed transform.
   *
   * @param t1 the transform to be copied
   */
  void setTransform(Transform3D t1) {
    J3dMessage tchangeMessage = null;
    int i, j;
    Transform3D trans = null;

    if (staticTransform != null) {
      // this writeable transformGroup has a static transform
      // merged into this node

      trans = new Transform3D(staticTransform.transform);
      trans.mul(t1);

      transform.setWithLock(trans);

    } else {
      trans = new Transform3D(t1);
      transform.setWithLock(t1);
    }

    if (transformChange != null) {
      notifyConditions();
    }

    if (source.isLive()) {

      if (aboveAViewPlatform && !t1.isCongruent()) {
        throw new BadTransformException(J3dI18N.getString("ViewPlatformRetained0"));
      }

      tchangeMessage = new J3dMessage();
      tchangeMessage.type = J3dMessage.TRANSFORM_CHANGED;
      tchangeMessage.threads = targetThreads;
      tchangeMessage.args[1] = this;
      tchangeMessage.args[2] = trans;

      tchangeMessage.universe = universe;
      // System.err.println("TransformGroupRetained --- TRANSFORM_CHANGED " + this);
      VirtualUniverse.mc.processMessage(tchangeMessage);
    }
    dirtyBoundsCache();
  }