001 /*
002 * To change this template, choose Tools | Templates
003 * and open the template in the editor.
004 */
005 package edu.wpi.first.wpilibj.image;
006
007 import com.sun.cldc.jna.Pointer;
008 import edu.wpi.first.wpilibj.image.NIVision.MeasurementType;
009 import java.util.Vector;
010
011 class ParticleFilterCriteria {
012 MeasurementType type;
013 float lower;
014 float upper;
015 boolean outsideRange;
016
017 ParticleFilterCriteria(MeasurementType type, float lower, float upper, boolean outsideRange) {
018 this.type = type;
019 this.lower = lower;
020 this.upper = upper;
021 this.outsideRange = outsideRange;
022 }
023 }
024
025 public class CriteriaCollection {
026 Vector criteria = new Vector();
027
028 public void addCriteria(MeasurementType type, float lower, float upper, boolean outsideRange) {
029 criteria.addElement(new ParticleFilterCriteria(type, lower, upper, outsideRange));
030 }
031
032 public int getNumberOfCriteria() {
033 return criteria.size();
034 }
035
036 public Pointer getCriteriaArray() {
037 Pointer p = new Pointer(criteria.size() * 5 * 4); // 5 elements each 4 bytes
038 for (int i = 0; i < criteria.size(); i++) {
039 ParticleFilterCriteria pfc = (ParticleFilterCriteria) criteria.elementAt(i);
040 p.setInt(i * 20, pfc.type.value);
041 p.setFloat(i * 20 + 4, pfc.lower);
042 p.setFloat(i * 20 + 8, pfc.upper);
043 p.setInt(i * 20 + 12, 0); // always use pixel measurements for now
044 p.setInt(i * 20 + 16, pfc.outsideRange ? 1 : 0);
045 }
046 return p;
047 }
048 }
049