Mercurial > hg > orthanc-stone
comparison Framework/Radiography/RadiographyMaskLayer.cpp @ 477:baf8c8d68bbc am-touch-events
cleanup
author | am@osimis.io |
---|---|
date | Wed, 13 Feb 2019 12:11:17 +0100 |
parents | a95090305dd4 |
children | 017a66a2999b |
comparison
equal
deleted
inserted
replaced
476:a95090305dd4 | 477:baf8c8d68bbc |
---|---|
250 unsigned int left; | 250 unsigned int left; |
251 unsigned int right; | 251 unsigned int right; |
252 unsigned int top; | 252 unsigned int top; |
253 unsigned int bottom; | 253 unsigned int bottom; |
254 | 254 |
255 // ComputeMaskExtent(left, right, top, bottom, corners_); | 255 ComputeMaskExtent(left, right, top, bottom, corners_); |
256 | 256 |
257 left = 0; | |
258 right = 2500; | |
259 top = 0; | |
260 bottom = 2500; | |
261 // first fill the complete image | 257 // first fill the complete image |
262 Orthanc::ImageProcessing::Set(*mask_, OUT_MASK_VALUE); | 258 Orthanc::ImageProcessing::Set(*mask_, OUT_MASK_VALUE); |
263 | |
264 | 259 |
265 { | 260 { |
266 // from http://alienryderflex.com/polygon_fill/ | 261 // from http://alienryderflex.com/polygon_fill/ |
267 std::auto_ptr<int> raiiNodeX(new int(corners_.size())); | 262 std::auto_ptr<int> raiiNodeX(new int(corners_.size())); |
268 | 263 |
277 nodes = 0; | 272 nodes = 0; |
278 j = (int)corners_.size() - 1; | 273 j = (int)corners_.size() - 1; |
279 | 274 |
280 for (i = 0; i < (int)corners_.size(); i++) | 275 for (i = 0; i < (int)corners_.size(); i++) |
281 { | 276 { |
282 if ((int)corners_[i].y < pixelY && (int)corners_[j].y >= pixelY | 277 if ((int)corners_[i].y <= pixelY && (int)corners_[j].y >= pixelY |
283 || (int)corners_[j].y < pixelY && (int)corners_[i].y >= pixelY) | 278 || (int)corners_[j].y <= pixelY && (int)corners_[i].y >= pixelY) |
284 { | 279 { |
285 nodeX[nodes++]= (int)((double)corners_[i].x + ((double)pixelY - (double)corners_[i].y)/((double)corners_[j].y - (double)corners_[i].y) *((double)corners_[j].x - (double)corners_[i].x)); | 280 nodeX[nodes++]= (int)((double)corners_[i].x + ((double)pixelY - (double)corners_[i].y)/((double)corners_[j].y - (double)corners_[i].y) *((double)corners_[j].x - (double)corners_[i].x)); |
286 } | 281 } |
287 j=i; | 282 j=i; |
288 } | 283 } |
289 | 284 |
290 // Sort the nodes, via a simple “Bubble” sort. | 285 // Sort the nodes, via a simple “Bubble” sort. |
291 i=0; | 286 i=0; |
292 while (i<nodes-1) | 287 while (i < nodes-1) |
293 { | 288 { |
294 if (nodeX[i]>nodeX[i+1]) | 289 if (nodeX[i] > nodeX[i+1]) |
295 { | 290 { |
296 swap=nodeX[i]; nodeX[i]=nodeX[i+1]; nodeX[i+1]=swap; if (i) i--; | 291 swap = nodeX[i]; |
292 nodeX[i] = nodeX[i+1]; | |
293 nodeX[i+1] = swap; | |
294 if (i) | |
295 i--; | |
297 } | 296 } |
298 else | 297 else |
299 { | 298 { |
300 i++; | 299 i++; |
301 } | 300 } |
305 // Fill the pixels between node pairs. | 304 // Fill the pixels between node pairs. |
306 for (i=0; i<nodes; i+=2) | 305 for (i=0; i<nodes; i+=2) |
307 { | 306 { |
308 if (nodeX[i ]>=(int)right) | 307 if (nodeX[i ]>=(int)right) |
309 break; | 308 break; |
310 if (nodeX[i+1]> (int)left) | 309 if (nodeX[i+1]>= (int)left) |
311 { | 310 { |
312 if (nodeX[i ]< (int)left ) | 311 if (nodeX[i ]< (int)left ) |
313 nodeX[i ]=(int)left ; | 312 nodeX[i ]=(int)left ; |
314 if (nodeX[i+1]> (int)right) | 313 if (nodeX[i+1]> (int)right) |
315 nodeX[i+1]=(int)right; | 314 nodeX[i+1]=(int)right; |
316 for (pixelX=nodeX[i]; pixelX<nodeX[i+1]; pixelX++) | 315 for (pixelX = nodeX[i]; pixelX <= nodeX[i+1]; pixelX++) |
317 { | 316 { |
318 *(row + pixelX) = IN_MASK_VALUE; | 317 *(row + pixelX) = IN_MASK_VALUE; |
319 } | 318 } |
320 } | 319 } |
321 } | 320 } |