Fix step colors some more

Fixes https://gitlab.com/kicad/code/kicad/-/issues/13611

I need to refactor the overall structure and know what to do, but ugh lazy


(cherry picked from commit c6540575b5)
This commit is contained in:
Marek Roszko 2023-02-14 19:43:31 -05:00 committed by Mark Roszko
parent d20f49b58b
commit eed7ede376
2 changed files with 31 additions and 29 deletions

View File

@ -800,7 +800,7 @@ bool processShell( const TopoDS_Shape& shape, DATA& data, SGNODE* parent,
} }
bool processSolid( const TopoDS_Shape& shape, DATA& data, SGNODE* parent, bool processSolidOrShell( const TopoDS_Shape& shape, DATA& data, SGNODE* parent,
std::vector< SGNODE* >* items ) std::vector< SGNODE* >* items )
{ {
TDF_Label label; TDF_Label label;
@ -887,21 +887,31 @@ bool processSolid( const TopoDS_Shape& shape, DATA& data, SGNODE* parent,
items->push_back( pptr ); items->push_back( pptr );
} }
// instantiate the solid // instantiate resulting object
std::vector< SGNODE* > itemList; std::vector<SGNODE*> itemList;
for( it.Initialize( shape, false, false ); it.More(); it.Next() ) TopAbs_ShapeEnum stype = shape.ShapeType();
if( stype == TopAbs_SHELL )
{
if( processShell( shape, data, pptr, &itemList, lcolor ) )
ret = true;
}
else
{ {
const TopoDS_Shape& subShape = it.Value();
if( subShape.ShapeType() == TopAbs_SHELL ) for( it.Initialize( shape, false, false ); it.More(); it.Next() )
{ {
if( processShell( subShape, data, pptr, &itemList, lcolor ) ) const TopoDS_Shape& subShape = it.Value();
ret = true;
} if( subShape.ShapeType() == TopAbs_SHELL )
else {
{ if( processShell( subShape, data, pptr, &itemList, lcolor ) )
wxLogTrace( MASK_OCE, wxT( "Unsupported subshape in solid" ) ); ret = true;
}
else
{
wxLogTrace( MASK_OCE, wxT( "Unsupported subshape in solid" ) );
}
} }
} }
@ -996,14 +1006,14 @@ bool processLabel( const TDF_Label& aLabel, DATA& aData, SGNODE* aParent,
for( xp.Init( shape, TopAbs_SOLID ); xp.More(); xp.Next() ) for( xp.Init( shape, TopAbs_SOLID ); xp.More(); xp.Next() )
{ {
processSolid( xp.Current(), aData, pptr, aItems ); processSolidOrShell( xp.Current(), aData, pptr, aItems );
ret = true; ret = true;
} }
// Get all shells, avoid those that may be attached to solids // Get all shells, avoid those that may be attached to solids
for( xp.Init( shape, TopAbs_SHELL, TopAbs_SOLID ); xp.More(); xp.Next() ) for( xp.Init( shape, TopAbs_SHELL, TopAbs_SOLID ); xp.More(); xp.Next() )
{ {
processShell( xp.Current(), aData, pptr, aItems, nullptr ); processSolidOrShell( xp.Current(), aData, pptr, aItems );
ret = true; ret = true;
} }
@ -1019,13 +1029,13 @@ bool processLabel( const TDF_Label& aLabel, DATA& aData, SGNODE* aParent,
break; break;
case TopAbs_SOLID: case TopAbs_SOLID:
if( processSolid( shape, aData, pptr, aItems ) ) if( processSolidOrShell( shape, aData, pptr, aItems ) )
ret = true; ret = true;
break; break;
case TopAbs_SHELL: case TopAbs_SHELL:
if( processShell( shape, aData, pptr, aItems, nullptr ) ) if( processSolidOrShell( shape, aData, pptr, aItems ) )
ret = true; ret = true;
break; break;
@ -1130,18 +1140,10 @@ bool processFace( const TopoDS_Face& face, DATA& data, SGNODE* parent, std::vect
Quantity_ColorRGBA lcolor; Quantity_ColorRGBA lcolor;
// check for a face color; this has precedence over SOLID colors // check for a face color; this has precedence over SOLID colors
do if( data.m_color->GetColor( face, XCAFDoc_ColorGen, lcolor )
{ || data.m_color->GetColor( face, XCAFDoc_ColorCurv, lcolor )
TDF_Label L; || data.m_color->GetColor( face, XCAFDoc_ColorSurf, lcolor ) )
color = &lcolor;
if( data.m_color->ShapeTool()->Search( face, L ) )
{
if( data.m_color->GetColor( L, XCAFDoc_ColorGen, lcolor )
|| data.m_color->GetColor( L, XCAFDoc_ColorCurv, lcolor )
|| data.m_color->GetColor( L, XCAFDoc_ColorSurf, lcolor ) )
color = &lcolor;
}
} while( 0 );
SGNODE* ocolor = data.GetColor( color ); SGNODE* ocolor = data.GetColor( color );

View File

@ -37,7 +37,7 @@ SCENEGRAPH* LoadModel( char const* filename );
#define PLUGIN_OCE_MAJOR 1 #define PLUGIN_OCE_MAJOR 1
#define PLUGIN_OCE_MINOR 4 #define PLUGIN_OCE_MINOR 4
#define PLUGIN_OCE_PATCH 1 #define PLUGIN_OCE_PATCH 2
#define PLUGIN_OCE_REVNO 0 #define PLUGIN_OCE_REVNO 0