diff --git a/CHANGES.md b/CHANGES.md index 4c2eda899..887bc07e4 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -1,5 +1,11 @@ # Change Log {#changes} +### ? - ? + +##### Fixes :wrench: + +- Fixed a problem where multi-selecting `UCesiumGlobeAnchorComponent` could cause the selected components to teleport to 0 degrees longitude and 0 degrees latitude. Now, the geospatial position and orientation fields are hidden while multi-selecting. + ### v2.20.0 - 2025-10-01 ##### Additions :tada: diff --git a/Source/CesiumEditor/Private/CesiumGlobeAnchorCustomization.cpp b/Source/CesiumEditor/Private/CesiumGlobeAnchorCustomization.cpp index 4e0792bb0..5aed48787 100644 --- a/Source/CesiumEditor/Private/CesiumGlobeAnchorCustomization.cpp +++ b/Source/CesiumEditor/Private/CesiumGlobeAnchorCustomization.cpp @@ -7,8 +7,12 @@ #include "CesiumGlobeAnchorComponent.h" #include "DetailCategoryBuilder.h" #include "DetailLayoutBuilder.h" +#include "DetailWidgetRow.h" #include "IDetailGroup.h" #include "Widgets/SToolTip.h" +#include "Widgets/Text/STextBlock.h" + +#define LOCTEXT_NAMESPACE "CesiumGlobeAnchorCustomization" FName FCesiumGlobeAnchorCustomization::RegisteredLayoutName; @@ -36,6 +40,7 @@ FCesiumGlobeAnchorCustomization::MakeInstance() { void FCesiumGlobeAnchorCustomization::CustomizeDetails( IDetailLayoutBuilder& DetailBuilder) { DetailBuilder.GetObjectsBeingCustomized(this->SelectedObjects); + const bool bIsMultiSelect = this->SelectedObjects.Num() > 1; IDetailCategoryBuilder& CesiumCategory = DetailBuilder.EditCategory("Cesium"); @@ -67,11 +72,29 @@ void FCesiumGlobeAnchorCustomization::CustomizeDetails( UCesiumGlobeAnchorComponent, TeleportWhenUpdatingTransform)); - this->UpdateDerivedProperties(); - - this->CreatePositionLongitudeLatitudeHeight(DetailBuilder, CesiumCategory); - this->CreatePositionEarthCenteredEarthFixed(DetailBuilder, CesiumCategory); - this->CreateRotationEastSouthUp(DetailBuilder, CesiumCategory); + if (!bIsMultiSelect) { + this->UpdateDerivedProperties(); + this->CreatePositionLongitudeLatitudeHeight(DetailBuilder, CesiumCategory); + this->CreatePositionEarthCenteredEarthFixed(DetailBuilder, CesiumCategory); + this->CreateRotationEastSouthUp(DetailBuilder, CesiumCategory); + } else { + FDetailWidgetRow& Row = + CesiumCategory + .AddCustomRow( + LOCTEXT("MultipleSelectionFilter", "Multiple Selection")) + .FilterString(LOCTEXT( + "MultipleSelectionFilters", + "Latitude Longitude Height ECEF ESU")); + + Row.WholeRowContent()[SNew(SBox).Padding(FMargin( + 0.f, + 4.f))[SNew(STextBlock) + .Text(LOCTEXT( + "MultiSelectInfo", + "Multiple actors selected. Geodetic position (Latitude, Longitude, Height; ECEF) and " + "ESU rotation cannot be edited in multi-select. Select a single actor to edit these values.")) + .AutoWrapText(true)]]; + } } void FCesiumGlobeAnchorCustomization::CreatePositionEarthCenteredEarthFixed( @@ -296,3 +319,5 @@ TStatId UCesiumGlobeAnchorDerivedProperties::GetStatId() const { UCesiumGlobeAnchorRotationEastSouthUp, STATGROUP_Tickables); } + +#undef LOCTEXT_NAMESPACE