Skip to content

Conversation

@bakpaul
Copy link
Contributor

@bakpaul bakpaul commented Dec 6, 2024

Visual models where broken since this PR #4827

Actually they were not always broken, when you started the simulation, everything was ok, but then if you unchecked visualModels in the View panel, and check it back, the visual models didn't follow the mechanical one anymore. The visual models where stuck in the position when you unchecked the VisualModel (see gif).

The problem was that the Visual params where not updated from the VisualStyle component at the right moment. It was only done in the VisualDrawVisitor, through the fwdDraw method. This enabled the drawing, but not the update of the visual models, because it was done before.

Why was it working when the visual flags remained untouched ? I don't know.

SOFA_visual_bug


By submitting this pull request, I acknowledge that
I have read, understand, and agree SOFA Developer Certificate of Origin (DCO).


Reviewers will merge this pull-request only if

  • it builds with SUCCESS for all platforms on the CI.
  • it does not generate new warnings.
  • it does not generate new unit test failures.
  • it does not generate new scene test failures.
  • it does not break API compatibility.
  • it is more than 1 week old (or has fast-merge label).

@bakpaul bakpaul added pr: fix Fix a bug pr: status to review To notify reviewers to review this pull-request labels Dec 6, 2024
@bakpaul bakpaul added this to the v24.12 milestone Dec 6, 2024
@bakpaul bakpaul requested a review from hugtalbot December 6, 2024 21:28
@hugtalbot
Copy link
Contributor

hugtalbot commented Dec 8, 2024

Shouldn't we rather properly update the visualparams ?
Before this change in #4827 the update was working fine.

The update process is done by RealGUI while the draw is done by the Viewer (Qt or QGL):

  • Viewer calls the function Simulation::draw(sofa::core::visual::VisualParams* vparams, Node* root) ending in the object draw() function with up-to-date visual flags:
    • DefaultVisualManagerLoop::drawStep() ➡️ VisualDrawVisitor::processObject() ➡️ drawVisual() ➡️ draw()
  • RealGUI calls sofa::simulation::node::updateVisual(root); (from Simulation::updateVisualContext()) ending in calling updateVisual() in OglModel where the visual flags are not up to date
    • DefaultVisualManagerLoop::updateStep() ➡️ VisualUpdateVisitor::processVisualModel() ➡️ updateVisual()

I therefore suspect the problem to come from the inconsistent API where draw relies on the VisualParams while the updateVisual needs to recover itself the VisualParams using :

sofa::core::visual::VisualParams* vparams = sofa::core::visual::visualparams::defaultInstance();

To sum up, could it be possible to make sure that using the defaultInstance() method returns up-to-date VisualParams?

@hugtalbot hugtalbot requested a review from fredroy December 8, 2024 10:51
@hugtalbot hugtalbot added the topic for next dev-meeting PR to be discussed in sofa-dev meeting label Dec 8, 2024
@bakpaul
Copy link
Contributor Author

bakpaul commented Dec 9, 2024

The defaultInstance() actually returns a singleton. It coud stay updated. The thing that makes the VisualParams come back to outdated values if the call to bwdVisual in the end of the drawVisual call. This put back the old ones. I don't actually know why we need to go back to the old ones. It is such as we don't want to keep the values present in the visual style component in the global instance.

IMO, VisualStyle should have a DataCallback where every modification of its visual flag data is applied to the defaultInstance(). This removes all that I have introduced but impose that the default instance always follows the VisualStyle.

@fredroy
Copy link
Contributor

fredroy commented Dec 10, 2024

The defaultInstance() actually returns a singleton. It coud stay updated. The thing that makes the VisualParams come back to outdated values if the call to bwdVisual in the end of the drawVisual call. This put back the old ones. I don't actually know why we need to go back to the old ones. It is such as we don't want to keep the values present in the visual style component in the global instance.

IMO, VisualStyle should have a DataCallback where every modification of its visual flag data is applied to the defaultInstance(). This removes all that I have introduced but impose that the default instance always follows the VisualStyle.

To be franck this is a bit confusing 🤔 it seems that there are some mixup between VisualParams & VisualStyle. It would have been great to directly quote the aforementioned code with a direct link 😅

In any case, I think this is a good idea to remove the VisualModel inheritance of VisualStyle, this does not make sense

@bakpaul
Copy link
Contributor Author

bakpaul commented Dec 10, 2024

No mixup here :
The fwd and bwd methods in VisualStyle :

void VisualStyle::fwdDraw(VisualParams* vparams)

Those are called by the drawVisualVisitor. This is when the DefaultInstance is modified. And this is the reason why in the VisualModels, during the the call to drawVisual vparams->displayFlags().getShowVisualModels() returned true, but not in the method updateVisual. here :

void VisualModel::drawVisual(const VisualParams* vparams)

The drawVisual visitor called fwdDraw first, so the VisualStyle updated the DefaultInstance, then he does the draw, then the call to bwdDraw put back the old values of the flags inside DefaultInstance. Because this was not called for the updateVisual, then it wasn't working. So removing the inheritance might make sense but doesn't solve the problem.

Why don't we leave the most updated values of the visual flags inside the default instance. Why do we reupload the backup values inside ? Couldn't it be constantly consistent with the actual visual flag values ?

@fredroy
Copy link
Contributor

fredroy commented Dec 10, 2024

This is much clearer with direct quote with the code 🧑‍💻

Why don't we leave the most updated values of the visual flags inside the default instance. Why do we reupload the backup values inside ? Couldn't it be constantly consistent with the actual visual flag values ?

A wild guess would be to manage the fact there can be other VisualStyle deeper in your scene. A node can set some flags, and its subnodes can set(or unset) other flags.

@bakpaul
Copy link
Contributor Author

bakpaul commented Dec 11, 2024

PR updated regarding discussions. I'll add an issue regarding the testing of this feature in a unit test, I'll not have time to do it here.

@hugtalbot
Copy link
Contributor

hugtalbot commented Dec 12, 2024

Just tested the PR, it fixes indeed the visualization problem

It remains that if we want to have specific VisualStyle : it has to be defined per Node and the last one override for the rest of the graph. VisualStyle should follow the mechanism we plan to deploy on gravity with data/links and tests should be added as suggested in #5157

@alxbilger
Copy link
Contributor

[ci-build][with-all-tests]

@alxbilger
Copy link
Contributor

[ci-build][with-all-tests][force-full-build]

bakpaul and others added 4 commits December 17, 2024 08:34
…isualStyle and instead call the fwdDraw directly in the two visualVisitor
Co-authored-by: Alex Bilger <alxbilger@users.noreply.github.com>
@fredroy fredroy force-pushed the 24_12_fix_gui_visual_model branch from 01dd45b to 503f178 Compare December 16, 2024 23:34
@fredroy fredroy added pr: status ready Approved a pull-request, ready to be squashed and removed pr: status to review To notify reviewers to review this pull-request labels Dec 17, 2024
@fredroy fredroy merged commit 02b3366 into sofa-framework:master Dec 17, 2024
14 of 15 checks passed
bakpaul added a commit to bakpaul/sofa that referenced this pull request Jan 23, 2025
commit f8ed001
Author: Alex Bilger <alxbilger@users.noreply.github.com>
Date:   Wed Jan 22 14:24:35 2025 +0100

    [tests] Template method design pattern from BaseTest in derived classes (sofa-framework#5162)

    * [tests] Template method design pattern from BaseTest in derived classes

    * rename

    * use the deprecated function

    * Make SetUp and TearDown final

    * fix SofaCarving test

    * missing override

commit 41bac37
Author: Frederick Roy <fredroy@users.noreply.github.com>
Date:   Tue Jan 21 16:21:12 2025 +0100

    [Helper] XCode: run in Debug (and load debug plugins) (sofa-framework#5168)

    remove deprecated cmake statement

    Co-authored-by: Hugo <hugo.talbot@sofa-framework.org>

commit 723420c
Author: Hugo <hugo.talbot@sofa-framework.org>
Date:   Tue Jan 21 16:18:00 2025 +0100

    [Project] Start dev phase v25.06 (sofa-framework#5218)

    * Add ChangeLog for v24.12

    * Bump dev version to v25.06.99

commit b445f57
Author: Frederick Roy <fredroy@users.noreply.github.com>
Date:   Tue Jan 21 16:16:25 2025 +0100

    [Helper] WriteAccessorVector: add resize method with default filler value (sofa-framework#5228)

    add resize with default filler value

commit 4ba3bbe
Author: Hugo <hugo.talbot@sofa-framework.org>
Date:   Tue Jan 21 15:58:00 2025 +0100

    [Core] Move all LifeCycle classes in a dedicated namespace (sofa-framework#5225)

    Co-authored-by: Paul Baksic <30337881+bakpaul@users.noreply.github.com>

commit eb9fe59
Author: Alex Bilger <alxbilger@users.noreply.github.com>
Date:   Mon Jan 20 05:45:39 2025 +0100

    [Type] Support structured binding for tuple-like types (sofa-framework#5208)

    * [Type] Support structured binding for tuple-like types

    * fix redefinition

    * fix test

commit aedc7ff
Author: Alex Bilger <alxbilger@users.noreply.github.com>
Date:   Mon Jan 20 00:10:57 2025 +0100

    [Type] Simplification of the Rebind trait using concepts (sofa-framework#5200)

    * [Type] Simplification of the Rebind trait using concepts

    * fix

    * fix and test

    * parentheses

commit 1f11bee
Author: Alex Bilger <alxbilger@users.noreply.github.com>
Date:   Fri Jan 17 12:39:13 2025 +0100

    [Type] Deprecate is_container trait (sofa-framework#5210)

commit 3635db7
Author: Alex Bilger <alxbilger@users.noreply.github.com>
Date:   Fri Jan 17 08:19:18 2025 +0100

    [Type] Convert enable_if to concepts in fixed_array (sofa-framework#5205)

commit 1072217
Author: Alex Bilger <alxbilger@users.noreply.github.com>
Date:   Fri Jan 17 05:42:59 2025 +0100

    [Type] Convert is_fixed_array trait to concept (sofa-framework#5209)

    Co-authored-by: Frederick Roy <fredroy@users.noreply.github.com>

commit d83d7ed
Author: Alex Bilger <alxbilger@users.noreply.github.com>
Date:   Fri Jan 17 01:46:10 2025 +0100

    [Type] Convert is_vector trait to concept (sofa-framework#5201)

    * [Type] Concert is_vector trait to concept

    * fix

    * use the concept

commit 84e79d1
Author: Alex Bilger <alxbilger@users.noreply.github.com>
Date:   Thu Jan 16 02:48:10 2025 +0100

    [Type] A concept for isRigidType (sofa-framework#5199)

    * [Type] A concept for isRigidType

    * fix

commit f28c570
Author: Hugo <hugo.talbot@sofa-framework.org>
Date:   Wed Jan 15 14:29:40 2025 +0100

    [Helper] Fix warning in SelectableItem (sofa-framework#5163)

    * [Helper] Fix warning in SelectableItem

    * simpler code

    * simplify trait using concept

    * remove unused include

    ---------

    Co-authored-by: Alex Bilger <alexbilger0@gmail.com>

commit bf730d2
Author: Hugo <hugo.talbot@sofa-framework.org>
Date:   Wed Jan 15 05:48:20 2025 +0100

    [SolidMechanics] Make Data innerRadius of BeamFEMFF not required (sofa-framework#5203)

commit 964136a
Author: Hugo <hugo.talbot@sofa-framework.org>
Date:   Thu Jan 9 16:37:53 2025 +0100

    [Mapping] Fix draw in RigidMapping (sofa-framework#5204)

    * [Mapping] Fix draw in RigidMapping

    * Apply suggestions from code review

    Co-authored-by: Frederick Roy <fredroy@users.noreply.github.com>

    ---------

    Co-authored-by: Frederick Roy <fredroy@users.noreply.github.com>

commit 61d4924
Author: Hugo <hugo.talbot@sofa-framework.org>
Date:   Thu Jan 9 14:35:29 2025 +0100

    [Engine] Fix drawLines from ValuesFromPositions (sofa-framework#5206)

commit 88320b8
Author: Alex Bilger <alxbilger@users.noreply.github.com>
Date:   Thu Jan 9 07:39:53 2025 +0100

    [Config] Introduce SOFA modules data structure (sofa-framework#5148)

    * Introduce SOFA modules data structure

    * apply everywhere

    * don't shadow with unique name

    * try to fix

    * generate unit tests automatically

    * remove dependency to string and make modules constexpr

    * restore conversion to string

    * constexpr

    * remove ambiguity

    * include modules.h only when necessary

commit 1cbfa03
Author: Alex Bilger <alxbilger@users.noreply.github.com>
Date:   Thu Jan 9 06:09:39 2025 +0100

    [DefaultType] Aliases defined twice (sofa-framework#5198)

commit 589ea72
Author: Alex Bilger <alxbilger@users.noreply.github.com>
Date:   Thu Jan 9 01:34:09 2025 +0100

    [Core] Isolate the intrusive reference counting (sofa-framework#5149)

    * [Core] Isolate the intrusive reference counting

    * add unit tests

commit 7b3729f
Author: erik pernod <erik.pernod@gmail.com>
Date:   Wed Jan 8 23:33:30 2025 +0100

    [Topology] Add function in BaseMeshTopology to compute all topology containers (sofa-framework#3368)

    * [Topology] rename method initTpology into initContainers and provide access to it from BaseMeshTopology

    * [MultiThreading] Replace call to getter to init topology by call to initContainers

    * Fix MeshTopology initContainer

    * REname initContainers into computeCrossElementBuffers

    * restore comment

    * Fix compilation

    * Update MeshTopology.cpp

    * Update MeshTopology.cpp

    * Update applications/plugins/MultiThreading/src/MultiThreading/component/collision/detection/algorithm/ParallelBVHNarrowPhase.cpp

    Co-authored-by: Hugo <hugo.talbot@sofa-framework.org>

    * Update MeshTopology, Keep method ComputeCorssElementBuffer to be call only if needed. Not called at init

    * Update MeshTopology.h

    * Update MeshTopology.cpp

    * Update MeshTopology.h

    ---------

    Co-authored-by: Hugo <hugo.talbot@sofa-framework.org>

commit 292f5bc
Author: Paul Baksic <30337881+bakpaul@users.noreply.github.com>
Date:   Wed Jan 8 23:32:44 2025 +0100

    [tools] Update post-install fixup to fix rpath (sofa-framework#5197)

    Update post-install fixup to fix rpath

commit 0bc3fb9
Author: Damien Marchal <damien.marchal@univ-lille1.fr>
Date:   Mon Jan 6 15:30:09 2025 +0100

    [GUI.Qt] Fix invalid color of the warning sign on object (sofa-framework#5190)

    Fix invalid color of the warning sign on object.

commit b5c1f17
Author: Hugo <hugo.talbot@sofa-framework.org>
Date:   Mon Dec 30 12:28:46 2024 +0100

    [all] Fix additional warnings (sofa-framework#5180)

    * [all] Fix additional warnings

    * Update Sofa/Component/Collision/Response/Mapper/src/sofa/component/collision/response/mapper/init.cpp

    Co-authored-by: erik pernod <erik.pernod@gmail.com>

    * Update Sofa/Component/Collision/Response/Mapper/src/sofa/component/collision/response/mapper/init.cpp

    ---------

    Co-authored-by: erik pernod <erik.pernod@gmail.com>

commit 82c4ea2
Author: Frederick Roy <fredroy@users.noreply.github.com>
Date:   Sun Dec 29 04:08:56 2024 +0900

    [Multithreading] Apply new factory registration mechanism (sofa-framework#5178)

    * apply new register mechanism to multithreading

    * fix test

    * Apply suggestions from code review (update descriptions)

    Co-authored-by: Hugo <hugo.talbot@sofa-framework.org>

    ---------

    Co-authored-by: Hugo <hugo.talbot@sofa-framework.org>

commit bcc5a16
Author: Frederick Roy <fredroy@users.noreply.github.com>
Date:   Sat Dec 28 00:26:20 2024 +0900

    [Helper] PluginManager: support loading from Non-MSVC Multi-Configuration Build (sofa-framework#5133)

    * remove collections from searchable paths

    * cmake: pass config info and use it for search paths

    * remove typo in template parameters

    * add support for minsizerel

    * test existence of directory before browsing

    * just use the string

commit 07ce419
Author: erik pernod <erik.pernod@gmail.com>
Date:   Fri Dec 27 10:57:04 2024 +0100

    [Sofa.GL] Fix OglModel crash when texture file is not found (sofa-framework#5182)

    [OglModel] Backup fix on texture not found crash

commit 3711b9e
Author: erik pernod <erik.pernod@gmail.com>
Date:   Fri Dec 27 10:56:45 2024 +0100

    [Core] Fix VisualState.h compilation on windows (sofa-framework#5181)

    [Visual] Fix VisualState.h compilation

commit 238851c
Author: Alex Bilger <alxbilger@users.noreply.github.com>
Date:   Thu Dec 26 22:01:07 2024 +0100

    [SofaCUDA] Explicit the CUDA C++ standard version to 17 (sofa-framework#5165)

commit 30844d0
Author: Paul Baksic <30337881+bakpaul@users.noreply.github.com>
Date:   Thu Dec 26 18:36:11 2024 +0100

    [Plugins] Remove unsupported plugins: InvertibleFVM, SofaSimpleGUI and SensableEmulation (sofa-framework#5175)

    Remove unsupported plugins

commit e2b9428
Author: Alex Bilger <alxbilger@users.noreply.github.com>
Date:   Mon Dec 23 05:52:16 2024 +0100

    [Testing] Mitigate plugin import leakage between tests (sofa-framework#5161)

    * [Testing] ScopedPlugin

    * add version with lists

    * unload plugins at tear down

    * use ScopedPlugin in a test as an example

    * support multiple calls to loadPlugins

commit ca66554
Author: Alex Bilger <alxbilger@users.noreply.github.com>
Date:   Fri Dec 20 13:31:30 2024 +0100

    [Config] Upgrade to C++20 (sofa-framework#5111)

commit 642cdc6
Author: Hugo <hugo.talbot@sofa-framework.org>
Date:   Fri Dec 20 04:54:50 2024 +0100

    [Lagrangian] Remove unused data numericalTolerance in BLC (sofa-framework#5164)

commit 3e508d3
Author: Alex Bilger <alxbilger@users.noreply.github.com>
Date:   Fri Dec 20 04:53:09 2024 +0100

    [Type] Test and clean BoundingBox (sofa-framework#5138)

    [Type] Test for BoundingBox

commit 3ecd69c
Author: Alex Bilger <alxbilger@users.noreply.github.com>
Date:   Wed Dec 18 17:24:59 2024 +0100

    [SofaCUDA] Remove NO_CUDA condition (sofa-framework#5171)

commit 4aca268
Author: Frederick Roy <fredroy@users.noreply.github.com>
Date:   Wed Dec 18 21:28:35 2024 +0900

    [Core, Simulation.Core] Registration: (re)enable deprecation warnings (sofa-framework#5155)

    * enable deprecation warnings for RegisterObject

    * enable runtime deprecation warnings

    * re enable disabled tests

    * fix typo

    * fix units tests

    * expect a warning when loading pluginA

    * load plugins once (avoiding registering several times)

    * add more info when warning the user of a deprecated registration

    * set warnings only if dev mode is enabled (SOFA_WITH_DEVTOOLS enabled)

    * apply new mechanism registration to AugmentedLagrangianConstraint

commit 99df0a2
Author: Alex Bilger <alxbilger@users.noreply.github.com>
Date:   Tue Dec 17 15:26:53 2024 +0100

    [Visual] Move, rename and clean OglCylinderModel (sofa-framework#5124)

    * move files

    * depreciation

    * rename

    * fix color management

    * remove string to color conversion and use the one from RGBAColor

    * remove unused private methods

    * cleaning

    * component change

    * remove Index alias

    * change the description

    * cache drawTool

    * remove calls to removed functions

commit 02b3366
Author: Paul Baksic <30337881+bakpaul@users.noreply.github.com>
Date:   Tue Dec 17 02:06:24 2024 +0100

    [All] Fix visualisation (sofa-framework#5152)

    * Fix visualisation

    * Remove inheritance from visual model; Remove the use of visitor for VisualStyle and instead call the fwdDraw directly in the two visualVisitor

    * Change methods name

    * Update Sofa/framework/Core/src/sofa/core/visual/BaseVisualStyle.h

    Co-authored-by: Alex Bilger <alxbilger@users.noreply.github.com>

    ---------

    Co-authored-by: Alex Bilger <alxbilger@users.noreply.github.com>

commit 4eda9c7
Author: Paul Baksic <30337881+bakpaul@users.noreply.github.com>
Date:   Fri Dec 13 15:52:24 2024 +0100

    [Constraint.Lagrangian] Add augmented lagrangians (sofa-framework#5003)

    * Add AugmentedLagrangianConstraint response

    * accelerate GS convergence

    * Added virtualization layer for constraints, but linker issue arise. Need to fix it then add virutalization in Contact response

    * FIX linking

    * Add virtualization layer for contact response

    * Fix OBBCapsule

    * Fix Distance grid and simplify fix for OBB

    * Fix default friction used by tests

    * Try fix macos compilation

    * Add tag for augmented lagrangian

    * add details to the description of epsilon data

    * remove multiple registration in factory

    * MAke parameters struct final

    * USe data accessor instead

    * fix compilation

    * Try fix scene tests

    * Apply suggestions from code review

    Co-authored-by: Hugo <hugo.talbot@sofa-framework.org>

    * Add reference

    ---------

    Co-authored-by: Hugo <hugo.talbot@sofa-framework.org>

commit 8ba12f0
Author: Hugo <hugo.talbot@sofa-framework.org>
Date:   Fri Dec 13 03:22:11 2024 +0100

    [examples] Make symplectic option explicit (sofa-framework#5159)

    [Explicit] Make symplectic option explicit

commit 6ae972f
Author: Paul Baksic <30337881+bakpaul@users.noreply.github.com>
Date:   Wed Dec 11 13:56:40 2024 +0100

    [Constraint.Projective] Make LinearVelocityProjectiveConstraint work with FreeMotionAL (sofa-framework#5025)

    * Implement missing methods to work in FreeMotionAnimationLoop and add feature to keep the constraint applied after all the key event have passed

    * Apply suggestions from code review

    Co-authored-by: Hugo <hugo.talbot@sofa-framework.org>

    * Use constexpr when possible

    * Add example scene

    * Simplify the example and added the complete scene in the demo folder

    * Refactor finished mechanism and fix behavior when finished

    * Update scenes and regression tests

    * Put the boolean test on wether the constraint is still active or not inside a method

    ---------

    Co-authored-by: Hugo <hugo.talbot@sofa-framework.org>

commit 6141aac
Author: Frederick Roy <fredroy@users.noreply.github.com>
Date:   Wed Dec 11 18:29:09 2024 +0900

    [All] Remove spam warnings (sofa-framework#5156)

    * fix duplicated macro

    * fix unused variables

    * use new vecids
@hugtalbot hugtalbot removed the topic for next dev-meeting PR to be discussed in sofa-dev meeting label Apr 30, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

pr: fix Fix a bug pr: status ready Approved a pull-request, ready to be squashed

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants