void FDestructibleMeshEditorViewportClient::Fracture() { #if WITH_APEX UDestructibleMesh* DestructibleMesh = DestructibleMeshEditorPtr.Pin()->GetDestructibleMesh(); if (DestructibleMesh != NULL) { TComponentReregisterContext<USkinnedMeshComponent> ReregisterContext; DestructibleMesh->ReleaseResources(); DestructibleMesh->ReleaseResourcesFence.Wait(); if (DestructibleMesh->SourceStaticMesh) { DestructibleMesh->BuildFractureSettingsFromStaticMesh(DestructibleMesh->SourceStaticMesh); } else if (DestructibleMesh->ApexDestructibleAsset != NULL) { DestructibleMesh = ImportDestructibleMeshFromApexDestructibleAsset(DestructibleMesh->GetOuter(), *DestructibleMesh->ApexDestructibleAsset, DestructibleMesh->GetFName(), DestructibleMesh->GetFlags(), NULL, EDestructibleImportOptions::PreserveSettings); } DestructibleMesh->FractureSettings->CreateVoronoiSitesInRootMesh(); DestructibleMesh->FractureSettings->VoronoiSplitMesh(); BuildDestructibleMeshFromFractureSettings(*DestructibleMesh, NULL); } DestructibleMeshEditorPtr.Pin()->RefreshTool(); DestructibleMeshEditorPtr.Pin()->SetCurrentPreviewDepth(0xFFFFFFFF); // This will get clamped to the max depth #endif // WITH_APEX }
void UDestructibleChunkParamsProxy::PostEditChangeProperty( struct FPropertyChangedEvent& PropertyChangedEvent ) { check(DestructibleMesh != NULL && DestructibleMesh->FractureSettings != NULL); if (DestructibleMesh->FractureSettings->ChunkParameters.Num() > ChunkIndex) { DestructibleMesh->FractureSettings->ChunkParameters[ChunkIndex] = ChunkParams; } #if WITH_APEX BuildDestructibleMeshFromFractureSettings(*DestructibleMesh, NULL); #endif DestructibleMeshEditorPtr.Pin()->RefreshViewport(); }