Select component by part: shortcut F
parent
5f75a6d7d8
commit
12197bdb44
|
@ -27,7 +27,6 @@ ComponentListModel::ComponentListModel(const Document *document, QObject *parent
|
||||||
|
|
||||||
void ComponentListModel::reload()
|
void ComponentListModel::reload()
|
||||||
{
|
{
|
||||||
std::pair<QModelIndex, QModelIndex> beginEnd;
|
|
||||||
beginResetModel();
|
beginResetModel();
|
||||||
m_componentIdToIndexMap.clear();
|
m_componentIdToIndexMap.clear();
|
||||||
const SkeletonComponent *listingComponent = m_document->findComponent(m_listingComponentId);
|
const SkeletonComponent *listingComponent = m_document->findComponent(m_listingComponentId);
|
||||||
|
@ -35,17 +34,19 @@ void ComponentListModel::reload()
|
||||||
for (int i = 0; i < (int)listingComponent->childrenIds.size(); ++i) {
|
for (int i = 0; i < (int)listingComponent->childrenIds.size(); ++i) {
|
||||||
m_componentIdToIndexMap[listingComponent->childrenIds[i]] = createIndex(i, 0);
|
m_componentIdToIndexMap[listingComponent->childrenIds[i]] = createIndex(i, 0);
|
||||||
}
|
}
|
||||||
if (!listingComponent->childrenIds.empty()) {
|
|
||||||
beginEnd.first = m_componentIdToIndexMap[listingComponent->childrenIds.front()];
|
|
||||||
beginEnd.second = m_componentIdToIndexMap[listingComponent->childrenIds.back()];
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
endResetModel();
|
endResetModel();
|
||||||
if (!m_componentIdToIndexMap.empty())
|
|
||||||
emit dataChanged(beginEnd.first, beginEnd.second);
|
|
||||||
emit layoutChanged();
|
emit layoutChanged();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
QModelIndex ComponentListModel::componentIdToIndex(const dust3d::Uuid &componentId) const
|
||||||
|
{
|
||||||
|
auto findIndex = m_componentIdToIndexMap.find(componentId);
|
||||||
|
if (findIndex == m_componentIdToIndexMap.end())
|
||||||
|
return QModelIndex();
|
||||||
|
return findIndex->second;
|
||||||
|
}
|
||||||
|
|
||||||
int ComponentListModel::rowCount(const QModelIndex &parent) const
|
int ComponentListModel::rowCount(const QModelIndex &parent) const
|
||||||
{
|
{
|
||||||
if (parent.isValid())
|
if (parent.isValid())
|
||||||
|
|
|
@ -19,6 +19,7 @@ public:
|
||||||
int columnCount(const QModelIndex &parent = QModelIndex()) const;
|
int columnCount(const QModelIndex &parent = QModelIndex()) const;
|
||||||
QVariant data(const QModelIndex &index, int role) const;
|
QVariant data(const QModelIndex &index, int role) const;
|
||||||
const SkeletonComponent *modelIndexToComponent(const QModelIndex &index) const;
|
const SkeletonComponent *modelIndexToComponent(const QModelIndex &index) const;
|
||||||
|
QModelIndex componentIdToIndex(const dust3d::Uuid &componentId) const;
|
||||||
const dust3d::Uuid modelIndexToComponentId(const QModelIndex &index) const;
|
const dust3d::Uuid modelIndexToComponentId(const QModelIndex &index) const;
|
||||||
const dust3d::Uuid listingComponentId() const;
|
const dust3d::Uuid listingComponentId() const;
|
||||||
public slots:
|
public slots:
|
||||||
|
|
|
@ -633,6 +633,8 @@ DocumentWindow::DocumentWindow()
|
||||||
connect(m_partManageWidget, &PartManageWidget::unselectAllOnCanvas, canvasGraphicsWidget, &SkeletonGraphicsWidget::unselectAll);
|
connect(m_partManageWidget, &PartManageWidget::unselectAllOnCanvas, canvasGraphicsWidget, &SkeletonGraphicsWidget::unselectAll);
|
||||||
connect(m_partManageWidget, &PartManageWidget::selectPartOnCanvas, canvasGraphicsWidget, &SkeletonGraphicsWidget::addPartToSelection);
|
connect(m_partManageWidget, &PartManageWidget::selectPartOnCanvas, canvasGraphicsWidget, &SkeletonGraphicsWidget::addPartToSelection);
|
||||||
|
|
||||||
|
connect(canvasGraphicsWidget, &SkeletonGraphicsWidget::partComponentChecked, m_partManageWidget, &PartManageWidget::selectComponentByPartId);
|
||||||
|
|
||||||
connect(m_document, &Document::skeletonChanged, m_document, &Document::generateMesh);
|
connect(m_document, &Document::skeletonChanged, m_document, &Document::generateMesh);
|
||||||
connect(m_document, &Document::textureChanged, m_document, &Document::generateTexture);
|
connect(m_document, &Document::textureChanged, m_document, &Document::generateTexture);
|
||||||
connect(m_document, &Document::resultMeshChanged, m_document, &Document::postProcess);
|
connect(m_document, &Document::resultMeshChanged, m_document, &Document::postProcess);
|
||||||
|
|
|
@ -117,6 +117,29 @@ PartManageWidget::PartManageWidget(Document *document, QWidget *parent):
|
||||||
updateLevelUpButton();
|
updateLevelUpButton();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void PartManageWidget::selectComponentByPartId(const dust3d::Uuid &partId)
|
||||||
|
{
|
||||||
|
const auto &part = m_document->findPart(partId);
|
||||||
|
if (nullptr == part)
|
||||||
|
return;
|
||||||
|
auto componentId = part->componentId;
|
||||||
|
QModelIndex index = m_componentPreviewGridWidget->componentListModel()->componentIdToIndex(componentId);
|
||||||
|
if (index.isValid()) {
|
||||||
|
m_componentPreviewGridWidget->selectionModel()->select(index, QItemSelectionModel::ClearAndSelect);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
const auto &component = m_document->findComponent(componentId);
|
||||||
|
if (nullptr == component)
|
||||||
|
return;
|
||||||
|
m_componentPreviewGridWidget->componentListModel()->setListingComponentId(component->parentId);
|
||||||
|
index = m_componentPreviewGridWidget->componentListModel()->componentIdToIndex(componentId);
|
||||||
|
if (index.isValid()) {
|
||||||
|
m_componentPreviewGridWidget->selectionModel()->select(index, QItemSelectionModel::ClearAndSelect);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
dust3dDebug << "Unable to select component:" << componentId.toString();
|
||||||
|
}
|
||||||
|
|
||||||
void PartManageWidget::updateLevelUpButton()
|
void PartManageWidget::updateLevelUpButton()
|
||||||
{
|
{
|
||||||
const auto &parent = m_document->findComponentParent(m_componentPreviewGridWidget->componentListModel()->listingComponentId());
|
const auto &parent = m_document->findComponentParent(m_componentPreviewGridWidget->componentListModel()->listingComponentId());
|
||||||
|
|
|
@ -14,6 +14,8 @@ class PartManageWidget : public QWidget
|
||||||
signals:
|
signals:
|
||||||
void unselectAllOnCanvas();
|
void unselectAllOnCanvas();
|
||||||
void selectPartOnCanvas(const dust3d::Uuid &partId);
|
void selectPartOnCanvas(const dust3d::Uuid &partId);
|
||||||
|
public slots:
|
||||||
|
void selectComponentByPartId(const dust3d::Uuid &partId);
|
||||||
public:
|
public:
|
||||||
PartManageWidget(Document *document, QWidget *parent=nullptr);
|
PartManageWidget(Document *document, QWidget *parent=nullptr);
|
||||||
private:
|
private:
|
||||||
|
|
|
@ -480,6 +480,8 @@ std::unique_ptr<MeshCombiner::Mesh> MeshGenerator::combineStitchingMesh(const st
|
||||||
auto stitchMeshBuilder = std::make_unique<StitchMeshBuilder>(std::move(splines));
|
auto stitchMeshBuilder = std::make_unique<StitchMeshBuilder>(std::move(splines));
|
||||||
stitchMeshBuilder->build();
|
stitchMeshBuilder->build();
|
||||||
|
|
||||||
|
// stitchMeshBuilder->splines();
|
||||||
|
|
||||||
collectSharedQuadEdges(stitchMeshBuilder->generatedVertices(),
|
collectSharedQuadEdges(stitchMeshBuilder->generatedVertices(),
|
||||||
stitchMeshBuilder->generatedFaces(),
|
stitchMeshBuilder->generatedFaces(),
|
||||||
&componentCache.sharedQuadEdges);
|
&componentCache.sharedQuadEdges);
|
||||||
|
|
|
@ -32,12 +32,12 @@ StitchMeshBuilder::StitchMeshBuilder(std::vector<Spline> &&splines)
|
||||||
m_splines = std::move(splines);
|
m_splines = std::move(splines);
|
||||||
}
|
}
|
||||||
|
|
||||||
const std::vector<Vector3> &StitchMeshBuilder::generatedVertices()
|
const std::vector<Vector3> &StitchMeshBuilder::generatedVertices() const
|
||||||
{
|
{
|
||||||
return m_generatedVertices;
|
return m_generatedVertices;
|
||||||
}
|
}
|
||||||
|
|
||||||
const std::vector<std::vector<size_t>> &StitchMeshBuilder::generatedFaces()
|
const std::vector<std::vector<size_t>> &StitchMeshBuilder::generatedFaces() const
|
||||||
{
|
{
|
||||||
return m_generatedFaces;
|
return m_generatedFaces;
|
||||||
}
|
}
|
||||||
|
@ -225,6 +225,11 @@ void StitchMeshBuilder::addQuadButMaybeTriangle(const std::vector<size_t> &quadB
|
||||||
m_generatedFaces.emplace_back(finalFace);
|
m_generatedFaces.emplace_back(finalFace);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const std::vector<StitchMeshBuilder::Spline> &StitchMeshBuilder::splines() const
|
||||||
|
{
|
||||||
|
return m_splines;
|
||||||
|
}
|
||||||
|
|
||||||
void StitchMeshBuilder::build()
|
void StitchMeshBuilder::build()
|
||||||
{
|
{
|
||||||
if (m_splines.empty())
|
if (m_splines.empty())
|
||||||
|
|
|
@ -46,8 +46,9 @@ public:
|
||||||
|
|
||||||
StitchMeshBuilder(std::vector<Spline> &&splines);
|
StitchMeshBuilder(std::vector<Spline> &&splines);
|
||||||
void build();
|
void build();
|
||||||
const std::vector<Vector3> &generatedVertices();
|
const std::vector<Vector3> &generatedVertices() const;
|
||||||
const std::vector<std::vector<size_t>> &generatedFaces();
|
const std::vector<std::vector<size_t>> &generatedFaces() const;
|
||||||
|
const std::vector<Spline> &splines() const;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
struct StitchingPoint
|
struct StitchingPoint
|
||||||
|
|
Loading…
Reference in New Issue