39 std::vector<peak_common_point> cPoints(points.size());
40 std::transform(points.begin(), points.end(), cPoints.begin(), [](
const auto& cppPoint) -> peak_common_point {
41 return { cppPoint.GetX(), cppPoint.GetY() };
44 return PEAK_ICV_C_ABI_PREFIX peak_icv_Region_CreateFromPoints(&m_regionHandle, cPoints.data(), cPoints.size());
90 if (m_regionHandle != other.m_regionHandle)
94 detail::ExecuteAndMapReturnCodes([&] {
95 return PEAK_ICV_C_ABI_PREFIX peak_icv_Region_Destroy(m_regionHandle);
99 detail::ExecuteAndMapReturnCodes([&] {
100 return PEAK_ICV_C_ABI_PREFIX peak_icv_Region_IncreaseUseCount(other.m_regionHandle);
102 m_regionHandle = other.m_regionHandle;
126inline std::vector<peak::common::Point> Region::GetPoints()
const
128 size_t numPoints = 0;
129 detail::ExecuteAndMapReturnCodes([&] {
130 return PEAK_ICV_C_ABI_PREFIX peak_icv_Region_GetPoints_GetCount(m_regionHandle, &numPoints);
138 std::vector<peak_common_point> points(numPoints);
139 std::vector<peak::common::Point> cppPoints{};
140 cppPoints.reserve(numPoints);
142 detail::ExecuteAndMapReturnCodes([&] {
143 return PEAK_ICV_C_ABI_PREFIX peak_icv_Region_GetPoints(m_regionHandle, points.data(), numPoints);
146 std::transform(points.begin(), points.end(), std::back_inserter(cppPoints), [](
const auto& cPoint) {
147 return peak::common::detail::BackendAccessor<peak::common::Point>::CreateInstance(cPoint);
153inline std::vector<Region> Region::GetConnectedComponents()
const
155 size_t numConnectedComponents = 0;
157 detail::ExecuteAndMapReturnCodes([&] {
158 return PEAK_ICV_C_ABI_PREFIX peak_icv_Region_GetConnectedComponents_GetCount(m_regionHandle, &numConnectedComponents);
161 if (numConnectedComponents == 0)
166 std::vector<peak_icv_region_handle> regionHandles(numConnectedComponents);
167 detail::ExecuteAndMapReturnCodes([&] {
168 return PEAK_ICV_C_ABI_PREFIX peak_icv_Region_Array_Create(regionHandles.data(), numConnectedComponents);
173 detail::ExecuteAndMapReturnCodes([&] {
174 return PEAK_ICV_C_ABI_PREFIX peak_icv_Region_GetConnectedComponents(
175 m_regionHandle, regionHandles.data(), numConnectedComponents);
178 return peak::common::detail::BackendAccessor<Region>::CreateInstances(regionHandles);
180 catch (
const std::exception&)
182 std::ignore = PEAK_ICV_C_ABI_PREFIX peak_icv_Region_Array_Destroy(regionHandles.data(), numConnectedComponents);
200 peak_common_point_f centerOfGravity{};
202 detail::ExecuteAndMapReturnCodes([&] {
203 return PEAK_ICV_C_ABI_PREFIX peak_icv_Region_GetCenterOfGravity(m_regionHandle, ¢erOfGravity);
206 return peak::common::detail::BackendAccessor<peak::common::PointF>::CreateInstance(centerOfGravity);
241 detail::ExecuteAndMapReturnCodes([&] {
242 const auto otherHandle = peak::common::detail::BackendAccessor<Region>::BackendHandle(other);
243 const auto outputRegionHandleAddress = peak::common::detail::BackendAccessor<Region>::BackendHandleAddress(outputRegion);
244 return PEAK_ICV_C_ABI_PREFIX peak_icv_Region_Intersection(m_regionHandle, otherHandle, outputRegionHandleAddress);
252 detail::ExecuteAndMapReturnCodes([&] {
253 const auto otherHandle = peak::common::detail::BackendAccessor<Region>::BackendHandle(other);
254 const auto outputRegionHandleAddress = peak::common::detail::BackendAccessor<Region>::BackendHandleAddress(outputRegion);
255 return PEAK_ICV_C_ABI_PREFIX peak_icv_Region_Difference(m_regionHandle, otherHandle, outputRegionHandleAddress);
263 detail::ExecuteAndMapReturnCodes([&] {
264 const auto otherHandle = peak::common::detail::BackendAccessor<Region>::BackendHandle(other);
265 const auto outputRegionHandleAddress = peak::common::detail::BackendAccessor<Region>::BackendHandleAddress(outputRegion);
266 return PEAK_ICV_C_ABI_PREFIX peak_icv_Region_Union(m_regionHandle, otherHandle, outputRegionHandleAddress);
274 detail::ExecuteAndMapReturnCodes([&] {
275 const auto seHandle = peak::common::detail::BackendAccessor<Region>::BackendHandle(structuringElement);
276 const auto outputRegionHandleAddress = peak::common::detail::BackendAccessor<Region>::BackendHandleAddress(outputRegion);
277 return PEAK_ICV_C_ABI_PREFIX peak_icv_Region_Dilation(m_regionHandle, seHandle, outputRegionHandleAddress);
285 detail::ExecuteAndMapReturnCodes([&] {
286 const auto seHandle = peak::common::detail::BackendAccessor<Region>::BackendHandle(structuringElement);
287 const auto outputRegionHandleAddress = peak::common::detail::BackendAccessor<Region>::BackendHandleAddress(outputRegion);
288 return PEAK_ICV_C_ABI_PREFIX peak_icv_Region_Erosion(m_regionHandle, seHandle, outputRegionHandleAddress);