diff --git a/src/Base/Quantity.cpp b/src/Base/Quantity.cpp index fe4c0e1e95..56bc661cdc 100644 --- a/src/Base/Quantity.cpp +++ b/src/Base/Quantity.cpp @@ -253,7 +253,7 @@ QString Quantity::getSafeUserString() const auto feedbackQty = parse(retString); auto feedbackVal = feedbackQty.getValue(); if (feedbackVal == 0) { - retString = QStringLiteral("%1 %2").arg(this->myValue).arg(this->getUnit().getString()); + retString = QStringLiteral("%1 %2").arg(this->myValue).arg(QString::fromStdString(this->getUnit().getString())); } } retString = diff --git a/src/Base/QuantityPyImp.cpp b/src/Base/QuantityPyImp.cpp index 4a59496f42..f20650e782 100644 --- a/src/Base/QuantityPyImp.cpp +++ b/src/Base/QuantityPyImp.cpp @@ -42,7 +42,7 @@ std::string QuantityPy::representation() const Py::Float flt(val); ret << static_cast(flt.repr()); if (!unit.isEmpty()) { - ret << " " << unit.getString().toUtf8().constData(); + ret << " " << unit.getString(); } return ret.str(); @@ -63,7 +63,7 @@ PyObject* QuantityPy::toStr(PyObject* args) ret.setf(std::ios::fixed, std::ios::floatfield); ret << val; if (!unit.isEmpty()) { - ret << " " << unit.getString().toUtf8().constData(); + ret << " " << unit.getString(); } return Py_BuildValue("s", ret.str().c_str()); diff --git a/src/Base/Unit.cpp b/src/Base/Unit.cpp index 7c03a9ce44..9034907e16 100644 --- a/src/Base/Unit.cpp +++ b/src/Base/Unit.cpp @@ -125,10 +125,10 @@ Unit::Unit() //NOLINT Val = 0; } -Unit::Unit(const QString& expr) // NOLINT +Unit::Unit(const std::string& expr) // NOLINT { try { - *this = Quantity::parse(expr).getUnit(); + *this = Quantity::parse(QString::fromStdString(expr)).getUnit(); } catch (const Base::ParserError&) { Val = 0; @@ -358,7 +358,7 @@ Unit Unit::operator /(const Unit &right) const return result; } -QString Unit::getString() const +std::string Unit::getString() const { if (isEmpty()) { return {}; @@ -582,10 +582,10 @@ QString Unit::getString() const } } - return QString::fromUtf8(ret.str().c_str()); + return ret.str(); } -QString Unit::getTypeString() const +std::string Unit::getTypeString() const { static std::array, 55> unitSpecs {{ { Unit::Acceleration, "Acceleration" }, @@ -651,9 +651,9 @@ QString Unit::getTypeString() const }); if (spec == std::end(unitSpecs)) - return QString(); + return ""; - return QString::fromStdString(spec->second); + return spec->second; } // SI base units diff --git a/src/Base/Unit.h b/src/Base/Unit.h index fa9204f446..670cf67526 100644 --- a/src/Base/Unit.h +++ b/src/Base/Unit.h @@ -25,7 +25,7 @@ #define BASE_Unit_H #include -#include +#include #include namespace Base @@ -49,7 +49,7 @@ public: Unit(); Unit(const Unit&) = default; Unit(Unit&&) = default; - explicit Unit(const QString& expr); + explicit Unit(const std::string& expr); /// Destruction ~Unit() = default; @@ -81,9 +81,9 @@ public: int angle() const; bool isEmpty() const; - QString getString() const; + std::string getString() const; /// get the type as an string such as "Area", "Length" or "Pressure". - QString getTypeString() const; + std::string getTypeString() const; /** Predefined Unit types. */ //@{ diff --git a/src/Base/UnitPyImp.cpp b/src/Base/UnitPyImp.cpp index 14be93f524..4cd43b67a2 100644 --- a/src/Base/UnitPyImp.cpp +++ b/src/Base/UnitPyImp.cpp @@ -38,7 +38,7 @@ std::string UnitPy::representation() const Unit* self = getUnitPtr(); ret << "Unit: "; - ret << self->getString().toUtf8().constData() << " ("; + ret << self->getString() << " ("; ret << (*self).length() << ","; ret << (*self).mass() << ","; ret << (*self).time() << ","; @@ -48,7 +48,7 @@ std::string UnitPy::representation() const ret << (*self).luminousIntensity() << ","; ret << (*self).angle() << ")"; - std::string type = self->getTypeString().toUtf8().constData(); + std::string type = self->getTypeString(); if (!type.empty()) { ret << " [" << type << "]"; } @@ -207,7 +207,7 @@ PyObject* UnitPy::richCompare(PyObject* v, PyObject* w, int op) Py::String UnitPy::getType() const { - return {getUnitPtr()->getTypeString().toUtf8(), "utf-8"}; + return {getUnitPtr()->getTypeString(), "utf-8"}; } Py::Tuple UnitPy::getSignature() const diff --git a/src/Base/UnitsApi.cpp b/src/Base/UnitsApi.cpp index 5dc5c95570..43355e10e8 100644 --- a/src/Base/UnitsApi.cpp +++ b/src/Base/UnitsApi.cpp @@ -22,12 +22,14 @@ #include "PreCompiled.h" -#ifdef __GNUC__ -#include -#endif + +#include +#include +#include +#include #include -#include +#include #include #include "Exception.h" @@ -139,23 +141,33 @@ void UnitsApi::setSchema(UnitSystem system) // Quantity (e.g. mi=1.8km rather then 1.6km). } -QString UnitsApi::toString(const Base::Quantity& quantity, const QuantityFormat& format) +std::string UnitsApi::toString(const Base::Quantity& quantity, const QuantityFormat& format) { - QString value = QString::fromLatin1("'%1 %2'") - .arg(quantity.getValue(), 0, format.toFormat(), format.precision) - .arg(quantity.getUnit().getString()); - return value; + return fmt::format("'{} {}'", toNumber(quantity, format), quantity.getUnit().getString()); } -QString UnitsApi::toNumber(const Base::Quantity& quantity, const QuantityFormat& format) +std::string UnitsApi::toNumber(const Base::Quantity& quantity, const QuantityFormat& format) { return toNumber(quantity.getValue(), format); } -QString UnitsApi::toNumber(double value, const QuantityFormat& format) +std::string UnitsApi::toNumber(double value, const QuantityFormat& format) { - QString number = QString::fromLatin1("%1").arg(value, 0, format.toFormat(), format.precision); - return number; + std::stringstream ss; + + switch (format.format) { + case QuantityFormat::Fixed: + ss << std::fixed; + break; + case QuantityFormat::Scientific: + ss << std::scientific; + break; + default: + break; + } + ss << std::setprecision(format.precision) << value; + + return ss.str(); } // return true if the current user schema uses multiple units for length (ex. Ft/In) diff --git a/src/Base/UnitsApi.h b/src/Base/UnitsApi.h index 66a0e18487..e729d2bda5 100644 --- a/src/Base/UnitsApi.h +++ b/src/Base/UnitsApi.h @@ -73,22 +73,22 @@ public: * The string is a number in C locale (i.e. the decimal separator is always a dot) and if * needed represented in scientific notation. The string also includes the unit of the quantity. */ - static QString toString(const Base::Quantity& q, - const QuantityFormat& f = QuantityFormat(QuantityFormat::Default)); + static std::string toString(const Base::Quantity& q, + const QuantityFormat& f = QuantityFormat(QuantityFormat::Default)); /** Get a number as string for a quantity of a given format. * The string is a number in C locale (i.e. the decimal separator is always a dot) and if * needed represented in scientific notation. The string doesn't include the unit of the * quantity. */ - static QString toNumber(const Base::Quantity& q, - const QuantityFormat& f = QuantityFormat(QuantityFormat::Default)); + static std::string toNumber(const Base::Quantity& q, + const QuantityFormat& f = QuantityFormat(QuantityFormat::Default)); /** Get a number as string for a double of a given format. * The string is a number in C locale (i.e. the decimal separator is always a dot) and if * needed represented in scientific notation. The string doesn't include the unit of the * quantity. */ - static QString toNumber(double value, - const QuantityFormat& f = QuantityFormat(QuantityFormat::Default)); + static std::string toNumber(double value, + const QuantityFormat& f = QuantityFormat(QuantityFormat::Default)); /// generate a value for a quantity with default user preferred system static double toDouble(PyObject* args, const Base::Unit& u = Base::Unit()); diff --git a/src/Base/UnitsApiPy.cpp b/src/Base/UnitsApiPy.cpp index 6060442972..25d0aab190 100644 --- a/src/Base/UnitsApiPy.cpp +++ b/src/Base/UnitsApiPy.cpp @@ -221,6 +221,5 @@ PyObject* UnitsApi::sToNumber(PyObject* /*self*/, PyObject* args) return nullptr; } - QString string = toNumber(value, qf); - return Py::new_reference_to(Py::String(string.toStdString())); + return Py::new_reference_to(Py::String(toNumber(value, qf))); } diff --git a/src/Base/UnitsSchemaCentimeters.cpp b/src/Base/UnitsSchemaCentimeters.cpp index 033e558434..a83486ba23 100644 --- a/src/Base/UnitsSchemaCentimeters.cpp +++ b/src/Base/UnitsSchemaCentimeters.cpp @@ -72,7 +72,7 @@ QString UnitsSchemaCentimeters::schemaTranslate(const Base::Quantity& quant, } else { // default action for all cases without special treatment: - unitString = quant.getUnit().getString(); + unitString = QString::fromStdString(quant.getUnit().getString()); factor = 1.0; } diff --git a/src/Base/UnitsSchemaFemMilliMeterNewton.cpp b/src/Base/UnitsSchemaFemMilliMeterNewton.cpp index 9baf47a920..7dceb03a92 100644 --- a/src/Base/UnitsSchemaFemMilliMeterNewton.cpp +++ b/src/Base/UnitsSchemaFemMilliMeterNewton.cpp @@ -52,7 +52,7 @@ QString UnitsSchemaFemMilliMeterNewton::schemaTranslate(const Quantity& quant, } else { // default action for all cases without special treatment: - unitString = quant.getUnit().getString(); + unitString = QString::fromStdString(quant.getUnit().getString()); factor = 1.0; } return toLocale(quant, factor, unitString); diff --git a/src/Base/UnitsSchemaImperial1.cpp b/src/Base/UnitsSchemaImperial1.cpp index 37c6d30860..a5a5e7f213 100644 --- a/src/Base/UnitsSchemaImperial1.cpp +++ b/src/Base/UnitsSchemaImperial1.cpp @@ -123,7 +123,7 @@ UnitsSchemaImperial1::schemaTranslate(const Quantity& quant, double& factor, QSt } else { // default action for all cases without special treatment: - unitString = quant.getUnit().getString(); + unitString = QString::fromStdString(quant.getUnit().getString()); factor = 1.0; } @@ -184,7 +184,7 @@ QString UnitsSchemaImperialDecimal::schemaTranslate(const Base::Quantity& quant, } else { // default action for all cases without special treatment: - unitString = quant.getUnit().getString(); + unitString = QString::fromStdString(quant.getUnit().getString()); factor = 1.0; } @@ -312,7 +312,7 @@ QString UnitsSchemaImperialBuilding::schemaTranslate(const Quantity& quant, factor = 25.4 / 60; } else { - unitString = quant.getUnit().getString(); + unitString = QString::fromStdString(quant.getUnit().getString()); factor = 1.0; } @@ -392,11 +392,11 @@ QString UnitsSchemaImperialCivil::schemaTranslate(const Base::Quantity& quant, // output << std::setprecision(Base::UnitsApi::getDecimals()) << std::fixed << // rawSeconds << secondString.toStdString(); // } - return QString::fromUtf8(output.str().c_str()); + return QString::fromStdString(output.str()); } else { // default action for all cases without special treatment: - unitString = quant.getUnit().getString(); + unitString = QString::fromStdString(quant.getUnit().getString()); factor = 1.0; } diff --git a/src/Base/UnitsSchemaInternal.cpp b/src/Base/UnitsSchemaInternal.cpp index 99824bb44b..c6a738107f 100644 --- a/src/Base/UnitsSchemaInternal.cpp +++ b/src/Base/UnitsSchemaInternal.cpp @@ -630,7 +630,7 @@ UnitsSchemaInternal::schemaTranslate(const Quantity& quant, double& factor, QStr } else { // default action for all cases without special treatment: - unitString = quant.getUnit().getString(); + unitString = QString::fromStdString(quant.getUnit().getString()); factor = 1.0; } diff --git a/src/Base/UnitsSchemaMKS.cpp b/src/Base/UnitsSchemaMKS.cpp index c575b81e9e..b10e61d1ad 100644 --- a/src/Base/UnitsSchemaMKS.cpp +++ b/src/Base/UnitsSchemaMKS.cpp @@ -617,7 +617,7 @@ QString UnitsSchemaMKS::schemaTranslate(const Quantity& quant, double& factor, Q } else { // default action for all cases without special treatment: - unitString = quant.getUnit().getString(); + unitString = QString::fromStdString(quant.getUnit().getString()); factor = 1.0; } diff --git a/src/Base/UnitsSchemaMeterDecimal.cpp b/src/Base/UnitsSchemaMeterDecimal.cpp index c3cb27d5ae..3dfbde5eb6 100644 --- a/src/Base/UnitsSchemaMeterDecimal.cpp +++ b/src/Base/UnitsSchemaMeterDecimal.cpp @@ -83,7 +83,7 @@ QString UnitsSchemaMeterDecimal::schemaTranslate(const Base::Quantity& quant, } else { // default action for all cases without special treatment: - unitString = quant.getUnit().getString(); + unitString = QString::fromStdString(quant.getUnit().getString()); factor = 1.0; } diff --git a/src/Base/UnitsSchemaMmMin.cpp b/src/Base/UnitsSchemaMmMin.cpp index be3196361e..ab91816d7f 100644 --- a/src/Base/UnitsSchemaMmMin.cpp +++ b/src/Base/UnitsSchemaMmMin.cpp @@ -52,7 +52,7 @@ UnitsSchemaMmMin::schemaTranslate(const Quantity& quant, double& factor, QString } else { // default action for all cases without special treatment: - unitString = quant.getUnit().getString(); + unitString = QString::fromStdString(quant.getUnit().getString()); factor = 1.0; } diff --git a/src/Gui/DlgExpressionInput.cpp b/src/Gui/DlgExpressionInput.cpp index 62dd1e3d13..24610179c0 100644 --- a/src/Gui/DlgExpressionInput.cpp +++ b/src/Gui/DlgExpressionInput.cpp @@ -174,7 +174,7 @@ Base::Type DlgExpressionInput::determineTypeVarSet() // varset. Since unit properties are derived from App::PropertyFloat, it // allows us to create a property and set the value. - std::string unitTypeString = impliedUnit.getTypeString().toStdString(); + std::string unitTypeString = impliedUnit.getTypeString(); if (unitTypeString.empty()) { // no type was provided return Base::Type::badType(); @@ -187,7 +187,7 @@ Base::Type DlgExpressionInput::determineTypeVarSet() bool DlgExpressionInput::typeOkForVarSet() { - std::string unitType = impliedUnit.getTypeString().toStdString(); + std::string unitType = impliedUnit.getTypeString(); return determineTypeVarSet() != Base::Type::badType(); } diff --git a/src/Gui/DlgUnitsCalculatorImp.cpp b/src/Gui/DlgUnitsCalculatorImp.cpp index df857745e1..0ec0e211f3 100644 --- a/src/Gui/DlgUnitsCalculatorImp.cpp +++ b/src/Gui/DlgUnitsCalculatorImp.cpp @@ -105,7 +105,7 @@ DlgUnitsCalculator::DlgUnitsCalculator(QWidget* parent, Qt::WindowFlags fl) << Base::Unit::Volume << Base::Unit::VolumeFlowRate << Base::Unit::VolumetricThermalExpansionCoefficient << Base::Unit::Work; for (const Base::Unit& it : units) { - ui->unitsBox->addItem(it.getTypeString()); + ui->unitsBox->addItem(QString::fromStdString(it.getTypeString())); } ui->quantitySpinBox->setValue(1.0); @@ -138,14 +138,15 @@ void DlgUnitsCalculator::valueChanged(const Base::Quantity& quant) // explicitly check for "ee" like in "eeV" because this would trigger an exception in Base::Unit // since it expects then a scientific notation number like "1e3" if ((ui->UnitInput->text().mid(0, 2) == QString::fromLatin1("ee")) - || Base::Unit(ui->UnitInput->text()).getTypeString().isEmpty()) { + || Base::Unit(ui->UnitInput->text().toStdString()).getTypeString().empty()) { ui->ValueOutput->setText( QString::fromLatin1("%1 %2").arg(tr("unknown unit:"), ui->UnitInput->text())); ui->pushButton_Copy->setEnabled(false); } else { // the unit is valid // we can only convert units of the same type, thus check - if (Base::Unit(ui->UnitInput->text()).getTypeString() != quant.getUnit().getTypeString()) { + if (Base::Unit(ui->UnitInput->text().toStdString()).getTypeString() + != quant.getUnit().getTypeString()) { ui->ValueOutput->setText(tr("unit mismatch")); ui->pushButton_Copy->setEnabled(false); } diff --git a/src/Gui/propertyeditor/PropertyItem.cpp b/src/Gui/propertyeditor/PropertyItem.cpp index ef2707bce5..b351fb83cd 100644 --- a/src/Gui/propertyeditor/PropertyItem.cpp +++ b/src/Gui/propertyeditor/PropertyItem.cpp @@ -1186,8 +1186,7 @@ void PropertyUnitItem::setValue(const QVariant& value) if (!hasExpression() && value.canConvert()) { const Base::Quantity& val = value.value(); Base::QuantityFormat format(Base::QuantityFormat::Default, highPrec); - QString unit = Base::UnitsApi::toString(val, format); - setPropertyValue(unit); + setPropertyValue(Base::UnitsApi::toString(val, format)); } } @@ -1801,11 +1800,11 @@ void PropertyVectorDistanceItem::setValue(const QVariant& variant) Base::Quantity z = Base::Quantity(value.z, Base::Unit::Length); Base::QuantityFormat format(Base::QuantityFormat::Default, highPrec); - QString data = QString::fromLatin1("(%1, %2, %3)") - .arg(Base::UnitsApi::toNumber(x, format), - Base::UnitsApi::toNumber(y, format), - Base::UnitsApi::toNumber(z, format)); - setPropertyValue(data); + std::string val = fmt::format("({}, {}, {})", + Base::UnitsApi::toNumber(x, format), + Base::UnitsApi::toNumber(y, format), + Base::UnitsApi::toNumber(z, format)); + setPropertyValue(val); } void PropertyVectorDistanceItem::setEditorData(QWidget* editor, const QVariant& data) const @@ -2557,12 +2556,12 @@ void PropertyRotationItem::setValue(const QVariant& value) double angle {}; h.getValue(axis, angle); Base::QuantityFormat format(Base::QuantityFormat::Default, highPrec); - QString data = QString::fromLatin1("App.Rotation(App.Vector(%1,%2,%3),%4)") - .arg(Base::UnitsApi::toNumber(axis.x, format), - Base::UnitsApi::toNumber(axis.y, format), - Base::UnitsApi::toNumber(axis.z, format), - Base::UnitsApi::toNumber(angle, format)); - setPropertyValue(data); + std::string val = fmt::format("App.Rotation(App.Vector({},{},{}),{})", + Base::UnitsApi::toNumber(axis.x, format), + Base::UnitsApi::toNumber(axis.y, format), + Base::UnitsApi::toNumber(axis.z, format), + Base::UnitsApi::toNumber(angle, format)); + setPropertyValue(val); } QWidget* PropertyRotationItem::createEditor(QWidget* parent, @@ -2872,17 +2871,17 @@ void PropertyPlacementItem::setValue(const QVariant& value) h.getValue(axis, angle); Base::QuantityFormat format(Base::QuantityFormat::Default, highPrec); - QString data = QString::fromLatin1("App.Placement(" - "App.Vector(%1,%2,%3)," - "App.Rotation(App.Vector(%4,%5,%6),%7))") - .arg(Base::UnitsApi::toNumber(pos.x, format), - Base::UnitsApi::toNumber(pos.y, format), - Base::UnitsApi::toNumber(pos.z, format), - Base::UnitsApi::toNumber(axis.x, format), - Base::UnitsApi::toNumber(axis.y, format), - Base::UnitsApi::toNumber(axis.z, format), - Base::UnitsApi::toNumber(angle, format)); - setPropertyValue(data); + std::string str = fmt::format("App.Placement(" + "App.Vector({},{},{})," + "App.Rotation(App.Vector({},{},{}),{}))", + Base::UnitsApi::toNumber(pos.x, format), + Base::UnitsApi::toNumber(pos.y, format), + Base::UnitsApi::toNumber(pos.z, format), + Base::UnitsApi::toNumber(axis.x, format), + Base::UnitsApi::toNumber(axis.y, format), + Base::UnitsApi::toNumber(axis.z, format), + Base::UnitsApi::toNumber(angle, format)); + setPropertyValue(str); } QWidget* PropertyPlacementItem::createEditor(QWidget* parent, diff --git a/src/Mod/Material/App/Materials.cpp b/src/Mod/Material/App/Materials.cpp index 24edb1a16a..f1e6fab796 100644 --- a/src/Mod/Material/App/Materials.cpp +++ b/src/Mod/Material/App/Materials.cpp @@ -179,7 +179,7 @@ QString MaterialProperty::getDictionaryString() const auto quantity = getValue().value(); auto string = QString(QLatin1String("%1 %2")) .arg(quantity.getValue(), 0, 'g', MaterialValue::PRECISION) - .arg(quantity.getUnit().getString()); + .arg(QString::fromStdString(quantity.getUnit().getString())); return string; } if (getType() == MaterialValue::Float) { @@ -1701,4 +1701,4 @@ App::Material Material::getMaterialAppearance() const } return material; -} \ No newline at end of file +} diff --git a/src/Mod/Measure/App/MeasurePosition.cpp b/src/Mod/Measure/App/MeasurePosition.cpp index 19195dee00..0364f4db53 100644 --- a/src/Mod/Measure/App/MeasurePosition.cpp +++ b/src/Mod/Measure/App/MeasurePosition.cpp @@ -131,7 +131,7 @@ QString MeasurePosition::getResultString() } Base::Vector3d value = Position.getValue(); - QString unit = Position.getUnit().getString(); + QString unit = QString::fromStdString(Position.getUnit().getString()); int precision = 2; QString text; #if QT_VERSION < QT_VERSION_CHECK(5, 14, 0) diff --git a/src/Mod/Mesh/Gui/DlgRegularSolidImp.cpp b/src/Mod/Mesh/Gui/DlgRegularSolidImp.cpp index a250b46b4f..10e996b5fa 100644 --- a/src/Mod/Mesh/Gui/DlgRegularSolidImp.cpp +++ b/src/Mod/Mesh/Gui/DlgRegularSolidImp.cpp @@ -118,97 +118,93 @@ void DlgRegularSolidImp::onCreateSolidButtonClicked() { try { Gui::WaitCursor wc; - QString cmd; std::string name; + std::string cmd, name; App::Document* doc = App::GetApplication().getActiveDocument(); if (!doc) { QMessageBox::warning(this, tr("Create %1").arg(ui->comboBox1->currentText()), tr("No active document")); return; } - if (ui->comboBox1->currentIndex() == 0) { // cube - name = doc->getUniqueObjectName("Cube"); - cmd = QString(QLatin1String( - "App.ActiveDocument.addObject(\"Mesh::Cube\",\"%1\")\n" - "App.ActiveDocument.%1.Length=%2\n" - "App.ActiveDocument.%1.Width=%3\n" - "App.ActiveDocument.%1.Height=%4\n")) - .arg(QLatin1String(name.c_str()), - Base::UnitsApi::toNumber(ui->boxLength->value()), - Base::UnitsApi::toNumber(ui->boxWidth->value()), - Base::UnitsApi::toNumber(ui->boxHeight->value())); - } - else if (ui->comboBox1->currentIndex() == 1) { // cylinder - name = doc->getUniqueObjectName("Cylinder"); - cmd = QString(QLatin1String( - "App.ActiveDocument.addObject(\"Mesh::Cylinder\",\"%1\")\n" - "App.ActiveDocument.%1.Radius=%2\n" - "App.ActiveDocument.%1.Length=%3\n" - "App.ActiveDocument.%1.EdgeLength=%4\n" - "App.ActiveDocument.%1.Closed=%5\n" - "App.ActiveDocument.%1.Sampling=%6\n")) - .arg(QLatin1String(name.c_str()), - Base::UnitsApi::toNumber(ui->cylinderRadius->value()), - Base::UnitsApi::toNumber(ui->cylinderLength->value()), - Base::UnitsApi::toNumber(ui->cylinderEdgeLength->value()), - QLatin1String((ui->cylinderClosed->isChecked()?"True":"False"))) - .arg(ui->cylinderCount->value()); - } - else if (ui->comboBox1->currentIndex() == 2) { // cone - name = doc->getUniqueObjectName("Cone"); - cmd = QString(QLatin1String( - "App.ActiveDocument.addObject(\"Mesh::Cone\",\"%1\")\n" - "App.ActiveDocument.%1.Radius1=%2\n" - "App.ActiveDocument.%1.Radius2=%3\n" - "App.ActiveDocument.%1.Length=%4\n" - "App.ActiveDocument.%1.EdgeLength=%5\n" - "App.ActiveDocument.%1.Closed=%6\n" - "App.ActiveDocument.%1.Sampling=%7\n")) - .arg(QLatin1String(name.c_str()), - Base::UnitsApi::toNumber(ui->coneRadius1->value()), - Base::UnitsApi::toNumber(ui->coneRadius2->value()), - Base::UnitsApi::toNumber(ui->coneLength->value()), - Base::UnitsApi::toNumber(ui->coneEdgeLength->value()), - QLatin1String((ui->coneClosed->isChecked()?"True":"False"))) - .arg(ui->coneCount->value()); - } - else if (ui->comboBox1->currentIndex() == 3) { // sphere - name = doc->getUniqueObjectName("Sphere"); - cmd = QString(QLatin1String( - "App.ActiveDocument.addObject(\"Mesh::Sphere\",\"%1\")\n" - "App.ActiveDocument.%1.Radius=%2\n" - "App.ActiveDocument.%1.Sampling=%3\n")) - .arg(QLatin1String(name.c_str()), - Base::UnitsApi::toNumber(ui->sphereRadius->value())) - .arg(ui->sphereCount->value()); - } - else if (ui->comboBox1->currentIndex() == 4) { // ellipsoid - name = doc->getUniqueObjectName("Ellipsoid"); - cmd = QString(QLatin1String( - "App.ActiveDocument.addObject(\"Mesh::Ellipsoid\",\"%1\")\n" - "App.ActiveDocument.%1.Radius1=%2\n" - "App.ActiveDocument.%1.Radius2=%3\n" - "App.ActiveDocument.%1.Sampling=%4\n")) - .arg(QLatin1String(name.c_str()), - Base::UnitsApi::toNumber(ui->ellipsoidRadius1->value()), - Base::UnitsApi::toNumber(ui->ellipsoidRadius2->value())) - .arg(ui->ellipsoidCount->value()); - } - else if (ui->comboBox1->currentIndex() == 5) { // toroid - name = doc->getUniqueObjectName("Torus"); - cmd = QString(QLatin1String( - "App.ActiveDocument.addObject(\"Mesh::Torus\",\"%1\")\n" - "App.ActiveDocument.%1.Radius1=%2\n" - "App.ActiveDocument.%1.Radius2=%3\n" - "App.ActiveDocument.%1.Sampling=%4\n")) - .arg(QLatin1String(name.c_str()), - Base::UnitsApi::toNumber(ui->toroidRadius1->value()), - Base::UnitsApi::toNumber(ui->toroidRadius2->value())) - .arg(ui->toroidCount->value()); + switch (ui->comboBox1->currentIndex()) { + case 0: + name = doc->getUniqueObjectName("Cube"); + cmd = fmt::format( + "App.ActiveDocument.addObject(\"Mesh::Cube\",\"{0}\")\n" + "App.ActiveDocument.{0}.Length={1}\n" + "App.ActiveDocument.{0}.Width={2}\n" + "App.ActiveDocument.{0}.Height={3}\n", name, + Base::UnitsApi::toNumber(ui->boxLength->value()), + Base::UnitsApi::toNumber(ui->boxWidth->value()), + Base::UnitsApi::toNumber(ui->boxHeight->value())); + break; + case 1: + name = doc->getUniqueObjectName("Cylinder"); + cmd = fmt::format( + "App.ActiveDocument.addObject(\"Mesh::Cylinder\",\"{0}\")\n" + "App.ActiveDocument.{0}.Radius={1}\n" + "App.ActiveDocument.{0}.Length={2}\n" + "App.ActiveDocument.{0}.EdgeLength={3}\n" + "App.ActiveDocument.{0}.Closed={4}\n" + "App.ActiveDocument.{0}.Sampling={5}\n", name, + Base::UnitsApi::toNumber(ui->cylinderRadius->value()), + Base::UnitsApi::toNumber(ui->cylinderLength->value()), + Base::UnitsApi::toNumber(ui->cylinderEdgeLength->value()), + ui->cylinderClosed->isChecked() ? "True" : "False", + ui->cylinderCount->value()); + break; + case 2: + name = doc->getUniqueObjectName("Cone"); + cmd = fmt::format( + "App.ActiveDocument.addObject(\"Mesh::Cone\",\"{0}\")\n" + "App.ActiveDocument.{0}.Radius1={1}\n" + "App.ActiveDocument.{0}.Radius2={2}\n" + "App.ActiveDocument.{0}.Length={3}\n" + "App.ActiveDocument.{0}.EdgeLength={4}\n" + "App.ActiveDocument.{0}.Closed={5}\n" + "App.ActiveDocument.{0}.Sampling={6}\n", name, + Base::UnitsApi::toNumber(ui->coneRadius1->value()), + Base::UnitsApi::toNumber(ui->coneRadius2->value()), + Base::UnitsApi::toNumber(ui->coneLength->value()), + Base::UnitsApi::toNumber(ui->coneEdgeLength->value()), + ui->coneClosed->isChecked() ? "True" : "False", + ui->coneCount->value()); + break; + case 3: + name = doc->getUniqueObjectName("Sphere"); + cmd = fmt::format( + "App.ActiveDocument.addObject(\"Mesh::Sphere\",\"{0}\")\n" + "App.ActiveDocument.{0}.Radius={1}\n" + "App.ActiveDocument.{0}.Sampling={2}\n", name, + Base::UnitsApi::toNumber(ui->sphereRadius->value()), + ui->sphereCount->value()); + break; + case 4: + name = doc->getUniqueObjectName("Ellipsoid"); + cmd = fmt::format( + "App.ActiveDocument.addObject(\"Mesh::Ellipsoid\",\"{0}\")\n" + "App.ActiveDocument.{0}.Radius1={1}\n" + "App.ActiveDocument.{0}.Radius2={2}\n" + "App.ActiveDocument.{0}.Sampling={3}\n", name, + Base::UnitsApi::toNumber(ui->ellipsoidRadius1->value()), + Base::UnitsApi::toNumber(ui->ellipsoidRadius2->value()), + ui->ellipsoidCount->value()); + break; + case 5: + name = doc->getUniqueObjectName("Torus"); + cmd = fmt::format( + "App.ActiveDocument.addObject(\"Mesh::Torus\",\"{0}\")\n" + "App.ActiveDocument.{0}.Radius1={1}\n" + "App.ActiveDocument.{0}.Radius2={2}\n" + "App.ActiveDocument.{0}.Sampling={3}\n", name, + Base::UnitsApi::toNumber(ui->toroidRadius1->value()), + Base::UnitsApi::toNumber(ui->toroidRadius2->value()), + ui->toroidCount->value()); + break; } // Execute the Python block QString solid = tr("Create %1").arg(ui->comboBox1->currentText()); Gui::Application::Instance->activeDocument()->openCommand(solid.toUtf8()); - Gui::Command::doCommand(Gui::Command::Doc, (const char*)cmd.toLatin1()); + Gui::Command::doCommand(Gui::Command::Doc, cmd.c_str()); Gui::Application::Instance->activeDocument()->commitCommand(); Gui::Command::doCommand(Gui::Command::Doc, "App.activeDocument().recompute()"); Gui::Command::doCommand(Gui::Command::Gui, "Gui.SendMsgToActiveView(\"ViewFit\")"); diff --git a/src/Mod/Sketcher/Gui/EditDatumDialog.cpp b/src/Mod/Sketcher/Gui/EditDatumDialog.cpp index 13db66510d..88db1b321b 100644 --- a/src/Mod/Sketcher/Gui/EditDatumDialog.cpp +++ b/src/Mod/Sketcher/Gui/EditDatumDialog.cpp @@ -203,7 +203,7 @@ void EditDatumDialog::accepted() ui_ins_datum->labelEdit->apply(); } else { - auto unitString = newQuant.getUnit().getString().toUtf8().toStdString(); + auto unitString = newQuant.getUnit().getString(); unitString = Base::Tools::escapeQuotesFromString(unitString); Gui::cmdAppObjectArgs(sketch, "setDatum(%i,App.Units.Quantity('%f %s'))", diff --git a/tests/src/App/PropertyExpressionEngine.cpp b/tests/src/App/PropertyExpressionEngine.cpp index 19554c4936..7799e15c5d 100644 --- a/tests/src/App/PropertyExpressionEngine.cpp +++ b/tests/src/App/PropertyExpressionEngine.cpp @@ -80,7 +80,7 @@ TEST_F(PropertyExpressionEngineTest, executeCrossPropertyReference) ASSERT_TRUE(target_entry.type() == typeid(Base::Quantity)); auto target_quant = App::any_cast(target_entry); auto target_value = target_quant.getValue(); - auto target_unit = target_quant.getUnit().getString().toStdString(); + auto target_unit = target_quant.getUnit().getString(); auto verify_quant = Base::Quantity::parse(QString::fromStdString(target_text)); diff --git a/tests/src/Base/Unit.cpp b/tests/src/Base/Unit.cpp index 616abde140..fa73d91106 100644 --- a/tests/src/Base/Unit.cpp +++ b/tests/src/Base/Unit.cpp @@ -6,7 +6,7 @@ TEST(Unit, TestString) { auto toString = [](const Base::Unit& unit) { - return unit.getString().toStdString(); + return unit.getString(); }; EXPECT_EQ(toString(Base::Unit(0, 0, 0, 0, 0, 0, 0, 0)), ""); EXPECT_EQ(toString(Base::Unit(1, 0, 0, 0, 0, 0, 0, 0)), "mm"); @@ -24,7 +24,7 @@ TEST(Unit, TestString) TEST(Unit, TestTypeString) { auto toString = [](const Base::Unit& unit) { - return unit.getTypeString().toStdString(); + return unit.getTypeString(); }; EXPECT_EQ(toString(Base::Unit::Acceleration), "Acceleration"); EXPECT_EQ(toString(Base::Unit::AmountOfSubstance), "AmountOfSubstance"); @@ -83,14 +83,14 @@ TEST(Unit, TestTypeString) } TEST(Unit, strings) { - EXPECT_STREQ(Base::Unit::Acceleration.getString().toStdString().c_str(), "mm/s^2"); - EXPECT_STREQ(Base::Unit::AmountOfSubstance.getString().toStdString().c_str(), "mol"); - EXPECT_STREQ(Base::Unit::Angle.getString().toStdString().c_str(), "deg"); - EXPECT_STREQ(Base::Unit::AngleOfFriction.getString().toStdString().c_str(), "deg"); - EXPECT_STREQ(Base::Unit::Area.getString().toStdString().c_str(), "mm^2"); - EXPECT_STREQ(Base::Unit::CurrentDensity.getString().toStdString().c_str(), "A/mm^2"); - EXPECT_STREQ(Base::Unit::Density.getString().toStdString().c_str(), "kg/mm^3"); - EXPECT_STREQ(Base::Unit::DissipationRate.getString().toStdString().c_str(), "mm^2/s^3"); + EXPECT_STREQ(Base::Unit::Acceleration.getString().c_str(), "mm/s^2"); + EXPECT_STREQ(Base::Unit::AmountOfSubstance.getString().c_str(), "mol"); + EXPECT_STREQ(Base::Unit::Angle.getString().c_str(), "deg"); + EXPECT_STREQ(Base::Unit::AngleOfFriction.getString().c_str(), "deg"); + EXPECT_STREQ(Base::Unit::Area.getString().c_str(), "mm^2"); + EXPECT_STREQ(Base::Unit::CurrentDensity.getString().c_str(), "A/mm^2"); + EXPECT_STREQ(Base::Unit::Density.getString().c_str(), "kg/mm^3"); + EXPECT_STREQ(Base::Unit::DissipationRate.getString().c_str(), "mm^2/s^3"); } TEST(Unit, TestEqual)