Changeset 2162 for trunk/autoquest-core-usability/src/main/java/de/ugoe/cs/autoquest/usability/TargetDistanceRule.java
- Timestamp:
- 09/07/17 16:15:00 (7 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/autoquest-core-usability/src/main/java/de/ugoe/cs/autoquest/usability/TargetDistanceRule.java
r1918 r2162 19 19 import java.util.List; 20 20 import java.util.Map; 21 import java.util.regex.Matcher; 22 import java.util.regex.Pattern; 21 23 22 import de.ugoe.cs.autoquest.eventcore.IEventTarget; 23 import de.ugoe.cs.autoquest.eventcore.gui.Scroll; 24 import de.ugoe.cs.autoquest.eventcore.Event; 24 25 import de.ugoe.cs.autoquest.eventcore.guimodel.IGUIElement; 25 26 import de.ugoe.cs.autoquest.tasktrees.treeifc.DefaultTaskInstanceTraversingVisitor; … … 37 38 */ 38 39 public class TargetDistanceRule implements UsabilityEvaluationRule { 40 41 /** pattern for parsing target position parameter values */ 42 private Pattern targetPositionPattern = Pattern.compile 43 ("\\(\\s*(-?\\d*(\\.\\d*)?),\\s*(-?\\d*(\\.\\d*)?),\\s*(-?\\d*(\\.\\d*)?)\\s*\\)"); 39 44 40 45 /* … … 78 83 */ 79 84 private int[] getTargetDistance(ITaskInstance instance) { 80 List< IEventTarget> eventTargets = new LinkedList<IEventTarget>();81 getEvent Targets(instance, eventTargets);82 int noOf GUIElements = eventTargets.size();85 List<Event> events = new LinkedList<Event>(); 86 getEvents(instance, events); 87 int noOfEvents = events.size(); 83 88 int distance = 0; 84 89 85 while (event Targets.size() > 1) {86 distance += getDistance(event Targets.get(0), eventTargets.get(1));87 event Targets.remove(0);90 while (events.size() > 1) { 91 distance += getDistance(events.get(0), events.get(1)); 92 events.remove(0); 88 93 } 89 94 90 return new int[] { noOf GUIElements, distance };95 return new int[] { noOfEvents, distance }; 91 96 } 92 97 … … 94 99 * 95 100 */ 96 private int getDistance(IEventTarget eventTarget1, IEventTarget eventTarget2) { 97 if ((eventTarget1 instanceof IGUIElement) && (eventTarget2 instanceof IGUIElement)) { 98 return (int) 99 (1000 * (((IGUIElement) eventTarget1).getDistanceTo((IGUIElement) eventTarget2))); 101 private int getDistance(Event event1, Event event2) { 102 String location1 = event1.getParameter("targetPosition"); 103 String location2 = event2.getParameter("targetPosition"); 104 105 if ((location1 != null) && (location2 != null)) { 106 Matcher matcher1 = targetPositionPattern.matcher(location1); 107 Matcher matcher2 = targetPositionPattern.matcher(location2); 108 if (matcher1.matches() && matcher2.matches()) { 109 try { 110 double x = 111 Double.parseDouble(matcher2.group(1)) - Float.parseFloat(matcher1.group(1)); 112 113 double y = 114 Double.parseDouble(matcher2.group(3)) - Float.parseFloat(matcher1.group(3)); 115 116 double z = 117 Double.parseDouble(matcher2.group(5)) - Float.parseFloat(matcher1.group(5)); 118 119 return (int) (100 * Math.sqrt(x*x + y*y + z*z)); 120 } 121 catch (NumberFormatException e) { 122 // ignore and just continue with other variants. 123 } 124 } 100 125 } 101 else if (eventTarget1.equals(eventTarget2)) { 126 127 if ((event1.getTarget() instanceof IGUIElement) && 128 (event2.getTarget() instanceof IGUIElement)) 129 { 130 IGUIElement target1 = (IGUIElement) event1.getTarget(); 131 IGUIElement target2 = (IGUIElement) event2.getTarget(); 132 return (int) (1000 * target1.getDistanceTo(target2)); 133 } 134 135 if (event1.getTarget().equals(event2.getTarget())) { 102 136 return 0; 103 137 } 104 else { 105 return 1000; 106 } 138 139 return 1000; 107 140 } 108 141 … … 110 143 * 111 144 */ 112 private void getEvent Targets(ITaskInstance instance, final List<IEventTarget> eventTargets) {145 private void getEvents(ITaskInstance instance, final List<Event> events) { 113 146 instance.accept(new DefaultTaskInstanceTraversingVisitor() { 114 147 @Override 115 148 public void visit(IEventTaskInstance eventTaskInstance) { 116 if (!( eventTaskInstance.getEvent().getType() instanceof Scroll)) {117 event Targets.add(eventTaskInstance.getEvent().getTarget());149 if (!(ActionClassifier.isInefficient(eventTaskInstance.getEvent()))) { 150 events.add(eventTaskInstance.getEvent()); 118 151 } 119 152 }
Note: See TracChangeset
for help on using the changeset viewer.