123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440 |
- #include "model.h"
- #include "arbeitsview.h"
- Model::Model()
- {}
- // Fügt eine View hinzu
- void Model::addView( QWidget *v )
- {
- views.append( v );
- }
- // Aktualisiert die Views
- void Model::notifyViews()
- {
- for( QWidget *v : views )
- v->update();
- }
- // Entfernt alle Views
- void Model::removeViews()
- {
- views.clear();
- }
- // Inhalt der ArbeitsModel Klasse
- //--------------------------------
- ArbeitsModel::ArbeitsModel( MainWindow *w )
- : f( 0 ),
- deleteField( 0 ),
- mode( MOVE ),
- newPolygon( 0 ),
- window( w ),
- xScaleFactor( 1 ),
- yScaleFactor( 1 ),
- xOffset( 0 ),
- yOffset( 0 ),
- mousePressed( false ),
- rotation( 0 ),
- cutIndex( -1 ),
- showMask( 1 ),
- insertIndex( -1 ),
- moveIndex( -1 ),
- showColors( 0 ),
- showIds( 1 )
- {}
- ArbeitsModel::~ArbeitsModel()
- {
- delete deleteField;
- }
- // Transformiert einen Punkt von Bildkoordinaten nach Bildschirmkoordinaten
- QPoint ArbeitsModel::translate( QPoint p )
- {
- return QPoint( (int)((p.x()-xOffset) * xScaleFactor), (int)((p.y()-yOffset) * yScaleFactor) );
- }
- // Transformiert ein Polygon von Bildkoordinaten nach Bildschirmkoordinaten
- QPolygon ArbeitsModel::translatePolygon( QPolygon p )
- {
- QPolygon result;
- for( auto point = p.begin(); point != p.end(); point++ )
- result.append( translate( *point ) );
- return result;
- }
- // Transformiert einen Punkt von Bildschirmkoordinaten nach Bildkoordinaten
- QPoint ArbeitsModel::inverseTranslate( QPoint p )
- {
- return QPoint( (int)(p.x() / xScaleFactor + xOffset), (int)(p.y() / yScaleFactor + yOffset) );
- }
- // Setzt das ausgewählte Frame
- void ArbeitsModel::setFrame( Frame *frame )
- {
- this->f = frame;
- if( f )
- {
- image = f->getImage();
- if( xScaleFactor == INFINITY || yScaleFactor == INFINITY )
- resetZoom();
- }
- }
- // Setzt den ausgewählten Modus
- void ArbeitsModel::setMode( UserMode mode )
- {
- moveObject = ObjectPolygon();
- cutObject = ObjectPolygon();
- cutIndex = 0;
- if( mode != PIPETTE_SET )
- copyedObject = ObjectPolygon();
- this->mode = mode;
- if( mode != SELECT && mode != DELETE && deleteField )
- {
- delete deleteField;
- deleteField = 0;
- }
- }
- // Gibt den ausgewählten Modus zurück
- UserMode ArbeitsModel::getMode() const
- {
- return mode;
- }
- // Legt fest, ob die Objekt IDs angezeigt werden sollen
- void ArbeitsModel::setShowId( bool sid )
- {
- showIds = sid;
- }
- // Gibt 1 zurück, falls die ObjektIDs angezeigt werden sollen
- bool ArbeitsModel::areIdsShown() const
- {
- return showIds;
- }
- // Legt fest, ob die Maske angezeigt werden soll
- void ArbeitsModel::setShowMask( bool sm )
- {
- showMask = sm;
- }
- // Gibt 1 zurück, wenn die Maske angezeigt werden soll
- bool ArbeitsModel::isMaskShown() const
- {
- return showMask;
- }
- // Legt fest, ob die Objekte eingefärbt werden sollen
- void ArbeitsModel::setShowColors( bool sc )
- {
- showColors = sc;
- }
- // Gibt 1 zurück, falls die Objekte eingefärbt werden sollen
- bool ArbeitsModel::areColoresShown() const
- {
- return showColors;
- }
- // Setzt das Maskenbild
- void ArbeitsModel::setMask( QPixmap m )
- {
- this->m = m;
- }
- // Gibt das Maskenbild zurück
- QPixmap ArbeitsModel::getMask() const
- {
- return m;
- }
- // Gibt das ausgewählte Bild zurück
- Frame *ArbeitsModel::getFrame() const
- {
- return f;
- }
- // Gibt das Hauptfenster zurück
- MainWindow *ArbeitsModel::getWindow() const
- {
- return window;
- }
- // Gibt das angezeigte Bild zurück
- QImage ArbeitsModel::getImage() const
- {
- return image;
- }
- // Legt fest, ob die Maus gedrück wird
- void ArbeitsModel::setMousePressed( bool pressed )
- {
- mousePressed = pressed;
- }
- // Legt die Maustaste fest
- void ArbeitsModel::setMouseButtonPressed( Qt::MouseButton btn, QPoint pos )
- {
- mousePressed = true;
- mouseButton = btn;
- mouseStart = pos;
- mousePos = pos;
- }
- // Setzt die Position der Maus fest
- void ArbeitsModel::setMousePoint( QPoint mp )
- {
- mousePos = mp;
- }
- // Gibt 1 zurück, falls die MAus gedrückt wird
- bool ArbeitsModel::isMousePressed() const
- {
- return mousePressed;
- }
- // Gibt 1 zurück, falls der angegebene Maus Knopf gedrückt wird
- bool ArbeitsModel::isMouseButtonPressed( Qt::MouseButton btn ) const
- {
- return mouseButton == btn && mousePressed;
- }
- // Gibt die Position der Maus zurück, als diese gedrückt wurde
- QPoint ArbeitsModel::getMousePressPoint() const
- {
- return mouseStart;
- }
- // Gibt die aktuelle Position der Maus zurück
- QPoint ArbeitsModel::getMousePoint() const
- {
- return mousePos;
- }
- // Setzt die Position im Bild, die links oben an der View erscheinen soll
- void ArbeitsModel::setOffset( int xo, int yo )
- {
- xOffset = xo;
- yOffset = yo;
- }
- // Setzt den Skallierungsfaktor, mit dem das Bild vergrößert werden soll
- void ArbeitsModel::setScaleFactor( float xs, float ys )
- {
- xScaleFactor = xs;
- yScaleFactor = ys;
- }
- // Setzt die Position und die Größe der View auf dem Bildschirm
- void ArbeitsModel::setView( QPoint pos, QSize size )
- {
- if( viewPos != pos || viewSize != size )
- {
- viewPos = pos;
- viewSize = size;
- resetZoom();
- }
- }
- // Gibt die Größe der View zurück
- QSize ArbeitsModel::getViewSize() const
- {
- return viewSize;
- }
- // Gibt die x Position im Bild zurück, die links an der View erscheinen soll
- int ArbeitsModel::getXOffset() const
- {
- return xOffset;
- }
- // Gibt die y Position im Bild zurück, die oben an der View erscheinen soll
- int ArbeitsModel::getYOffset() const
- {
- return yOffset;
- }
- // Gibt den Skallierungsfaktor in x Richtung zurück
- float ArbeitsModel::getXScaleFactor() const
- {
- return xScaleFactor;
- }
- // Gibt den Skallierungsfaktor in y Richtung zurück
- float ArbeitsModel::getYScaleFactor() const
- {
- return yScaleFactor;
- }
- // Gibt die Position der View zurück
- QPoint ArbeitsModel::getViewPos() const
- {
- return viewPos;
- }
- // Setzt die Skallierung zurück, so dass wieder alles sichtbar ist
- void ArbeitsModel::resetZoom()
- {
- QRect imgRect( QPoint( 0, 0 ), viewSize );
- QSize imgS = image.size();
- if( imgS.width() > viewSize.width() )
- {
- imgS.scale( viewSize, Qt::KeepAspectRatio );
- imgRect.setSize( imgS );
- }
- xScaleFactor = imgRect.width() / (float)image.width();
- yScaleFactor = imgRect.height() / (float)image.height();
- xOffset = 0;
- yOffset = 0;
- }
- // Legt fest, welches Polygon verschoben werden soll
- void ArbeitsModel::setMoveObject( ObjectPolygon mo, int pIndex )
- {
- moveObject = mo;
- movePolygon = pIndex;
- }
- // Legt fest, welcher Eckpunkt verschoben werden soll
- void ArbeitsModel::setMoveIndex( int index )
- {
- moveIndex = index;
- }
- // Legt fest, an welcher Stelle eine Eckpunkt eingefügt werden soll
- void ArbeitsModel::setInsertIndex( int index )
- {
- insertIndex = index;
- }
- // Legt die Position des neuen Eckpunktes fest
- void ArbeitsModel::setNewVertex( QPoint vertex )
- {
- newVertex = vertex;
- }
- // Gibt das Objekt zurück, welches verschoben wird
- ObjectPolygon ArbeitsModel::getMoveObject() const
- {
- return moveObject;
- }
- // Gibt den Index des Eckpunktes zurück, der verschoben wird
- int ArbeitsModel::getMoveIndex() const
- {
- return moveIndex;
- }
- // Gibt den Index des neuen Eckpunktes zurück
- int ArbeitsModel::getInsertIndex() const
- {
- return insertIndex;
- }
- // Gibt die Position des neuen Eckpunktes zurück
- QPoint ArbeitsModel::getNewVertex() const
- {
- return newVertex;
- }
- // Gibt den Index des Polygons zurück, welches verschoben wird
- int ArbeitsModel::getMovePolygon() const
- {
- return movePolygon;
- }
- // Gibt das Objekt zurück, welches zerteilt werden soll
- ObjectPolygon ArbeitsModel::getCutObject() const
- {
- return cutObject;
- }
- // Gibt den Index des Eckpunktes zurück, an dem das Objekt zerteilt werden soll
- int ArbeitsModel::getCutIndex() const
- {
- return cutIndex;
- }
- // Gibt den Index des Polygons zurück, das zerteilt werden soll
- int ArbeitsModel::getCutPolygon() const
- {
- return cutPolygon;
- }
- // Setzt das Polygon, welches zerteilt werden soll
- void ArbeitsModel::setCutObject( ObjectPolygon o, int pIndex )
- {
- cutObject = o;
- cutPolygon = pIndex;
- }
- // Setzt den Index des Eckpunktes, an dem das Polygon zerteilt werden soll
- void ArbeitsModel::setCutIndex( int index )
- {
- cutIndex = index;
- }
- // Gibt das kopierte Objekt zurück
- ObjectPolygon ArbeitsModel::getCopyedObject() const
- {
- return copyedObject;
- }
- // Gibt die Rotierung des kopierten Objektes zurück
- float ArbeitsModel::getCopyedRotation() const
- {
- return rotation;
- }
- // Gibt den Mittelpunkt des Kopierten Objektes zurück
- QPoint ArbeitsModel::getCopyedCenter() const
- {
- return pSCenter;
- }
- // Setzt das Kopierte Objekt
- void ArbeitsModel::setCopyedObject( ObjectPolygon o, QPoint c )
- {
- copyedObject = o;
- pSCenter = c;
- }
- // Setzt die Rotierung des kopierten Objektes
- void ArbeitsModel::setCopyedRotation( float r )
- {
- rotation = r;
- }
- // Gibt das neue Polygon zurück, welches mit dem NEW Werkzeug erstellt wird
- QPolygon *ArbeitsModel::getNewPolygon() const
- {
- return newPolygon;
- }
- // Setzt das neue Polygon
- void ArbeitsModel::setNewPolygon( QPolygon *p )
- {
- if( newPolygon )
- delete newPolygon;
- newPolygon = p;
- }
- // Gibt das Feld zurück, in dem ale Eckpunkte gelöscht werden sollen
- QRect *ArbeitsModel::getDeleteField() const
- {
- return deleteField;
- }
- // Setzt das Feld, in dem alle Echpunkte gelöscht werden sollen
- void ArbeitsModel::setDeleteField( QRect *f )
- {
- deleteField = f;
- }
|