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
70df1517
Commit
70df1517
authored
May 16, 2012
by
Miguel Angel Ajo
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Footprint wizard, plus fixes
parent
4dc70b2f
Changes
11
Hide whitespace changes
Inline
Side-by-side
Showing
11 changed files
with
145 additions
and
60 deletions
+145
-60
CMakeLists.txt
pcbnew/CMakeLists.txt
+1
-0
class_footprint_wizard.h
pcbnew/class_footprint_wizard.h
+1
-0
dialog_footprint_wizard_list.cpp
pcbnew/dialogs/dialog_footprint_wizard_list.cpp
+3
-0
footprint_wizard.cpp
pcbnew/footprint_wizard.cpp
+21
-24
footprint_wizard_frame.cpp
pcbnew/footprint_wizard_frame.cpp
+1
-16
footprint_wizard_frame.h
pcbnew/footprint_wizard_frame.h
+2
-2
module.i
pcbnew/scripting/module.i
+3
-2
pcbnew_footprint_wizards.cpp
pcbnew/scripting/pcbnew_footprint_wizards.cpp
+38
-2
pcbnew_footprint_wizards.h
pcbnew/scripting/pcbnew_footprint_wizards.h
+2
-2
fpc_footprint_wizard.py
pcbnew/scripting/plugins/fpc_footprint_wizard.py
+33
-7
kicadplugins.i
scripting/kicadplugins.i
+40
-5
No files found.
pcbnew/CMakeLists.txt
View file @
70df1517
...
@@ -290,6 +290,7 @@ if (KICAD_SCRIPTING)
...
@@ -290,6 +290,7 @@ if (KICAD_SCRIPTING)
DEPENDS ../scripting/dlist.i
DEPENDS ../scripting/dlist.i
DEPENDS ../scripting/kicad.i
DEPENDS ../scripting/kicad.i
DEPENDS ../scripting/wx.i
DEPENDS ../scripting/wx.i
DEPENDS ../scripting/kicadplugins.i
# DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/pcbnew
# DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/pcbnew
COMMAND
${
SWIG_EXECUTABLE
}
${
SWIG_OPTS
}
-o
${
CMAKE_CURRENT_BINARY_DIR
}
/pcbnew_wrap.cxx scripting/pcbnew.i
COMMAND
${
SWIG_EXECUTABLE
}
${
SWIG_OPTS
}
-o
${
CMAKE_CURRENT_BINARY_DIR
}
/pcbnew_wrap.cxx scripting/pcbnew.i
...
...
pcbnew/class_footprint_wizard.h
View file @
70df1517
...
@@ -23,6 +23,7 @@ public:
...
@@ -23,6 +23,7 @@ public:
virtual
wxString
GetParameterPageName
(
int
aPage
)
=
0
;
virtual
wxString
GetParameterPageName
(
int
aPage
)
=
0
;
virtual
wxArrayString
GetParameterNames
(
int
aPage
)
=
0
;
virtual
wxArrayString
GetParameterNames
(
int
aPage
)
=
0
;
virtual
wxArrayString
GetParameterValues
(
int
aPage
)
=
0
;
virtual
wxArrayString
GetParameterValues
(
int
aPage
)
=
0
;
virtual
wxArrayString
GetParameterErrors
(
int
aPage
)
=
0
;
virtual
wxString
SetParameterValues
(
int
aPage
,
wxArrayString
&
aValues
)
=
0
;
virtual
wxString
SetParameterValues
(
int
aPage
,
wxArrayString
&
aValues
)
=
0
;
virtual
MODULE
*
GetModule
()
=
0
;
virtual
MODULE
*
GetModule
()
=
0
;
void
register_wizard
();
void
register_wizard
();
...
...
pcbnew/dialogs/dialog_footprint_wizard_list.cpp
View file @
70df1517
...
@@ -28,6 +28,9 @@ DIALOG_FOOTPRINT_WIZARD_LIST::DIALOG_FOOTPRINT_WIZARD_LIST( wxWindow* aParent )
...
@@ -28,6 +28,9 @@ DIALOG_FOOTPRINT_WIZARD_LIST::DIALOG_FOOTPRINT_WIZARD_LIST( wxWindow* aParent )
m_FootprintWizard
=
FOOTPRINT_WIZARDS
::
GetWizard
(
0
);
m_FootprintWizard
=
FOOTPRINT_WIZARDS
::
GetWizard
(
0
);
// Choose selection mode and insert the needed rows
// Choose selection mode and insert the needed rows
m_footprintWizardsGrid
->
SetColSize
(
0
,
0
);
// hide the preview for now
m_footprintWizardsGrid
->
SetSelectionMode
(
wxGrid
::
wxGridSelectRows
);
m_footprintWizardsGrid
->
SetSelectionMode
(
wxGrid
::
wxGridSelectRows
);
m_footprintWizardsGrid
->
InsertRows
(
0
,
n_wizards
,
true
);
m_footprintWizardsGrid
->
InsertRows
(
0
,
n_wizards
,
true
);
...
...
pcbnew/footprint_wizard.cpp
View file @
70df1517
...
@@ -134,31 +134,28 @@ void FOOTPRINT_WIZARD_FRAME::SelectCurrentWizard( wxCommandEvent& event )
...
@@ -134,31 +134,28 @@ void FOOTPRINT_WIZARD_FRAME::SelectCurrentWizard( wxCommandEvent& event )
* Function SelectCurrentFootprint
* Function SelectCurrentFootprint
* Selects the current footprint name and display it
* Selects the current footprint name and display it
*/
*/
void
FOOTPRINT_WIZARD_FRAME
::
ParametersUpdated
(
wx
Comman
dEvent
&
event
)
void
FOOTPRINT_WIZARD_FRAME
::
ParametersUpdated
(
wx
Gri
dEvent
&
event
)
{
{
/*
// will pick it from the wizard
int
page
=
m_PageList
->
GetSelection
();
MODULE * module = new MODULE(NULL);
if( module )
if
(
page
<
0
)
{
return
;
module->SetPosition( wxPoint( 0, 0 ) );
int
n
=
m_ParameterGrid
->
GetNumberRows
();
// Only one fotprint allowed: remove the previous footprint (if exists)
wxArrayString
arr
;
if( oldmodule )
{
for
(
int
i
=
0
;
i
<
n
;
i
++
)
GetBoard()->Remove( oldmodule );
{
delete oldmodule;
wxString
val
=
m_ParameterGrid
->
GetCellValue
(
i
,
1
);
}
arr
.
Add
(
val
);
m_footprintName = module->GetLibRef();
}
module->ClearFlags();
SetCurItem( NULL );
wxString
res
=
m_FootprintWizard
->
SetParameterValues
(
page
,
arr
);
Zoom_Automatique( false );
ReloadFootprint
();
m_canvas->Refresh( );
DisplayWizardInfos
();
Update3D_Frame();
m_FootprintList->SetStringSelection( m_footprintName );
}
* */
}
}
...
...
pcbnew/footprint_wizard_frame.cpp
View file @
70df1517
...
@@ -74,7 +74,7 @@ BEGIN_EVENT_TABLE( FOOTPRINT_WIZARD_FRAME, EDA_DRAW_FRAME )
...
@@ -74,7 +74,7 @@ BEGIN_EVENT_TABLE( FOOTPRINT_WIZARD_FRAME, EDA_DRAW_FRAME )
/* listbox events */
/* listbox events */
EVT_LISTBOX
(
ID_FOOTPRINT_WIZARD_PAGE_LIST
,
FOOTPRINT_WIZARD_FRAME
::
ClickOnPageList
)
EVT_LISTBOX
(
ID_FOOTPRINT_WIZARD_PAGE_LIST
,
FOOTPRINT_WIZARD_FRAME
::
ClickOnPageList
)
EVT_
LISTBOX
(
ID_FOOTPRINT_WIZARD_PARAMETER_LIST
,
FOOTPRINT_WIZARD_FRAME
::
ClickOnParameterGri
d
)
EVT_
GRID_CMD_CELL_CHANGE
(
ID_FOOTPRINT_WIZARD_PARAMETER_LIST
,
FOOTPRINT_WIZARD_FRAME
::
ParametersUpdate
d
)
EVT_MENU
(
ID_SET_RELATIVE_OFFSET
,
FOOTPRINT_WIZARD_FRAME
::
OnSetRelativeOffset
)
EVT_MENU
(
ID_SET_RELATIVE_OFFSET
,
FOOTPRINT_WIZARD_FRAME
::
OnSetRelativeOffset
)
END_EVENT_TABLE
()
END_EVENT_TABLE
()
...
@@ -412,21 +412,6 @@ void FOOTPRINT_WIZARD_FRAME::ClickOnPageList( wxCommandEvent& event )
...
@@ -412,21 +412,6 @@ void FOOTPRINT_WIZARD_FRAME::ClickOnPageList( wxCommandEvent& event )
}
}
void
FOOTPRINT_WIZARD_FRAME
::
ClickOnParameterGrid
(
wxCommandEvent
&
event
)
{
int
n
=
m_ParameterGrid
->
GetNumberRows
();
for
(
int
i
=
0
;
i
<
n
;
i
++
)
{
// Get values, send them to the object..
}
ReloadFootprint
();
DisplayWizardInfos
();
}
#define PARTLIST_WIDTH_KEY wxT( "Partlist_width" )
#define PARTLIST_WIDTH_KEY wxT( "Partlist_width" )
#define PARAMLIST_WIDTH_KEY wxT( "Paramlist_width" )
#define PARAMLIST_WIDTH_KEY wxT( "Paramlist_width" )
...
...
pcbnew/footprint_wizard_frame.h
View file @
70df1517
...
@@ -37,6 +37,7 @@ class wxSashLayoutWindow;
...
@@ -37,6 +37,7 @@ class wxSashLayoutWindow;
class
wxListBox
;
class
wxListBox
;
class
wxSemaphore
;
class
wxSemaphore
;
class
wxGrid
;
class
wxGrid
;
class
wxGridEvent
;
/**
/**
...
@@ -104,7 +105,6 @@ private:
...
@@ -104,7 +105,6 @@ private:
void
ReCreateVToolbar
();
void
ReCreateVToolbar
();
void
OnLeftClick
(
wxDC
*
DC
,
const
wxPoint
&
MousePos
);
void
OnLeftClick
(
wxDC
*
DC
,
const
wxPoint
&
MousePos
);
void
ClickOnPageList
(
wxCommandEvent
&
event
);
void
ClickOnPageList
(
wxCommandEvent
&
event
);
void
ClickOnParameterGrid
(
wxCommandEvent
&
event
);
void
OnSetRelativeOffset
(
wxCommandEvent
&
event
);
void
OnSetRelativeOffset
(
wxCommandEvent
&
event
);
void
GeneralControl
(
wxDC
*
aDC
,
const
wxPoint
&
aPosition
,
int
aHotKey
=
0
);
void
GeneralControl
(
wxDC
*
aDC
,
const
wxPoint
&
aPosition
,
int
aHotKey
=
0
);
...
@@ -137,7 +137,7 @@ private:
...
@@ -137,7 +137,7 @@ private:
void
SelectCurrentWizard
(
wxCommandEvent
&
event
);
void
SelectCurrentWizard
(
wxCommandEvent
&
event
);
void
ParametersUpdated
(
wx
Comman
dEvent
&
event
);
void
ParametersUpdated
(
wx
Gri
dEvent
&
event
);
...
...
pcbnew/scripting/module.i
View file @
70df1517
...
@@ -36,7 +36,8 @@
...
@@ -36,7 +36,8 @@
def GetPads(self): return self.m_Pads
def GetPads(self): return self.m_Pads
def GetDrawings(self): return self.m_Drawings
def GetDrawings(self): return self.m_Drawings
def GetReferenceObj(self): return self.m_Reference
def GetReferenceObj(self): return self.m_Reference
def GetValueObj(self): return self.m_Value
#def SaveToLibrary(self,filename):
#def SaveToLibrary(self,filename):
# return SaveModuleToLibrary(filename,self)
# return SaveModuleToLibrary(filename,self)
...
@@ -113,4 +114,4 @@ def FootprintIsWritable(lpath):
...
@@ -113,4 +114,4 @@ def FootprintIsWritable(lpath):
}
}
%}
%}
\ No newline at end of file
pcbnew/scripting/pcbnew_footprint_wizards.cpp
View file @
70df1517
...
@@ -186,12 +186,44 @@ wxArrayString PYTHON_FOOTPRINT_WIZARD::GetParameterValues(int aPage)
...
@@ -186,12 +186,44 @@ wxArrayString PYTHON_FOOTPRINT_WIZARD::GetParameterValues(int aPage)
return
ret
;
return
ret
;
}
}
wx
String
PYTHON_FOOTPRINT_WIZARD
::
SetParameterValues
(
int
aPage
,
wxArrayString
&
aValues
)
wx
ArrayString
PYTHON_FOOTPRINT_WIZARD
::
GetParameterErrors
(
int
aPage
)
{
{
wxString
ret
;
PyObject
*
arglist
;
wxArrayString
ret
;
arglist
=
Py_BuildValue
(
"(i)"
,
aPage
);
ret
=
CallRetArrayStrMethod
(
"GetParameterErrors"
,
arglist
);
Py_DECREF
(
arglist
);
return
ret
;
return
ret
;
}
}
wxString
PYTHON_FOOTPRINT_WIZARD
::
SetParameterValues
(
int
aPage
,
wxArrayString
&
aValues
)
{
int
len
=
aValues
.
size
();
PyObject
*
py_list
;
py_list
=
PyList_New
(
len
);
for
(
int
i
=
0
;
i
<
len
;
i
++
)
{
wxString
str
=
aValues
[
i
];
PyObject
*
py_str
=
PyString_FromString
((
const
char
*
)
str
.
mb_str
());
PyList_SetItem
(
py_list
,
i
,
py_str
);
}
PyObject
*
arglist
;
arglist
=
Py_BuildValue
(
"(i,O)"
,
aPage
,
py_list
);
wxString
res
=
CallRetStrMethod
(
"SetParameterValues"
,
arglist
);
Py_DECREF
(
arglist
);
return
res
;
}
/* this is a SWIG function declaration -from module.i*/
/* this is a SWIG function declaration -from module.i*/
MODULE
*
PyModule_to_MODULE
(
PyObject
*
obj0
);
MODULE
*
PyModule_to_MODULE
(
PyObject
*
obj0
);
...
@@ -201,14 +233,18 @@ MODULE *PYTHON_FOOTPRINT_WIZARD::GetModule()
...
@@ -201,14 +233,18 @@ MODULE *PYTHON_FOOTPRINT_WIZARD::GetModule()
result
=
CallMethod
(
"GetModule"
,
NULL
);
result
=
CallMethod
(
"GetModule"
,
NULL
);
if
(
!
result
)
return
NULL
;
if
(
!
result
)
return
NULL
;
obj
=
PyObject_GetAttrString
(
result
,
"this"
);
obj
=
PyObject_GetAttrString
(
result
,
"this"
);
if
(
PyErr_Occurred
())
if
(
PyErr_Occurred
())
{
{
/*
PyObject *t, *v, *b;
PyObject *t, *v, *b;
PyErr_Fetch(&t, &v, &b);
PyErr_Fetch(&t, &v, &b);
printf ("calling GetModule()\n");
printf ("calling GetModule()\n");
printf ("Exception: %s\n",PyString_AsString(PyObject_Str(v)));
printf ("Exception: %s\n",PyString_AsString(PyObject_Str(v)));
printf (" : %s\n",PyString_AsString(PyObject_Str(b)));
printf (" : %s\n",PyString_AsString(PyObject_Str(b)));
*/
PyErr_Print
();
}
}
...
...
pcbnew/scripting/pcbnew_footprint_wizards.h
View file @
70df1517
...
@@ -30,9 +30,9 @@ public:
...
@@ -30,9 +30,9 @@ public:
wxString
GetParameterPageName
(
int
aPage
);
wxString
GetParameterPageName
(
int
aPage
);
wxArrayString
GetParameterNames
(
int
aPage
);
wxArrayString
GetParameterNames
(
int
aPage
);
wxArrayString
GetParameterValues
(
int
aPage
);
wxArrayString
GetParameterValues
(
int
aPage
);
wxString
SetParameterValues
(
int
aPage
,
wxArrayString
&
aValues
);
wxArrayString
GetParameterErrors
(
int
aPage
);
wxString
SetParameterValues
(
int
aPage
,
wxArrayString
&
aValues
);
//< must return "OK" or error description
MODULE
*
GetModule
();
MODULE
*
GetModule
();
};
};
...
...
pcbnew/scripting/plugins/fpc_footprint_wizard.py
View file @
70df1517
...
@@ -16,6 +16,7 @@ class FPCFootprintWizard(FootprintWizardPlugin):
...
@@ -16,6 +16,7 @@ class FPCFootprintWizard(FootprintWizardPlugin):
"width"
:
FromMM
(
1.5
),
"height"
:
FromMM
(
2
)},
"width"
:
FromMM
(
1.5
),
"height"
:
FromMM
(
2
)},
}
}
self
.
ClearErrors
()
def
GetParameterValues
(
self
,
page_n
):
def
GetParameterValues
(
self
,
page_n
):
name
=
self
.
GetParameterPageName
(
page_n
)
name
=
self
.
GetParameterPageName
(
page_n
)
...
@@ -37,10 +38,40 @@ class FPCFootprintWizard(FootprintWizardPlugin):
...
@@ -37,10 +38,40 @@ class FPCFootprintWizard(FootprintWizardPlugin):
pad
.
SetPadName
(
name
)
pad
.
SetPadName
(
name
)
return
pad
return
pad
def
CheckParameters
(
self
):
p
=
self
.
parameters
pads
=
p
[
"Pads"
][
"n"
]
errors
=
""
if
(
pads
<
1
):
self
.
parameter_errors
[
"Pads"
][
"n"
]
=
"Must be positive"
errors
+=
"Pads/n has wrong value, "
p
[
"Pads"
][
"n"
]
=
int
(
pads
)
# make sure it stays as int (default is float)
pad_width
=
p
[
"Pads"
][
"width"
]
pad_height
=
p
[
"Pads"
][
"height"
]
pad_pitch
=
p
[
"Pads"
][
"pitch"
]
shl_width
=
p
[
"Shield"
][
"width"
]
shl_height
=
p
[
"Shield"
][
"height"
]
shl_to_pad
=
p
[
"Shield"
][
"shield_to_pad"
]
shl_from_top
=
p
[
"Shield"
][
"from_top"
]
return
errors
def
SetParameterValues
(
self
,
page
,
values
):
print
"SetParameterValues("
+
str
(
page
)
+
","
+
str
(
values
)
+
")"
FootprintWizardPlugin
.
SetParameterValues
(
self
,
page
,
values
)
def
BuildFootprint
(
self
):
def
BuildFootprint
(
self
):
print
"parameters:"
,
self
.
parameters
#self.ClearErrors()
#print "errors:",self.parameter_errors
module
=
MODULE
(
None
)
# create a new module
self
.
module
=
module
p
=
self
.
parameters
p
=
self
.
parameters
pads
=
p
[
"Pads"
][
"n"
]
pads
=
int
(
p
[
"Pads"
][
"n"
])
pad_width
=
p
[
"Pads"
][
"width"
]
pad_width
=
p
[
"Pads"
][
"width"
]
pad_height
=
p
[
"Pads"
][
"height"
]
pad_height
=
p
[
"Pads"
][
"height"
]
pad_pitch
=
p
[
"Pads"
][
"pitch"
]
pad_pitch
=
p
[
"Pads"
][
"pitch"
]
...
@@ -52,9 +83,6 @@ class FPCFootprintWizard(FootprintWizardPlugin):
...
@@ -52,9 +83,6 @@ class FPCFootprintWizard(FootprintWizardPlugin):
size_pad
=
wxSize
(
pad_width
,
pad_height
)
size_pad
=
wxSize
(
pad_width
,
pad_height
)
size_shld
=
wxSize
(
shl_width
,
shl_height
)
size_shld
=
wxSize
(
shl_width
,
shl_height
)
# create a new module
module
=
MODULE
(
None
)
module
.
SetReference
(
"FPC"
+
str
(
pads
))
# give it a reference name
module
.
SetReference
(
"FPC"
+
str
(
pads
))
# give it a reference name
module
.
m_Reference
.
SetPos0
(
wxPointMM
(
-
1
,
-
2
))
module
.
m_Reference
.
SetPos0
(
wxPointMM
(
-
1
,
-
2
))
module
.
m_Reference
.
SetPosition
(
wxPointMM
(
-
1
,
-
2
))
module
.
m_Reference
.
SetPosition
(
wxPointMM
(
-
1
,
-
2
))
...
@@ -84,11 +112,9 @@ class FPCFootprintWizard(FootprintWizardPlugin):
...
@@ -84,11 +112,9 @@ class FPCFootprintWizard(FootprintWizardPlugin):
e
.
SetShape
(
S_SEGMENT
)
e
.
SetShape
(
S_SEGMENT
)
module
.
Add
(
e
)
module
.
Add
(
e
)
# save the PCB to disk
module
.
SetLibRef
(
"FPC"
+
str
(
pads
))
module
.
SetLibRef
(
"FPC"
+
str
(
pads
))
self
.
module
=
module
# print "Module built and set:", module
# create our footprint wizard
# create our footprint wizard
fpc_wizard
=
FPCFootprintWizard
()
fpc_wizard
=
FPCFootprintWizard
()
...
...
scripting/kicadplugins.i
View file @
70df1517
...
@@ -61,6 +61,7 @@ class FootprintWizardPlugin(KiCadPlugin):
...
@@ -61,6 +61,7 @@ class FootprintWizardPlugin(KiCadPlugin):
def defaults(self):
def defaults(self):
self.module = None
self.module = None
self.parameters = {}
self.parameters = {}
self.parameter_errors={}
self.name = "Undefined Footprint Wizard plugin"
self.name = "Undefined Footprint Wizard plugin"
self.description = ""
self.description = ""
self.image = ""
self.image = ""
...
@@ -88,16 +89,50 @@ class FootprintWizardPlugin(KiCadPlugin):
...
@@ -88,16 +89,50 @@ class FootprintWizardPlugin(KiCadPlugin):
def GetParameterValues(self,page_n):
def GetParameterValues(self,page_n):
name = self.GetParameterPageName(page_n)
name = self.GetParameterPageName(page_n)
values = self.parameters[name].values()
values = self.parameters[name].values()
return map( lambda x: str(x) , values)
return map( lambda x: str(x) , values) # list elements as strings
def GetParameterErrors(self,page_n):
self.CheckParameters()
name = self.GetParameterPageName(page_n)
values = self.parameter_errors[name].values()
return map( lambda x: str(x) , values) # list elements as strings
def CheckParameters(self):
return ""
def TryConvertToFloat(self,value):
v = value
try:
v = float(value)
except:
pass
return v
def SetParameterValues(self,page_n,values):
def SetParameterValues(self,page_n,values):
name = self.GetParameterPageName(page
n
_n)
name = self.GetParameterPageName(page_n)
keys = self.parameters[name].
value
s()
keys = self.parameters[name].
key
s()
n=0
n=0
for key in keys:
for key in keys:
self.parameters[name][key] = values[n]
val = self.TryConvertToFloat(values[n])
self.parameters[name][key] = val
print "[%s][%s]<="%(name,key),val
n+=1
n+=1
# copies the parameter list on parameter_errors but empty
def ClearErrors(self):
errs={}
for page in self.parameters.keys():
page_dict = self.parameters[page]
page_params = {}
for param in page_dict.keys():
page_params[param]=""
errs[page]=page_params
self.parameter_errors = errs
def GetModule(self):
def GetModule(self):
self.BuildFootprint()
self.BuildFootprint()
...
...
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