source: trunk/src/Cubes/drawBlankEdges.cc @ 1393

Last change on this file since 1393 was 1393, checked in by MatthewWhiting, 10 years ago

A large changeset that moves all use of bool arrays (ie. bool *) to std::vector<bool>. This will be a bit safer, plus potentially cheaper in memory usage. Interfaces to all stats functions with masks have changed accordingly, as well as the Gaussian smoothing functions and some spectral utility functions.

File size: 3.3 KB
Line 
1// -----------------------------------------------------------------------
2// drawBlankEdges.cc: Draw the edge of the BLANK region of the cube on
3//                    a PGPLOT map.
4// -----------------------------------------------------------------------
5// Copyright (C) 2006, Matthew Whiting, ATNF
6//
7// This program is free software; you can redistribute it and/or modify it
8// under the terms of the GNU General Public License as published by the
9// Free Software Foundation; either version 2 of the License, or (at your
10// option) any later version.
11//
12// Duchamp is distributed in the hope that it will be useful, but WITHOUT
13// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
14// FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
15// for more details.
16//
17// You should have received a copy of the GNU General Public License
18// along with Duchamp; if not, write to the Free Software Foundation,
19// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA
20//
21// Correspondence concerning Duchamp may be directed to:
22//    Internet email: Matthew.Whiting [at] atnf.csiro.au
23//    Postal address: Dr. Matthew Whiting
24//                    Australia Telescope National Facility, CSIRO
25//                    PO Box 76
26//                    Epping NSW 1710
27//                    AUSTRALIA
28// -----------------------------------------------------------------------
29#include <cpgplot.h>
30#include <duchamp/Cubes/cubeUtils.hh>
31#include <duchamp/duchamp.hh>
32#include <duchamp/param.hh>
33#include <duchamp/Utils/mycpgplot.hh>
34#include <string>
35
36namespace duchamp
37{
38
39  void drawBlankEdges(float *dataArray, size_t xdim, size_t ydim, Param &par)
40  {
41    ///  @details
42    ///  A subroutine that is designed to draw the edges of the blank
43    ///  region of the cube on a moment/detection map. Uses the same
44    ///  procedure as used in the reconstruction subroutines.
45    ///
46    ///  Note that it needs a PGPLOT device open. The colour used is the current
47    ///   PGPLOT colour.
48    ///
49    ///  \param dataArray The array of pixel values
50    ///  \param xdim      The size of the array in the x-direction.
51    ///  \param ydim      The size of the array in the y-direction.
52    ///  \param par       The Param set telling us what a BLANK pixel is.
53
54    if(par.getFlagBlankPix()){
55
56      if(!cpgtest()){
57        DUCHAMPERROR("Draw Blank Edges","There is no PGPlot device open.");
58      }
59      else{
60
61        int colour;
62        cpgqci(&colour);
63        cpgsci(DUCHAMP_BLANK_EDGE_COLOUR);
64
65        float xoff,x2,yoff,y2;
66        cpgqwin(&xoff,&x2,&yoff,&y2);
67
68        size_t size=xdim*ydim;
69        std::vector<bool> blank = par.makeBlankMask(dataArray,size);
70
71        for(size_t x=0; x<xdim; x++){// for each column...
72          for(size_t y=1;y<ydim;y++){
73            size_t current = y*xdim + x;
74            size_t previous = (y-1)*xdim + x;
75            if( (blank[current]&&!blank[previous]) ||
76                (!blank[current]&&blank[previous])   ){
77              cpgmove(x-0.5, y-0.5);
78              cpgdraw(x+0.5, y-0.5);
79            }
80          }
81        }
82     
83        for(size_t y=0; y<ydim; y++){// for each row...
84          for(size_t x=1;x<xdim;x++){
85            size_t current = y*xdim + x;
86            size_t previous = y*xdim + x-1;
87            if( (blank[current]&&!blank[previous]) ||
88                (!blank[current]&&blank[previous])   ){
89              cpgmove(x-0.5, y-0.5);
90              cpgdraw(x-0.5, y+0.5);
91            }
92          }
93        }
94
95     
96        cpgsci(colour);
97 
98      }
99
100 
101    }
102
103  }
104
105}
Note: See TracBrowser for help on using the repository browser.