applyTransformMatrix method

void applyTransformMatrix(
  1. Map<String, Matrix4>? transformation
)
  • Apply a transformation matrix, to the camera and gizmos
  • transformation Object containing matrices to apply to camera and gizmos

Implementation

void applyTransformMatrix(Map<String, Matrix4>? transformation) {
    if (transformation?['camera'] != null) {
      _m4_1.setFrom(_cameraMatrixState).premultiply(transformation!['camera']!);
      _m4_1.decompose(camera.position, camera.quaternion, camera.scale);
      camera.updateMatrix();

      //update camera up vector
      if (
        _state == State2.rotate ||
        _state == State2.zRotate ||
        _state == State2.animationRotate
      ){
        camera.up.setFrom(_upState).applyQuaternion(camera.quaternion);
      }
    }

    if (transformation?['gizmos'] != null) {
      _m4_1.setFrom(_gizmoMatrixState).premultiply(transformation!['gizmos']!);
      _m4_1.decompose(_gizmos.position, _gizmos.quaternion, _gizmos.scale);
      _gizmos.updateMatrix();
    }

    if (_state == State2.scale ||
        _state == State2.focus ||
        _state == State2.animationFocus) {
      _tbRadius = calculateTbRadius(camera);

      if (adjustNearFar) {
        final cameraDistance =
            camera.position.distanceTo(_gizmos.position);

        final bb = BoundingBox();
        bb.setFromObject(_gizmos);
        final sphere = BoundingSphere();
        bb.getBoundingSphere(sphere);

        final adjustedNearPosition =
            math.max(_nearPos0, sphere.radius + sphere.center.length);
        final regularNearPosition = cameraDistance - _initialNear;

        final minNearPos = math.min(adjustedNearPosition, regularNearPosition);
        camera.near = cameraDistance - minNearPos;

        final adjustedFarPosition =
            math.min(_farPos0, -sphere.radius + sphere.center.length);
        final regularFarPosition = cameraDistance - _initialFar;

        final minFarPos = math.min(adjustedFarPosition, regularFarPosition);
        camera.far = cameraDistance - minFarPos;

        camera.updateProjectionMatrix();
      }
      else {
        bool update = false;

        if (camera.near != _initialNear) {
          camera.near = _initialNear;
          update = true;
        }

        if (camera.far != _initialFar) {
          camera.far = _initialFar;
          update = true;
        }

        if (update) {
          camera.updateProjectionMatrix();
        }
      }
    }
  }