diff --git a/include/eda_shape.h b/include/eda_shape.h index d95cdd356f..2a4a6f33ae 100644 --- a/include/eda_shape.h +++ b/include/eda_shape.h @@ -297,7 +297,7 @@ protected: const std::vector buildBezierToSegmentsPointsList( int aMinSegLen ) const; protected: - SHAPE_T m_shape; // Shape: line, Circle, Arc + SHAPE_T m_shape; // Shape: line, Circle, Arc int m_width; // thickness of lines ... bool m_filled; // Pretty much what it says on the tin... wxPoint m_start; // Line start point or Circle and Arc center diff --git a/pcbnew/board_items_to_polygon_shape_transform.cpp b/pcbnew/board_items_to_polygon_shape_transform.cpp index 8c56e77d79..b8adc8501d 100644 --- a/pcbnew/board_items_to_polygon_shape_transform.cpp +++ b/pcbnew/board_items_to_polygon_shape_transform.cpp @@ -516,7 +516,7 @@ void EDA_SHAPE::TransformShapeWithClearanceToPolygon( SHAPE_POLY_SET& aCornerBuf break; } - case SHAPE_T::BEZIER: // Bezier curve + case SHAPE_T::BEZIER: { std::vector ctrlPoints = { m_start, m_bezierC1, m_bezierC2, m_end }; BEZIER_POLY converter( ctrlPoints ); @@ -533,7 +533,7 @@ void EDA_SHAPE::TransformShapeWithClearanceToPolygon( SHAPE_POLY_SET& aCornerBuf } default: - wxFAIL_MSG( "PCB_SHAPE::TransformShapeWithClearanceToPolygon no implementation for " + wxFAIL_MSG( "EDA_SHAPE::TransformShapeWithClearanceToPolygon not implemented for " + SHAPE_T_asString() ); break; } diff --git a/pcbnew/fp_shape.cpp b/pcbnew/fp_shape.cpp index 194e5c83e9..1f2fbd140e 100644 --- a/pcbnew/fp_shape.cpp +++ b/pcbnew/fp_shape.cpp @@ -160,7 +160,7 @@ void FP_SHAPE::Flip( const wxPoint& aCentre, bool aFlipLeftRight ) switch( GetShape() ) { case SHAPE_T::ARC: - // Update arc angle but do not yet update m_thirdPoint0 and m_thirdPoint, + // Update arc angle but do not yet update m_ThirdPoint0 and m_thirdPoint, // arc center and start point must be updated before calculation arc end. SetAngle( -GetAngle(), false ); KI_FALLTHROUGH; @@ -227,7 +227,7 @@ void FP_SHAPE::Mirror( const wxPoint& aCentre, bool aMirrorAroundXAxis ) switch( GetShape() ) { case SHAPE_T::ARC: - // Update arc angle but do not yet update m_thirdPoint0 and m_thirdPoint, + // Update arc angle but do not yet update m_ThirdPoint0 and m_thirdPoint, // arc center and start point must be updated before calculation arc end. SetAngle( -GetAngle(), false ); KI_FALLTHROUGH; diff --git a/pcbnew/graphics_cleaner.cpp b/pcbnew/graphics_cleaner.cpp index ab960f6999..0f552d7c30 100644 --- a/pcbnew/graphics_cleaner.cpp +++ b/pcbnew/graphics_cleaner.cpp @@ -126,7 +126,7 @@ bool GRAPHICS_CLEANER::areEquivalent( PCB_SHAPE* aShape1, PCB_SHAPE* aShape2 ) && aShape1->GetBezierPoints() == aShape2->GetBezierPoints(); default: - wxFAIL_MSG( "GRAPHICS_CLEANER::areEquivalent unsupported PCB_SHAPE shape: " + wxFAIL_MSG( "GRAPHICS_CLEANER::areEquivalent unimplemented for " + aShape1->SHAPE_T_asString() ); return false; } diff --git a/pcbnew/microwave/microwave_inductor.cpp b/pcbnew/microwave/microwave_inductor.cpp index b843331886..954a686acf 100644 --- a/pcbnew/microwave/microwave_inductor.cpp +++ b/pcbnew/microwave/microwave_inductor.cpp @@ -425,12 +425,11 @@ FOOTPRINT* MICROWAVE_TOOL::createMicrowaveInductor( MICROWAVE_INDUCTOR_PATTERN& for( unsigned jj = 1; jj < buffer.size(); jj++ ) { FP_SHAPE* seg; - seg = new FP_SHAPE( footprint ); + seg = new FP_SHAPE( footprint, SHAPE_T::SEGMENT ); seg->SetStart( buffer[jj - 1] ); seg->SetEnd( buffer[jj] ); seg->SetWidth( aInductorPattern.m_Width ); seg->SetLayer( footprint->GetLayer() ); - seg->SetShape( SHAPE_T::SEGMENT ); seg->SetStart0( seg->GetStart() - footprint->GetPosition() ); seg->SetEnd0( seg->GetEnd() - footprint->GetPosition() ); footprint->Add( seg ); diff --git a/pcbnew/microwave/microwave_polygon.cpp b/pcbnew/microwave/microwave_polygon.cpp index 674637e36f..14f85e8fd7 100644 --- a/pcbnew/microwave/microwave_polygon.cpp +++ b/pcbnew/microwave/microwave_polygon.cpp @@ -341,8 +341,7 @@ FOOTPRINT* MICROWAVE_TOOL::createPolygonShape() pad2->SetX( pad2->GetPos0().x ); // Add a polygonal edge (corners will be added later) on copper layer - shape = new FP_SHAPE( footprint ); - shape->SetShape( SHAPE_T::POLY ); + shape = new FP_SHAPE( footprint, SHAPE_T::POLY ); shape->SetFilled( true ); shape->SetLayer( F_Cu ); diff --git a/pcbnew/pad_custom_shape_functions.cpp b/pcbnew/pad_custom_shape_functions.cpp index c93cce6bca..ccf18842b4 100644 --- a/pcbnew/pad_custom_shape_functions.cpp +++ b/pcbnew/pad_custom_shape_functions.cpp @@ -57,8 +57,7 @@ void PAD::AddPrimitivePoly( const SHAPE_POLY_SET& aPoly, int aThickness, bool aF void PAD::AddPrimitivePoly( const std::vector& aPoly, int aThickness, bool aFilled ) { - PCB_SHAPE* item = new PCB_SHAPE(); - item->SetShape( SHAPE_T::POLY ); + PCB_SHAPE* item = new PCB_SHAPE( nullptr, SHAPE_T::POLY ); item->SetFilled( aFilled ); item->SetPolyPoints( aPoly ); item->SetWidth( aThickness ); @@ -70,8 +69,7 @@ void PAD::AddPrimitivePoly( const std::vector& aPoly, int aThickness, b void PAD::AddPrimitiveSegment( const wxPoint& aStart, const wxPoint& aEnd, int aThickness ) { - PCB_SHAPE* item = new PCB_SHAPE(); - item->SetShape( SHAPE_T::SEGMENT ); + PCB_SHAPE* item = new PCB_SHAPE( nullptr, SHAPE_T::SEGMENT ); item->SetFilled( false ); item->SetStart( aStart ); item->SetEnd( aEnd ); @@ -85,8 +83,7 @@ void PAD::AddPrimitiveSegment( const wxPoint& aStart, const wxPoint& aEnd, int a void PAD::AddPrimitiveArc( const wxPoint& aCenter, const wxPoint& aStart, int aArcAngle, int aThickness ) { - PCB_SHAPE* item = new PCB_SHAPE(); - item->SetShape( SHAPE_T::ARC ); + PCB_SHAPE* item = new PCB_SHAPE( nullptr, SHAPE_T::ARC ); item->SetFilled( false ); item->SetArcCenter( aCenter ); item->SetArcStart( aStart ); @@ -101,8 +98,7 @@ void PAD::AddPrimitiveArc( const wxPoint& aCenter, const wxPoint& aStart, int aA void PAD::AddPrimitiveCurve( const wxPoint& aStart, const wxPoint& aEnd, const wxPoint& aCtrl1, const wxPoint& aCtrl2, int aThickness ) { - PCB_SHAPE* item = new PCB_SHAPE(); - item->SetShape( SHAPE_T::BEZIER ); + PCB_SHAPE* item = new PCB_SHAPE( nullptr, SHAPE_T::BEZIER ); item->SetFilled( false ); item->SetStart( aStart ); item->SetEnd( aEnd ); @@ -117,8 +113,7 @@ void PAD::AddPrimitiveCurve( const wxPoint& aStart, const wxPoint& aEnd, const w void PAD::AddPrimitiveCircle( const wxPoint& aCenter, int aRadius, int aThickness, bool aFilled ) { - PCB_SHAPE* item = new PCB_SHAPE(); - item->SetShape( SHAPE_T::CIRCLE ); + PCB_SHAPE* item = new PCB_SHAPE( nullptr, SHAPE_T::CIRCLE ); item->SetFilled( aFilled ); item->SetStart( aCenter ); item->SetEnd( wxPoint( aCenter.x + aRadius, aCenter.y ) ); @@ -132,8 +127,7 @@ void PAD::AddPrimitiveCircle( const wxPoint& aCenter, int aRadius, int aThicknes void PAD::AddPrimitiveRect( const wxPoint& aStart, const wxPoint& aEnd, int aThickness, bool aFilled) { - PCB_SHAPE* item = new PCB_SHAPE(); - item->SetShape( SHAPE_T::RECT ); + PCB_SHAPE* item = new PCB_SHAPE( nullptr, SHAPE_T:: RECT ); item->SetFilled( aFilled ); item->SetStart( aStart ); item->SetEnd( aEnd ); diff --git a/pcbnew/pcb_shape.cpp b/pcbnew/pcb_shape.cpp index b60ffa6f40..7c1d10de00 100644 --- a/pcbnew/pcb_shape.cpp +++ b/pcbnew/pcb_shape.cpp @@ -37,7 +37,13 @@ PCB_SHAPE::PCB_SHAPE( BOARD_ITEM* aParent, KICAD_T idtype, SHAPE_T shapetype ) : BOARD_ITEM( aParent, idtype ), EDA_SHAPE( shapetype, Millimeter2iu( DEFAULT_LINE_WIDTH ) ) { - m_flags = 0; +} + + +PCB_SHAPE::PCB_SHAPE( BOARD_ITEM* aParent, SHAPE_T shapetype ) : + BOARD_ITEM( aParent, PCB_SHAPE_T ), + EDA_SHAPE( shapetype, Millimeter2iu( DEFAULT_LINE_WIDTH ) ) +{ } diff --git a/pcbnew/pcb_shape.h b/pcbnew/pcb_shape.h index 1134189e89..3f3ff47163 100644 --- a/pcbnew/pcb_shape.h +++ b/pcbnew/pcb_shape.h @@ -38,8 +38,9 @@ class MSG_PANEL_ITEM; class PCB_SHAPE : public BOARD_ITEM, public EDA_SHAPE { public: - PCB_SHAPE( BOARD_ITEM* aParent = NULL, KICAD_T idtype = PCB_SHAPE_T, - SHAPE_T shapetype = SHAPE_T::SEGMENT ); + PCB_SHAPE( BOARD_ITEM* aParent, KICAD_T idtype, SHAPE_T shapetype ); + + PCB_SHAPE( BOARD_ITEM* aParent = NULL, SHAPE_T shapetype = SHAPE_T::SEGMENT ); // Do not create a copy constructor & operator=. // The ones generated by the compiler are adequate. diff --git a/pcbnew/plugins/altium/altium_pcb.cpp b/pcbnew/plugins/altium/altium_pcb.cpp index b97f0b0ca5..8572bd5dbe 100644 --- a/pcbnew/plugins/altium/altium_pcb.cpp +++ b/pcbnew/plugins/altium/altium_pcb.cpp @@ -114,7 +114,7 @@ bool IsAltiumLayerAPlane( ALTIUM_LAYER aLayer ) } -PCB_SHAPE* ALTIUM_PCB::HelperCreateAndAddDrawsegment( uint16_t aComponent ) +PCB_SHAPE* ALTIUM_PCB::HelperCreateAndAddShape( uint16_t aComponent ) { if( aComponent == ALTIUM_COMPONENT_NONE ) { @@ -141,7 +141,7 @@ PCB_SHAPE* ALTIUM_PCB::HelperCreateAndAddDrawsegment( uint16_t aComponent ) } -void ALTIUM_PCB::HelperDrawsegmentSetLocalCoord( PCB_SHAPE* aShape, uint16_t aComponent ) +void ALTIUM_PCB::HelperShapeSetLocalCoord( PCB_SHAPE* aShape, uint16_t aComponent ) { if( aComponent != ALTIUM_COMPONENT_NONE ) { @@ -169,36 +169,36 @@ void ALTIUM_PCB::HelperDrawsegmentSetLocalCoord( PCB_SHAPE* aShape, uint16_t aCo void HelperShapeLineChainFromAltiumVertices( SHAPE_LINE_CHAIN& aLine, const std::vector& aVertices ) { - for( auto& vertice : aVertices ) + for( const ALTIUM_VERTICE& vertex : aVertices ) { - if( vertice.isRound ) + if( vertex.isRound ) { - double angle = NormalizeAngleDegreesPos( vertice.endangle - vertice.startangle ); + double angle = NormalizeAngleDegreesPos( vertex.endangle - vertex.startangle ); - double startradiant = DEG2RAD( vertice.startangle ); - double endradiant = DEG2RAD( vertice.endangle ); - wxPoint arcStartOffset = wxPoint( KiROUND( std::cos( startradiant ) * vertice.radius ), - -KiROUND( std::sin( startradiant ) * vertice.radius ) ); + double startradiant = DEG2RAD( vertex.startangle ); + double endradiant = DEG2RAD( vertex.endangle ); + wxPoint arcStartOffset = wxPoint( KiROUND( std::cos( startradiant ) * vertex.radius ), + -KiROUND( std::sin( startradiant ) * vertex.radius ) ); - wxPoint arcEndOffset = wxPoint( KiROUND( std::cos( endradiant ) * vertice.radius ), - -KiROUND( std::sin( endradiant ) * vertice.radius ) ); + wxPoint arcEndOffset = wxPoint( KiROUND( std::cos( endradiant ) * vertex.radius ), + -KiROUND( std::sin( endradiant ) * vertex.radius ) ); - wxPoint arcStart = vertice.center + arcStartOffset; - wxPoint arcEnd = vertice.center + arcEndOffset; + wxPoint arcStart = vertex.center + arcStartOffset; + wxPoint arcEnd = vertex.center + arcEndOffset; - if( GetLineLength( arcStart, vertice.position ) - < GetLineLength( arcEnd, vertice.position ) ) + if( GetLineLength( arcStart, vertex.position ) + < GetLineLength( arcEnd, vertex.position ) ) { - aLine.Append( SHAPE_ARC( vertice.center, arcStart, -angle ) ); + aLine.Append( SHAPE_ARC( vertex.center, arcStart, -angle ) ); } else { - aLine.Append( SHAPE_ARC( vertice.center, arcEnd, angle ) ); + aLine.Append( SHAPE_ARC( vertex.center, arcEnd, angle ) ); } } else { - aLine.Append( vertice.position ); + aLine.Append( vertex.position ); } } @@ -1240,9 +1240,8 @@ void ALTIUM_PCB::HelperParseDimensions6Leader( const ADIMENSION6& aElem ) wxPoint last = referencePoint0; for( size_t i = 1; i < aElem.referencePoint.size(); i++ ) { - PCB_SHAPE* shape = new PCB_SHAPE( m_board ); + PCB_SHAPE* shape = new PCB_SHAPE( m_board, SHAPE_T::SEGMENT ); m_board->Add( shape, ADD_MODE::APPEND ); - shape->SetShape( SHAPE_T::SEGMENT ); shape->SetLayer( klayer ); shape->SetWidth( aElem.linewidth ); shape->SetStart( last ); @@ -1261,9 +1260,8 @@ void ALTIUM_PCB::HelperParseDimensions6Leader( const ADIMENSION6& aElem ) wxPoint( KiROUND( dirVec.x / scaling ), KiROUND( dirVec.y / scaling ) ); RotatePoint( &arrVec, 200. ); - PCB_SHAPE* shape1 = new PCB_SHAPE( m_board ); + PCB_SHAPE* shape1 = new PCB_SHAPE( m_board, SHAPE_T::SEGMENT ); m_board->Add( shape1, ADD_MODE::APPEND ); - shape1->SetShape( SHAPE_T::SEGMENT ); shape1->SetLayer( klayer ); shape1->SetWidth( aElem.linewidth ); shape1->SetStart( referencePoint0 ); @@ -1271,9 +1269,8 @@ void ALTIUM_PCB::HelperParseDimensions6Leader( const ADIMENSION6& aElem ) RotatePoint( &arrVec, -400. ); - PCB_SHAPE* shape2 = new PCB_SHAPE( m_board ); + PCB_SHAPE* shape2 = new PCB_SHAPE( m_board, SHAPE_T::SEGMENT ); m_board->Add( shape2, ADD_MODE::APPEND ); - shape2->SetShape( SHAPE_T::SEGMENT ); shape2->SetLayer( klayer ); shape2->SetWidth( aElem.linewidth ); shape2->SetStart( referencePoint0 ); @@ -1314,9 +1311,8 @@ void ALTIUM_PCB::HelperParseDimensions6Datum( const ADIMENSION6& aElem ) for( size_t i = 0; i < aElem.referencePoint.size(); i++ ) { - PCB_SHAPE* shape = new PCB_SHAPE( m_board ); + PCB_SHAPE* shape = new PCB_SHAPE( m_board, SHAPE_T::SEGMENT ); m_board->Add( shape, ADD_MODE::APPEND ); - shape->SetShape( SHAPE_T::SEGMENT ); shape->SetLayer( klayer ); shape->SetWidth( aElem.linewidth ); shape->SetStart( aElem.referencePoint.at( i ) ); @@ -1790,9 +1786,8 @@ void ALTIUM_PCB::ParseShapeBasedRegions6Data( const CFB::CompoundFileReader& aRe continue; } - PCB_SHAPE* shape = new PCB_SHAPE( m_board ); + PCB_SHAPE* shape = new PCB_SHAPE( m_board, SHAPE_T::POLY ); m_board->Add( shape, ADD_MODE::APPEND ); - shape->SetShape( SHAPE_T::POLY ); shape->SetFilled( true ); shape->SetLayer( klayer ); shape->SetWidth( 0 ); @@ -1937,6 +1932,7 @@ void ALTIUM_PCB::ParseArcs6Data( const CFB::CompoundFileReader& aReader, else { shape.SetShape( SHAPE_T::ARC ); + double startradiant = DEG2RAD( elem.startangle ); wxPoint arcStartOffset = wxPoint( KiROUND( std::cos( startradiant ) * elem.radius ), -KiROUND( std::sin( startradiant ) * elem.radius ) ); @@ -2026,7 +2022,7 @@ void ALTIUM_PCB::ParseArcs6Data( const CFB::CompoundFileReader& aReader, } else { - PCB_SHAPE* shape = HelperCreateAndAddDrawsegment( elem.component ); + PCB_SHAPE* shape = HelperCreateAndAddShape( elem.component ); shape->SetArcCenter( elem.center ); shape->SetWidth( elem.width ); shape->SetLayer( klayer ); @@ -2047,7 +2043,7 @@ void ALTIUM_PCB::ParseArcs6Data( const CFB::CompoundFileReader& aReader, shape->SetArcStart( elem.center + arcStartOffset ); } - HelperDrawsegmentSetLocalCoord( shape, elem.component ); + HelperShapeSetLocalCoord( shape, elem.component ); } } @@ -2318,21 +2314,21 @@ void ALTIUM_PCB::HelperParsePad6NonCopper( const APAD6& aElem ) case ALTIUM_PAD_SHAPE::RECT: { // filled rect - PCB_SHAPE* shape = HelperCreateAndAddDrawsegment( aElem.component ); + PCB_SHAPE* shape = HelperCreateAndAddShape( aElem.component ); shape->SetShape( SHAPE_T::POLY ); shape->SetFilled( true ); shape->SetLayer( klayer ); shape->SetWidth( 0 ); shape->SetPolyPoints( { aElem.position + wxPoint( aElem.topsize.x / 2, aElem.topsize.y / 2 ), - aElem.position + wxPoint( aElem.topsize.x / 2, -aElem.topsize.y / 2 ), - aElem.position + wxPoint( -aElem.topsize.x / 2, -aElem.topsize.y / 2 ), - aElem.position + wxPoint( -aElem.topsize.x / 2, aElem.topsize.y / 2 ) } ); + aElem.position + wxPoint( aElem.topsize.x / 2, -aElem.topsize.y / 2 ), + aElem.position + wxPoint( -aElem.topsize.x / 2, -aElem.topsize.y / 2 ), + aElem.position + wxPoint( -aElem.topsize.x / 2, aElem.topsize.y / 2 ) } ); if( aElem.direction != 0 ) shape->Rotate( aElem.position, aElem.direction * 10 ); - HelperDrawsegmentSetLocalCoord( shape, aElem.component ); + HelperShapeSetLocalCoord( shape, aElem.component ); } break; @@ -2344,7 +2340,7 @@ void ALTIUM_PCB::HelperParsePad6NonCopper( const APAD6& aElem ) int cornerradius = aElem.sizeAndShape->cornerradius[0]; int offset = ( std::min( aElem.topsize.x, aElem.topsize.y ) * cornerradius ) / 200; - PCB_SHAPE* shape = HelperCreateAndAddDrawsegment( aElem.component ); + PCB_SHAPE* shape = HelperCreateAndAddShape( aElem.component ); shape->SetLayer( klayer ); shape->SetWidth( offset * 2 ); @@ -2391,24 +2387,24 @@ void ALTIUM_PCB::HelperParsePad6NonCopper( const APAD6& aElem ) if( aElem.direction != 0 ) shape->Rotate( aElem.position, aElem.direction * 10 ); - HelperDrawsegmentSetLocalCoord( shape, aElem.component ); + HelperShapeSetLocalCoord( shape, aElem.component ); } else if( aElem.topsize.x == aElem.topsize.y ) { // filled circle - PCB_SHAPE* shape = HelperCreateAndAddDrawsegment( aElem.component ); + PCB_SHAPE* shape = HelperCreateAndAddShape( aElem.component ); shape->SetShape( SHAPE_T::CIRCLE ); shape->SetFilled( true ); shape->SetLayer( klayer ); shape->SetArcCenter( aElem.position ); shape->SetWidth( aElem.topsize.x / 2 ); shape->SetArcStart( aElem.position - wxPoint( 0, aElem.topsize.x / 4 ) ); - HelperDrawsegmentSetLocalCoord( shape, aElem.component ); + HelperShapeSetLocalCoord( shape, aElem.component ); } else { // short line - PCB_SHAPE* shape = HelperCreateAndAddDrawsegment( aElem.component ); + PCB_SHAPE* shape = HelperCreateAndAddShape( aElem.component ); shape->SetShape( SHAPE_T::SEGMENT ); shape->SetLayer( klayer ); shape->SetWidth( std::min( aElem.topsize.x, aElem.topsize.y ) ); @@ -2429,14 +2425,14 @@ void ALTIUM_PCB::HelperParsePad6NonCopper( const APAD6& aElem ) if( aElem.direction != 0 ) shape->Rotate( aElem.position, aElem.direction * 10. ); - HelperDrawsegmentSetLocalCoord( shape, aElem.component ); + HelperShapeSetLocalCoord( shape, aElem.component ); } break; case ALTIUM_PAD_SHAPE::OCTAGONAL: { // filled octagon - PCB_SHAPE* shape = HelperCreateAndAddDrawsegment( aElem.component ); + PCB_SHAPE* shape = HelperCreateAndAddShape( aElem.component ); shape->SetShape( SHAPE_T::POLY ); shape->SetFilled( true ); shape->SetLayer( klayer ); @@ -2457,7 +2453,7 @@ void ALTIUM_PCB::HelperParsePad6NonCopper( const APAD6& aElem ) if( aElem.direction != 0. ) shape->Rotate( aElem.position, aElem.direction * 10 ); - HelperDrawsegmentSetLocalCoord( shape, aElem.component ); + HelperShapeSetLocalCoord( shape, aElem.component ); } break; @@ -2554,8 +2550,7 @@ void ALTIUM_PCB::ParseTracks6Data( const CFB::CompoundFileReader& aReader, if( elem.is_keepout || IsAltiumLayerAPlane( elem.layer ) ) { - PCB_SHAPE shape( nullptr ); // just a helper to get the graphic - shape.SetShape( SHAPE_T::SEGMENT ); + PCB_SHAPE shape( nullptr, SHAPE_T::SEGMENT ); shape.SetStart( elem.start ); shape.SetEnd( elem.end ); shape.SetWidth( elem.width ); @@ -2619,13 +2614,13 @@ void ALTIUM_PCB::ParseTracks6Data( const CFB::CompoundFileReader& aReader, } else { - PCB_SHAPE* shape = HelperCreateAndAddDrawsegment( elem.component ); + PCB_SHAPE* shape = HelperCreateAndAddShape( elem.component ); shape->SetShape( SHAPE_T::SEGMENT ); shape->SetStart( elem.start ); shape->SetEnd( elem.end ); shape->SetWidth( elem.width ); shape->SetLayer( klayer ); - HelperDrawsegmentSetLocalCoord( shape, elem.component ); + HelperShapeSetLocalCoord( shape, elem.component ); } reader.SkipSubrecord(); @@ -2891,10 +2886,8 @@ void ALTIUM_PCB::ParseFills6Data( const CFB::CompoundFileReader& aReader, } else { - PCB_SHAPE* shape = new PCB_SHAPE( m_board ); + PCB_SHAPE* shape = new PCB_SHAPE( m_board, SHAPE_T::POLY ); m_board->Add( shape, ADD_MODE::APPEND ); - - shape->SetShape( SHAPE_T::POLY ); shape->SetFilled( true ); shape->SetLayer( klayer ); shape->SetWidth( 0 ); diff --git a/pcbnew/plugins/altium/altium_pcb.h b/pcbnew/plugins/altium/altium_pcb.h index 0eb4e7d8b7..f7bdf2f721 100644 --- a/pcbnew/plugins/altium/altium_pcb.h +++ b/pcbnew/plugins/altium/altium_pcb.h @@ -185,8 +185,8 @@ private: void HelperCreateBoardOutline( const std::vector& aVertices ); - PCB_SHAPE* HelperCreateAndAddDrawsegment( uint16_t aComponent ); - void HelperDrawsegmentSetLocalCoord( PCB_SHAPE* aShape, uint16_t aComponent ); + PCB_SHAPE* HelperCreateAndAddShape( uint16_t aComponent ); + void HelperShapeSetLocalCoord( PCB_SHAPE* aShape, uint16_t aComponent ); BOARD* m_board; std::vector m_components; diff --git a/pcbnew/plugins/cadstar/cadstar_pcb_archive_loader.cpp b/pcbnew/plugins/cadstar/cadstar_pcb_archive_loader.cpp index 7fe93e29f9..acde795e56 100644 --- a/pcbnew/plugins/cadstar/cadstar_pcb_archive_loader.cpp +++ b/pcbnew/plugins/cadstar/cadstar_pcb_archive_loader.cpp @@ -2004,8 +2004,8 @@ void CADSTAR_PCB_ARCHIVE_LOADER::loadCoppers() if( shape->GetShape() == SHAPE_T::ARC ) { - TransformArcToPolygon( poly, shape->GetArcStart(), shape->GetArcMid(), - shape->GetArcEnd(), copperWidth, ARC_HIGH_DEF, + TransformArcToPolygon( poly, shape->GetStart(), shape->GetArcMid(), + shape->GetEnd(), copperWidth, ARC_HIGH_DEF, ERROR_LOC::ERROR_INSIDE ); } else @@ -2660,14 +2660,9 @@ void CADSTAR_PCB_ARCHIVE_LOADER::drawCadstarShape( const SHAPE& aCadstarShape, PCB_SHAPE* shape; if( isFootprint( aContainer ) ) - { shape = new FP_SHAPE( (FOOTPRINT*) aContainer, SHAPE_T::POLY ); - } else - { - shape = new PCB_SHAPE( aContainer ); - shape->SetShape( SHAPE_T::POLY ); - } + shape = new PCB_SHAPE( aContainer, SHAPE_T::POLY ); shape->SetFilled( true ); @@ -2802,14 +2797,9 @@ PCB_SHAPE* CADSTAR_PCB_ARCHIVE_LOADER::getShapeFromVertex( const POINT& aCadstar case VERTEX_TYPE::POINT: if( isFootprint( aContainer ) ) - { shape = new FP_SHAPE( static_cast( aContainer ), SHAPE_T::SEGMENT ); - } else - { - shape = new PCB_SHAPE( aContainer ); - shape->SetShape( SHAPE_T::SEGMENT ); - } + shape = new PCB_SHAPE( aContainer, SHAPE_T::SEGMENT ); shape->SetStart( startPoint ); shape->SetEnd( endPoint ); @@ -2824,14 +2814,9 @@ PCB_SHAPE* CADSTAR_PCB_ARCHIVE_LOADER::getShapeFromVertex( const POINT& aCadstar case VERTEX_TYPE::ANTICLOCKWISE_ARC: if( isFootprint( aContainer ) ) - { shape = new FP_SHAPE((FOOTPRINT*) aContainer, SHAPE_T::ARC ); - } else - { - shape = new PCB_SHAPE( aContainer ); - shape->SetShape( SHAPE_T::ARC ); - } + shape = new PCB_SHAPE( aContainer, SHAPE_T::ARC ); shape->SetArcStart( startPoint ); shape->SetArcCenter( centerPoint ); @@ -2975,12 +2960,12 @@ SHAPE_LINE_CHAIN CADSTAR_PCB_ARCHIVE_LOADER::getLineChainFromShapes( const std:: if( shape->GetClass() == wxT( "MGRAPHIC" ) ) { FP_SHAPE* fp_shape = (FP_SHAPE*) shape; - SHAPE_ARC arc( fp_shape->GetStart0(), fp_shape->GetEnd0(), fp_shape->GetAngle() / 10.0 ); + SHAPE_ARC arc( fp_shape->GetStart0(), fp_shape->GetEnd0(), (double) fp_shape->GetAngle() / 10.0 ); lineChain.Append( arc ); } else { - SHAPE_ARC arc( shape->GetCenter(), shape->GetArcStart(), shape->GetAngle() / 10.0 ); + SHAPE_ARC arc( shape->GetCenter(), shape->GetArcStart(), (double) shape->GetAngle() / 10.0 ); lineChain.Append( arc ); } } @@ -3056,13 +3041,15 @@ std::vector CADSTAR_PCB_ARCHIVE_LOADER::makeTracksFromShapes( if( shape->GetClass() == wxT( "MGRAPHIC" ) ) { FP_SHAPE* fp_shape = (FP_SHAPE*) shape; + SHAPE_ARC arc( fp_shape->GetStart0(), fp_shape->GetEnd0(), + (double) fp_shape->GetAngle() / 10.0 ); SHAPE_ARC arc( fp_shape->GetStart0(), fp_shape->GetEnd0(), fp_shape->GetAngle() / 10.0 ); track = new PCB_ARC( aParentContainer, &arc ); } else { - SHAPE_ARC arc( shape->GetCenter(), shape->GetArcStart(), shape->GetAngle() / 10.0 ); + SHAPE_ARC arc( shape->GetCenter(), shape->GetArcStart(), (double) shape->GetAngle() / 10.0 ); track = new PCB_ARC( aParentContainer, &arc ); } break; diff --git a/pcbnew/plugins/cadstar/cadstar_pcb_archive_loader.h b/pcbnew/plugins/cadstar/cadstar_pcb_archive_loader.h index 48655f9250..e0e39ef095 100644 --- a/pcbnew/plugins/cadstar/cadstar_pcb_archive_loader.h +++ b/pcbnew/plugins/cadstar/cadstar_pcb_archive_loader.h @@ -191,9 +191,9 @@ private: * @param aContainer to draw on (e.g. m_board) * @param aCadstarGroupID to add the text to * @param aCadstarLayerOverride if not empty, overrides the LayerID in aCadstarText - * @param aMoveVector move draw segment by this amount (in KiCad coordinates) - * @param aRotationAngle rotate draw segment by this amount (in tenth degrees) - * @param aScalingFactor scale draw segment by this amount + * @param aMoveVector move text by this amount (in KiCad coordinates) + * @param aRotationAngle rotate text by this amount (in tenth degrees) + * @param aScalingFactor scale text by this amount * @param aTransformCentre around which all transforms are applied (KiCad coordinates) * @param aMirrorInvert if true, it inverts the Mirror status of aCadstarText */ @@ -214,11 +214,11 @@ private: * @param aShapeName for reporting warnings/errors to the user * @param aContainer to draw on (e.g. m_board) * @param aCadstarGroupID to add the shape to - * @param aMoveVector move draw segment by this amount (in KiCad coordinates) - * @param aRotationAngle rotate draw segment by this amount (in tenth degrees) - * @param aScalingFactor scale draw segment by this amount + * @param aMoveVector move shapes by this amount (in KiCad coordinates) + * @param aRotationAngle rotate shapes by this amount (in tenth degrees) + * @param aScalingFactor scale shapes by this amount * @param aTransformCentre around which all transforms are applied (KiCad coordinates) - * @param aMirrorInvert if true, mirrors the shape + * @param aMirrorInvert if true, mirrors the shapes */ void drawCadstarShape( const SHAPE& aCadstarShape, const PCB_LAYER_ID& aKiCadLayer, const int& aLineThickness, const wxString& aShapeName, @@ -230,17 +230,17 @@ private: const bool& aMirrorInvert = false ); /** - * @brief Uses PCB_SHAPE to draw the cutouts on m_board object + * @brief Uses PCB_SHAPEs to draw the cutouts on m_board object * @param aVertices * @param aKiCadLayer KiCad layer to draw on * @param aLineThickness Thickness of line to draw with * @param aContainer to draw on (e.g. m_board) - * @param aCadstarGroupID to add the shape to - * @param aMoveVector move draw segment by this amount (in KiCad coordinates) - * @param aRotationAngle rotate draw segment by this amount (in tenth degrees) - * @param aScalingFactor scale draw segment by this amount + * @param aCadstarGroupID to add the shapes to + * @param aMoveVector move shapes by this amount (in KiCad coordinates) + * @param aRotationAngle rotate shapes by this amount (in tenth degrees) + * @param aScalingFactor scale shapes by this amount * @param aTransformCentre around which all transforms are applied (KiCad coordinates) - * @param aMirrorInvert if true, mirrors the drawsegments + * @param aMirrorInvert if true, mirrors the shapes */ void drawCadstarCutoutsAsShapes( const std::vector& aCutouts, const PCB_LAYER_ID& aKiCadLayer, const int& aLineThickness, @@ -259,11 +259,11 @@ private: * @param aLineThickness Thickness of line to draw with * @param aContainer to draw on (e.g. m_board) * @param aCadstarGroupID to add the shape to - * @param aMoveVector move draw segment by this amount (in KiCad coordinates) - * @param aRotationAngle rotate draw segment by this amount (in tenth degrees) - * @param aScalingFactor scale draw segment by this amount + * @param aMoveVector move shape by this amount (in KiCad coordinates) + * @param aRotationAngle rotate shape by this amount (in tenth degrees) + * @param aScalingFactor scale shape by this amount * @param aTransformCentre around which all transforms are applied (KiCad coordinates) - * @param aMirrorInvert if true, mirrors the drawsegment + * @param aMirrorInvert if true, mirrors the shape * @param aCadstarGroupID to add the shape to */ void drawCadstarVerticesAsShapes( const std::vector& aCadstarVertices, @@ -281,11 +281,11 @@ private: * @param aCadstarVertices * @param aContainer to draw on (e.g. m_board). Can be nullptr. * @param aCadstarGroupID to add the shape to - * @param aMoveVector move draw segment by this amount (in KiCad coordinates) - * @param aRotationAngle rotate draw segment by this amount (in tenth degrees) - * @param aScalingFactor scale draw segment by this amount + * @param aMoveVector move shapes by this amount (in KiCad coordinates) + * @param aRotationAngle rotate shapes by this amount (in tenth degrees) + * @param aScalingFactor scale shapes by this amount * @param aTransformCentre around which all transforms are applied (KiCad coordinates) - * @param aMirrorInvert if true, mirrors the drawsegment + * @param aMirrorInvert if true, mirrors the shapes * @return */ std::vector getShapesFromVertices( const std::vector& aCadstarVertices, @@ -303,11 +303,11 @@ private: * @param aCadstarVertex * @param aContainer to draw on (e.g. m_board). Can be nullptr. * @param aCadstarGroupID to add the shape to - * @param aMoveVector move draw segment by this amount (in KiCad coordinates) - * @param aRotationAngle rotate draw segment by this amount (in tenth degrees) - * @param aScalingFactor scale draw segment by this amount + * @param aMoveVector move shapes by this amount (in KiCad coordinates) + * @param aRotationAngle rotate shapes by this amount (in tenth degrees) + * @param aScalingFactor scale shapes by this amount * @param aTransformCentre around which all transforms are applied (KiCad coordinates) - * @param aMirrorInvert if true, mirrors the drawsegment + * @param aMirrorInvert if true, mirrors the shapes * @return */ PCB_SHAPE* getShapeFromVertex( const POINT& aCadstarStartPoint, @@ -335,11 +335,11 @@ private: * @param aCadstarShape * @param aLineThickness Thickness of line is used for expanding the polygon by half. * @param aContainer to draw on (e.g. m_board). Can be nullptr. - * @param aMoveVector move draw segment by this amount (in KiCad coordinates) - * @param aRotationAngle rotate draw segment by this amount (in tenth degrees) - * @param aScalingFactor scale draw segment by this amount + * @param aMoveVector move poly by this amount (in KiCad coordinates) + * @param aRotationAngle rotate poly by this amount (in tenth degrees) + * @param aScalingFactor scale poly by this amount * @param aTransformCentre around which all transforms are applied (KiCad coordinates) - * @param aMirrorInvert if true, mirrors the shape + * @param aMirrorInvert if true, mirrors the poly * @return */ SHAPE_POLY_SET getPolySetFromCadstarShape( const SHAPE& aCadstarShape, @@ -361,12 +361,13 @@ private: /** * @brief Returns a vector of pointers to TRACK/ARC objects. Caller owns the objects * @param aShapes - * @param aParentContainer sets this as the parent of each TRACK object and Add()s it to the parent + * @param aParentContainer sets this as the parent of each TRACK object and Add()s it to the + * parent * @param aNet sets all the tracks to this net, unless nullptr - * @param aLayerOverride Sets all tracks to this layer, or, if it is UNDEFINED_LAYER, uses the layers - * in the DrawSegments - * @param aWidthOverride Sets all tracks to this width, or, if it is UNDEFINED_LAYER, uses the width - * in the DrawSegments + * @param aLayerOverride Sets all tracks to this layer, or, if it is UNDEFINED_LAYER, uses the + * layers in the shapes + * @param aWidthOverride Sets all tracks to this width, or, if it is UNDEFINED_LAYER, uses the + * width in the shapes * @return */ std::vector makeTracksFromShapes( const std::vector aShapes, diff --git a/pcbnew/plugins/eagle/eagle_plugin.cpp b/pcbnew/plugins/eagle/eagle_plugin.cpp index c5960e50d0..8d0f0cdcb5 100644 --- a/pcbnew/plugins/eagle/eagle_plugin.cpp +++ b/pcbnew/plugins/eagle/eagle_plugin.cpp @@ -896,10 +896,8 @@ void EAGLE_PLUGIN::loadPlain( wxXmlNode* aGraphics ) if( layer != UNDEFINED_LAYER ) // unsupported layer { - PCB_SHAPE* shape = new PCB_SHAPE( m_board ); + PCB_SHAPE* shape = new PCB_SHAPE( m_board, SHAPE_T::CIRCLE ); m_board->Add( shape, ADD_MODE::APPEND ); - - shape->SetShape( SHAPE_T::CIRCLE ); shape->SetFilled( false ); shape->SetLayer( layer ); shape->SetStart( wxPoint( kicad_x( c.x ), kicad_y( c.y ) ) ); diff --git a/pcbnew/plugins/fabmaster/import_fabmaster.cpp b/pcbnew/plugins/fabmaster/import_fabmaster.cpp index 9d8534105a..255e2d838f 100644 --- a/pcbnew/plugins/fabmaster/import_fabmaster.cpp +++ b/pcbnew/plugins/fabmaster/import_fabmaster.cpp @@ -2755,8 +2755,7 @@ bool FABMASTER::loadOutline( BOARD* aBoard, const std::unique_ptr( seg.get() ); - PCB_SHAPE* line = new PCB_SHAPE( aBoard ); - line->SetShape( SHAPE_T::SEGMENT ); + PCB_SHAPE* line = new PCB_SHAPE( aBoard, SHAPE_T::SEGMENT ); line->SetLayer( layer ); line->SetStart( wxPoint( src->start_x, src->start_y ) ); line->SetEnd( wxPoint( src->end_x, src->end_y ) ); @@ -2772,8 +2771,7 @@ bool FABMASTER::loadOutline( BOARD* aBoard, const std::unique_ptr( seg.get() ); - PCB_SHAPE* arc = new PCB_SHAPE( aBoard ); - arc->SetShape( SHAPE_T::ARC ); + PCB_SHAPE* arc = new PCB_SHAPE( aBoard, SHAPE_T::ARC ); arc->SetLayer( layer ); arc->SetArcCenter( wxPoint( src->center_x, src->center_y )); arc->SetArcStart( wxPoint( src->start_x, src->start_y ) ); @@ -2791,8 +2789,7 @@ bool FABMASTER::loadOutline( BOARD* aBoard, const std::unique_ptr( seg.get() ); - PCB_SHAPE* rect = new PCB_SHAPE( aBoard ); - rect->SetShape( SHAPE_T::RECT ); + PCB_SHAPE* rect = new PCB_SHAPE( aBoard, SHAPE_T::RECT ); rect->SetLayer( layer ); rect->SetStart( wxPoint( src->start_x, src->start_y ) ); rect->SetEnd( wxPoint( src->end_x, src->end_y ) ); @@ -2803,8 +2800,7 @@ bool FABMASTER::loadOutline( BOARD* aBoard, const std::unique_ptr( seg.get() ); + const GRAPHIC_TEXT *src = static_cast( seg.get() ); PCB_TEXT* txt = new PCB_TEXT( aBoard ); txt->SetLayer( layer ); @@ -2856,9 +2852,7 @@ bool FABMASTER::loadGraphics( BOARD* aBoard ) if( poly_outline.OutlineCount() < 1 || poly_outline.COutline( 0 ).PointCount() < 3 ) continue; - PCB_SHAPE* new_poly = new PCB_SHAPE( aBoard ); - - new_poly->SetShape( SHAPE_T::POLY ); + PCB_SHAPE* new_poly = new PCB_SHAPE( aBoard, SHAPE_T::POLY ); new_poly->SetLayer( layer ); new_poly->SetPolyShape( poly_outline ); new_poly->SetWidth( 0 ); @@ -2879,8 +2873,7 @@ bool FABMASTER::loadGraphics( BOARD* aBoard ) { const GRAPHIC_LINE* src = static_cast( seg.get() ); - PCB_SHAPE* line = new PCB_SHAPE( aBoard ); - line->SetShape( SHAPE_T::SEGMENT ); + PCB_SHAPE* line = new PCB_SHAPE( aBoard, SHAPE_T::SEGMENT ); line->SetLayer( layer ); line->SetStart( wxPoint( src->start_x, src->start_y ) ); line->SetEnd( wxPoint( src->end_x, src->end_y ) ); @@ -2893,8 +2886,7 @@ bool FABMASTER::loadGraphics( BOARD* aBoard ) { const GRAPHIC_ARC* src = static_cast( seg.get() ); - PCB_SHAPE* arc = new PCB_SHAPE( aBoard ); - arc->SetShape( SHAPE_T::ARC ); + PCB_SHAPE* arc = new PCB_SHAPE( aBoard, SHAPE_T::ARC ); arc->SetLayer( layer ); arc->SetArcCenter( wxPoint( src->center_x, src->center_y )); arc->SetArcStart( wxPoint( src->start_x, src->start_y ) ); @@ -2909,8 +2901,7 @@ bool FABMASTER::loadGraphics( BOARD* aBoard ) const GRAPHIC_RECTANGLE *src = static_cast( seg.get() ); - PCB_SHAPE* rect = new PCB_SHAPE( aBoard ); - rect->SetShape( SHAPE_T::RECT ); + PCB_SHAPE* rect = new PCB_SHAPE( aBoard, SHAPE_T::RECT ); rect->SetLayer( layer ); rect->SetStart( wxPoint( src->start_x, src->start_y ) ); rect->SetEnd( wxPoint( src->end_x, src->end_y ) ); @@ -2951,7 +2942,8 @@ bool FABMASTER::orderZones( BOARD* aBoard ) std::vector zones = aBoard->Zones(); std::sort( zones.begin(), zones.end(), - [&]( const ZONE* a, const ZONE* b ) { + [&]( const ZONE* a, const ZONE* b ) + { if( a->GetLayer() == b->GetLayer() ) return a->GetBoundingBox().GetArea() > b->GetBoundingBox().GetArea(); @@ -3003,13 +2995,9 @@ bool FABMASTER::LoadBoard( BOARD* aBoard, PROGRESS_REPORTER* aProgressReporter ) checkpoint(); if( track->lclass == "ETCH" ) - { loadEtch( aBoard, track); - } else if( track->layer == "OUTLINE" ) - { loadOutline( aBoard, track ); - } } orderZones( aBoard ); diff --git a/pcbnew/plugins/geda/gpcb_plugin.cpp b/pcbnew/plugins/geda/gpcb_plugin.cpp index f7383fb904..f5684a2710 100644 --- a/pcbnew/plugins/geda/gpcb_plugin.cpp +++ b/pcbnew/plugins/geda/gpcb_plugin.cpp @@ -463,9 +463,8 @@ FOOTPRINT* GPCB_FPL_CACHE::parseFOOTPRINT( LINE_READER* aLineReader ) aLineReader->LineNumber(), 0 ); } - FP_SHAPE* shape = new FP_SHAPE( footprint.get() ); + FP_SHAPE* shape = new FP_SHAPE( footprint.get(), SHAPE_T::SEGMENT ); shape->SetLayer( F_SilkS ); - shape->SetShape( SHAPE_T::SEGMENT ); shape->SetStart0( wxPoint( parseInt( parameters[2], conv_unit ), parseInt( parameters[3], conv_unit ) ) ); shape->SetEnd0( wxPoint( parseInt( parameters[4], conv_unit ), @@ -487,9 +486,8 @@ FOOTPRINT* GPCB_FPL_CACHE::parseFOOTPRINT( LINE_READER* aLineReader ) } // Pcbnew does know ellipse so we must have Width = Height - FP_SHAPE* shape = new FP_SHAPE( footprint.get() ); + FP_SHAPE* shape = new FP_SHAPE( footprint.get(), SHAPE_T::ARC ); shape->SetLayer( F_SilkS ); - shape->SetShape( SHAPE_T::ARC ); footprint->Add( shape ); // for and arc: ibuf[3] = ibuf[4]. Pcbnew does not know ellipses diff --git a/pcbnew/plugins/kicad/kicad_plugin.cpp b/pcbnew/plugins/kicad/kicad_plugin.cpp index ad12b36529..a518c34caa 100644 --- a/pcbnew/plugins/kicad/kicad_plugin.cpp +++ b/pcbnew/plugins/kicad/kicad_plugin.cpp @@ -905,8 +905,7 @@ void PCB_IO::format( const PCB_SHAPE* aShape, int aNestLevel ) const break; default: - wxFAIL_MSG( "PCB_IO::format cannot format unknown PCB_SHAPE shape:" - + aShape->SHAPE_T_asString() ); + wxFAIL_MSG( "PCB_IO::format not implemented for " + aShape->SHAPE_T_asString() ); return; }; @@ -1039,8 +1038,7 @@ void PCB_IO::format( const FP_SHAPE* aFPShape, int aNestLevel ) const break; default: - wxFAIL_MSG( "PCB_IO::format cannot format unknown FP_SHAPE shape:" - + aFPShape->SHAPE_T_asString() ); + wxFAIL_MSG( "PCB_IO::format not implemented for " + aFPShape->SHAPE_T_asString() ); return; }; diff --git a/pcbnew/plugins/pcad/pcb_arc.cpp b/pcbnew/plugins/pcad/pcb_arc.cpp index 0ccb33027a..27addbaa59 100644 --- a/pcbnew/plugins/pcad/pcb_arc.cpp +++ b/pcbnew/plugins/pcad/pcb_arc.cpp @@ -191,11 +191,10 @@ void PCB_ARC::AddToFootprint( FOOTPRINT* aFootprint ) void PCB_ARC::AddToBoard() { - PCB_SHAPE* arc = new PCB_SHAPE( m_board ); + PCB_SHAPE* arc = new PCB_SHAPE( m_board, IsCircle() ? SHAPE_T::CIRCLE : SHAPE_T::ARC ); m_board->Add( arc, ADD_MODE::APPEND ); - arc->SetShape( IsCircle() ? SHAPE_T::CIRCLE : SHAPE_T::ARC ); arc->SetFilled( false ); arc->SetLayer( m_KiCadLayer ); arc->SetStart( wxPoint( m_positionX, m_positionY ) ); diff --git a/pcbnew/tools/convert_tool.cpp b/pcbnew/tools/convert_tool.cpp index 6be3bd0dda..c150818465 100644 --- a/pcbnew/tools/convert_tool.cpp +++ b/pcbnew/tools/convert_tool.cpp @@ -689,9 +689,8 @@ int CONVERT_TOOL::CreateLines( const TOOL_EVENT& aEvent ) } else { - PCB_SHAPE* graphic = new PCB_SHAPE; + PCB_SHAPE* graphic = new PCB_SHAPE( nullptr, SHAPE_T::SEGMENT ); - graphic->SetShape( SHAPE_T::SEGMENT ); graphic->SetLayer( targetLayer ); graphic->SetStart( wxPoint( seg.A ) ); graphic->SetEnd( wxPoint( seg.B ) ); diff --git a/pcbnew/tools/drawing_tool.cpp b/pcbnew/tools/drawing_tool.cpp index 7f870ca02d..cdce6f07ab 100644 --- a/pcbnew/tools/drawing_tool.cpp +++ b/pcbnew/tools/drawing_tool.cpp @@ -1612,8 +1612,7 @@ bool DRAWING_TOOL::drawSegment( const std::string& aTool, PCB_SHAPE** aGraphic, // If the user clicks on an existing snap point from a drawsegment // we finish the segment as they are likely closing a path - if( snapItem - && ( shape == SHAPE_T::RECT || graphic->GetLength() > 0.0 ) ) + if( snapItem && ( shape == SHAPE_T::RECT || graphic->GetLength() > 0.0 ) ) { commit.Add( graphic ); commit.Push( _( "Draw a line segment" ) ); diff --git a/pcbnew/tools/pad_tool.cpp b/pcbnew/tools/pad_tool.cpp index 478e3f42a3..e65645f4ce 100644 --- a/pcbnew/tools/pad_tool.cpp +++ b/pcbnew/tools/pad_tool.cpp @@ -705,8 +705,7 @@ void PAD_TOOL::recombinePad( PAD* aPad ) aPad->SetOffset( wxPoint( 0, 0 ) ); - PCB_SHAPE* shape = new PCB_SHAPE; - shape->SetShape( SHAPE_T::POLY ); + PCB_SHAPE* shape = new PCB_SHAPE( nullptr, SHAPE_T::POLY ); shape->SetFilled( true ); shape->SetWidth( 0 ); shape->SetPolyShape( existingOutline );