Add via solder mask to 3D viewer rendering.
(Of course, only when vias are not tented.) Fixes https://gitlab.com/kicad/code/kicad/-/issues/15164
This commit is contained in:
parent
8f754c7c3e
commit
a85a2b9cbc
|
@ -334,6 +334,9 @@ private:
|
||||||
void destroyLayers();
|
void destroyLayers();
|
||||||
|
|
||||||
// Helper functions to create the board
|
// Helper functions to create the board
|
||||||
|
void createViaWithMargin( const PCB_TRACK* aTrack, CONTAINER_2D_BASE* aDstContainer,
|
||||||
|
int aMargin );
|
||||||
|
|
||||||
void createTrack( const PCB_TRACK* aTrack, CONTAINER_2D_BASE* aDstContainer );
|
void createTrack( const PCB_TRACK* aTrack, CONTAINER_2D_BASE* aDstContainer );
|
||||||
|
|
||||||
void createPadWithMargin( const PAD *aPad, CONTAINER_2D_BASE* aDstContainer,
|
void createPadWithMargin( const PAD *aPad, CONTAINER_2D_BASE* aDstContainer,
|
||||||
|
|
|
@ -229,6 +229,19 @@ void BOARD_ADAPTER::addFootprintShapes( const FOOTPRINT* aFootprint, CONTAINER_2
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void BOARD_ADAPTER::createViaWithMargin( const PCB_TRACK* aTrack, CONTAINER_2D_BASE* aDstContainer,
|
||||||
|
int aMargin )
|
||||||
|
{
|
||||||
|
SFVEC2F start3DU = TO_SFVEC2F( aTrack->GetStart() );
|
||||||
|
SFVEC2F end3DU = TO_SFVEC2F( aTrack->GetEnd() );
|
||||||
|
|
||||||
|
const float radius3DU = TO_3DU( ( aTrack->GetWidth() / 2 ) + aMargin );
|
||||||
|
|
||||||
|
if( radius3DU > 0.0 )
|
||||||
|
aDstContainer->Add( new FILLED_CIRCLE_2D( start3DU, radius3DU, *aTrack ) );
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
void BOARD_ADAPTER::createTrack( const PCB_TRACK* aTrack, CONTAINER_2D_BASE* aDstContainer )
|
void BOARD_ADAPTER::createTrack( const PCB_TRACK* aTrack, CONTAINER_2D_BASE* aDstContainer )
|
||||||
{
|
{
|
||||||
SFVEC2F start3DU = TO_SFVEC2F( aTrack->GetStart() );
|
SFVEC2F start3DU = TO_SFVEC2F( aTrack->GetStart() );
|
||||||
|
@ -238,7 +251,7 @@ void BOARD_ADAPTER::createTrack( const PCB_TRACK* aTrack, CONTAINER_2D_BASE* aDs
|
||||||
{
|
{
|
||||||
case PCB_VIA_T:
|
case PCB_VIA_T:
|
||||||
{
|
{
|
||||||
const float radius3DU = TO_3DU( aTrack->GetWidth() / 2 );
|
const float radius3DU = TO_3DU( aTrack->GetWidth() / 2 );
|
||||||
|
|
||||||
if( radius3DU > 0.0 )
|
if( radius3DU > 0.0 )
|
||||||
aDstContainer->Add( new FILLED_CIRCLE_2D( start3DU, radius3DU, *aTrack ) );
|
aDstContainer->Add( new FILLED_CIRCLE_2D( start3DU, radius3DU, *aTrack ) );
|
||||||
|
|
|
@ -978,6 +978,35 @@ void BOARD_ADAPTER::createLayers( REPORTER* aStatusReporter )
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Add via tech layers
|
||||||
|
if( ( layer == F_Mask || layer == B_Mask ) && !m_board->GetTentVias() )
|
||||||
|
{
|
||||||
|
int maskExpansion = GetBoard()->GetDesignSettings().m_SolderMaskExpansion;
|
||||||
|
|
||||||
|
for( PCB_TRACK* track : m_board->Tracks() )
|
||||||
|
{
|
||||||
|
if( track->Type() == PCB_VIA_T
|
||||||
|
&& static_cast<const PCB_VIA*>( track )->FlashLayer( layer ) )
|
||||||
|
{
|
||||||
|
createViaWithMargin( track, layerContainer, maskExpansion );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Add via tech layers - contours (vertical walls)
|
||||||
|
if( buildVerticalWallsForTechLayers )
|
||||||
|
{
|
||||||
|
for( PCB_TRACK* track : m_board->Tracks() )
|
||||||
|
{
|
||||||
|
if( track->Type() == PCB_VIA_T
|
||||||
|
&& static_cast<const PCB_VIA*>( track )->FlashLayer( layer ) )
|
||||||
|
{
|
||||||
|
track->TransformShapeToPolygon( *layerPoly, layer, maskExpansion, maxError,
|
||||||
|
ERROR_INSIDE );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// Add footprints tech layers - objects
|
// Add footprints tech layers - objects
|
||||||
for( FOOTPRINT* footprint : m_board->Footprints() )
|
for( FOOTPRINT* footprint : m_board->Footprints() )
|
||||||
{
|
{
|
||||||
|
|
Loading…
Reference in New Issue