diff options
Diffstat (limited to 'src/datavisualization/engine/abstract3drenderer.cpp')
-rw-r--r-- | src/datavisualization/engine/abstract3drenderer.cpp | 47 |
1 files changed, 14 insertions, 33 deletions
diff --git a/src/datavisualization/engine/abstract3drenderer.cpp b/src/datavisualization/engine/abstract3drenderer.cpp index 9b8bc13a..a39a6079 100644 --- a/src/datavisualization/engine/abstract3drenderer.cpp +++ b/src/datavisualization/engine/abstract3drenderer.cpp @@ -1,31 +1,7 @@ -/**************************************************************************** -** -** Copyright (C) 2016 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the Qt Data Visualization module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:GPL$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 3 or (at your option) any later version -** approved by the KDE Free Qt Foundation. The licenses are as published by -** the Free Software Foundation and appearing in the file LICENSE.GPL3 -** included in the packaging of this file. Please review the following -** information to ensure the GNU General Public License requirements will -** be met: https://www.gnu.org/licenses/gpl-3.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ +// Copyright (C) 2016 The Qt Company Ltd. +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only + +#undef QT_NO_FOREACH // this file contains unported legacy Q_FOREACH uses #include "abstract3drenderer_p.h" #include "texturehelper_p.h" @@ -749,8 +725,10 @@ void Abstract3DRenderer::updateCustomData(const QList<QCustom3DItem *> &customIt CustomRenderItem *renderItem = m_customRenderCache.value(item); if (!renderItem) renderItem = addCustomItem(item); - renderItem->setValid(true); - renderItem->setIndex(i); // always update index, as it must match the custom item index + if (renderItem) { + renderItem->setValid(true); + renderItem->setIndex(i); // always update index, as it must match the custom item index + } } // Check render item cache and remove items that are not in customItems list anymore @@ -1153,7 +1131,10 @@ CustomRenderItem *Abstract3DRenderer::addCustomItem(QCustom3DItem *item) CustomRenderItem *newItem = new CustomRenderItem(); newItem->setRenderer(this); newItem->setItemPointer(item); // Store pointer for render item updates - newItem->setMesh(item->meshFile()); + if (!newItem->setMesh(item->meshFile())) { + delete newItem; + return nullptr; + } newItem->setOrigPosition(item->position()); newItem->setOrigScaling(item->scaling()); newItem->setScalingAbsolute(item->isScalingAbsolute()); @@ -1466,7 +1447,7 @@ void Abstract3DRenderer::drawCustomItems(RenderingState state, bool volumeDetected = false; int loopCount = 0; while (loopCount < 2) { - for (QCustom3DItem *customItem : qAsConst(m_customItemDrawOrder)) { + for (QCustom3DItem *customItem : std::as_const(m_customItemDrawOrder)) { CustomRenderItem *item = m_customRenderCache.value(customItem); // Check that the render item is visible, and skip drawing if not // Also check if reflected item is on the "wrong" side, and skip drawing if it is @@ -1657,7 +1638,7 @@ void Abstract3DRenderer::drawCustomItems(RenderingState state, m_drawer->drawObject(shader, item->mesh(), item->texture()); } } - } else if (RenderingSelection == state) { + } else if (RenderingSelection == state && !volumeDetected) { // Selection render shader->setUniformValue(shader->MVP(), MVPMatrix); QVector4D itemColor = indexToSelectionColor(item->index()); |