Ignore:
Timestamp:
09/07/17 16:15:00 (7 years ago)
Author:
pharms
Message:
  • changes for first VR oriented usability evaluation
File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/autoquest-core-usability/src/main/java/de/ugoe/cs/autoquest/usability/TargetDistanceRule.java

    r1918 r2162  
    1919import java.util.List; 
    2020import java.util.Map; 
     21import java.util.regex.Matcher; 
     22import java.util.regex.Pattern; 
    2123 
    22 import de.ugoe.cs.autoquest.eventcore.IEventTarget; 
    23 import de.ugoe.cs.autoquest.eventcore.gui.Scroll; 
     24import de.ugoe.cs.autoquest.eventcore.Event; 
    2425import de.ugoe.cs.autoquest.eventcore.guimodel.IGUIElement; 
    2526import de.ugoe.cs.autoquest.tasktrees.treeifc.DefaultTaskInstanceTraversingVisitor; 
     
    3738 */ 
    3839public 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*\\)"); 
    3944 
    4045    /* 
     
    7883     */ 
    7984    private int[] getTargetDistance(ITaskInstance instance) { 
    80         List<IEventTarget> eventTargets = new LinkedList<IEventTarget>(); 
    81         getEventTargets(instance, eventTargets); 
    82         int noOfGUIElements = eventTargets.size(); 
     85        List<Event> events = new LinkedList<Event>(); 
     86        getEvents(instance, events); 
     87        int noOfEvents = events.size(); 
    8388        int distance = 0; 
    8489         
    85         while (eventTargets.size() > 1) { 
    86             distance += getDistance(eventTargets.get(0), eventTargets.get(1)); 
    87             eventTargets.remove(0); 
     90        while (events.size() > 1) { 
     91            distance += getDistance(events.get(0), events.get(1)); 
     92            events.remove(0); 
    8893        } 
    8994         
    90         return new int[] { noOfGUIElements, distance }; 
     95        return new int[] { noOfEvents, distance }; 
    9196    } 
    9297 
     
    9499     * 
    95100     */ 
    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            } 
    100125        } 
    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())) { 
    102136            return 0; 
    103137        } 
    104         else { 
    105             return 1000; 
    106         } 
     138         
     139        return 1000; 
    107140    } 
    108141 
     
    110143     * 
    111144     */ 
    112     private void getEventTargets(ITaskInstance instance, final List<IEventTarget> eventTargets) { 
     145    private void getEvents(ITaskInstance instance, final List<Event> events) { 
    113146        instance.accept(new DefaultTaskInstanceTraversingVisitor() { 
    114147            @Override 
    115148            public void visit(IEventTaskInstance eventTaskInstance) { 
    116                 if (!(eventTaskInstance.getEvent().getType() instanceof Scroll)) { 
    117                     eventTargets.add(eventTaskInstance.getEvent().getTarget()); 
     149                if (!(ActionClassifier.isInefficient(eventTaskInstance.getEvent()))) { 
     150                    events.add(eventTaskInstance.getEvent()); 
    118151                } 
    119152            } 
Note: See TracChangeset for help on using the changeset viewer.