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
6719900e
Commit
6719900e
authored
Aug 08, 2007
by
dickelbeck
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
searching and beautification
parent
f8f38438
Changes
21
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
21 changed files
with
1107 additions
and
887 deletions
+1107
-887
change_log.txt
change_log.txt
+12
-0
base_struct.cpp
common/base_struct.cpp
+14
-0
base_struct.h
include/base_struct.h
+21
-5
drawpanel_wxstruct.h
include/drawpanel_wxstruct.h
+23
-10
pcbstruct.h
include/pcbstruct.h
+11
-8
makefile.gtk
makefile.gtk
+1
-1
class_board.cpp
pcbnew/class_board.cpp
+56
-39
class_edge_mod.cpp
pcbnew/class_edge_mod.cpp
+26
-2
class_edge_mod.h
pcbnew/class_edge_mod.h
+2
-2
class_equipot.cpp
pcbnew/class_equipot.cpp
+98
-91
class_module.cpp
pcbnew/class_module.cpp
+42
-18
class_module.h
pcbnew/class_module.h
+10
-0
class_pad.cpp
pcbnew/class_pad.cpp
+63
-1
class_pad.h
pcbnew/class_pad.h
+13
-5
class_pcb_text.cpp
pcbnew/class_pcb_text.cpp
+3
-4
class_text_mod.cpp
pcbnew/class_text_mod.cpp
+4
-6
edit.cpp
pcbnew/edit.cpp
+14
-7
editrack-part2.cpp
pcbnew/editrack-part2.cpp
+2
-1
locate.cpp
pcbnew/locate.cpp
+33
-77
muonde.cpp
pcbnew/muonde.cpp
+636
-607
pcbnew.h
pcbnew/pcbnew.h
+23
-3
No files found.
change_log.txt
View file @
6719900e
...
@@ -5,6 +5,18 @@ Please add newer entries at the top, list the date and your name with
...
@@ -5,6 +5,18 @@ Please add newer entries at the top, list the date and your name with
email address.
email address.
2007-Aug-07 UPDATE Dick Hollenbeck <dick@softplc.com>
================================================================================
+ pcbnew & common
* More searching work. Made HitTest() virtual. Factored out a HitTest()
function for both class_module and class_pad from existing code.
* Embellished the Show() function for several of the classes. Could be the
basis of a possible future XML export, but with the native format being
ascii already, this is of questionable value as an export.
* Discovered a long time existing bug in class_module hit-testing.
Still need to understand it. It could just be an improperly formatted module.
2007-Aug-06 UPDATE Dick Hollenbeck <dick@softplc.com>
2007-Aug-06 UPDATE Dick Hollenbeck <dick@softplc.com>
================================================================================
================================================================================
+ pcbnew & common
+ pcbnew & common
...
...
common/base_struct.cpp
View file @
6719900e
...
@@ -191,6 +191,20 @@ wxString EDA_BaseStruct::ReturnClassName() const
...
@@ -191,6 +191,20 @@ wxString EDA_BaseStruct::ReturnClassName() const
#if defined(DEBUG)
#if defined(DEBUG)
// A function that should have been in wxWidgets
std
::
ostream
&
operator
<<
(
std
::
ostream
&
out
,
wxSize
&
size
)
{
out
<<
" width=
\"
"
<<
size
.
GetWidth
()
<<
"
\"
height=
\"
"
<<
size
.
GetHeight
()
<<
"
\"
"
;
return
out
;
}
// A function that should have been in wxWidgets
std
::
ostream
&
operator
<<
(
std
::
ostream
&
out
,
wxPoint
&
pt
)
{
out
<<
" x=
\"
"
<<
pt
.
x
<<
"
\"
y=
\"
"
<<
pt
.
y
<<
"
\"
"
;
return
out
;
}
/**
/**
* Function Show
* Function Show
...
...
include/base_struct.h
View file @
6719900e
...
@@ -8,6 +8,8 @@
...
@@ -8,6 +8,8 @@
#if defined(DEBUG)
#if defined(DEBUG)
#include <iostream> // needed for Show()
#include <iostream> // needed for Show()
extern
std
::
ostream
&
operator
<<
(
std
::
ostream
&
out
,
wxSize
&
size
);
extern
std
::
ostream
&
operator
<<
(
std
::
ostream
&
out
,
wxPoint
&
pt
);
#endif
#endif
...
@@ -177,6 +179,18 @@ public:
...
@@ -177,6 +179,18 @@ public:
const
wxPoint
&
offset
,
const
wxPoint
&
offset
,
int
draw_mode
,
int
draw_mode
,
int
Color
=
-
1
);
int
Color
=
-
1
);
/**
* Function HitTest
* tests if the given wxPoint is within the bounds of this object.
* @param refPos A wxPoint to test
* @return bool - true if a hit, else false
*/
virtual
bool
HitTest
(
const
wxPoint
&
refPos
)
{
return
false
;
// derived classes should override this function
}
#if defined(DEBUG)
#if defined(DEBUG)
...
@@ -330,10 +344,10 @@ public:
...
@@ -330,10 +344,10 @@ public:
/**
/**
* Function HitTest
* Function HitTest
* tests if the given wxPoint is within the bounds of this object.
* tests if the given wxPoint is within the bounds of this object.
* @param
posref
A wxPoint to test
* @param
ref_pos
A wxPoint to test
* @return bool - true if a hit, else false
* @return bool - true if a hit, else false
*/
*/
bool
HitTest
(
const
wxPoint
&
posref
);
bool
HitTest
(
const
wxPoint
&
ref_pos
);
int
Len_Size
(
void
);
// Return the text lenght in internal units
int
Len_Size
(
void
);
// Return the text lenght in internal units
};
};
...
@@ -381,9 +395,11 @@ public:
...
@@ -381,9 +395,11 @@ public:
};
};
/* class to handle component boundary box.
/**
* This class is similar to wxRect, but some wxRect functions are very curious,
* Class EDA_Rect
* so I prefer this suitable class
* handles the component boundary box.
* This class is similar to wxRect, but some wxRect functions are very curious,
* so I prefer this suitable class
*/
*/
class
EDA_Rect
class
EDA_Rect
{
{
...
...
include/drawpanel_wxstruct.h
View file @
6719900e
...
@@ -174,16 +174,17 @@ public:
...
@@ -174,16 +174,17 @@ public:
wxPoint
m_Curseur
;
/* Screen cursor coordinate (on grid) in user units. */
wxPoint
m_Curseur
;
/* Screen cursor coordinate (on grid) in user units. */
wxPoint
m_MousePosition
;
/* Mouse cursor coordinate (off grid) in user units. */
wxPoint
m_MousePosition
;
/* Mouse cursor coordinate (off grid) in user units. */
wxPoint
m_MousePositionInPixels
;
/* Mouse cursor coordinate (off grid) in pixels. */
wxPoint
m_MousePositionInPixels
;
/* Mouse cursor coordinate (off grid) in pixels. */
wxPoint
m_O_Curseur
;
/* Relative Screen cursor coordinate (on grid) in user units.
wxPoint
m_O_Curseur
;
/* Relative Screen cursor coordinate (on grid) in user units.
*
(coordinates from last reset position)*/
*
(coordinates from last reset position)*/
wxPoint
m_ScrollbarPos
;
// Position effective des Curseurs de scroll
wxPoint
m_ScrollbarPos
;
// Position effective des Curseurs de scroll
wxSize
m_ScrollbarNumber
;
/* Valeur effective des Nombres de Scrool
wxSize
m_ScrollbarNumber
;
/* Valeur effective des Nombres de Scrool
*
c.a.d taille en unites de scroll de la surface totale affichable */
*
c.a.d taille en unites de scroll de la surface totale affichable */
wxPoint
m_StartVisu
;
// Coord absolues du 1er pixel visualis�a l'ecran (en nombre de pixels)
wxPoint
m_StartVisu
;
// Coord absolues du 1er pixel visualis�a l'ecran (en nombre de pixels)
wxSize
m_SizeVisu
;
/* taille en pixels de l'ecran (fenetre de visu
* Utile pour recadrer les affichages lors de la
wxSize
m_SizeVisu
;
/* taille en pixels de l'ecran (fenetre de visu
* navigation dans la hierarchie */
* Utile pour recadrer les affichages lors de la
bool
m_Center
;
// TRUE: coord algebriques, FALSE: coord >= 0
* navigation dans la hierarchie */
bool
m_Center
;
// TRUE: coord algebriques, FALSE: coord >= 0
bool
m_FirstRedraw
;
bool
m_FirstRedraw
;
/* Gestion des editions */
/* Gestion des editions */
...
@@ -273,9 +274,22 @@ public:
...
@@ -273,9 +274,22 @@ public:
void
SetFirstGrid
(
void
);
/* ajuste la grille au mini*/
void
SetFirstGrid
(
void
);
/* ajuste la grille au mini*/
void
SetLastGrid
(
void
);
/* ajuste la grille au max */
void
SetLastGrid
(
void
);
/* ajuste la grille au max */
/**
* Function RefPos
* returns the reference position, coming from either the mouse position or the
* the cursor position.
* @param useMouse If true, return mouse posistion, else cursor's.
* @return wxPoint - The reference point, either the mouse position or
* the cursor position.
*/
wxPoint
RefPos
(
bool
useMouse
)
{
return
useMouse
?
m_MousePosition
:
m_Curseur
;
}
#if defined (DEBUG)
#if defined (DEBUG)
/**
/**
* Function GetClass
* Function GetClass
* returns the class name.
* returns the class name.
...
@@ -285,7 +299,6 @@ public:
...
@@ -285,7 +299,6 @@ public:
{
{
return
wxT
(
"BASE_SCREEN"
);
return
wxT
(
"BASE_SCREEN"
);
}
}
#endif
#endif
};
};
...
...
include/pcbstruct.h
View file @
6719900e
...
@@ -66,16 +66,15 @@
...
@@ -66,16 +66,15 @@
#define ECO1_LAYER 0x04000000
#define ECO1_LAYER 0x04000000
#define ECO2_LAYER 0x08000000
#define ECO2_LAYER 0x08000000
#define EDGE_LAYER 0x10000000
#define EDGE_LAYER 0x10000000
#define intS_LAYER 0xE0000000
/* 4 bits MSB = autres flags */
// extra bits 0xE0000000
/* masques generaux : */
/* masques generaux : */
#define ALL_LAYERS 0x1FFFFFFF
#define ALL_LAYERS 0x1FFFFFFF
#define ALL_NO_CU_LAYERS 0x1FFF0000
#define ALL_NO_CU_LAYERS 0x1FFF0000
#define ALL_CU_LAYERS 0x0000FFFF
#define ALL_CU_LAYERS 0x0000FFFF
#define INTERNAL_LAYERS 0x00007FFE
/* Bits layers internes */
#define INTERNAL_LAYERS 0x00007FFE
/* Bits layers internes */
#define EXTERNAL_LAYERS 0x00008001
#define EXTERNAL_LAYERS 0x00008001
/* Flags pour les couches cuivres */
#define LAYER_is_PLAN 0x80000000
/* Flags pour les couches cuivres */
/* numero des couches particulieres */
/* numero des couches particulieres */
#define LAYER_CUIVRE_N 0
#define LAYER_CUIVRE_N 0
#define CUIVRE_N 0
#define CUIVRE_N 0
...
@@ -96,6 +95,7 @@
...
@@ -96,6 +95,7 @@
#define LAYER_CMP_N 15
#define LAYER_CMP_N 15
#define CMP_N 15
#define CMP_N 15
#define NB_COPPER_LAYERS (CMP_N + 1)
#define NB_COPPER_LAYERS (CMP_N + 1)
#define FIRST_NO_COPPER_LAYER 16
#define FIRST_NO_COPPER_LAYER 16
#define ADHESIVE_N_CU 16
#define ADHESIVE_N_CU 16
#define ADHESIVE_N_CMP 17
#define ADHESIVE_N_CMP 17
...
@@ -112,6 +112,7 @@
...
@@ -112,6 +112,7 @@
#define EDGE_N 28
#define EDGE_N 28
#define LAST_NO_COPPER_LAYER 28
#define LAST_NO_COPPER_LAYER 28
#define NB_LAYERS (EDGE_N + 1)
#define NB_LAYERS (EDGE_N + 1)
#define LAYER_COUNT 32
#define LAYER_COUNT 32
/* Forme des segments (pistes, contours ..) ( parametre .shape ) */
/* Forme des segments (pistes, contours ..) ( parametre .shape ) */
...
@@ -257,12 +258,13 @@ public:
...
@@ -257,12 +258,13 @@ public:
/**
/**
* Function Find
ModuleOrPad
* Function Find
PadOrModule
* searches for either a
module or a pad
, giving precedence to pads.
* searches for either a
pad or module
, giving precedence to pads.
* @param refPos The wxPoint to hit-test.
* @param refPos The wxPoint to hit-test.
* @param typeloc
* @return EDA_BaseStruct* - if a direct hit, else NULL.
* @return EDA_BaseStruct* - if a direct hit, else NULL.
*/
*/
EDA_BaseStruct
*
Find
ModuleOrPad
(
const
wxPoint
&
refPos
);
EDA_BaseStruct
*
Find
PadOrModule
(
const
wxPoint
&
refPos
,
int
layer
,
int
typeloc
);
#endif
#endif
};
};
...
@@ -375,9 +377,10 @@ public:
...
@@ -375,9 +377,10 @@ public:
int
DisplayModText
;
int
DisplayModText
;
bool
DisplayPcbTrackFill
;
/* FALSE = sketch , TRUE = filled */
bool
DisplayPcbTrackFill
;
/* FALSE = sketch , TRUE = filled */
bool
DisplayTrackIsol
;
bool
DisplayTrackIsol
;
int
m_DisplayViaMode
;
/* 0 do not show via hole,
int
m_DisplayViaMode
;
/* 0 do not show via hole,
*
1 show via hole for non default value
* 1 show via hole for non default value
*
2 show all via hole */
* 2 show all via hole */
bool
DisplayPolarCood
;
bool
DisplayPolarCood
;
bool
DisplayZones
;
bool
DisplayZones
;
...
...
makefile.gtk
View file @
6719900e
MAKEGTK
=
$(MAKE)
-f
makefile.gtk
MAKEGTK
=
$(MAKE)
-f
makefile.gtk
KICAD_SUBDIRS
=
common 3d-viewer
eeschema eeschema/plugins pcbnew
cvpcb kicad gerbview
KICAD_SUBDIRS
=
common 3d-viewer
pcbnew eeschema eeschema/plugins
cvpcb kicad gerbview
KICAD_SUBDIRS_BIN
=
eeschema eeschema/plugins pcbnew cvpcb kicad gerbview
KICAD_SUBDIRS_BIN
=
eeschema eeschema/plugins pcbnew cvpcb kicad gerbview
KICAD_SUBDIRS_RES
=
internat modules template library
KICAD_SUBDIRS_RES
=
internat modules template library
KICAD_SUBDIRS_HELP
=
help
KICAD_SUBDIRS_HELP
=
help
...
...
pcbnew/class_board.cpp
View file @
6719900e
...
@@ -289,58 +289,75 @@ void BOARD::Show( int nestLevel, std::ostream& os )
...
@@ -289,58 +289,75 @@ void BOARD::Show( int nestLevel, std::ostream& os )
}
}
class
ModuleOrPad
:
public
INSPECTOR
// see pcbstruct.h
EDA_BaseStruct
*
BOARD
::
FindPadOrModule
(
const
wxPoint
&
refPos
,
int
layer
,
int
typeloc
)
{
{
public
:
class
PadOrModule
:
public
INSPECTOR
EDA_BaseStruct
*
found
;
ModuleOrPad
()
:
found
(
0
)
{
}
SEARCH_RESULT
Inspect
(
EDA_BaseStruct
*
testItem
,
const
void
*
testData
)
{
{
const
wxPoint
*
refPos
=
(
const
wxPoint
*
)
testData
;
public
:
EDA_BaseStruct
*
found
;
if
(
testItem
->
m_StructType
==
TYPEMODULE
)
int
layer
;
int
typeloc
;
PadOrModule
(
int
alayer
,
int
atypeloc
)
:
found
(
0
),
layer
(
alayer
),
typeloc
(
atypeloc
)
{}
SEARCH_RESULT
Inspect
(
EDA_BaseStruct
*
testItem
,
const
void
*
testData
)
{
{
/* not finished
const
wxPoint
*
refPos
=
(
const
wxPoint
*
)
testData
;
if( testItem->HitTest( &refPos ) )
if
(
testItem
->
m_StructType
==
TYPEMODULE
)
{
{
found = testItem;
int
mlayer
=
((
MODULE
*
)
testItem
)
->
m_Layer
;
return SEARCH_QUIT;
if
(
typeloc
&
MATCH_LAYER
)
{
if
(
layer
!=
mlayer
)
return
SEARCH_CONTINUE
;
}
if
(
typeloc
&
VISIBLE_ONLY
)
{
if
(
!
IsModuleLayerVisible
(
mlayer
)
)
return
SEARCH_CONTINUE
;
}
if
(
testItem
->
HitTest
(
*
refPos
)
)
{
found
=
testItem
;
return
SEARCH_QUIT
;
}
}
}
*/
else
if
(
testItem
->
m_StructType
==
TYPEPAD
)
}
else
if
(
testItem
->
m_StructType
==
TYPEPAD
)
{
/* not finished
if( testItem->HitTest( &refPos ) )
{
{
found = testItem;
if
(
testItem
->
HitTest
(
*
refPos
)
)
return SEARCH_QUIT;
{
found
=
testItem
;
return
SEARCH_QUIT
;
}
}
}
*/
else
{
int
debug
=
1
;
/* this should not happen, because of scanTypes */
}
return
SEARCH_CONTINUE
;
}
}
return
SEARCH_CONTINUE
;
};
}
};
// see pcbstruct.h
PadOrModule
inspector1
(
layer
,
MATCH_LAYER
);
EDA_BaseStruct
*
BOARD
::
FindModuleOrPad
(
const
wxPoint
&
refPos
)
PadOrModule
inspector2
(
layer
,
VISIBLE_ONLY
);
{
ModuleOrPad
inspector
;
static
const
KICAD_T
scanTypes
[]
=
{
TYPEPAD
,
TYPEMODULE
,
EOT
};
static
const
KICAD_T
scanTypes
[]
=
{
TYPEPAD
,
TYPEMODULE
,
EOT
};
if
(
SEARCH_QUIT
==
IterateForward
(
m_Modules
,
&
inspector
,
&
refPos
,
scanTypes
)
)
return
inspector
.
found
;
// search the current layer first
if
(
SEARCH_QUIT
==
IterateForward
(
m_Modules
,
&
inspector1
,
&
refPos
,
scanTypes
)
)
return
inspector1
.
found
;
// if not found, set layer to don't care and search again
if
(
SEARCH_QUIT
==
IterateForward
(
m_Modules
,
&
inspector2
,
&
refPos
,
scanTypes
)
)
return
inspector2
.
found
;
return
NULL
;
return
NULL
;
}
}
...
...
pcbnew/class_edge_mod.cpp
View file @
6719900e
...
@@ -163,7 +163,10 @@ void EDGE_MODULE::Draw( WinEDA_DrawPanel* panel, wxDC* DC,
...
@@ -163,7 +163,10 @@ void EDGE_MODULE::Draw( WinEDA_DrawPanel* panel, wxDC* DC,
zoom
=
screen
->
GetZoom
();
zoom
=
screen
->
GetZoom
();
type_trace
=
m_Shape
;
type_trace
=
m_Shape
;
ux0
=
m_Start
.
x
-
offset
.
x
;
uy0
=
m_Start
.
y
-
offset
.
y
;
ux0
=
m_Start
.
x
-
offset
.
x
;
uy0
=
m_Start
.
y
-
offset
.
y
;
dx
=
m_End
.
x
-
offset
.
x
;
dx
=
m_End
.
x
-
offset
.
x
;
dy
=
m_End
.
y
-
offset
.
y
;
dy
=
m_End
.
y
-
offset
.
y
;
...
@@ -445,8 +448,29 @@ int EDGE_MODULE::ReadDescr( char* Line, FILE* File,
...
@@ -445,8 +448,29 @@ int EDGE_MODULE::ReadDescr( char* Line, FILE* File,
*/
*/
void
EDGE_MODULE
::
Show
(
int
nestLevel
,
std
::
ostream
&
os
)
void
EDGE_MODULE
::
Show
(
int
nestLevel
,
std
::
ostream
&
os
)
{
{
const
char
*
cp
=
"???"
;
switch
(
m_Shape
)
{
case
S_SEGMENT
:
cp
=
"line"
;
break
;
case
S_RECT
:
cp
=
"rect"
;
break
;
case
S_ARC
:
cp
=
"arc"
;
break
;
case
S_CIRCLE
:
cp
=
"circle"
;
break
;
case
S_ARC_RECT
:
cp
=
"arc_rect"
;
break
;
case
S_SPOT_OVALE
:
cp
=
"spot_oval"
;
break
;
case
S_SPOT_CIRCLE
:
cp
=
"spot_circle"
;
break
;
case
S_SPOT_RECT
:
cp
=
"spot_rect"
;
break
;
case
S_POLYGON
:
cp
=
"polygon"
;
break
;
}
// for now, make it look like XML:
// for now, make it look like XML:
NestedSpace
(
nestLevel
,
os
)
<<
'<'
<<
GetClass
().
Lower
().
mb_str
()
<<
"/>
\n
"
;
NestedSpace
(
nestLevel
,
os
)
<<
'<'
<<
GetClass
().
Lower
().
mb_str
()
<<
" type=
\"
"
<<
cp
<<
"
\"
>
\n
"
;
NestedSpace
(
nestLevel
+
1
,
os
)
<<
"<start"
<<
m_Start0
<<
"/>
\n
"
;
NestedSpace
(
nestLevel
+
1
,
os
)
<<
"<end"
<<
m_End0
<<
"/>
\n
"
;
NestedSpace
(
nestLevel
,
os
)
<<
"</"
<<
GetClass
().
Lower
().
mb_str
()
<<
">
\n
"
;
}
}
#endif
#endif
pcbnew/class_edge_mod.h
View file @
6719900e
...
@@ -16,7 +16,7 @@ public:
...
@@ -16,7 +16,7 @@ public:
int
m_Angle
;
// pour les arcs de cercle: longueur de l'arc en 0,1 degres
int
m_Angle
;
// pour les arcs de cercle: longueur de l'arc en 0,1 degres
int
m_PolyCount
;
// For polygons
: number of points (> 2)
int
m_PolyCount
;
// For polygons: number of points (> 2)
int
*
m_PolyList
;
// For polygons: coord list (1 point = 2 coord)
int
*
m_PolyList
;
// For polygons: coord list (1 point = 2 coord)
// Coord are relative to Origin, orient 0
// Coord are relative to Origin, orient 0
...
@@ -50,7 +50,7 @@ public:
...
@@ -50,7 +50,7 @@ public:
*/
*/
virtual
wxString
GetClass
()
const
virtual
wxString
GetClass
()
const
{
{
return
wxT
(
"
POLYLINE
"
);
return
wxT
(
"
GRAPHIC
"
);
// return wxT( "EDGE" ); ?
// return wxT( "EDGE" ); ?
}
}
...
...
pcbnew/class_equipot.cpp
View file @
6719900e
/*****************************************************************/
/*****************************************************************/
/* fonctions membres de la classe EQUIPOT et fonctions associ
e
s */
/* fonctions membres de la classe EQUIPOT et fonctions associ
�
s */
/*****************************************************************/
/*****************************************************************/
#include "fctsys.h"
#include "fctsys.h"
...
@@ -17,125 +17,132 @@
...
@@ -17,125 +17,132 @@
#include "protos.h"
#include "protos.h"
/*********************************************************/
/*********************************************************/
/* classe EQUIPOT: gestion des listes d'equipotentielles */
/* classe EQUIPOT: gestion des listes d'equipotentielles */
/*********************************************************/
/*********************************************************/
/* Constructeur de la classe EQUIPOT */
/* Constructeur de la classe EQUIPOT */
EQUIPOT
::
EQUIPOT
(
EDA_BaseStruct
*
StructFather
)
:
EQUIPOT
::
EQUIPOT
(
EDA_BaseStruct
*
StructFather
)
:
EDA_BaseStruct
(
StructFather
,
PCB_EQUIPOT_STRUCT_TYPE
)
EDA_BaseStruct
(
StructFather
,
PCB_EQUIPOT_STRUCT_TYPE
)
{
{
m_NetCode
=
0
;
m_NetCode
=
0
;
m_NbNodes
=
m_NbLink
=
m_NbNoconn
=
0
;
m_NbNodes
=
m_NbLink
=
m_NbNoconn
=
0
;
m_Masque_Layer
=
0
;
m_Masque_Layer
=
0
;
m_Masque_Plan
=
0
;
m_Masque_Plan
=
0
;
m_ForceWidth
=
0
;
m_ForceWidth
=
0
;
m_PadzoneStart
=
NULL
;
// pointeur sur debut de liste pads du net
m_PadzoneStart
=
NULL
;
// pointeur sur debut de liste pads du net
m_PadzoneEnd
=
NULL
;
// pointeur sur fin de liste pads du net
m_PadzoneEnd
=
NULL
;
// pointeur sur fin de liste pads du net
m_RatsnestStart
=
NULL
;
// pointeur sur debut de liste ratsnests du net
m_RatsnestStart
=
NULL
;
// pointeur sur debut de liste ratsnests du net
m_RatsnestEnd
=
NULL
;
// pointeur sur fin de liste ratsnests du net
m_RatsnestEnd
=
NULL
;
// pointeur sur fin de liste ratsnests du net
}
}
/* destructeut */
EQUIPOT
::~
EQUIPOT
(
void
)
/* destructeut */
EQUIPOT
::~
EQUIPOT
(
void
)
{
{
}
}
void
EQUIPOT
::
UnLink
(
void
)
void
EQUIPOT
::
UnLink
(
void
)
{
{
/* Modification du chainage arriere */
/* Modification du chainage arriere */
if
(
Pback
)
if
(
Pback
)
{
{
if
(
Pback
->
m_StructType
!=
TYPEPCB
)
if
(
Pback
->
m_StructType
!=
TYPEPCB
)
{
{
Pback
->
Pnext
=
Pnext
;
Pback
->
Pnext
=
Pnext
;
}
}
else
/* Le chainage arriere pointe sur la structure "Pere" */
else
/* Le chainage arriere pointe sur la structure "Pere" */
{
{
(
(
BOARD
*
)
Pback
)
->
m_Equipots
=
(
EQUIPOT
*
)
Pnext
;
((
BOARD
*
)
Pback
)
->
m_Equipots
=
(
EQUIPOT
*
)
Pnext
;
}
}
}
}
/* Modification du chainage avant */
/* Modification du chainage avant */
if
(
Pnext
)
if
(
Pnext
)
Pnext
->
Pback
=
Pback
;
Pnext
->
Pback
=
Pback
;
Pnext
=
Pback
=
NULL
;
Pnext
=
Pback
=
NULL
;
}
}
/*************************************************/
/*************************************************/
EQUIPOT
*
GetEquipot
(
BOARD
*
pcb
,
int
netcode
)
EQUIPOT
*
GetEquipot
(
BOARD
*
pcb
,
int
netcode
)
/**************************************************/
/**************************************************/
/*
/*
retourne un pointeur sur la structure EQUIPOT de numero netcode
*
retourne un pointeur sur la structure EQUIPOT de numero netcode
*/
*/
{
{
EQUIPOT
*
Equipot
;
EQUIPOT
*
Equipot
;
if
(
netcode
<=
0
)
return
NULL
;
if
(
netcode
<=
0
)
return
NULL
;
Equipot
=
(
EQUIPOT
*
)
pcb
->
m_Equipots
;
while
(
Equipot
)
Equipot
=
(
EQUIPOT
*
)
pcb
->
m_Equipots
;
{
while
(
Equipot
)
if
(
Equipot
->
m_NetCode
==
netcode
)
break
;
{
Equipot
=
(
EQUIPOT
*
)
Equipot
->
Pnext
;
if
(
Equipot
->
m_NetCode
==
netcode
)
}
break
;
Equipot
=
(
EQUIPOT
*
)
Equipot
->
Pnext
;
return
(
Equipot
);
}
return
Equipot
;
}
}
/*********************************************************/
/*********************************************************/
int
EQUIPOT
::
ReadEquipotDescr
(
FILE
*
File
,
int
*
LineNum
)
int
EQUIPOT
::
ReadEquipotDescr
(
FILE
*
File
,
int
*
LineNum
)
/*********************************************************/
/*********************************************************/
/* Routine de lecture de 1 descr Equipotentielle.
/* Routine de lecture de 1 descr Equipotentielle.
retourne 0 si OK
*
retourne 0 si OK
1 si lecture incomplete
*
1 si lecture incomplete
*/
*/
{
{
char
Line
[
1024
],
Ltmp
[
1024
];
char
Line
[
1024
],
Ltmp
[
1024
];
int
tmp
;
int
tmp
;
while
(
GetLine
(
File
,
Line
,
LineNum
)
)
while
(
GetLine
(
File
,
Line
,
LineNum
)
)
{
{
if
(
strnicmp
(
Line
,
"$End"
,
4
)
==
0
)
return
0
;
if
(
strnicmp
(
Line
,
"$End"
,
4
)
==
0
)
return
0
;
if
(
strncmp
(
Line
,
"Na"
,
2
)
==
0
)
/* Texte */
{
if
(
strncmp
(
Line
,
"Na"
,
2
)
==
0
)
/* Texte */
sscanf
(
Line
+
2
,
" %d"
,
&
tmp
);
{
m_NetCode
=
tmp
;
sscanf
(
Line
+
2
,
" %d"
,
&
tmp
);
m_NetCode
=
tmp
;
ReadDelimitedText
(
Ltmp
,
Line
+
2
,
sizeof
(
Ltmp
)
);
m_Netname
=
CONV_FROM_UTF8
(
Ltmp
);
ReadDelimitedText
(
Ltmp
,
Line
+
2
,
sizeof
(
Ltmp
)
);
continue
;
m_Netname
=
CONV_FROM_UTF8
(
Ltmp
);
}
continue
;
}
if
(
strncmp
(
Line
,
"Lw"
,
2
)
==
0
)
/* Texte */
{
if
(
strncmp
(
Line
,
"Lw"
,
2
)
==
0
)
/* Texte */
sscanf
(
Line
+
2
,
" %d"
,
&
tmp
);
{
m_ForceWidth
=
tmp
;
sscanf
(
Line
+
2
,
" %d"
,
&
tmp
);
continue
;
m_ForceWidth
=
tmp
;
}
continue
;
}
}
return
1
;
}
return
1
;
}
}
/********************************************/
/********************************************/
int
EQUIPOT
::
WriteEquipotDescr
(
FILE
*
File
)
int
EQUIPOT
::
WriteEquipotDescr
(
FILE
*
File
)
/********************************************/
/********************************************/
{
{
if
(
GetState
(
DELETED
)
)
return
(
0
);
if
(
GetState
(
DELETED
)
)
return
0
;
fprintf
(
File
,
"$EQUIPOT
\n
"
);
fprintf
(
File
,
"Na %d
\"
%.16s
\"\n
"
,
m_NetCode
,
CONV_TO_UTF8
(
m_Netname
)
);
fprintf
(
File
,
"$EQUIPOT
\n
"
);
fprintf
(
File
,
"St %s
\n
"
,
"~"
);
fprintf
(
File
,
"Na %d
\"
%.16s
\"\n
"
,
m_NetCode
,
CONV_TO_UTF8
(
m_Netname
)
);
if
(
m_ForceWidth
)
fprintf
(
File
,
"Lw %d
\n
"
,
m_ForceWidth
);
fprintf
(
File
,
"St %s
\n
"
,
"~"
);
fprintf
(
File
,
"$EndEQUIPOT
\n
"
);
if
(
m_ForceWidth
)
return
(
1
);
fprintf
(
File
,
"Lw %d
\n
"
,
m_ForceWidth
);
fprintf
(
File
,
"$EndEQUIPOT
\n
"
);
return
1
;
}
}
pcbnew/class_module.cpp
View file @
6719900e
...
@@ -1146,6 +1146,29 @@ void MODULE::Display_Infos( WinEDA_BasePcbFrame* frame )
...
@@ -1146,6 +1146,29 @@ void MODULE::Display_Infos( WinEDA_BasePcbFrame* frame )
}
}
/**
* Function HitTest
* tests if the given wxPoint is within the bounds of this object.
* @param refPos A wxPoint to test
* @return bool - true if a hit, else false
*/
bool
MODULE
::
HitTest
(
const
wxPoint
&
refPos
)
{
/* Calcul des coord souris dans le repere module */
int
spot_cX
=
refPos
.
x
-
m_Pos
.
x
;
int
spot_cY
=
refPos
.
y
-
m_Pos
.
y
;
RotatePoint
(
&
spot_cX
,
&
spot_cY
,
-
m_Orient
);
/* la souris est-elle dans ce rectangle : */
if
(
m_BoundaryBox
.
Inside
(
spot_cX
,
spot_cY
)
)
return
true
;
return
false
;
}
#if defined(DEBUG)
#if defined(DEBUG)
/**
/**
* Function Show
* Function Show
...
@@ -1157,29 +1180,29 @@ void MODULE::Display_Infos( WinEDA_BasePcbFrame* frame )
...
@@ -1157,29 +1180,29 @@ void MODULE::Display_Infos( WinEDA_BasePcbFrame* frame )
void
MODULE
::
Show
(
int
nestLevel
,
std
::
ostream
&
os
)
void
MODULE
::
Show
(
int
nestLevel
,
std
::
ostream
&
os
)
{
{
// for now, make it look like XML, expand on this later.
// for now, make it look like XML, expand on this later.
NestedSpace
(
nestLevel
,
os
)
<<
'<'
<<
GetClass
().
Lower
().
mb_str
()
<<
NestedSpace
(
nestLevel
,
os
)
<<
'<'
<<
GetClass
().
Lower
().
mb_str
()
<<
// " ref=\"" << m_Reference->m_Text.mb_str()
<<
" ref=
\"
"
<<
m_Reference
->
m_Text
.
mb_str
()
<<
'"'
<<
// "\" value=\"" << m_Value->m_Text.mb_str() << '"' <<
" value=
\"
"
<<
m_Value
->
m_Text
.
mb_str
()
<<
'"'
<<
">
\n
"
;
">
\n
"
;
EDA_BaseStruct
*
p
;
p
=
m_Reference
;
NestedSpace
(
nestLevel
+
1
,
os
)
<<
for
(
;
p
;
p
=
p
->
Pnext
)
"<boundingBox"
<<
m_BoundaryBox
.
m_Pos
<<
m_BoundaryBox
.
m_Size
<<
"/>
\n
"
;
p
->
Show
(
nestLevel
+
1
,
os
);
p
=
m_Value
;
NestedSpace
(
nestLevel
+
1
,
os
)
<<
"<orientation tenths=
\"
"
<<
m_Orient
<<
"
\"
/>
\n
"
;
for
(
;
p
;
p
=
p
->
Pnext
)
p
->
Show
(
nestLevel
+
1
,
os
)
;
EDA_BaseStruct
*
p
;
NestedSpace
(
nestLevel
+
1
,
os
)
<<
"<pads>
\n
"
;
p
=
m_Pads
;
p
=
m_Pads
;
for
(
;
p
;
p
=
p
->
Pnext
)
for
(
;
p
;
p
=
p
->
Pnext
)
p
->
Show
(
nestLevel
+
1
,
os
);
p
->
Show
(
nestLevel
+
2
,
os
);
NestedSpace
(
nestLevel
+
1
,
os
)
<<
"</pads>
\n
"
;
NestedSpace
(
nestLevel
+
1
,
os
)
<<
"<drawings>
\n
"
;
p
=
m_Drawings
;
p
=
m_Drawings
;
for
(
;
p
;
p
=
p
->
Pnext
)
for
(
;
p
;
p
=
p
->
Pnext
)
p
->
Show
(
nestLevel
+
1
,
os
);
p
->
Show
(
nestLevel
+
2
,
os
);
NestedSpace
(
nestLevel
+
1
,
os
)
<<
"</drawings>
\n
"
;
p
=
m_Son
;
p
=
m_Son
;
for
(
;
p
;
p
=
p
->
Pnext
)
for
(
;
p
;
p
=
p
->
Pnext
)
...
@@ -1207,13 +1230,14 @@ SEARCH_RESULT MODULE::Visit( INSPECTOR* inspector, const void* testData,
...
@@ -1207,13 +1230,14 @@ SEARCH_RESULT MODULE::Visit( INSPECTOR* inspector, const void* testData,
}
}
else
if
(
stype
==
TYPETEXTEMODULE
)
else
if
(
stype
==
TYPETEXTEMODULE
)
{
{
// iterate over m_Reference
if
(
SEARCH_QUIT
==
inspector
->
Inspect
(
m_Reference
,
testData
)
)
if
(
SEARCH_QUIT
==
IterateForward
(
m_Reference
,
inspector
,
testData
,
scanTypes
)
)
return
SEARCH_QUIT
;
return
SEARCH_QUIT
;
// iterate over m_Value
if
(
SEARCH_QUIT
==
inspector
->
Inspect
(
m_Value
,
testData
)
)
if
(
SEARCH_QUIT
==
IterateForward
(
m_Value
,
inspector
,
return
SEARCH_QUIT
;
// m_Drawings can hold TYPETEXTMODULE also?
if
(
SEARCH_QUIT
==
IterateForward
(
m_Drawings
,
inspector
,
testData
,
scanTypes
)
)
testData
,
scanTypes
)
)
return
SEARCH_QUIT
;
return
SEARCH_QUIT
;
}
}
...
...
pcbnew/class_module.h
View file @
6719900e
...
@@ -133,6 +133,16 @@ public:
...
@@ -133,6 +133,16 @@ public:
/* miscellaneous */
/* miscellaneous */
void
Display_Infos
(
WinEDA_BasePcbFrame
*
frame
);
void
Display_Infos
(
WinEDA_BasePcbFrame
*
frame
);
/**
* Function HitTest
* tests if the given wxPoint is within the bounds of this object.
* @param refPos A wxPoint to test
* @return bool - true if a hit, else false
*/
bool
HitTest
(
const
wxPoint
&
refPos
);
#if defined(DEBUG)
#if defined(DEBUG)
/**
/**
...
...
pcbnew/class_pad.cpp
View file @
6719900e
...
@@ -87,11 +87,16 @@ const wxPoint D_PAD::ReturnShapePos( void )
...
@@ -87,11 +87,16 @@ const wxPoint D_PAD::ReturnShapePos( void )
{
{
if
(
(
m_Offset
.
x
==
0
)
&&
(
m_Offset
.
y
==
0
)
)
if
(
(
m_Offset
.
x
==
0
)
&&
(
m_Offset
.
y
==
0
)
)
return
m_Pos
;
return
m_Pos
;
wxPoint
shape_pos
;
wxPoint
shape_pos
;
int
dX
,
dY
;
int
dX
,
dY
;
dX
=
m_Offset
.
x
;
dY
=
m_Offset
.
y
;
dX
=
m_Offset
.
x
;
dY
=
m_Offset
.
y
;
RotatePoint
(
&
dX
,
&
dY
,
m_Orient
);
RotatePoint
(
&
dX
,
&
dY
,
m_Orient
);
shape_pos
.
x
=
m_Pos
.
x
+
dX
;
shape_pos
.
y
=
m_Pos
.
y
+
dY
;
shape_pos
.
x
=
m_Pos
.
x
+
dX
;
shape_pos
.
y
=
m_Pos
.
y
+
dY
;
return
shape_pos
;
return
shape_pos
;
}
}
...
@@ -507,6 +512,7 @@ void D_PAD::Draw( WinEDA_DrawPanel* panel, wxDC* DC, const wxPoint& offset, int
...
@@ -507,6 +512,7 @@ void D_PAD::Draw( WinEDA_DrawPanel* panel, wxDC* DC, const wxPoint& offset, int
}
}
GRSetDrawMode
(
DC
,
draw_mode
);
GRSetDrawMode
(
DC
,
draw_mode
);
/* Trace du symbole "No connect" ( / ou \ ou croix en X) si necessaire : */
/* Trace du symbole "No connect" ( / ou \ ou croix en X) si necessaire : */
if
(
m_Netname
.
IsEmpty
()
&&
DisplayOpt
.
DisplayPadNoConn
)
if
(
m_Netname
.
IsEmpty
()
&&
DisplayOpt
.
DisplayPadNoConn
)
{
{
...
@@ -520,20 +526,26 @@ void D_PAD::Draw( WinEDA_DrawPanel* panel, wxDC* DC, const wxPoint& offset, int
...
@@ -520,20 +526,26 @@ void D_PAD::Draw( WinEDA_DrawPanel* panel, wxDC* DC, const wxPoint& offset, int
GRLine
(
&
panel
->
m_ClipBox
,
DC
,
cx0
+
dx0
,
cy0
-
dx0
,
GRLine
(
&
panel
->
m_ClipBox
,
DC
,
cx0
+
dx0
,
cy0
-
dx0
,
cx0
-
dx0
,
cy0
+
dx0
,
0
,
nc_color
);
cx0
-
dx0
,
cy0
+
dx0
,
0
,
nc_color
);
}
}
/* Trace de la reference */
/* Trace de la reference */
if
(
!
frame
->
m_DisplayPadNum
)
if
(
!
frame
->
m_DisplayPadNum
)
return
;
return
;
dx
=
min
(
m_Size
.
x
,
m_Size
.
y
);
/* dx = text size */
dx
=
min
(
m_Size
.
x
,
m_Size
.
y
);
/* dx = text size */
if
(
(
dx
/
zoom
)
>
12
)
/* size must be enought to draw 2 chars */
if
(
(
dx
/
zoom
)
>
12
)
/* size must be enought to draw 2 chars */
{
{
wxString
buffer
;
wxString
buffer
;
ReturnStringPadName
(
buffer
);
ReturnStringPadName
(
buffer
);
dy
=
buffer
.
Len
();
dy
=
buffer
.
Len
();
/* Draw text with an angle between -90 deg and + 90 deg */
/* Draw text with an angle between -90 deg and + 90 deg */
NORMALIZE_ANGLE_90
(
angle
);
NORMALIZE_ANGLE_90
(
angle
);
if
(
dy
<
2
)
if
(
dy
<
2
)
dy
=
2
;
/* text min size is 2 char */
dy
=
2
;
/* text min size is 2 char */
dx
=
(
dx
*
9
)
/
(
dy
*
13
);
/* Text size ajusted to pad size */
dx
=
(
dx
*
9
)
/
(
dy
*
13
);
/* Text size ajusted to pad size */
DrawGraphicText
(
panel
,
DC
,
wxPoint
(
ux0
,
uy0
),
DrawGraphicText
(
panel
,
DC
,
wxPoint
(
ux0
,
uy0
),
WHITE
,
buffer
,
angle
,
wxSize
(
dx
,
dx
),
WHITE
,
buffer
,
angle
,
wxSize
(
dx
,
dx
),
GR_TEXT_HJUSTIFY_CENTER
,
GR_TEXT_VJUSTIFY_CENTER
);
GR_TEXT_HJUSTIFY_CENTER
,
GR_TEXT_VJUSTIFY_CENTER
);
...
@@ -579,6 +591,7 @@ int D_PAD::ReadDescr( FILE* File, int* LineNum )
...
@@ -579,6 +591,7 @@ int D_PAD::ReadDescr( FILE* File, int* LineNum )
if
(
*
PtLine
)
if
(
*
PtLine
)
PtLine
++
;
PtLine
++
;
memset
(
m_Padname
,
0
,
sizeof
(
m_Padname
)
);
memset
(
m_Padname
,
0
,
sizeof
(
m_Padname
)
);
while
(
(
*
PtLine
!=
'"'
)
&&
*
PtLine
)
while
(
(
*
PtLine
!=
'"'
)
&&
*
PtLine
)
{
{
...
@@ -629,6 +642,7 @@ int D_PAD::ReadDescr( FILE* File, int* LineNum )
...
@@ -629,6 +642,7 @@ int D_PAD::ReadDescr( FILE* File, int* LineNum )
&
m_Offset
.
x
,
&
m_Offset
.
y
,
BufCar
,
&
dx
,
&
dy
);
&
m_Offset
.
x
,
&
m_Offset
.
y
,
BufCar
,
&
dx
,
&
dy
);
m_Drill
.
y
=
m_Drill
.
x
;
m_Drill
.
y
=
m_Drill
.
x
;
m_DrillShape
=
CIRCLE
;
m_DrillShape
=
CIRCLE
;
if
(
nn
>=
6
)
// Drill shape = OVAL ?
if
(
nn
>=
6
)
// Drill shape = OVAL ?
{
{
if
(
BufCar
[
0
]
==
'O'
)
if
(
BufCar
[
0
]
==
'O'
)
...
@@ -944,6 +958,54 @@ void D_PAD::Display_Infos( WinEDA_BasePcbFrame* frame )
...
@@ -944,6 +958,54 @@ void D_PAD::Display_Infos( WinEDA_BasePcbFrame* frame )
Affiche_1_Parametre
(
frame
,
pos
,
_
(
"Y pos"
),
Line
,
BLUE
);
Affiche_1_Parametre
(
frame
,
pos
,
_
(
"Y pos"
),
Line
,
BLUE
);
}
}
/**
* Function HitTest
* tests if the given wxPoint is within the bounds of this object.
* @param ref_pos A wxPoint to test
* @return bool - true if a hit, else false
*/
bool
D_PAD
::
HitTest
(
const
wxPoint
&
ref_pos
)
{
int
deltaX
,
deltaY
;
int
dx
,
dy
;
double
dist
;
wxPoint
shape_pos
=
ReturnShapePos
();
deltaX
=
ref_pos
.
x
-
shape_pos
.
x
;
deltaY
=
ref_pos
.
y
-
shape_pos
.
y
;
/* Test rapide: le point a tester doit etre a l'interieur du cercle exinscrit ... */
if
(
(
abs
(
deltaX
)
>
m_Rayon
)
||
(
abs
(
deltaY
)
>
m_Rayon
)
)
return
false
;
/* calcul des demi dim dx et dy */
dx
=
m_Size
.
x
>>
1
;
// dx also is the radius for rounded pads
dy
=
m_Size
.
y
>>
1
;
/* localisation ? */
switch
(
m_PadShape
&
0x7F
)
{
case
CIRCLE
:
dist
=
hypot
(
deltaX
,
deltaY
);
if
(
(
int
)
(
round
(
dist
)
)
<=
dx
)
return
true
;
break
;
default
:
/* calcul des coord du point test dans le repere du Pad */
RotatePoint
(
&
deltaX
,
&
deltaY
,
-
m_Orient
);
if
(
(
abs
(
deltaX
)
<=
dx
)
&&
(
abs
(
deltaY
)
<=
dy
)
)
return
true
;
break
;
}
return
false
;
}
#if defined(DEBUG)
#if defined(DEBUG)
/**
/**
* Function Show
* Function Show
...
...
pcbnew/class_pad.h
View file @
6719900e
...
@@ -29,11 +29,11 @@ public:
...
@@ -29,11 +29,11 @@ public:
char
m_Padname
[
4
];
/* nom (numero) de la pastille (assimilable a un long)*/
char
m_Padname
[
4
];
/* nom (numero) de la pastille (assimilable a un long)*/
};
};
wxString
m_Netname
;
/* Net Name */
wxString
m_Netname
;
/* Net Name */
int
m_Masque_Layer
;
// (Bit a Bit :1= cuivre, 15= cmp,
int
m_Masque_Layer
;
// (Bit a Bit :1= cuivre, 15= cmp,
// 2..14 = interne
// 2..14 = interne
// 16 .. 31 = couches non cuivre
// 16 .. 31 = couches non cuivre
int
m_PadShape
;
// forme CERCLE, RECT, OVALE, TRAPEZE ou libre
int
m_PadShape
;
// forme CERCLE, RECT, OVALE, TRAPEZE ou libre
int
m_DrillShape
;
// forme CERCLE, OVAL
int
m_DrillShape
;
// forme CERCLE, OVAL
...
@@ -91,7 +91,15 @@ public:
...
@@ -91,7 +91,15 @@ public:
// de la forme (pastilles excentrees)
// de la forme (pastilles excentrees)
void
Display_Infos
(
WinEDA_BasePcbFrame
*
frame
);
void
Display_Infos
(
WinEDA_BasePcbFrame
*
frame
);
/**
* Function HitTest
* tests if the given wxPoint is within the bounds of this object.
* @param refPos A wxPoint to test
* @return bool - true if a hit, else false
*/
bool
HitTest
(
const
wxPoint
&
refPos
);
#if defined(DEBUG)
#if defined(DEBUG)
/**
/**
* Function GetClass
* Function GetClass
...
...
pcbnew/class_pcb_text.cpp
View file @
6719900e
...
@@ -162,11 +162,10 @@ void TEXTE_PCB::Draw( WinEDA_DrawPanel* panel, wxDC* DC,
...
@@ -162,11 +162,10 @@ void TEXTE_PCB::Draw( WinEDA_DrawPanel* panel, wxDC* DC,
void
TEXTE_PCB
::
Show
(
int
nestLevel
,
std
::
ostream
&
os
)
void
TEXTE_PCB
::
Show
(
int
nestLevel
,
std
::
ostream
&
os
)
{
{
// for now, make it look like XML:
// for now, make it look like XML:
NestedSpace
(
nestLevel
,
os
)
<<
'<'
<<
GetClass
().
Lower
().
mb_str
()
<<
">
\n
"
;
NestedSpace
(
nestLevel
,
os
)
<<
'<'
<<
GetClass
().
Lower
().
mb_str
()
<<
" string=
\"
"
<<
m_Text
.
mb_str
()
<<
"
\"
/>
\n
"
;
NestedSpace
(
nestLevel
+
1
,
os
)
<<
m_Text
.
mb_str
()
<<
'\n'
;
NestedSpace
(
nestLevel
,
os
)
<<
"</"
<<
GetClass
().
Lower
().
mb_str
()
<<
">
\n
"
;
//
NestedSpace( nestLevel, os ) << "</" << GetClass().Lower().mb_str() << ">\n";
}
}
#endif
#endif
pcbnew/class_text_mod.cpp
View file @
6719900e
...
@@ -305,12 +305,10 @@ int TEXTE_MODULE::GetDrawRotation( void )
...
@@ -305,12 +305,10 @@ int TEXTE_MODULE::GetDrawRotation( void )
*/
*/
void
TEXTE_MODULE
::
Show
(
int
nestLevel
,
std
::
ostream
&
os
)
void
TEXTE_MODULE
::
Show
(
int
nestLevel
,
std
::
ostream
&
os
)
{
{
// for now, make it look like XML, expand on this later.
// for now, make it look like XML:
NestedSpace
(
nestLevel
,
os
)
<<
'<'
<<
GetClass
().
Lower
().
mb_str
()
<<
" string=
\"
"
<<
m_Text
.
mb_str
()
<<
"
\"
/>
\n
"
;
NestedSpace
(
nestLevel
,
os
)
<<
'<'
<<
GetClass
().
Lower
().
mb_str
()
<<
">
\n
"
;
// NestedSpace( nestLevel, os ) << "</" << GetClass().Lower().mb_str() << ">\n";
NestedSpace
(
nestLevel
+
1
,
os
)
<<
m_Text
.
mb_str
()
<<
'\n'
;
NestedSpace
(
nestLevel
,
os
)
<<
"</"
<<
GetClass
().
Lower
().
mb_str
()
<<
">
\n
"
;
}
}
#endif
#endif
pcbnew/edit.cpp
View file @
6719900e
...
@@ -125,7 +125,14 @@ void WinEDA_PcbFrame::OnLeftClick( wxDC* DC, const wxPoint& MousePos )
...
@@ -125,7 +125,14 @@ void WinEDA_PcbFrame::OnLeftClick( wxDC* DC, const wxPoint& MousePos )
break
;
break
;
case
ID_PCB_SHOW_1_RATSNEST_BUTT
:
case
ID_PCB_SHOW_1_RATSNEST_BUTT
:
#if defined(DEBUG)
DrawStruct
=
m_Pcb
->
FindPadOrModule
(
GetScreen
()
->
RefPos
(
true
),
GetScreen
()
->
m_Active_Layer
,
VISIBLE_ONLY
);
#else
DrawStruct
=
PcbGeneralLocateAndDisplay
();
DrawStruct
=
PcbGeneralLocateAndDisplay
();
#endif
Show_1_Ratsnest
(
DrawStruct
,
DC
);
Show_1_Ratsnest
(
DrawStruct
,
DC
);
break
;
break
;
...
@@ -454,11 +461,12 @@ void WinEDA_PcbFrame::Process_Special_Functions( wxCommandEvent& event )
...
@@ -454,11 +461,12 @@ void WinEDA_PcbFrame::Process_Special_Functions( wxCommandEvent& event )
case
ID_OPEN_MODULE_EDITOR
:
case
ID_OPEN_MODULE_EDITOR
:
if
(
m_Parent
->
m_ModuleEditFrame
==
NULL
)
if
(
m_Parent
->
m_ModuleEditFrame
==
NULL
)
{
{
m_Parent
->
m_ModuleEditFrame
=
new
WinEDA_ModuleEditFrame
(
this
,
m_Parent
->
m_ModuleEditFrame
=
m_Parent
,
_
(
"Module Editor"
),
new
WinEDA_ModuleEditFrame
(
this
,
wxPoint
(
-
1
,
m_Parent
,
_
(
"Module Editor"
),
-
1
),
wxPoint
(
-
1
,
wxSize
(
600
,
400
)
);
-
1
),
wxSize
(
600
,
400
)
);
m_Parent
->
m_ModuleEditFrame
->
Show
(
TRUE
);
m_Parent
->
m_ModuleEditFrame
->
Show
(
TRUE
);
m_Parent
->
m_ModuleEditFrame
->
Zoom_Automatique
(
TRUE
);
m_Parent
->
m_ModuleEditFrame
->
Zoom_Automatique
(
TRUE
);
}
}
...
@@ -601,8 +609,7 @@ void WinEDA_PcbFrame::Process_Special_Functions( wxCommandEvent& event )
...
@@ -601,8 +609,7 @@ void WinEDA_PcbFrame::Process_Special_Functions( wxCommandEvent& event )
case
ID_POPUP_END_LINE
:
case
ID_POPUP_END_LINE
:
DrawPanel
->
MouseToCursorSchema
();
DrawPanel
->
MouseToCursorSchema
();
// EndSegment(&dc);
// EndSegment(&dc);
break
;
break
;
case
ID_POPUP_PCB_EDIT_TRACK
:
case
ID_POPUP_PCB_EDIT_TRACK
:
...
...
pcbnew/editrack-part2.cpp
View file @
6719900e
...
@@ -341,7 +341,8 @@ void WinEDA_PcbFrame::Show_1_Ratsnest( EDA_BaseStruct* item, wxDC* DC )
...
@@ -341,7 +341,8 @@ void WinEDA_PcbFrame::Show_1_Ratsnest( EDA_BaseStruct* item, wxDC* DC )
{
{
if
(
item
->
m_StructType
==
TYPETEXTEMODULE
)
if
(
item
->
m_StructType
==
TYPETEXTEMODULE
)
{
{
Module
=
(
MODULE
*
)
item
->
m_Parent
;
if
(
item
->
m_Parent
&&
(
item
->
m_Parent
->
m_StructType
==
TYPEMODULE
)
)
Module
=
(
MODULE
*
)
item
->
m_Parent
;
}
}
else
if
(
item
->
m_StructType
==
TYPEMODULE
)
else
if
(
item
->
m_StructType
==
TYPEMODULE
)
...
...
pcbnew/locate.cpp
View file @
6719900e
...
@@ -32,30 +32,7 @@ EDA_BaseStruct* Locate_MirePcb( EDA_BaseStruct* PtStruct, int LayerSearch, int t
...
@@ -32,30 +32,7 @@ EDA_BaseStruct* Locate_MirePcb( EDA_BaseStruct* PtStruct, int LayerSearch, int t
*/
*/
wxPoint
inline
RefPos
(
int
typeloc
)
wxPoint
inline
RefPos
(
int
typeloc
)
{
{
if
(
typeloc
&
CURSEUR_OFF_GRILLE
)
return
ActiveScreen
->
RefPos
(
(
typeloc
&
CURSEUR_OFF_GRILLE
)
!=
0
);
return
ActiveScreen
->
m_MousePosition
;
else
return
ActiveScreen
->
m_Curseur
;
}
/**
* Function IsModuleLayerVisible
* expects either of the two layers on which a module can reside, and returns
* whether that layer is visible.
* @param layer One of the two allowed layers for modules: CMP_N or CUIVRE_N
* @return bool - true if the layer is visible, else false.
*/
bool
inline
IsModuleLayerVisible
(
int
layer
)
{
if
(
layer
==
CMP_N
)
return
DisplayOpt
.
Show_Modules_Cmp
;
else
if
(
layer
==
CUIVRE_N
)
return
DisplayOpt
.
Show_Modules_Cu
;
else
return
true
;
}
}
...
@@ -344,6 +321,7 @@ EDGE_MODULE* Locate_Edge_Module( MODULE* module, int typeloc )
...
@@ -344,6 +321,7 @@ EDGE_MODULE* Locate_Edge_Module( MODULE* module, int typeloc )
{
{
if
(
PtStruct
->
m_StructType
!=
TYPEEDGEMODULE
)
if
(
PtStruct
->
m_StructType
!=
TYPEEDGEMODULE
)
continue
;
continue
;
edge_mod
=
(
EDGE_MODULE
*
)
PtStruct
;
edge_mod
=
(
EDGE_MODULE
*
)
PtStruct
;
type_trace
=
edge_mod
->
m_Shape
;
type_trace
=
edge_mod
->
m_Shape
;
ux0
=
edge_mod
->
m_Start
.
x
;
uy0
=
edge_mod
->
m_Start
.
y
;
ux0
=
edge_mod
->
m_Start
.
x
;
uy0
=
edge_mod
->
m_Start
.
y
;
...
@@ -418,6 +396,7 @@ EDA_BaseStruct* Locate_Cotation( BOARD* Pcb, int LayerSearch, int typeloc )
...
@@ -418,6 +396,7 @@ EDA_BaseStruct* Locate_Cotation( BOARD* Pcb, int LayerSearch, int typeloc )
{
{
if
(
PtStruct
->
m_StructType
!=
TYPECOTATION
)
if
(
PtStruct
->
m_StructType
!=
TYPECOTATION
)
continue
;
continue
;
Cotation
=
(
COTATION
*
)
PtStruct
;
Cotation
=
(
COTATION
*
)
PtStruct
;
if
(
(
Cotation
->
m_Layer
!=
LayerSearch
)
&&
(
LayerSearch
!=
-
1
)
)
if
(
(
Cotation
->
m_Layer
!=
LayerSearch
)
&&
(
LayerSearch
!=
-
1
)
)
continue
;
continue
;
...
@@ -426,7 +405,10 @@ EDA_BaseStruct* Locate_Cotation( BOARD* Pcb, int LayerSearch, int typeloc )
...
@@ -426,7 +405,10 @@ EDA_BaseStruct* Locate_Cotation( BOARD* Pcb, int LayerSearch, int typeloc )
pt_txt
=
Cotation
->
m_Text
;
pt_txt
=
Cotation
->
m_Text
;
if
(
pt_txt
)
if
(
pt_txt
)
{
{
if
(
pt_txt
->
HitTest
(
ref_pos
)
)
// because HitTest() is present in both base classes of TEXTE_PCB
// use a dis-ambiguating cast to tell compiler which HitTest()
// to call.
if
(
static_cast
<
EDA_TextStruct
*>
(
pt_txt
)
->
HitTest
(
ref_pos
)
)
return
PtStruct
;
return
PtStruct
;
}
}
...
@@ -666,52 +648,23 @@ D_PAD* Locate_Pads( MODULE* module, int masque_layer, int typeloc )
...
@@ -666,52 +648,23 @@ D_PAD* Locate_Pads( MODULE* module, int masque_layer, int typeloc )
D_PAD
*
Locate_Pads
(
MODULE
*
module
,
const
wxPoint
&
ref_pos
,
int
masque_layer
)
D_PAD
*
Locate_Pads
(
MODULE
*
module
,
const
wxPoint
&
ref_pos
,
int
masque_layer
)
{
{
D_PAD
*
pt_pad
;
D_PAD
*
pt_pad
=
module
->
m_Pads
;
int
deltaX
,
deltaY
;
wxPoint
shape_pos
;
double
dist
;
pt_pad
=
module
->
m_Pads
;
for
(
;
pt_pad
!=
NULL
;
pt_pad
=
(
D_PAD
*
)
pt_pad
->
Pnext
)
for
(
;
pt_pad
!=
NULL
;
pt_pad
=
(
D_PAD
*
)
pt_pad
->
Pnext
)
{
{
shape_pos
=
pt_pad
->
ReturnShapePos
();
/*
wxPoint shape_pos = ReturnShapePos();
why the global ux0?
ux0 = shape_pos.x;
ux0 = shape_pos.x;
uy0
=
shape_pos
.
y
;
/* pos x,y du centre du pad */
uy0 = shape_pos.y; // pos x,y du centre du pad
*/
deltaX
=
ref_pos
.
x
-
ux0
;
deltaY
=
ref_pos
.
y
-
uy0
;
/* Test rapide: le point a tester doit etre a l'interieur du cercle
* exinscrit ... */
if
(
(
abs
(
deltaX
)
>
pt_pad
->
m_Rayon
)
||
(
abs
(
deltaY
)
>
pt_pad
->
m_Rayon
)
)
continue
;
/* ... et sur la bonne couche */
/* ... et sur la bonne couche */
if
(
(
pt_pad
->
m_Masque_Layer
&
masque_layer
)
==
0
)
if
(
(
pt_pad
->
m_Masque_Layer
&
masque_layer
)
==
0
)
continue
;
continue
;
/* calcul des demi dim dx et dy */
if
(
pt_pad
->
HitTest
(
ref_pos
)
)
dx
=
pt_pad
->
m_Size
.
x
>>
1
;
// dx also is the radius for rounded pads
return
pt_pad
;
dy
=
pt_pad
->
m_Size
.
y
>>
1
;
/* localisation ? */
switch
(
pt_pad
->
m_PadShape
&
0x7F
)
{
case
CIRCLE
:
dist
=
hypot
(
deltaX
,
deltaY
);
if
(
(
int
)
(
round
(
dist
)
)
<=
dx
)
return
pt_pad
;
break
;
default
:
/* calcul des coord du point test dans le repere du Pad */
RotatePoint
(
&
deltaX
,
&
deltaY
,
-
pt_pad
->
m_Orient
);
if
(
(
abs
(
deltaX
)
<=
dx
)
&&
(
abs
(
deltaY
)
<=
dy
)
)
return
pt_pad
;
break
;
}
}
}
return
NULL
;
return
NULL
;
...
@@ -743,17 +696,8 @@ MODULE* Locate_Prefered_Module( BOARD* Pcb, int typeloc )
...
@@ -743,17 +696,8 @@ MODULE* Locate_Prefered_Module( BOARD* Pcb, int typeloc )
pt_module
=
Pcb
->
m_Modules
;
pt_module
=
Pcb
->
m_Modules
;
for
(
;
pt_module
;
pt_module
=
(
MODULE
*
)
pt_module
->
Pnext
)
for
(
;
pt_module
;
pt_module
=
(
MODULE
*
)
pt_module
->
Pnext
)
{
{
/* calcul des dimensions du cadre :*/
// is the ref point within the module's bounds?
lx
=
pt_module
->
m_BoundaryBox
.
GetWidth
();
if
(
!
pt_module
->
HitTest
(
ref_pos
)
)
ly
=
pt_module
->
m_BoundaryBox
.
GetHeight
();
/* Calcul des coord souris dans le repere module */
spot_cX
=
ref_pos
.
x
-
pt_module
->
m_Pos
.
x
;
spot_cY
=
ref_pos
.
y
-
pt_module
->
m_Pos
.
y
;
RotatePoint
(
&
spot_cX
,
&
spot_cY
,
-
pt_module
->
m_Orient
);
/* la souris est-elle dans ce rectangle : */
if
(
!
pt_module
->
m_BoundaryBox
.
Inside
(
spot_cX
,
spot_cY
)
)
continue
;
continue
;
// if caller wants to ignore locked modules, and this one is locked, skip it.
// if caller wants to ignore locked modules, and this one is locked, skip it.
...
@@ -773,13 +717,18 @@ MODULE* Locate_Prefered_Module( BOARD* Pcb, int typeloc )
...
@@ -773,13 +717,18 @@ MODULE* Locate_Prefered_Module( BOARD* Pcb, int typeloc )
else
if
(
layer
==
ADHESIVE_N_CMP
||
layer
==
SILKSCREEN_N_CMP
)
else
if
(
layer
==
ADHESIVE_N_CMP
||
layer
==
SILKSCREEN_N_CMP
)
layer
=
CMP_N
;
layer
=
CMP_N
;
/* calcul des dimensions du cadre :*/
lx
=
pt_module
->
m_BoundaryBox
.
GetWidth
();
ly
=
pt_module
->
m_BoundaryBox
.
GetHeight
();
if
(
(
(
PCB_SCREEN
*
)
ActiveScreen
)
->
m_Active_Layer
==
layer
)
if
(
(
(
PCB_SCREEN
*
)
ActiveScreen
)
->
m_Active_Layer
==
layer
)
{
{
if
(
min
(
lx
,
ly
)
<=
min_dim
)
if
(
min
(
lx
,
ly
)
<=
min_dim
)
{
{
/* meilleure empreinte localisee sur couche active */
/* meilleure empreinte localisee sur couche active */
module
=
pt_module
;
min_dim
=
min
(
lx
,
ly
);
module
=
pt_module
;
min_dim
=
min
(
lx
,
ly
);
}
}
}
}
else
if
(
!
(
typeloc
&
MATCH_LAYER
)
else
if
(
!
(
typeloc
&
MATCH_LAYER
)
...
@@ -1155,11 +1104,18 @@ TEXTE_PCB* Locate_Texte_Pcb( EDA_BaseStruct* PtStruct, int LayerSearch, int type
...
@@ -1155,11 +1104,18 @@ TEXTE_PCB* Locate_Texte_Pcb( EDA_BaseStruct* PtStruct, int LayerSearch, int type
{
{
if
(
PtStruct
->
m_StructType
!=
TYPETEXTE
)
if
(
PtStruct
->
m_StructType
!=
TYPETEXTE
)
continue
;
continue
;
TEXTE_PCB
*
pt_txt_pcb
=
(
TEXTE_PCB
*
)
PtStruct
;
TEXTE_PCB
*
pt_txt_pcb
=
(
TEXTE_PCB
*
)
PtStruct
;
if
(
pt_txt_pcb
->
HitTest
(
ref
)
)
if
(
pt_txt_pcb
->
m_Layer
==
LayerSearch
)
{
{
if
(
pt_txt_pcb
->
m_Layer
==
LayerSearch
)
// because HitTest() is present in both base classes of TEXTE_PCB
// use a dis-ambiguating cast to tell compiler which HitTest()
// to call.
if
(
static_cast
<
EDA_TextStruct
*>
(
pt_txt_pcb
)
->
HitTest
(
ref
)
)
{
return
pt_txt_pcb
;
return
pt_txt_pcb
;
}
}
}
}
}
...
...
pcbnew/muonde.cpp
View file @
6719900e
This diff is collapsed.
Click to expand it.
pcbnew/pcbnew.h
View file @
6719900e
...
@@ -14,7 +14,7 @@
...
@@ -14,7 +14,7 @@
#define U_PCB (PCB_INTERNAL_UNIT / EESCHEMA_INTERNAL_UNIT)
#define U_PCB (PCB_INTERNAL_UNIT / EESCHEMA_INTERNAL_UNIT)
/* valeur de flag indicant si le pointeur de reference pour une localisation
/* valeur de flag indicant si le pointeur de reference pour une localisation
*
est le curseur sur grille ou le curseur a deplacement fin hors grille */
* est le curseur sur grille ou le curseur a deplacement fin hors grille */
#define CURSEUR_ON_GRILLE (0 << 0)
#define CURSEUR_ON_GRILLE (0 << 0)
#define CURSEUR_OFF_GRILLE (1 << 0)
#define CURSEUR_OFF_GRILLE (1 << 0)
...
@@ -57,7 +57,7 @@
...
@@ -57,7 +57,7 @@
eda_global
wxArrayString
g_LibName_List
;
// library list to load
eda_global
wxArrayString
g_LibName_List
;
// library list to load
eda_global
wxSize
g_GridList
[]
eda_global
wxSize
g_GridList
[]
#ifdef MAIN
#ifdef MAIN
=
{
=
{
wxSize
(
1000
,
1000
),
wxSize
(
500
,
500
),
wxSize
(
250
,
250
),
wxSize
(
200
,
200
),
wxSize
(
1000
,
1000
),
wxSize
(
500
,
500
),
wxSize
(
250
,
250
),
wxSize
(
200
,
200
),
...
@@ -71,7 +71,7 @@ eda_global wxSize g_GridList[]
...
@@ -71,7 +71,7 @@ eda_global wxSize g_GridList[]
;
;
#define UNDELETE_STACK_SIZE 10
#define UNDELETE_STACK_SIZE 10
eda_global
EDA_BaseStruct
*
g_UnDeleteStack
[
UNDELETE_STACK_SIZE
];
//Liste des elements supprimes
eda_global
EDA_BaseStruct
*
g_UnDeleteStack
[
UNDELETE_STACK_SIZE
];
//
Liste des elements supprimes
eda_global
int
g_UnDeleteStackPtr
;
eda_global
int
g_UnDeleteStackPtr
;
eda_global
bool
g_ShowGrid
eda_global
bool
g_ShowGrid
...
@@ -146,6 +146,26 @@ eda_global bool g_ShowIsolDuringCreateTrack; /* .State controle l'affichage
...
@@ -146,6 +146,26 @@ eda_global bool g_ShowIsolDuringCreateTrack; /* .State controle l'affichage
eda_global
DISPLAY_OPTIONS
DisplayOpt
;
eda_global
DISPLAY_OPTIONS
DisplayOpt
;
/**
* Function IsModuleLayerVisible
* expects either of the two layers on which a module can reside, and returns
* whether that layer is visible.
* @param layer One of the two allowed layers for modules: CMP_N or CUIVRE_N
* @return bool - true if the layer is visible, else false.
*/
bool
inline
IsModuleLayerVisible
(
int
layer
)
{
if
(
layer
==
CMP_N
)
return
DisplayOpt
.
Show_Modules_Cmp
;
else
if
(
layer
==
CUIVRE_N
)
return
DisplayOpt
.
Show_Modules_Cu
;
else
return
true
;
}
eda_global
bool
Track_45_Only
;
/* Flag pour limiter l'inclinaison
eda_global
bool
Track_45_Only
;
/* Flag pour limiter l'inclinaison
* pistes a 45 degres seulement */
* pistes a 45 degres seulement */
eda_global
bool
Segments_45_Only
;
/* Flag pour limiter l'inclinaison
eda_global
bool
Segments_45_Only
;
/* Flag pour limiter l'inclinaison
...
...
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