applyTransformMatrix method
void
applyTransformMatrix(
- 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();
}
}
}
}