GUIDOLib  1.7.7
Guido Engine Internal Documentation
GRSystem.h
1 #ifndef GRSystem_H
2 #define GRSystem_H
3 
4 /*
5  GUIDO Library
6  Copyright (C) 2002 Holger Hoos, Juergen Kilian, Kai Renz
7  Copyright (C) 2003, 2004 Grame
8 
9  This Source Code Form is subject to the terms of the Mozilla Public
10  License, v. 2.0. If a copy of the MPL was not distributed with this
11  file, You can obtain one at http://mozilla.org/MPL/2.0/.
12 
13  Grame Research Laboratory, 11, cours de Verdun Gensoul 69002 Lyon - France
14  research@grame.fr
15 
16 */
17 
18 template <class T> class KF_IVector;
19 
20 #include "kf_ilist.h" // required
21 
22 #include "NEPointerList.h"
23 #include "ARBar.h"
24 #include "GRBar.h"
25 #include "GRRod.h"
26 #include "GRSystemSlice.h"
27 #include "GREvent.h"
28 
29 class ARSystemFormat;
30 class ARMusic;
31 class ARAccolade;
32 
33 class GRPage;
34 class GRStaff;
35 class GRSpring;
36 class GRAccolade;
38 
43 
44 extern GRStaff * gCurStaff;
45 
52 class GRSystem : public GREvent
53 {
54 public:
56 
58 
59  GRSystem(GRStaffManager * stfmgr, GRPage * inPage, const TYPE_TIMEPOSITION & relativeTimePositionOfSystem,
60  SSliceList ** systemslices, int count, GRSystemSlice * beginslice, ISpringVector ** pvect,
61  const ARSystemFormat * sysform, float force, float spring, float proportionnalRender,
62  bool islastsystem = false);
63  virtual ~GRSystem();
64 
65  virtual float getSystemWidthCm();
66  virtual GRPage * getGRPage() { return mPage; }
68  float getDistance() const { return mDistance; }
69  int getStaffNumber(const GRStaff * staff ) const;
70  int getNewLinePage() const { return mNewLinePage; }
71  float getCurPosX() const { return mCurPosX; }
72  const ARMusic * getARMusic() const;
73  GRSpring * getSpring( int id ) const;
74  const GRSpring * getGRSpring( int id ) const;
75  const StaffVector * getStaves() const;
76  const SSliceList * getSlices() const { return &mSystemSlices; }
77 
78  void setSpringParameter(float nconst);
79  void setSystemFormat( const ARSystemFormat * sysfrm );
80  void setDistance( float inDistance ) { mDistanceSet = true; mDistance = inDistance; }
81  void setGRPage( GRPage * inNewPage ) { mPage = inNewPage; }
82  void setMeterOfStaffs( int num, int denom );
83 
84  virtual void OnDraw( VGDevice & hdc ) const;
85  virtual void GetMap( GuidoElementSelector sel, MapCollector& f, MapInfos& infos ) const;
86  virtual void setPosition( class NVPoint const & );
87  virtual void updateBoundingBox();
88  virtual void print(std::ostream& os) const;
89  virtual void accept (GRVisitor& visitor);
90 
91  void addSystemTag( GRNotationElement * mytag );
92  void addBar( GRBar * mybar, enum GRSystem::BARTYPE btype, GRStaff * inStaff );
93  void addToSpring(GRNotationElement * el, int id );
94  void addStaff( GRStaff * newStaff, int num );
95 
96  bool IsDistanceSet() const { return mDistanceSet; }
97  void notifyAccoladeTag( const ARAccolade * inAccoladeTag );
98 
99  void FinishSystem();
100  void FinishSystem( ISpringVector * pvect, IRodList * prods1, IRodList * prods2,
101  GRSpaceForceFunction2 * psff, const TYPE_TIMEPOSITION & tp, int lastline = 0);
102  void checkCollisions (TCollisions& state, bool lyrics) const;
103  float getNotesDensity () const;
104  const GRSystemSlice* lastSlice() const { return mSystemSlices.GetTail(); }
105 
107  static int sSystemID;
108 
109 protected:
110  void dospacing();
111 // void DrawAccolade( VGDevice & hdc, const NVPoint & leftTop, const NVPoint & leftBottom, int id ) const;
112  void DrawSystemSprings( VGDevice & hdc ) const;
113  void DrawSystemForce( VGDevice & hdc ) const;
114  void AddSystemSlice( GRSystemSlice * inSlice );
115  void InitForceFunction (GRStaffManager * staffmgr, SSliceList ** psystemslices, int count);
116  void AdjustForceFunction (GRSliceHeight &sliceheight, int &startspring, int &endspring, float optForce);
117  GRStaff * ComputeBoundingBox(GRSliceHeight &sliceheight);
118 
120 
121  float mSystemforce; // The force used to stretch the system
122  float mMarginLeft; // Margin to the Left (=indent)
123  float mDistance;
125  bool mIsLastLine; // was int
126 
127  // this is returned by GRStaffManager.
129 
130 
131  // we have two rodlists, one simple one with simple rods (spanning exactly one spring)
132  // and another one with complex rods (spanning more than one spring).
133  // These both are returned by the StaffManager:
137 
139 
140  float mOldPosX;
142  float mCurPosX;
145 
146  // GRAccoladeList mAccolades; // TODO
147  std::vector<GRAccolade *> mAccolade; // TEMP
148 
149 private:
150  const GRStaff* getStaff (int index) const;
151  void checkCollisions (TCollisions& state, std::vector<const GRNotationElement*>& elts) const;
152  float checkCollision (const GRNotationElement* e1, const GRNotationElement* e2) const;
153  void DrawAccolade( VGDevice & hdc, const GRSystemSlice * slice, const GRStaff * staff) const;
154  void HandleStaffOnOff (GuidoPos pos, const GRSystemSlice * slice) const;
155  void patchTempoIssue ();
156  void fixTellPositionOrder ();
157 
158  GRPage* mPage;
159  StaffVector* mStaffs;
160  NVPoint mNextStaffPosition;
161 };
162 
163 #endif
164 
165 
GRBar
Measure bar.
Definition: GRBar.h:29
GRSystem::STAFF
Definition: GRSystem.h:57
GRVisitor
Definition: GRVisitor.h:39
GRSystem::GRSystem
GRSystem(GRStaffManager *stfmgr, GRPage *inPage, const TYPE_TIMEPOSITION &relativeTimePositionOfSystem, SSliceList **systemslices, int count, GRSystemSlice *beginslice, ISpringVector **pvect, const ARSystemFormat *sysform, float force, float spring, float proportionnalRender, bool islastsystem=false)
GRSystem::InitForceFunction
void InitForceFunction(GRStaffManager *staffmgr, SSliceList **psystemslices, int count)
GRSystem::complexrods
IRodList * complexrods
Definition: GRSystem.h:135
GRSystem::getGRSpring
const GRSpring * getGRSpring(int id) const
GRSystem::mNewLinePage
int mNewLinePage
Definition: GRSystem.h:141
MapCollector
an abstract class to be provided by clients to collect mappings
Definition: GUIDOScoreMap.h:109
GRSystem::MENSUR
Definition: GRSystem.h:57
GRSystem::updateBoundingBox
virtual void updateBoundingBox()
GRSystem::ComputeBoundingBox
GRStaff * ComputeBoundingBox(GRSliceHeight &sliceheight)
GRSystem::mIsLastLine
bool mIsLastLine
Definition: GRSystem.h:125
GRPage
Graphical representation of a score page. Contains one or more instances of class GRSystem.
Definition: GRPage.h:40
GRSystem::accept
virtual void accept(GRVisitor &visitor)
TCollisions
Definition: TCollisions.h:53
GRSystem::addStaff
void addStaff(GRStaff *newStaff, int num)
GRSpring
Used with rods and space fore functions.
Definition: GRSpring.h:38
GRStaffManager
This class manages the staffs of a system.
Definition: GRStaffManager.h:160
GRSystem::setPosition
virtual void setPosition(class NVPoint const &)
Fraction
Numerator and denominator.
Definition: Fraction.h:23
GRSystem::mCurPosX
float mCurPosX
Definition: GRSystem.h:142
GRSliceHeight
This class manages the Height of Slices.
Definition: GRSliceHeight.h:32
GRNotationElement
parent class for all notation elements.
Definition: GRNotationElement.h:54
GRSystem::setGRPage
void setGRPage(GRPage *inNewPage)
Definition: GRSystem.h:81
KF_List::GetTail
TYPE GetTail() const
Definition: kf_list.h:160
GRSystem::OnDraw
virtual void OnDraw(VGDevice &hdc) const
GREvent
Graphical representation for an event (= has duration).
Definition: GREvent.h:61
GRSystem::getNewLinePage
int getNewLinePage() const
Definition: GRSystem.h:70
NVPoint
Definition: NVPoint.h:20
GRSystem::getGRPage
virtual GRPage * getGRPage()
Definition: GRSystem.h:66
ARBar::TRanges
std::vector< std::pair< int, int > > TRanges
Definition: ARBar.h:54
GRSystem::setMeterOfStaffs
void setMeterOfStaffs(int num, int denom)
MapInfos
A class to propagate device related information.
Definition: GObject.h:42
GRAccolade
The system accolade.
Definition: GRAccolade.h:29
GRSystem::getFirstGRSystemSlice
GRSystemSlice * getFirstGRSystemSlice() const
GRSystem::getARMusic
const ARMusic * getARMusic() const
GRSystem::barRange2ypos
GRBar::TRanges barRange2ypos(const ARBar::TRanges &r) const
GRSystem::setDistance
void setDistance(float inDistance)
Definition: GRSystem.h:80
GRSystem::mDebugSystemDate
TYPE_TIMEPOSITION mDebugSystemDate
Definition: GRSystem.h:106
GRSystem::getSpring
GRSpring * getSpring(int id) const
GRStaff
A GRStaff represents a single line of music.
Definition: GRStaff.h:181
GRSystem::sSystemID
static int sSystemID
Definition: GRSystem.h:107
GRSystem::mSpringVector
ISpringVector * mSpringVector
Definition: GRSystem.h:128
GRSystem::mDistanceSet
bool mDistanceSet
Definition: GRSystem.h:124
GRSystem::setSpringParameter
void setSpringParameter(float nconst)
GRSystem::BARTYPE
BARTYPE
Definition: GRSystem.h:57
KF_IPointerList
Definition: ARMusicalVoiceState.h:33
GRSystem::print
virtual void print(std::ostream &os) const
GRSpaceForceFunction2
This class realizes the second implementation of the space-force-function.
Definition: GRSpringForceIndex.h:99
ARSystemFormat
not yet documented
Definition: ARSystemFormat.h:45
ARAccolade
Accolade tag to group staves into accolades.
Definition: ARAccolade.h:51
GRSystem::mDistance
float mDistance
Definition: GRSystem.h:123
GRSystem::setSystemFormat
void setSystemFormat(const ARSystemFormat *sysfrm)
GRSystem::IsDistanceSet
bool IsDistanceSet() const
Definition: GRSystem.h:96
GRSystem::ACCOLADE
Definition: GRSystem.h:57
VGDevice
Generic platform independant drawing device.
Definition: VGDevice.h:68
GRSystem::notifyAccoladeTag
void notifyAccoladeTag(const ARAccolade *inAccoladeTag)
GRSystem::getStaves
const StaffVector * getStaves() const
GRSystem::GetMap
virtual void GetMap(GuidoElementSelector sel, MapCollector &f, MapInfos &infos) const
GRSystem::addSystemTag
void addSystemTag(GRNotationElement *mytag)
GRSystem::mOldPosX
float mOldPosX
Definition: GRSystem.h:140
GRSystem::addToSpring
void addToSpring(GRNotationElement *el, int id)
KF_IVector
Definition: GRPossibleBreakState.h:20
GRSystem::AdjustForceFunction
void AdjustForceFunction(GRSliceHeight &sliceheight, int &startspring, int &endspring, float optForce)
GRSystem::checkCollisions
void checkCollisions(TCollisions &state, bool lyrics) const
GRSystem::lastSlice
const GRSystemSlice * lastSlice() const
Definition: GRSystem.h:104
GRSystem::getDistance
float getDistance() const
Definition: GRSystem.h:68
GRSystem::simplerods
IRodList * simplerods
Definition: GRSystem.h:134
GRSystem::getCurPosX
float getCurPosX() const
Definition: GRSystem.h:71
GRSystemSlice
Form the basis for the optimum system-break-algorithm.
Definition: GRSystemSlice.h:55
GRSystem::mSystemforce
float mSystemforce
Definition: GRSystem.h:121
GuidoElementSelector
GuidoElementSelector
Definition: GUIDOScoreMap.h:40
GRSystem::mAccolade
std::vector< GRAccolade * > mAccolade
Definition: GRSystem.h:147
GRSystem::getNotesDensity
float getNotesDensity() const
GRSystem::mSpaceForceFunc
GRSpaceForceFunction2 * mSpaceForceFunc
Definition: GRSystem.h:136
GRSystem::FinishSystem
void FinishSystem()
GRSystem::DrawSystemSprings
void DrawSystemSprings(VGDevice &hdc) const
GRSystem
Manages a number of staffs and has a given start and end timeposition. GRSystem is the grafical repre...
Definition: GRSystem.h:52
GRSystem::~GRSystem
virtual ~GRSystem()
GRSystem::mZeroSpaceList
NEPointerList mZeroSpaceList
Definition: GRSystem.h:143
GRSystem::dospacing
void dospacing()
GRSystem::mSystemSlices
SSliceList mSystemSlices
Definition: GRSystem.h:138
GRSystem::AddSystemSlice
void AddSystemSlice(GRSystemSlice *inSlice)
GRSystem::addBar
void addBar(GRBar *mybar, enum GRSystem::BARTYPE btype, GRStaff *inStaff)
GRBar::TRanges
std::vector< std::pair< float, float > > TRanges
Definition: GRBar.h:32
GRSystem::mMarginLeft
float mMarginLeft
Definition: GRSystem.h:122
NEPointerList
Definition: NEPointerList.h:34
GRSystem::getSystemWidthCm
virtual float getSystemWidthCm()
GRSystem::DrawSystemForce
void DrawSystemForce(VGDevice &hdc) const
GRNotationElement::getStaffNumber
virtual int getStaffNumber() const
GRSystem::mSpaceList
NEPointerList mSpaceList
Definition: GRSystem.h:144
ARMusic
Translation of a GUIDO Segment into a class.
Definition: ARMusic.h:31
GRSystem::SYSTEM
Definition: GRSystem.h:57
GRSystem::getSlices
const SSliceList * getSlices() const
Definition: GRSystem.h:76

Guido Project Copyright © 2019 Grame-CNCM