Skip to content

Commit

Permalink
[Base]identify schemas which use multiple units
Browse files Browse the repository at this point in the history
- allow querying a schema to determine if it uses multiple
  units for length (ex ft/in) or angles (ex DMS).
  • Loading branch information
WandererFan committed Aug 31, 2022
1 parent ea8cf94 commit 16ff6df
Show file tree
Hide file tree
Showing 4 changed files with 31 additions and 1 deletion.
12 changes: 12 additions & 0 deletions src/Base/UnitsApi.cpp
Expand Up @@ -151,6 +151,18 @@ QString UnitsApi::toNumber(double d, const QuantityFormat& f)
return number;
}

//return true if the current user schema uses multiple units for length (ex. Ft/In)
bool UnitsApi::isMultiUnitLength()
{
return UserPrefSystem->isMultiUnitLength();
}

//return true if the current user schema uses multiple units for angles (ex. DMS)
bool UnitsApi::isMultiUnitAngle()
{
return UserPrefSystem->isMultiUnitAngle();
}

// === static translation methods ==========================================

QString UnitsApi::schemaTranslate(const Base::Quantity& quant, double &factor, QString &unitString)
Expand Down
7 changes: 6 additions & 1 deletion src/Base/UnitsApi.h
Expand Up @@ -92,14 +92,19 @@ class BaseExport UnitsApi

//double Result;

//return true if the current user schema uses multiple units for length (ex. Ft/In)
static bool isMultiUnitLength();

//return true if the current user schema uses multiple units for angles (ex. DMS)
static bool isMultiUnitAngle();

// Python interface
static PyMethodDef Methods[];

/// return an instance of the given enum value
static UnitsSchemaPtr createSchema(UnitSystem s);

protected:
// not used at the moment
static UnitsSchemaPtr UserPrefSystem;
static UnitSystem currentSystem;
/// number of decimals for floats
Expand Down
6 changes: 6 additions & 0 deletions src/Base/UnitsSchema.h
Expand Up @@ -65,6 +65,12 @@ class UnitsSchema
virtual QString schemaTranslate(const Base::Quantity& quant, double &factor, QString &unitString)=0;

QString toLocale(const Base::Quantity& quant, double factor, const QString& unitString) const;

//return true if this schema uses multiple units for length (ex. Ft/In)
virtual bool isMultiUnitLength() {return false;}

//return true if this schema uses multiple units for angles (ex. DMS)
virtual bool isMultiUnitAngle() {return false;}
};


Expand Down
7 changes: 7 additions & 0 deletions src/Base/UnitsSchemaImperial1.h
Expand Up @@ -65,6 +65,10 @@ class UnitsSchemaImperialBuilding: public UnitsSchema
//virtual void setSchemaUnits(void);
//virtual void resetSchemaUnits(void);
QString schemaTranslate(const Base::Quantity& quant, double &factor, QString &unitString) override;

//return true if this schema uses multiple units for length (ex. Ft/In)
bool isMultiUnitLength() override {return true;}

};

/** The schema class for Civil Engineering in the imperial unit system
Expand All @@ -77,6 +81,9 @@ class UnitsSchemaImperialCivil: public UnitsSchema
//virtual void setSchemaUnits(void);
//virtual void resetSchemaUnits(void);
QString schemaTranslate(const Base::Quantity& quant, double &factor, QString &unitString) override;

//return true if this schema uses multiple units for angles (ex. DMS)
bool isMultiUnitAngle() override {return true;}
};


Expand Down

0 comments on commit 16ff6df

Please sign in to comment.