View Issue Details

IDProjectCategoryView StatusLast Update
0005608DarkRadiantGUIpublic22.05.2021 12:02
ReporterBikerdude Assigned Togreebo  
PrioritynormalSeveritynormalReproducibilityrandom
Status resolvedResolutionfixed 
PlatformPCOSWindowsOS Version10
Product Version2.12.0 
Target Version2.13.0Fixed in Version2.13.0 
Summary0005608: Path entites rotate 15 degrees, each time when dragged.
DescriptionHave a random issue where when 'any' path entity is dragged around in orthoview it will rotate roughly 15 degrees each time its selected and dragged. But on a fresh load and run of DR it isn't reproducible.
Steps To Reproduce- New Map
- Create Player start somewhere in the ortho view
- Dragging the player start won't change the direction of the arrow
- Hit "Z-Axis Rotate" to rotate the player start 90 degrees
- Dragging the player start will now add another rotation by 90 degrees (every time)
TagsNo tags attached.

Activities

greebo

greebo

19.05.2021 18:38

administrator   ~0014030

This seems to happen after a rotation has been applied to the entity in question. I'll add some repro steps.
greebo

greebo

19.05.2021 18:57

administrator   ~0014031

Last edited: 19.05.2021 18:57

View 2 revisions

The problem arises due to the rather nontrivial way the Transformable scene nodes are applying their assigned scale/rotate/translate values in a pattern of setTransform/transformChanged/evaluateTransform/revertTransform/freezeTransform/whateverTransform. The pattern is repeated across many classes, but there are slight differences every time it's applied.

With regards to this problem It appears that GenericEntityNode::freezeTransform() is overriding the base method without ever calling it. When freezeTransform() is invoked by the transformation visitors, the Transformable::_rotation member is not reset and it's applied in every new transformation round. All the other node types don't override the method, so the rotation is properly cleared to its identity value.
Bikerdude

Bikerdude

19.05.2021 19:33

reporter   ~0014032

I barely understood most of that, so does the above explain why it only happens after it been open for a while and not after a fresh run of DR.
Bikerdude

Bikerdude

22.05.2021 12:02

reporter   ~0014040

nice one Greebo.

Related Changesets

DarkRadiant: master 13d07da7

2021-05-22 11:31:26

greebo

Details Diff
0005608: Add MoveSelected console command, accepting any 3-component vector as translation argument Affected Issues
0005608
mod - radiantcore/selection/algorithm/General.cpp Diff File
mod - radiantcore/selection/algorithm/Transformation.cpp Diff File
mod - radiantcore/selection/algorithm/Transformation.h Diff File

DarkRadiant: master 24539c95

2021-05-22 11:32:07

greebo

Details Diff
0005608: Add unit test covering the newly introduce MoveSelected command, as well as the faulty behaviour in the issue at hand Affected Issues
0005608
mod - radiantcore/entity/generic/GenericEntityNode.h Diff File
mod - test/CMakeLists.txt Diff File
add - test/Transformation.cpp Diff File
mod - test/resources/tdm/def/base.def Diff File
mod - tools/msvc/Tests/Tests.vcxproj Diff File
mod - tools/msvc/Tests/Tests.vcxproj.filters Diff File

DarkRadiant: master ab1a0a8a

2021-05-22 11:43:44

greebo

Details Diff
0005608: The GenericEntityNode::revertTransform/freezeTransform methods that were merged GenericEntityNode are not really overrides of the Transformable method inherited with the same name. Remove the override again, and use a private name, like the EClassModelNode is doing.
This whole transformation related code is very obscure and full of callbacks and indirections, and (probably) full of duplicated code paths - too much to tackle with this issue.
Affected Issues
0005608
mod - radiantcore/entity/generic/GenericEntityNode.cpp Diff File
mod - radiantcore/entity/generic/GenericEntityNode.h Diff File

Issue History

Date Modified Username Field Change
07.05.2021 07:08 Bikerdude New Issue
11.05.2021 10:37 greebo Status new => acknowledged
19.05.2021 18:38 greebo Status acknowledged => confirmed
19.05.2021 18:38 greebo Note Added: 0014030
19.05.2021 18:40 greebo Target Version => 2.13.0
19.05.2021 18:40 greebo Steps to Reproduce Updated View Revisions
19.05.2021 18:57 greebo Note Added: 0014031
19.05.2021 18:57 greebo Note Edited: 0014031 View Revisions
19.05.2021 19:33 Bikerdude Note Added: 0014032
22.05.2021 07:01 greebo Assigned To => greebo
22.05.2021 07:01 greebo Status confirmed => assigned
22.05.2021 11:45 greebo Changeset attached => DarkRadiant master 13d07da7
22.05.2021 11:45 greebo Changeset attached => DarkRadiant master 24539c95
22.05.2021 11:45 greebo Changeset attached => DarkRadiant master ab1a0a8a
22.05.2021 11:45 greebo Status assigned => resolved
22.05.2021 11:45 greebo Resolution open => fixed
22.05.2021 11:45 greebo Fixed in Version => 2.13.0
22.05.2021 12:02 Bikerdude Note Added: 0014040