001 /*----------------------------------------------------------------------------*/ 002 /* Copyright (c) FIRST 2008-2012. All Rights Reserved. */ 003 /* Open Source Software - may be modified and shared by FRC teams. The code */ 004 /* must be accompanied by the FIRST BSD license file in the root directory of */ 005 /* the project. */ 006 /*----------------------------------------------------------------------------*/ 007 008 package edu.wpi.first.wpilibj.image; 009 010 import com.sun.cldc.jna.Pointer; 011 import com.sun.cldc.jna.Structure; 012 013 /** 014 * 015 * @author dtjones 016 */ 017 public class EllipseMatch { 018 019 static final int ellipseMatchSize = 40; 020 public double m_xPos; 021 public double m_yPos; 022 public double m_rotation; 023 public double m_majorRadius; 024 public double m_minorRadius; 025 public double m_score; 026 027 private class EllipseMatchStructure extends Structure { 028 029 public EllipseMatchStructure(int address) { 030 useMemory(new Pointer(address, ellipseMatchSize)); 031 read(); 032 } 033 034 public void read() { 035 m_xPos = backingNativeMemory.getFloat(0); 036 m_yPos = backingNativeMemory.getFloat(4); 037 m_rotation = backingNativeMemory.getDouble(8); 038 m_majorRadius = backingNativeMemory.getDouble(16); 039 m_minorRadius = backingNativeMemory.getDouble(24); 040 m_score = backingNativeMemory.getDouble(32); 041 042 } 043 044 public void write() { 045 } 046 047 public int size() { 048 return ellipseMatchSize; 049 } 050 } 051 052 EllipseMatch(int address) { 053 new EllipseMatchStructure(address); 054 } 055 056 public String toString() { 057 return "Ellipse Match:\n" + 058 " Pos x: " + m_xPos + " y: " + m_yPos + "\n" + 059 " Radius major: " + m_majorRadius + " minor: " + m_minorRadius + "\n" + 060 " Rotation: " + m_rotation + " Score: " + m_score + "\n"; 061 } 062 063 protected static EllipseMatch[] getMatchesFromMemory(int address, int number) { 064 if (address == 0) { 065 return new EllipseMatch[0]; 066 } 067 068 EllipseMatch[] toReturn = new EllipseMatch[number]; 069 for (int i = 0; i < number; i++) { 070 toReturn[i] = new EllipseMatch(address + i * ellipseMatchSize); 071 } 072 return toReturn; 073 } 074 }