+ use quantity boxes in fillet/chamfer dialog
This commit is contained in:
parent
e3aba10762
commit
92c2b18350
|
@ -66,6 +66,7 @@
|
||||||
#include <Gui/Application.h>
|
#include <Gui/Application.h>
|
||||||
#include <Gui/BitmapFactory.h>
|
#include <Gui/BitmapFactory.h>
|
||||||
#include <Gui/Command.h>
|
#include <Gui/Command.h>
|
||||||
|
#include <Gui/QuantitySpinBox.h>
|
||||||
#include <Gui/WaitCursor.h>
|
#include <Gui/WaitCursor.h>
|
||||||
#include <Gui/Selection.h>
|
#include <Gui/Selection.h>
|
||||||
#include <Gui/SelectionFilter.h>
|
#include <Gui/SelectionFilter.h>
|
||||||
|
@ -75,6 +76,8 @@
|
||||||
|
|
||||||
using namespace PartGui;
|
using namespace PartGui;
|
||||||
|
|
||||||
|
Q_DECLARE_METATYPE(Base::Quantity)
|
||||||
|
|
||||||
FilletRadiusDelegate::FilletRadiusDelegate(QObject *parent) : QItemDelegate(parent)
|
FilletRadiusDelegate::FilletRadiusDelegate(QObject *parent) : QItemDelegate(parent)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
@ -85,8 +88,8 @@ QWidget *FilletRadiusDelegate::createEditor(QWidget *parent, const QStyleOptionV
|
||||||
if (index.column() < 1)
|
if (index.column() < 1)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
QDoubleSpinBox *editor = new QDoubleSpinBox(parent);
|
Gui::QuantitySpinBox *editor = new Gui::QuantitySpinBox(parent);
|
||||||
editor->setDecimals(Base::UnitsApi::getDecimals());
|
editor->setUnit(Base::Unit::Length);
|
||||||
editor->setMinimum(0.0);
|
editor->setMinimum(0.0);
|
||||||
editor->setMaximum(INT_MAX);
|
editor->setMaximum(INT_MAX);
|
||||||
editor->setSingleStep(0.1);
|
editor->setSingleStep(0.1);
|
||||||
|
@ -96,22 +99,23 @@ QWidget *FilletRadiusDelegate::createEditor(QWidget *parent, const QStyleOptionV
|
||||||
|
|
||||||
void FilletRadiusDelegate::setEditorData(QWidget *editor, const QModelIndex &index) const
|
void FilletRadiusDelegate::setEditorData(QWidget *editor, const QModelIndex &index) const
|
||||||
{
|
{
|
||||||
double value = index.model()->data(index, Qt::EditRole).toDouble();
|
Base::Quantity value = index.model()->data(index, Qt::EditRole).value<Base::Quantity>();
|
||||||
|
|
||||||
QDoubleSpinBox *spinBox = static_cast<QDoubleSpinBox*>(editor);
|
Gui::QuantitySpinBox *spinBox = static_cast<Gui::QuantitySpinBox*>(editor);
|
||||||
spinBox->setValue(value);
|
spinBox->setValue(value);
|
||||||
}
|
}
|
||||||
|
|
||||||
void FilletRadiusDelegate::setModelData(QWidget *editor, QAbstractItemModel *model,
|
void FilletRadiusDelegate::setModelData(QWidget *editor, QAbstractItemModel *model,
|
||||||
const QModelIndex &index) const
|
const QModelIndex &index) const
|
||||||
{
|
{
|
||||||
QDoubleSpinBox *spinBox = static_cast<QDoubleSpinBox*>(editor);
|
Gui::QuantitySpinBox *spinBox = static_cast<Gui::QuantitySpinBox*>(editor);
|
||||||
spinBox->interpretText();
|
spinBox->interpretText();
|
||||||
//double value = spinBox->value();
|
//double value = spinBox->value();
|
||||||
//QString value = QString::fromLatin1("%1").arg(spinBox->value(),0,'f',2);
|
//QString value = QString::fromLatin1("%1").arg(spinBox->value(),0,'f',2);
|
||||||
QString value = QLocale::system().toString(spinBox->value(),'f',Base::UnitsApi::getDecimals());
|
//QString value = QLocale::system().toString(spinBox->value().getValue(),'f',Base::UnitsApi::getDecimals());
|
||||||
|
Base::Quantity value = spinBox->value();
|
||||||
|
|
||||||
model->setData(index, value, Qt::EditRole);
|
model->setData(index, QVariant::fromValue<Base::Quantity>(value), Qt::EditRole);
|
||||||
}
|
}
|
||||||
|
|
||||||
void FilletRadiusDelegate::updateEditorGeometry(QWidget *editor, const QStyleOptionViewItem &option,
|
void FilletRadiusDelegate::updateEditorGeometry(QWidget *editor, const QStyleOptionViewItem &option,
|
||||||
|
@ -149,6 +153,17 @@ bool FilletRadiusModel::setData (const QModelIndex & index, const QVariant & val
|
||||||
return ok;
|
return ok;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
QVariant FilletRadiusModel::data(const QModelIndex& index, int role) const
|
||||||
|
{
|
||||||
|
QVariant value = QStandardItemModel::data(index, role);
|
||||||
|
if (role == Qt::DisplayRole && index.column() >= 1) {
|
||||||
|
Base::Quantity q = value.value<Base::Quantity>();
|
||||||
|
QString str = q.getUserString();
|
||||||
|
return str;
|
||||||
|
}
|
||||||
|
return value;
|
||||||
|
}
|
||||||
|
|
||||||
// --------------------------------------------------------------
|
// --------------------------------------------------------------
|
||||||
|
|
||||||
namespace PartGui {
|
namespace PartGui {
|
||||||
|
@ -207,8 +222,8 @@ DlgFilletEdges::DlgFilletEdges(FilletType type, Part::FilletBase* fillet, QWidge
|
||||||
ui->setupUi(this);
|
ui->setupUi(this);
|
||||||
ui->filletStartRadius->setMaximum(INT_MAX);
|
ui->filletStartRadius->setMaximum(INT_MAX);
|
||||||
ui->filletEndRadius->setMaximum(INT_MAX);
|
ui->filletEndRadius->setMaximum(INT_MAX);
|
||||||
ui->filletStartRadius->setDecimals(Base::UnitsApi::getDecimals());
|
ui->filletStartRadius->setUnit(Base::Unit::Length);
|
||||||
ui->filletEndRadius->setDecimals(Base::UnitsApi::getDecimals());
|
ui->filletEndRadius->setUnit(Base::Unit::Length);
|
||||||
|
|
||||||
d->object = 0;
|
d->object = 0;
|
||||||
d->selection = new EdgeFaceSelection(d->object);
|
d->selection = new EdgeFaceSelection(d->object);
|
||||||
|
@ -557,8 +572,10 @@ void DlgFilletEdges::setupFillet(const std::vector<App::DocumentObject*>& objs)
|
||||||
if (it != d->edge_ids.end()) {
|
if (it != d->edge_ids.end()) {
|
||||||
int index = it - d->edge_ids.begin();
|
int index = it - d->edge_ids.begin();
|
||||||
model->setData(model->index(index, 0), Qt::Checked, Qt::CheckStateRole);
|
model->setData(model->index(index, 0), Qt::Checked, Qt::CheckStateRole);
|
||||||
model->setData(model->index(index, 1), QVariant(QLocale::system().toString(et->radius1,'f',Base::UnitsApi::getDecimals())));
|
//model->setData(model->index(index, 1), QVariant(QLocale::system().toString(et->radius1,'f',Base::UnitsApi::getDecimals())));
|
||||||
model->setData(model->index(index, 2), QVariant(QLocale::system().toString(et->radius2,'f',Base::UnitsApi::getDecimals())));
|
//model->setData(model->index(index, 2), QVariant(QLocale::system().toString(et->radius2,'f',Base::UnitsApi::getDecimals())));
|
||||||
|
model->setData(model->index(index, 1), QVariant::fromValue<Base::Quantity>(Base::Quantity(et->radius1, Base::Unit::Length)));
|
||||||
|
model->setData(model->index(index, 2), QVariant::fromValue<Base::Quantity>(Base::Quantity(et->radius2, Base::Unit::Length)));
|
||||||
|
|
||||||
startRadius = et->radius1;
|
startRadius = et->radius1;
|
||||||
endRadius = et->radius2;
|
endRadius = et->radius2;
|
||||||
|
@ -675,8 +692,10 @@ void DlgFilletEdges::on_shapeObject_activated(int index)
|
||||||
for (std::vector<int>::iterator it = d->edge_ids.begin(); it != d->edge_ids.end(); ++it) {
|
for (std::vector<int>::iterator it = d->edge_ids.begin(); it != d->edge_ids.end(); ++it) {
|
||||||
model->setData(model->index(index, 0), QVariant(tr("Edge%1").arg(*it)));
|
model->setData(model->index(index, 0), QVariant(tr("Edge%1").arg(*it)));
|
||||||
model->setData(model->index(index, 0), QVariant(*it), Qt::UserRole);
|
model->setData(model->index(index, 0), QVariant(*it), Qt::UserRole);
|
||||||
model->setData(model->index(index, 1), QVariant(QLocale::system().toString(1.0,'f',Base::UnitsApi::getDecimals())));
|
//model->setData(model->index(index, 1), QVariant(QLocale::system().toString(1.0,'f',Base::UnitsApi::getDecimals())));
|
||||||
model->setData(model->index(index, 2), QVariant(QLocale::system().toString(1.0,'f',Base::UnitsApi::getDecimals())));
|
//model->setData(model->index(index, 2), QVariant(QLocale::system().toString(1.0,'f',Base::UnitsApi::getDecimals())));
|
||||||
|
model->setData(model->index(index, 1), QVariant::fromValue<Base::Quantity>(Base::Quantity(1.0,Base::Unit::Length)));
|
||||||
|
model->setData(model->index(index, 2), QVariant::fromValue<Base::Quantity>(Base::Quantity(1.0,Base::Unit::Length)));
|
||||||
std::stringstream element;
|
std::stringstream element;
|
||||||
element << "Edge" << *it;
|
element << "Edge" << *it;
|
||||||
if (Gui::Selection().isSelected(part, element.str().c_str()))
|
if (Gui::Selection().isSelected(part, element.str().c_str()))
|
||||||
|
@ -770,32 +789,30 @@ void DlgFilletEdges::on_filletType_activated(int index)
|
||||||
ui->treeView->resizeColumnToContents(2);
|
ui->treeView->resizeColumnToContents(2);
|
||||||
}
|
}
|
||||||
|
|
||||||
void DlgFilletEdges::on_filletStartRadius_valueChanged(double radius)
|
void DlgFilletEdges::on_filletStartRadius_valueChanged(const Base::Quantity& radius)
|
||||||
{
|
{
|
||||||
QAbstractItemModel* model = ui->treeView->model();
|
QAbstractItemModel* model = ui->treeView->model();
|
||||||
QString text = QLocale::system().toString(radius,'f',Base::UnitsApi::getDecimals());
|
|
||||||
for (int i=0; i<model->rowCount(); ++i) {
|
for (int i=0; i<model->rowCount(); ++i) {
|
||||||
QVariant value = model->index(i,0).data(Qt::CheckStateRole);
|
QVariant value = model->index(i,0).data(Qt::CheckStateRole);
|
||||||
Qt::CheckState checkState = static_cast<Qt::CheckState>(value.toInt());
|
Qt::CheckState checkState = static_cast<Qt::CheckState>(value.toInt());
|
||||||
|
|
||||||
// is item checked
|
// is item checked
|
||||||
if (checkState & Qt::Checked) {
|
if (checkState & Qt::Checked) {
|
||||||
model->setData(model->index(i, 1), QVariant(text));
|
model->setData(model->index(i, 1), QVariant::fromValue<Base::Quantity>(radius));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void DlgFilletEdges::on_filletEndRadius_valueChanged(double radius)
|
void DlgFilletEdges::on_filletEndRadius_valueChanged(const Base::Quantity& radius)
|
||||||
{
|
{
|
||||||
QAbstractItemModel* model = ui->treeView->model();
|
QAbstractItemModel* model = ui->treeView->model();
|
||||||
QString text = QLocale::system().toString(radius,'f',Base::UnitsApi::getDecimals());
|
|
||||||
for (int i=0; i<model->rowCount(); ++i) {
|
for (int i=0; i<model->rowCount(); ++i) {
|
||||||
QVariant value = model->index(i,0).data(Qt::CheckStateRole);
|
QVariant value = model->index(i,0).data(Qt::CheckStateRole);
|
||||||
Qt::CheckState checkState = static_cast<Qt::CheckState>(value.toInt());
|
Qt::CheckState checkState = static_cast<Qt::CheckState>(value.toInt());
|
||||||
|
|
||||||
// is item checked
|
// is item checked
|
||||||
if (checkState & Qt::Checked) {
|
if (checkState & Qt::Checked) {
|
||||||
model->setData(model->index(i, 2), QVariant(text));
|
model->setData(model->index(i, 2), QVariant::fromValue<Base::Quantity>(radius));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -846,13 +863,15 @@ bool DlgFilletEdges::accept()
|
||||||
if (checkState & Qt::Checked) {
|
if (checkState & Qt::Checked) {
|
||||||
// the index value of the edge
|
// the index value of the edge
|
||||||
int id = model->index(i,0).data(Qt::UserRole).toInt();
|
int id = model->index(i,0).data(Qt::UserRole).toInt();
|
||||||
double r1 = model->index(i,1).data().toDouble();
|
Base::Quantity r1 = model->index(i,1).data(Qt::EditRole).value<Base::Quantity>();
|
||||||
double r2 = r1;
|
Base::Quantity r2 = r1;
|
||||||
if (end_radius)
|
if (end_radius)
|
||||||
r2 = model->index(i,2).data().toDouble();
|
r2 = model->index(i,2).data(Qt::EditRole).value<Base::Quantity>();
|
||||||
code += QString::fromLatin1(
|
code += QString::fromLatin1(
|
||||||
"__fillets__.append((%1,%2,%3))\n")
|
"__fillets__.append((%1,%2,%3))\n")
|
||||||
.arg(id).arg(r1,0,'f',Base::UnitsApi::getDecimals()).arg(r2,0,'f',Base::UnitsApi::getDecimals());
|
.arg(id)
|
||||||
|
.arg(r1.getValue(),0,'f',Base::UnitsApi::getDecimals())
|
||||||
|
.arg(r2.getValue(),0,'f',Base::UnitsApi::getDecimals());
|
||||||
todo = true;
|
todo = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -67,6 +67,7 @@ public:
|
||||||
Qt::ItemFlags flags (const QModelIndex & index) const;
|
Qt::ItemFlags flags (const QModelIndex & index) const;
|
||||||
bool setData (const QModelIndex & index, const QVariant & value,
|
bool setData (const QModelIndex & index, const QVariant & value,
|
||||||
int role = Qt::EditRole);
|
int role = Qt::EditRole);
|
||||||
|
QVariant data(const QModelIndex&, int role = Qt::DisplayRole) const;
|
||||||
void updateCheckStates();
|
void updateCheckStates();
|
||||||
|
|
||||||
Q_SIGNALS:
|
Q_SIGNALS:
|
||||||
|
@ -104,8 +105,8 @@ private Q_SLOTS:
|
||||||
void on_selectAllButton_clicked();
|
void on_selectAllButton_clicked();
|
||||||
void on_selectNoneButton_clicked();
|
void on_selectNoneButton_clicked();
|
||||||
void on_filletType_activated(int);
|
void on_filletType_activated(int);
|
||||||
void on_filletStartRadius_valueChanged(double);
|
void on_filletStartRadius_valueChanged(const Base::Quantity&);
|
||||||
void on_filletEndRadius_valueChanged(double);
|
void on_filletEndRadius_valueChanged(const Base::Quantity&);
|
||||||
void toggleCheckState(const QModelIndex&);
|
void toggleCheckState(const QModelIndex&);
|
||||||
void onHighlightEdges();
|
void onHighlightEdges();
|
||||||
|
|
||||||
|
|
|
@ -98,7 +98,10 @@
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
<item>
|
<item>
|
||||||
<widget class="QDoubleSpinBox" name="filletStartRadius">
|
<widget class="Gui::QuantitySpinBox" name="filletStartRadius">
|
||||||
|
<property name="unit" stdset="0">
|
||||||
|
<string notr="true">mm</string>
|
||||||
|
</property>
|
||||||
<property name="singleStep">
|
<property name="singleStep">
|
||||||
<double>0.100000000000000</double>
|
<double>0.100000000000000</double>
|
||||||
</property>
|
</property>
|
||||||
|
@ -108,7 +111,10 @@
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
<item>
|
<item>
|
||||||
<widget class="QDoubleSpinBox" name="filletEndRadius">
|
<widget class="Gui::QuantitySpinBox" name="filletEndRadius">
|
||||||
|
<property name="unit" stdset="0">
|
||||||
|
<string notr="true">mm</string>
|
||||||
|
</property>
|
||||||
<property name="singleStep">
|
<property name="singleStep">
|
||||||
<double>0.100000000000000</double>
|
<double>0.100000000000000</double>
|
||||||
</property>
|
</property>
|
||||||
|
@ -177,6 +183,13 @@
|
||||||
</item>
|
</item>
|
||||||
</layout>
|
</layout>
|
||||||
</widget>
|
</widget>
|
||||||
|
<customwidgets>
|
||||||
|
<customwidget>
|
||||||
|
<class>Gui::QuantitySpinBox</class>
|
||||||
|
<extends>QWidget</extends>
|
||||||
|
<header>Gui/QuantitySpinBox.h</header>
|
||||||
|
</customwidget>
|
||||||
|
</customwidgets>
|
||||||
<tabstops>
|
<tabstops>
|
||||||
<tabstop>shapeObject</tabstop>
|
<tabstop>shapeObject</tabstop>
|
||||||
<tabstop>filletType</tabstop>
|
<tabstop>filletType</tabstop>
|
||||||
|
|
Loading…
Reference in New Issue
Block a user