|
Shinya Kitaoka |
810553 |
#pragma once
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
#ifndef TUNIT_INCLUDED
|
|
Toshihiro Shimizu |
890ddd |
#define TUNIT_INCLUDED
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
#include "tcommon.h"
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
#undef DVAPI
|
|
Toshihiro Shimizu |
890ddd |
#undef DVVAR
|
|
Toshihiro Shimizu |
890ddd |
#ifdef TNZBASE_EXPORTS
|
|
Toshihiro Shimizu |
890ddd |
#define DVAPI DV_EXPORT_API
|
|
Toshihiro Shimizu |
890ddd |
#define DVVAR DV_EXPORT_VAR
|
|
Toshihiro Shimizu |
890ddd |
#else
|
|
Toshihiro Shimizu |
890ddd |
#define DVAPI DV_IMPORT_API
|
|
Toshihiro Shimizu |
890ddd |
#define DVVAR DV_IMPORT_VAR
|
|
Toshihiro Shimizu |
890ddd |
#endif
|
|
Toshihiro Shimizu |
890ddd |
|
|
|
e280ae |
#ifdef _MSC_VER
|
|
Toshihiro Shimizu |
890ddd |
#pragma warning(push)
|
|
Toshihiro Shimizu |
890ddd |
#pragma warning(disable : 4251)
|
|
Toshihiro Shimizu |
890ddd |
#endif
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//---------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
class DVAPI TUnitConverter {
|
|
Toshihiro Shimizu |
890ddd |
public:
|
|
Shinya Kitaoka |
120a6e |
virtual ~TUnitConverter() {}
|
|
Shinya Kitaoka |
120a6e |
virtual TUnitConverter *clone() const = 0;
|
|
Shinya Kitaoka |
120a6e |
virtual double convertTo(double v) const = 0;
|
|
Shinya Kitaoka |
120a6e |
virtual double convertFrom(double v) const = 0;
|
|
Toshihiro Shimizu |
890ddd |
};
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//---------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
d1f6c4 |
class DVAPI TSimpleUnitConverter final : public TUnitConverter {
|
|
Shinya Kitaoka |
120a6e |
const double m_factor, m_offset;
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
public:
|
|
Shinya Kitaoka |
120a6e |
TSimpleUnitConverter(double factor = 1, double offset = 0)
|
|
Shinya Kitaoka |
120a6e |
: m_factor(factor), m_offset(offset) {}
|
|
Shinya Kitaoka |
38fd86 |
TUnitConverter *clone() const override {
|
|
Shinya Kitaoka |
38fd86 |
return new TSimpleUnitConverter(*this);
|
|
Shinya Kitaoka |
38fd86 |
}
|
|
Shinya Kitaoka |
473e70 |
double convertTo(double v) const override { return v * m_factor + m_offset; }
|
|
Shinya Kitaoka |
38fd86 |
double convertFrom(double v) const override {
|
|
Shinya Kitaoka |
38fd86 |
return (v - m_offset) / m_factor;
|
|
Shinya Kitaoka |
38fd86 |
}
|
|
Toshihiro Shimizu |
890ddd |
};
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//---------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
class DVAPI TUnit {
|
|
Shinya Kitaoka |
120a6e |
std::wstring m_defaultExtension;
|
|
Shinya Kitaoka |
120a6e |
std::vector<std::wstring> m_extensions;</std::wstring>
|
|
Shinya Kitaoka |
120a6e |
TUnitConverter *m_converter;
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
public:
|
|
Shinya Kitaoka |
120a6e |
TUnit(std::wstring ext, TUnitConverter *converter = 0);
|
|
Shinya Kitaoka |
120a6e |
TUnit(const TUnit &);
|
|
Shinya Kitaoka |
120a6e |
~TUnit();
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
TUnit *clone() const { return new TUnit(*this); }
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
const std::vector<std::wstring> &getExtensions() const {</std::wstring>
|
|
Shinya Kitaoka |
120a6e |
return m_extensions;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
void addExtension(std::wstring ext);
|
|
Shinya Kitaoka |
120a6e |
bool isExtension(std::wstring ext) const;
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
std::wstring getDefaultExtension() const { return m_defaultExtension; }
|
|
Shinya Kitaoka |
120a6e |
void setDefaultExtension(std::wstring ext);
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
double convertTo(double v) const { return m_converter->convertTo(v); }
|
|
Shinya Kitaoka |
120a6e |
double convertFrom(double v) const { return m_converter->convertFrom(v); }
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
private:
|
|
Shinya Kitaoka |
120a6e |
// not implemented
|
|
Shinya Kitaoka |
120a6e |
TUnit &operator=(const TUnit &);
|
|
Toshihiro Shimizu |
890ddd |
};
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//---------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
class DVAPI TMeasure {
|
|
Shinya Kitaoka |
120a6e |
std::string m_name;
|
|
Shinya Kitaoka |
120a6e |
TUnit *m_mainUnit, *m_currentUnit, *m_standardUnit;
|
|
Shinya Kitaoka |
120a6e |
std::map<std::wstring, *="" tunit=""> m_extensions;</std::wstring,>
|
|
Shinya Kitaoka |
120a6e |
double m_defaultValue;
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
public:
|
|
Shinya Kitaoka |
120a6e |
TMeasure(std::string name, TUnit *mainUnit);
|
|
Shinya Kitaoka |
120a6e |
TMeasure(const TMeasure &);
|
|
Shinya Kitaoka |
120a6e |
~TMeasure();
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
std::string getName() const { return m_name; }
|
|
Shinya Kitaoka |
120a6e |
void setName(std::string name) { m_name = name; }
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
void add(TUnit *unit);
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
// main unit e' quella usata "internamente". puo' essere "strana"
|
|
Shinya Kitaoka |
120a6e |
const TUnit *getMainUnit() const { return m_mainUnit; }
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
// current unit e' quella ad es. definita in preferences
|
|
Shinya Kitaoka |
120a6e |
const TUnit *getCurrentUnit() const { return m_currentUnit; }
|
|
Shinya Kitaoka |
120a6e |
void setCurrentUnit(TUnit *unit);
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
// standard unit e' quella usata nelle espressioni
|
|
Shinya Kitaoka |
120a6e |
const TUnit *getStandardUnit() const { return m_standardUnit; }
|
|
Shinya Kitaoka |
120a6e |
void setStandardUnit(TUnit *unit);
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
TUnit *getUnit(std::wstring ext) const;
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
// defaultValue e' espresso in main unit
|
|
Shinya Kitaoka |
120a6e |
double getDefaultValue() const { return m_defaultValue; }
|
|
Shinya Kitaoka |
120a6e |
void setDefaultValue(double v) { m_defaultValue = v; }
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
private:
|
|
Shinya Kitaoka |
120a6e |
// not implemented
|
|
Shinya Kitaoka |
120a6e |
TMeasure &operator=(const TMeasure &);
|
|
Toshihiro Shimizu |
890ddd |
};
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//---------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
class DVAPI TMeasureManager { // singleton
|
|
Shinya Kitaoka |
120a6e |
std::map<std::string, *="" tmeasure=""> m_measures;</std::string,>
|
|
Shinya Kitaoka |
120a6e |
TMeasureManager();
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
public:
|
|
Shinya Kitaoka |
120a6e |
static TMeasureManager *instance() {
|
|
Shinya Kitaoka |
120a6e |
static TMeasureManager _instance;
|
|
Shinya Kitaoka |
120a6e |
return &_instance;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
void add(TMeasure *m);
|
|
Shinya Kitaoka |
120a6e |
TMeasure *get(std::string name) const;
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
typedef double CameraSizeProvider();
|
|
Shinya Kitaoka |
120a6e |
void addCameraMeasures(CameraSizeProvider *cameraSizeProvider);
|
|
Toshihiro Shimizu |
890ddd |
};
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//---------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
class DVAPI TMeasuredValue {
|
|
Shinya Kitaoka |
120a6e |
const TMeasure *m_measure;
|
|
Shinya Kitaoka |
120a6e |
double m_value;
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
public:
|
|
Shinya Kitaoka |
120a6e |
TMeasuredValue(std::string measureName);
|
|
Shinya Kitaoka |
120a6e |
~TMeasuredValue();
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
const TMeasure *getMeasure() const { return m_measure; }
|
|
Shinya Kitaoka |
120a6e |
void setMeasure(const TMeasure *measure);
|
|
Shinya Kitaoka |
120a6e |
void setMeasure(std::string measureName);
|
|
Shinya Kitaoka |
120a6e |
|
|
Jeremy Bullock |
771290 |
// used for mouse dragging to change value
|
|
Jeremy Bullock |
771290 |
// precision is how many times to divide by 10 to adjust value
|
|
Jeremy Bullock |
771290 |
// nothing calls precision yet, since just basic functionality
|
|
Jeremy Bullock |
771290 |
// is in place for dragging
|
|
Jeremy Bullock |
771290 |
void modifyValue(double direction, int precision = 0);
|
|
Jeremy Bullock |
771290 |
|
|
Shinya Kitaoka |
120a6e |
enum UnitType { MainUnit, CurrentUnit };
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
double getValue(UnitType uType) const {
|
|
Shinya Kitaoka |
120a6e |
return uType == MainUnit ? m_value
|
|
Shinya Kitaoka |
120a6e |
: m_measure->getCurrentUnit()->convertTo(m_value);
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
void setValue(UnitType uType, double value) {
|
|
Shinya Kitaoka |
120a6e |
m_value = uType == MainUnit
|
|
Shinya Kitaoka |
120a6e |
? value
|
|
Shinya Kitaoka |
120a6e |
: m_measure->getCurrentUnit()->convertFrom(value);
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
bool setValue(std::wstring s, int *pErr = 0); // if pErr != then *pErr
|
|
Shinya Kitaoka |
120a6e |
// contains error code. *pErr
|
|
Shinya Kitaoka |
120a6e |
// == 0 means OK
|
|
Shinya Kitaoka |
120a6e |
std::wstring toWideString(int decimals = 7) const;
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
private:
|
|
Shinya Kitaoka |
120a6e |
// not implemented
|
|
Shinya Kitaoka |
120a6e |
TMeasuredValue(const TMeasuredValue &);
|
|
Shinya Kitaoka |
120a6e |
TMeasuredValue &operator=(const TMeasuredValue &);
|
|
Toshihiro Shimizu |
890ddd |
};
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//---------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
// bruttacchietto. L'aspect ratio della field guide viene usata nelle
|
|
Shinya Kitaoka |
120a6e |
// conversioni
|
|
Toshihiro Shimizu |
890ddd |
// fra fld e inch sulla verticale
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
namespace UnitParameters {
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
typedef std::pair<double, double=""> (*CurrentDpiGetter)();</double,>
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
DVAPI void setFieldGuideAspectRatio(double ar);
|
|
Toshihiro Shimizu |
890ddd |
DVAPI double getFieldGuideAspectRatio();
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
DVAPI void setCurrentDpiGetter(CurrentDpiGetter f);
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//---------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
|
e280ae |
#ifdef _MSC_VER
|
|
Toshihiro Shimizu |
890ddd |
#pragma warning(pop)
|
|
Toshihiro Shimizu |
890ddd |
#endif
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
#endif
|