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