Browse Source

Fix assert failures in 3D renderer after padstack changes.

Fixes https://gitlab.com/kicad/code/kicad/-/issues/19069
pcb_db
Alex Shvartzkop 12 months ago
parent
commit
c3fb1445c7
  1. 2
      3d-viewer/3d_canvas/board_adapter.h
  2. 12
      3d-viewer/3d_canvas/create_3Dgraphic_brd_items.cpp
  3. 7
      3d-viewer/3d_canvas/create_layer_items.cpp

2
3d-viewer/3d_canvas/board_adapter.h

@ -369,7 +369,7 @@ private:
// Helper functions to create the board
void createTrackWithMargin( const PCB_TRACK* aTrack, CONTAINER_2D_BASE* aDstContainer,
int aMargin = 0 );
PCB_LAYER_ID aLayer, int aMargin = 0 );
void createPadWithMargin( const PAD *aPad, CONTAINER_2D_BASE* aDstContainer,
PCB_LAYER_ID aLayer, const VECTOR2I& aMargin ) const;

12
3d-viewer/3d_canvas/create_3Dgraphic_brd_items.cpp

@ -273,18 +273,23 @@ void BOARD_ADAPTER::addFootprintShapes( const FOOTPRINT* aFootprint, CONTAINER_2
}
void BOARD_ADAPTER::createTrackWithMargin( const PCB_TRACK* aTrack, CONTAINER_2D_BASE* aDstContainer,
void BOARD_ADAPTER::createTrackWithMargin( const PCB_TRACK* aTrack,
CONTAINER_2D_BASE* aDstContainer, PCB_LAYER_ID aLayer,
int aMargin )
{
SFVEC2F start3DU = TO_SFVEC2F( aTrack->GetStart() );
SFVEC2F end3DU = TO_SFVEC2F( aTrack->GetEnd() );
float width3DU = TO_3DU( aTrack->GetWidth() + aMargin * 2 );
switch( aTrack->Type() )
{
case PCB_VIA_T:
{
const PCB_VIA* via = static_cast<const PCB_VIA*>( aTrack );
float width3DU = TO_3DU( via->GetWidth( aLayer ) + aMargin * 2 );
addFILLED_CIRCLE_2D( aDstContainer, start3DU, width3DU / 2.0, *aTrack );
break;
}
case PCB_ARC_T:
{
@ -299,7 +304,7 @@ void BOARD_ADAPTER::createTrackWithMargin( const PCB_TRACK* aTrack, CONTAINER_2D
track.SetWidth( arc->GetWidth() );
track.SetLayer( arc->GetLayer() );
createTrackWithMargin( &track, aDstContainer, aMargin );
createTrackWithMargin( &track, aDstContainer, aLayer, aMargin );
return;
}
@ -333,6 +338,7 @@ void BOARD_ADAPTER::createTrackWithMargin( const PCB_TRACK* aTrack, CONTAINER_2D
case PCB_TRACE_T: // Track is a usual straight segment
{
float width3DU = TO_3DU( aTrack->GetWidth() + aMargin * 2 );
addROUND_SEGMENT_2D( aDstContainer, start3DU, end3DU, width3DU, *aTrack );
break;
}

7
3d-viewer/3d_canvas/create_layer_items.cpp

@ -206,9 +206,8 @@ void BOARD_ADAPTER::createLayers( REPORTER* aStatusReporter )
else
{
m_trackCount++;
m_averageTrackWidth += static_cast<float>( track->GetWidth() * m_biuTo3Dunits );
}
m_averageTrackWidth += static_cast<float>( track->GetWidth() * m_biuTo3Dunits );
}
if( m_trackCount )
@ -280,7 +279,7 @@ void BOARD_ADAPTER::createLayers( REPORTER* aStatusReporter )
}
// Add object item to layer container
createTrackWithMargin( track, layerContainer );
createTrackWithMargin( track, layerContainer, layer );
}
}
@ -888,7 +887,7 @@ void BOARD_ADAPTER::createLayers( REPORTER* aStatusReporter )
continue;
int maskExpansion = track->GetSolderMaskExpansion();
createTrackWithMargin( track, layerContainer, maskExpansion );
createTrackWithMargin( track, layerContainer, layer, maskExpansion );
}
}

Loading…
Cancel
Save