-
Notifications
You must be signed in to change notification settings - Fork 3
Expand file tree
/
Copy pathControllerTrackingAlgorithm.cpp
More file actions
80 lines (63 loc) · 3.17 KB
/
ControllerTrackingAlgorithm.cpp
File metadata and controls
80 lines (63 loc) · 3.17 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
#include "ControllerTrackingAlgorithm.h"
#include "ControllerTrackedComponent.h"
#include "../Model/TrackerParameter.h"
#include "../View/TrackerParameterView.h"
#include "../View/TrackedElementView.h"
ControllerTrackingAlgorithm::ControllerTrackingAlgorithm(QObject *parent, IBioTrackerContext *context, ENUMS::CONTROLLERTYPE ctr) :
IController(parent, context, ctr)
{
m_BioTrackerContext = context;
}
void ControllerTrackingAlgorithm::connectControllerToController()
{
IController * ctr = m_BioTrackerContext->requestController(ENUMS::CONTROLLERTYPE::COMPONENT);
QPointer< ControllerTrackedComponent > ctrComponent = qobject_cast<ControllerTrackedComponent *>(ctr);
m_TrackedTrajectoryMajor = ctrComponent->getModel();
}
void ControllerTrackingAlgorithm::doTracking(std::shared_ptr<cv::Mat> mat, uint number)
{
qobject_cast<BioTrackerTrackingAlgorithm *>(m_Model)->doTracking(mat, number);
}
IView *ControllerTrackingAlgorithm::getTrackingParameterWidget()
{
return m_View;
}
void ControllerTrackingAlgorithm::createModel()
{
connectControllerToController();
m_TrackingParameter = new TrackerParameter(this);
m_Model = new BioTrackerTrackingAlgorithm(this, m_TrackingParameter, m_TrackedTrajectoryMajor);
}
void ControllerTrackingAlgorithm::createView()
{
m_View = new TrackerParameterView(0, this, m_TrackingParameter);
}
void ControllerTrackingAlgorithm::connectModelToController()
{
BioTrackerTrackingAlgorithm *trackingAlg = qobject_cast<BioTrackerTrackingAlgorithm *>(m_Model);
QObject::connect(trackingAlg, &BioTrackerTrackingAlgorithm::emitCvMatA, this, &ControllerTrackingAlgorithm::receiveCvMatFromTrackingAlgorithm);
QObject::connect(trackingAlg, &BioTrackerTrackingAlgorithm::emitTrackingDone, this, &ControllerTrackingAlgorithm::receiveTrackingDone);
QObject::connect(trackingAlg, &BioTrackerTrackingAlgorithm::emitChangeDisplayImage, this, &ControllerTrackingAlgorithm::receiveChangeDisplayImage);
QObject::connect(this, &ControllerTrackingAlgorithm::emitAreaDescriptorUpdate, trackingAlg, &BioTrackerTrackingAlgorithm::receiveAreaDescriptorUpdate);
QObject::connect(static_cast<TrackerParameterView*>(m_View), &TrackerParameterView::parametersChanged,
trackingAlg, &BioTrackerTrackingAlgorithm::receiveParametersChanged);
//enable the tracker to send video dimension updates to the views via signal
IController* ctr = m_BioTrackerContext->requestController(ENUMS::CONTROLLERTYPE::COMPONENT);
IView *v = qobject_cast<ControllerTrackedComponent*>(ctr)->getView();
TrackedElementView *v2 = dynamic_cast<TrackedElementView *>(v);
QObject::connect(trackingAlg, SIGNAL(emitDimensionUpdate(int, int)), v2, SLOT(rcvDimensionUpdate(int, int)));
}
void ControllerTrackingAlgorithm::receiveCvMatFromTrackingAlgorithm(std::shared_ptr<cv::Mat> mat, QString name)
{
Q_EMIT emitCvMat(mat, name);
}
void ControllerTrackingAlgorithm::receiveTrackingDone(uint framenumber)
{
Q_EMIT emitTrackingDone(framenumber);
}
void ControllerTrackingAlgorithm::receiveChangeDisplayImage(QString str) {
Q_EMIT emitChangeDisplayImage(str);
}
void ControllerTrackingAlgorithm::receiveAreaDescriptorUpdate(IModelAreaDescriptor *areaDescr) {
Q_EMIT emitAreaDescriptorUpdate(areaDescr);
}