From 5e2cd9dc1c3be48bda1b858e8e204ff7a20684ba Mon Sep 17 00:00:00 2001 From: Laszlo Agocs Date: Mon, 9 Jul 2018 15:51:23 +0200 Subject: console: do not crash in info when no attached object Rather, show a helpful message. This is now possible to trigger by doing setparent(object, null) and therefore it is important to be handled gracefully. Change-Id: I3de16c92343ae961d4e5ea9fffd33a29b5a512e0 Reviewed-by: Andy Nichols --- src/runtime/q3dsconsolecommands.cpp | 28 ++++++++++++++++------------ 1 file changed, 16 insertions(+), 12 deletions(-) diff --git a/src/runtime/q3dsconsolecommands.cpp b/src/runtime/q3dsconsolecommands.cpp index bfe9e1b..9d225b0 100644 --- a/src/runtime/q3dsconsolecommands.cpp +++ b/src/runtime/q3dsconsolecommands.cpp @@ -247,18 +247,22 @@ void Q3DSConsoleCommands::setupConsole(Q3DSConsole *console) if (obj->isNode()) { Q3DSNode *node = static_cast(obj); auto d = obj->attached(); - m_console->addMessageFmt(longResponseColor, "Global transform: %s\nGlobal opacity: %f\n" - "Local logical visibility (eyeball): %d\n" - "Global logical visibility (inherited eyeball): %d\n" - "Local effective visibility (eyeball+slide): %d\n" - "Global effective visibility (inherited eyeball+slide): %d\n", - qPrintable(printMatrix(d->globalTransform)), - d->globalOpacity, - node->flags().testFlag(Q3DSNode::Active), - d->globalLogicalVisibility, - node->flags().testFlag(Q3DSNode::Active) && d->visibilityTag == Q3DSGraphObjectAttached::Visible, - d->globalEffectiveVisibility); - if (d->lightsData) { + if (d) { + m_console->addMessageFmt(longResponseColor, "Global transform: %s\nGlobal opacity: %f\n" + "Local logical visibility (eyeball): %d\n" + "Global logical visibility (inherited eyeball): %d\n" + "Local effective visibility (eyeball+slide): %d\n" + "Global effective visibility (inherited eyeball+slide): %d\n", + qPrintable(printMatrix(d->globalTransform)), + d->globalOpacity, + node->flags().testFlag(Q3DSNode::Active), + d->globalLogicalVisibility, + node->flags().testFlag(Q3DSNode::Active) && d->visibilityTag == Q3DSGraphObjectAttached::Visible, + d->globalEffectiveVisibility); + } else { + m_console->addMessageFmt(longResponseColor, "No attached object. (node not in scene?)"); + } + if (d && d->lightsData) { auto printLightSources = [this](const QVector &lightSources) { for (int i = 0; i < lightSources.count(); ++i) { const Q3DSLightSource &lightSource(lightSources.at(i)); -- cgit v1.2.3