source: trunk/src/Outputs/DS9AnnotationWriter.cc

Last change on this file was 1220, checked in by MatthewWhiting, 11 years ago

Ticket #191: Rotating the ellipse PA by -90 degrees for DS9 region output.

File size: 4.1 KB
RevLine 
[1072]1// -----------------------------------------------------------------------
2// DS9AnnotationWriter.hh: Class for writing results to ds9 annotation files.
3// -----------------------------------------------------------------------
4// Copyright (C) 2006, Matthew Whiting, ATNF
5//
6// This program is free software; you can redistribute it and/or modify it
7// under the terms of the GNU General Public License as published by the
8// Free Software Foundation; either version 2 of the License, or (at your
9// option) any later version.
10//
11// Duchamp is distributed in the hope that it will be useful, but WITHOUT
12// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
13// FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
14// for more details.
15//
16// You should have received a copy of the GNU General Public License
17// along with Duchamp; if not, write to the Free Software Foundation,
18// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA
19//
20// Correspondence concerning Duchamp may be directed to:
21//    Internet email: Matthew.Whiting [at] atnf.csiro.au
22//    Postal address: Dr. Matthew Whiting
23//                    Australia Telescope National Facility, CSIRO
24//                    PO Box 76
25//                    Epping NSW 1710
26//                    AUSTRALIA
27// -----------------------------------------------------------------------
28#include <duchamp/Outputs/DS9AnnotationWriter.hh>
29#include <duchamp/Outputs/AnnotationWriter.hh>
30#include <duchamp/Outputs/CatalogueWriter.hh>
31#include <duchamp/Outputs/FileCatalogueWriter.hh>
32#include <duchamp/Detection/detection.hh>
[1076]33#include <duchamp/Utils/utils.hh>
[1072]34#include <ios>
35#include <iostream>
[1074]36#include <iomanip>
[1072]37#include <fstream>
38#include <string>
39
40namespace duchamp {
41
42   DS9AnnotationWriter::DS9AnnotationWriter():
43    AnnotationWriter()
44  {
45  }
46
47  DS9AnnotationWriter::DS9AnnotationWriter(std::string name):
48    AnnotationWriter(name)
49  {
50  }
51
52  DS9AnnotationWriter::DS9AnnotationWriter(const DS9AnnotationWriter& other)
53  {
54    this->operator=(other);
55  }
56
57  DS9AnnotationWriter& DS9AnnotationWriter::operator= (const DS9AnnotationWriter& other)
58  {
59    if(this==&other) return *this;
60    ((AnnotationWriter &) *this) = other;
61    return *this;
62  }
63  void DS9AnnotationWriter::writeTableHeader()
64  {
65    if(this->itsOpenFlag){
[1076]66      this->itsFileStream << "global color=" << makelower(this->itsColour) << " ";
[1077]67      if(this->itsHead->isWCS()){
68        if(this->itsHead->getWCS()->equinox == 1950.) this->itsFileStream << "\nfk4\n";
69        else  this->itsFileStream << "\nfk5\n";
70      }
71      else this->itsFileStream << "\nphysical\n";
[1074]72      this->itsFileStream.setf(std::ios::fixed);
73      this->itsFileStream << std::setprecision(6);
[1072]74    }
75  }
76
[1074]77  void DS9AnnotationWriter::text(double x, double y, std::string text)
[1072]78  {
79    if(this->itsOpenFlag){
80      this->itsFileStream << "text " << x << " " << y << " {" << text<<"}\n";
81    }
82  }
[1074]83  void DS9AnnotationWriter::line(double x1, double x2, double y1, double y2)
[1072]84  {
85    if(this->itsOpenFlag){
86      this->itsFileStream << "line " << x1 << " " << y1 << " " << x2 << " " << y2 << "\n";
87    }
88  }
[1074]89  void DS9AnnotationWriter::circle(double x, double y, double r)
[1072]90  {
91    if(this->itsOpenFlag){
92      this->itsFileStream << "circle " << x << " " << y << " " << r << "\n";
93    }
94  }
[1126]95  void DS9AnnotationWriter::box(double x1, double x2, double y1, double y2, std::string label)
96  {
97    if(this->itsOpenFlag){
98      this->itsFileStream << "box " << 0.5*(x1+x2) << " " << 0.5*(y1+y2) << " " << fabs(x1-x2) << " " << fabs(y1-y2) << " 0\n";
99    }
100  }
[1074]101  void DS9AnnotationWriter::ellipse(double x, double y, double r1, double r2, double angle)
[1072]102  {
103    if(this->itsOpenFlag){
[1220]104      double angleUsed = angle - 90.;
105      this->itsFileStream << "ellipse " << x << " " << y << " " << r1 << " " << r2 << " " << angleUsed << "\n";
[1072]106    }
107  }
108
[1076]109  void DS9AnnotationWriter::joinTheDots(std::vector<double> x, std::vector<double> y)
110  {
111    if(this->itsOpenFlag){
112      if(x.size()==y.size()){
113        this->itsFileStream << "polygon";
114        for(size_t i=0;i<x.size();i++) this->itsFileStream <<" " << x[i] << " " << y[i];
115        this->itsFileStream << "\n";
116      }
117    }
118  }
[1072]119 
120}
Note: See TracBrowser for help on using the repository browser.