From 1a2d6981b0faa0747acb9181beedacd6a35b40b3 Mon Sep 17 00:00:00 2001 From: shun-iwasawa Date: Jan 08 2020 05:25:54 +0000 Subject: fix crash on reordering nodes --- diff --git a/toonz/sources/toonzqt/stageschematicscene.cpp b/toonz/sources/toonzqt/stageschematicscene.cpp index 8718f81..8b9c71a 100644 --- a/toonz/sources/toonzqt/stageschematicscene.cpp +++ b/toonz/sources/toonzqt/stageschematicscene.cpp @@ -480,7 +480,7 @@ void StageSchematicScene::updateEditedGroups( const QMap> &editedGroup) { QMap>::const_iterator it; for (it = editedGroup.begin(); it != editedGroup.end(); it++) { - int zValue = 2; + int zValue = 2; QMap>::const_iterator it2 = editedGroup.begin(); while (it2 != editedGroup.end()) { StageSchematicNode *placedObj = @@ -628,7 +628,7 @@ StageSchematicSplineNode *StageSchematicScene::addSchematicSplineNode( //------------------------------------------------------------------ /*! create node according to the type of StageObject -*/ + */ StageSchematicNode *StageSchematicScene::createStageSchematicNode( StageSchematicScene *scene, TStageObject *pegbar) { TStageObjectId id = pegbar->getId(); @@ -733,7 +733,9 @@ void StageSchematicScene::findRoots(std::vector &roots) { for (i = 0; i < pegTree->getStageObjectCount(); i++) { TStageObject *pegbar = pegTree->getStageObject(i); // only cameras and pegbars can be roots - if (pegbar->getId().isCamera() || pegbar->getId().isTable()) { + // check if the id is contained in the table in case the object is grouped + if ((pegbar->getId().isCamera() || pegbar->getId().isTable()) && + m_nodeTable.contains(pegbar->getId())) { StageSchematicNode *node = m_nodeTable[pegbar->getId()]; TreeStageNode *treeNode = new TreeStageNode(node); roots.push_back(treeNode); @@ -794,7 +796,7 @@ void StageSchematicScene::placeChildren(TreeStageNode *treeNode, double &xPos, //------------------------------------------------------------------ /*! define the position of nodes which is not specified manually -*/ + */ void StageSchematicScene::placeNode(StageSchematicNode *node) { double xFirstPos = m_firstPos.x - 500; double yFirstPos = m_firstPos.y + 500;