Explode pad to shapes command: Fix incorrect conversion of primitive to EDGE_MODULE (missing initialization)
This commit is contained in:
parent
55bb35a582
commit
87821c1490
|
@ -50,6 +50,7 @@ class LINE_READER;
|
||||||
class EDA_3D_CANVAS;
|
class EDA_3D_CANVAS;
|
||||||
class EDA_DRAW_PANEL;
|
class EDA_DRAW_PANEL;
|
||||||
class MODULE;
|
class MODULE;
|
||||||
|
class EDGE_MODULE;
|
||||||
class TRACK;
|
class TRACK;
|
||||||
class MSG_PANEL_INFO;
|
class MSG_PANEL_INFO;
|
||||||
|
|
||||||
|
@ -114,6 +115,13 @@ public:
|
||||||
* @param aTarget is the DRAWSEGMENT to initialize
|
* @param aTarget is the DRAWSEGMENT to initialize
|
||||||
*/
|
*/
|
||||||
void ExportTo( DRAWSEGMENT* aTarget );
|
void ExportTo( DRAWSEGMENT* aTarget );
|
||||||
|
|
||||||
|
/** Export the PAD_CS_PRIMITIVE parameters to a EDGE_MODULE
|
||||||
|
* useful to convert a primitive shape to a EDGE_MODULE shape for edition
|
||||||
|
* in footprint editor
|
||||||
|
* @param aTarget is the EDGE_MODULE to initialize
|
||||||
|
*/
|
||||||
|
void ExportTo( EDGE_MODULE* aTarget );
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -36,6 +36,7 @@
|
||||||
|
|
||||||
#include <class_pad.h>
|
#include <class_pad.h>
|
||||||
#include <class_drawsegment.h>
|
#include <class_drawsegment.h>
|
||||||
|
#include <class_edge_mod.h>
|
||||||
#include <convert_basic_shapes_to_polygon.h>
|
#include <convert_basic_shapes_to_polygon.h>
|
||||||
#include <geometry/shape_rect.h>
|
#include <geometry/shape_rect.h>
|
||||||
#include <geometry/convex_hull.h>
|
#include <geometry/convex_hull.h>
|
||||||
|
@ -61,6 +62,15 @@ void PAD_CS_PRIMITIVE::ExportTo( DRAWSEGMENT* aTarget )
|
||||||
aTarget->SetPolyPoints( m_Poly );
|
aTarget->SetPolyPoints( m_Poly );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void PAD_CS_PRIMITIVE::ExportTo( EDGE_MODULE* aTarget )
|
||||||
|
{
|
||||||
|
ExportTo( static_cast<DRAWSEGMENT*>( aTarget ) );
|
||||||
|
// Initialize coordinates specific to the EDGE_MODULE (m_Start0 and m_End0)
|
||||||
|
aTarget->SetLocalCoord();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Has meaning only for free shape pads.
|
* Has meaning only for free shape pads.
|
||||||
* add a free shape to the shape list.
|
* add a free shape to the shape list.
|
||||||
|
|
|
@ -357,17 +357,10 @@ int MODULE_EDITOR_TOOLS::ExplodePadToShapes( const TOOL_EVENT& aEvent )
|
||||||
{
|
{
|
||||||
auto ds = new EDGE_MODULE( board()->m_Modules );
|
auto ds = new EDGE_MODULE( board()->m_Modules );
|
||||||
|
|
||||||
ds->SetLayer( pad->GetLayer() );
|
prim.ExportTo( ds ); // ExportTo exports to a DRAWSEGMENT
|
||||||
ds->SetShape( prim.m_Shape );
|
// Fix an arbitray draw layer for this EDGE_MODULE
|
||||||
ds->SetStart( prim.m_Start + anchor );
|
ds->SetLayer( Dwgs_User ); //pad->GetLayer() );
|
||||||
ds->SetEnd( prim.m_End + anchor );
|
ds->Move( anchor );
|
||||||
ds->SetWidth( prim.m_Thickness );
|
|
||||||
|
|
||||||
for( auto&p : prim.m_Poly )
|
|
||||||
p += anchor;
|
|
||||||
|
|
||||||
ds->SetPolyPoints( prim.m_Poly );
|
|
||||||
ds->SetAngle( prim.m_ArcAngle );
|
|
||||||
|
|
||||||
commit.Add( ds );
|
commit.Add( ds );
|
||||||
}
|
}
|
||||||
|
@ -442,13 +435,18 @@ int MODULE_EDITOR_TOOLS::CreatePadFromShapes( const TOOL_EVENT& aEvent )
|
||||||
|
|
||||||
if( multipleRefPadsFound )
|
if( multipleRefPadsFound )
|
||||||
{
|
{
|
||||||
DisplayErrorMessage( frame(), _("Cannot convert items to a custom-shaped pad: selection contains more than one reference pad. ") );
|
DisplayErrorMessage( frame(),
|
||||||
|
_( "Cannot convert items to a custom-shaped pad:\n"
|
||||||
|
"selection contains more than one reference pad." ) );
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
if( illegalItemsFound )
|
if( illegalItemsFound )
|
||||||
{
|
{
|
||||||
DisplayErrorMessage( frame(), _("Cannot convert items to a custom-shaped pad: selection contains unsupported items. Only graphical lines, circles, arcs and polygons are allowed.") );
|
DisplayErrorMessage( frame(),
|
||||||
|
_( "Cannot convert items to a custom-shaped pad:\n"
|
||||||
|
"selection contains unsupported items.\n"
|
||||||
|
"Only graphical lines, circles, arcs and polygons are allowed." ) );
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -458,10 +456,12 @@ int MODULE_EDITOR_TOOLS::CreatePadFromShapes( const TOOL_EVENT& aEvent )
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
// Create a default pad anchor:
|
||||||
pad->SetAnchorPadShape( PAD_SHAPE_CIRCLE );
|
pad->SetAnchorPadShape( PAD_SHAPE_CIRCLE );
|
||||||
pad->SetAttribute( PAD_ATTRIB_SMD );
|
pad->SetAttribute( PAD_ATTRIB_SMD );
|
||||||
pad->SetLayerSet( D_PAD::SMDMask() );
|
pad->SetLayerSet( D_PAD::SMDMask() );
|
||||||
pad->SetSize ( wxSize( 10000, 10000 ) );
|
int radius = Millimeter2iu( 0.2 );
|
||||||
|
pad->SetSize ( wxSize( radius, radius ) );
|
||||||
pad->IncrementPadName( true, true );
|
pad->IncrementPadName( true, true );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -483,7 +483,10 @@ int MODULE_EDITOR_TOOLS::CreatePadFromShapes( const TOOL_EVENT& aEvent )
|
||||||
|
|
||||||
if( !anchor )
|
if( !anchor )
|
||||||
{
|
{
|
||||||
DisplayErrorMessage( frame(), _("Cannot convert items to a custom-shaped pad: unable to determine the anchor point position. Consider adding a small anchor pad to the selection and try again.") );
|
DisplayErrorMessage( frame(),
|
||||||
|
_( "Cannot convert items to a custom-shaped pad:\n"
|
||||||
|
"unable to determine the anchor point position.\n"
|
||||||
|
"Consider adding a small anchor pad to the selection and try again.") );
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue