|
@@ -13,7 +13,7 @@ using namespace Model2DEditor;
|
|
|
|
|
|
// Inhalt der VertexData Klasse aus KEDModel2DEditor.h
|
|
// Inhalt der VertexData Klasse aus KEDModel2DEditor.h
|
|
// Konstruktor
|
|
// Konstruktor
|
|
-VertexData::VertexData( Vec2< float > v, Punkt t )
|
|
|
|
|
|
+VertexData::VertexData( Vec2< float > v, Vertex t )
|
|
{
|
|
{
|
|
vertex = v;
|
|
vertex = v;
|
|
textur = t;
|
|
textur = t;
|
|
@@ -35,6 +35,11 @@ void VertexData::nachOben( float num )
|
|
vertex.y -= num;
|
|
vertex.y -= num;
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+void VertexData::setTextur( Vertex tp )
|
|
|
|
+{
|
|
|
|
+ textur = tp;
|
|
|
|
+}
|
|
|
|
+
|
|
void VertexData::saveTextur( Punkt tPos, Punkt tGr )
|
|
void VertexData::saveTextur( Punkt tPos, Punkt tGr )
|
|
{
|
|
{
|
|
textur = vertex - tPos;
|
|
textur = vertex - tPos;
|
|
@@ -106,13 +111,14 @@ PolygonData::PolygonData( Polygon2D &pg )
|
|
{
|
|
{
|
|
name = pg.name->getText();
|
|
name = pg.name->getText();
|
|
vd = new RCArray< VertexData >();
|
|
vd = new RCArray< VertexData >();
|
|
|
|
+ transparent = 0;
|
|
sichtbar = 1;
|
|
sichtbar = 1;
|
|
ref = 1;
|
|
ref = 1;
|
|
int anz = pg.vertex->getEintragAnzahl();
|
|
int anz = pg.vertex->getEintragAnzahl();
|
|
for( int i = 0; i < anz; i++ )
|
|
for( int i = 0; i < anz; i++ )
|
|
{
|
|
{
|
|
Vec2< float > v( 0, 0 );
|
|
Vec2< float > v( 0, 0 );
|
|
- Punkt t( 0, 0 );
|
|
|
|
|
|
+ Vertex t( 0, 0 );
|
|
if( pg.vertex->hat( i ) )
|
|
if( pg.vertex->hat( i ) )
|
|
v = pg.vertex->get( i );
|
|
v = pg.vertex->get( i );
|
|
if( pg.tKordinaten && pg.tKordinaten->hat( i ) )
|
|
if( pg.tKordinaten && pg.tKordinaten->hat( i ) )
|
|
@@ -128,7 +134,7 @@ PolygonData::~PolygonData()
|
|
}
|
|
}
|
|
|
|
|
|
// nicht constant
|
|
// nicht constant
|
|
-void PolygonData::addVertex( Vec2< float >v, Punkt t )
|
|
|
|
|
|
+void PolygonData::addVertex( Vec2< float >v, Vertex t )
|
|
{
|
|
{
|
|
vd->add( new VertexData( v, t ) );
|
|
vd->add( new VertexData( v, t ) );
|
|
}
|
|
}
|
|
@@ -173,6 +179,11 @@ void PolygonData::setSichtbar( bool s )
|
|
sichtbar = s;
|
|
sichtbar = s;
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+void PolygonData::setTransparent( bool t )
|
|
|
|
+{
|
|
|
|
+ transparent = t;
|
|
|
|
+}
|
|
|
|
+
|
|
void PolygonData::setName( const char *name )
|
|
void PolygonData::setName( const char *name )
|
|
{
|
|
{
|
|
this->name = name;
|
|
this->name = name;
|
|
@@ -216,6 +227,11 @@ void PolygonData::getM2( Polygon2D &pd, bool textur ) const
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+bool PolygonData::istTransparent() const
|
|
|
|
+{
|
|
|
|
+ return transparent;
|
|
|
|
+}
|
|
|
|
+
|
|
// Reference Counting
|
|
// Reference Counting
|
|
PolygonData *PolygonData::getThis()
|
|
PolygonData *PolygonData::getThis()
|
|
{
|
|
{
|
|
@@ -249,16 +265,6 @@ Data::Data( Model2DData *mdl )
|
|
if( mdl->polygons->hat( i ) )
|
|
if( mdl->polygons->hat( i ) )
|
|
{
|
|
{
|
|
pd->add( new PolygonData( mdl->polygons->get( 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 )
|
|
if( mdl )
|
|
@@ -345,6 +351,14 @@ void Data::setTextur( Bild *t )
|
|
if( textur )
|
|
if( textur )
|
|
textur->release();
|
|
textur->release();
|
|
textur = t;
|
|
textur = t;
|
|
|
|
+ if( pd->getEintragAnzahl() > 0 && pd->z( 0 )->zVertex( 0 ) )
|
|
|
|
+ {
|
|
|
|
+ Vertex p = pd->z( 0 )->zVertex( 0 )->getPos();
|
|
|
|
+ Vertex tp = pd->z( 0 )->zVertex( 0 )->getTPos();
|
|
|
|
+ tp.x *= t->getBreite();
|
|
|
|
+ tp.y *= t->getHeight();
|
|
|
|
+ tPos = p - tp;
|
|
|
|
+ }
|
|
}
|
|
}
|
|
|
|
|
|
void Data::select( Punkt p1, Punkt p2 )
|
|
void Data::select( Punkt p1, Punkt p2 )
|
|
@@ -427,7 +441,32 @@ EditorListe::EditorListe( Schrift *zSchrift )
|
|
ram->setPosition( 720, 10 );
|
|
ram->setPosition( 720, 10 );
|
|
scroll = new VScrollBar();
|
|
scroll = new VScrollBar();
|
|
schrift = zSchrift->getThis();
|
|
schrift = zSchrift->getThis();
|
|
- pName = initTextFeld( 0, 0, 80, 20, schrift, TextFeld::Style::TextFeld, "" );
|
|
|
|
|
|
+ pName = initTextFeld( 0, 0, 70, 20, schrift, TextFeld::Style::TextFeld, "" );
|
|
|
|
+ texturKoordF = initFenster( 10, 10, 150, 80, zSchrift, ( Fenster::Style::normal | Fenster::Style::TitelHintergrund | Fenster::Style::BodyHintergrund ) & ~Fenster::Style::Sichtbar, "Texturkoordinaten" );
|
|
|
|
+ texturKoordF->setKBgFarbe( 0xFF000000 );
|
|
|
|
+ texturKoordF->setTBgFarbe( 0xFF000000 );
|
|
|
|
+ texturKoordF->setClosingMe( _closeFensterME );
|
|
|
|
+ tkxT = initTextFeld( 10, 10, 30, 20, zSchrift, TextFeld::Style::Text, "x:" );
|
|
|
|
+ tkyT = initTextFeld( 10, 40, 30, 20, zSchrift, TextFeld::Style::Text, "y:" );
|
|
|
|
+ tkx = initTextFeld( 40, 10, 90, 20, zSchrift, TextFeld::Style::TextFeld, "" );
|
|
|
|
+ tky = initTextFeld( 40, 40, 90, 20, zSchrift, TextFeld::Style::TextFeld, "" );
|
|
|
|
+ int *polIP = &polI, *verIP = &verI;
|
|
|
|
+ TextFeld *tkxTmp = tkx;
|
|
|
|
+ TextFeld *tkyTmp = tky;
|
|
|
|
+ auto saveTK = [ polIP, verIP, tkxTmp, tkyTmp ]( void *p, void *o, TastaturEreignis te )
|
|
|
|
+ {
|
|
|
|
+ Data *data = (Data*)p;
|
|
|
|
+ data->zPolygon( *polIP )->zVertex( *verIP )->setTextur( Vertex( (float)(double)*tkxTmp->zText(), (float)(double)*tkyTmp->zText() ) );
|
|
|
|
+ return 1;
|
|
|
|
+ };
|
|
|
|
+ tkx->setNTastaturEreignis( saveTK );
|
|
|
|
+ tky->setNTastaturEreignis( saveTK );
|
|
|
|
+ texturKoordF->addMember( tkxT );
|
|
|
|
+ texturKoordF->addMember( tkyT );
|
|
|
|
+ texturKoordF->addMember( tkx );
|
|
|
|
+ texturKoordF->addMember( tky );
|
|
|
|
+ polI = 0;
|
|
|
|
+ verI = 0;
|
|
data = 0;
|
|
data = 0;
|
|
ref = 1;
|
|
ref = 1;
|
|
}
|
|
}
|
|
@@ -441,6 +480,11 @@ EditorListe::~EditorListe()
|
|
if( data )
|
|
if( data )
|
|
data->release();
|
|
data->release();
|
|
schrift->release();
|
|
schrift->release();
|
|
|
|
+ texturKoordF->release();
|
|
|
|
+ tkxT->release();
|
|
|
|
+ tkyT->release();
|
|
|
|
+ tkx->release();
|
|
|
|
+ tky->release();
|
|
}
|
|
}
|
|
|
|
|
|
// nicht constant
|
|
// nicht constant
|
|
@@ -453,6 +497,7 @@ void EditorListe::setDataZ( Data *d )
|
|
|
|
|
|
void EditorListe::doMausEreignis( MausEreignis &me )
|
|
void EditorListe::doMausEreignis( MausEreignis &me )
|
|
{
|
|
{
|
|
|
|
+ texturKoordF->doMausEreignis( me );
|
|
me.mx -= ram->getX();
|
|
me.mx -= ram->getX();
|
|
me.my -= ram->getY();
|
|
me.my -= ram->getY();
|
|
if( me.mx < 0 || me.my < 0 || me.mx > ram->getBreite() || me.my > ram->getHeight() )
|
|
if( me.mx < 0 || me.my < 0 || me.mx > ram->getBreite() || me.my > ram->getHeight() )
|
|
@@ -480,10 +525,17 @@ void EditorListe::doMausEreignis( MausEreignis &me )
|
|
}
|
|
}
|
|
else if( me.mx > 115 && me.my > y + 1 && me.mx < 132 && me.my < y + 19 )
|
|
else if( me.mx > 115 && me.my > y + 1 && me.mx < 132 && me.my < y + 19 )
|
|
{ // Löschen
|
|
{ // Löschen
|
|
|
|
+ if( polI == i )
|
|
|
|
+ texturKoordF->removeStyle( Fenster::Style::Sichtbar );
|
|
data->removePolygon( i );
|
|
data->removePolygon( i );
|
|
rend = 1;
|
|
rend = 1;
|
|
break;
|
|
break;
|
|
}
|
|
}
|
|
|
|
+ else if( me.mx > 95 && me.my > y + 5 && me.mx < 105 && me.my < y + 15 )
|
|
|
|
+ {
|
|
|
|
+ data->zPolygon( i )->setTransparent( !data->zPolygon( i )->istTransparent() );
|
|
|
|
+ rend = 1;
|
|
|
|
+ }
|
|
else if( me.mx > 0 && me.my > y && me.mx < 133 && me.my < y + 20 )
|
|
else if( me.mx > 0 && me.my > y && me.mx < 133 && me.my < y + 20 )
|
|
{ // Polygon Auswählen und Abwählen
|
|
{ // Polygon Auswählen und Abwählen
|
|
if( data->getSelectedPolygon() != i )
|
|
if( data->getSelectedPolygon() != i )
|
|
@@ -501,6 +553,8 @@ void EditorListe::doMausEreignis( MausEreignis &me )
|
|
y += 20;
|
|
y += 20;
|
|
if( me.mx > 115 && me.my > y + 1 && me.mx < 132 && me.my < y + 19 )
|
|
if( me.mx > 115 && me.my > y + 1 && me.mx < 132 && me.my < y + 19 )
|
|
{ // Löschen
|
|
{ // Löschen
|
|
|
|
+ if( polI == i && verI == j )
|
|
|
|
+ texturKoordF->removeStyle( Fenster::Style::Sichtbar );
|
|
pd->removeVertex( j );
|
|
pd->removeVertex( j );
|
|
rend = 1;
|
|
rend = 1;
|
|
}
|
|
}
|
|
@@ -509,6 +563,16 @@ void EditorListe::doMausEreignis( MausEreignis &me )
|
|
pd->zVertex( j )->setSichtbar( !pd->zVertex( j )->istSichtbar() );
|
|
pd->zVertex( j )->setSichtbar( !pd->zVertex( j )->istSichtbar() );
|
|
rend = 1;
|
|
rend = 1;
|
|
}
|
|
}
|
|
|
|
+ else if( me.mx > 5 && me.my > y + 5 && me.mx < 15 && me.my < y + 15 )
|
|
|
|
+ { // Sichtbar und Unsichtbar
|
|
|
|
+ polI = i;
|
|
|
|
+ verI = j;
|
|
|
|
+ tkx->setNTastaturEreignisParameter( data );
|
|
|
|
+ tky->setNTastaturEreignisParameter( data );
|
|
|
|
+ tkx->setText( Text() += pd->zVertex( j )->getTPos().x );
|
|
|
|
+ tky->setText( Text() += pd->zVertex( j )->getTPos().y );
|
|
|
|
+ texturKoordF->addStyle( Fenster::Style::Sichtbar );
|
|
|
|
+ }
|
|
else if( me.my > y && me.my < y + 20 && me.mx > 0 && me.mx < 133 )
|
|
else if( me.my > y && me.my < y + 20 && me.mx > 0 && me.mx < 133 )
|
|
{ // Auswählen und Abwählen
|
|
{ // Auswählen und Abwählen
|
|
pd->zVertex( j )->setAuswahl( !pd->zVertex( j )->istAusgewählt() );
|
|
pd->zVertex( j )->setAuswahl( !pd->zVertex( j )->istAusgewählt() );
|
|
@@ -526,12 +590,14 @@ void EditorListe::doMausEreignis( MausEreignis &me )
|
|
|
|
|
|
void EditorListe::doTastaturEreignis( TastaturEreignis &te )
|
|
void EditorListe::doTastaturEreignis( TastaturEreignis &te )
|
|
{
|
|
{
|
|
|
|
+ texturKoordF->doTastaturEreignis( te );
|
|
if( data && data->getSelectedPolygon() >= 0 )
|
|
if( data && data->getSelectedPolygon() >= 0 )
|
|
pName->doTastaturEreignis( te );
|
|
pName->doTastaturEreignis( te );
|
|
}
|
|
}
|
|
|
|
|
|
bool EditorListe::tick( double zeit )
|
|
bool EditorListe::tick( double zeit )
|
|
{
|
|
{
|
|
|
|
+ rend |= texturKoordF->tick( zeit );
|
|
if( data && data->getSelectedPolygon() >= 0 )
|
|
if( data && data->getSelectedPolygon() >= 0 )
|
|
rend |= pName->tick( zeit );
|
|
rend |= pName->tick( zeit );
|
|
bool ret = rend;
|
|
bool ret = rend;
|
|
@@ -580,6 +646,15 @@ void EditorListe::render( Bild &zRObj )
|
|
}
|
|
}
|
|
zRObj.drawLinie( Punkt( 115, y + 1 ), Punkt( 132, y + 18 ), 0xFFFF0000 );
|
|
zRObj.drawLinie( Punkt( 115, y + 1 ), Punkt( 132, y + 18 ), 0xFFFF0000 );
|
|
zRObj.drawLinie( Punkt( 132, y + 1 ), Punkt( 115, y + 18 ), 0xFFFF0000 );
|
|
zRObj.drawLinie( Punkt( 132, y + 1 ), Punkt( 115, y + 18 ), 0xFFFF0000 );
|
|
|
|
+ if( data->zPolygon( i )->istTransparent() )
|
|
|
|
+ {
|
|
|
|
+ zRObj.drawLinieH( 95, y + 5, 10, 0xFFFFFFFF );
|
|
|
|
+ zRObj.drawLinieH( 95, y + 15, 10, 0xFFFFFFFF );
|
|
|
|
+ zRObj.drawLinieV( 95, y + 5, 10, 0xFFFFFFFF );
|
|
|
|
+ zRObj.drawLinieV( 105, y + 5, 10, 0xFFFFFFFF );
|
|
|
|
+ }
|
|
|
|
+ else
|
|
|
|
+ zRObj.fillRegion( 95, y + 5, 10, 10, 0xFFFFFFFF );
|
|
if( ausgeklappt.hat( i ) && ausgeklappt.get( i ) )
|
|
if( ausgeklappt.hat( i ) && ausgeklappt.get( i ) )
|
|
{
|
|
{
|
|
zRObj.drawDreieck( Punkt( 10, 4 + y ), Punkt( 4, 16 + y ), Punkt( 16, 16 + y ), 0xFFFFFFFF );
|
|
zRObj.drawDreieck( Punkt( 10, 4 + y ), Punkt( 4, 16 + y ), Punkt( 16, 16 + y ), 0xFFFFFFFF );
|
|
@@ -597,6 +672,8 @@ void EditorListe::render( Bild &zRObj )
|
|
name += j;
|
|
name += j;
|
|
schrift->setDrawPosition( 20, y + 4 );
|
|
schrift->setDrawPosition( 20, y + 4 );
|
|
schrift->renderText( &name, zRObj, 0xFFFFFFFF );
|
|
schrift->renderText( &name, zRObj, 0xFFFFFFFF );
|
|
|
|
+ zRObj.drawLinieH( 5, y + 5, 10, 0xFFFFFFFF );
|
|
|
|
+ zRObj.drawLinieV( 10, y + 5, 10, 0xFFFFFFFF );
|
|
zRObj.drawLinie( Punkt( 115, y + 1 ), Punkt( 132, y + 18 ), 0xFFFF0000 );
|
|
zRObj.drawLinie( Punkt( 115, y + 1 ), Punkt( 132, y + 18 ), 0xFFFF0000 );
|
|
zRObj.drawLinie( Punkt( 132, y + 1 ), Punkt( 115, y + 18 ), 0xFFFF0000 );
|
|
zRObj.drawLinie( Punkt( 132, y + 1 ), Punkt( 115, y + 18 ), 0xFFFF0000 );
|
|
if( pd->zVertex( j )->istSichtbar() )
|
|
if( pd->zVertex( j )->istSichtbar() )
|
|
@@ -620,6 +697,7 @@ void EditorListe::render( Bild &zRObj )
|
|
schrift->unlock();
|
|
schrift->unlock();
|
|
scroll->update( maxH, ram->getHeight() - 2 );
|
|
scroll->update( maxH, ram->getHeight() - 2 );
|
|
zRObj.releaseDrawOptions();
|
|
zRObj.releaseDrawOptions();
|
|
|
|
+ texturKoordF->render( zRObj );
|
|
}
|
|
}
|
|
|
|
|
|
// Reference Counting
|
|
// Reference Counting
|
|
@@ -1009,8 +1087,8 @@ void GUI::doMausEreignis( MausEreignis &me )
|
|
{
|
|
{
|
|
if( !sichtbar )
|
|
if( !sichtbar )
|
|
return;
|
|
return;
|
|
- editor->doMausEreignis( me );
|
|
|
|
liste->doMausEreignis( me );
|
|
liste->doMausEreignis( me );
|
|
|
|
+ editor->doMausEreignis( me );
|
|
bool vera = me.verarbeitet;
|
|
bool vera = me.verarbeitet;
|
|
speichern->doMausEreignis( me );
|
|
speichern->doMausEreignis( me );
|
|
if( me.id == ME_RLinks && me.verarbeitet && !vera )
|
|
if( me.id == ME_RLinks && me.verarbeitet && !vera )
|