qwt_vectorfield_symbol.cpp
Go to the documentation of this file.
1 /******************************************************************************
2  * Qwt Widget Library
3  * Copyright (C) 1997 Josef Wilgen
4  * Copyright (C) 2002 Uwe Rathmann
5  *
6  * This library is free software; you can redistribute it and/or
7  * modify it under the terms of the Qwt License, Version 1.0
8  *****************************************************************************/
9 
10 #include "qwt_vectorfield_symbol.h"
11 
12 #include <qpainter.h>
13 #include <qpainterpath.h>
14 
17 {
18 }
19 
22 {
23 }
24 
26 {
27  public:
28  PrivateData( qreal headW, qreal tailW )
29  : headWidth( headW )
30  , tailWidth( tailW )
31  , length( headW + 4.0 )
32  {
33  /*
34  Arrow is drawn horizontally, pointing into positive x direction
35  with tip at 0,0.
36  */
37 
38  path.lineTo( -headWidth, headWidth );
39  path.lineTo( -headWidth, tailWidth );
40  path.lineTo( -length, tailWidth );
41  path.lineTo( -length, -tailWidth );
42  path.lineTo( -headWidth, -tailWidth );
43  path.lineTo( -headWidth, -headWidth );
44 
45  path.closeSubpath();
46  }
47 
48  void setLength( qreal l )
49  {
50  length = qMax( l, headWidth );
51 
52  path.setElementPositionAt( 3, -length, tailWidth );
53  path.setElementPositionAt( 4, -length, -tailWidth );
54  }
55 
56  const qreal headWidth;
57  const qreal tailWidth;
58  qreal length;
59 
60  QPainterPath path;
61 
62 };
63 
74 QwtVectorFieldArrow::QwtVectorFieldArrow( qreal headWidth, qreal tailWidth )
75 {
76  m_data = new PrivateData( headWidth, tailWidth );
77 }
78 
81 {
82  delete m_data;
83 }
84 
85 void QwtVectorFieldArrow::setLength( qreal length )
86 {
88 }
89 
91 {
92  return m_data->length;
93 }
94 
95 void QwtVectorFieldArrow::paint( QPainter* painter ) const
96 {
97  painter->drawPath( m_data->path );
98 }
99 
101 {
102  public:
103  PrivateData( qreal headW )
104  : headWidth( headW )
105  , length( headW + 4.0 )
106  {
107  path.lineTo( -headWidth, headWidth * 0.6 );
108  path.moveTo( 0, 0 );
109  path.lineTo( -headWidth, -headWidth * 0.6 );
110  path.moveTo( 0, 0 );
111  path.lineTo( -length, 0 );
112  }
113 
114  const qreal headWidth;
115  qreal length;
116 
117  QPainterPath path;
118 };
119 
129 {
130  m_data = new PrivateData( headWidth );
131 }
132 
135 {
136  delete m_data;
137 }
138 
140 {
141  m_data->length = length;
142 
143  const qreal headWidth = qMin( m_data->headWidth, length / 3.0 );
144 
145  QPainterPath& path = m_data->path;
146 
147  path.setElementPositionAt( 1, -headWidth, headWidth * 0.6 );
148  path.setElementPositionAt( 3, -headWidth, -headWidth * 0.6 );
149  path.setElementPositionAt( 5, -length, 0 );
150 }
151 
153 {
154  return m_data->length;
155 }
156 
157 void QwtVectorFieldThinArrow::paint(QPainter* p) const
158 {
159  p->drawPath( m_data->path );
160 }
QwtVectorFieldArrow::length
virtual qreal length() const QWT_OVERRIDE
Definition: qwt_vectorfield_symbol.cpp:90
QwtVectorFieldArrow::~QwtVectorFieldArrow
virtual ~QwtVectorFieldArrow() QWT_OVERRIDE
Destructor.
Definition: qwt_vectorfield_symbol.cpp:80
QwtVectorFieldThinArrow::setLength
virtual void setLength(qreal length) QWT_OVERRIDE
Definition: qwt_vectorfield_symbol.cpp:139
QwtVectorFieldSymbol::~QwtVectorFieldSymbol
virtual ~QwtVectorFieldSymbol()
Destructor.
Definition: qwt_vectorfield_symbol.cpp:21
QwtVectorFieldSymbol::QwtVectorFieldSymbol
QwtVectorFieldSymbol()
Constructor.
Definition: qwt_vectorfield_symbol.cpp:16
QwtVectorFieldThinArrow::PrivateData
Definition: qwt_vectorfield_symbol.cpp:100
QwtVectorFieldThinArrow::paint
virtual void paint(QPainter *) const QWT_OVERRIDE
Draw the symbol/arrow.
Definition: qwt_vectorfield_symbol.cpp:157
QwtVectorFieldThinArrow::PrivateData::PrivateData
PrivateData(qreal headW)
Definition: qwt_vectorfield_symbol.cpp:103
QwtVectorFieldThinArrow::PrivateData::path
QPainterPath path
Definition: qwt_vectorfield_symbol.cpp:117
QwtVectorFieldThinArrow::PrivateData::length
qreal length
Definition: qwt_vectorfield_symbol.cpp:115
qwt_vectorfield_symbol.h
QwtVectorFieldArrow::PrivateData
Definition: qwt_vectorfield_symbol.cpp:25
QwtVectorFieldArrow::m_data
PrivateData * m_data
Definition: qwt_vectorfield_symbol.h:73
QwtVectorFieldThinArrow::~QwtVectorFieldThinArrow
virtual ~QwtVectorFieldThinArrow() QWT_OVERRIDE
Destructor.
Definition: qwt_vectorfield_symbol.cpp:134
QwtVectorFieldArrow::PrivateData::setLength
void setLength(qreal l)
Definition: qwt_vectorfield_symbol.cpp:48
QwtVectorFieldArrow::paint
virtual void paint(QPainter *) const QWT_OVERRIDE
Draw the symbol/arrow.
Definition: qwt_vectorfield_symbol.cpp:95
QwtVectorFieldArrow::setLength
virtual void setLength(qreal length) QWT_OVERRIDE
Definition: qwt_vectorfield_symbol.cpp:85
QwtVectorFieldArrow::PrivateData::PrivateData
PrivateData(qreal headW, qreal tailW)
Definition: qwt_vectorfield_symbol.cpp:28
QwtVectorFieldArrow::PrivateData::path
QPainterPath path
Definition: qwt_vectorfield_symbol.cpp:60
QwtVectorFieldThinArrow::PrivateData::headWidth
const qreal headWidth
Definition: qwt_vectorfield_symbol.cpp:114
QwtVectorFieldThinArrow::length
virtual qreal length() const QWT_OVERRIDE
Definition: qwt_vectorfield_symbol.cpp:152
QwtVectorFieldThinArrow::QwtVectorFieldThinArrow
QwtVectorFieldThinArrow(qreal headWidth=6.0)
Constructor.
Definition: qwt_vectorfield_symbol.cpp:128
QwtVectorFieldArrow::PrivateData::tailWidth
const qreal tailWidth
Definition: qwt_vectorfield_symbol.cpp:57
QwtVectorFieldArrow::QwtVectorFieldArrow
QwtVectorFieldArrow(qreal headWidth=6.0, qreal tailWidth=1.0)
Constructor.
Definition: qwt_vectorfield_symbol.cpp:74
QwtVectorFieldArrow::PrivateData::headWidth
const qreal headWidth
Definition: qwt_vectorfield_symbol.cpp:56
QwtVectorFieldThinArrow::m_data
PrivateData * m_data
Definition: qwt_vectorfield_symbol.h:93
QwtVectorFieldArrow::PrivateData::length
qreal length
Definition: qwt_vectorfield_symbol.cpp:58


plotjuggler
Author(s): Davide Faconti
autogenerated on Mon Nov 11 2024 03:23:46