GUIDOLib  1.7.7
Guido Engine Internal Documentation
TCollisions.h
1 /*
2  GUIDO Library
3  Copyright (C) 2016 Grame
4 
5  This Source Code Form is subject to the terms of the Mozilla Public
6  License, v. 2.0. If a copy of the MPL was not distributed with this
7  file, You can obtain one at http://mozilla.org/MPL/2.0/.
8 
9  Grame Research Laboratory, 11, cours de Verdun Gensoul 69002 Lyon - France
10  research@grame.fr
11 
12 */
13 
14 #ifndef __TCollisions__
15 #define __TCollisions__
16 
17 #include <vector>
18 #include <map>
19 #include <iostream>
20 
21 #include "NVRect.h"
22 #include "NVPoint.h"
23 #include "ARSpace.h"
24 #include "GUIDOTypes.h"
25 #include "defines.h"
26 
27 class ARMusicalObject;
28 class GRNotationElement;
29 class GRStaff;
30 class GRSystemSlice;
31 
32 // ----------------------------------------------------------------------------
33 // TCollisionInfo provides the information required to solve a collision ar AR level
35  public:
36  TCollisionInfo (const ARMusicalObject* ar, int voice, ARSpace* space)
37  : fSpace(space), fARObject(ar), fVoice(voice) {}
38 
39  void print(std::ostream& os) const;
40 
42  float space() const { return fSpace->getValue(); }
43 
44  ARSpace* fSpace; // a space element intended to solve the collision
45  const ARMusicalObject* fARObject; // the ar object after which the space should be inserted
46  int fVoice; // the corresponding ARVoice number
47 };
48 
49 std::ostream& operator<< (std::ostream& os, const TCollisionInfo* ci);
50 std::ostream& operator<< (std::ostream& os, const TCollisionInfo& ci);
51 
52 // ----------------------------------------------------------------------------
53 class TCollisions {
54  public:
55  TCollisions ();
56  TCollisions (GuidoPos lastpos);
57  virtual ~TCollisions () {}
58 
59  void setStaff (int num);
60  int getStaff() const { return fStaff; }
61  void setSystem (int num);
62  int getSystem() const { return fSystem; }
63  bool collides () const { return !fCollisions.empty(); }
64  size_t count () const { return fCollisions.size(); }
65  const std::vector<TCollisionInfo>& list () const { return fCollisions; }
66 
67  const GRNotationElement * lastElement() { return fLastElements[fStaff]; }
68  const NVRect& lastBB() { return fLastBB[fStaff]; }
69  const NVPoint yOffset() const;
70 
71  bool check (const NVRect& r, bool slice=false);
72  void update (const GRNotationElement * e, const NVRect& r);
73  void update (const GRSystemSlice * slice, const NVRect& r);
74  void reset (bool resetSystem);
75  void clearElements ();
76  void clear ();
77  void print (std::ostream& out) const;
78 
79  void resolve (const ARMusicalObject* ar, float gap);
80 
81  private:
82  bool checkElement (const NVRect& r);
83  bool checkSlice (const NVRect& r);
84 
85  std::map<int, const GRNotationElement*> fLastElements; // the previous element associated to a staff
86  std::map<int, NVRect> fLastBB; // the previous elements bounding box
87  const GRSystemSlice* fLastSlice; // the last system slice
88  NVRect fLastSliceBB; // the previous system slice bounding box
89  int fStaff; // the current staff number
90  int fSystem; // the current system number
91  std::vector<TCollisionInfo> fCollisions; // a list of space elements intended to resolve the collisions
92 };
93 
94 std::ostream& operator<< (std::ostream& os, const TCollisions& c);
95 
96 
97 #endif
ARMusicalObject::getRelativeTimePosition
virtual const TYPE_TIMEPOSITION & getRelativeTimePosition() const
Definition: ARMusicalObject.h:46
TCollisionInfo::space
float space() const
Definition: TCollisions.h:42
TCollisions::setSystem
void setSystem(int num)
TCollisions::TCollisions
TCollisions()
TCollisions::yOffset
const NVPoint yOffset() const
TCollisions
Definition: TCollisions.h:53
Fraction
Numerator and denominator.
Definition: Fraction.h:23
ARSpace
not yet documented
Definition: ARSpace.h:42
TCollisions::list
const std::vector< TCollisionInfo > & list() const
Definition: TCollisions.h:65
GRNotationElement
parent class for all notation elements.
Definition: GRNotationElement.h:54
TCollisionInfo::fARObject
const ARMusicalObject * fARObject
Definition: TCollisions.h:45
TCollisions::reset
void reset(bool resetSystem)
NVPoint
Definition: NVPoint.h:20
TCollisionInfo::print
void print(std::ostream &os) const
TCollisions::update
void update(const GRNotationElement *e, const NVRect &r)
TCollisionInfo::fSpace
ARSpace * fSpace
Definition: TCollisions.h:44
GRStaff
A GRStaff represents a single line of music.
Definition: GRStaff.h:181
TCollisions::~TCollisions
virtual ~TCollisions()
Definition: TCollisions.h:57
TCollisions::lastElement
const GRNotationElement * lastElement()
Definition: TCollisions.h:67
TCollisions::resolve
void resolve(const ARMusicalObject *ar, float gap)
TCollisions::setStaff
void setStaff(int num)
TCollisions::getStaff
int getStaff() const
Definition: TCollisions.h:60
ARSpace::getValue
virtual float getValue() const
Definition: ARSpace.h:55
NVRect
Definition: NVRect.h:22
TCollisions::check
bool check(const NVRect &r, bool slice=false)
GRSystemSlice
Form the basis for the optimum system-break-algorithm.
Definition: GRSystemSlice.h:55
TCollisionInfo::TCollisionInfo
TCollisionInfo(const ARMusicalObject *ar, int voice, ARSpace *space)
Definition: TCollisions.h:36
TCollisions::clearElements
void clearElements()
TCollisionInfo::fVoice
int fVoice
Definition: TCollisions.h:46
ARMusicalObject
The base class for all AR objects. It contains all musical information : duration and time position.
Definition: ARMusicalObject.h:33
operator<<
std::ostream & operator<<(std::ostream &os, const svgendl &eol)
TCollisions::lastBB
const NVRect & lastBB()
Definition: TCollisions.h:68
TCollisions::clear
void clear()
TCollisionInfo::date
TYPE_TIMEPOSITION date() const
Definition: TCollisions.h:41
TCollisions::collides
bool collides() const
Definition: TCollisions.h:63
TCollisionInfo
Definition: TCollisions.h:34
TCollisions::count
size_t count() const
Definition: TCollisions.h:64
TCollisions::print
void print(std::ostream &out) const
TCollisions::getSystem
int getSystem() const
Definition: TCollisions.h:62

Guido Project Copyright © 2019 Grame-CNCM