00001
00002
00003
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