freerouting/src/main/java/eu/mihosoft/freerouting/board/Unit.java

164 lines
3.8 KiB
Java

/*
* Copyright (C) 2014 Alfons Wirtz
* website www.freerouting.net
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License at <http://www.gnu.org/licenses/>
* for more details.
*
* Unit.java
*
* Created on 13. Dezember 2004, 08:01
*/
package eu.mihosoft.freerouting.board;
/**
* Enum for the userunits inch, mil or millimeter.
*
* @author Alfons Wirtz
*/
public enum Unit implements java.io.Serializable
{
MIL
{
public String toString()
{
return "mil";
}
},
INCH
{
public String toString()
{
return "inch";
}
},
MM
{
public String toString()
{
return "mm";
}
},
UM
{
public String toString()
{
return "um";
}
};
/** Scales p_value from p_from_unit to p_to_unit */
public static double scale(double p_value, Unit p_from_unit, Unit p_to_unit)
{
double result;
if (p_from_unit == p_to_unit)
{
result = p_value;
}
else if (p_from_unit == INCH)
{
if(p_to_unit == MIL)
{
result = p_value * 1000.0;
}
else if (p_to_unit == MM)
{
result = p_value * INCH_TO_MM;
}
else // um
{
result = p_value * INCH_TO_MM * 1000.0;
}
}
else if (p_from_unit == MIL)
{
if(p_to_unit == INCH)
{
result = p_value / 1000.0;
}
else if(p_to_unit == MM)
{
result = p_value * INCH_TO_MM;
}
else // um
{
result = (p_value * INCH_TO_MM) * 1000.0;
}
}
else if (p_from_unit == MM)
{
if(p_to_unit == INCH)
{
result = p_value / INCH_TO_MM;
}
else if(p_to_unit == UM)
{
result = p_value * 1000;
}
else // mil
{
result = (p_value * 1000.0) / INCH_TO_MM;
}
}
else //UM
{
if(p_to_unit == INCH)
{
result = p_value / (INCH_TO_MM * 1000.0);
}
else if(p_to_unit == MM)
{
result = p_value / 1000.0;
}
else // mil
{
result = p_value / INCH_TO_MM;
}
}
return result;
}
/**
* Return the unit corresponding to the input string,
* or null, if the input string is different from mil, inch and mm.
*/
public static Unit from_string(String p_string)
{
Unit result;
if (p_string.compareToIgnoreCase("mil") == 0)
{
result = MIL;
}
else if (p_string.compareToIgnoreCase("inch") == 0)
{
result = INCH;
}
else if (p_string.compareToIgnoreCase("mm") == 0)
{
result = MM;
}
else if (p_string.compareToIgnoreCase("um") == 0)
{
result = UM;
}
else
{
result = null;
}
return result;
}
public static final double INCH_TO_MM = 25.4;
}