Swap some of the 3d viewer to VECTOR2I

This commit is contained in:
Marek Roszko 2021-12-29 14:19:08 -05:00
parent 44dc602d6b
commit 2d1357dc54
7 changed files with 36 additions and 37 deletions

View File

@ -90,8 +90,8 @@ BOARD_ADAPTER::BOARD_ADAPTER() :
if( PgmOrNull() ) if( PgmOrNull() )
m_colors = Pgm().GetSettingsManager().GetColorSettings(); m_colors = Pgm().GetSettingsManager().GetColorSettings();
m_boardPos = wxPoint(); m_boardPos = VECTOR2I();
m_boardSize = wxSize(); m_boardSize = VECTOR2I();
m_boardCenter = SFVEC3F( 0.0f ); m_boardCenter = SFVEC3F( 0.0f );
m_boardBoundingBox.Reset(); m_boardBoundingBox.Reset();

View File

@ -39,7 +39,6 @@
#include <layer_ids.h> #include <layer_ids.h>
#include <pad.h> #include <pad.h>
#include <pcb_track.h> #include <pcb_track.h>
#include <wx/gdicmn.h>
#include <pcb_base_frame.h> #include <pcb_base_frame.h>
#include <pcb_text.h> #include <pcb_text.h>
#include <pcb_shape.h> #include <pcb_shape.h>
@ -182,7 +181,7 @@ public:
* *
* @return size in BIU units. * @return size in BIU units.
*/ */
wxSize GetBoardSize() const noexcept VECTOR2I GetBoardSize() const noexcept
{ {
return m_boardSize; return m_boardSize;
} }
@ -192,7 +191,7 @@ public:
* *
* @return position in BIU units. * @return position in BIU units.
*/ */
wxPoint GetBoardPos() const noexcept VECTOR2I GetBoardPos() const noexcept
{ {
return m_boardPos; return m_boardPos;
} }
@ -470,7 +469,7 @@ private:
int aClearanceValue ); int aClearanceValue );
void createPadWithClearance( const PAD *aPad, CONTAINER_2D_BASE* aDstContainer, void createPadWithClearance( const PAD *aPad, CONTAINER_2D_BASE* aDstContainer,
PCB_LAYER_ID aLayer, const wxSize& aClearanceValue ) const; PCB_LAYER_ID aLayer, const VECTOR2I& aClearanceValue ) const;
OBJECT_2D* createPadWithDrill( const PAD* aPad, int aInflateValue ); OBJECT_2D* createPadWithDrill( const PAD* aPad, int aInflateValue );
@ -496,7 +495,7 @@ private:
void addSolidAreasShapes( const ZONE* aZoneContainer, CONTAINER_2D_BASE* aDstContainer, void addSolidAreasShapes( const ZONE* aZoneContainer, CONTAINER_2D_BASE* aDstContainer,
PCB_LAYER_ID aLayerId ); PCB_LAYER_ID aLayerId );
void transformArcToSegments( const wxPoint& aCentre, const wxPoint& aStart, double aArcAngle, void transformArcToSegments( const VECTOR2I& aCentre, const VECTOR2I& aStart, double aArcAngle,
int aCircleToSegmentsCount, int aWidth, int aCircleToSegmentsCount, int aWidth,
CONTAINER_2D_BASE* aDstContainer, const BOARD_ITEM& aBoardItem ); CONTAINER_2D_BASE* aDstContainer, const BOARD_ITEM& aBoardItem );
@ -544,8 +543,8 @@ private:
S3D_CACHE* m_3dModelManager; S3D_CACHE* m_3dModelManager;
COLOR_SETTINGS* m_colors; COLOR_SETTINGS* m_colors;
wxPoint m_boardPos; ///< Board center position in board internal units. VECTOR2I m_boardPos; ///< Board center position in board internal units.
wxSize m_boardSize; ///< Board size in board internal units. VECTOR2I m_boardSize; ///< Board size in board internal units.
SFVEC3F m_boardCenter; ///< 3D center position of the board in 3D units. SFVEC3F m_boardCenter; ///< 3D center position of the board in 3D units.
BBOX_3D m_boardBoundingBox; ///< 3D bounding box of the board in 3D units. BBOX_3D m_boardBoundingBox; ///< 3D bounding box of the board in 3D units.

View File

@ -94,7 +94,7 @@ void addTextSegmToContainer( int x0, int y0, int xf, int yf, void* aData )
void BOARD_ADAPTER::addShapeWithClearance( const PCB_TEXT* aText, CONTAINER_2D_BASE* aDstContainer, void BOARD_ADAPTER::addShapeWithClearance( const PCB_TEXT* aText, CONTAINER_2D_BASE* aDstContainer,
PCB_LAYER_ID aLayerId, int aClearanceValue ) PCB_LAYER_ID aLayerId, int aClearanceValue )
{ {
wxSize size = aText->GetTextSize(); VECTOR2I size = aText->GetTextSize();
if( aText->IsMirrored() ) if( aText->IsMirrored() )
size.x = -size.x; size.x = -size.x;
@ -234,7 +234,7 @@ void BOARD_ADAPTER::addFootprintShapesWithClearance( const FOOTPRINT* aFootprint
callbackData.m_BiuTo3Dunits = m_biuTo3Dunits; callbackData.m_BiuTo3Dunits = m_biuTo3Dunits;
callbackData.m_TextWidth = text->GetEffectiveTextPenWidth() + ( 2 * aInflateValue ); callbackData.m_TextWidth = text->GetEffectiveTextPenWidth() + ( 2 * aInflateValue );
wxSize size = text->GetTextSize(); VECTOR2I size = text->GetTextSize();
bool isBold = text->IsBold(); bool isBold = text->IsBold();
int penWidth = text->GetEffectiveTextPenWidth(); int penWidth = text->GetEffectiveTextPenWidth();
@ -294,7 +294,7 @@ void BOARD_ADAPTER::createTrack( const PCB_TRACK* aTrack, CONTAINER_2D_BASE* aDs
} }
} }
transformArcToSegments( wxPoint( center.x, center.y ), arc->GetStart(), transformArcToSegments( VECTOR2I( center.x, center.y ), arc->GetStart(),
arc_angle, circlesegcount, arc_angle, circlesegcount,
arc->GetWidth() + 2 * aClearanceValue, aDstContainer, *arc ); arc->GetWidth() + 2 * aClearanceValue, aDstContainer, *arc );
break; break;
@ -329,11 +329,11 @@ void BOARD_ADAPTER::createTrack( const PCB_TRACK* aTrack, CONTAINER_2D_BASE* aDs
void BOARD_ADAPTER::createPadWithClearance( const PAD* aPad, CONTAINER_2D_BASE* aDstContainer, void BOARD_ADAPTER::createPadWithClearance( const PAD* aPad, CONTAINER_2D_BASE* aDstContainer,
PCB_LAYER_ID aLayer, PCB_LAYER_ID aLayer,
const wxSize& aClearanceValue ) const const VECTOR2I& aClearanceValue ) const
{ {
SHAPE_POLY_SET poly; SHAPE_POLY_SET poly;
int maxError = GetBoard()->GetDesignSettings().m_MaxError; int maxError = GetBoard()->GetDesignSettings().m_MaxError;
wxSize clearance = aClearanceValue; VECTOR2I clearance = aClearanceValue;
// Our shape-based builder can't handle negative or differing x:y clearance values (the // Our shape-based builder can't handle negative or differing x:y clearance values (the
// former are common for solder paste while the later get generated when a relative paste // former are common for solder paste while the later get generated when a relative paste
@ -345,13 +345,13 @@ void BOARD_ADAPTER::createPadWithClearance( const PAD* aPad, CONTAINER_2D_BASE*
if( ( clearance.x < 0 || clearance.x != clearance.y ) if( ( clearance.x < 0 || clearance.x != clearance.y )
&& aPad->GetShape() != PAD_SHAPE::CUSTOM ) && aPad->GetShape() != PAD_SHAPE::CUSTOM )
{ {
wxSize dummySize = aPad->GetSize() + clearance + clearance; VECTOR2I dummySize = VECTOR2I( aPad->GetSize() ) + clearance + clearance;
if( dummySize.x <= 0 || dummySize.y <= 0 ) if( dummySize.x <= 0 || dummySize.y <= 0 )
return; return;
PAD dummy( *aPad ); PAD dummy( *aPad );
dummy.SetSize( dummySize ); dummy.SetSize( wxSize( dummySize.x, dummySize.y ) );
dummy.TransformShapeWithClearanceToPolygon( poly, aLayer, 0, maxError, ERROR_INSIDE ); dummy.TransformShapeWithClearanceToPolygon( poly, aLayer, 0, maxError, ERROR_INSIDE );
clearance = { 0, 0 }; clearance = { 0, 0 };
} }
@ -471,7 +471,7 @@ void BOARD_ADAPTER::createPadWithClearance( const PAD* aPad, CONTAINER_2D_BASE*
OBJECT_2D* BOARD_ADAPTER::createPadWithDrill( const PAD* aPad, int aInflateValue ) OBJECT_2D* BOARD_ADAPTER::createPadWithDrill( const PAD* aPad, int aInflateValue )
{ {
wxSize drillSize = aPad->GetDrillSize(); VECTOR2I drillSize = aPad->GetDrillSize();
if( !drillSize.x || !drillSize.y ) if( !drillSize.x || !drillSize.y )
{ {
@ -557,7 +557,7 @@ void BOARD_ADAPTER::addPadsWithClearance( const FOOTPRINT* aFootprint,
if( aSkipNonPlatedPads && !isPlated ) if( aSkipNonPlatedPads && !isPlated )
continue; continue;
wxSize margin( aInflateValue, aInflateValue ); VECTOR2I margin( aInflateValue, aInflateValue );
switch( aLayerId ) switch( aLayerId )
{ {
@ -583,19 +583,19 @@ void BOARD_ADAPTER::addPadsWithClearance( const FOOTPRINT* aFootprint,
// based on TransformArcToPolygon function from // based on TransformArcToPolygon function from
// common/convert_basic_shapes_to_polygon.cpp // common/convert_basic_shapes_to_polygon.cpp
void BOARD_ADAPTER::transformArcToSegments( const wxPoint& aCentre, const wxPoint& aStart, void BOARD_ADAPTER::transformArcToSegments( const VECTOR2I& aCentre, const VECTOR2I& aStart,
double aArcAngle, int aCircleToSegmentsCount, double aArcAngle, int aCircleToSegmentsCount,
int aWidth, CONTAINER_2D_BASE* aDstContainer, int aWidth, CONTAINER_2D_BASE* aDstContainer,
const BOARD_ITEM& aBoardItem ) const BOARD_ITEM& aBoardItem )
{ {
wxPoint arc_start, arc_end; VECTOR2I arc_start, arc_end;
int delta = 3600 / aCircleToSegmentsCount; // rotate angle in 0.1 degree int delta = 3600 / aCircleToSegmentsCount; // rotate angle in 0.1 degree
arc_end = arc_start = aStart; arc_end = arc_start = aStart;
if( aArcAngle != 3600 ) if( aArcAngle != 3600 )
{ {
RotatePoint( &arc_end, aCentre, -aArcAngle ); RotatePoint( arc_end, aCentre, -aArcAngle );
} }
if( aArcAngle < 0 ) if( aArcAngle < 0 )
@ -605,13 +605,13 @@ void BOARD_ADAPTER::transformArcToSegments( const wxPoint& aCentre, const wxPoin
} }
// Compute the ends of segments and creates poly // Compute the ends of segments and creates poly
wxPoint curr_end = arc_start; VECTOR2I curr_end = arc_start;
wxPoint curr_start = arc_start; VECTOR2I curr_start = arc_start;
for( int ii = delta; ii < aArcAngle; ii += delta ) for( int ii = delta; ii < aArcAngle; ii += delta )
{ {
curr_end = arc_start; curr_end = arc_start;
RotatePoint( &curr_end, aCentre, -ii ); RotatePoint( curr_end, aCentre, -ii );
const SFVEC2F start3DU( curr_start.x * m_biuTo3Dunits, -curr_start.y * m_biuTo3Dunits ); const SFVEC2F start3DU( curr_start.x * m_biuTo3Dunits, -curr_start.y * m_biuTo3Dunits );
const SFVEC2F end3DU ( curr_end.x * m_biuTo3Dunits, -curr_end.y * m_biuTo3Dunits ); const SFVEC2F end3DU ( curr_end.x * m_biuTo3Dunits, -curr_end.y * m_biuTo3Dunits );

View File

@ -450,7 +450,7 @@ void BOARD_ADAPTER::createLayers( REPORTER* aStatusReporter )
{ {
for( PAD* pad : footprint->Pads() ) for( PAD* pad : footprint->Pads() )
{ {
const wxSize padHole = pad->GetDrillSize(); const VECTOR2I padHole = pad->GetDrillSize();
if( !padHole.x ) // Not drilled pad like SMD pad if( !padHole.x ) // Not drilled pad like SMD pad
continue; continue;
@ -480,7 +480,7 @@ void BOARD_ADAPTER::createLayers( REPORTER* aStatusReporter )
{ {
for( PAD* pad : footprint->Pads() ) for( PAD* pad : footprint->Pads() )
{ {
const wxSize padHole = pad->GetDrillSize(); const VECTOR2I padHole = pad->GetDrillSize();
if( !padHole.x ) // Not drilled pad like SMD pad if( !padHole.x ) // Not drilled pad like SMD pad
continue; continue;

View File

@ -53,7 +53,7 @@ void BOARD_ADAPTER::buildPadOutlineAsPolygon( const PAD* aPad, SHAPE_POLY_SET& a
const VECTOR2I& a = path.CPoint( ii ); const VECTOR2I& a = path.CPoint( ii );
const VECTOR2I& b = path.CPoint( ii + 1 ); const VECTOR2I& b = path.CPoint( ii + 1 );
TransformOvalToPolygon( aCornerBuffer, (wxPoint) a, (wxPoint) b, aWidth, ARC_HIGH_DEF, TransformOvalToPolygon( aCornerBuffer, a, b, aWidth, ARC_HIGH_DEF,
ERROR_INSIDE ); ERROR_INSIDE );
} }
} }

View File

@ -1218,7 +1218,7 @@ void RENDER_3D_OPENGL::renderFootprint( const FOOTPRINT* aFootprint, bool aRende
glPushMatrix(); glPushMatrix();
wxPoint pos = aFootprint->GetPosition(); VECTOR2I pos = aFootprint->GetPosition();
glTranslatef( pos.x * m_boardAdapter.BiuTo3dUnits(), -pos.y * m_boardAdapter.BiuTo3dUnits(), glTranslatef( pos.x * m_boardAdapter.BiuTo3dUnits(), -pos.y * m_boardAdapter.BiuTo3dUnits(),
zpos ); zpos );
@ -1373,8 +1373,8 @@ void RENDER_3D_OPENGL::generate3dGrid( GRID3D_TYPE aGridType )
glNormal3f( 0.0, 0.0, 1.0 ); glNormal3f( 0.0, 0.0, 1.0 );
const wxSize brd_size = m_boardAdapter.GetBoardSize(); const VECTOR2I brd_size = m_boardAdapter.GetBoardSize();
wxPoint brd_center_pos = m_boardAdapter.GetBoardPos(); VECTOR2I brd_center_pos = m_boardAdapter.GetBoardPos();
brd_center_pos.y = -brd_center_pos.y; brd_center_pos.y = -brd_center_pos.y;

View File

@ -994,7 +994,7 @@ void RENDER_3D_RAYTRACE::insertHole( const PAD* aPad )
else else
objColor = m_boardAdapter.GetItemColor( LAYER_PADS_TH ); objColor = m_boardAdapter.GetItemColor( LAYER_PADS_TH );
const wxSize drillsize = aPad->GetDrillSize(); const VECTOR2I drillsize = aPad->GetDrillSize();
const bool hasHole = drillsize.x && drillsize.y; const bool hasHole = drillsize.x && drillsize.y;
if( !hasHole ) if( !hasHole )
@ -1053,7 +1053,7 @@ void RENDER_3D_RAYTRACE::insertHole( const PAD* aPad )
} }
else // Oblong hole else // Oblong hole
{ {
wxPoint ends_offset; VECTOR2I ends_offset;
int width; int width;
if( drillsize.x > drillsize.y ) // Horizontal oval if( drillsize.x > drillsize.y ) // Horizontal oval
@ -1067,10 +1067,10 @@ void RENDER_3D_RAYTRACE::insertHole( const PAD* aPad )
width = drillsize.x; width = drillsize.x;
} }
RotatePoint( &ends_offset, aPad->GetOrientation() ); RotatePoint( ends_offset, aPad->GetOrientation() );
wxPoint start = aPad->GetPosition() + ends_offset; VECTOR2I start = VECTOR2I( aPad->GetPosition() ) + ends_offset;
wxPoint end = aPad->GetPosition() - ends_offset; VECTOR2I end = VECTOR2I( aPad->GetPosition() ) - ends_offset;
ROUND_SEGMENT_2D* innerSeg = ROUND_SEGMENT_2D* innerSeg =
new ROUND_SEGMENT_2D( SFVEC2F( start.x * m_boardAdapter.BiuTo3dUnits(), new ROUND_SEGMENT_2D( SFVEC2F( start.x * m_boardAdapter.BiuTo3dUnits(),
@ -1210,7 +1210,7 @@ void RENDER_3D_RAYTRACE::load3DModels( CONTAINER_3D& aDstContainer, bool aSkipMa
{ {
double zpos = m_boardAdapter.GetFootprintZPos( fp->IsFlipped() ); double zpos = m_boardAdapter.GetFootprintZPos( fp->IsFlipped() );
wxPoint pos = fp->GetPosition(); VECTOR2I pos = fp->GetPosition();
glm::mat4 fpMatrix = glm::mat4( 1.0f ); glm::mat4 fpMatrix = glm::mat4( 1.0f );