private float doRotation(Vector3 center, Vector2 oldScreenPos, Vector2 newScreenPos, ProjectionParams projectionParams) { var newVector = projectionParams.ProjectTo(newScreenPos, TransformPlane) - center; var oldVector = projectionParams.ProjectTo(oldScreenPos, TransformPlane) - center; var angle = Vector3.Angle(oldVector, newVector); if (Vector3.Dot(Vector3.Cross(oldVector, newVector), TransformPlane.normal) < 0) angle = -angle; return angle; }
private float doScaling(Vector3 center, Vector2 oldScreenPos, Vector2 newScreenPos, ProjectionParams projectionParams) { var newVector = projectionParams.ProjectTo(newScreenPos, TransformPlane) - center; var oldVector = projectionParams.ProjectTo(oldScreenPos, TransformPlane) - center; return newVector.magnitude / oldVector.magnitude; }
/// <inheritdoc /> private Vector3 projectScaledRotated(Vector2 point, float dR, float dS, ProjectionParams projectionParams) { var delta = projectionParams.ProjectTo(point, TransformPlane) - cachedTransform.position; if (dR != 0) delta = Quaternion.AngleAxis(dR, RotationAxis) * delta; if (dS != 0) delta = delta * dS; return cachedTransform.position + delta; }
/// <inheritdoc /> protected override Vector3 doTwoPointTranslation(Vector2 oldScreenPos1, Vector2 oldScreenPos2, Vector2 newScreenPos1, Vector2 newScreenPos2, float dR, float dS, ProjectionParams projectionParams) { if (isTransforming) { return projectionParams.ProjectTo(newScreenPos1, TransformPlane) - projectScaledRotated(oldScreenPos1, dR, dS, projectionParams); } screenPixelTranslationBuffer += newScreenPos1 - oldScreenPos1; if (screenPixelTranslationBuffer.sqrMagnitude > screenTransformPixelThresholdSquared) { isTransforming = true; return projectionParams.ProjectTo(newScreenPos1, TransformPlane) - projectScaledRotated(newScreenPos1 - screenPixelTranslationBuffer, dR, dS, projectionParams); } return Vector3.zero; }
/// <inheritdoc /> protected override Vector3 doOnePointTranslation(Vector2 oldScreenPos, Vector2 newScreenPos, ProjectionParams projectionParams) { if (isTransforming) { return projectionParams.ProjectTo(newScreenPos, TransformPlane) - projectionParams.ProjectTo(oldScreenPos, TransformPlane); } screenPixelTranslationBuffer += newScreenPos - oldScreenPos; if (screenPixelTranslationBuffer.sqrMagnitude > screenTransformPixelThresholdSquared) { isTransforming = true; return projectionParams.ProjectTo(newScreenPos, TransformPlane) - projectionParams.ProjectTo(newScreenPos - screenPixelTranslationBuffer, TransformPlane); } return Vector3.zero; }
/// <inheritdoc /> protected override float doScaling(Vector2 oldScreenPos1, Vector2 oldScreenPos2, Vector2 newScreenPos1, Vector2 newScreenPos2, ProjectionParams projectionParams) { var newVector = projectionParams.ProjectTo(newScreenPos2, TransformPlane) - projectionParams.ProjectTo(newScreenPos1, TransformPlane); var oldVector = projectionParams.ProjectTo(oldScreenPos2, TransformPlane) - projectionParams.ProjectTo(oldScreenPos1, TransformPlane); return newVector.magnitude / oldVector.magnitude; }
/// <inheritdoc /> protected override float doRotation(Vector2 oldScreenPos1, Vector2 oldScreenPos2, Vector2 newScreenPos1, Vector2 newScreenPos2, ProjectionParams projectionParams) { var newVector = projectionParams.ProjectTo(newScreenPos2, TransformPlane) - projectionParams.ProjectTo(newScreenPos1, TransformPlane); var oldVector = projectionParams.ProjectTo(oldScreenPos2, TransformPlane) - projectionParams.ProjectTo(oldScreenPos1, TransformPlane); var angle = Vector3.Angle(oldVector, newVector); if (Vector3.Dot(Vector3.Cross(oldVector, newVector), TransformPlane.normal) < 0) angle = -angle; return angle; }