Skip to content

vtkF3DMetaImporter: Fix coloring for skinning, morphing, and such #2172

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 12 commits into from
Apr 26, 2025
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
16 changes: 14 additions & 2 deletions application/testing/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -277,6 +277,15 @@ f3d_test(NAME TestConfigOrder DATA suzanne.ply ARGS CONFIG ${F3D_SOURCE_DIR}/tes
f3d_test(NAME TestOutputStream DATA suzanne.ply ARGS --verbose=quiet --output=- REGEXP "^.PNG" NO_BASELINE NO_OUTPUT)
f3d_test(NAME TestOutputStreamInfo DATA suzanne.ply ARGS --verbose=info --output=- REGEXP "redirected to stderr" NO_BASELINE NO_OUTPUT)
f3d_test(NAME TestInvalidAntiAliasingMode DATA suzanne.ply ARGS -a --anti-aliasing-mode=foo REGEXP "foo is an invalid antialiasing mode" NO_BASELINE)
f3d_test(NAME TestUserMatrixColoring DATA InterpolationTest.glb ARGS --scalar-coloring --coloring-array=TEXCOORD_0)
f3d_test(NAME TestSkinColoring DATA SimpleSkin.gltf ARGS --scalar-coloring --coloring-array=WEIGHTS_0)
f3d_test(NAME TestMorphColoring DATA SimpleMorph.gltf ARGS --scalar-coloring)
f3d_test(NAME TestAnimationUserMatrixColoring DATA InterpolationTest.glb ARGS --scalar-coloring --coloring-array=TEXCOORD_0 --animation-time=0.5)
f3d_test(NAME TestAnimationSkinColoring DATA SimpleSkin.gltf ARGS --scalar-coloring --coloring-array=WEIGHTS_0 --animation-time=2)
f3d_test(NAME TestAnimationMorphColoring DATA SimpleMorph.gltf ARGS --scalar-coloring --animation-time=0.5)
f3d_test(NAME TestAnimationInputChangeColoring DATA v_rock2.mdl ARGS --scalar-coloring --animation-time=0.01 --animation-index=1)
f3d_test(NAME TestAnimationUserMatrixPointSprites DATA BoxAnimated.gltf ARGS --point-sprites --point-sprites-size=50 --animation-time=2)
f3d_test(NAME TestAnimationInputChangePointSprites DATA v_rock2.mdl ARGS --point-sprites --point-sprites-size=50 --animation-time=0.01 --animation-index=1)

# Color map files testing
f3d_test(NAME TestColorMapFileFullPath DATA dragon.vtu ARGS --colormap-file=${F3D_SOURCE_DIR}/testing/data/viridis8.png --scalar-coloring --coloring-component=1)
Expand Down Expand Up @@ -721,14 +730,17 @@ if(F3D_PLUGIN_BUILD_EXODUS)
# Test animation with generic importer and coloring
f3d_test(NAME TestAnimationGenericImporter DATA small.ex2 ARGS -sb --load-plugins=exodus --animation-time=0.003 --animation-progress)

# Test animation with generic importer, coloring and point sprites
f3d_test(NAME TestAnimationGenericImporterPointSprites DATA small.ex2 ARGS -sbo --load-plugins=exodus --animation-time=0.003 --animation-progress)

# Test animation with generic importer, coloring and a custom scalar range
f3d_test(NAME TestAnimationGenericImporterScalarRange DATA small.ex2 ARGS -sb --load-plugins=exodus --animation-time=0.003 --animation-progress --coloring-range=0,1e7)

# Test Generic Importer Verbose animation with a single frame.
f3d_test(NAME TestVerboseAnimationSingleTimestep DATA single_timestep.e ARGS --load-plugins=exodus --verbose NO_BASELINE REGEXP "0, 0")

# Test no render animation time. Regex contains a part of the range of the ACCL field.
f3d_test(NAME TestNoRenderAnimation DATA small.ex2 ARGS --load-plugins=exodus --animation-time=0.003 REGEXP "-521950, 6.57485" NO_RENDER)
# Test no render animation time. Regex contains a part of the range of the VEL_ field.
f3d_test(NAME TestNoRenderAnimation DATA small.ex2 ARGS --load-plugins=exodus --animation-time=0.003 REGEXP "-994.473, 33.9259" NO_RENDER)

# Test animation time clamping
f3d_test(NAME TestAnimationTimeLimitsHigh DATA small.ex2 ARGS ARGS --load-plugins=exodus --animation-time=10)
Expand Down
4 changes: 2 additions & 2 deletions testing/baselines/TestAnimationGenericImporter.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
4 changes: 2 additions & 2 deletions testing/baselines/TestAnimationGenericImporterScalarRange.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
3 changes: 3 additions & 0 deletions testing/baselines/TestAnimationInputChangeColoring.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
3 changes: 3 additions & 0 deletions testing/baselines/TestAnimationInputChangePointSprites.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
3 changes: 3 additions & 0 deletions testing/baselines/TestAnimationMorphColoring.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
3 changes: 3 additions & 0 deletions testing/baselines/TestAnimationSkinColoring.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
4 changes: 2 additions & 2 deletions testing/baselines/TestAnimationTimeLimitsHigh.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
4 changes: 2 additions & 2 deletions testing/baselines/TestAnimationTimeLimitsLow.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
3 changes: 3 additions & 0 deletions testing/baselines/TestAnimationUserMatrixColoring.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
3 changes: 3 additions & 0 deletions testing/baselines/TestAnimationUserMatrixPointSprites.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
3 changes: 3 additions & 0 deletions testing/baselines/TestMorphColoring.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
3 changes: 3 additions & 0 deletions testing/baselines/TestSkinColoring.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
3 changes: 3 additions & 0 deletions testing/baselines/TestUserMatrixColoring.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
4 changes: 2 additions & 2 deletions testing/data/small.ex2
Git LFS file not shown
27 changes: 26 additions & 1 deletion vtkext/private/module/vtkF3DMetaImporter.cxx
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@
#include <numeric>
#include <vector>

//----------------------------------------------------------------------------
struct vtkF3DMetaImporter::Internals
{
// Actors related vectors
Expand All @@ -44,6 +45,7 @@ struct vtkF3DMetaImporter::Internals
#endif
};

//----------------------------------------------------------------------------
vtkStandardNewMacro(vtkF3DMetaImporter);

//----------------------------------------------------------------------------
Expand Down Expand Up @@ -250,7 +252,7 @@ bool vtkF3DMetaImporter::Update()

// Create and configure point sprites actors
this->Pimpl->PointSpritesActorsAndMappers.emplace_back(
vtkF3DMetaImporter::PointSpritesStruct());
vtkF3DMetaImporter::PointSpritesStruct(actor, importer));
vtkF3DMetaImporter::PointSpritesStruct& pss =
this->Pimpl->PointSpritesActorsAndMappers.back();

Expand Down Expand Up @@ -502,6 +504,29 @@ bool vtkF3DMetaImporter::UpdateAtTimeValue(double timeValue)
importerPair.Importer->UpdateTimeStep(timeValue);
#endif
}

// Update coloring and point sprites
for (auto& cs : this->Pimpl->ColoringActorsAndMappers)
{
cs.Mapper->SetInputData(
vtkPolyDataMapper::SafeDownCast(cs.OriginalActor->GetMapper())->GetInput());

bool visi = cs.Actor->GetVisibility();
cs.Actor->vtkProp3D::ShallowCopy(cs.OriginalActor);
cs.Actor->SetVisibility(visi);
}
for (auto& pss : this->Pimpl->PointSpritesActorsAndMappers)
{
if (!vtkF3DGenericImporter::SafeDownCast(pss.Importer))
{
pss.Mapper->SetInputData(
vtkPolyDataMapper::SafeDownCast(pss.OriginalActor->GetMapper())->GetInput());
bool visi = pss.Actor->GetVisibility();
pss.Actor->vtkProp3D::ShallowCopy(pss.OriginalActor);
pss.Actor->SetVisibility(visi);
}
}

this->Pimpl->UpdateTime.Modified();
return ret;
}
Expand Down
8 changes: 7 additions & 1 deletion vtkext/private/module/vtkF3DMetaImporter.h
Original file line number Diff line number Diff line change
Expand Up @@ -49,13 +49,18 @@ class vtkF3DMetaImporter : public vtkF3DImporter

struct PointSpritesStruct
{
PointSpritesStruct()
explicit PointSpritesStruct(vtkActor* originalActor, vtkImporter* importer)
: OriginalActor(originalActor)
, Importer(importer)
{
this->Actor->vtkProp3D::ShallowCopy(originalActor);
this->Actor->SetMapper(this->Mapper);
}

vtkNew<vtkActor> Actor;
vtkNew<vtkPointGaussianMapper> Mapper;
vtkActor* OriginalActor;
vtkImporter* Importer;
};

struct ColoringStruct
Expand All @@ -67,6 +72,7 @@ class vtkF3DMetaImporter : public vtkF3DImporter
this->Actor->GetProperty()->SetLineWidth(1.0);
this->Actor->GetProperty()->SetRoughness(0.3);
this->Actor->GetProperty()->SetInterpolationToPBR();
this->Actor->vtkProp3D::ShallowCopy(originalActor);
this->Actor->SetMapper(this->Mapper);
this->Mapper->InterpolateScalarsBeforeMappingOn();
}
Expand Down
Loading
Loading