From 5fb2e1a8774901ccc78ce954d3d0ac6a784b18c7 Mon Sep 17 00:00:00 2001 From: Marc Zinnschlag Date: Mon, 30 Jun 2014 17:33:03 +0200 Subject: [PATCH] do not render deleted exterior cells in scene view --- .../opencs/view/render/pagedworldspacewidget.cpp | 16 ++++++++++++---- .../opencs/view/render/pagedworldspacewidget.hpp | 1 + 2 files changed, 13 insertions(+), 4 deletions(-) diff --git a/apps/opencs/view/render/pagedworldspacewidget.cpp b/apps/opencs/view/render/pagedworldspacewidget.cpp index 20cd6abb5..ca47621c6 100644 --- a/apps/opencs/view/render/pagedworldspacewidget.cpp +++ b/apps/opencs/view/render/pagedworldspacewidget.cpp @@ -15,13 +15,18 @@ bool CSVRender::PagedWorldspaceWidget::adjustCells() bool modified = false; bool setCamera = false; + const CSMWorld::IdCollection& cells = mDocument.getData().getCells(); + { // remove std::map::iterator iter (mCells.begin()); while (iter!=mCells.end()) { - if (!mSelection.has (iter->first)) + int index = cells.searchId (iter->first.getId (mWorldspace)); + + if (!mSelection.has (iter->first) || index==-1 || + cells.getRecord (index).mState==CSMWorld::RecordBase::State_Deleted) { delete iter->second; mCells.erase (iter++); @@ -39,7 +44,10 @@ bool CSVRender::PagedWorldspaceWidget::adjustCells() for (CSMWorld::CellSelection::Iterator iter (mSelection.begin()); iter!=mSelection.end(); ++iter) { - if (mCells.find (*iter)==mCells.end()) + int index = cells.searchId (iter->getId (mWorldspace)); + + if (index!=0 && cells.getRecord (index).mState!=CSMWorld::RecordBase::State_Deleted && + mCells.find (*iter)==mCells.end()) { if (setCamera) { @@ -49,7 +57,7 @@ bool CSVRender::PagedWorldspaceWidget::adjustCells() mCells.insert (std::make_pair (*iter, new Cell (mDocument.getData(), getSceneManager(), - iter->getId ("std::default")))); + iter->getId (mWorldspace)))); modified = true; } @@ -124,7 +132,7 @@ void CSVRender::PagedWorldspaceWidget::referenceAdded (const QModelIndex& parent CSVRender::PagedWorldspaceWidget::PagedWorldspaceWidget (QWidget* parent, CSMDoc::Document& document) -: WorldspaceWidget (document, parent), mDocument (document) +: WorldspaceWidget (document, parent), mDocument (document), mWorldspace ("std::default") {} CSVRender::PagedWorldspaceWidget::~PagedWorldspaceWidget() diff --git a/apps/opencs/view/render/pagedworldspacewidget.hpp b/apps/opencs/view/render/pagedworldspacewidget.hpp index 7f9a66f82..bf6d480ca 100644 --- a/apps/opencs/view/render/pagedworldspacewidget.hpp +++ b/apps/opencs/view/render/pagedworldspacewidget.hpp @@ -17,6 +17,7 @@ namespace CSVRender CSMDoc::Document& mDocument; CSMWorld::CellSelection mSelection; std::map mCells; + std::string mWorldspace; private: