bool UBillboardComponent::ComponentIsTouchingSelectionBox(const FBox& InSelBBox, const FEngineShowFlags& ShowFlags, const bool bConsiderOnlyBSP, const bool bMustEncompassEntireComponent) const { AActor* Actor = GetOwner(); if (!bConsiderOnlyBSP && ShowFlags.BillboardSprites && Sprite != nullptr && Actor != nullptr) { const float Scale = ComponentToWorld.GetMaximumAxisScale(); // Construct a box representing the sprite const FBox SpriteBox( Actor->GetActorLocation() - Scale * FMath::Max(Sprite->GetSizeX(), Sprite->GetSizeY()) * FVector(0.5f, 0.5f, 0.5f), Actor->GetActorLocation() + Scale * FMath::Max(Sprite->GetSizeX(), Sprite->GetSizeY()) * FVector(0.5f, 0.5f, 0.5f)); // If the selection box doesn't have to encompass the entire component and it intersects with the box constructed for the sprite, then it is valid. // Additionally, if the selection box does have to encompass the entire component and both the min and max vectors of the sprite box are inside the selection box, // then it is valid. if ((!bMustEncompassEntireComponent && InSelBBox.Intersect(SpriteBox)) || (bMustEncompassEntireComponent && InSelBBox.IsInside(SpriteBox))) { return true; } } return false; }
void FVertexSnappingImpl::GetActorsInsideBox( const FBox& Box, UWorld* World, TArray<FSnapActor>& OutActorsInBox, const TSet< TWeakObjectPtr<AActor> >& ActorsToIgnore, const FSceneView* View ) { for( FActorIterator It(World); It; ++It ) { AActor* Actor = *It; // Ignore the builder brush, hidden actors and forcefully ignored actors (actors being moved) if( Actor != World->GetDefaultBrush() && It->IsHiddenEd() == false && !ActorsToIgnore.Contains( Actor ) ) { const bool bNonColliding = true; FBox ActorBoundingBox = Actor->GetComponentsBoundingBox(true); // Actors must be within the bounding box and within the view frustum if( Box.Intersect( ActorBoundingBox ) && View->ViewFrustum.IntersectBox( ActorBoundingBox.GetCenter(), ActorBoundingBox.GetExtent() ) ) { OutActorsInBox.Add( FSnapActor( Actor, Box ) ); } } } }