Commit 10160b94c108a83d2174f8721f95373582ddebc7

Authored by Josh Klontz
1 parent 0fb1cef2

added Distance::make

sdk/core/core.cpp
... ... @@ -252,7 +252,7 @@ private:
252 252 if (words.size() > 2) qFatal("AlgorithmCore::init invalid algorithm format.");
253 253  
254 254 transform = QSharedPointer<Transform>(Transform::make(words[0], NULL));
255   - if (words.size() > 1) distance = QSharedPointer<Distance>(Factory<Distance>::make("." + words[1]));
  255 + if (words.size() > 1) distance = QSharedPointer<Distance>(Distance::make(words[1], NULL));
256 256 }
257 257 };
258 258  
... ...
sdk/openbr_plugin.cpp
... ... @@ -497,6 +497,8 @@ QString Object::argument(int index) const
497 497 return "[" + strings.join(",") + "]";
498 498 } else if (type == "br::Transform*") {
499 499 return variant.value<Transform*>()->description();
  500 + } else if (type == "br::Distance*") {
  501 + return variant.value<Distance*>()->description();
500 502 } else if (type == "QStringList") {
501 503 return "[" + variant.toStringList().join(",") + "]";
502 504 }
... ... @@ -524,6 +526,8 @@ void Object::store(QDataStream &amp;stream) const
524 526 transform->store(stream);
525 527 } else if (type == "br::Transform*") {
526 528 property.read(this).value<Transform*>()->store(stream);
  529 + } else if (type == "br::Distance*") {
  530 + property.read(this).value<Distance*>()->store(stream);
527 531 } else if (type == "bool") {
528 532 stream << property.read(this).toBool();
529 533 } else if (type == "int") {
... ... @@ -556,6 +560,8 @@ void Object::load(QDataStream &amp;stream)
556 560 transform->load(stream);
557 561 } else if (type == "br::Transform*") {
558 562 property.read(this).value<Transform*>()->load(stream);
  563 + } else if (type == "br::Distance*") {
  564 + property.read(this).value<Distance*>()->load(stream);
559 565 } else if (type == "bool") {
560 566 bool value;
561 567 stream >> value;
... ... @@ -620,6 +626,8 @@ void Object::setProperty(const QString &amp;name, const QString &amp;value)
620 626 }
621 627 } else if (type == "br::Transform*") {
622 628 variant.setValue(Transform::make(value, this));
  629 + } else if (type == "br::Distance*") {
  630 + variant.setValue(Distance::make(value, this));
623 631 } else if (type == "QStringList") {
624 632 variant.setValue(parse(value.mid(1, value.size()-2)));
625 633 } else if (type == "bool") {
... ... @@ -630,6 +638,7 @@ void Object::setProperty(const QString &amp;name, const QString &amp;value)
630 638 } else {
631 639 variant = value;
632 640 }
  641 +
633 642 if (!QObject::setProperty(qPrintable(name), variant) && !type.isEmpty())
634 643 qFatal("Failed to set %s::%s to: %s %s",
635 644 metaObject()->className(), qPrintable(name), qPrintable(value), qPrintable(type));
... ... @@ -786,6 +795,7 @@ void br::Context::initializeQt(QString sdkPath)
786 795 qRegisterMetaType< QList<int> >();
787 796 qRegisterMetaType< br::Transform* >();
788 797 qRegisterMetaType< QList<br::Transform*> >();
  798 + qRegisterMetaType< br::Distance* >();
789 799 qRegisterMetaType< cv::Mat >();
790 800  
791 801 qInstallMsgHandler(messageHandler);
... ... @@ -1270,6 +1280,19 @@ void Transform::backProject(const TemplateList &amp;dst, TemplateList &amp;src) const
1270 1280 }
1271 1281  
1272 1282 /* Distance - public methods */
  1283 +Distance *Distance::make(QString str, QObject *parent)
  1284 +{
  1285 + // Check for custom transforms
  1286 + if (Globals->abbreviations.contains(str))
  1287 + return make(Globals->abbreviations[str], parent);
  1288 +
  1289 + File f = "." + str;
  1290 + Distance *distance = Factory<Distance>::make(f);
  1291 +
  1292 + distance->setParent(parent);
  1293 + return distance;
  1294 +}
  1295 +
1273 1296 void Distance::compare(const TemplateList &target, const TemplateList &query, Output *output) const
1274 1297 {
1275 1298 const bool stepTarget = target.size() > query.size();
... ...
sdk/openbr_plugin.h
... ... @@ -1066,6 +1066,9 @@ class BR_EXPORT Distance : public Object
1066 1066 Q_OBJECT
1067 1067  
1068 1068 public:
  1069 + virtual ~Distance() {}
  1070 + static Distance *make(QString str, QObject *parent); /*!< \brief Make a distance from a string. */
  1071 +
1069 1072 static QSharedPointer<Distance> fromAlgorithm(const QString &algorithm); /*!< \brief Retrieve an algorithm's distance. */
1070 1073 virtual void train(const TemplateList &src) { (void) src; } /*!< \brief Train the distance. */
1071 1074 virtual void compare(const TemplateList &target, const TemplateList &query, Output *output) const; /*!< \brief Compare two template lists. */
... ... @@ -1126,6 +1129,7 @@ Q_DECLARE_METATYPE(QList&lt;float&gt;)
1126 1129 Q_DECLARE_METATYPE(QList<int>)
1127 1130 Q_DECLARE_METATYPE(br::Transform*)
1128 1131 Q_DECLARE_METATYPE(QList<br::Transform*>)
  1132 +Q_DECLARE_METATYPE(br::Distance*)
1129 1133 Q_DECLARE_METATYPE(cv::Mat)
1130 1134  
1131 1135 #endif // __OPENBR_PLUGIN_H
... ...