Fix footprint wizard issues. Fix export vrml incorrect Z position of items.

This commit is contained in:
jean-pierre charras 2014-07-02 15:08:28 +02:00
parent 39216b4b3a
commit eb396a5e88
9 changed files with 34 additions and 36 deletions

View File

@ -95,15 +95,13 @@ LSET D_PAD::StandardMask()
LSET D_PAD::SMDMask()
{
// was: #define PAD_SMD_DEFAULT_LAYERS LAYER_FRONT | SOLDERPASTE_LAYER_FRONT | SOLDERMASK_LAYER_FRONT
static LSET saved( 3, F_Cu, F_Paste, F_Mask );
return saved;
}
LSET D_PAD::ConnMask()
LSET D_PAD::ConnSMDMask()
{
// was: #define PAD_CONN_DEFAULT_LAYERS LAYER_FRONT | SOLDERMASK_LAYER_FRONT
static LSET saved( 2, F_Cu, F_Mask );
return saved;
}

View File

@ -88,10 +88,11 @@ public:
/* Default layers used for pads, according to the pad type.
* this is default values only, they can be changed for a given pad
*/
static LSET StandardMask();
static LSET ConnMask();
static LSET SMDMask();
static LSET UnplatedHoleMask();
static LSET StandardMask(); ///< layer set for a through hole pad
static LSET SMDMask(); ///< layer set for a SMD pad on Front layer
static LSET ConnSMDMask(); ///< layer set for a SMD pad on Front layer
///< used for edge board connectors
static LSET UnplatedHoleMask(); ///< layer set for a mechanical unplated through hole pad
void Copy( D_PAD* source );
@ -419,6 +420,16 @@ public:
EDA_ITEM* Clone() const;
/**
* same as Clone, but returns a D_PAD item.
* Useful mainly for pythons scripts, because Clone (virtual function)
* returns an EDA_ITEM.
*/
D_PAD* Duplicate() const
{
return (D_PAD*) Clone();
}
/// @copydoc VIEW_ITEM::ViewGetLayers()
virtual void ViewGetLayers( int aLayers[], int& aCount ) const;

View File

@ -76,7 +76,7 @@ static const LSET std_pad_layers[] = {
D_PAD::SMDMask(),
// PAD_CONN:
D_PAD::ConnMask(),
D_PAD::ConnSMDMask(),
// PAD_HOLE_NOT_PLATED:
D_PAD::UnplatedHoleMask()

View File

@ -473,9 +473,9 @@ static void compute_layer_Zs( MODEL_VRML& aModel, BOARD* pcb )
LAYER_ID i = *seq;
if( i < copper_layers )
aModel.SetLayerZ( i, aModel.board_thickness * i / (copper_layers - 1) - half_thickness );
aModel.SetLayerZ( i, half_thickness - aModel.board_thickness * i / (copper_layers - 1) );
else
aModel.SetLayerZ( i, half_thickness ); // component layer
aModel.SetLayerZ( i, - half_thickness ); // bottom layer
}
/* To avoid rounding interference, we apply an epsilon to each

View File

@ -30,7 +30,7 @@ class FPCFootprintWizard(FootprintWizardPlugin):
pad.SetSize(size)
pad.SetShape(PAD_RECT)
pad.SetAttribute(PAD_SMD)
pad.SetLayerMask(PAD_SMD_DEFAULT_LAYERS)
pad.SetLayerSet( pad.StandardMask() )
pad.SetPos0(pos)
pad.SetPosition(pos)
pad.SetPadName(name)
@ -126,7 +126,7 @@ class FPCFootprintWizard(FootprintWizardPlugin):
xstart = - pad_pitch*0.5-offsetX
xend = pad_pitch * pads + xstart;
outline.SetStartEnd( wxPoint(xstart, posy), wxPoint( xend, posy) )
outline.SetLayer(SILKSCREEN_N_FRONT) #default: not needed
outline.SetLayer(F_SilkS) #default: not needed
outline.SetShape(S_SEGMENT)
module.Add(outline)

View File

@ -17,7 +17,7 @@ class PadMaker:
pad.SetShape(shape)
pad.SetAttribute(pcbnew.PAD_STANDARD)
pad.SetLayerMask(pcbnew.PAD_STANDARD_DEFAULT_LAYERS)
pad.SetLayerSet(pad.StandardMask())
pad.SetDrillSize(pcbnew.wxSize(drill, drill))
return pad
@ -29,7 +29,7 @@ class PadMaker:
pad.SetShape(shape)
pad.SetAttribute(pcbnew.PAD_SMD)
pad.SetLayerMask(pcbnew.PAD_SMD_DEFAULT_LAYERS)
pad.SetLayerSet(pad.SMDMask())
return pad
@ -45,19 +45,6 @@ class PadArray:
def SetFirstPadInArray(self, fpNum):
self.firstPad = fpNum
# HACK! pad should one day have its own clone method
def ClonePad(self):
pad = pcbnew.D_PAD(self.pad.GetParent())
pad.SetSize(self.pad.GetSize())
pad.SetShape(self.pad.GetShape())
pad.SetAttribute(self.pad.GetAttribute())
pad.SetLayerMask(self.pad.GetLayerMask())
pad.SetDrillSize(self.pad.GetDrillSize())
return pad
def AddPad(self, pad):
self.pad.GetParent().Add(pad)
@ -100,9 +87,8 @@ class PadGridArray(PadArray):
pos = pcbnew.wxPoint(posX, posY)
# THIS DOESN'T WORK yet!
#pad = self.pad.Clone()
pad = self.ClonePad()
# create a new pad with same characteristics
pad = self.pad.Duplicate()
pad.SetPos0(pos)
pad.SetPosition(pos)

View File

@ -27,6 +27,7 @@ class QFPWizard(HelpfulFootprintWizardPlugin.HelpfulFootprintWizardPlugin):
def CheckParameters(self):
self.CheckParamPositiveInt("Pads", "*n", is_multiple_of = 4)
self.CheckParamBool("Pads", "*oval")
def GetReference(self):
return "QFP %d" % self.parameters["Pads"]["*n"]
@ -46,8 +47,10 @@ class QFPWizard(HelpfulFootprintWizardPlugin.HelpfulFootprintWizardPlugin):
row_len = (pads_per_row - 1) * pad_pitch
h_pad = PA.PadMaker(self.module).SMDPad(pad_width, pad_length, shape = pcbnew.PAD_OVAL)
v_pad = PA.PadMaker(self.module).SMDPad(pad_length, pad_width, shape = pcbnew.PAD_OVAL)
pad_shape = pcbnew.PAD_OVAL if pads["*oval"] else pcbnew.PAD_RECT
h_pad = PA.PadMaker(self.module).SMDPad(pad_width, pad_length, shape = pad_shape)
v_pad = PA.PadMaker(self.module).SMDPad(pad_length, pad_width, shape = pad_shape)
#left row
pin1Pos = pcbnew.wxPoint(-h_pitch / 2, -row_len / 2)

View File

@ -25,7 +25,7 @@ class TouchSliderWizard(FootprintWizardPlugin):
pad.SetSize(size)
pad.SetShape(PAD_RECT)
pad.SetAttribute(PAD_SMD)
pad.SetLayerMask(PAD_SMD_DEFAULT_LAYERS)
pad.SetLayerSet(pad.ConnSMDMask())
pad.SetPos0(pos)
pad.SetPosition(pos)
pad.SetPadName(name)
@ -36,8 +36,8 @@ class TouchSliderWizard(FootprintWizardPlugin):
pad = D_PAD(module)
pad.SetSize(wxSize(size[0],size[1]))
pad.SetShape(PAD_TRAPEZOID)
pad.SetAttribute(PAD_CONN)
pad.SetLayerMask(PAD_CONN_DEFAULT_LAYERS)
pad.SetAttribute(PAD_SMD)
pad.SetLayerSet(pad.ConnSMDMask())
pad.SetPos0(pos)
pad.SetPosition(pos)
pad.SetPadName(name)