void collapseBranch(){ for (int i=0; i<lower_level.size(); i++){ lower_level[i]->resetHigherLevel(); collapseBranch(); } delete this; }
void Octree::finalize(Evaluator* e, uint32_t flags) { // Find this Octree's level level = (type == BRANCH) ? std::accumulate(children.begin(), children.end(), (unsigned)0, [](const unsigned& a, const std::unique_ptr<Octree>& b) { return std::max(a, b->level);} ) + 1 : 0; if (type == BRANCH) { // Grab corner values from children for (uint8_t i=0; i < 8; ++i) { corners[i] = children[i]->corners[i]; } // Collapse branches if the COLLAPSE flag is set if (flags & COLLAPSE) { collapseBranch(e); } } else { // Always convert leafs to empty / filled cells collapseLeaf(); } if (type == LEAF && std::isnan(vert.x)) { findVertex(e); } }
ccDBRoot::ccDBRoot(ccCustomQTreeView* dbTreeWidget, QTreeView* propertiesTreeWidget, QObject* parent) : QAbstractItemModel(parent) { m_treeRoot = new ccHObject("DB Tree"); //DB Tree assert(dbTreeWidget); m_dbTreeWidget = dbTreeWidget; m_dbTreeWidget->setModel(this); m_dbTreeWidget->header()->hide(); //drag & drop support m_dbTreeWidget->setDragEnabled(true); m_dbTreeWidget->setAcceptDrops(true); //m_dbTreeWidget->viewport()->setAcceptDrops(true); m_dbTreeWidget->setDropIndicatorShown(true); m_dbTreeWidget->setDragDropMode(QAbstractItemView::InternalMove); setSupportedDragActions(Qt::MoveAction); /*//already done in ui file! m_dbTreeWidget->setEditTriggers(QAbstractItemView::EditKeyPressed); m_dbTreeWidget->setDragDropMode(QAbstractItemView::InternalMove); m_dbTreeWidget->setSelectionMode(QAbstractItemView::ExtendedSelection); m_dbTreeWidget->setUniformRowHeights(true); //*/ //context menu on DB tree elements m_dbTreeWidget->setContextMenuPolicy(Qt::CustomContextMenu); m_expandBranch = new QAction("Expand branch",this); m_collapseBranch = new QAction("Collapse branch",this); m_gatherInformation = new QAction("Information (recursive)",this); m_sortSiblingsType = new QAction("Sort siblings by type",this); m_sortSiblingsAZ = new QAction("Sort siblings by name (A-Z)",this); m_sortSiblingsZA = new QAction("Sort siblings by name (Z-A)",this); m_deleteSelectedEntities = new QAction("Delete",this); m_toggleSelectedEntities = new QAction("Toggle",this); m_toggleSelectedEntitiesVisibility = new QAction("Toggle visibility",this); m_toggleSelectedEntitiesColor = new QAction("Toggle color",this); m_toggleSelectedEntitiesNormals = new QAction("Toggle normals",this); m_toggleSelectedEntitiesMat = new QAction("Toggle materials/textures",this); m_toggleSelectedEntitiesSF = new QAction("Toggle SF",this); m_toggleSelectedEntities3DName = new QAction("Toggle 3D name",this); m_addEmptyGroup = new QAction("Add empty group",this); m_alignCameraWithEntity = new QAction("Align camera",this); m_alignCameraWithEntityReverse = new QAction("Align camera (reverse)",this); m_contextMenuPos = QPoint(-1,-1); //connect custom context menu actions connect(m_dbTreeWidget, SIGNAL(customContextMenuRequested(const QPoint&)), this, SLOT(showContextMenu(const QPoint&))); connect(m_expandBranch, SIGNAL(triggered()), this, SLOT(expandBranch())); connect(m_collapseBranch, SIGNAL(triggered()), this, SLOT(collapseBranch())); connect(m_gatherInformation, SIGNAL(triggered()), this, SLOT(gatherRecursiveInformation())); connect(m_sortSiblingsAZ, SIGNAL(triggered()), this, SLOT(sortSiblingsAZ())); connect(m_sortSiblingsZA, SIGNAL(triggered()), this, SLOT(sortSiblingsZA())); connect(m_sortSiblingsType, SIGNAL(triggered()), this, SLOT(sortSiblingsType())); connect(m_deleteSelectedEntities, SIGNAL(triggered()), this, SLOT(deleteSelectedEntities())); connect(m_toggleSelectedEntities, SIGNAL(triggered()), this, SLOT(toggleSelectedEntities())); connect(m_toggleSelectedEntitiesVisibility, SIGNAL(triggered()), this, SLOT(toggleSelectedEntitiesVisibility())); connect(m_toggleSelectedEntitiesColor, SIGNAL(triggered()), this, SLOT(toggleSelectedEntitiesColor())); connect(m_toggleSelectedEntitiesNormals, SIGNAL(triggered()), this, SLOT(toggleSelectedEntitiesNormals())); connect(m_toggleSelectedEntitiesMat, SIGNAL(triggered()), this, SLOT(toggleSelectedEntitiesMat())); connect(m_toggleSelectedEntitiesSF, SIGNAL(triggered()), this, SLOT(toggleSelectedEntitiesSF())); connect(m_toggleSelectedEntities3DName, SIGNAL(triggered()), this, SLOT(toggleSelectedEntities3DName())); connect(m_addEmptyGroup, SIGNAL(triggered()), this, SLOT(addEmptyGroup())); connect(m_alignCameraWithEntity, SIGNAL(triggered()), this, SLOT(alignCameraWithEntityDirect())); connect(m_alignCameraWithEntityReverse, SIGNAL(triggered()), this, SLOT(alignCameraWithEntityIndirect())); //other DB tree signals/slots connection connect(m_dbTreeWidget->selectionModel(), SIGNAL(selectionChanged(const QItemSelection&, const QItemSelection&)), this, SLOT(changeSelection(const QItemSelection&, const QItemSelection&))); //Properties Tree assert(propertiesTreeWidget); m_propertiesTreeWidget = propertiesTreeWidget; m_propertiesModel = new QStandardItemModel(0, 2, parent); /*//already done in ui file! m_propertiesTreeWidget->header()->hide(); m_propertiesTreeWidget->setSelectionMode(QAbstractItemView::NoSelection); m_propertiesTreeWidget->setAllColumnsShowFocus(true); //*/ m_ccPropDelegate = new ccPropertiesTreeDelegate(m_propertiesModel, m_propertiesTreeWidget); m_propertiesTreeWidget->setItemDelegate(m_ccPropDelegate); m_propertiesTreeWidget->setModel(m_propertiesModel); m_propertiesTreeWidget->header()->setResizeMode(QHeaderView::Interactive); m_propertiesTreeWidget->header()->setStretchLastSection(true); m_propertiesTreeWidget->setEnabled(false); //Properties tree signals/slots connection connect(m_ccPropDelegate, SIGNAL(ccObjectPropertiesChanged(ccHObject*)), this, SLOT(updateCCObject(ccHObject*))); connect(m_ccPropDelegate, SIGNAL(ccObjectAppearanceChanged(ccHObject*)), this, SLOT(redrawCCObject(ccHObject*))); connect(m_ccPropDelegate, SIGNAL(ccObjectAndChildrenAppearanceChanged(ccHObject*)), this, SLOT(redrawCCObjectAndChildren(ccHObject*))); }