|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
#include "tunit.h"
|
|
Toshihiro Shimizu |
890ddd |
#include "tconvert.h"
|
|
Toshihiro Shimizu |
890ddd |
#include <math.h></math.h>
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
// Note: convertTo() means: convert from standard unit TO specific unit
|
|
Toshihiro Shimizu |
890ddd |
// e.g. if unit=cm (standard=inch) then convertTo(1) == 2.54
|
|
Toshihiro Shimizu |
890ddd |
//-------------------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
/*
|
|
Shinya Kitaoka |
d1f6c4 |
class VerticalCameraFldUnitConverter final : public TUnitConverter {
|
|
Toshihiro Shimizu |
890ddd |
public:
|
|
Toshihiro Shimizu |
890ddd |
static double m_factor;
|
|
Toshihiro Shimizu |
890ddd |
VerticalCameraFldUnitConverter() {}
|
|
Shinya Kitaoka |
120a6e |
TUnitConverter * clone() const {return new
|
|
Shinya Kitaoka |
120a6e |
VerticalCameraFldUnitConverter(*this);}
|
|
Toshihiro Shimizu |
890ddd |
double convertTo(double v) const {return v*m_factor;}
|
|
Toshihiro Shimizu |
890ddd |
double convertFrom(double v) const {return v/m_factor;}
|
|
Toshihiro Shimizu |
890ddd |
};
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
double VerticalCameraFldUnitConverter::m_factor = 1;
|
|
Toshihiro Shimizu |
890ddd |
*/
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
namespace UnitParameters {
|
|
Toshihiro Shimizu |
890ddd |
|
|
Campbell Barton |
8c6c57 |
static std::pair<double, double=""> dummyCurrentDpiGetter() {</double,>
|
|
Shinya Kitaoka |
120a6e |
return std::make_pair<double, double="">(72, 72);</double,>
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
CurrentDpiGetter currentDpiGetter = &dummyCurrentDpiGetter;
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
void setCurrentDpiGetter(CurrentDpiGetter f) { currentDpiGetter = f; }
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//-------------------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
d1f6c4 |
class VerticalFldUnitConverter final : public TUnitConverter {
|
|
Shinya Kitaoka |
120a6e |
double m_factor;
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
public:
|
|
Shinya Kitaoka |
120a6e |
static double m_fieldGuideAspectRatio;
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
VerticalFldUnitConverter(double factor) : m_factor(factor) {}
|
|
Shinya Kitaoka |
38fd86 |
TUnitConverter *clone() const override {
|
|
Shinya Kitaoka |
38fd86 |
return new VerticalFldUnitConverter(*this);
|
|
Shinya Kitaoka |
38fd86 |
}
|
|
Shinya Kitaoka |
473e70 |
double convertTo(double v) const override {
|
|
Shinya Kitaoka |
120a6e |
return v * m_fieldGuideAspectRatio * m_factor;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
473e70 |
double convertFrom(double v) const override {
|
|
Shinya Kitaoka |
120a6e |
return v / (m_fieldGuideAspectRatio * m_factor);
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Toshihiro Shimizu |
890ddd |
};
|
|
Toshihiro Shimizu |
890ddd |
double VerticalFldUnitConverter::m_fieldGuideAspectRatio = 1.38;
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//-------------------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
namespace UnitParameters {
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
void setFieldGuideAspectRatio(double ar) {
|
|
Shinya Kitaoka |
120a6e |
assert(ar > 0);
|
|
Shinya Kitaoka |
120a6e |
VerticalFldUnitConverter::m_fieldGuideAspectRatio = ar;
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
double getFieldGuideAspectRatio() {
|
|
Shinya Kitaoka |
120a6e |
return VerticalFldUnitConverter::m_fieldGuideAspectRatio;
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//===================================================================
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
d1f6c4 |
class TangentConverter final : public TUnitConverter {
|
|
Toshihiro Shimizu |
890ddd |
public:
|
|
Shinya Kitaoka |
120a6e |
TangentConverter() {}
|
|
Shinya Kitaoka |
473e70 |
TUnitConverter *clone() const override { return new TangentConverter(*this); }
|
|
Shinya Kitaoka |
38fd86 |
double convertTo(double v) const override {
|
|
Shinya Kitaoka |
38fd86 |
return atan(v) * (M_1_PI * 180.0);
|
|
Shinya Kitaoka |
38fd86 |
}
|
|
Shinya Kitaoka |
473e70 |
double convertFrom(double v) const override { return tan(v * M_PI_180); }
|
|
Toshihiro Shimizu |
890ddd |
};
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//===================================================================
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
d1f6c4 |
class TPixelUnitXConverter final : public TUnitConverter {
|
|
Toshihiro Shimizu |
890ddd |
public:
|
|
Shinya Kitaoka |
120a6e |
TPixelUnitXConverter() {}
|
|
Shinya Kitaoka |
38fd86 |
TUnitConverter *clone() const override {
|
|
Shinya Kitaoka |
38fd86 |
return new TPixelUnitXConverter(*this);
|
|
Shinya Kitaoka |
38fd86 |
}
|
|
Shinya Kitaoka |
473e70 |
double convertTo(double v) const override {
|
|
Shinya Kitaoka |
120a6e |
return v * UnitParameters::currentDpiGetter().first;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
473e70 |
double convertFrom(double v) const override {
|
|
Shinya Kitaoka |
120a6e |
return v / UnitParameters::currentDpiGetter().first;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Toshihiro Shimizu |
890ddd |
};
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
d1f6c4 |
class TPixelUnitYConverter final : public TUnitConverter {
|
|
Toshihiro Shimizu |
890ddd |
public:
|
|
Shinya Kitaoka |
120a6e |
TPixelUnitYConverter() {}
|
|
Shinya Kitaoka |
38fd86 |
TUnitConverter *clone() const override {
|
|
Shinya Kitaoka |
38fd86 |
return new TPixelUnitYConverter(*this);
|
|
Shinya Kitaoka |
38fd86 |
}
|
|
Shinya Kitaoka |
473e70 |
double convertTo(double v) const override {
|
|
Shinya Kitaoka |
120a6e |
return v * UnitParameters::currentDpiGetter().second;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
473e70 |
double convertFrom(double v) const override {
|
|
Shinya Kitaoka |
120a6e |
return v / UnitParameters::currentDpiGetter().second;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Toshihiro Shimizu |
890ddd |
};
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//===================================================================
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
3bfa54 |
TUnit::TUnit(std::wstring ext, TUnitConverter *converter)
|
|
Shinya Kitaoka |
120a6e |
: m_defaultExtension(ext), m_converter(converter) {
|
|
Shinya Kitaoka |
120a6e |
m_extensions.push_back(ext);
|
|
Shinya Kitaoka |
120a6e |
if (m_converter == 0) m_converter = new TSimpleUnitConverter();
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//-------------------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
TUnit::TUnit(const TUnit &src)
|
|
Shinya Kitaoka |
120a6e |
: m_defaultExtension(src.m_defaultExtension)
|
|
Shinya Kitaoka |
120a6e |
, m_extensions(src.m_extensions)
|
|
Shinya Kitaoka |
120a6e |
, m_converter(src.m_converter->clone()) {}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//-------------------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
TUnit::~TUnit() { delete m_converter; }
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//-------------------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
void TUnit::addExtension(std::wstring ext) {
|
|
Shinya Kitaoka |
120a6e |
if (std::find(m_extensions.begin(), m_extensions.end(), ext) ==
|
|
Shinya Kitaoka |
120a6e |
m_extensions.end())
|
|
Shinya Kitaoka |
120a6e |
m_extensions.push_back(ext);
|
|
Shinya Kitaoka |
120a6e |
if (m_defaultExtension.empty()) m_defaultExtension = ext;
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//-------------------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
bool TUnit::isExtension(std::wstring ext) const {
|
|
Shinya Kitaoka |
120a6e |
return std::find(m_extensions.begin(), m_extensions.end(), ext) !=
|
|
Shinya Kitaoka |
120a6e |
m_extensions.end();
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//-------------------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
void TUnit::setDefaultExtension(std::wstring ext) {
|
|
Shinya Kitaoka |
120a6e |
if (!ext.empty() &&
|
|
Shinya Kitaoka |
120a6e |
std::find(m_extensions.begin(), m_extensions.end(), ext) ==
|
|
Shinya Kitaoka |
120a6e |
m_extensions.end())
|
|
Shinya Kitaoka |
120a6e |
m_extensions.push_back(ext);
|
|
Shinya Kitaoka |
120a6e |
m_defaultExtension = ext;
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//===================================================================
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
3bfa54 |
TMeasure::TMeasure(std::string name, TUnit *mainUnit)
|
|
Shinya Kitaoka |
120a6e |
: m_name(name)
|
|
Shinya Kitaoka |
120a6e |
, m_mainUnit(0)
|
|
Shinya Kitaoka |
120a6e |
, m_standardUnit(0)
|
|
Shinya Kitaoka |
120a6e |
, m_currentUnit(0)
|
|
Shinya Kitaoka |
120a6e |
, m_defaultValue(0) {
|
|
Shinya Kitaoka |
120a6e |
add(mainUnit);
|
|
Shinya Kitaoka |
120a6e |
m_mainUnit = m_currentUnit = m_standardUnit = mainUnit;
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//-------------------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
TMeasure::TMeasure(const TMeasure &src)
|
|
Shinya Kitaoka |
120a6e |
: m_name(src.m_name)
|
|
Shinya Kitaoka |
120a6e |
, m_mainUnit(src.m_mainUnit)
|
|
Shinya Kitaoka |
120a6e |
, m_currentUnit(src.m_currentUnit)
|
|
Shinya Kitaoka |
120a6e |
, m_standardUnit(src.m_standardUnit)
|
|
Shinya Kitaoka |
120a6e |
, m_defaultValue(src.m_defaultValue) {
|
|
Shinya Kitaoka |
120a6e |
std::map<std::wstring, *="" tunit="">::const_iterator it;</std::wstring,>
|
|
Shinya Kitaoka |
120a6e |
for (it = src.m_extensions.begin(); it != src.m_extensions.end(); ++it) {
|
|
Shinya Kitaoka |
120a6e |
TUnit *u = it->second;
|
|
Shinya Kitaoka |
120a6e |
assert(u);
|
|
Shinya Kitaoka |
120a6e |
const std::vector<std::wstring> &e = u->getExtensions();</std::wstring>
|
|
Shinya Kitaoka |
120a6e |
assert(std::find(e.begin(), e.end(), it->first) != e.end());
|
|
Shinya Kitaoka |
120a6e |
m_extensions[it->first] = u;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//-------------------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
TMeasure::~TMeasure() {}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//-------------------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
void TMeasure::add(TUnit *unit) {
|
|
Shinya Kitaoka |
120a6e |
const std::vector<std::wstring> &e = unit->getExtensions();</std::wstring>
|
|
Shinya Kitaoka |
120a6e |
for (int i = 0; i < (int)e.size(); i++) {
|
|
Shinya Kitaoka |
120a6e |
std::wstring ext = e[i];
|
|
Shinya Kitaoka |
120a6e |
assert(m_extensions.count(ext) == 0);
|
|
Shinya Kitaoka |
120a6e |
m_extensions[ext] = unit;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//-------------------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
TUnit *TMeasure::getUnit(std::wstring ext) const {
|
|
Shinya Kitaoka |
120a6e |
std::map<std::wstring, *="" tunit="">::const_iterator it;</std::wstring,>
|
|
Shinya Kitaoka |
120a6e |
it = m_extensions.find(ext);
|
|
Shinya Kitaoka |
120a6e |
return it == m_extensions.end() ? 0 : it->second;
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//-------------------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
void TMeasure::setCurrentUnit(TUnit *unit) {
|
|
Shinya Kitaoka |
120a6e |
assert(unit);
|
|
Shinya Kitaoka |
120a6e |
assert(m_extensions.count(unit->getDefaultExtension()) > 0);
|
|
Shinya Kitaoka |
120a6e |
m_currentUnit = unit;
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//-------------------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
void TMeasure::setStandardUnit(TUnit *unit) {
|
|
Shinya Kitaoka |
120a6e |
assert(unit);
|
|
Shinya Kitaoka |
120a6e |
assert(m_extensions.count(unit->getDefaultExtension()) > 0);
|
|
Shinya Kitaoka |
120a6e |
m_standardUnit = unit;
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//===================================================================
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
TMeasureManager::TMeasureManager() {
|
|
Shinya Kitaoka |
120a6e |
TUnit inch(L"in"), cm(L"cm", new TSimpleUnitConverter(2.54)),
|
|
Shinya Kitaoka |
120a6e |
mm(L"mm", new TSimpleUnitConverter(25.4)),
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
xfld(L"fld", new TSimpleUnitConverter(2)),
|
|
Shinya Kitaoka |
120a6e |
cameraXFld(L"fld", new TSimpleUnitConverter(1)),
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
yfld(L"fld", new VerticalFldUnitConverter(2)),
|
|
Shinya Kitaoka |
120a6e |
cameraYFld(L"fld", new VerticalFldUnitConverter(1)),
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
levelXFld(L"fld", new TSimpleUnitConverter(1)),
|
|
Shinya Kitaoka |
120a6e |
levelYFld(L"fld", new VerticalFldUnitConverter(1)),
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
internalZDepth(L"internal.zdepth"),
|
|
Shinya Kitaoka |
120a6e |
zdepth(L"zdepth", new TSimpleUnitConverter(1)), degree(L"\u00b0"),
|
|
Shinya Kitaoka |
120a6e |
scale(L"*"), percentage2(L"%"), shear(L"sh"),
|
|
Shinya Kitaoka |
120a6e |
shearAngle(L"\u00b0", new TangentConverter()),
|
|
Shinya Kitaoka |
120a6e |
percentage(L"%", new TSimpleUnitConverter(100)),
|
|
Shinya Kitaoka |
120a6e |
colorChannel(L"", new TSimpleUnitConverter(255)), dummy(L""),
|
|
Shinya Kitaoka |
120a6e |
xPixel(L"px", new TPixelUnitXConverter()),
|
|
Shinya Kitaoka |
120a6e |
yPixel(L"px", new TPixelUnitYConverter());
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
inch.addExtension(L"inch");
|
|
Shinya Kitaoka |
120a6e |
inch.addExtension(L"\"");
|
|
Shinya Kitaoka |
120a6e |
inch.addExtension(L"''");
|
|
Shinya Kitaoka |
120a6e |
inch.setDefaultExtension(L"\"");
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
xPixel.addExtension(L"pixel");
|
|
Shinya Kitaoka |
120a6e |
yPixel.addExtension(L"pixel");
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
xfld.addExtension(L"field");
|
|
Shinya Kitaoka |
120a6e |
cameraXFld.addExtension(L"field");
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
yfld.addExtension(L"field");
|
|
Shinya Kitaoka |
120a6e |
cameraYFld.addExtension(L"field");
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
levelXFld.addExtension(L"field");
|
|
Shinya Kitaoka |
120a6e |
levelYFld.addExtension(L"field");
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
xfld.addExtension(L"F");
|
|
Shinya Kitaoka |
120a6e |
yfld.addExtension(L"F");
|
|
Shinya Kitaoka |
120a6e |
cameraXFld.addExtension(L"F");
|
|
Shinya Kitaoka |
120a6e |
cameraYFld.addExtension(L"F");
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
levelXFld.addExtension(L"F");
|
|
Shinya Kitaoka |
120a6e |
levelYFld.addExtension(L"F");
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
TMeasure *length, *m;
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
length = m = new TMeasure("length", inch.clone());
|
|
Shinya Kitaoka |
120a6e |
m->add(cm.clone());
|
|
Shinya Kitaoka |
120a6e |
/*---
|
|
Shinya Kitaoka |
120a6e |
Fxの寸法パラメータは単位なし(実際にはStageInch(1 StageInch = 1/53.33333
|
|
Shinya Kitaoka |
120a6e |
inch)という値)
|
|
Shinya Kitaoka |
120a6e |
Fxの寸法パラメータからExpressionで単位のあるパラメータを参照すると、
|
|
Shinya Kitaoka |
120a6e |
カレントUnitによってFxの計算結果が変わってしまう。
|
|
Shinya Kitaoka |
120a6e |
tcomposerで用いられるカレントUnitはデフォルト値なので、
|
|
Shinya Kitaoka |
120a6e |
ここでデフォルトのカレントUnitをmmにしておくことで、
|
|
Shinya Kitaoka |
120a6e |
Unit = mm でシーンを作っておけば、作業時と同じRender結果が得られるようにする。
|
|
Shinya Kitaoka |
120a6e |
---*/
|
|
Shinya Kitaoka |
120a6e |
TUnit *mmUnit = mm.clone();
|
|
Shinya Kitaoka |
120a6e |
m->add(mmUnit);
|
|
Shinya Kitaoka |
120a6e |
m->setCurrentUnit(mmUnit);
|
|
Shinya Kitaoka |
120a6e |
add(m);
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
m = new TMeasure(*length);
|
|
Shinya Kitaoka |
120a6e |
m->setName("length.x");
|
|
Shinya Kitaoka |
120a6e |
m->add(xfld.clone());
|
|
Shinya Kitaoka |
120a6e |
m->add(xPixel.clone());
|
|
Shinya Kitaoka |
120a6e |
add(m);
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
m = new TMeasure(*length);
|
|
Shinya Kitaoka |
120a6e |
m->setName("length.y");
|
|
Shinya Kitaoka |
120a6e |
m->add(yfld.clone());
|
|
Shinya Kitaoka |
120a6e |
m->add(yPixel.clone());
|
|
Shinya Kitaoka |
120a6e |
add(m);
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
m = new TMeasure(*length);
|
|
Shinya Kitaoka |
120a6e |
m->setName("length.lx");
|
|
Shinya Kitaoka |
120a6e |
m->add(xfld.clone());
|
|
Shinya Kitaoka |
120a6e |
m->add(xPixel.clone());
|
|
Shinya Kitaoka |
120a6e |
add(m);
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
m = new TMeasure(*length);
|
|
Shinya Kitaoka |
120a6e |
m->setName("length.ly");
|
|
Shinya Kitaoka |
120a6e |
m->add(yfld.clone());
|
|
Shinya Kitaoka |
120a6e |
m->add(yPixel.clone());
|
|
Shinya Kitaoka |
120a6e |
add(m);
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
m = new TMeasure(*length);
|
|
Shinya Kitaoka |
120a6e |
m->setName("camera.lx");
|
|
Shinya Kitaoka |
120a6e |
m->add(cameraXFld.clone());
|
|
Shinya Kitaoka |
120a6e |
m->add(xPixel.clone());
|
|
Shinya Kitaoka |
120a6e |
add(m);
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
m = new TMeasure(*length);
|
|
Shinya Kitaoka |
120a6e |
m->setName("camera.ly");
|
|
Shinya Kitaoka |
120a6e |
m->add(cameraYFld.clone());
|
|
Shinya Kitaoka |
120a6e |
m->add(yPixel.clone());
|
|
Shinya Kitaoka |
120a6e |
add(m);
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
m = new TMeasure(*length);
|
|
Shinya Kitaoka |
120a6e |
m->setName("level.lx");
|
|
Shinya Kitaoka |
120a6e |
m->add(levelXFld.clone());
|
|
Shinya Kitaoka |
120a6e |
add(m);
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
m = new TMeasure(*length);
|
|
Shinya Kitaoka |
120a6e |
m->setName("level.ly");
|
|
Shinya Kitaoka |
120a6e |
m->add(levelYFld.clone());
|
|
Shinya Kitaoka |
120a6e |
add(m);
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
m = new TMeasure(*length);
|
|
Shinya Kitaoka |
120a6e |
m->setName("canvas.lx");
|
|
Shinya Kitaoka |
120a6e |
m->add(cameraXFld.clone());
|
|
Shinya Kitaoka |
120a6e |
add(m);
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
m = new TMeasure(*length);
|
|
Shinya Kitaoka |
120a6e |
m->setName("canvas.ly");
|
|
Shinya Kitaoka |
120a6e |
m->add(cameraYFld.clone());
|
|
Shinya Kitaoka |
120a6e |
add(m);
|
|
Shinya Kitaoka |
120a6e |
|
|
shun_iwasawa |
bb0d83 |
const double stage_inch = 53.33333;
|
|
shun_iwasawa |
d6df3f |
const double stage_standardDpi = 120;
|
|
Jeremy Bullock |
b99ed3 |
|
|
Shinya Kitaoka |
120a6e |
TUnit fxLength(L"fxLength"),
|
|
Jeremy Bullock |
59dbbf |
fxInch(L"in", new TSimpleUnitConverter(1 / stage_inch)),
|
|
Jeremy Bullock |
59dbbf |
fxCm(L"cm", new TSimpleUnitConverter(2.54 / stage_inch)),
|
|
Jeremy Bullock |
59dbbf |
fxMm(L"mm", new TSimpleUnitConverter(25.4 / stage_inch)),
|
|
Jeremy Bullock |
59dbbf |
fxXfld(L"fld", new TSimpleUnitConverter(2 / stage_inch)),
|
|
shun_iwasawa |
d6df3f |
fxPx(L"px", new TSimpleUnitConverter(stage_standardDpi / stage_inch));
|
|
Shinya Kitaoka |
120a6e |
fxInch.addExtension(L"inch");
|
|
Shinya Kitaoka |
120a6e |
fxInch.addExtension(L"\"");
|
|
Shinya Kitaoka |
120a6e |
fxInch.addExtension(L"''");
|
|
Shinya Kitaoka |
120a6e |
fxInch.setDefaultExtension(L"\"");
|
|
Shinya Kitaoka |
120a6e |
fxXfld.addExtension(L"field");
|
|
Shinya Kitaoka |
120a6e |
fxXfld.addExtension(L"F");
|
|
Jeremy Bullock |
b6ada4 |
fxPx.addExtension(L"pixel");
|
|
Shinya Kitaoka |
120a6e |
m = new TMeasure("fxLength", fxLength.clone());
|
|
Shinya Kitaoka |
120a6e |
m->add(fxInch.clone());
|
|
Shinya Kitaoka |
120a6e |
m->add(fxCm.clone());
|
|
Shinya Kitaoka |
120a6e |
m->add(fxMm.clone());
|
|
Shinya Kitaoka |
120a6e |
m->add(fxXfld.clone());
|
|
Jeremy Bullock |
b99ed3 |
m->add(fxPx.clone());
|
|
Shinya Kitaoka |
120a6e |
add(m);
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
m = new TMeasure("angle", degree.clone());
|
|
Shinya Kitaoka |
120a6e |
add(m);
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
m = new TMeasure("scale", scale.clone());
|
|
Shinya Kitaoka |
120a6e |
TUnit *unit = percentage.clone();
|
|
Toshihiro Shimizu |
890ddd |
m->add(unit);
|
|
Toshihiro Shimizu |
890ddd |
m->setCurrentUnit(unit);
|
|
Toshihiro Shimizu |
890ddd |
m->setStandardUnit(unit);
|
|
Toshihiro Shimizu |
890ddd |
add(m);
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
m = new TMeasure("percentage", scale.clone());
|
|
Shinya Kitaoka |
120a6e |
unit = percentage.clone();
|
|
Shinya Kitaoka |
120a6e |
m->add(unit);
|
|
Shinya Kitaoka |
120a6e |
m->setCurrentUnit(unit);
|
|
Shinya Kitaoka |
120a6e |
m->setStandardUnit(unit);
|
|
Shinya Kitaoka |
120a6e |
add(m);
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
m = new TMeasure("percentage2", percentage2.clone());
|
|
Shinya Kitaoka |
120a6e |
add(m);
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
m = new TMeasure("shear", shear.clone());
|
|
Shinya Kitaoka |
120a6e |
unit = shearAngle.clone();
|
|
Shinya Kitaoka |
120a6e |
m->add(unit);
|
|
Shinya Kitaoka |
120a6e |
m->setCurrentUnit(unit);
|
|
Shinya Kitaoka |
120a6e |
m->setStandardUnit(unit);
|
|
Shinya Kitaoka |
120a6e |
add(m);
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
m = new TMeasure("colorChannel", colorChannel.clone());
|
|
Shinya Kitaoka |
120a6e |
add(m);
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
/*
|
|
Shinya Kitaoka |
120a6e |
m = new TMeasure("zdepth", internalZDepth.clone());
|
|
Shinya Kitaoka |
120a6e |
unit = zdepth.clone();
|
|
Shinya Kitaoka |
120a6e |
m->add(unit);
|
|
Shinya Kitaoka |
120a6e |
m->setCurrentUnit(unit);
|
|
Shinya Kitaoka |
120a6e |
m->setStandardUnit(unit);
|
|
Shinya Kitaoka |
120a6e |
add(m);
|
|
Toshihiro Shimizu |
890ddd |
*/
|
|
Shinya Kitaoka |
120a6e |
m = new TMeasure("dummy", dummy.clone());
|
|
Shinya Kitaoka |
120a6e |
add(m);
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//-------------------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
void TMeasureManager::add(TMeasure *m) { m_measures[m->getName()] = m; }
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//-------------------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
TMeasure *TMeasureManager::get(std::string name) const {
|
|
Shinya Kitaoka |
120a6e |
std::map<std::string, *="" tmeasure="">::const_iterator it;</std::string,>
|
|
Shinya Kitaoka |
120a6e |
it = m_measures.find(name);
|
|
Shinya Kitaoka |
120a6e |
if (it == m_measures.end())
|
|
Shinya Kitaoka |
120a6e |
return 0;
|
|
Shinya Kitaoka |
120a6e |
else
|
|
Shinya Kitaoka |
120a6e |
return it->second;
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//===================================================================
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
3bfa54 |
TMeasuredValue::TMeasuredValue(std::string measureName)
|
|
Shinya Kitaoka |
120a6e |
: m_measure(0), m_value(0) {
|
|
Shinya Kitaoka |
120a6e |
setMeasure(measureName);
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//-------------------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
TMeasuredValue::~TMeasuredValue() {}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//-------------------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
void TMeasuredValue::setMeasure(const TMeasure *measure) {
|
|
Shinya Kitaoka |
120a6e |
assert(measure);
|
|
Shinya Kitaoka |
120a6e |
if (!measure) return;
|
|
Shinya Kitaoka |
120a6e |
m_measure = measure;
|
|
Shinya Kitaoka |
120a6e |
m_value = m_measure->getDefaultValue();
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//-------------------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
void TMeasuredValue::setMeasure(std::string measureName) {
|
|
Shinya Kitaoka |
120a6e |
setMeasure(TMeasureManager::instance()->get(measureName));
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//-------------------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
bool TMeasuredValue::setValue(std::wstring s, int *pErr) {
|
|
manongjohn |
cd95b0 |
if (s == L"" || s == L"-") {
|
|
Shinya Kitaoka |
120a6e |
if (pErr) *pErr = -1;
|
|
Shinya Kitaoka |
120a6e |
return false;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
const TUnit *unit = m_measure->getCurrentUnit();
|
|
Shinya Kitaoka |
120a6e |
double value = 0;
|
|
Shinya Kitaoka |
120a6e |
bool valueFlag = false;
|
|
Shinya Kitaoka |
120a6e |
int i = 0, len = s.length();
|
|
Shinya Kitaoka |
120a6e |
// skip blanks
|
|
Shinya Kitaoka |
120a6e |
i = s.find_first_not_of(::to_wstring(" \t"));
|
|
Shinya Kitaoka |
120a6e |
assert(i != (int)std::wstring::npos);
|
|
Shinya Kitaoka |
120a6e |
int j = i;
|
|
Shinya Kitaoka |
120a6e |
// match number
|
|
Shinya Kitaoka |
120a6e |
if (i < len && (s[i] == L'-' || s[i] == L'+')) i++;
|
|
Shinya Kitaoka |
120a6e |
while (i < len && L'0' <= s[i] && s[i] <= L'9') i++;
|
|
Shinya Kitaoka |
120a6e |
if (i < len && s[i] == L'.') {
|
|
Shinya Kitaoka |
120a6e |
i++;
|
|
Shinya Kitaoka |
120a6e |
while (i < len && L'0' <= s[i] && s[i] <= L'9') i++;
|
|
Shinya Kitaoka |
120a6e |
if (i < len && (s[i] == L'E' || s[i] == L'e')) {
|
|
Shinya Kitaoka |
120a6e |
i++;
|
|
Shinya Kitaoka |
120a6e |
if (i < len && (s[i] == L'-' || s[i] == L'+')) i++;
|
|
Shinya Kitaoka |
120a6e |
while (i < len && L'0' <= s[i] && s[i] <= L'9') i++;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
if (i > j) {
|
|
shun-iwasawa |
b932c1 |
try {
|
|
shun-iwasawa |
b932c1 |
value = std::stod(s.substr(j, i - j));
|
|
shun-iwasawa |
b932c1 |
}
|
|
shun-iwasawa |
b932c1 |
// handle exceptions
|
|
shun-iwasawa |
b932c1 |
catch (const std::invalid_argument &e) {
|
|
shun-iwasawa |
b932c1 |
return false;
|
|
shun-iwasawa |
b932c1 |
} catch (const std::out_of_range &e) {
|
|
shun-iwasawa |
b932c1 |
return false;
|
|
shun-iwasawa |
b932c1 |
}
|
|
shun-iwasawa |
b932c1 |
|
|
Shinya Kitaoka |
120a6e |
valueFlag = true;
|
|
Shinya Kitaoka |
120a6e |
// skip blanks
|
|
Shinya Kitaoka |
120a6e |
i = s.find_first_not_of(::to_wstring(" \t"), i);
|
|
Shinya Kitaoka |
120a6e |
if (i == (int)std::wstring::npos) i = s.length();
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
// remove trailing blanks
|
|
Shinya Kitaoka |
120a6e |
if (i < (int)s.length()) {
|
|
Shinya Kitaoka |
120a6e |
j = i;
|
|
Shinya Kitaoka |
120a6e |
i = s.find_last_not_of(::to_wstring(" \t"));
|
|
Shinya Kitaoka |
120a6e |
if (i == (int)std::wstring::npos) i = len - 1;
|
|
Shinya Kitaoka |
120a6e |
if (j <= i) {
|
|
Shinya Kitaoka |
120a6e |
std::wstring unitExt = s.substr(j, i + 1 - j);
|
|
Shinya Kitaoka |
120a6e |
unit = m_measure->getUnit(unitExt);
|
|
Shinya Kitaoka |
120a6e |
if (!unit) {
|
|
Shinya Kitaoka |
120a6e |
if (pErr) *pErr = -2;
|
|
Shinya Kitaoka |
120a6e |
return false;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
if (valueFlag) {
|
|
Shinya Kitaoka |
120a6e |
double newValue = unit->convertFrom(value);
|
|
Shinya Kitaoka |
120a6e |
if (m_value == newValue) {
|
|
Shinya Kitaoka |
120a6e |
if (pErr) *pErr = 0;
|
|
Shinya Kitaoka |
120a6e |
return false;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
m_value = newValue;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
if (pErr) *pErr = (valueFlag || unit != 0) ? 0 : -3;
|
|
Shinya Kitaoka |
120a6e |
return valueFlag || unit != 0;
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//-------------------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
std::wstring TMeasuredValue::toWideString(int decimals) const {
|
|
Shinya Kitaoka |
120a6e |
double v = getValue(CurrentUnit);
|
|
Shinya Kitaoka |
120a6e |
std::string s = ::to_string(v, decimals);
|
|
Shinya Kitaoka |
120a6e |
if (s.find('.') != std::string::npos) {
|
|
Shinya Kitaoka |
120a6e |
int i = s.length();
|
|
Shinya Kitaoka |
120a6e |
while (i > 0 && s[i - 1] == '0') i--;
|
|
Shinya Kitaoka |
120a6e |
if (i > 0 && s[i - 1] == '.') i--;
|
|
Shinya Kitaoka |
120a6e |
if (i < (int)s.length()) s = s.substr(0, i);
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
std::wstring measure = m_measure->getCurrentUnit()->getDefaultExtension();
|
|
Shinya Kitaoka |
120a6e |
if (measure.empty()) return ::to_wstring(s);
|
|
Shinya Kitaoka |
120a6e |
return ::to_wstring(s) + L" " + measure;
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Jeremy Bullock |
771290 |
//-------------------------------------------------------------------
|
|
Jeremy Bullock |
771290 |
|
|
Jeremy Bullock |
771290 |
void TMeasuredValue::modifyValue(double direction, int precision) {
|
|
Jeremy Bullock |
771290 |
for (int i = 0; i < precision; i++) {
|
|
Jeremy Bullock |
771290 |
direction /= 10;
|
|
Jeremy Bullock |
771290 |
}
|
|
Jeremy Bullock |
771290 |
std::wstring currExtension =
|
|
Jeremy Bullock |
771290 |
getMeasure()->getCurrentUnit()->getDefaultExtension();
|
|
Jeremy Bullock |
771290 |
// use a smaller value for inches and cm
|
|
Jeremy Bullock |
771290 |
if (currExtension == L"\"" || currExtension == L"cm") direction /= 10;
|
|
Jeremy Bullock |
771290 |
double v = getValue(CurrentUnit);
|
|
Jeremy Bullock |
771290 |
setValue(CurrentUnit, v + direction);
|
|
Jeremy Bullock |
771290 |
}
|
|
Jeremy Bullock |
771290 |
|
|
Toshihiro Shimizu |
890ddd |
//===================================================================
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
namespace {
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
d1f6c4 |
class ZDepthUnitConverter final : public TUnitConverter {
|
|
Shinya Kitaoka |
120a6e |
TMeasureManager::CameraSizeProvider *m_cameraSizeProvider;
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
public:
|
|
Shinya Kitaoka |
120a6e |
ZDepthUnitConverter(TMeasureManager::CameraSizeProvider *cameraSizeProvider)
|
|
Shinya Kitaoka |
120a6e |
: m_cameraSizeProvider(cameraSizeProvider) {}
|
|
Shinya Kitaoka |
473e70 |
TUnitConverter *clone() const override {
|
|
Shinya Kitaoka |
120a6e |
return new ZDepthUnitConverter(m_cameraSizeProvider);
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
inline double getCameraSize() const { return (*m_cameraSizeProvider)(); }
|
|
Shinya Kitaoka |
38fd86 |
double convertTo(double v) const override {
|
|
Shinya Kitaoka |
38fd86 |
return (1 - v * 0.001) * getCameraSize();
|
|
Shinya Kitaoka |
38fd86 |
}
|
|
Shinya Kitaoka |
473e70 |
double convertFrom(double v) const override {
|
|
Shinya Kitaoka |
120a6e |
return (1 - v / getCameraSize()) * 1000.0;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Toshihiro Shimizu |
890ddd |
};
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//-------------------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
d1f6c4 |
class CameraZDepthUnitConverter final : public TUnitConverter {
|
|
Shinya Kitaoka |
120a6e |
TMeasureManager::CameraSizeProvider *m_cameraSizeProvider;
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
public:
|
|
Shinya Kitaoka |
120a6e |
CameraZDepthUnitConverter(
|
|
Shinya Kitaoka |
120a6e |
TMeasureManager::CameraSizeProvider *cameraSizeProvider)
|
|
Shinya Kitaoka |
120a6e |
: m_cameraSizeProvider(cameraSizeProvider) {}
|
|
Shinya Kitaoka |
473e70 |
TUnitConverter *clone() const override {
|
|
Shinya Kitaoka |
120a6e |
return new CameraZDepthUnitConverter(m_cameraSizeProvider);
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
inline double getCameraSize() const { return (*m_cameraSizeProvider)(); }
|
|
Shinya Kitaoka |
38fd86 |
double convertTo(double v) const override {
|
|
Shinya Kitaoka |
38fd86 |
return (1 + v * 0.001) * getCameraSize();
|
|
Shinya Kitaoka |
38fd86 |
}
|
|
Shinya Kitaoka |
473e70 |
double convertFrom(double v) const override {
|
|
Shinya Kitaoka |
120a6e |
return (v / getCameraSize() - 1) * 1000.0;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Toshihiro Shimizu |
890ddd |
};
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//===================================================================
|
|
Toshihiro Shimizu |
890ddd |
/*-- Zのカーブのハンドルの長さは0=0となるようにしなければならない --*/
|
|
Shinya Kitaoka |
d1f6c4 |
class ZDepthHandleUnitConverter final : public TUnitConverter {
|
|
Shinya Kitaoka |
120a6e |
TMeasureManager::CameraSizeProvider *m_cameraSizeProvider;
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
public:
|
|
Shinya Kitaoka |
120a6e |
ZDepthHandleUnitConverter(
|
|
Shinya Kitaoka |
120a6e |
TMeasureManager::CameraSizeProvider *cameraSizeProvider)
|
|
Shinya Kitaoka |
120a6e |
: m_cameraSizeProvider(cameraSizeProvider) {}
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
473e70 |
TUnitConverter *clone() const override {
|
|
Shinya Kitaoka |
120a6e |
return new ZDepthHandleUnitConverter(m_cameraSizeProvider);
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
inline double getCameraSize() const { return (*m_cameraSizeProvider)(); }
|
|
Shinya Kitaoka |
38fd86 |
double convertTo(double v) const override {
|
|
Shinya Kitaoka |
38fd86 |
return -v * 0.001 * getCameraSize();
|
|
Shinya Kitaoka |
38fd86 |
}
|
|
Shinya Kitaoka |
38fd86 |
double convertFrom(double v) const override {
|
|
Shinya Kitaoka |
38fd86 |
return (-v / getCameraSize()) * 1000.0;
|
|
Shinya Kitaoka |
38fd86 |
}
|
|
Toshihiro Shimizu |
890ddd |
};
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
d1f6c4 |
class CameraZDepthHandleUnitConverter final : public TUnitConverter {
|
|
Shinya Kitaoka |
120a6e |
TMeasureManager::CameraSizeProvider *m_cameraSizeProvider;
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
public:
|
|
Shinya Kitaoka |
120a6e |
CameraZDepthHandleUnitConverter(
|
|
Shinya Kitaoka |
120a6e |
TMeasureManager::CameraSizeProvider *cameraSizeProvider)
|
|
Shinya Kitaoka |
120a6e |
: m_cameraSizeProvider(cameraSizeProvider) {}
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
473e70 |
TUnitConverter *clone() const override {
|
|
Shinya Kitaoka |
120a6e |
return new CameraZDepthHandleUnitConverter(m_cameraSizeProvider);
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
inline double getCameraSize() const { return (*m_cameraSizeProvider)(); }
|
|
Shinya Kitaoka |
38fd86 |
double convertTo(double v) const override {
|
|
Shinya Kitaoka |
38fd86 |
return v * 0.001 * getCameraSize();
|
|
Shinya Kitaoka |
38fd86 |
}
|
|
Shinya Kitaoka |
38fd86 |
double convertFrom(double v) const override {
|
|
Shinya Kitaoka |
38fd86 |
return (v / getCameraSize()) * 1000.0;
|
|
Shinya Kitaoka |
38fd86 |
}
|
|
Toshihiro Shimizu |
890ddd |
};
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
} // namespace
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//-------------------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
void TMeasureManager::addCameraMeasures(
|
|
Shinya Kitaoka |
120a6e |
CameraSizeProvider *cameraSizeProvider) {
|
|
Shinya Kitaoka |
120a6e |
TUnit u0(L"z"), u1(L"fld", new ZDepthUnitConverter(cameraSizeProvider)),
|
|
Shinya Kitaoka |
120a6e |
u2(L"fld", new CameraZDepthUnitConverter(cameraSizeProvider)),
|
|
Shinya Kitaoka |
120a6e |
u3(L"fld", new ZDepthHandleUnitConverter(cameraSizeProvider)),
|
|
Shinya Kitaoka |
120a6e |
u4(L"fld", new CameraZDepthHandleUnitConverter(cameraSizeProvider));
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
TMeasure *zdepth = new TMeasure("zdepth", u0.clone());
|
|
Shinya Kitaoka |
120a6e |
TUnit *u = u1.clone();
|
|
Shinya Kitaoka |
120a6e |
zdepth->add(u);
|
|
Shinya Kitaoka |
120a6e |
zdepth->setCurrentUnit(u);
|
|
Shinya Kitaoka |
120a6e |
zdepth->setStandardUnit(u);
|
|
Shinya Kitaoka |
120a6e |
TMeasureManager::instance()->add(zdepth);
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
zdepth = new TMeasure("zdepth.cam", u0.clone());
|
|
Shinya Kitaoka |
120a6e |
u = u2.clone();
|
|
Shinya Kitaoka |
120a6e |
zdepth->add(u);
|
|
Shinya Kitaoka |
120a6e |
zdepth->setCurrentUnit(u);
|
|
Shinya Kitaoka |
120a6e |
zdepth->setStandardUnit(u);
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
TMeasureManager::instance()->add(zdepth);
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
zdepth = new TMeasure("zdepth.handle", u0.clone());
|
|
Shinya Kitaoka |
120a6e |
u = u3.clone();
|
|
Shinya Kitaoka |
120a6e |
zdepth->add(u);
|
|
Shinya Kitaoka |
120a6e |
zdepth->setCurrentUnit(u);
|
|
Shinya Kitaoka |
120a6e |
zdepth->setStandardUnit(u);
|
|
Shinya Kitaoka |
120a6e |
TMeasureManager::instance()->add(zdepth);
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
zdepth = new TMeasure("zdepth.cam.handle", u0.clone());
|
|
Shinya Kitaoka |
120a6e |
u = u4.clone();
|
|
Shinya Kitaoka |
120a6e |
zdepth->add(u);
|
|
Shinya Kitaoka |
120a6e |
zdepth->setCurrentUnit(u);
|
|
Shinya Kitaoka |
120a6e |
zdepth->setStandardUnit(u);
|
|
Shinya Kitaoka |
120a6e |
TMeasureManager::instance()->add(zdepth);
|
|
Toshihiro Shimizu |
890ddd |
}
|