Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
K
kicad-source-mirror
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Commits
Open sidebar
Elphel
kicad-source-mirror
Commits
149a04f3
Commit
149a04f3
authored
Nov 19, 2014
by
Blair Bonnett
Committed by
Wayne Stambaugh
Nov 19, 2014
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Fix crash in footprint editor when SMD pad diameter is zero. (fixes lp:1378917)
parent
1a550b8e
Changes
1
Show whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
44 additions
and
10 deletions
+44
-10
dialog_pad_properties.cpp
pcbnew/dialogs/dialog_pad_properties.cpp
+44
-10
No files found.
pcbnew/dialogs/dialog_pad_properties.cpp
View file @
149a04f3
...
@@ -151,6 +151,7 @@ private:
...
@@ -151,6 +151,7 @@ private:
void
PadPropertiesAccept
(
wxCommandEvent
&
event
);
void
PadPropertiesAccept
(
wxCommandEvent
&
event
);
};
};
void
PCB_BASE_FRAME
::
InstallPadOptionsFrame
(
D_PAD
*
aPad
)
void
PCB_BASE_FRAME
::
InstallPadOptionsFrame
(
D_PAD
*
aPad
)
{
{
DIALOG_PAD_PROPERTIES
dlg
(
this
,
aPad
);
DIALOG_PAD_PROPERTIES
dlg
(
this
,
aPad
);
...
@@ -245,14 +246,41 @@ void DIALOG_PAD_PROPERTIES::OnPaintShowPanel( wxPaintEvent& event )
...
@@ -245,14 +246,41 @@ void DIALOG_PAD_PROPERTIES::OnPaintShowPanel( wxPaintEvent& event )
dc
.
SetDeviceOrigin
(
dc_size
.
x
/
2
,
dc_size
.
y
/
2
);
dc
.
SetDeviceOrigin
(
dc_size
.
x
/
2
,
dc_size
.
y
/
2
);
// Calculate a suitable scale to fit the available draw area
// Calculate a suitable scale to fit the available draw area
int
dim
=
m_dummyPad
->
GetSize
().
x
+
std
::
abs
(
m_dummyPad
->
GetDelta
().
y
);
int
dim
=
m_dummyPad
->
GetSize
().
x
+
std
::
abs
(
m_dummyPad
->
GetDelta
().
y
);
// Invalid x size. User could enter zero, or have deleted all text prior to
// entering a new value; this is also treated as zero. If dim is left at
// zero, the drawing scale is zero and we get a crash.
if
(
dim
==
0
)
{
// If drill size has been set, use that. Otherwise default to 1mm.
dim
=
m_dummyPad
->
GetDrillSize
().
x
;
if
(
dim
==
0
)
dim
=
1000000
;
}
if
(
m_dummyPad
->
GetLocalClearance
()
>
0
)
if
(
m_dummyPad
->
GetLocalClearance
()
>
0
)
dim
+=
m_dummyPad
->
GetLocalClearance
()
*
2
;
dim
+=
m_dummyPad
->
GetLocalClearance
()
*
2
;
double
scale
=
(
double
)
dc_size
.
x
/
dim
;
double
scale
=
(
double
)
dc_size
.
x
/
dim
;
dim
=
m_dummyPad
->
GetSize
().
y
+
std
::
abs
(
m_dummyPad
->
GetDelta
().
x
);
// If the pad is a circle, use the x size here instead.
int
ysize
;
if
(
m_dummyPad
->
GetShape
()
==
PAD_CIRCLE
)
ysize
=
m_dummyPad
->
GetSize
().
x
;
else
ysize
=
m_dummyPad
->
GetSize
().
y
;
dim
=
ysize
+
std
::
abs
(
m_dummyPad
->
GetDelta
().
x
);
// Invalid y size. See note about x size above.
if
(
dim
==
0
)
{
dim
=
m_dummyPad
->
GetDrillSize
().
y
;
if
(
dim
==
0
)
dim
=
1000000
;
}
if
(
m_dummyPad
->
GetLocalClearance
()
>
0
)
if
(
m_dummyPad
->
GetLocalClearance
()
>
0
)
dim
+=
m_dummyPad
->
GetLocalClearance
()
*
2
;
dim
+=
m_dummyPad
->
GetLocalClearance
()
*
2
;
...
@@ -666,13 +694,13 @@ void DIALOG_PAD_PROPERTIES::setPadLayersList( LSET layer_mask )
...
@@ -666,13 +694,13 @@ void DIALOG_PAD_PROPERTIES::setPadLayersList( LSET layer_mask )
LSET
cu_set
=
layer_mask
&
LSET
::
AllCuMask
();
LSET
cu_set
=
layer_mask
&
LSET
::
AllCuMask
();
if
(
cu_set
==
LSET
(
F_Cu
)
)
if
(
cu_set
==
LSET
(
F_Cu
)
)
m_rbCopperLayersSel
->
SetSelection
(
0
);
m_rbCopperLayersSel
->
SetSelection
(
0
);
else
if
(
cu_set
==
LSET
(
B_Cu
)
)
else
if
(
cu_set
==
LSET
(
B_Cu
)
)
m_rbCopperLayersSel
->
SetSelection
(
1
);
m_rbCopperLayersSel
->
SetSelection
(
1
);
else
if
(
cu_set
.
any
()
)
else
if
(
cu_set
.
any
()
)
m_rbCopperLayersSel
->
SetSelection
(
2
);
m_rbCopperLayersSel
->
SetSelection
(
2
);
else
else
m_rbCopperLayersSel
->
SetSelection
(
3
);
m_rbCopperLayersSel
->
SetSelection
(
3
);
m_PadLayerAdhCmp
->
SetValue
(
layer_mask
[
F_Adhes
]
);
m_PadLayerAdhCmp
->
SetValue
(
layer_mask
[
F_Adhes
]
);
m_PadLayerAdhCu
->
SetValue
(
layer_mask
[
B_Adhes
]
);
m_PadLayerAdhCu
->
SetValue
(
layer_mask
[
B_Adhes
]
);
...
@@ -710,6 +738,12 @@ bool DIALOG_PAD_PROPERTIES::padValuesOK()
...
@@ -710,6 +738,12 @@ bool DIALOG_PAD_PROPERTIES::padValuesOK()
wxString
msg
;
wxString
msg
;
// Test for incorrect values
// Test for incorrect values
if
(
(
m_dummyPad
->
GetSize
().
x
<=
0
)
||
((
m_dummyPad
->
GetSize
().
y
<=
0
)
&&
(
m_dummyPad
->
GetShape
()
!=
PAD_CIRCLE
))
)
{
error_msgs
.
Add
(
_
(
"Pad size must be greater than zero"
)
);
}
if
(
(
m_dummyPad
->
GetSize
().
x
<
m_dummyPad
->
GetDrillSize
().
x
)
||
if
(
(
m_dummyPad
->
GetSize
().
x
<
m_dummyPad
->
GetDrillSize
().
x
)
||
(
m_dummyPad
->
GetSize
().
y
<
m_dummyPad
->
GetDrillSize
().
y
)
)
(
m_dummyPad
->
GetSize
().
y
<
m_dummyPad
->
GetDrillSize
().
y
)
)
{
{
...
@@ -730,7 +764,7 @@ bool DIALOG_PAD_PROPERTIES::padValuesOK()
...
@@ -730,7 +764,7 @@ bool DIALOG_PAD_PROPERTIES::padValuesOK()
if
(
m_dummyPad
->
GetAttribute
()
==
PAD_HOLE_NOT_PLATED
)
if
(
m_dummyPad
->
GetAttribute
()
==
PAD_HOLE_NOT_PLATED
)
{
{
msg
+=
wxT
(
"<br><br><i>"
);
msg
+=
wxT
(
"<br><br><i>"
);
msg
+=
_
(
"For NPTH pad, set pad size value to pad drill value,"
msg
+=
_
(
"For NPTH pad, set pad size value to pad drill value,"
" if you do not want this pad plotted in gerber files"
" if you do not want this pad plotted in gerber files"
);
);
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment