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 }