-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathTrackerControlFeature.java
More file actions
148 lines (108 loc) · 6.46 KB
/
Copy pathTrackerControlFeature.java
File metadata and controls
148 lines (108 loc) · 6.46 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
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
package com.htc_cs.android.vuforia.features;
import android.util.Log;
import com.htc_cs.android.vuforia.VuforiaException;
import com.htc_cs.android.vuforia.activity.ArFeaturesControl;
import com.vuforia.DataSet;
import com.vuforia.HINT;
import com.vuforia.ImageTargetBuilder;
import com.vuforia.ObjectTracker;
import com.vuforia.STORAGE_TYPE;
import com.vuforia.State;
import com.vuforia.Trackable;
import com.vuforia.TrackableSource;
import com.vuforia.Tracker;
import com.vuforia.TrackerManager;
import com.vuforia.Vuforia;
import java.util.ArrayList;
public class TrackerControlFeature {
private ArFeaturesControl arFeaturesControl;
private ObjectTracker myCurrentTracker;
private DataSet myCurrentDataset;
private int myCurrentTrackableId;
public boolean isUserDefinedTargetBuildingStarted = false;
public void onInit(int maxTargetsCount) throws VuforiaException {
TrackerManager trackerManager = TrackerManager.getInstance();
if (trackerManager == null) throw new VuforiaException.TrackerManagerInitializationException();
Tracker tracker = trackerManager.initTracker(ObjectTracker.getClassType());
if (tracker == null) throw new VuforiaException.TrackersInitializationException();
boolean success = Vuforia.setHint(HINT.HINT_MAX_SIMULTANEOUS_IMAGE_TARGETS, maxTargetsCount);
if (!success) throw new VuforiaException.TrackersInitializationException();
}
public void onDeinit() throws VuforiaException {
TrackerManager trackerManager = TrackerManager.getInstance();
if (trackerManager == null) throw new VuforiaException.TrackerManagerInitializationException();
boolean success = trackerManager.deinitTracker(ObjectTracker.getClassType());
if (!success) throw new VuforiaException.TrackersDeinitializationException();
}
public void onLoadData(String pathInAssets) throws VuforiaException {
TrackerManager trackerManager = TrackerManager.getInstance();
if (trackerManager == null) throw new VuforiaException.TrackerManagerInitializationException();
myCurrentTracker = (ObjectTracker) trackerManager.getTracker(ObjectTracker.getClassType());
if (myCurrentTracker == null) throw new VuforiaException.TrackersInitializationException();
myCurrentDataset = myCurrentTracker.createDataSet();
if (myCurrentDataset == null) throw new VuforiaException.TrackersInitializationException();
boolean success = myCurrentDataset.load(pathInAssets, STORAGE_TYPE.STORAGE_APPRESOURCE);
if (!success) throw new VuforiaException.TrackersLoadingException();
success = myCurrentTracker.activateDataSet(myCurrentDataset);
if (!success) throw new VuforiaException.TrackersLoadingException();
Log.d("countOfTrackers", String.valueOf(myCurrentDataset.getNumTrackables()));
}
public void onUnloadData() throws VuforiaException {
myCurrentDataset = null;
}
public void onStartTracker() throws VuforiaException {
if (myCurrentTracker == null) throw new VuforiaException.TrackersInitializationException();
boolean success = myCurrentTracker.start();
if (!success) throw new VuforiaException.TrackersStartException();
}
public void onStopTracker() throws VuforiaException {
if (myCurrentTracker == null) throw new VuforiaException.TrackersInitializationException();
myCurrentTracker.stop();
myCurrentTracker = null;
}
public void onTrackerStartScanningForUserDefiningTarget() throws VuforiaException.TrackersUserDefinedTargetScanningError {
if (myCurrentTracker == null) throw new VuforiaException.TrackersUserDefinedTargetScanningError();
ImageTargetBuilder imageTargetBuilder = myCurrentTracker.getImageTargetBuilder();
if (imageTargetBuilder.getFrameQuality() != ImageTargetBuilder.FRAME_QUALITY.FRAME_QUALITY_NONE) {
imageTargetBuilder.stopScan();
}
myCurrentTracker.stop();
imageTargetBuilder.startScan();
}
public int onTrackerBuildUserDefinedTarget() throws VuforiaException.TrackersUserDefinedTargetBuildingException {
if (myCurrentTracker == null) throw new VuforiaException.TrackersUserDefinedTargetBuildingException();
ImageTargetBuilder imageTargetBuilder = myCurrentTracker.getImageTargetBuilder();
int imageQuality = imageTargetBuilder.getFrameQuality();
if (imageQuality < 1) {
throw new VuforiaException.UserDefinedTargetToLowImageQualityException(imageQuality);
} else {
boolean successfullyStarted = imageTargetBuilder.build("udt-target", 760);
if (successfullyStarted) {
isUserDefinedTargetBuildingStarted = true;
return imageQuality;
} else {
isUserDefinedTargetBuildingStarted = false;
return 0;
}
}
}
public void onTrackerActivateUserDefinedTarget() throws VuforiaException.TrackersUserDefinedTargetActivateException {
if (myCurrentTracker == null) throw new VuforiaException.TrackersUserDefinedTargetActivateException();
ImageTargetBuilder imageTargetBuilder = myCurrentTracker.getImageTargetBuilder();
TrackableSource trackableSource = imageTargetBuilder.getTrackableSource();
if (trackableSource == null) throw new VuforiaException.TrackersUserDefinedTargetActivateException();
if (myCurrentDataset == null) throw new VuforiaException.TrackersUserDefinedTargetActivateException();
boolean deactivated = myCurrentTracker.deactivateDataSet(myCurrentDataset);
if (!deactivated) throw new VuforiaException.TrackersUserDefinedTargetActivateException();
boolean destroyed = myCurrentTracker.destroyDataSet(myCurrentDataset);
if (!destroyed) throw new VuforiaException.TrackersUserDefinedTargetActivateException();
myCurrentDataset = myCurrentTracker.createDataSet();
if (myCurrentDataset == null) throw new VuforiaException.TrackersUserDefinedTargetActivateException();
Trackable trackable = myCurrentDataset.createTrackable(imageTargetBuilder.getTrackableSource());
if (trackable == null) throw new VuforiaException.TrackersUserDefinedTargetActivateException();
boolean activated = myCurrentTracker.activateDataSet(myCurrentDataset);
if (!activated) throw new VuforiaException.TrackersUserDefinedTargetActivateException();
myCurrentTracker.start();
Log.d("trackerControl", "Successfully created udt");
}
}