From c126263877629f38b0e7ec6cd1059abb50f17e2a Mon Sep 17 00:00:00 2001 From: Tuareg Date: Thu, 30 Jul 2020 15:09:30 +1200 Subject: [PATCH] BROKEN moves from widget to zincwidget --- .../editing/MappingView/CMakeLists.txt | 1 + .../MappingView/src/mappingviewwidget.cpp | 132 +----------- .../MappingView/src/mappingviewwidget.h | 20 +- .../MappingView/src/mappingviewzincwidget.cpp | 188 ++++++++++++++++++ .../MappingView/src/mappingviewzincwidget.h | 79 ++++++++ .../widget/ZincWidget/src/zincwidget.h | 3 +- 6 files changed, 282 insertions(+), 141 deletions(-) create mode 100644 src/plugins/editing/MappingView/src/mappingviewzincwidget.cpp create mode 100644 src/plugins/editing/MappingView/src/mappingviewzincwidget.h diff --git a/src/plugins/editing/MappingView/CMakeLists.txt b/src/plugins/editing/MappingView/CMakeLists.txt index 735690f6d9..83ae0ae759 100644 --- a/src/plugins/editing/MappingView/CMakeLists.txt +++ b/src/plugins/editing/MappingView/CMakeLists.txt @@ -15,6 +15,7 @@ add_plugin(MappingView src/mappingvieweditingwidget.cpp src/mappingviewplugin.cpp src/mappingviewwidget.cpp + src/mappingviewzincwidget.cpp src/meshreader.cpp PLUGINS Core diff --git a/src/plugins/editing/MappingView/src/mappingviewwidget.cpp b/src/plugins/editing/MappingView/src/mappingviewwidget.cpp index fdbfc14b07..38451ba7df 100644 --- a/src/plugins/editing/MappingView/src/mappingviewwidget.cpp +++ b/src/plugins/editing/MappingView/src/mappingviewwidget.cpp @@ -58,9 +58,7 @@ namespace MappingView { MappingViewWidget::MappingViewWidget(QWidget *pParent) : Core::SplitterWidget(pParent), - mAxesFontPointSize(0), - mZincContext(nullptr), - mZincSceneViewerDescription(nullptr) + mAxesFontPointSize(0) { // Set our orientation @@ -92,33 +90,27 @@ MappingViewWidget::MappingViewWidget(QWidget *pParent) : // Create and add a Zinc widget - mZincWidget = new ZincWidget::ZincWidget(this); + mMappingViewZincWidget = new MappingViewZincWidget(this); - connect(mZincWidget, SIGNAL(contextAboutToBeDestroyed()), + //TODO change syntax + connect(mMappingViewZincWidget, SIGNAL(contextAboutToBeDestroyed()), this, SLOT(createAndSetZincContext())); - connect(mZincWidget, SIGNAL(graphicsInitialized()), - this, SLOT(graphicsInitialized())); - connect(mZincWidget, SIGNAL(devicePixelRatioChanged(const int &)), + connect(mMappingViewZincWidget, SIGNAL(devicePixelRatioChanged(const int &)), this, SLOT(devicePixelRatioChanged(const int &))); - addWidget(mZincWidget); + addWidget(mMappingViewZincWidget); // Create and set our Zinc context - + //TODO move into zincwidget createAndSetZincContext(); - } //============================================================================== MappingViewWidget::~MappingViewWidget() { - - delete mZincContext; - QFile::remove(mExNodeFileName); QFile::remove(mExElemFileName); - } //============================================================================== @@ -226,126 +218,22 @@ void MappingViewWidget::fileRenamed(const QString &pOldFileName, const QString & //============================================================================== -void MappingViewWidget::createAndSetZincContext() -{ - // Keep track of our current scene viewer's description - - mZincSceneViewerDescription = mZincWidget->sceneViewer().writeDescription(); - - // Create and set our Zinc context - - mZincContext = new OpenCMISS::Zinc::Context("TestZinc"); - - mZincContext->getMaterialmodule().defineStandardMaterials(); - mZincContext->getGlyphmodule().defineStandardGlyphs(); - - mZincWidget->setContext(mZincContext); -} - -//============================================================================== - -void MappingViewWidget::graphicsInitialized() -{ - // Set our 'new' scene viewer's description - - OpenCMISS::Zinc::Sceneviewer sceneViewer = mZincWidget->sceneViewer(); - - //sceneViewer.readDescription(mZincSceneViewerDescription); - - // Our Zinc widget has had its graphics initialised, so now we can set its - // background colour - - std::array backgroundColor = { 0.85, 0.85, 0.85, 1.0 }; - - sceneViewer.setBackgroundColourRGBA(backgroundColor.data()); - - // Our initial look at and eye positions, and up vector -/* TODO free when it works - sceneViewer.setViewingVolume(-1.922499, 1.922499, -1.922499, 1.922499, 0.632076, 22.557219); - - //TODO adapt to the model - std::array lookAtPosition = { -63.005, -64.247, 189.21 }; - std::array eyePosition = { -50, -64, 180 }; - std::array upVector = { -1.000000, 0.000000, 0.000000 }; - - sceneViewer.setLookatPosition(lookAtPosition.data()); - sceneViewer.setEyePosition(eyePosition.data()); - sceneViewer.setUpVector(upVector.data()); -*/ - OpenCMISS::Zinc::Region defaultRegion = mZincContext->getDefaultRegion(); - - sceneViewer.setScene(defaultRegion.getScene()); - - - //===== Do stuff to fold later - - OpenCMISS::Zinc::Region region = mZincContext->getDefaultRegion(); - - region.readFile(qPrintable("../opencor/meshes/circulation.exnode")); - region.readFile(qPrintable("../opencor/meshes/circulation.exelem")); - - mFieldModule = region.getFieldmodule(); - - mFieldModule.beginChange(); - OpenCMISS::Zinc::Field coordinates = mFieldModule.findFieldByName("Coordinates"); - mFieldModule.endChange(); - - OpenCMISS::Zinc::Scene scene = region.getScene(); - - scene.beginChange(); - OpenCMISS::Zinc::Materialmodule materialModule = scene.getMaterialmodule(); - - //Black lines - - OpenCMISS::Zinc::GraphicsLines lines = scene.createGraphicsLines(); - - lines.setCoordinateField(coordinates); - lines.setMaterial(materialModule.findMaterialByName("red")); - - // Green spheres limiting our scene - - OpenCMISS::Zinc::GraphicsPoints nodePoints = scene.createGraphicsPoints(); - - nodePoints.setCoordinateField(coordinates); - nodePoints.setFieldDomainType(OpenCMISS::Zinc::Field::DOMAIN_TYPE_NODES); - nodePoints.setMaterial(materialModule.findMaterialByName("green")); - - // Size of our green spheres - - mNodeSize = 20.; - - OpenCMISS::Zinc::Graphicspointattributes pointAttr = nodePoints.getGraphicspointattributes(); - - pointAttr.setBaseSize(1, &mNodeSize); - pointAttr.setGlyphShapeType(OpenCMISS::Zinc::Glyph::SHAPE_TYPE_SPHERE); - - scene.endChange(); - - // adding view all command - - sceneViewer.viewAll(); - - -} - -//============================================================================== - void MappingViewWidget::devicePixelRatioChanged(const int &pDevicePixelRatio) { + Q_UNUSED(pDevicePixelRatio); //TODO to confirm // Update our scene using the given devide pixel ratio - + /* OpenCMISS::Zinc::Scene scene = mZincContext->getDefaultRegion().getScene(); scene.beginChange(); scene.createGraphicsPoints().getGraphicspointattributes().getFont().setPointSize(pDevicePixelRatio*mAxesFontPointSize); scene.endChange(); + */ } //============================================================================== - - } // namespace MappingView } // namespace OpenCOR diff --git a/src/plugins/editing/MappingView/src/mappingviewwidget.h b/src/plugins/editing/MappingView/src/mappingviewwidget.h index e53900d5d8..1a26ee313e 100644 --- a/src/plugins/editing/MappingView/src/mappingviewwidget.h +++ b/src/plugins/editing/MappingView/src/mappingviewwidget.h @@ -28,6 +28,7 @@ along with this program. If not, see . #include "viewwidget.h" #include "cellmlfile.h" #include "mappingvieweditingwidget.h" +#include "mappingviewzincwidget.h" //============================================================================== @@ -36,13 +37,6 @@ along with this program. If not, see . #include #include -//============================================================================= - -#include "zincbegin.h" - #include "opencmiss/zinc/fieldfiniteelement.hpp" - #include "opencmiss/zinc/timekeeper.hpp" -#include "zincend.h" - //============================================================================== namespace Ui { @@ -88,10 +82,8 @@ class MappingViewWidget : public Core::SplitterWidget int mAxesFontPointSize; private: - double mNodeSize; - ZincWidget::ZincWidget *mZincWidget; - OpenCMISS::Zinc::Context *mZincContext; + MappingViewZincWidget *mMappingViewZincWidget; QListWidget *mListWidgetVariables; QListWidget *mListWidgetOutput; @@ -102,14 +94,6 @@ class MappingViewWidget : public Core::SplitterWidget QString mExNodeFileName; QString mExElemFileName; - - OpenCMISS::Zinc::Fieldmodule mFieldModule; - - char *mZincSceneViewerDescription; - - - - private slots: void createAndSetZincContext(); void graphicsInitialized(); diff --git a/src/plugins/editing/MappingView/src/mappingviewzincwidget.cpp b/src/plugins/editing/MappingView/src/mappingviewzincwidget.cpp new file mode 100644 index 0000000000..f03d6da47c --- /dev/null +++ b/src/plugins/editing/MappingView/src/mappingviewzincwidget.cpp @@ -0,0 +1,188 @@ +/******************************************************************************* + +Copyright (C) The University of Auckland + +OpenCOR is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +OpenCOR is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see . + +*******************************************************************************/ + +//============================================================================== +// Zinc widget +//============================================================================== + +#include "mappingviewzincwidget.h" + +//============================================================================== + +#include +#include +#include + +//============================================================================== + +#include "zincbegin.h" + #include "opencmiss/zinc/context.hpp" + #include "opencmiss/zinc/result.hpp" +#include "zincend.h" + +//============================================================================== + +namespace OpenCOR { +namespace MappingView { + +//============================================================================== + +MappingViewZincWidget::MappingViewZincWidget(QWidget *pParent) : + ZincWidget::ZincWidget(pParent) +{ + + //TODO usefull ? + // Keep track of our current scene viewer's description + + mZincSceneViewerDescription = sceneViewer().writeDescription(); + + // Create and set our Zinc context + + mZincContext = new OpenCMISS::Zinc::Context(); + + mZincContext->getMaterialmodule().defineStandardMaterials(); + mZincContext->getGlyphmodule().defineStandardGlyphs(); + + setContext(mZincContext); +} + +//============================================================================== + +void MappingViewZincWidget::initializeGL() +{ + ZincWidget::initializeGL(); + + + //mSceneViewer.readDescription(mZincSceneViewerDescription); + + // Our Zinc widget has had its graphics initialised, so now we can set its + // background colour + + std::array backgroundColor = { 0.85, 0.85, 0.85, 1.0 }; + + mSceneViewer.setBackgroundColourRGBA(backgroundColor.data()); + + // Our initial look at and eye positions, and up vector +/* TODO free when it works + mSceneViewer.setViewingVolume(-1.922499, 1.922499, -1.922499, 1.922499, 0.632076, 22.557219); + + //TODO adapt to the model + std::array lookAtPosition = { -63.005, -64.247, 189.21 }; + std::array eyePosition = { -50, -64, 180 }; + std::array upVector = { -1.000000, 0.000000, 0.000000 }; + + mSceneViewer.setLookatPosition(lookAtPosition.data()); + mSceneViewer.setEyePosition(eyePosition.data()); + mSceneViewer.setUpVector(upVector.data()); +*/ + OpenCMISS::Zinc::Region defaultRegion = mZincContext->getDefaultRegion(); + + mSceneViewer.setScene(defaultRegion.getScene()); + + OpenCMISS::Zinc::Region region = mZincContext->getDefaultRegion(); + + //TODO copy + region.readFile(qPrintable("../opencor/meshes/circulation.exnode")); + region.readFile(qPrintable("../opencor/meshes/circulation.exelem")); + + mFieldModule = region.getFieldmodule(); + + mFieldModule.beginChange(); + OpenCMISS::Zinc::Field coordinates = mFieldModule.findFieldByName("Coordinates"); + mFieldModule.endChange(); + + OpenCMISS::Zinc::Scene scene = region.getScene(); + + scene.beginChange(); + OpenCMISS::Zinc::Materialmodule materialModule = scene.getMaterialmodule(); + + //Black lines + + OpenCMISS::Zinc::GraphicsLines lines = scene.createGraphicsLines(); + + lines.setCoordinateField(coordinates); + lines.setMaterial(materialModule.findMaterialByName("red")); + + // Green spheres limiting our scene + + OpenCMISS::Zinc::GraphicsPoints nodePoints = scene.createGraphicsPoints(); + + nodePoints.setCoordinateField(coordinates); + nodePoints.setFieldDomainType(OpenCMISS::Zinc::Field::DOMAIN_TYPE_NODES); + nodePoints.setMaterial(materialModule.findMaterialByName("green")); + + // Size of our green spheres + + mNodeSize = 20.; + + OpenCMISS::Zinc::Graphicspointattributes pointAttr = nodePoints.getGraphicspointattributes(); + + pointAttr.setBaseSize(1, &mNodeSize); + pointAttr.setGlyphShapeType(OpenCMISS::Zinc::Glyph::SHAPE_TYPE_SPHERE); + + scene.endChange(); + + // adding view all command + + mSceneViewer.viewAll(); +} + +//============================================================================== + +void MappingViewZincWidget::mouseMoveEvent(QMouseEvent *pEvent) +{ + ZincWidget::mouseMoveEvent(pEvent); + mouse_fix_click = false; +} + +//============================================================================== + +void MappingViewZincWidget::mousePressEvent(QMouseEvent *pEvent) +{ + ZincWidget::mousePressEvent(pEvent); + mouse_fix_click = true; +} + +//============================================================================== + +void MappingViewZincWidget::mouseReleaseEvent(QMouseEvent *pEvent) +{ + ZincWidget::mouseReleaseEvent(pEvent); + + if (mouse_fix_click) { + //TODO + } +} + +//============================================================================== + +void MappingViewZincWidget::wheelEvent(QWheelEvent *pEvent) +{ + ZincWidget::wheelEvent(pEvent); +} + + +//============================================================================== + +} // namespace ZincWidget +} // namespace OpenCOR + +//============================================================================== +// End of file +//============================================================================== diff --git a/src/plugins/editing/MappingView/src/mappingviewzincwidget.h b/src/plugins/editing/MappingView/src/mappingviewzincwidget.h new file mode 100644 index 0000000000..15596fcc51 --- /dev/null +++ b/src/plugins/editing/MappingView/src/mappingviewzincwidget.h @@ -0,0 +1,79 @@ +/******************************************************************************* + +Copyright (C) The University of Auckland + +OpenCOR is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +OpenCOR is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see . + +*******************************************************************************/ + +//============================================================================== +// Mapping Zinc widget +//============================================================================== + +#pragma once + +//============================================================================== + +#include "zincwidget.h" + +//============================================================================= + +#include "zincbegin.h" + #include "opencmiss/zinc/fieldfiniteelement.hpp" + #include "opencmiss/zinc/timekeeper.hpp" +#include "zincend.h" + +//============================================================================== + +namespace OpenCOR { +namespace MappingView { + +//============================================================================== + +class MappingViewZincWidget : public ZincWidget::ZincWidget +{ + Q_OBJECT + +public: + explicit MappingViewZincWidget(QWidget *pParent); + +protected: + void initializeGL() override; + + void mouseMoveEvent(QMouseEvent *pEvent) override; + void mousePressEvent(QMouseEvent *pEvent) override; + void mouseReleaseEvent(QMouseEvent *pEvent) override; + void wheelEvent(QWheelEvent *pEvent) override; + +private: + //TODO ugly + bool mouse_fix_click; + + double mNodeSize; + + char *mZincSceneViewerDescription; + + OpenCMISS::Zinc::Fieldmodule mFieldModule; + OpenCMISS::Zinc::Context *mZincContext; + +}; + +//============================================================================== + +} // namespace ZincWidget +} // namespace OpenCOR + +//============================================================================== +// End of file +//============================================================================== diff --git a/src/plugins/widget/ZincWidget/src/zincwidget.h b/src/plugins/widget/ZincWidget/src/zincwidget.h index e60bdff991..5b028540b9 100644 --- a/src/plugins/widget/ZincWidget/src/zincwidget.h +++ b/src/plugins/widget/ZincWidget/src/zincwidget.h @@ -122,13 +122,14 @@ class ZINCWIDGET_EXPORT ZincWidget : public QOpenGLWidget, QSize sizeHint() const override; + OpenCMISS::Zinc::Sceneviewer mSceneViewer; + private: bool mGraphicsInitialized = false; int mDevicePixelRatio = -1; OpenCMISS::Zinc::Context *mContext = nullptr; - OpenCMISS::Zinc::Sceneviewer mSceneViewer; OpenCMISS::Zinc::Sceneviewernotifier mSceneViewerNotifier; ZincWidgetSceneViewerCallback mZincWidgetSceneViewerCallback;