ROOT logo
// @(#)root/qt:$Id: TQtMarker.cxx 30386 2009-09-23 19:06:28Z brun $
// Author: Valeri Fine   21/01/2002

/*************************************************************************
 * Copyright (C) 1995-2004, Rene Brun and Fons Rademakers.               *
 * Copyright (C) 2002 by Valeri Fine.                                    *
 * All rights reserved.                                                  *
 *                                                                       *
 * For the licensing terms see $ROOTSYS/LICENSE.                         *
 * For the list of contributors see $ROOTSYS/README/CREDITS.             *
 *************************************************************************/

#include "TQtRConfig.h"
#include "TQtMarker.h"
#include "TAttMarker.h"
#include "TGQt.h"
#include <QtGui/QPolygon>
#include <QtGui/QPainter>


ClassImp(TQtMarker)

////////////////////////////////////////////////////////////////////////
//
// TQtMarker - class-utility to convert the ROOT TMarker object shape 
//             into the Qt QPointArray.
//
////////////////////////////////////////////////////////////////////////

//______________________________________________________________________________
TQtMarker::TQtMarker(int n, TPoint *xy, int type) : fNumNode(n),
               fChain(0), fCindex(0), fMarkerType(type)
{
  if (type != kDot) {
     fChain.resize(n);
     TPoint *rootPoint = xy;
     for (int i=0;i<n;i++,rootPoint++)
        fChain.setPoint(i,rootPoint->fX,rootPoint->fY);
  }
}
//______________________________________________________________________________
TQtMarker::~TQtMarker(){}
//______________________________________________________________________________
TQtMarker &TQtMarker::operator=(const TAttMarker&markerAttributes)
{
   // Assign the TQtMarker from ROOT TAttMarker 
	SetMarkerAttributes(markerAttributes);
	return *this;
}
//______________________________________________________________________________
TQtMarker::TQtMarker(const TAttMarker &markerAttributes)
{
   // Create the TQtMarker from ROOT TAttMarker 
	SetMarkerAttributes(markerAttributes);
}
//______________________________________________________________________________
void TQtMarker::SetMarkerAttributes(const TAttMarker& markerAttributes)
{
   // Map Qt marker  attributes to ROOT TAttMaker parameters
   fCindex     = markerAttributes.GetMarkerColor();
   fMarkerType = markerAttributes.GetMarkerStyle();
  // to be done yet:  fNumNode    = markerAttributes.GetMarkerSize();
}
//______________________________________________________________________________
int   TQtMarker::GetNumber() const {return fNumNode;}
//______________________________________________________________________________
const QPolygon &TQtMarker::GetNodes() const {return fChain;}
//______________________________________________________________________________
int  TQtMarker::GetType() const {return fMarkerType;}

//______________________________________________________________________________
void TQtMarker::SetMarker(int n, TPoint *xy, int type)
{
//*-* Did we have a chain ?
  fNumNode = n;
  fMarkerType = type;
  if (fMarkerType != kDot) {
    fChain.resize(n);
    TPoint *rootPoint = xy;
    for (int i=0;i<n;i++,rootPoint++)
       fChain.setPoint(i,rootPoint->fX,rootPoint->fY);
  }
}

//______________________________________________________________________________
void  TQtMarker::DrawPolyMarker(QPainter &p, int n, TPoint *xy)
{
	// Draw n markers with the current attributes at positions xy.
	// p    : the external QPainter 
   // n    : number of markers to draw
	// xy   : x,y coordinates of markers
	
	/* Set marker Color */
	const QColor &mColor  = gQt->ColorIndex(fCindex);

	p.save();
	if( this->GetNumber() <= 0 )
	{
		p.setPen(mColor);
		QPolygon qtPoints(n);
		TPoint *rootPoint = xy;
		for (int i=0;i<n;i++,rootPoint++)
			qtPoints.setPoint(i,rootPoint->fX,rootPoint->fY);
		p.drawPoints(qtPoints);
	} else {
		int r = this->GetNumber()/2;
		p.setPen(mColor);
		switch (this -> GetType())
		{
		case 1:
		case 3:
		default:
			p.setBrush(mColor);
			break;
		case 0:
		case 2:
			p.setBrush(Qt::NoBrush);
			break;
		case 4:
			break;
		}

		for( int m = 0; m < n; m++ )
		{
			int i;
			switch( this->GetType() )
			{
			case 0:        /* hollow circle */
			case 1:        /* filled circle */
				p.drawEllipse(xy[m].fX-r, xy[m].fY-r, 2*r, 2*r);
				break;
			case 2:        /* hollow polygon */
			case 3:        /* filled polygon */
				{
					QPolygon mxy = this->GetNodes();
					mxy.translate(xy[m].fX,xy[m].fY);
					p.drawPolygon(mxy);
					break;
				}
			case 4:        /* segmented line */
				{
					QPolygon mxy = this->GetNodes();
					mxy.translate(xy[m].fX,xy[m].fY);
					QVector<QLine> lines(this->GetNumber());
					for( i = 0; i < this->GetNumber(); i+=2 )
						lines.push_back(QLine(mxy.point(i),mxy.point(i+1)));
					p.drawLines(lines);
					break;
				}
			}
		}
	}
	p.restore();
}
 TQtMarker.cxx:1
 TQtMarker.cxx:2
 TQtMarker.cxx:3
 TQtMarker.cxx:4
 TQtMarker.cxx:5
 TQtMarker.cxx:6
 TQtMarker.cxx:7
 TQtMarker.cxx:8
 TQtMarker.cxx:9
 TQtMarker.cxx:10
 TQtMarker.cxx:11
 TQtMarker.cxx:12
 TQtMarker.cxx:13
 TQtMarker.cxx:14
 TQtMarker.cxx:15
 TQtMarker.cxx:16
 TQtMarker.cxx:17
 TQtMarker.cxx:18
 TQtMarker.cxx:19
 TQtMarker.cxx:20
 TQtMarker.cxx:21
 TQtMarker.cxx:22
 TQtMarker.cxx:23
 TQtMarker.cxx:24
 TQtMarker.cxx:25
 TQtMarker.cxx:26
 TQtMarker.cxx:27
 TQtMarker.cxx:28
 TQtMarker.cxx:29
 TQtMarker.cxx:30
 TQtMarker.cxx:31
 TQtMarker.cxx:32
 TQtMarker.cxx:33
 TQtMarker.cxx:34
 TQtMarker.cxx:35
 TQtMarker.cxx:36
 TQtMarker.cxx:37
 TQtMarker.cxx:38
 TQtMarker.cxx:39
 TQtMarker.cxx:40
 TQtMarker.cxx:41
 TQtMarker.cxx:42
 TQtMarker.cxx:43
 TQtMarker.cxx:44
 TQtMarker.cxx:45
 TQtMarker.cxx:46
 TQtMarker.cxx:47
 TQtMarker.cxx:48
 TQtMarker.cxx:49
 TQtMarker.cxx:50
 TQtMarker.cxx:51
 TQtMarker.cxx:52
 TQtMarker.cxx:53
 TQtMarker.cxx:54
 TQtMarker.cxx:55
 TQtMarker.cxx:56
 TQtMarker.cxx:57
 TQtMarker.cxx:58
 TQtMarker.cxx:59
 TQtMarker.cxx:60
 TQtMarker.cxx:61
 TQtMarker.cxx:62
 TQtMarker.cxx:63
 TQtMarker.cxx:64
 TQtMarker.cxx:65
 TQtMarker.cxx:66
 TQtMarker.cxx:67
 TQtMarker.cxx:68
 TQtMarker.cxx:69
 TQtMarker.cxx:70
 TQtMarker.cxx:71
 TQtMarker.cxx:72
 TQtMarker.cxx:73
 TQtMarker.cxx:74
 TQtMarker.cxx:75
 TQtMarker.cxx:76
 TQtMarker.cxx:77
 TQtMarker.cxx:78
 TQtMarker.cxx:79
 TQtMarker.cxx:80
 TQtMarker.cxx:81
 TQtMarker.cxx:82
 TQtMarker.cxx:83
 TQtMarker.cxx:84
 TQtMarker.cxx:85
 TQtMarker.cxx:86
 TQtMarker.cxx:87
 TQtMarker.cxx:88
 TQtMarker.cxx:89
 TQtMarker.cxx:90
 TQtMarker.cxx:91
 TQtMarker.cxx:92
 TQtMarker.cxx:93
 TQtMarker.cxx:94
 TQtMarker.cxx:95
 TQtMarker.cxx:96
 TQtMarker.cxx:97
 TQtMarker.cxx:98
 TQtMarker.cxx:99
 TQtMarker.cxx:100
 TQtMarker.cxx:101
 TQtMarker.cxx:102
 TQtMarker.cxx:103
 TQtMarker.cxx:104
 TQtMarker.cxx:105
 TQtMarker.cxx:106
 TQtMarker.cxx:107
 TQtMarker.cxx:108
 TQtMarker.cxx:109
 TQtMarker.cxx:110
 TQtMarker.cxx:111
 TQtMarker.cxx:112
 TQtMarker.cxx:113
 TQtMarker.cxx:114
 TQtMarker.cxx:115
 TQtMarker.cxx:116
 TQtMarker.cxx:117
 TQtMarker.cxx:118
 TQtMarker.cxx:119
 TQtMarker.cxx:120
 TQtMarker.cxx:121
 TQtMarker.cxx:122
 TQtMarker.cxx:123
 TQtMarker.cxx:124
 TQtMarker.cxx:125
 TQtMarker.cxx:126
 TQtMarker.cxx:127
 TQtMarker.cxx:128
 TQtMarker.cxx:129
 TQtMarker.cxx:130
 TQtMarker.cxx:131
 TQtMarker.cxx:132
 TQtMarker.cxx:133
 TQtMarker.cxx:134
 TQtMarker.cxx:135
 TQtMarker.cxx:136
 TQtMarker.cxx:137
 TQtMarker.cxx:138
 TQtMarker.cxx:139
 TQtMarker.cxx:140
 TQtMarker.cxx:141
 TQtMarker.cxx:142
 TQtMarker.cxx:143
 TQtMarker.cxx:144
 TQtMarker.cxx:145
 TQtMarker.cxx:146
 TQtMarker.cxx:147
 TQtMarker.cxx:148
 TQtMarker.cxx:149
 TQtMarker.cxx:150
 TQtMarker.cxx:151
 TQtMarker.cxx:152
 TQtMarker.cxx:153
 TQtMarker.cxx:154