Base: Units: return std::string
This commit is contained in:
committed by
Yorik van Havre
parent
6b6e1fbd26
commit
0907c7bfda
@@ -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 =
|
||||
|
||||
@@ -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());
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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. */
|
||||
//@{
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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());
|
||||
|
||||
@@ -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)));
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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\")");
|
||||
|
||||
@@ -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'))",
|
||||
|
||||
@@ -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));
|
||||
|
||||
|
||||
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user