2019-12-26 14:45:42 -05:00
|
|
|
// Copyright Epic Games, Inc. All Rights Reserved.
|
2019-10-01 20:41:42 -04:00
|
|
|
|
|
|
|
|
#include "BaseGizmos/TransformSources.h"
|
|
|
|
|
#include "Components/SceneComponent.h"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
FTransform UGizmoComponentWorldTransformSource::GetTransform() const
|
|
|
|
|
{
|
|
|
|
|
return Component->GetComponentToWorld();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void UGizmoComponentWorldTransformSource::SetTransform(const FTransform& NewTransform)
|
|
|
|
|
{
|
|
|
|
|
if (bModifyComponentOnTransform)
|
|
|
|
|
{
|
|
|
|
|
Component->Modify();
|
|
|
|
|
}
|
|
|
|
|
Component->SetWorldTransform(NewTransform);
|
|
|
|
|
OnTransformChanged.Broadcast(this);
|
|
|
|
|
}
|
|
|
|
|
|
2020-01-27 20:11:15 -05:00
|
|
|
|
|
|
|
|
FTransform UGizmoScaledTransformSource::GetTransform() const
|
|
|
|
|
{
|
|
|
|
|
// get transform from child, and replace scale with external scale
|
|
|
|
|
FTransform Transform = ChildTransformSource->GetTransform();
|
|
|
|
|
FVector ExternalScale = ScaleProvider.GetScale();
|
|
|
|
|
Transform.SetScale3D(ExternalScale);
|
|
|
|
|
return Transform;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void UGizmoScaledTransformSource::SetTransform(const FTransform& NewTransform)
|
|
|
|
|
{
|
|
|
|
|
// forward incoming scale to external provider
|
|
|
|
|
FVector ExternalScale = NewTransform.GetScale3D();
|
|
|
|
|
ScaleProvider.SetScale(ExternalScale);
|
|
|
|
|
|
|
|
|
|
// remove scale from transform and forward to child source
|
|
|
|
|
FTransform Unscaled(NewTransform);
|
|
|
|
|
Unscaled.SetScale3D(FVector::OneVector);
|
|
|
|
|
ChildTransformSource->SetTransform(Unscaled);
|
|
|
|
|
|
|
|
|
|
OnTransformChanged.Broadcast(this);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2019-10-01 20:41:42 -04:00
|
|
|
FTransform UGizmoTransformProxyTransformSource::GetTransform() const
|
|
|
|
|
{
|
|
|
|
|
return Proxy->GetTransform();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void UGizmoTransformProxyTransformSource::SetTransform(const FTransform& NewTransform)
|
|
|
|
|
{
|
2021-02-25 20:03:29 -04:00
|
|
|
if (bOverrideSetPivotMode)
|
2021-01-14 19:07:52 -04:00
|
|
|
{
|
|
|
|
|
bool bProxySetPivotOriginal = Proxy->bSetPivotMode;
|
|
|
|
|
Proxy->bSetPivotMode = true;
|
|
|
|
|
Proxy->SetTransform(NewTransform);
|
|
|
|
|
Proxy->bSetPivotMode = bProxySetPivotOriginal;
|
|
|
|
|
|
|
|
|
|
OnPivotChanged.Broadcast(this);
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
Proxy->SetTransform(NewTransform);
|
2021-02-25 20:03:29 -04:00
|
|
|
if (Proxy->bSetPivotMode)
|
|
|
|
|
{
|
|
|
|
|
OnPivotChanged.Broadcast(this);
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
OnTransformChanged.Broadcast(this);
|
|
|
|
|
}
|
2021-01-14 19:07:52 -04:00
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
FTransform UGizmoScaledAndUnscaledTransformSources::GetTransform() const
|
|
|
|
|
{
|
|
|
|
|
return ScaledTransformSource->GetTransform();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void UGizmoScaledAndUnscaledTransformSources::SetTransform(const FTransform& NewTransform)
|
|
|
|
|
{
|
|
|
|
|
if (UnscaledTransformSource)
|
|
|
|
|
{
|
|
|
|
|
FTransform Unscaled(NewTransform);
|
|
|
|
|
Unscaled.SetScale3D(FVector::OneVector);
|
|
|
|
|
UnscaledTransformSource->SetTransform(Unscaled);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
ScaledTransformSource->SetTransform(NewTransform);
|
|
|
|
|
|
2019-10-01 20:41:42 -04:00
|
|
|
OnTransformChanged.Broadcast(this);
|
|
|
|
|
}
|