void AActor::EditorApplyScale( const FVector& DeltaScale, const FVector* PivotLocation, bool bAltDown, bool bShiftDown, bool bCtrlDown ) { if( RootComponent != NULL ) { const FVector CurrentScale = GetRootComponent()->RelativeScale3D; // @todo: Remove this hack once we have decided on the scaling method to use. FVector ScaleToApply; if( AActor::bUsePercentageBasedScaling ) { ScaleToApply = CurrentScale * (FVector(1.0f) + DeltaScale); } else { ScaleToApply = CurrentScale + DeltaScale; } GetRootComponent()->SetRelativeScale3D(ScaleToApply); if (PivotLocation) { const FVector CurrentScaleSafe(CurrentScale.X ? CurrentScale.X : 1.0f, CurrentScale.Y ? CurrentScale.Y : 1.0f, CurrentScale.Z ? CurrentScale.Z : 1.0f); const FRotator ActorRotation = GetActorRotation(); const FVector WorldDelta = GetActorLocation() - (*PivotLocation); const FVector LocalDelta = (ActorRotation.GetInverse()).RotateVector(WorldDelta); const FVector LocalScaledDelta = LocalDelta * (ScaleToApply / CurrentScaleSafe); const FVector WorldScaledDelta = ActorRotation.RotateVector(LocalScaledDelta); GetRootComponent()->SetWorldLocation(WorldScaledDelta + (*PivotLocation)); } } else { UE_LOG(LogActor, Warning, TEXT("WARNING: EditorApplyTranslation %s has no root component"), *GetName() ); } FEditorSupportDelegates::UpdateUI.Broadcast(); }