Skip to content

Commit 7d7a539

Browse files
committed
Fix move, should be after dock check
1 parent 59b9dc6 commit 7d7a539

File tree

3 files changed

+64
-52
lines changed

3 files changed

+64
-52
lines changed

src/Interface/Modules/Render/ViewScene.cc

Lines changed: 37 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -394,13 +394,13 @@ ViewSceneDialog::ViewSceneDialog(const std::string& name, ModuleStateHandle stat
394394
state->connectSpecificStateChanged(Parameters::GeomData,[this](){Q_EMIT newGeometryValueForwarder();});
395395
connect(this, SIGNAL(newGeometryValueForwarder()), this, SLOT(updateModifiedGeometriesAndSendScreenShot()));
396396

397-
state->connectSpecificStateChanged(Modules::Render::ViewScene::CameraRotation,[this](){Q_EMIT cameraRotationChangeForwarder();});
397+
state->connectSpecificStateChanged(Parameters::CameraRotation1,[this](){Q_EMIT cameraRotationChangeForwarder();});
398398
connect(this, SIGNAL(cameraRotationChangeForwarder()), this, SLOT(pullCameraRotation()));
399399

400-
state->connectSpecificStateChanged(Modules::Render::ViewScene::CameraLookAt,[this](){Q_EMIT cameraLookAtChangeForwarder();});
400+
state->connectSpecificStateChanged(Parameters::CameraLookAt,[this](){Q_EMIT cameraLookAtChangeForwarder();});
401401
connect(this, SIGNAL(cameraLookAtChangeForwarder()), this, SLOT(pullCameraLookAt()));
402402

403-
state->connectSpecificStateChanged(Modules::Render::ViewScene::CameraDistance,[this](){Q_EMIT cameraDistnaceChangeForwarder();});
403+
state->connectSpecificStateChanged(Parameters::CameraDistance,[this](){Q_EMIT cameraDistnaceChangeForwarder();});
404404
connect(this, SIGNAL(cameraDistnaceChangeForwarder()), this, SLOT(pullCameraDistance()));
405405

406406
state->connectSpecificStateChanged(Parameters::VSMutex, [this](){Q_EMIT lockMutexForwarder();});
@@ -771,9 +771,9 @@ void ViewSceneDialog::pullCameraRotation()
771771
return;
772772

773773
glm::quat q;
774-
auto rotVariable = state_->getValue(Modules::Render::ViewScene::CameraRotation);
774+
auto rotVariable = state_->getValue(Parameters::CameraRotation1);
775775
if (rotVariable.value().type() == typeid(std::string)) // Legacy interpreter for networks that have this stored as string
776-
q = ViewSceneUtility::stringToQuat(state_->getValue(Modules::Render::ViewScene::CameraRotation).toString());
776+
q = ViewSceneUtility::stringToQuat(state_->getValue(Parameters::CameraRotation1).toString());
777777
else
778778
{
779779
auto rotation = toDoubleVector(rotVariable.toVector());
@@ -784,6 +784,7 @@ void ViewSceneDialog::pullCameraRotation()
784784
" values. " + std::to_string(rotation.size()) + " values were provided.");
785785
}
786786

787+
qDebug() << name_.c_str() << "setCameraRotation" << q.w << q.x << q.y << q.z;
787788
spire->setCameraRotation(q);
788789
}
789790

@@ -794,7 +795,7 @@ void ViewSceneDialog::pullCameraLookAt()
794795
auto spire = mSpire.lock();
795796
if (!spire) return;
796797

797-
auto lookAtVariable = state_->getValue(Modules::Render::ViewScene::CameraLookAt);
798+
auto lookAtVariable = state_->getValue(Parameters::CameraLookAt);
798799
if (lookAtVariable.value().type() == typeid(std::string)) // Legacy interpreter for networks that have this stored as string
799800
{
800801
auto lookAtPoint = pointFromString(lookAtVariable.toString());
@@ -818,8 +819,8 @@ void ViewSceneDialog::pullCameraDistance()
818819
auto spire = mSpire.lock();
819820
if (!spire) return;
820821

821-
double distance = state_->getValue(Modules::Render::ViewScene::CameraDistance).toDouble();
822-
double distanceMin = state_->getValue(Modules::Render::ViewScene::CameraDistanceMinimum).toDouble();
822+
double distance = state_->getValue(Parameters::CameraDistance).toDouble();
823+
double distanceMin = state_->getValue(Parameters::CameraDistanceMinimum).toDouble();
823824
distance = std::max(std::abs(distance), distanceMin);
824825
spire->setCameraDistance(distance);
825826
}
@@ -839,7 +840,7 @@ void ViewSceneDialog::pushCameraDistance()
839840
auto spire = mSpire.lock();
840841
if(!spire) return;
841842

842-
state_->setValue(Modules::Render::ViewScene::CameraDistance, (double)spire->getCameraDistance());
843+
state_->setValue(Parameters::CameraDistance, (double)spire->getCameraDistance());
843844
pushingCameraState_ = false;
844845
}
845846

@@ -852,7 +853,7 @@ void ViewSceneDialog::pushCameraLookAt()
852853

853854
auto v = spire->getCameraLookAt();
854855
auto lookAt = makeAnonymousVariableList((double)v.x, (double)v.y, (double)v.z);
855-
state_->setValue(Modules::Render::ViewScene::CameraLookAt, lookAt);
856+
state_->setValue(Parameters::CameraLookAt, lookAt);
856857
pushingCameraState_ = false;
857858
}
858859

@@ -861,10 +862,11 @@ void ViewSceneDialog::pushCameraRotation()
861862
{
862863
pushingCameraState_ = true;
863864
auto spire = mSpire.lock();
864-
if(!spire) return;
865+
if (!spire) return;
865866

866867
auto q = spire->getCameraRotation();
867-
state_->setValue(Modules::Render::ViewScene::CameraRotation, makeAnonymousVariableList(q.w, q.x, q.y, q.z));
868+
state_->setValue(Parameters::CameraRotation1, makeAnonymousVariableList(q.w, q.x, q.y, q.z));
869+
qDebug() << name_.c_str() << "pushCameraRotation" << q.w << q.x << q.y << q.z;
868870
pushingCameraState_ = false;
869871
}
870872

@@ -938,24 +940,30 @@ void ViewSceneDialog::pullSpecial()
938940

939941
if (parentWidget())
940942
{
941-
if (savedPos_)
942-
{
943-
parentWidget()->move(*savedPos_);
944-
}
945-
else
946-
{
947-
const auto x = state_->getValue(Parameters::WindowPositionX).toInt();
948-
const auto y = state_->getValue(Parameters::WindowPositionY).toInt();
949-
parentWidget()->move(x, y);
950-
}
951943
auto dock = qobject_cast<QDockWidget*>(parentWidget());
944+
const auto isFloating = state_->getValue(Parameters::IsFloating).toBool();
952945
if (dock)
953-
dock->setFloating(state_->getValue(Parameters::IsFloating).toBool());
946+
dock->setFloating(isFloating);
947+
948+
if (isFloating)
949+
{
950+
if (savedPos_)
951+
{
952+
parentWidget()->move(*savedPos_);
953+
}
954+
else
955+
{
956+
const auto x = state_->getValue(Parameters::WindowPositionX).toInt();
957+
const auto y = state_->getValue(Parameters::WindowPositionY).toInt();
958+
parentWidget()->move(x, y);
959+
}
960+
}
954961
}
955962

956963
pulledSavedVisibility_ = true;
964+
965+
pullCameraState();
957966
}
958-
pullCameraState();
959967
}
960968

961969
void ViewSceneDialog::adjustToolbar()
@@ -1237,11 +1245,13 @@ void ViewSceneDialog::resizingDone()
12371245

12381246
void ViewSceneDialog::postMoveEventCallback(const QPoint& p)
12391247
{
1240-
if (pulling_)
1241-
return;
12421248
if (!savedPos_)
12431249
savedPos_ = QPoint{ state_->getValue(Parameters::WindowPositionX).toInt(),
12441250
state_->getValue(Parameters::WindowPositionY).toInt() };
1251+
1252+
if (pulling_)
1253+
return;
1254+
12451255
state_->setValue(Parameters::WindowPositionX, p.x());
12461256
state_->setValue(Parameters::WindowPositionY, p.y());
12471257
}
@@ -1290,7 +1300,7 @@ void ViewSceneDialog::inputMouseWheelHelper(int32_t delta)
12901300
scaleBarGeom_ = buildGeometryScaleBar();
12911301
updateModifiedGeometries();
12921302
}
1293-
state_->setValue(Modules::Render::ViewScene::CameraDistance, (double)spire->getCameraDistance());
1303+
state_->setValue(Parameters::CameraDistance, (double)spire->getCameraDistance());
12941304
}
12951305

12961306
void ViewSceneDialog::setViewScenesToUpdate(const std::unordered_set<ViewSceneDialog*>& scenes)

src/Modules/Render/ViewScene.cc

Lines changed: 20 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -122,6 +122,10 @@ ALGORITHM_PARAMETER_DEF(Render, WindowSizeY);
122122
ALGORITHM_PARAMETER_DEF(Render, WindowPositionX);
123123
ALGORITHM_PARAMETER_DEF(Render, WindowPositionY);
124124
ALGORITHM_PARAMETER_DEF(Render, IsFloating);
125+
ALGORITHM_PARAMETER_DEF(Render, CameraDistance);
126+
ALGORITHM_PARAMETER_DEF(Render, CameraDistanceMinimum);
127+
ALGORITHM_PARAMETER_DEF(Render, CameraLookAt);
128+
ALGORITHM_PARAMETER_DEF(Render, CameraRotation1);
125129

126130
ViewScene::ViewScene() : ModuleWithAsyncDynamicPorts(staticInfo_, true)
127131
{
@@ -194,12 +198,12 @@ void ViewScene::setStateDefaults()
194198
state->setValue(Parameters::WindowPositionX, 200);
195199
state->setValue(Parameters::WindowPositionY, 200);
196200
state->setValue(Parameters::IsFloating, true);
197-
state->setValue(CameraDistance, 3.0);
201+
state->setValue(Parameters::CameraDistance, 3.0);
198202
state->setValue(IsExecuting, false);
199203
state->setTransientValue(TimeExecutionFinished, 0, false);
200-
state->setValue(CameraDistanceMinimum, 1e-10);
201-
state->setValue(CameraLookAt, makeAnonymousVariableList(0.0, 0.0, 0.0));
202-
state->setValue(CameraRotation, makeAnonymousVariableList(1.0, 0.0, 0.0, 0.0));
204+
state->setValue(Parameters::CameraDistanceMinimum, 1e-10);
205+
state->setValue(Parameters::CameraLookAt, makeAnonymousVariableList(0.0, 0.0, 0.0));
206+
state->setValue(Parameters::CameraRotation1, makeAnonymousVariableList(1.0, 0.0, 0.0, 0.0));
203207
state->setValue(HasNewGeometry, false);
204208

205209
get_state()->connectSpecificStateChanged(Parameters::GeometryFeedbackInfo, [this]() { processViewSceneObjectFeedback(); });
@@ -209,7 +213,7 @@ void ViewScene::setStateDefaults()
209213
void ViewScene::fireTransientStateChangeSignalForGeomData()
210214
{
211215
//this is gross but I dont see any other way to fire the signal associated with geom data
212-
auto transient = get_state()->getTransientValue(Parameters::GeomData);
216+
const auto transient = get_state()->getTransientValue(Parameters::GeomData);
213217
auto geoms = transient_value_cast<GeomListPtr>(transient);
214218
get_state()->setTransientValue(Parameters::GeomData, geoms, true);
215219
}
@@ -230,7 +234,7 @@ void ViewScene::portRemovedSlotImpl(const PortId& pid)
230234

231235
void ViewScene::updateTransientList()
232236
{
233-
auto transient = get_state()->getTransientValue(Parameters::GeomData);
237+
const auto transient = get_state()->getTransientValue(Parameters::GeomData);
234238

235239
auto geoms = transient_value_cast<GeomListPtr>(transient);
236240
if (!geoms)
@@ -275,19 +279,19 @@ void ViewScene::asyncExecute(const PortId& pid, DatatypeHandle data)
275279

276280
LOG_DEBUG("ViewScene::asyncExecute {} after locking", id().id_);
277281

278-
auto geom = boost::dynamic_pointer_cast<GeometryObject>(data);
282+
const auto geom = boost::dynamic_pointer_cast<GeometryObject>(data);
279283
if (!geom)
280284
{
281285
error("Logical error: not a geometry object on ViewScene");
282286
return;
283287
}
284288

285289
{
286-
auto iport = getInputPort(pid);
290+
const auto iport = getInputPort(pid);
287291
auto connectedModuleId = iport->connectedModuleId();
288292
if (connectedModuleId->find("ShowField") != std::string::npos)
289293
{
290-
auto state = iport->stateFromConnectedModule();
294+
const auto state = iport->stateFromConnectedModule();
291295
syncMeshComponentFlags(*connectedModuleId, state);
292296
}
293297
}
@@ -322,10 +326,9 @@ void ViewScene::execute()
322326
Guard lock(screenShotMutex_.get());
323327
if (needToExecute() && inputPorts().size() >= 1) // only send screenshot if input is present
324328
{
325-
ModuleStateInterface::TransientValueOption screenshotDataOption;
326-
screenshotDataOption = state->getTransientValue(Parameters::ScreenshotData);
329+
const auto screenshotDataOption = state->getTransientValue(Parameters::ScreenshotData);
327330
{
328-
auto screenshotData = transient_value_cast<RGBMatrices>(screenshotDataOption);
331+
const auto screenshotData = transient_value_cast<RGBMatrices>(screenshotDataOption);
329332
if (screenshotData.red) sendOutput(ScreenshotDataRed, screenshotData.red);
330333
if (screenshotData.green) sendOutput(ScreenshotDataGreen, screenshotData.green);
331334
if (screenshotData.blue) sendOutput(ScreenshotDataBlue, screenshotData.blue);
@@ -345,8 +348,8 @@ unsigned long ViewScene::getCurrentTimeSinceEpoch()
345348
void ViewScene::processViewSceneObjectFeedback()
346349
{
347350
//TODO: match ID of touched geom object with port id, and send that info back too.
348-
auto state = get_state();
349-
auto newInfo = state->getTransientValue(Parameters::GeometryFeedbackInfo);
351+
const auto state = get_state();
352+
const auto newInfo = state->getTransientValue(Parameters::GeometryFeedbackInfo);
350353
//TODO: lost equality test here due to change to boost::any. Would be nice to form a data class with equality to avoid repetitive signalling.
351354
if (newInfo)
352355
{
@@ -357,19 +360,15 @@ void ViewScene::processViewSceneObjectFeedback()
357360

358361
void ViewScene::processMeshComponentSelection()
359362
{
360-
auto state = get_state();
361-
auto newInfo = state->getTransientValue(Parameters::MeshComponentSelection);
363+
const auto state = get_state();
364+
const auto newInfo = state->getTransientValue(Parameters::MeshComponentSelection);
362365
if (newInfo)
363366
{
364-
auto vsInfo = transient_value_cast<MeshComponentSelectionFeedback>(newInfo);
367+
const auto vsInfo = transient_value_cast<MeshComponentSelectionFeedback>(newInfo);
365368
sendFeedbackUpstreamAlongIncomingConnections(vsInfo);
366369
}
367370
}
368371

369-
const AlgorithmParameterName ViewScene::CameraDistance("CameraDistance");
370-
const AlgorithmParameterName ViewScene::CameraDistanceMinimum("CameraDistanceMinimum");
371-
const AlgorithmParameterName ViewScene::CameraLookAt("CameraLookAt");
372-
const AlgorithmParameterName ViewScene::CameraRotation("CameraRotation");
373372
const AlgorithmParameterName ViewScene::IsExecuting("IsExecuting");
374373
const AlgorithmParameterName ViewScene::TimeExecutionFinished("TimeExecutionFinished");
375374
const AlgorithmParameterName ViewScene::HasNewGeometry("HasNewGeometry");

src/Modules/Render/ViewScene.h

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -77,12 +77,18 @@ namespace SCIRun
7777

7878

7979
// save/load confirmed, uses standard widget managers.
80+
81+
// save/load confirmed, uses pullSpecial.
8082
ALGORITHM_PARAMETER_DECL(ShowViewer);
8183
ALGORITHM_PARAMETER_DECL(WindowSizeX);
8284
ALGORITHM_PARAMETER_DECL(WindowSizeY);
8385
ALGORITHM_PARAMETER_DECL(WindowPositionX);
8486
ALGORITHM_PARAMETER_DECL(WindowPositionY);
8587
ALGORITHM_PARAMETER_DECL(IsFloating);
88+
ALGORITHM_PARAMETER_DECL(CameraDistance);
89+
ALGORITHM_PARAMETER_DECL(CameraDistanceMinimum);
90+
ALGORITHM_PARAMETER_DECL(CameraLookAt);
91+
ALGORITHM_PARAMETER_DECL(CameraRotation1);
8692

8793
// save/load has issues.
8894
ALGORITHM_PARAMETER_DECL(HeadLightOn);
@@ -148,10 +154,7 @@ namespace Render {
148154
void asyncExecute(const Dataflow::Networks::PortId& pid, Core::Datatypes::DatatypeHandle data) override;
149155
void setStateDefaults() override;
150156

151-
static const Core::Algorithms::AlgorithmParameterName CameraDistance;
152-
static const Core::Algorithms::AlgorithmParameterName CameraDistanceMinimum;
153-
static const Core::Algorithms::AlgorithmParameterName CameraLookAt;
154-
static const Core::Algorithms::AlgorithmParameterName CameraRotation;
157+
155158
static const Core::Algorithms::AlgorithmParameterName IsExecuting;
156159
static const Core::Algorithms::AlgorithmParameterName TimeExecutionFinished;
157160
static const Core::Algorithms::AlgorithmParameterName HasNewGeometry;

0 commit comments

Comments
 (0)