diff --git a/src/fgt/edit_texture/images/invertsel.png b/src/fgt/edit_texture/images/invertsel.png new file mode 100644 index 000000000..60fc624d7 Binary files /dev/null and b/src/fgt/edit_texture/images/invertsel.png differ diff --git a/src/fgt/edit_texture/meshlab.qrc b/src/fgt/edit_texture/meshlab.qrc index cf6ba9187..7f4d0ecdb 100644 --- a/src/fgt/edit_texture/meshlab.qrc +++ b/src/fgt/edit_texture/meshlab.qrc @@ -1,6 +1,7 @@ images/edit_texture.png + images/invertsel.png images/rotate.png images/scale.png images/sel_move.png diff --git a/src/fgt/edit_texture/renderarea.cpp b/src/fgt/edit_texture/renderarea.cpp index d9c491db4..c2f32b7d0 100644 --- a/src/fgt/edit_texture/renderarea.cpp +++ b/src/fgt/edit_texture/renderarea.cpp @@ -951,6 +951,34 @@ void RenderArea::ClearSelection() selection = QRect(); } +void RenderArea::InvertSelection() +{ + // Invert selected faces + if (selected) + { + for (unsigned i = 0; i < model->cm.face.size(); i++) + { + if (model->cm.face[i].WT(0).n() == textNum) + { + if (model->cm.face[i].IsUserBit(selBit)) model->cm.face[i].ClearUserBit(selBit); + else model->cm.face[i].SetUserBit(selBit); + } + } + RecalculateSelectionArea(); + this->update(); + } + else if (selectedV) + { + for (unsigned i = 0; i < model->cm.vert.size(); i++) + { + if (model->cm.vert[i].IsUserBit(selVertBit)) model->cm.vert[i].ClearUserBit(selVertBit); + else model->cm.vert[i].SetUserBit(selVertBit); + } + UpdateVertexSelection(); + this->update(); + } +} + void RenderArea::HandleScale(QPoint e) { // Move the rectangle of scaling and resize the selction area @@ -1133,7 +1161,7 @@ void RenderArea::DrawCircle(QPoint origin) for (int i = 0; i < 360; i++) { float degInRad = i*DEG2RAD; - glVertex3f(origin.x() + cos(degInRad)*r,origin.y() + sin(degInRad)*r,1.1f); + glVertex3f(origin.x() + cos(degInRad)*r,origin.y() + sin(degInRad)*r,2.0f); } glEnd(); } diff --git a/src/fgt/edit_texture/renderarea.h b/src/fgt/edit_texture/renderarea.h index 22840a2c3..5081ba26d 100644 --- a/src/fgt/edit_texture/renderarea.h +++ b/src/fgt/edit_texture/renderarea.h @@ -40,6 +40,7 @@ public: void RemapClamp(); void RemapMod(); void ClearSelection(); + void InvertSelection(); protected: void paintEvent(QPaintEvent *event); diff --git a/src/fgt/edit_texture/textureeditor.cpp b/src/fgt/edit_texture/textureeditor.cpp index 7fef78516..f44ebe012 100644 --- a/src/fgt/edit_texture/textureeditor.cpp +++ b/src/fgt/edit_texture/textureeditor.cpp @@ -133,6 +133,11 @@ void TextureEditor::on_modulusButton_clicked() ((RenderArea*)ui.tabWidget->currentWidget()->childAt(MARGIN,MARGIN))->RemapMod(); } +void TextureEditor::on_invertButton_clicked() +{ + ((RenderArea*)ui.tabWidget->currentWidget()->childAt(MARGIN,MARGIN))->InvertSelection(); +} + void TextureEditor::on_cancelButton_clicked() { ResetLayout(); diff --git a/src/fgt/edit_texture/textureeditor.h b/src/fgt/edit_texture/textureeditor.h index bd5a8025f..e79e8049e 100644 --- a/src/fgt/edit_texture/textureeditor.h +++ b/src/fgt/edit_texture/textureeditor.h @@ -46,6 +46,7 @@ private slots: void on_modulusButton_clicked(); void on_smoothButton_clicked(); void on_cancelButton_clicked(); + void on_invertButton_clicked(); public slots: void UpdateModel(); diff --git a/src/fgt/edit_texture/textureeditor.ui b/src/fgt/edit_texture/textureeditor.ui index 6627fd698..5ad8d6733 100644 --- a/src/fgt/edit_texture/textureeditor.ui +++ b/src/fgt/edit_texture/textureeditor.ui @@ -218,6 +218,49 @@ + + + + + 0 + 0 + 0 + 0 + + + + Invert selected faces/vertexes + + + + + + :/images/invertsel.png + + + + 32 + 32 + + + + false + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + +