Fix bone removing

master
Jeremy HU 2022-12-11 00:51:17 +11:00
parent 6b4192161e
commit d23113e204
4 changed files with 19 additions and 2 deletions

View File

@ -65,6 +65,7 @@ BoneManageWidget::BoneManageWidget(Document* document, QWidget* parent)
connect(m_propertyButton, &QPushButton::clicked, this, &BoneManageWidget::showSelectedBoneProperties); connect(m_propertyButton, &QPushButton::clicked, this, &BoneManageWidget::showSelectedBoneProperties);
connect(this, &BoneManageWidget::groupOperationAdded, m_document, &Document::saveSnapshot); connect(this, &BoneManageWidget::groupOperationAdded, m_document, &Document::saveSnapshot);
connect(this, &BoneManageWidget::removeBone, m_document, &Document::removeBone);
connect(this, &BoneManageWidget::customContextMenuRequested, this, &BoneManageWidget::showContextMenu); connect(this, &BoneManageWidget::customContextMenuRequested, this, &BoneManageWidget::showContextMenu);
@ -130,6 +131,14 @@ void BoneManageWidget::updateToolButtons()
m_propertyButton->setEnabled(enablePropertyButton); m_propertyButton->setEnabled(enablePropertyButton);
} }
void BoneManageWidget::removeSelectedBones()
{
auto selectedBoneIds = m_bonePreviewGridWidget->getSelectedBoneIds();
for (const auto& boneId : selectedBoneIds)
emit removeBone(boneId);
emit groupOperationAdded();
}
void BoneManageWidget::showContextMenu(const QPoint& pos) void BoneManageWidget::showContextMenu(const QPoint& pos)
{ {
auto selectedBoneIds = m_bonePreviewGridWidget->getSelectedBoneIds(); auto selectedBoneIds = m_bonePreviewGridWidget->getSelectedBoneIds();
@ -138,5 +147,9 @@ void BoneManageWidget::showContextMenu(const QPoint& pos)
QMenu contextMenu(this); QMenu contextMenu(this);
QAction deleteAction(tr("Delete"), this);
connect(&deleteAction, &QAction::triggered, this, &BoneManageWidget::removeSelectedBones);
contextMenu.addAction(&deleteAction);
contextMenu.exec(mapToGlobal(pos)); contextMenu.exec(mapToGlobal(pos));
} }

View File

@ -16,12 +16,16 @@ class BoneManageWidget : public QWidget {
signals: signals:
void unselectAllOnCanvas(); void unselectAllOnCanvas();
void selectNodeOnCanvas(const dust3d::Uuid& nodeId); void selectNodeOnCanvas(const dust3d::Uuid& nodeId);
void removeBone(const dust3d::Uuid& boneId);
void groupOperationAdded(); void groupOperationAdded();
public slots: public slots:
void selectBoneByBoneId(const dust3d::Uuid& boneId); void selectBoneByBoneId(const dust3d::Uuid& boneId);
void showSelectedBoneProperties(); void showSelectedBoneProperties();
void showContextMenu(const QPoint& pos); void showContextMenu(const QPoint& pos);
private slots:
void removeSelectedBones();
public: public:
BoneManageWidget(Document* document, QWidget* parent = nullptr); BoneManageWidget(Document* document, QWidget* parent = nullptr);

View File

@ -165,7 +165,7 @@ void BonePropertyWidget::updateBoneJointComboBox()
m_parentJointComboBox->clear(); m_parentJointComboBox->clear();
for (size_t i = 0; i < parentBone->joints.size(); ++i) { for (size_t i = 0; i < parentBone->joints.size(); ++i) {
m_parentJointComboBox->addItem(QString::number(i + 1)); m_parentJointComboBox->addItem(QString::number(i + 1));
if (i == m_bone->attachBoneJointIndex) if (i == (size_t)m_bone->attachBoneJointIndex)
m_parentJointComboBox->setCurrentIndex(m_parentJointComboBox->count() - 1); m_parentJointComboBox->setCurrentIndex(m_parentJointComboBox->count() - 1);
} }
m_parentJointComboBox->setVisible(true); m_parentJointComboBox->setVisible(true);

View File

@ -2966,7 +2966,7 @@ void Document::applyBoneJoints(const dust3d::Uuid& boneId, const std::vector<dus
void Document::removeBone(const dust3d::Uuid& boneId) void Document::removeBone(const dust3d::Uuid& boneId)
{ {
if (boneMap.end() != boneMap.find(boneId)) if (boneMap.end() == boneMap.find(boneId))
return; return;
for (auto& it : nodeMap) for (auto& it : nodeMap)