You need to sign in before continuing.
Commit 298a68aaab66a84ca2f6ef906606df3d87c59a19
1 parent
17a93ada
Traverse the transform tree using properties
Look for properties with type Transform * or QList<Transform *> and for getEvent, follow the tree using those, rather than having separate methods for different transforms with children.
Showing
4 changed files
with
24 additions
and
20 deletions
openbr/openbr_plugin.cpp
| ... | ... | @@ -1192,6 +1192,21 @@ void Transform::backProject(const TemplateList &dst, TemplateList &src) const |
| 1192 | 1192 | futures.waitForFinished(); |
| 1193 | 1193 | } |
| 1194 | 1194 | |
| 1195 | +QList<Transform *> Transform::getChildren() | |
| 1196 | +{ | |
| 1197 | + QList<Transform *> output; | |
| 1198 | + for (int i=0; i < metaObject()->propertyCount(); i++) { | |
| 1199 | + const char * prop_name = metaObject()->property(i).name(); | |
| 1200 | + const QVariant & variant = this->property(prop_name); | |
| 1201 | + | |
| 1202 | + if (variant.canConvert<Transform *>()) | |
| 1203 | + output.append(variant.value<Transform *>()); | |
| 1204 | + if (variant.canConvert<QList<Transform *> >()) | |
| 1205 | + output.append(variant.value<QList<Transform *> >()); | |
| 1206 | + } | |
| 1207 | + return output; | |
| 1208 | +} | |
| 1209 | + | |
| 1195 | 1210 | /* Distance - public methods */ |
| 1196 | 1211 | Distance *Distance::make(QString str, QObject *parent) |
| 1197 | 1212 | { | ... | ... |
openbr/openbr_plugin.h
| ... | ... | @@ -1164,11 +1164,19 @@ public: |
| 1164 | 1164 | */ |
| 1165 | 1165 | virtual TemplateEvent * getEvent(const QString & name) |
| 1166 | 1166 | { |
| 1167 | - (void) name; | |
| 1167 | + foreach(Transform * child, getChildren()) | |
| 1168 | + { | |
| 1169 | + TemplateEvent * probe = child->getEvent(name); | |
| 1170 | + if (probe) | |
| 1171 | + return probe; | |
| 1172 | + } | |
| 1173 | + | |
| 1168 | 1174 | return NULL; |
| 1169 | 1175 | } |
| 1170 | 1176 | |
| 1171 | 1177 | protected: |
| 1178 | + QList<Transform *> getChildren(); | |
| 1179 | + | |
| 1172 | 1180 | Transform(bool independent = true, bool trainable = true); /*!< \brief Construct a transform. */ |
| 1173 | 1181 | inline Transform *make(const QString &description) { return make(description, this); } /*!< \brief Make a subtransform. */ |
| 1174 | 1182 | }; | ... | ... |
openbr/plugins/meta.cpp
| ... | ... | @@ -615,12 +615,6 @@ public: |
| 615 | 615 | return output; |
| 616 | 616 | } |
| 617 | 617 | |
| 618 | - virtual TemplateEvent * getEvent(const QString & name) | |
| 619 | - { | |
| 620 | - return transform->getEvent(name); | |
| 621 | - } | |
| 622 | - | |
| 623 | - | |
| 624 | 618 | void train(const TemplateList &data) |
| 625 | 619 | { |
| 626 | 620 | transform->train(data); | ... | ... |
openbr/plugins/openbr_internal.h
| ... | ... | @@ -234,19 +234,6 @@ public: |
| 234 | 234 | return output; |
| 235 | 235 | } |
| 236 | 236 | |
| 237 | - virtual TemplateEvent * getEvent(const QString & name) | |
| 238 | - { | |
| 239 | - foreach(Transform* t, transforms ) | |
| 240 | - { | |
| 241 | - TemplateEvent * probe = t->getEvent(name); | |
| 242 | - if (probe) | |
| 243 | - return probe; | |
| 244 | - } | |
| 245 | - | |
| 246 | - return NULL; | |
| 247 | - } | |
| 248 | - | |
| 249 | - | |
| 250 | 237 | protected: |
| 251 | 238 | bool isTimeVarying; |
| 252 | 239 | ... | ... |