Browse Source

getObjektAt von welt2d bietet jetzt auch die möglichkeit transparente polygone mit einzuberechnen

Kolja Strohm 5 years ago
parent
commit
04b2641a16
3 changed files with 15 additions and 9 deletions
  1. 3 0
      Model2D.h
  2. 4 4
      Welt2D.cpp
  3. 8 5
      Welt2D.h

+ 3 - 0
Model2D.h

@@ -111,15 +111,18 @@ namespace Framework
         __declspec( dllexport ) void render( Mat3< float > &kamMat, Bild &zRObj, const char *kamName ) override;
         // Gibt zurück, ob ein Punkt in dem Model enthalten ist
         //  p: Der Punkt
+        //  ignoreTransparentFlag: wenn 1, dann werden auch collisionen mit transparenten polygonen beachtet
         __declspec( dllexport ) bool istPunktInnen( Vertex p, bool ignoreTransparent = 0 ) const override;
         // Überprüft, ob eine Linie im Model enthalten ist
         //  a: Der startpunkt der Linie
         //  b: Der endpunkt der Linie
+        //  ignoreTransparentFlag: wenn 1, dann werden auch collisionen mit transparenten polygonen beachtet
         __declspec( dllexport ) bool istLinieInnen( Vertex a, Vertex b, bool ignoreTransparent = 0 ) const override;
         // Überprüft, ob sich das Objekt mit einem anderen Überschneidet
         //  zObj: Ein Zeiger auf das andere Objekt ohne erhöhten Reference Counter
         //  sp: Ein Zeiger auf einen Punkt, in dem der Schnittpunkt gespeichert wird
         //  end: 0, falls alle Ecken beider Objekte überprüft werdden sollen. 1, falls nur die Punkte dieses Models im anderen gesucht werden sollen
+        //  ignoreTransparentFlag: wenn 1, dann werden auch collisionen mit transparenten polygonen beachtet
         __declspec( dllexport ) virtual bool istModelInnen( const Object2D *zObj, Vertex *sp = 0, bool end = 0, bool ignoreTransparent = 0 ) const;
         __declspec( dllexport ) Rect2< float > getBoundingBox() const override;
         // Bestimmt den Aufschlagspunkt eines Strahls, der von pos ausgehend in Richtung dir abgegeben wird.

+ 4 - 4
Welt2D.cpp

@@ -301,19 +301,19 @@ void Welt2D::setCircular( bool circular )
     info.circular = circular;
 }
 
-Object2D *Welt2D::zObjectAt( int x, int y )
+Object2D *Welt2D::zObjectAt( int x, int y, bool ignoreTransparentFlag )
 {
     for( auto o = objects->getIterator(); o; o++ )
     {
-        if( o->istPunktInnen( Punkt( x, y ) ) )
+        if( o->istPunktInnen( Punkt( x, y ), ignoreTransparentFlag ) )
             return o._;
     }
     return 0;
 }
 
-Object2D *Welt2D::getObjectAt( int x, int y )
+Object2D *Welt2D::getObjectAt( int x, int y, bool ignoreTransparentFlag )
 {
-    Object2D *tmp = zObjectAt( x, y );
+    Object2D *tmp = zObjectAt( x, y, ignoreTransparentFlag );
     return tmp ? tmp->getThis() : 0;
 }
 

+ 8 - 5
Welt2D.h

@@ -86,14 +86,17 @@ namespace Framework
         // Zeichnet das Objekt in ein Bild
         //  kamMat: Due Kamera Matrix, welche einen Punkt aus Weltkoordinaten in Bildschirmkoordinaten umwandelt
         //  zRObj: Das Bild, in welches gezeichnet werden soll
-        virtual void render( Mat3< float > &kamMat, Bild &zRObj, const char *kamName ) = 0;
+        //  ignoreTransparentFlag: wenn 1, dann werden auch collisionen mit transparenten polygonen beachtet
+        virtual void render( Mat3< float > &kamMat, Bild &zRObj, const char *ignoreTransparentFlag ) = 0;
         // Gibt zurück, ob ein Punkt in dem Objekt enthalten ist
         //  p: Der Punkt
-        __declspec( dllexport ) virtual bool istPunktInnen( Vertex p, bool ignoreTransparent = 0 ) const;
+        //  ignoreTransparentFlag: wenn 1, dann werden auch collisionen mit transparenten polygonen beachtet
+        __declspec( dllexport ) virtual bool istPunktInnen( Vertex p, bool ignoreTransparentFlag = 0 ) const;
         // Überprüft, ob eine Linie im Objekt enthalten ist
         //  a: Der startpunkt der Linie
         //  b: Der endpunkt der Linie
-        __declspec( dllexport ) virtual bool istLinieInnen( Vertex a, Vertex b, bool ignoreTransparent = 0 ) const;
+        //  ignoreTransparentFlag: wenn 1, dann werden auch collisionen mit transparenten polygonen beachtet
+        __declspec( dllexport ) virtual bool istLinieInnen( Vertex a, Vertex b, bool ignoreTransparentFlag = 0 ) const;
         // Überprüft, ob sich das Objekt mit einem anderen Überschneidet
         //  zObj: Ein Zeiger auf das andere Objekt ohne erhöhten Reference Counter
         //  sp: Ein Zeiger auf einen Punkt, in dem der Schnittpunkt gespeichert wird
@@ -163,8 +166,8 @@ namespace Framework
         __declspec( dllexport ) void setSize( int width, int height );
         __declspec( dllexport ) void setSize( bool hasSize );
         __declspec( dllexport ) void setCircular( bool circular );
-        __declspec( dllexport ) Object2D *zObjectAt( int x, int y );
-        __declspec( dllexport ) Object2D *getObjectAt( int x, int y );
+        __declspec( dllexport ) Object2D *zObjectAt( int x, int y, bool ignoreTransparentFlag = 0 );
+        __declspec( dllexport ) Object2D *getObjectAt( int x, int y, bool ignoreTransparentFlag = 0 );
         __declspec( dllexport ) void addObject( Object2D *obj );
         __declspec( dllexport ) void removeObject( Object2D *zObj );
         __declspec( dllexport ) void removeAll();