|
@@ -816,7 +816,7 @@ void Model2DObject::render( Mat3< float > & kamMat, Bild & zRObj, const char *ka
|
|
|
}
|
|
|
|
|
|
// constant
|
|
|
-bool Model2DObject::istPunktInnen( Vertex p ) const
|
|
|
+bool Model2DObject::istPunktInnen( Vertex p, bool ignoreTransparent ) const
|
|
|
{
|
|
|
if( !rData )
|
|
|
return 0;
|
|
@@ -828,7 +828,7 @@ bool Model2DObject::istPunktInnen( Vertex p ) const
|
|
|
p = mat * p;
|
|
|
for( auto polygon = rData->polygons->getIterator(); polygon; polygon++, num++ )
|
|
|
{
|
|
|
- if( polygon._.transparent )
|
|
|
+ if( polygon._.transparent && !ignoreTransparent )
|
|
|
continue;
|
|
|
bool c = 0;
|
|
|
for( auto point = polygon._.vertex->getIterator(); point; point++ )
|
|
@@ -848,14 +848,14 @@ bool Model2DObject::istPunktInnen( Vertex p ) const
|
|
|
return 0;
|
|
|
}
|
|
|
|
|
|
-bool Model2DObject::istLinieInnen( Vertex a, Vertex b ) const
|
|
|
+bool Model2DObject::istLinieInnen( Vertex a, Vertex b, bool ignoreTransparent ) const
|
|
|
{
|
|
|
if( !rData || !rData->polygons )
|
|
|
return 0;
|
|
|
int pAnz = rData->polygons->getEintragAnzahl();
|
|
|
for( int p = 0; p < pAnz; p++ )
|
|
|
{
|
|
|
- if( rData->polygons->get( p ).transparent )
|
|
|
+ if( rData->polygons->get( p ).transparent && !ignoreTransparent )
|
|
|
continue;
|
|
|
Mat3< float > mat = Mat3< float >::rotation( rotation ) * Mat3< float >::scaling( size );
|
|
|
int anz = rData->polygons->get( p ).vertex->getEintragAnzahl();
|
|
@@ -886,14 +886,14 @@ bool Model2DObject::istLinieInnen( Vertex a, Vertex b ) const
|
|
|
int i = 1;
|
|
|
bool inside = 1;
|
|
|
for( Vertex vp = speed + a; (Punkt)vp != (Punkt)( b - speed ) && inside && i < mLen - 1; vp += speed, i++ )
|
|
|
- inside &= istPunktInnen( vp );
|
|
|
+ inside &= istPunktInnen( vp, ignoreTransparent );
|
|
|
if( inside )
|
|
|
return 1;
|
|
|
}
|
|
|
return 0;
|
|
|
}
|
|
|
|
|
|
-bool Model2DObject::istModelInnen( const Object2D * zObj, Vertex * sp, bool end ) const
|
|
|
+bool Model2DObject::istModelInnen( const Object2D * zObj, Vertex * sp, bool end, bool ignoreTransparent ) const
|
|
|
{
|
|
|
if( !end )
|
|
|
{
|
|
@@ -903,12 +903,12 @@ bool Model2DObject::istModelInnen( const Object2D * zObj, Vertex * sp, bool end
|
|
|
Mat3< float > mat = getObjectMatrix();
|
|
|
for( auto polygon = rData->polygons->getIterator(); polygon; polygon++ )
|
|
|
{
|
|
|
- if( polygon._.transparent )
|
|
|
+ if( polygon._.transparent && !ignoreTransparent )
|
|
|
continue;
|
|
|
int anz = polygon._.vertex->getEintragAnzahl();
|
|
|
for( int i = 0; i < anz; i++ )
|
|
|
{
|
|
|
- if( zObj->istPunktInnen( mat * polygon._.vertex->get( i ) ) )
|
|
|
+ if( zObj->istPunktInnen( mat * polygon._.vertex->get( i ), ignoreTransparent ) )
|
|
|
{
|
|
|
if( sp )
|
|
|
*sp = mat * polygon._.vertex->get( i );
|
|
@@ -918,7 +918,7 @@ bool Model2DObject::istModelInnen( const Object2D * zObj, Vertex * sp, bool end
|
|
|
}
|
|
|
if( end )
|
|
|
return 0;
|
|
|
- return zObj->istModelInnen( this, sp, 1 );
|
|
|
+ return zObj->istModelInnen( this, sp, 1, ignoreTransparent );
|
|
|
}
|
|
|
|
|
|
Rect2< float > Model2DObject::getBoundingBox() const
|