Skip to content

Commit a0c21d1

Browse files
committed
visualizer: don't override the map affine on a runtime view-param change
On a geographic scene the shared canvas projection's affine is owned by the installed equirectangular map projection. A runtime change to viewAngle/ viewScale/viewTranslation overwrote it, corrupting the mapping. Skip the override while a map projection is attached.
1 parent 7e60545 commit a0c21d1

1 file changed

Lines changed: 17 additions & 13 deletions

File tree

src/inet/visualizer/canvas/scene/SceneCanvasVisualizer.cc

Lines changed: 17 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -101,19 +101,23 @@ void SceneCanvasVisualizer::refreshAxis(double axisLength)
101101
void SceneCanvasVisualizer::handleParameterChange(const char *name)
102102
{
103103
if (!hasGUI()) return;
104-
if (!strcmp(name, "viewAngle")) {
105-
bool invertY;
106-
canvasProjection->setRotation(parseViewAngle(par("viewAngle"), invertY));
107-
canvasProjection->setScale(parse2D(par("viewScale"), invertY));
108-
// TODO update all visualizers
109-
}
110-
else if (!strcmp(name, "viewScale")) {
111-
canvasProjection->setScale(parse2D(par("viewScale")));
112-
// TODO update all visualizers
113-
}
114-
else if (!strcmp(name, "viewTranslation")) {
115-
canvasProjection->setTranslation(parse2D(par("viewTranslation")));
116-
// TODO update all visualizers
104+
// when a map projection is installed (e.g. by a GeoMapCanvasVisualizer) it owns the canvas affine;
105+
// overriding rotation/scale/translation here would corrupt the equirectangular mapping
106+
if (canvasProjection->getMapProjection() == nullptr) {
107+
if (!strcmp(name, "viewAngle")) {
108+
bool invertY;
109+
canvasProjection->setRotation(parseViewAngle(par("viewAngle"), invertY));
110+
canvasProjection->setScale(parse2D(par("viewScale"), invertY));
111+
// TODO update all visualizers
112+
}
113+
else if (!strcmp(name, "viewScale")) {
114+
canvasProjection->setScale(parse2D(par("viewScale")));
115+
// TODO update all visualizers
116+
}
117+
else if (!strcmp(name, "viewTranslation")) {
118+
canvasProjection->setTranslation(parse2D(par("viewTranslation")));
119+
// TODO update all visualizers
120+
}
117121
}
118122
double axisLength = par("axisLength");
119123
if (!std::isnan(axisLength))

0 commit comments

Comments
 (0)