Area.hpp
00001 //
00002 // Area Tool for SAL3D.
00003 // Copyright 2010 AQSENSE, S.L.
00004 //
00005 #if !defined (AQSENSE_SAL3DPP_AREA_HPP)
00006 #define AQSENSE_SAL3DPP_AREA_HPP
00007 
00008 #if defined (_MSC_VER) && (_MSC_VER >= 1020)
00009 #pragma once
00010 #endif
00011 
00012 #include <stdexcept>
00013 
00014 #include <sal3d/area.h>
00015 #include <sal3dpp/COP.hpp>
00016 
00017 namespace sal3d
00018 {
00064     namespace Area
00065     {
00096         inline float
00097         areaToRefLine (const sal3d::COP &cop, int row, int edgePoints)
00098         {
00099             float area;
00100             Error e;
00101             sal3d_area_to_ref_line (cop.c_cop (), row, edgePoints, &area, &e.e);
00102             if (e.e.value < 0)
00103                 throw e;
00104 
00105             return area;
00106         }
00107 
00132         inline float
00133         areaEnclosed (const std::vector<sal3d::COP> &cops, int row)
00134         {
00135             std::vector<sal3d_cop> sal3d_cops;
00136             sal3d_cops.reserve (cops.size ());
00137             for (unsigned int i = 0; i < cops.size (); ++i)
00138             {
00139                 sal3d_cops.push_back(cops[i].c_cop ());
00140             }
00141             assert (cops.size () == sal3d_cops.size ());
00142 
00143             float area;
00144             Error e;
00145             sal3d_area_area_enclosed (&sal3d_cops[0],
00146                     static_cast<int> (cops.size ()), row, &area, &e.e);
00147             if (e.e.value < 0)
00148                 throw e;
00149 
00150             return area;
00151         }
00152     }
00153 }
00154 
00155 #endif // !AQSENSE_SAL3DPP_AREA_HPP