void ccPointPairRegistrationDlg::onDelButtonPushed() { QObject* senderButton = sender(); //go through all the buttons and find which one has been pushed! bool alignedPoint = true; int pointIndex = -1; //test 'aligned' buttons first { for (int i=0; i<alignedPointsTableWidget->rowCount(); ++i) { if (alignedPointsTableWidget->cellWidget(i,DEL_BUTTON_COL_INDEX) == senderButton) { pointIndex = i; break; } } } if (pointIndex < 0) { //test reference points if necessary alignedPoint = false; for (int i=0; i<refPointsTableWidget->rowCount(); ++i) { if (refPointsTableWidget->cellWidget(i,DEL_BUTTON_COL_INDEX) == senderButton) { pointIndex = i; break; } } } if (pointIndex < 0) { assert(false); return; } if (alignedPoint) removeAlignedPoint(pointIndex); else removeRefPoint(pointIndex); }
void ccPointPairRegistrationDlg::removeRefPoint(int index, bool autoRemoveDualPoint/*=false*/) { if (index >= static_cast<int>(m_refPoints.size())) { ccLog::Error("[ccPointPairRegistrationDlg::removeRefPoint] Invalid index!"); assert(false); return; } int pointCount = static_cast<int>(m_refPoints.size()); //remove all labels above this index assert(m_refPoints.getChildrenNumber() == pointCount); { for (int i=pointCount-1; i>=index; --i) //downward for more efficiency { assert(m_refPoints.getChild(i) && m_refPoints.getChild(i)->isA(CC_TYPES::LABEL_2D)); m_refPoints.removeChild(i); } } //remove array row refPointsTableWidget->removeRow(index); //shift points & rename labels for (int i=index+1; i<pointCount; ++i) { *const_cast<CCVector3*>(m_refPoints.getPoint(i-1)) = *m_refPoints.getPoint(i); //new name QString pointName = QString("R%1").arg(i-1); //create new label cc2DLabel* label = CreateLabel(&m_refPoints,static_cast<unsigned>(i-1),pointName,m_associatedWin); m_refPoints.addChild(label); //update array refPointsTableWidget->setVerticalHeaderItem(i-1,new QTableWidgetItem(pointName)); } m_refPoints.invalidateBoundingBox(); pointCount--; assert(pointCount >= 0); m_refPoints.resize(static_cast<unsigned>(pointCount)); if (m_refPoints.size() == 0) { //reset global shift (if any) m_refPoints.setGlobalShift(0,0,0); m_refPoints.setGlobalScale(1.0); } if (m_associatedWin) { m_associatedWin->redraw(); } onPointCountChanged(); //auto-remove the other point? if ( autoRemoveDualPoint && index < static_cast<int>(m_alignedPoints.size()) && QMessageBox::question(0,"Remove dual point","Remove the equivalent aligned point as well?",QMessageBox::Yes,QMessageBox::No) == QMessageBox::Yes ) { removeAlignedPoint(index,false); } }
void ccPointPairRegistrationDlg::removeRefPoint(int index, bool autoRemoveDualPoint/*=false*/) { if (index >= static_cast<int>(m_refPoints.size())) { ccLog::Error("[ccPointPairRegistrationDlg::removeRefPoint] Invalid index!"); assert(false); return; } int pointCount = static_cast<int>(m_refPoints.size()); //remove the label (or sphere) m_refPoints.removeChild(index); //remove array row refPointsTableWidget->removeRow(index); //shift points & rename labels for (int i = index + 1; i < pointCount; ++i) { *const_cast<CCVector3*>(m_refPoints.getPoint(i - 1)) = *m_refPoints.getPoint(i); //new name QString pointName = QString("R%1").arg(i - 1); //update the label (if any) ccHObject* child = m_refPoints.getChild(i - 1); if (child) { if (child->isKindOf(CC_TYPES::LABEL_2D)) { cc2DLabel* label = static_cast<cc2DLabel*>(child); label->clear(); CreateLabel(label, &m_refPoints, static_cast<unsigned>(i - 1), pointName, m_associatedWin); } else //probably a sphere { child->setName(pointName); } } //update array refPointsTableWidget->setVerticalHeaderItem(i - 1, new QTableWidgetItem(pointName)); } m_refPoints.invalidateBoundingBox(); pointCount--; assert(pointCount >= 0); m_refPoints.resize(static_cast<unsigned>(pointCount)); if (m_refPoints.size() == 0) { //reset global shift (if any) m_refPoints.setGlobalShift(0, 0, 0); m_refPoints.setGlobalScale(1.0); } if (m_associatedWin) { m_associatedWin->redraw(); } onPointCountChanged(); //auto-remove the other point? if ( autoRemoveDualPoint && index < static_cast<int>(m_alignedPoints.size()) && QMessageBox::question(0, "Remove dual point", "Remove the equivalent aligned point as well?", QMessageBox::Yes, QMessageBox::No) == QMessageBox::Yes) { removeAlignedPoint(index,false); } }