Base: Units: return std::string

This commit is contained in:
Ladislav Michl
2024-07-12 20:51:54 +02:00
committed by Yorik van Havre
parent 24f4deef70
commit 379d7ea9d5
24 changed files with 181 additions and 174 deletions

View File

@@ -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 =

View File

@@ -42,7 +42,7 @@ std::string QuantityPy::representation() const
Py::Float flt(val);
ret << static_cast<std::string>(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());

View File

@@ -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<std::pair<Unit, std::string>, 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

View File

@@ -25,7 +25,7 @@
#define BASE_Unit_H
#include <cstdint>
#include <QString>
#include <string>
#include <FCGlobal.h>
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. */
//@{

View File

@@ -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

View File

@@ -22,12 +22,14 @@
#include "PreCompiled.h"
#ifdef __GNUC__
#include <unistd.h>
#endif
#include <iostream>
#include <iomanip>
#include <locale>
#include <memory>
#include <CXX/WrapPython.h>
#include <memory>
#include <fmt/format.h>
#include <QString>
#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)

View File

@@ -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());

View File

@@ -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)));
}

View File

@@ -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;
}

View File

@@ -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);

View File

@@ -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;
}

View File

@@ -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;
}

View File

@@ -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;
}

View File

@@ -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;
}

View File

@@ -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;
}

View File

@@ -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();
}

View File

@@ -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);
}

View File

@@ -1186,8 +1186,7 @@ void PropertyUnitItem::setValue(const QVariant& value)
if (!hasExpression() && value.canConvert<Base::Quantity>()) {
const Base::Quantity& val = value.value<Base::Quantity>();
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,

View File

@@ -179,7 +179,7 @@ QString MaterialProperty::getDictionaryString() const
auto quantity = getValue().value<Base::Quantity>();
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;
}
}

View File

@@ -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)

View File

@@ -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\")");

View File

@@ -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'))",

View File

@@ -80,7 +80,7 @@ TEST_F(PropertyExpressionEngineTest, executeCrossPropertyReference)
ASSERT_TRUE(target_entry.type() == typeid(Base::Quantity));
auto target_quant = App::any_cast<Base::Quantity>(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));

View File

@@ -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)