00001 //================================================================================================= 00002 // Copyright (c) 2011, Stefan Kohlbrecher, TU Darmstadt 00003 // All rights reserved. 00004 00005 // Redistribution and use in source and binary forms, with or without 00006 // modification, are permitted provided that the following conditions are met: 00007 // * Redistributions of source code must retain the above copyright 00008 // notice, this list of conditions and the following disclaimer. 00009 // * Redistributions in binary form must reproduce the above copyright 00010 // notice, this list of conditions and the following disclaimer in the 00011 // documentation and/or other materials provided with the distribution. 00012 // * Neither the name of the Simulation, Systems Optimization and Robotics 00013 // group, TU Darmstadt nor the names of its contributors may be used to 00014 // endorse or promote products derived from this software without 00015 // specific prior written permission. 00016 00017 // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND 00018 // ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 00019 // WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 00020 // DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE FOR ANY 00021 // DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 00022 // (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 00023 // LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND 00024 // ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 00025 // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS 00026 // SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 00027 //================================================================================================= 00028 00029 #ifndef __MapDimensionProperties_h_ 00030 #define __MapDimensionProperties_h_ 00031 00032 class MapDimensionProperties 00033 { 00034 public: 00035 MapDimensionProperties() 00036 : topLeftOffset(-1.0f,-1.0f) 00037 , mapDimensions(-1,-1) 00038 , cellLength(-1.0f) 00039 {} 00040 00041 00042 MapDimensionProperties(const Eigen::Vector2f& topLeftOffsetIn, const Eigen::Vector2i& mapDimensionsIn, float cellLengthIn) 00043 : topLeftOffset(topLeftOffsetIn) 00044 , mapDimensions(mapDimensionsIn) 00045 , cellLength(cellLengthIn) 00046 { 00047 mapLimitsf = (mapDimensionsIn.cast<float>()).array() - 1.0f; 00048 } 00049 00050 bool operator==(const MapDimensionProperties& other) const 00051 { 00052 return (topLeftOffset == other.topLeftOffset) && (mapDimensions == other.mapDimensions) && (cellLength == other.cellLength); 00053 } 00054 00055 bool hasEqualDimensionProperties(const MapDimensionProperties& other) const 00056 { 00057 return (mapDimensions == other.mapDimensions); 00058 } 00059 00060 bool hasEqualTransformationProperties(const MapDimensionProperties& other) const 00061 { 00062 return (topLeftOffset == other.topLeftOffset) && (cellLength == other.cellLength); 00063 } 00064 00065 bool pointOutOfMapBounds(const Eigen::Vector2f& coords) const 00066 { 00067 return ((coords[0] < 0.0f) || (coords[0] > mapLimitsf[0]) || (coords[1] < 0.0f) || (coords[1] > mapLimitsf[1])); 00068 } 00069 00070 void setMapCellDims(const Eigen::Vector2i& newDims) 00071 { 00072 mapDimensions = newDims; 00073 mapLimitsf = (newDims.cast<float>()).array() - 2.0f; 00074 } 00075 00076 void setTopLeftOffset(const Eigen::Vector2f& topLeftOffsetIn) 00077 { 00078 topLeftOffset = topLeftOffsetIn; 00079 } 00080 00081 void setSizeX(int sX) { mapDimensions[0] = sX; }; 00082 void setSizeY(int sY) { mapDimensions[1] = sY; }; 00083 void setCellLength(float cl) { cellLength = cl; }; 00084 00085 const Eigen::Vector2f& getTopLeftOffset() const { return topLeftOffset; }; 00086 const Eigen::Vector2i& getMapDimensions() const { return mapDimensions; }; 00087 int getSizeX() const { return mapDimensions[0]; }; 00088 int getSizeY() const { return mapDimensions[1]; }; 00089 float getCellLength() const { return cellLength; }; 00090 00091 protected: 00092 Eigen::Vector2f topLeftOffset; 00093 Eigen::Vector2i mapDimensions; 00094 Eigen::Vector2f mapLimitsf; 00095 float cellLength; 00096 }; 00097 00098 #endif 00099 00100