123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388 |
- #include "Data.h"
- // Inhalt der VertexData Klasse aus Data.h
- // Konstruktor
- VertexData::VertexData( Vec2< float > v, Punkt t )
- {
- vertex = v;
- textur = t;
- selected = 0;
- sichtbar = 1;
- ref = 1;
- }
- // nicht constant
- void VertexData::nachLinks( float num )
- {
- if( selected )
- vertex.x -= num;
- }
- void VertexData::nachOben( float num )
- {
- if( selected )
- vertex.y -= num;
- }
- void VertexData::saveTextur( Punkt tPos )
- {
- textur = (Punkt)vertex - tPos;
- }
- void VertexData::select( Punkt p1, Punkt p2 )
- {
- selected |= vertex.istInRegion( p1, p2 ) && sichtbar;
- }
- void VertexData::deSelect()
- {
- selected = 0;
- }
- void VertexData::setAuswahl( bool ausw )
- {
- selected = ausw;
- }
- void VertexData::setSichtbar( bool s )
- {
- sichtbar = s;
- selected &= sichtbar;
- }
- // constant
- bool VertexData::istSichtbar() const
- {
- return sichtbar;
- }
- bool VertexData::istAusgewählt() const
- {
- return selected;
- }
- Vec2< float > VertexData::getPos() const
- {
- return vertex;
- }
- Punkt VertexData::getTPos() const
- {
- return textur;
- }
- // Reference Counting
- VertexData *VertexData::getThis()
- {
- ref++;
- return this;
- }
- VertexData *VertexData::release()
- {
- ref--;
- if( !ref )
- delete this;
- return 0;
- }
- // Inhalt der PolygonData Klasse aus Data.h
- // Konstruktor
- PolygonData::PolygonData( Polygon2D &pg )
- {
- vd = new RCArray< VertexData >();
- sichtbar = 1;
- ref = 1;
- int anz = pg.vertex->getEintragAnzahl();
- for( int i = 0; i < anz; i++ )
- {
- Vec2< float > v( 0, 0 );
- Punkt t( 0, 0 );
- if( pg.vertex->hat( i ) )
- v = pg.vertex->get( i );
- if( pg.tKordinaten && pg.tKordinaten->hat( i ) )
- t = pg.tKordinaten->get( i );
- vd->add( new VertexData( v, t ) );
- }
- }
- // Destruktor
- PolygonData::~PolygonData()
- {
- vd->release();
- }
- // nicht constant
- void PolygonData::addVertex( Vec2< float >v, Punkt t )
- {
- vd->add( new VertexData( v, t ) );
- }
- void PolygonData::removeVertex( int num )
- {
- vd->remove( num );
- }
- void PolygonData::nachLinks( float num )
- {
- for( auto *i = &vd->getArray(); i && i->set; i = i->next )
- i->var->nachLinks( num );
- }
- void PolygonData::nachOben( float num )
- {
- for( auto *i = &vd->getArray(); i && i->set; i = i->next )
- i->var->nachOben( num );
- }
- void PolygonData::saveTextur( Punkt tPos )
- {
- for( auto *i = &vd->getArray(); i && i->set; i = i->next )
- i->var->saveTextur( tPos );
- }
- void PolygonData::select( Punkt p1, Punkt p2 )
- {
- for( auto *i = &vd->getArray(); i && i->set; i = i->next )
- i->var->select( p1, p2 );
- }
- void PolygonData::deSelect()
- {
- for( auto *i = &vd->getArray(); i && i->set; i = i->next )
- i->var->deSelect();
- }
- void PolygonData::setSichtbar( bool s )
- {
- sichtbar = s;
- }
- // constant
- bool PolygonData::istSichtbar() const
- {
- return sichtbar;
- }
- VertexData *PolygonData::zVertex( int num ) const
- {
- return vd->z( num );
- }
- int PolygonData::getVertexAnzahl() const
- {
- return vd->getEintragAnzahl();
- }
- void PolygonData::getM2( Polygon2D &pd, bool textur ) const
- {
- int anz = vd->getEintragAnzahl();
- if( !pd.vertex )
- pd.vertex = new Array< Vertex >();
- if( !pd.tKordinaten )
- pd.tKordinaten = new Array< Punkt >();
- for( int i = 0; i < anz; i++ )
- {
- pd.vertex->add( this->vd->z( i )->getPos() );
- if( textur )
- pd.tKordinaten->add( this->vd->z( i )->getTPos() );
- }
- }
- // Reference Counting
- PolygonData *PolygonData::getThis()
- {
- ref++;
- return this;
- }
- PolygonData *PolygonData::release()
- {
- ref--;
- if( !ref )
- delete this;
- return 0;
- }
- // Inhalt der Data Klasse aus Data.h
- // Konstruktor
- Data::Data( Model2DData *mdl )
- {
- pd = new RCArray< PolygonData >();
- tPos.x = 0;
- tPos.y = 0;
- textur = 0;
- rTextur = 0;
- sp = -1;
- ref = 1;
- int anz = ( mdl && mdl->polygons ) ? mdl->polygons->getEintragAnzahl() : 0;
- for( int i = 0; i < anz; i++ )
- {
- if( mdl->polygons->hat( i ) )
- {
- pd->add( new PolygonData( mdl->polygons->get( i ) ) );
- if( !tPos.x && !tPos.y )
- {
- if( mdl->polygons->get( i ).tKordinaten && mdl->polygons->get( i ).vertex
- && mdl->polygons->get( i ).tKordinaten->hat( 0 ) && mdl->polygons->get( i ).vertex->hat( 0 ) )
- {
- Punkt p = (Punkt)mdl->polygons->get( i ).vertex->get( 0 );
- Punkt tp = mdl->polygons->get( i ).tKordinaten->get( 0 );
- tPos = p - tp;
- }
- }
- }
- }
- if( mdl )
- mdl->release();
- }
- // Destruktor
- Data::~Data()
- {
- pd->release();
- if( textur )
- textur->release();
- }
- // nicht constant
- void Data::addPolygon()
- {
- Polygon2D p;
- p.vertex = new Array< Vertex >();
- pd->add( new PolygonData( p ) );
- p.vertex->release();
- }
- void Data::removePolygon( int num )
- {
- pd->remove( num );
- if( sp == num )
- sp = -1;
- }
- void Data::selectPolygon( int num )
- {
- sp = num;
- }
- void Data::nachLinks( float num )
- {
- for( auto *i = &pd->getArray(); i && i->set; i = i->next )
- i->var->nachLinks( num );
- }
- void Data::nachOben( float num )
- {
- for( auto *i = &pd->getArray(); i && i->set; i = i->next )
- i->var->nachOben( num );
- }
- void Data::tNachLinks( int num )
- {
- if( !rTextur )
- return;
- tPos.x -= num;
- }
- void Data::tNachOben( int num )
- {
- if( !rTextur )
- return;
- tPos.y -= num;
- }
- void Data::setRTextur( bool rt )
- {
- rTextur = rt;
- if( rt && !textur )
- {
- textur = new Bild();
- textur->neuBild( 500, 500, 0xFF505000 );
- }
- }
- void Data::saveTextur()
- {
- if( !rTextur )
- return;
- for( auto *i = &pd->getArray(); i && i->set; i = i->next )
- i->var->saveTextur( tPos );
- }
- void Data::setTextur( Bild *t )
- {
- if( textur )
- textur->release();
- textur = t;
- }
- void Data::select( Punkt p1, Punkt p2 )
- {
- for( auto *i = &pd->getArray(); i && i->set; i = i->next )
- i->var->select( p1, p2 );
- }
- void Data::deSelect()
- {
- for( auto *i = &pd->getArray(); i && i->set; i = i->next )
- i->var->deSelect();
- }
- // constant
- PolygonData *Data::zPolygon( int num ) const
- {
- return pd->z( num );
- }
- int Data::getPolygonAnzahl() const
- {
- return pd->getEintragAnzahl();
- }
- int Data::getSelectedPolygon() const
- {
- return sp;
- }
- Model2DData *Data::getM2() const
- {
- int anz = pd->getEintragAnzahl();
- Array< Polygon2D > *polygons = new Array< Polygon2D >();
- for( int i = 0; i < anz; i++ )
- {
- Polygon2D pd = { 0, 0 };
- this->pd->z( i )->getM2( pd, rTextur );
- polygons->add( pd );
- }
- Model2DData *ret = new Model2DData();
- ret->erstelleModell( polygons );
- return ret;
- }
- Bild *Data::zTextur() const
- {
- return rTextur ? textur : 0;
- }
- Punkt Data::getTPos() const
- {
- return tPos;
- }
- // Reference Counting
- Data *Data::getThis()
- {
- ref++;
- return this;
- }
- Data *Data::release()
- {
- ref--;
- if( !ref )
- delete this;
- return 0;
- }
|