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
f3c324d5
Commit
f3c324d5
authored
Aug 24, 2007
by
dickelbeck
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
EDA_BaseStruct::m_StructType is now type KICAD_T
parent
908f6d93
Changes
32
Show whitespace changes
Inline
Side-by-side
Showing
32 changed files
with
4866 additions
and
4314 deletions
+4866
-4314
3d_class.cpp
3d-viewer/3d_class.cpp
+4
-4
change_log.txt
change_log.txt
+12
-3
base_struct.cpp
common/base_struct.cpp
+5
-15
affiche.cpp
eeschema/affiche.cpp
+139
-100
block.cpp
eeschema/block.cpp
+3
-0
block_libedit.cpp
eeschema/block_libedit.cpp
+6
-0
cmpclass.cpp
eeschema/cmpclass.cpp
+1
-1
component_class.cpp
eeschema/component_class.cpp
+1
-1
component_class.h
eeschema/component_class.h
+1
-1
dangling_ends.cpp
eeschema/dangling_ends.cpp
+399
-348
eelibs_draw_components.cpp
eeschema/eelibs_draw_components.cpp
+961
-867
eelibs_read_libraryfiles.cpp
eeschema/eelibs_read_libraryfiles.cpp
+1129
-998
hotkeys.cpp
eeschema/hotkeys.cpp
+2
-0
libclass.cpp
eeschema/libclass.cpp
+575
-490
libcmp.h
eeschema/libcmp.h
+258
-248
libframe.cpp
eeschema/libframe.cpp
+1
-0
locate.cpp
eeschema/locate.cpp
+3
-0
plot.cpp
eeschema/plot.cpp
+3
-0
program.h
eeschema/program.h
+134
-105
symbdraw.cpp
eeschema/symbdraw.cpp
+740
-691
symbedit.cpp
eeschema/symbedit.cpp
+458
-410
base_struct.h
include/base_struct.h
+9
-24
pcbstruct.h
include/pcbstruct.h
+1
-1
wxstruct.h
include/wxstruct.h
+1
-1
block_module_editor.cpp
pcbnew/block_module_editor.cpp
+9
-0
class_edge_mod.cpp
pcbnew/class_edge_mod.cpp
+1
-0
class_track.cpp
pcbnew/class_track.cpp
+2
-1
class_track.h
pcbnew/class_track.h
+1
-1
classpcb.cpp
pcbnew/classpcb.cpp
+2
-2
classtrc.cpp
pcbnew/classtrc.cpp
+1
-1
dialog_track_options.cpp
pcbnew/dialog_track_options.cpp
+1
-1
ratsnest.cpp
pcbnew/ratsnest.cpp
+3
-0
No files found.
3d-viewer/3d_class.cpp
View file @
f3c324d5
...
@@ -25,8 +25,8 @@ S3D_Vertex::S3D_Vertex(void)
...
@@ -25,8 +25,8 @@ S3D_Vertex::S3D_Vertex(void)
/**************************************************************************/
/**************************************************************************/
S3D_Material
::
S3D_Material
(
Struct3D_Master
*
father
,
const
wxString
&
name
)
:
S3D_Material
::
S3D_Material
(
Struct3D_Master
*
father
,
const
wxString
&
name
)
:
EDA_BaseStruct
(
father
,
-
1
)
EDA_BaseStruct
(
father
,
NOT_USED
)
/**************************************************************************/
/**************************************************************************/
{
{
m_DiffuseColor
.
x
=
m_DiffuseColor
.
y
=
m_DiffuseColor
.
z
=
1.0
;
m_DiffuseColor
.
x
=
m_DiffuseColor
.
y
=
m_DiffuseColor
.
z
=
1.0
;
...
@@ -67,7 +67,7 @@ void Struct3D_Master::Copy(Struct3D_Master * pattern)
...
@@ -67,7 +67,7 @@ void Struct3D_Master::Copy(Struct3D_Master * pattern)
/***************************************************************/
/***************************************************************/
Struct3D_Master
::
Struct3D_Master
(
EDA_BaseStruct
*
StructFather
)
:
Struct3D_Master
::
Struct3D_Master
(
EDA_BaseStruct
*
StructFather
)
:
EDA_BaseStruct
(
StructFather
,
-
1
)
EDA_BaseStruct
(
StructFather
,
NOT_USED
)
/***************************************************************/
/***************************************************************/
{
{
m_MatScale
.
x
=
m_MatScale
.
y
=
m_MatScale
.
z
=
1.0
;
m_MatScale
.
x
=
m_MatScale
.
y
=
m_MatScale
.
z
=
1.0
;
...
@@ -100,7 +100,7 @@ S3D_Material * nextmat;
...
@@ -100,7 +100,7 @@ S3D_Material * nextmat;
/***************************************************************/
/***************************************************************/
Struct3D_Shape
::
Struct3D_Shape
(
EDA_BaseStruct
*
StructFather
)
:
Struct3D_Shape
::
Struct3D_Shape
(
EDA_BaseStruct
*
StructFather
)
:
EDA_BaseStruct
(
StructFather
,
-
1
)
EDA_BaseStruct
(
StructFather
,
NOT_USED
)
/***************************************************************/
/***************************************************************/
{
{
m_3D_Coord
=
NULL
;
m_3D_Coord
=
NULL
;
...
...
change_log.txt
View file @
f3c324d5
...
@@ -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-23 UPDATE Dick Hollenbeck <dick@softplc.com>
================================================================================
+ eeschema & pcbnew
* Removed class EDA_BaseLineStruct, which brought no behavioral advantage, only data.
Classes which were based on got its data members added and their initializers.
* Changed type of EDA_BaseStruct::m_StructType from int to KICAD_T which is an
enum. This makes debugging easier since gdb will show the name of the
KICAD_T rather than simply a number. Added NOT_USED = -1 to KICAD_T enum for
3d which was using -1.
* More beautification using latest uncrustify and the committed uncrustify.cfg
2007-Aug-24 UPDATE Geoff Harland <gharlandau@yahoo.com.au>
2007-Aug-24 UPDATE Geoff Harland <gharlandau@yahoo.com.au>
================================================================================
================================================================================
+ pcbnew
+ pcbnew
...
@@ -27,9 +39,6 @@ email address.
...
@@ -27,9 +39,6 @@ email address.
tomorrow I will add a new class COLLECTORS_GUIDE which can be used by a
tomorrow I will add a new class COLLECTORS_GUIDE which can be used by a
COLLECTOR to control its operation. It adds the concept of layer
COLLECTOR to control its operation. It adds the concept of layer
locking, even though PCBNEW does not support that in the UI yet.
locking, even though PCBNEW does not support that in the UI yet.
@todo:
add constructor initializers for classes that were derived from
EDA_BaseLineStruct but are now not. Its late, will do tomorrow.
2007-Aug-22 UPDATE Dick Hollenbeck <dick@softplc.com>
2007-Aug-22 UPDATE Dick Hollenbeck <dick@softplc.com>
...
...
common/base_struct.cpp
View file @
f3c324d5
...
@@ -17,8 +17,8 @@
...
@@ -17,8 +17,8 @@
#include "macros.h"
#include "macros.h"
//
DrawStructureType
names for error messages only:
//
KICAD_T
names for error messages only:
static
wxString
DrawStructureType
Name
[
MAX_STRUCT_TYPE_ID
+
1
]
=
{
static
wxString
KICAD_T
Name
[
MAX_STRUCT_TYPE_ID
+
1
]
=
{
wxT
(
"Not init"
),
wxT
(
"Not init"
),
wxT
(
"Pcb"
),
wxT
(
"Pcb"
),
...
@@ -74,7 +74,7 @@ enum textbox {
...
@@ -74,7 +74,7 @@ enum textbox {
/******************************************************************************/
/******************************************************************************/
EDA_BaseStruct
::
EDA_BaseStruct
(
EDA_BaseStruct
*
parent
,
int
idType
)
EDA_BaseStruct
::
EDA_BaseStruct
(
EDA_BaseStruct
*
parent
,
KICAD_T
idType
)
/******************************************************************************/
/******************************************************************************/
{
{
InitVars
();
InitVars
();
...
@@ -84,7 +84,7 @@ EDA_BaseStruct::EDA_BaseStruct( EDA_BaseStruct* parent, int idType )
...
@@ -84,7 +84,7 @@ EDA_BaseStruct::EDA_BaseStruct( EDA_BaseStruct* parent, int idType )
/********************************************/
/********************************************/
EDA_BaseStruct
::
EDA_BaseStruct
(
int
idType
)
EDA_BaseStruct
::
EDA_BaseStruct
(
KICAD_T
idType
)
/********************************************/
/********************************************/
{
{
InitVars
();
InitVars
();
...
@@ -183,7 +183,7 @@ wxString EDA_BaseStruct::ReturnClassName() const
...
@@ -183,7 +183,7 @@ wxString EDA_BaseStruct::ReturnClassName() const
if
(
(
ii
<
0
)
||
(
ii
>
MAX_STRUCT_TYPE_ID
)
)
if
(
(
ii
<
0
)
||
(
ii
>
MAX_STRUCT_TYPE_ID
)
)
ii
=
MAX_STRUCT_TYPE_ID
;
ii
=
MAX_STRUCT_TYPE_ID
;
classname
=
DrawStructureType
Name
[
ii
];
classname
=
KICAD_T
Name
[
ii
];
return
classname
;
return
classname
;
}
}
...
@@ -287,16 +287,6 @@ std::ostream& EDA_BaseStruct::NestedSpace( int nestLevel, std::ostream& os )
...
@@ -287,16 +287,6 @@ std::ostream& EDA_BaseStruct::NestedSpace( int nestLevel, std::ostream& os )
/**********************************************************************************************/
EDA_BaseLineStruct
::
EDA_BaseLineStruct
(
EDA_BaseStruct
*
StructFather
,
DrawStructureType
idtype
)
:
EDA_BaseStruct
(
StructFather
,
idtype
)
/**********************************************************************************************/
{
m_Layer
=
0
;
m_Width
=
0
;
// 0 = line, > 0 = tracks, bus ...
};
/*********************************************************/
/*********************************************************/
/* EDA_TextStruct (classe de base, non utilis� seule */
/* EDA_TextStruct (classe de base, non utilis� seule */
/*********************************************************/
/*********************************************************/
...
...
eeschema/affiche.cpp
View file @
f3c324d5
/**********************************************************/
/**********************************************************/
/* Routines d'affichage de parametres et caracteristiques */
/* Routines d'affichage de parametres et caracteristiques */
/**********************************************************/
/**********************************************************/
/* Fichier AFFICHE.CPP */
/* Fichier AFFICHE.CPP */
#include "fctsys.h"
#include "fctsys.h"
#include "gr_basic.h"
#include "gr_basic.h"
...
@@ -15,136 +15,175 @@
...
@@ -15,136 +15,175 @@
/***********************************************************/
/***********************************************************/
void
DrawSheetStruct
::
Display_Infos
(
WinEDA_DrawFrame
*
frame
)
void
DrawSheetStruct
::
Display_Infos
(
WinEDA_DrawFrame
*
frame
)
/************************************************************/
/************************************************************/
{
{
frame
->
MsgPanel
->
EraseMsgBox
();
frame
->
MsgPanel
->
EraseMsgBox
();
Affiche_1_Parametre
(
frame
,
1
,
_
(
"Name"
),
m_SheetName
,
CYAN
);
Affiche_1_Parametre
(
frame
,
1
,
_
(
"Name"
),
m_SheetName
,
CYAN
);
Affiche_1_Parametre
(
frame
,
30
,
_
(
"FileName"
),
m_FileName
,
BROWN
);
Affiche_1_Parametre
(
frame
,
30
,
_
(
"FileName"
),
m_FileName
,
BROWN
);
}
}
/***************************************************************/
/***************************************************************/
void
EDA_SchComponentStruct
::
Display_Infos
(
WinEDA_DrawFrame
*
frame
)
void
EDA_SchComponentStruct
::
Display_Infos
(
WinEDA_DrawFrame
*
frame
)
/***************************************************************/
/***************************************************************/
{
{
EDA_LibComponentStruct
*
Entry
=
FindLibPart
(
m_ChipName
.
GetData
(),
wxEmptyString
,
FIND_ROOT
);;
EDA_LibComponentStruct
*
Entry
=
FindLibPart
(
m_ChipName
.
GetData
(),
wxEmptyString
,
FIND_ROOT
);;
wxString
msg
;
wxString
msg
;
frame
->
MsgPanel
->
EraseMsgBox
();
frame
->
MsgPanel
->
EraseMsgBox
();
Affiche_1_Parametre
(
frame
,
1
,
_
(
"Ref"
),
Affiche_1_Parametre
(
frame
,
1
,
_
(
"Ref"
),
m_Field
[
REFERENCE
].
m_Text
,
DARKCYAN
);
m_Field
[
REFERENCE
].
m_Text
,
DARKCYAN
);
if
(
Entry
&&
Entry
->
m_Options
==
ENTRY_POWER
)
if
(
Entry
&&
Entry
->
m_Options
==
ENTRY_POWER
)
msg
=
_
(
"Pwr Symb"
);
msg
=
_
(
"Pwr Symb"
);
else
msg
=
_
(
"Val"
);
else
Affiche_1_Parametre
(
frame
,
10
,
msg
,
m_Field
[
VALUE
].
m_Text
,
DARKCYAN
);
msg
=
_
(
"Val"
);
Affiche_1_Parametre
(
frame
,
10
,
msg
,
m_Field
[
VALUE
].
m_Text
,
DARKCYAN
);
Affiche_1_Parametre
(
frame
,
28
,
_
(
"RefLib"
),
m_ChipName
.
GetData
(),
BROWN
);
Affiche_1_Parametre
(
frame
,
28
,
_
(
"RefLib"
),
m_ChipName
.
GetData
(),
BROWN
);
msg
=
FindLibName
;
msg
=
FindLibName
;
Affiche_1_Parametre
(
frame
,
40
,
_
(
"Lib"
),
msg
,
DARKRED
);
Affiche_1_Parametre
(
frame
,
40
,
_
(
"Lib"
),
msg
,
DARKRED
);
if
(
Entry
)
if
(
Entry
)
{
{
Affiche_1_Parametre
(
frame
,
52
,
Entry
->
m_Doc
,
wxEmptyString
,
DARKCYAN
);
Affiche_1_Parametre
(
frame
,
52
,
Entry
->
m_Doc
,
wxEmptyString
,
DARKCYAN
);
Affiche_1_Parametre
(
frame
,
52
,
wxEmptyString
,
Entry
->
m_KeyWord
,
DARKGREEN
);
Affiche_1_Parametre
(
frame
,
52
,
wxEmptyString
,
Entry
->
m_KeyWord
,
DARKGREEN
);
}
}
}
}
/*******************************************************/
/*******************************************************/
void
LibDrawPin
::
Display_Infos
(
WinEDA_DrawFrame
*
frame
)
void
LibDrawPin
::
Display_Infos
(
WinEDA_DrawFrame
*
frame
)
/*******************************************************/
/*******************************************************/
/* Affiche en bas d'ecran les caracteristiques de la pin
/* Affiche en bas d'ecran les caracteristiques de la pin
*/
*/
{
{
wxString
Text
;
wxString
Text
;
int
ii
;
int
ii
;
frame
->
MsgPanel
->
EraseMsgBox
();
frame
->
MsgPanel
->
EraseMsgBox
();
/* Affichage du nom */
/* Affichage du nom */
Affiche_1_Parametre
(
frame
,
24
,
_
(
"PinName"
),
m_PinName
,
DARKCYAN
);
Affiche_1_Parametre
(
frame
,
24
,
_
(
"PinName"
),
m_PinName
,
DARKCYAN
);
/* Affichage du numero */
/* Affichage du numero */
if
(
m_PinNum
==
0
)
Text
=
wxT
(
"?"
);
if
(
m_PinNum
==
0
)
else
ReturnPinStringNum
(
Text
);
Text
=
wxT
(
"?"
);
else
ReturnPinStringNum
(
Text
);
Affiche_1_Parametre
(
frame
,
40
,
_
(
"PinNum"
),
Text
,
DARKCYAN
);
Affiche_1_Parametre
(
frame
,
40
,
_
(
"PinNum"
),
Text
,
DARKCYAN
);
/* Affichage du type */
/* Affichage du type */
ii
=
m_PinType
;
ii
=
m_PinType
;
Affiche_1_Parametre
(
frame
,
48
,
_
(
"PinType"
),
MsgPinElectricType
[
ii
],
RED
);
Affiche_1_Parametre
(
frame
,
48
,
_
(
"PinType"
),
MsgPinElectricType
[
ii
],
RED
);
/* Affichage de la visiblite */
/* Affichage de la visiblite */
ii
=
m_Attributs
;
ii
=
m_Attributs
;
if
(
ii
&
1
)
Text
=
_
(
"no"
);
if
(
ii
&
1
)
else
Text
=
_
(
"yes"
);
Text
=
_
(
"no"
);
Affiche_1_Parametre
(
frame
,
58
,
_
(
"Display"
),
Text
,
DARKGREEN
);
else
Text
=
_
(
"yes"
);
Affiche_1_Parametre
(
frame
,
58
,
_
(
"Display"
),
Text
,
DARKGREEN
);
/* Affichage de la longueur */
/* Affichage de la longueur */
Text
.
Printf
(
wxT
(
"%d"
),
m_PinLen
);
Text
.
Printf
(
wxT
(
"%d"
),
m_PinLen
);
Affiche_1_Parametre
(
frame
,
66
,
_
(
"Lengh"
),
Text
,
MAGENTA
);
Affiche_1_Parametre
(
frame
,
66
,
_
(
"Lengh"
),
Text
,
MAGENTA
);
/* Affichage de l'orientation */
/* Affichage de l'orientation */
switch
(
m_Orient
)
switch
(
m_Orient
)
{
{
case
PIN_UP
:
Text
=
_
(
"Up"
);
break
;
case
PIN_UP
:
case
PIN_DOWN
:
Text
=
_
(
"Down"
);
break
;
Text
=
_
(
"Up"
);
break
;
case
PIN_LEFT
:
Text
=
_
(
"Left"
);
break
;
case
PIN_RIGHT
:
Text
=
_
(
"Right"
);
break
;
case
PIN_DOWN
:
default
:
Text
=
wxT
(
"??"
);
break
;
Text
=
_
(
"Down"
);
break
;
case
PIN_LEFT
:
Text
=
_
(
"Left"
);
break
;
case
PIN_RIGHT
:
Text
=
_
(
"Right"
);
break
;
default
:
Text
=
wxT
(
"??"
);
break
;
}
}
Affiche_1_Parametre
(
frame
,
72
,
_
(
"Orient"
),
Text
,
MAGENTA
);
Affiche_1_Parametre
(
frame
,
72
,
_
(
"Orient"
),
Text
,
MAGENTA
);
}
}
/***********************************************************************/
/***********************************************************************/
void
LibEDA_BaseStruct
::
Display_Infos_DrawEntry
(
WinEDA_DrawFrame
*
frame
)
void
LibEDA_BaseStruct
::
Display_Infos_DrawEntry
(
WinEDA_DrawFrame
*
frame
)
/***********************************************************************/
/***********************************************************************/
/* Affiche en bas d'ecran les caracteristiques de l'element
/* Affiche en bas d'ecran les caracteristiques de l'element
*/
*/
{
{
wxString
msg
;
wxString
msg
;
frame
->
MsgPanel
->
EraseMsgBox
();
frame
->
MsgPanel
->
EraseMsgBox
();
/* affichage du type */
/* affichage du type */
msg
=
wxT
(
"??"
);
msg
=
wxT
(
"??"
);
switch
(
m_StructType
)
switch
(
m_StructType
)
{
{
case
COMPONENT_ARC_DRAW_TYPE
:
msg
=
wxT
(
"Arc"
);
break
;
case
COMPONENT_ARC_DRAW_TYPE
:
case
COMPONENT_CIRCLE_DRAW_TYPE
:
msg
=
wxT
(
"Circle"
);
break
;
msg
=
wxT
(
"Arc"
);
break
;
case
COMPONENT_GRAPHIC_TEXT_DRAW_TYPE
:
msg
=
wxT
(
"Text"
);
break
;
case
COMPONENT_RECT_DRAW_TYPE
:
msg
=
wxT
(
"Rect"
);
break
;
case
COMPONENT_CIRCLE_DRAW_TYPE
:
case
COMPONENT_POLYLINE_DRAW_TYPE
:
msg
=
wxT
(
"PolyLine"
);
break
;
msg
=
wxT
(
"Circle"
);
break
;
case
COMPONENT_LINE_DRAW_TYPE
:
msg
=
wxT
(
"Segment"
);
break
;
case
COMPONENT_GRAPHIC_TEXT_DRAW_TYPE
:
msg
=
wxT
(
"Text"
);
break
;
case
COMPONENT_RECT_DRAW_TYPE
:
msg
=
wxT
(
"Rect"
);
break
;
case
COMPONENT_POLYLINE_DRAW_TYPE
:
msg
=
wxT
(
"PolyLine"
);
break
;
case
COMPONENT_LINE_DRAW_TYPE
:
msg
=
wxT
(
"Segment"
);
break
;
case
COMPONENT_PIN_DRAW_TYPE
:
case
COMPONENT_PIN_DRAW_TYPE
:
((
LibDrawPin
*
)
this
)
->
Display_Infos
(
frame
);
(
(
LibDrawPin
*
)
this
)
->
Display_Infos
(
frame
);
msg
=
wxT
(
"Pin"
);
msg
=
wxT
(
"Pin"
);
break
;
break
;
default
:
;
}
}
Affiche_1_Parametre
(
frame
,
1
,
wxT
(
"Type"
),
msg
,
CYAN
);
Affiche_1_Parametre
(
frame
,
1
,
wxT
(
"Type"
),
msg
,
CYAN
);
/* Affichage de l'appartenance */
/* Affichage de l'appartenance */
if
(
m_Unit
==
0
)
msg
=
_
(
"All"
);
if
(
m_Unit
==
0
)
else
msg
.
Printf
(
wxT
(
"%d"
),
m_Unit
);
msg
=
_
(
"All"
);
Affiche_1_Parametre
(
frame
,
10
,
_
(
"Unit"
),
msg
,
BROWN
);
else
msg
.
Printf
(
wxT
(
"%d"
),
m_Unit
);
if
(
m_Convert
==
0
)
msg
=
_
(
"All"
);
Affiche_1_Parametre
(
frame
,
10
,
_
(
"Unit"
),
msg
,
BROWN
);
else
if
(
m_Convert
==
1
)
msg
=
_
(
"no"
);
else
if
(
m_Convert
==
2
)
msg
=
_
(
"yes"
);
if
(
m_Convert
==
0
)
else
msg
=
wxT
(
"?"
);
msg
=
_
(
"All"
);
Affiche_1_Parametre
(
frame
,
16
,
_
(
"Convert"
),
msg
,
BROWN
);
else
if
(
m_Convert
==
1
)
msg
=
_
(
"no"
);
if
(
m_Width
)
valeur_param
(
m_Width
,
msg
);
else
if
(
m_Convert
==
2
)
else
msg
=
_
(
"default"
);
msg
=
_
(
"yes"
);
Affiche_1_Parametre
(
frame
,
24
,
_
(
"Width"
),
msg
,
BLUE
);
else
msg
=
wxT
(
"?"
);
Affiche_1_Parametre
(
frame
,
16
,
_
(
"Convert"
),
msg
,
BROWN
);
if
(
m_Width
)
valeur_param
(
m_Width
,
msg
);
else
msg
=
_
(
"default"
);
Affiche_1_Parametre
(
frame
,
24
,
_
(
"Width"
),
msg
,
BLUE
);
}
}
eeschema/block.cpp
View file @
f3c324d5
...
@@ -841,6 +841,9 @@ static EDA_BaseStruct* CopyStruct( WinEDA_DrawPanel* panel, wxDC* DC, BASE_SCREE
...
@@ -841,6 +841,9 @@ static EDA_BaseStruct* CopyStruct( WinEDA_DrawPanel* panel, wxDC* DC, BASE_SCREE
sheet
->
m_FileName
=
sheet
->
m_SheetName
+
wxT
(
".sch"
);
sheet
->
m_FileName
=
sheet
->
m_SheetName
+
wxT
(
".sch"
);
break
;
break
;
}
}
default
:
;
}
}
SetStructFather
(
Struct
,
screen
);
SetStructFather
(
Struct
,
screen
);
...
...
eeschema/block_libedit.cpp
View file @
f3c324d5
...
@@ -594,6 +594,9 @@ void MoveMarkedItems( EDA_LibComponentStruct* LibEntry, wxPoint offset )
...
@@ -594,6 +594,9 @@ void MoveMarkedItems( EDA_LibComponentStruct* LibEntry, wxPoint offset )
(
(
LibDrawText
*
)
item
)
->
m_Pos
.
x
+=
offset
.
x
;
(
(
LibDrawText
*
)
item
)
->
m_Pos
.
x
+=
offset
.
x
;
(
(
LibDrawText
*
)
item
)
->
m_Pos
.
y
+=
offset
.
y
;
(
(
LibDrawText
*
)
item
)
->
m_Pos
.
y
+=
offset
.
y
;
break
;
break
;
default
:
;
}
}
item
->
m_Flags
=
item
->
m_Selected
=
0
;
item
->
m_Flags
=
item
->
m_Selected
=
0
;
...
@@ -701,6 +704,9 @@ void MirrorMarkedItems( EDA_LibComponentStruct* LibEntry, wxPoint offset )
...
@@ -701,6 +704,9 @@ void MirrorMarkedItems( EDA_LibComponentStruct* LibEntry, wxPoint offset )
case
COMPONENT_GRAPHIC_TEXT_DRAW_TYPE
:
case
COMPONENT_GRAPHIC_TEXT_DRAW_TYPE
:
SETMIRROR
(
(
(
LibDrawText
*
)
item
)
->
m_Pos
.
x
);
SETMIRROR
(
(
(
LibDrawText
*
)
item
)
->
m_Pos
.
x
);
break
;
break
;
default
:
;
}
}
item
->
m_Flags
=
item
->
m_Selected
=
0
;
item
->
m_Flags
=
item
->
m_Selected
=
0
;
...
...
eeschema/cmpclass.cpp
View file @
f3c324d5
...
@@ -148,7 +148,7 @@ wxString DrawMarkerStruct::GetComment( void )
...
@@ -148,7 +148,7 @@ wxString DrawMarkerStruct::GetComment( void )
/***************************/
/***************************/
EDA_DrawLineStruct
::
EDA_DrawLineStruct
(
const
wxPoint
&
pos
,
int
layer
)
:
EDA_DrawLineStruct
::
EDA_DrawLineStruct
(
const
wxPoint
&
pos
,
int
layer
)
:
EDA_Base
Line
Struct
(
NULL
,
DRAW_SEGMENT_STRUCT_TYPE
)
EDA_BaseStruct
(
NULL
,
DRAW_SEGMENT_STRUCT_TYPE
)
{
{
m_Start
=
pos
;
m_Start
=
pos
;
m_End
=
pos
;
m_End
=
pos
;
...
...
eeschema/component_class.cpp
View file @
f3c324d5
...
@@ -23,7 +23,7 @@
...
@@ -23,7 +23,7 @@
/***************************/
/***************************/
/***********************************************************************************/
/***********************************************************************************/
DrawPartStruct
::
DrawPartStruct
(
DrawStructureType
struct_type
,
const
wxPoint
&
pos
)
:
DrawPartStruct
::
DrawPartStruct
(
KICAD_T
struct_type
,
const
wxPoint
&
pos
)
:
EDA_BaseStruct
(
struct_type
)
EDA_BaseStruct
(
struct_type
)
/***********************************************************************************/
/***********************************************************************************/
{
{
...
...
eeschema/component_class.h
View file @
f3c324d5
...
@@ -70,7 +70,7 @@ public:
...
@@ -70,7 +70,7 @@ public:
wxPoint
m_Pos
;
/* Exact position of part. */
wxPoint
m_Pos
;
/* Exact position of part. */
public
:
public
:
DrawPartStruct
(
DrawStructureType
struct_type
,
const
wxPoint
&
pos
);
DrawPartStruct
(
KICAD_T
struct_type
,
const
wxPoint
&
pos
);
~
DrawPartStruct
(
void
);
~
DrawPartStruct
(
void
);
};
};
...
...
eeschema/dangling_ends.cpp
View file @
f3c324d5
/*********************/
/*********************/
/* dangling_ends.cpp */
/* dangling_ends.cpp */
/*********************/
/*********************/
#include "fctsys.h"
#include "fctsys.h"
#include "gr_basic.h"
#include "gr_basic.h"
...
@@ -12,8 +12,7 @@
...
@@ -12,8 +12,7 @@
#include "netlist.h"
/* Definitions generales liees au calcul de netliste */
#include "netlist.h"
/* Definitions generales liees au calcul de netliste */
#include "protos.h"
#include "protos.h"
enum
End_Type
enum
End_Type
{
{
UNKNOWN
=
0
,
UNKNOWN
=
0
,
WIRE_START_END
,
WIRE_START_END
,
WIRE_END_END
,
WIRE_END_END
,
...
@@ -29,126 +28,141 @@ enum End_Type
...
@@ -29,126 +28,141 @@ enum End_Type
class
DanglingEndHandle
class
DanglingEndHandle
{
{
public
:
public
:
const
void
*
m_Item
;
const
void
*
m_Item
;
wxPoint
m_Pos
;
wxPoint
m_Pos
;
int
m_Type
;
int
m_Type
;
DanglingEndHandle
*
m_Pnext
;
DanglingEndHandle
*
m_Pnext
;
DanglingEndHandle
(
int
type
)
DanglingEndHandle
(
int
type
)
{
{
m_Item
=
NULL
;
m_Item
=
NULL
;
m_Type
=
type
;
m_Type
=
type
;
m_Pnext
=
NULL
;
m_Pnext
=
NULL
;
}
}
};
};
DanglingEndHandle
*
ItemList
;
DanglingEndHandle
*
ItemList
;
static
void
TestWireForDangling
(
EDA_DrawLineStruct
*
DrawRef
,
static
void
TestWireForDangling
(
EDA_DrawLineStruct
*
DrawRef
,
WinEDA_SchematicFrame
*
frame
,
wxDC
*
DC
);
WinEDA_SchematicFrame
*
frame
,
wxDC
*
DC
);
void
TestLabelForDangling
(
DrawTextStruct
*
label
,
void
TestLabelForDangling
(
DrawTextStruct
*
label
,
WinEDA_SchematicFrame
*
frame
,
wxDC
*
DC
);
WinEDA_SchematicFrame
*
frame
,
wxDC
*
DC
);
DanglingEndHandle
*
RebuildEndList
(
EDA_BaseStruct
*
DrawList
);
DanglingEndHandle
*
RebuildEndList
(
EDA_BaseStruct
*
DrawList
);
/**********************************************************/
/**********************************************************/
bool
SegmentIntersect
(
int
Sx1
,
int
Sy1
,
int
Sx2
,
int
Sy2
,
bool
SegmentIntersect
(
int
Sx1
,
int
Sy1
,
int
Sx2
,
int
Sy2
,
int
Px1
,
int
Py1
)
int
Px1
,
int
Py1
)
/**********************************************************/
/**********************************************************/
/* Retourne TRUE si le point P est sur le segment S.
/* Retourne TRUE si le point P est sur le segment S.
Le segment est suppose horizontal ou vertical.
*
Le segment est suppose horizontal ou vertical.
*/
*/
{
{
int
Sxmin
,
Sxmax
,
Symin
,
Symax
;
int
Sxmin
,
Sxmax
,
Symin
,
Symax
;
if
(
Sx1
==
Sx2
)
/* Line S is vertical. */
if
(
Sx1
==
Sx2
)
/* Line S is vertical. */
{
{
Symin
=
MIN
(
Sy1
,
Sy2
);
Symax
=
MAX
(
Sy1
,
Sy2
);
Symin
=
MIN
(
Sy1
,
Sy2
);
Symax
=
MAX
(
Sy1
,
Sy2
);
if
(
Px1
!=
Sx1
)
return
FALSE
;
if
(
Px1
!=
Sx1
)
if
(
Py1
>=
Symin
&&
Py1
<=
Symax
)
return
TRUE
;
return
FALSE
;
else
return
FALSE
;
if
(
Py1
>=
Symin
&&
Py1
<=
Symax
)
return
TRUE
;
else
return
FALSE
;
}
}
else
if
(
Sy1
==
Sy2
)
/* Line S is horizontal. */
else
if
(
Sy1
==
Sy2
)
/* Line S is horizontal. */
{
{
Sxmin
=
MIN
(
Sx1
,
Sx2
);
Sxmax
=
MAX
(
Sx1
,
Sx2
);
Sxmin
=
MIN
(
Sx1
,
Sx2
);
Sxmax
=
MAX
(
Sx1
,
Sx2
);
if
(
Py1
!=
Sy1
)
return
FALSE
;
if
(
Py1
!=
Sy1
)
if
(
Px1
>=
Sxmin
&&
Px1
<=
Sxmax
)
return
TRUE
;
return
FALSE
;
else
return
FALSE
;
if
(
Px1
>=
Sxmin
&&
Px1
<=
Sxmax
)
return
TRUE
;
else
return
FALSE
;
}
}
else
return
FALSE
;
// Segments quelconques
else
return
FALSE
;
// Segments quelconques
}
}
/******************************************************************************/
/******************************************************************************/
void
WinEDA_SchematicFrame
::
TestDanglingEnds
(
EDA_BaseStruct
*
DrawList
,
wxDC
*
DC
)
void
WinEDA_SchematicFrame
::
TestDanglingEnds
(
EDA_BaseStruct
*
DrawList
,
wxDC
*
DC
)
/******************************************************************************/
/******************************************************************************/
/* Met a jour les membres m_Dangling des wires, bus, labels
/* Met a jour les membres m_Dangling des wires, bus, labels
*/
*/
{
{
EDA_BaseStruct
*
DrawItem
;
EDA_BaseStruct
*
DrawItem
;
const
DanglingEndHandle
*
DanglingItem
,
*
nextitem
;
const
DanglingEndHandle
*
DanglingItem
,
*
nextitem
;
if
(
ItemList
)
if
(
ItemList
)
for
(
DanglingItem
=
ItemList
;
DanglingItem
!=
NULL
;
DanglingItem
=
nextitem
)
for
(
DanglingItem
=
ItemList
;
DanglingItem
!=
NULL
;
DanglingItem
=
nextitem
)
{
{
nextitem
=
DanglingItem
->
m_Pnext
;
nextitem
=
DanglingItem
->
m_Pnext
;
delete
DanglingItem
;
delete
DanglingItem
;
}
}
ItemList
=
RebuildEndList
(
DrawList
);
ItemList
=
RebuildEndList
(
DrawList
);
// Controle des elements
// Controle des elements
for
(
DrawItem
=
DrawList
;
DrawItem
!=
NULL
;
DrawItem
=
DrawItem
->
Pnext
)
for
(
DrawItem
=
DrawList
;
DrawItem
!=
NULL
;
DrawItem
=
DrawItem
->
Pnext
)
{
{
switch
(
DrawItem
->
m_StructType
)
switch
(
DrawItem
->
m_StructType
)
{
{
case
DRAW_GLOBAL_LABEL_STRUCT_TYPE
:
case
DRAW_GLOBAL_LABEL_STRUCT_TYPE
:
case
DRAW_LABEL_STRUCT_TYPE
:
case
DRAW_LABEL_STRUCT_TYPE
:
#undef STRUCT
#undef STRUCT
#define STRUCT ((DrawLabelStruct*)DrawItem
)
#define STRUCT ( (DrawLabelStruct*) DrawItem
)
TestLabelForDangling
(
STRUCT
,
this
,
DC
);
TestLabelForDangling
(
STRUCT
,
this
,
DC
);
break
;
break
;
break
;
break
;
case
DRAW_SEGMENT_STRUCT_TYPE
:
case
DRAW_SEGMENT_STRUCT_TYPE
:
#undef STRUCT
#undef STRUCT
#define STRUCT ((EDA_DrawLineStruct*)DrawItem
)
#define STRUCT ( (EDA_DrawLineStruct*) DrawItem
)
if
(
STRUCT
->
m_Layer
==
LAYER_WIRE
)
if
(
STRUCT
->
m_Layer
==
LAYER_WIRE
)
{
{
TestWireForDangling
(
STRUCT
,
this
,
DC
);
TestWireForDangling
(
STRUCT
,
this
,
DC
);
break
;
break
;
}
}
if
(
STRUCT
->
m_Layer
==
LAYER_NOTES
)
break
;
if
(
STRUCT
->
m_Layer
==
LAYER_NOTES
)
if
(
STRUCT
->
m_Layer
==
LAYER_BUS
)
break
;
if
(
STRUCT
->
m_Layer
==
LAYER_BUS
)
{
{
STRUCT
->
m_StartIsDangling
=
STRUCT
->
m_StartIsDangling
=
STRUCT
->
m_EndIsDangling
=
FALSE
;
STRUCT
->
m_EndIsDangling
=
FALSE
;
break
;
break
;
}
}
break
;
break
;
default
:
;
}
}
}
}
}
}
/********************************************************************/
/********************************************************************/
LibDrawPin
*
WinEDA_SchematicFrame
::
LocatePinEnd
(
EDA_BaseStruct
*
DrawList
,
LibDrawPin
*
WinEDA_SchematicFrame
::
LocatePinEnd
(
EDA_BaseStruct
*
DrawList
,
const
wxPoint
&
pos
)
const
wxPoint
&
pos
)
/********************************************************************/
/********************************************************************/
/* Teste si le point de coordonnes pos est sur l'extrmit d'une PIN
/* Teste si le point de coordonnes pos est sur l'extrmit d'une PIN
retourne un pointeur sur la pin
*
retourne un pointeur sur la pin
NULL sinon
*
NULL sinon
*/
*/
{
{
EDA_SchComponentStruct
*
DrawLibItem
;
EDA_SchComponentStruct
*
DrawLibItem
;
LibDrawPin
*
Pin
;
LibDrawPin
*
Pin
;
wxPoint
pinpos
;
wxPoint
pinpos
;
Pin
=
LocateAnyPin
(
DrawList
,
pos
,
&
DrawLibItem
);
Pin
=
LocateAnyPin
(
DrawList
,
pos
,
&
DrawLibItem
);
if
(
!
Pin
)
return
NULL
;
if
(
!
Pin
)
return
NULL
;
pinpos
=
Pin
->
m_Pos
;
pinpos
=
Pin
->
m_Pos
;
if
(
DrawLibItem
==
NULL
)
pinpos
.
y
=
-
pinpos
.
y
;
if
(
DrawLibItem
==
NULL
)
pinpos
.
y
=
-
pinpos
.
y
;
else
else
{
{
...
@@ -159,77 +173,82 @@ wxPoint pinpos;
...
@@ -159,77 +173,82 @@ wxPoint pinpos;
+
DrawLibItem
->
m_Transform
[
1
][
1
]
*
y1
;
+
DrawLibItem
->
m_Transform
[
1
][
1
]
*
y1
;
}
}
if
(
(
pos
.
x
==
pinpos
.
x
)
&&
(
pos
.
y
==
pinpos
.
y
)
)
return
Pin
;
if
(
(
pos
.
x
==
pinpos
.
x
)
&&
(
pos
.
y
==
pinpos
.
y
)
)
return
Pin
;
return
NULL
;
return
NULL
;
}
}
/****************************************************************************/
/****************************************************************************/
void
TestWireForDangling
(
EDA_DrawLineStruct
*
DrawRef
,
void
TestWireForDangling
(
EDA_DrawLineStruct
*
DrawRef
,
WinEDA_SchematicFrame
*
frame
,
wxDC
*
DC
)
WinEDA_SchematicFrame
*
frame
,
wxDC
*
DC
)
/****************************************************************************/
/****************************************************************************/
{
{
DanglingEndHandle
*
terminal_item
;
DanglingEndHandle
*
terminal_item
;
bool
Sdangstate
=
TRUE
,
Edangstate
=
TRUE
;
bool
Sdangstate
=
TRUE
,
Edangstate
=
TRUE
;
for
(
terminal_item
=
ItemList
;
terminal_item
!=
NULL
;
for
(
terminal_item
=
ItemList
;
terminal_item
!=
NULL
;
terminal_item
=
terminal_item
->
m_Pnext
)
terminal_item
=
terminal_item
->
m_Pnext
)
{
{
if
(
terminal_item
->
m_Item
==
DrawRef
)
continue
;
if
(
terminal_item
->
m_Item
==
DrawRef
)
continue
;
if
(
(
DrawRef
->
m_Start
.
x
==
terminal_item
->
m_Pos
.
x
)
&&
if
(
(
DrawRef
->
m_Start
.
x
==
terminal_item
->
m_Pos
.
x
)
(
DrawRef
->
m_Start
.
y
==
terminal_item
->
m_Pos
.
y
)
)
&&
(
DrawRef
->
m_Start
.
y
==
terminal_item
->
m_Pos
.
y
)
)
Sdangstate
=
FALSE
;
Sdangstate
=
FALSE
;
if
(
(
DrawRef
->
m_End
.
x
==
terminal_item
->
m_Pos
.
x
)
&&
if
(
(
DrawRef
->
m_End
.
x
==
terminal_item
->
m_Pos
.
x
)
(
DrawRef
->
m_End
.
y
==
terminal_item
->
m_Pos
.
y
)
)
&&
(
DrawRef
->
m_End
.
y
==
terminal_item
->
m_Pos
.
y
)
)
Edangstate
=
FALSE
;
Edangstate
=
FALSE
;
if
(
(
Sdangstate
==
FALSE
)
&&
(
Edangstate
==
FALSE
)
)
if
(
(
Sdangstate
==
FALSE
)
&&
(
Edangstate
==
FALSE
)
)
break
;
break
;
}
}
if
(
(
Sdangstate
!=
DrawRef
->
m_StartIsDangling
)
||
if
(
(
Sdangstate
!=
DrawRef
->
m_StartIsDangling
)
(
Edangstate
!=
DrawRef
->
m_EndIsDangling
)
)
||
(
Edangstate
!=
DrawRef
->
m_EndIsDangling
)
)
{
{
if
(
DC
)
if
(
DC
)
RedrawOneStruct
(
frame
->
DrawPanel
,
DC
,
DrawRef
,
g_XorMode
);
RedrawOneStruct
(
frame
->
DrawPanel
,
DC
,
DrawRef
,
g_XorMode
);
DrawRef
->
m_StartIsDangling
=
Sdangstate
;
DrawRef
->
m_StartIsDangling
=
Sdangstate
;
DrawRef
->
m_EndIsDangling
=
Edangstate
;
DrawRef
->
m_EndIsDangling
=
Edangstate
;
if
(
DC
)
if
(
DC
)
RedrawOneStruct
(
frame
->
DrawPanel
,
DC
,
DrawRef
,
GR_DEFAULT_DRAWMODE
);
RedrawOneStruct
(
frame
->
DrawPanel
,
DC
,
DrawRef
,
GR_DEFAULT_DRAWMODE
);
}
}
}
}
/********************************************************/
/********************************************************/
void
TestLabelForDangling
(
DrawTextStruct
*
label
,
void
TestLabelForDangling
(
DrawTextStruct
*
label
,
WinEDA_SchematicFrame
*
frame
,
wxDC
*
DC
)
WinEDA_SchematicFrame
*
frame
,
wxDC
*
DC
)
/********************************************************/
/********************************************************/
{
{
DanglingEndHandle
*
terminal_item
;
DanglingEndHandle
*
terminal_item
;
bool
dangstate
=
TRUE
;
bool
dangstate
=
TRUE
;
for
(
terminal_item
=
ItemList
;
terminal_item
!=
NULL
;
for
(
terminal_item
=
ItemList
;
terminal_item
!=
NULL
;
terminal_item
=
terminal_item
->
m_Pnext
)
terminal_item
=
terminal_item
->
m_Pnext
)
{
{
if
(
terminal_item
->
m_Item
==
label
)
continue
;
if
(
terminal_item
->
m_Item
==
label
)
continue
;
switch
(
terminal_item
->
m_Type
)
switch
(
terminal_item
->
m_Type
)
{
{
case
PIN_END
:
case
PIN_END
:
case
LABEL_END
:
case
LABEL_END
:
case
SHEET_LABEL_END
:
case
SHEET_LABEL_END
:
if
(
(
label
->
m_Pos
.
x
==
terminal_item
->
m_Pos
.
x
)
&&
if
(
(
label
->
m_Pos
.
x
==
terminal_item
->
m_Pos
.
x
)
(
label
->
m_Pos
.
y
==
terminal_item
->
m_Pos
.
y
)
)
&&
(
label
->
m_Pos
.
y
==
terminal_item
->
m_Pos
.
y
)
)
dangstate
=
FALSE
;
dangstate
=
FALSE
;
break
;
break
;
case
WIRE_START_END
:
case
WIRE_START_END
:
case
BUS_START_END
:
case
BUS_START_END
:
dangstate
=
!
SegmentIntersect
(
terminal_item
->
m_Pos
.
x
,
dangstate
=
!
SegmentIntersect
(
terminal_item
->
m_Pos
.
x
,
terminal_item
->
m_Pos
.
y
,
terminal_item
->
m_Pos
.
y
,
terminal_item
->
m_Pnext
->
m_Pos
.
x
,
terminal_item
->
m_Pnext
->
m_Pos
.
x
,
terminal_item
->
m_Pnext
->
m_Pos
.
y
,
terminal_item
->
m_Pnext
->
m_Pos
.
y
,
label
->
m_Pos
.
x
,
label
->
m_Pos
.
y
);
label
->
m_Pos
.
x
,
label
->
m_Pos
.
y
);
terminal_item
=
terminal_item
->
m_Pnext
;
terminal_item
=
terminal_item
->
m_Pnext
;
break
;
break
;
...
@@ -241,30 +260,33 @@ bool dangstate = TRUE;
...
@@ -241,30 +260,33 @@ bool dangstate = TRUE;
break
;
break
;
}
}
if
(
dangstate
==
FALSE
)
break
;
if
(
dangstate
==
FALSE
)
break
;
}
}
if
(
dangstate
!=
label
->
m_IsDangling
)
if
(
dangstate
!=
label
->
m_IsDangling
)
{
{
if
(
DC
)
if
(
DC
)
RedrawOneStruct
(
frame
->
DrawPanel
,
DC
,
label
,
g_XorMode
);
RedrawOneStruct
(
frame
->
DrawPanel
,
DC
,
label
,
g_XorMode
);
label
->
m_IsDangling
=
dangstate
;
label
->
m_IsDangling
=
dangstate
;
if
(
DC
)
if
(
DC
)
RedrawOneStruct
(
frame
->
DrawPanel
,
DC
,
label
,
GR_DEFAULT_DRAWMODE
);
RedrawOneStruct
(
frame
->
DrawPanel
,
DC
,
label
,
GR_DEFAULT_DRAWMODE
);
}
}
}
}
/****************************************************/
/****************************************************/
wxPoint
ReturnPinPhysicalPosition
(
LibDrawPin
*
Pin
,
wxPoint
ReturnPinPhysicalPosition
(
LibDrawPin
*
Pin
,
EDA_SchComponentStruct
*
DrawLibItem
)
EDA_SchComponentStruct
*
DrawLibItem
)
/****************************************************/
/****************************************************/
/* Retourne la position physique de la pin, qui dpend de l'orientation
/* Retourne la position physique de la pin, qui dpend de l'orientation
du composant */
*
du composant */
{
{
wxPoint
PinPos
=
Pin
->
m_Pos
;
wxPoint
PinPos
=
Pin
->
m_Pos
;
if
(
DrawLibItem
==
NULL
)
PinPos
.
y
=
-
PinPos
.
y
;
if
(
DrawLibItem
==
NULL
)
PinPos
.
y
=
-
PinPos
.
y
;
else
else
{
{
...
@@ -280,13 +302,13 @@ wxPoint PinPos = Pin->m_Pos;
...
@@ -280,13 +302,13 @@ wxPoint PinPos = Pin->m_Pos;
/***********************************************************/
/***********************************************************/
DanglingEndHandle
*
RebuildEndList
(
EDA_BaseStruct
*
DrawList
)
DanglingEndHandle
*
RebuildEndList
(
EDA_BaseStruct
*
DrawList
)
/***********************************************************/
/***********************************************************/
{
{
DanglingEndHandle
*
StartList
=
NULL
,
*
item
,
*
lastitem
=
NULL
;
DanglingEndHandle
*
StartList
=
NULL
,
*
item
,
*
lastitem
=
NULL
;
EDA_BaseStruct
*
DrawItem
;
EDA_BaseStruct
*
DrawItem
;
for
(
DrawItem
=
DrawList
;
DrawItem
!=
NULL
;
DrawItem
=
DrawItem
->
Pnext
)
for
(
DrawItem
=
DrawList
;
DrawItem
!=
NULL
;
DrawItem
=
DrawItem
->
Pnext
)
{
{
switch
(
DrawItem
->
m_StructType
)
switch
(
DrawItem
->
m_StructType
)
{
{
...
@@ -295,30 +317,38 @@ EDA_BaseStruct * DrawItem;
...
@@ -295,30 +317,38 @@ EDA_BaseStruct * DrawItem;
case
DRAW_GLOBAL_LABEL_STRUCT_TYPE
:
case
DRAW_GLOBAL_LABEL_STRUCT_TYPE
:
#undef STRUCT
#undef STRUCT
#define STRUCT ((DrawGlobalLabelStruct*)DrawItem)
#define STRUCT ( (DrawGlobalLabelStruct*) DrawItem )
item
=
new
DanglingEndHandle
(
LABEL_END
);
item
=
new
DanglingEndHandle
(
LABEL_END
);
item
->
m_Item
=
DrawItem
;
item
->
m_Item
=
DrawItem
;
item
->
m_Pos
=
STRUCT
->
m_Pos
;
item
->
m_Pos
=
STRUCT
->
m_Pos
;
if
(
lastitem
)
lastitem
->
m_Pnext
=
item
;
if
(
lastitem
)
else
StartList
=
item
;
lastitem
->
m_Pnext
=
item
;
else
StartList
=
item
;
lastitem
=
item
;
lastitem
=
item
;
break
;
break
;
case
DRAW_SEGMENT_STRUCT_TYPE
:
case
DRAW_SEGMENT_STRUCT_TYPE
:
#undef STRUCT
#undef STRUCT
#define STRUCT ((EDA_DrawLineStruct*)DrawItem)
#define STRUCT ( (EDA_DrawLineStruct*) DrawItem )
if
(
STRUCT
->
m_Layer
==
LAYER_NOTES
)
break
;
if
(
STRUCT
->
m_Layer
==
LAYER_NOTES
)
break
;
if
(
(
STRUCT
->
m_Layer
==
LAYER_BUS
)
||
(
STRUCT
->
m_Layer
==
LAYER_WIRE
)
)
if
(
(
STRUCT
->
m_Layer
==
LAYER_BUS
)
||
(
STRUCT
->
m_Layer
==
LAYER_WIRE
)
)
{
{
item
=
new
DanglingEndHandle
((
STRUCT
->
m_Layer
==
LAYER_BUS
)
?
item
=
new
DanglingEndHandle
(
(
STRUCT
->
m_Layer
==
LAYER_BUS
)
?
BUS_START_END
:
WIRE_START_END
);
BUS_START_END
:
WIRE_START_END
);
item
->
m_Item
=
DrawItem
;
item
->
m_Item
=
DrawItem
;
item
->
m_Pos
=
STRUCT
->
m_Start
;
item
->
m_Pos
=
STRUCT
->
m_Start
;
if
(
lastitem
)
lastitem
->
m_Pnext
=
item
;
if
(
lastitem
)
else
StartList
=
item
;
lastitem
->
m_Pnext
=
item
;
else
StartList
=
item
;
lastitem
=
item
;
lastitem
=
item
;
item
=
new
DanglingEndHandle
((
STRUCT
->
m_Layer
==
LAYER_BUS
)
?
item
=
new
DanglingEndHandle
(
(
STRUCT
->
m_Layer
==
LAYER_BUS
)
?
BUS_END_END
:
WIRE_END_END
);
BUS_END_END
:
WIRE_END_END
);
item
->
m_Item
=
DrawItem
;
item
->
m_Item
=
DrawItem
;
item
->
m_Pos
=
STRUCT
->
m_End
;
item
->
m_Pos
=
STRUCT
->
m_End
;
lastitem
->
m_Pnext
=
item
;
lastitem
->
m_Pnext
=
item
;
...
@@ -328,25 +358,32 @@ EDA_BaseStruct * DrawItem;
...
@@ -328,25 +358,32 @@ EDA_BaseStruct * DrawItem;
case
DRAW_JUNCTION_STRUCT_TYPE
:
case
DRAW_JUNCTION_STRUCT_TYPE
:
#undef STRUCT
#undef STRUCT
#define STRUCT ((DrawJunctionStruct*)DrawItem)
#define STRUCT ( (DrawJunctionStruct*) DrawItem )
item
=
new
DanglingEndHandle
(
JUNCTION_END
);
item
=
new
DanglingEndHandle
(
JUNCTION_END
);
item
->
m_Item
=
DrawItem
;
item
->
m_Item
=
DrawItem
;
item
->
m_Pos
=
STRUCT
->
m_Pos
;
item
->
m_Pos
=
STRUCT
->
m_Pos
;
if
(
lastitem
)
lastitem
->
m_Pnext
=
item
;
if
(
lastitem
)
else
StartList
=
item
;
lastitem
->
m_Pnext
=
item
;
else
StartList
=
item
;
lastitem
=
item
;
lastitem
=
item
;
break
;
break
;
case
DRAW_BUSENTRY_STRUCT_TYPE
:
case
DRAW_BUSENTRY_STRUCT_TYPE
:
#undef STRUCT
#undef STRUCT
#define STRUCT ((DrawBusEntryStruct*)DrawItem)
#define STRUCT ( (DrawBusEntryStruct*) DrawItem )
item
=
new
DanglingEndHandle
(
ENTRY_END
);
item
=
new
DanglingEndHandle
(
ENTRY_END
);
item
->
m_Item
=
DrawItem
;
item
->
m_Item
=
DrawItem
;
item
->
m_Pos
=
STRUCT
->
m_Pos
;
item
->
m_Pos
=
STRUCT
->
m_Pos
;
if
(
lastitem
)
lastitem
->
m_Pnext
=
item
;
if
(
lastitem
)
else
StartList
=
item
;
lastitem
->
m_Pnext
=
item
;
else
StartList
=
item
;
lastitem
=
item
;
lastitem
=
item
;
item
=
new
DanglingEndHandle
(
ENTRY_END
);
item
=
new
DanglingEndHandle
(
ENTRY_END
);
item
->
m_Item
=
DrawItem
;
item
->
m_Item
=
DrawItem
;
item
->
m_Pos
=
STRUCT
->
m_End
();
item
->
m_Pos
=
STRUCT
->
m_End
();
lastitem
->
m_Pnext
=
item
;
lastitem
->
m_Pnext
=
item
;
...
@@ -356,54 +393,68 @@ EDA_BaseStruct * DrawItem;
...
@@ -356,54 +393,68 @@ EDA_BaseStruct * DrawItem;
case
DRAW_LIB_ITEM_STRUCT_TYPE
:
case
DRAW_LIB_ITEM_STRUCT_TYPE
:
{
{
#undef STRUCT
#undef STRUCT
#define STRUCT ((EDA_SchComponentStruct*)DrawItem)
#define STRUCT ( (EDA_SchComponentStruct*) DrawItem )
EDA_LibComponentStruct
*
Entry
;
EDA_LibComponentStruct
*
Entry
;
Entry
=
FindLibPart
(
STRUCT
->
m_ChipName
,
wxEmptyString
,
FIND_ROOT
);
Entry
=
FindLibPart
(
STRUCT
->
m_ChipName
,
wxEmptyString
,
FIND_ROOT
);
if
(
Entry
==
NULL
)
break
;
if
(
Entry
==
NULL
)
LibEDA_BaseStruct
*
DrawLibItem
=
Entry
->
m_Drawings
;
break
;
for
(
;
DrawLibItem
!=
NULL
;
DrawLibItem
=
DrawLibItem
->
Next
())
LibEDA_BaseStruct
*
DrawLibItem
=
Entry
->
m_Drawings
;
for
(
;
DrawLibItem
!=
NULL
;
DrawLibItem
=
DrawLibItem
->
Next
()
)
{
{
if
(
DrawLibItem
->
m_StructType
!=
COMPONENT_PIN_DRAW_TYPE
)
continue
;
if
(
DrawLibItem
->
m_StructType
!=
COMPONENT_PIN_DRAW_TYPE
)
continue
;
LibDrawPin
*
Pin
=
(
LibDrawPin
*
)
DrawLibItem
;
LibDrawPin
*
Pin
=
(
LibDrawPin
*
)
DrawLibItem
;
if
(
Pin
->
m_Unit
&&
DrawLibItem
->
m_Unit
&&
if
(
Pin
->
m_Unit
&&
DrawLibItem
->
m_Unit
(
DrawLibItem
->
m_Unit
!=
Pin
->
m_Unit
)
)
&&
(
DrawLibItem
->
m_Unit
!=
Pin
->
m_Unit
)
)
continue
;
continue
;
if
(
Pin
->
m_Convert
&&
DrawLibItem
->
m_Convert
&&
if
(
Pin
->
m_Convert
&&
DrawLibItem
->
m_Convert
(
DrawLibItem
->
m_Convert
!=
Pin
->
m_Convert
)
)
&&
(
DrawLibItem
->
m_Convert
!=
Pin
->
m_Convert
)
)
continue
;
continue
;
item
=
new
DanglingEndHandle
(
PIN_END
);
item
=
new
DanglingEndHandle
(
PIN_END
);
item
->
m_Item
=
Pin
;
item
->
m_Item
=
Pin
;
item
->
m_Pos
=
ReturnPinPhysicalPosition
(
Pin
,
STRUCT
);
item
->
m_Pos
=
ReturnPinPhysicalPosition
(
Pin
,
STRUCT
);
if
(
lastitem
)
lastitem
->
m_Pnext
=
item
;
if
(
lastitem
)
else
StartList
=
item
;
lastitem
->
m_Pnext
=
item
;
else
StartList
=
item
;
lastitem
=
item
;
lastitem
=
item
;
}
}
break
;
break
;
}
}
case
DRAW_SHEET_STRUCT_TYPE
:
case
DRAW_SHEET_STRUCT_TYPE
:
{
{
#undef STRUCT
#undef STRUCT
#define STRUCT ((DrawSheetStruct*)DrawItem
)
#define STRUCT ( (DrawSheetStruct*) DrawItem
)
DrawSheetLabelStruct
*
pinsheet
=
STRUCT
->
m_Label
;
DrawSheetLabelStruct
*
pinsheet
=
STRUCT
->
m_Label
;
while
(
pinsheet
)
while
(
pinsheet
)
{
{
item
=
new
DanglingEndHandle
(
SHEET_LABEL_END
);
item
=
new
DanglingEndHandle
(
SHEET_LABEL_END
);
item
->
m_Item
=
pinsheet
;
item
->
m_Item
=
pinsheet
;
item
->
m_Pos
=
pinsheet
->
m_Pos
;
item
->
m_Pos
=
pinsheet
->
m_Pos
;
if
(
lastitem
)
lastitem
->
m_Pnext
=
item
;
if
(
lastitem
)
else
StartList
=
item
;
lastitem
->
m_Pnext
=
item
;
else
StartList
=
item
;
lastitem
=
item
;
lastitem
=
item
;
pinsheet
=
(
DrawSheetLabelStruct
*
)
pinsheet
->
Pnext
;
pinsheet
=
(
DrawSheetLabelStruct
*
)
pinsheet
->
Pnext
;
}
}
break
;
break
;
}
}
default
:
;
}
}
}
}
return
StartList
;
return
StartList
;
}
}
eeschema/eelibs_draw_components.cpp
View file @
f3c324d5
/****************************************/
/****************************************/
/* Modules to handle component drawing. */
/* Modules to handle component drawing. */
/****************************************/
/****************************************/
#include "fctsys.h"
#include "fctsys.h"
#include "gr_basic.h"
#include "gr_basic.h"
...
@@ -21,45 +21,48 @@
...
@@ -21,45 +21,48 @@
/* Fonctions locales */
/* Fonctions locales */
/* Descr component <DUMMY> used when a component is not found in library,
/* Descr component <DUMMY> used when a component is not found in library,
to draw a dummy shape*/
* to draw a dummy shape*/
/*
/*
This component is a 400 mils square with the text ??
*
This component is a 400 mils square with the text ??
DEF DUMMY U 0 40 Y Y 1 0 N
*
DEF DUMMY U 0 40 Y Y 1 0 N
F0 "U" 0 -350 60 H V
*
F0 "U" 0 -350 60 H V
F1 "DUMMY" 0 350 60 H V
*
F1 "DUMMY" 0 350 60 H V
DRAW
*
DRAW
T 0 0 0 150 0 0 0 ??
*
T 0 0 0 150 0 0 0 ??
S -200 200 200 -200 0 1 0
*
S -200 200 200 -200 0 1 0
ENDDRAW
*
ENDDRAW
ENDDEF
*
ENDDEF
*/
*/
static
int
s_ItemSelectColor
=
BROWN
;
static
int
s_ItemSelectColor
=
BROWN
;
static
EDA_LibComponentStruct
*
DummyCmp
;
static
EDA_LibComponentStruct
*
DummyCmp
;
static
int
*
Buf_Poly_Drawings
,
Buf_Poly_Size
;
// Used fo polyline drawings
static
int
*
Buf_Poly_Drawings
,
Buf_Poly_Size
;
// Used fo polyline drawings
static
void
DrawLibPartAux
(
WinEDA_DrawPanel
*
panel
,
wxDC
*
DC
,
static
void
DrawLibPartAux
(
WinEDA_DrawPanel
*
panel
,
wxDC
*
DC
,
EDA_SchComponentStruct
*
Component
,
EDA_SchComponentStruct
*
Component
,
EDA_LibComponentStruct
*
Entry
,
EDA_LibComponentStruct
*
Entry
,
const
wxPoint
&
Pos
,
const
wxPoint
&
Pos
,
int
TransMat
[
2
][
2
],
int
TransMat
[
2
][
2
],
int
Multi
,
int
convert
,
int
Multi
,
int
convert
,
int
DrawMode
,
int
Color
=
-
1
,
bool
DrawPinText
=
TRUE
);
int
DrawMode
,
int
Color
=
-
1
,
bool
DrawPinText
=
TRUE
);
/******************************/
/******************************/
static
void
CreateDummyCmp
(
void
)
static
void
CreateDummyCmp
(
void
)
/******************************/
/******************************/
{
{
DummyCmp
=
new
EDA_LibComponentStruct
(
NULL
);
DummyCmp
=
new
EDA_LibComponentStruct
(
NULL
);
LibDrawSquare
*
Square
=
new
LibDrawSquare
();
LibDrawSquare
*
Square
=
new
LibDrawSquare
();
Square
->
m_Pos
=
wxPoint
(
-
200
,
200
);
Square
->
m_Pos
=
wxPoint
(
-
200
,
200
);
Square
->
m_End
=
wxPoint
(
200
,
-
200
);
Square
->
m_End
=
wxPoint
(
200
,
-
200
);
Square
->
m_Width
=
4
;
Square
->
m_Width
=
4
;
LibDrawText
*
Text
=
new
LibDrawText
();
LibDrawText
*
Text
=
new
LibDrawText
();
Text
->
m_Size
.
x
=
Text
->
m_Size
.
y
=
150
;
Text
->
m_Size
.
x
=
Text
->
m_Size
.
y
=
150
;
Text
->
m_Text
=
wxT
(
"??"
);
Text
->
m_Text
=
wxT
(
"??"
);
DummyCmp
->
m_Drawings
=
Square
;
DummyCmp
->
m_Drawings
=
Square
;
Square
->
Pnext
=
Text
;
Square
->
Pnext
=
Text
;
...
@@ -67,186 +70,208 @@ static void CreateDummyCmp(void)
...
@@ -67,186 +70,208 @@ static void CreateDummyCmp(void)
/*************************************************************/
/*************************************************************/
void
DrawLibEntry
(
WinEDA_DrawPanel
*
panel
,
wxDC
*
DC
,
void
DrawLibEntry
(
WinEDA_DrawPanel
*
panel
,
wxDC
*
DC
,
EDA_LibComponentStruct
*
LibEntry
,
EDA_LibComponentStruct
*
LibEntry
,
int
posX
,
int
posY
,
int
posX
,
int
posY
,
int
Multi
,
int
convert
,
int
Multi
,
int
convert
,
int
DrawMode
,
int
Color
)
int
DrawMode
,
int
Color
)
/**************************************************************/
/**************************************************************/
/* Routine de dessin d'un composant d'une librairie
LibEntry = pointeur sur la description en librairie
posX, posY = position du composant
DrawMode = GrOR ..
Color = 0 : dessin en vraies couleurs, sinon couleur = Color
Une croix symbolise le point d'accrochage (ref position) du composant
Le composant est toujours trace avec orientation 0
/* Routine de dessin d'un composant d'une librairie
*/
* LibEntry = pointeur sur la description en librairie
* posX, posY = position du composant
* DrawMode = GrOR ..
* Color = 0 : dessin en vraies couleurs, sinon couleur = Color
*
* Une croix symbolise le point d'accrochage (ref position) du composant
*
* Le composant est toujours trace avec orientation 0
*/
{
{
int
color
;
int
color
;
int
TransMat
[
2
][
2
];
int
TransMat
[
2
][
2
];
wxString
Prefix
;
wxString
Prefix
;
LibDrawField
*
Field
;
LibDrawField
*
Field
;
wxPoint
text_pos
;
wxPoint
text_pos
;
/* Orientation normale */
/* Orientation normale */
TransMat
[
0
][
0
]
=
1
;
TransMat
[
1
][
1
]
=
-
1
;
TransMat
[
0
][
0
]
=
1
;
TransMat
[
1
][
1
]
=
-
1
;
TransMat
[
1
][
0
]
=
TransMat
[
0
][
1
]
=
0
;
TransMat
[
1
][
0
]
=
TransMat
[
0
][
1
]
=
0
;
DrawLibPartAux
(
panel
,
DC
,
NULL
,
LibEntry
,
wxPoint
(
posX
,
posY
),
DrawLibPartAux
(
panel
,
DC
,
NULL
,
LibEntry
,
wxPoint
(
posX
,
posY
),
TransMat
,
Multi
,
TransMat
,
Multi
,
convert
,
DrawMode
,
Color
);
convert
,
DrawMode
,
Color
);
/* Trace des 2 champs ref et value (Attention aux coord: la matrice
/* Trace des 2 champs ref et value (Attention aux coord: la matrice
de transformation change de signe les coord Y */
*
de transformation change de signe les coord Y */
GRSetDrawMode
(
DC
,
DrawMode
);
GRSetDrawMode
(
DC
,
DrawMode
);
if
(
LibEntry
->
m_Prefix
.
m_Attributs
&
TEXT_NO_VISIBLE
)
if
(
LibEntry
->
m_Prefix
.
m_Attributs
&
TEXT_NO_VISIBLE
)
{
{
if
(
Color
>=
0
)
color
=
Color
;
if
(
Color
>=
0
)
else
color
=
UNVISIBLE_COLOR
;
color
=
Color
;
else
color
=
UNVISIBLE_COLOR
;
}
}
else
else
{
{
if
(
Color
>=
0
)
color
=
Color
;
if
(
Color
>=
0
)
else
color
=
ReturnLayerColor
(
LAYER_REFERENCEPART
);
color
=
Color
;
else
color
=
ReturnLayerColor
(
LAYER_REFERENCEPART
);
}
}
if
(
LibEntry
->
m_UnitCount
>
1
)
if
(
LibEntry
->
m_UnitCount
>
1
)
Prefix
.
Printf
(
wxT
(
"%s?%c"
),
LibEntry
->
m_Prefix
.
m_Text
.
GetData
(),
Multi
+
'A'
-
1
);
Prefix
.
Printf
(
wxT
(
"%s?%c"
),
LibEntry
->
m_Prefix
.
m_Text
.
GetData
(),
Multi
+
'A'
-
1
);
else
Prefix
=
LibEntry
->
m_Prefix
.
m_Text
+
wxT
(
"?"
);
else
Prefix
=
LibEntry
->
m_Prefix
.
m_Text
+
wxT
(
"?"
);
text_pos
.
x
=
LibEntry
->
m_Prefix
.
m_Pos
.
x
+
posX
;
text_pos
.
x
=
LibEntry
->
m_Prefix
.
m_Pos
.
x
+
posX
;
text_pos
.
y
=
posY
-
LibEntry
->
m_Prefix
.
m_Pos
.
y
;
text_pos
.
y
=
posY
-
LibEntry
->
m_Prefix
.
m_Pos
.
y
;
int
LineWidth
=
MAX
(
LibEntry
->
m_Prefix
.
m_Width
,
g_DrawMinimunLineWidth
);
int
LineWidth
=
MAX
(
LibEntry
->
m_Prefix
.
m_Width
,
g_DrawMinimunLineWidth
);
if
(
(
LibEntry
->
m_Prefix
.
m_Flags
&
IS_MOVED
)
==
0
)
if
(
(
LibEntry
->
m_Prefix
.
m_Flags
&
IS_MOVED
)
==
0
)
DrawGraphicText
(
panel
,
DC
,
text_pos
,
DrawGraphicText
(
panel
,
DC
,
text_pos
,
color
,
LibEntry
->
m_Prefix
.
m_Text
.
GetData
(),
color
,
LibEntry
->
m_Prefix
.
m_Text
.
GetData
(),
LibEntry
->
m_Prefix
.
m_Orient
?
TEXT_ORIENT_VERT
:
TEXT_ORIENT_HORIZ
,
LibEntry
->
m_Prefix
.
m_Orient
?
TEXT_ORIENT_VERT
:
TEXT_ORIENT_HORIZ
,
LibEntry
->
m_Prefix
.
m_Size
,
LibEntry
->
m_Prefix
.
m_Size
,
LibEntry
->
m_Prefix
.
m_HJustify
,
LibEntry
->
m_Prefix
.
m_VJustify
,
LineWidth
);
LibEntry
->
m_Prefix
.
m_HJustify
,
LibEntry
->
m_Prefix
.
m_VJustify
,
LineWidth
);
if
(
LibEntry
->
m_Name
.
m_Attributs
&
TEXT_NO_VISIBLE
)
if
(
LibEntry
->
m_Name
.
m_Attributs
&
TEXT_NO_VISIBLE
)
{
{
if
(
Color
>=
0
)
color
=
Color
;
if
(
Color
>=
0
)
else
color
=
UNVISIBLE_COLOR
;
color
=
Color
;
else
color
=
UNVISIBLE_COLOR
;
}
}
else
else
{
{
if
(
Color
>=
0
)
color
=
Color
;
if
(
Color
>=
0
)
else
color
=
ReturnLayerColor
(
LAYER_VALUEPART
);
color
=
Color
;
else
color
=
ReturnLayerColor
(
LAYER_VALUEPART
);
}
}
text_pos
.
x
=
LibEntry
->
m_Name
.
m_Pos
.
x
+
posX
;
text_pos
.
x
=
LibEntry
->
m_Name
.
m_Pos
.
x
+
posX
;
text_pos
.
y
=
posY
-
LibEntry
->
m_Name
.
m_Pos
.
y
;
text_pos
.
y
=
posY
-
LibEntry
->
m_Name
.
m_Pos
.
y
;
LineWidth
=
MAX
(
LibEntry
->
m_Name
.
m_Width
,
g_DrawMinimunLineWidth
);
LineWidth
=
MAX
(
LibEntry
->
m_Name
.
m_Width
,
g_DrawMinimunLineWidth
);
if
(
(
LibEntry
->
m_Name
.
m_Flags
&
IS_MOVED
)
==
0
)
if
(
(
LibEntry
->
m_Name
.
m_Flags
&
IS_MOVED
)
==
0
)
DrawGraphicText
(
panel
,
DC
,
text_pos
,
DrawGraphicText
(
panel
,
DC
,
text_pos
,
color
,
LibEntry
->
m_Name
.
m_Text
.
GetData
(),
color
,
LibEntry
->
m_Name
.
m_Text
.
GetData
(),
LibEntry
->
m_Name
.
m_Orient
?
TEXT_ORIENT_VERT
:
TEXT_ORIENT_HORIZ
,
LibEntry
->
m_Name
.
m_Orient
?
TEXT_ORIENT_VERT
:
TEXT_ORIENT_HORIZ
,
LibEntry
->
m_Name
.
m_Size
,
LibEntry
->
m_Name
.
m_Size
,
LibEntry
->
m_Name
.
m_HJustify
,
LibEntry
->
m_Name
.
m_VJustify
,
LineWidth
);
LibEntry
->
m_Name
.
m_HJustify
,
LibEntry
->
m_Name
.
m_VJustify
,
LineWidth
);
for
(
Field
=
LibEntry
->
Fields
;
Field
!=
NULL
;
Field
=
(
LibDrawField
*
)
Field
->
Pnext
)
for
(
Field
=
LibEntry
->
Fields
;
Field
!=
NULL
;
Field
=
(
LibDrawField
*
)
Field
->
Pnext
)
{
{
if
(
Field
->
m_Text
.
IsEmpty
()
)
return
;
if
(
Field
->
m_Text
.
IsEmpty
()
)
if
(
(
Field
->
m_Flags
&
IS_MOVED
)
!=
0
)
continue
;
return
;
if
(
(
Field
->
m_Flags
&
IS_MOVED
)
!=
0
)
continue
;
if
(
Field
->
m_Attributs
&
TEXT_NO_VISIBLE
)
if
(
Field
->
m_Attributs
&
TEXT_NO_VISIBLE
)
{
{
if
(
Color
>=
0
)
color
=
Color
;
if
(
Color
>=
0
)
else
color
=
UNVISIBLE_COLOR
;
color
=
Color
;
else
color
=
UNVISIBLE_COLOR
;
}
}
else
else
{
{
if
(
Color
>=
0
)
color
=
Color
;
if
(
Color
>=
0
)
else
color
=
ReturnLayerColor
(
LAYER_FIELDS
);
color
=
Color
;
else
color
=
ReturnLayerColor
(
LAYER_FIELDS
);
}
}
text_pos
.
x
=
Field
->
m_Pos
.
x
+
posX
;
text_pos
.
x
=
Field
->
m_Pos
.
x
+
posX
;
text_pos
.
y
=
posY
-
Field
->
m_Pos
.
y
;
text_pos
.
y
=
posY
-
Field
->
m_Pos
.
y
;
LineWidth
=
MAX
(
Field
->
m_Width
,
g_DrawMinimunLineWidth
);
LineWidth
=
MAX
(
Field
->
m_Width
,
g_DrawMinimunLineWidth
);
DrawGraphicText
(
panel
,
DC
,
text_pos
,
DrawGraphicText
(
panel
,
DC
,
text_pos
,
color
,
Field
->
m_Text
,
color
,
Field
->
m_Text
,
Field
->
m_Orient
?
TEXT_ORIENT_VERT
:
TEXT_ORIENT_HORIZ
,
Field
->
m_Orient
?
TEXT_ORIENT_VERT
:
TEXT_ORIENT_HORIZ
,
Field
->
m_Size
,
Field
->
m_Size
,
Field
->
m_HJustify
,
Field
->
m_VJustify
,
LineWidth
);
Field
->
m_HJustify
,
Field
->
m_VJustify
,
LineWidth
);
}
}
// Trac de l'ancre
// Trac de l'ancre
int
len
=
3
*
panel
->
GetZoom
();
int
len
=
3
*
panel
->
GetZoom
();
GRLine
(
&
panel
->
m_ClipBox
,
DC
,
posX
,
posY
-
len
,
posX
,
posY
+
len
,
0
,
color
);
GRLine
(
&
panel
->
m_ClipBox
,
DC
,
posX
,
posY
-
len
,
posX
,
posY
+
len
,
0
,
color
);
GRLine
(
&
panel
->
m_ClipBox
,
DC
,
posX
-
len
,
posY
,
posX
+
len
,
posY
,
0
,
color
);
GRLine
(
&
panel
->
m_ClipBox
,
DC
,
posX
-
len
,
posY
,
posX
+
len
,
posY
,
0
,
color
);
}
}
/*****************************************************************************
/*****************************************************************************
* Routine to draw the given part at given position, transformed/mirror as *
* Routine to draw the given part at given position, transformed/mirror as *
* specified, and in the given drawing mode. Only this one is visible... *
* specified, and in the given drawing mode. Only this one is visible... *
*****************************************************************************/
*****************************************************************************/
void
EDA_SchComponentStruct
::
Draw
(
WinEDA_DrawPanel
*
panel
,
wxDC
*
DC
,
void
EDA_SchComponentStruct
::
Draw
(
WinEDA_DrawPanel
*
panel
,
wxDC
*
DC
,
const
wxPoint
&
offset
,
int
DrawMode
,
int
Color
)
const
wxPoint
&
offset
,
int
DrawMode
,
int
Color
)
{
{
EDA_LibComponentStruct
*
Entry
;
EDA_LibComponentStruct
*
Entry
;
int
ii
;
int
ii
;
bool
dummy
=
FALSE
;
bool
dummy
=
FALSE
;
if
(
(
Entry
=
FindLibPart
(
m_ChipName
.
GetData
(),
wxEmptyString
,
FIND_ROOT
))
==
NULL
)
if
(
(
Entry
=
FindLibPart
(
m_ChipName
.
GetData
(),
wxEmptyString
,
FIND_ROOT
)
)
==
NULL
)
{
/* composant non trouv, on affiche un composant "dummy" */
{
/* composant non trouv, on affiche un composant "dummy" */
dummy
=
TRUE
;
dummy
=
TRUE
;
if
(
DummyCmp
==
NULL
)
CreateDummyCmp
();
if
(
DummyCmp
==
NULL
)
CreateDummyCmp
();
Entry
=
DummyCmp
;
Entry
=
DummyCmp
;
}
}
DrawLibPartAux
(
panel
,
DC
,
this
,
Entry
,
m_Pos
+
offset
,
DrawLibPartAux
(
panel
,
DC
,
this
,
Entry
,
m_Pos
+
offset
,
m_Transform
,
m_Transform
,
dummy
?
0
:
m_Multi
,
dummy
?
0
:
m_Multi
,
dummy
?
0
:
m_Convert
,
dummy
?
0
:
m_Convert
,
DrawMode
);
DrawMode
);
/* Trace des champs, avec placement et orientation selon orient. du
/* Trace des champs, avec placement et orientation selon orient. du
composant
*
composant
*/
*/
if
(
((
m_Field
[
REFERENCE
].
m_Attributs
&
TEXT_NO_VISIBLE
)
==
0
)
if
(
(
(
m_Field
[
REFERENCE
].
m_Attributs
&
TEXT_NO_VISIBLE
)
==
0
)
&&
!
(
m_Field
[
REFERENCE
].
m_Flags
&
IS_MOVED
)
)
&&
!
(
m_Field
[
REFERENCE
].
m_Flags
&
IS_MOVED
)
)
{
{
if
(
Entry
->
m_UnitCount
>
1
)
if
(
Entry
->
m_UnitCount
>
1
)
DrawTextField
(
panel
,
DC
,
&
m_Field
[
REFERENCE
],
1
,
DrawMode
);
DrawTextField
(
panel
,
DC
,
&
m_Field
[
REFERENCE
],
1
,
DrawMode
);
else
else
DrawTextField
(
panel
,
DC
,
&
m_Field
[
REFERENCE
],
0
,
DrawMode
);
DrawTextField
(
panel
,
DC
,
&
m_Field
[
REFERENCE
],
0
,
DrawMode
);
}
}
for
(
ii
=
VALUE
;
ii
<
NUMBER_OF_FIELDS
;
ii
++
)
for
(
ii
=
VALUE
;
ii
<
NUMBER_OF_FIELDS
;
ii
++
)
{
{
if
(
m_Field
[
ii
].
m_Flags
&
IS_MOVED
)
continue
;
if
(
m_Field
[
ii
].
m_Flags
&
IS_MOVED
)
DrawTextField
(
panel
,
DC
,
&
m_Field
[
ii
],
0
,
DrawMode
);
continue
;
DrawTextField
(
panel
,
DC
,
&
m_Field
[
ii
],
0
,
DrawMode
);
}
}
}
}
/***********************************************************/
/***********************************************************/
void
DrawTextField
(
WinEDA_DrawPanel
*
panel
,
wxDC
*
DC
,
void
DrawTextField
(
WinEDA_DrawPanel
*
panel
,
wxDC
*
DC
,
PartTextStruct
*
Field
,
int
IsMulti
,
int
DrawMode
)
PartTextStruct
*
Field
,
int
IsMulti
,
int
DrawMode
)
/***********************************************************/
/***********************************************************/
/* Routine de trace des textes type Field du composant.
/* Routine de trace des textes type Field du composant.
entree:
*
entree:
IsMulti: flag Non Null si il y a plusieurs parts par boitier.
*
IsMulti: flag Non Null si il y a plusieurs parts par boitier.
n'est utile que pour le champ reference pour ajouter a celui ci
*
n'est utile que pour le champ reference pour ajouter a celui ci
l'identification de la part ( A, B ... )
*
l'identification de la part ( A, B ... )
DrawMode: mode de trace
*
DrawMode: mode de trace
*/
*/
{
{
int
orient
,
color
;
int
orient
,
color
;
wxPoint
pos
;
/* Position des textes */
wxPoint
pos
;
/* Position des textes */
EDA_SchComponentStruct
*
DrawLibItem
=
(
EDA_SchComponentStruct
*
)
Field
->
m_Parent
;
EDA_SchComponentStruct
*
DrawLibItem
=
(
EDA_SchComponentStruct
*
)
Field
->
m_Parent
;
int
hjustify
,
vjustify
;
int
hjustify
,
vjustify
;
int
LineWidth
=
MAX
(
Field
->
m_Width
,
g_DrawMinimunLineWidth
);
int
LineWidth
=
MAX
(
Field
->
m_Width
,
g_DrawMinimunLineWidth
);
if
(
Field
->
m_Attributs
&
TEXT_NO_VISIBLE
)
return
;
if
(
Field
->
m_Attributs
&
TEXT_NO_VISIBLE
)
if
(
Field
->
IsVoid
()
)
return
;
return
;
if
(
Field
->
IsVoid
()
)
return
;
GRSetDrawMode
(
DC
,
DrawMode
);
GRSetDrawMode
(
DC
,
DrawMode
);
/* Calcul de la position des textes, selon orientation du composant */
/* Calcul de la position des textes, selon orientation du composant */
orient
=
Field
->
m_Orient
;
orient
=
Field
->
m_Orient
;
...
@@ -254,88 +279,98 @@ int LineWidth = MAX(Field->m_Width, g_DrawMinimunLineWidth);
...
@@ -254,88 +279,98 @@ int LineWidth = MAX(Field->m_Width, g_DrawMinimunLineWidth);
pos
.
x
=
Field
->
m_Pos
.
x
-
DrawLibItem
->
m_Pos
.
x
;
pos
.
x
=
Field
->
m_Pos
.
x
-
DrawLibItem
->
m_Pos
.
x
;
pos
.
y
=
Field
->
m_Pos
.
y
-
DrawLibItem
->
m_Pos
.
y
;
pos
.
y
=
Field
->
m_Pos
.
y
-
DrawLibItem
->
m_Pos
.
y
;
pos
=
DrawLibItem
->
GetScreenCoord
(
pos
);
pos
=
DrawLibItem
->
GetScreenCoord
(
pos
);
pos
.
x
+=
DrawLibItem
->
m_Pos
.
x
;
pos
.
x
+=
DrawLibItem
->
m_Pos
.
x
;
pos
.
y
+=
DrawLibItem
->
m_Pos
.
y
;
pos
.
y
+=
DrawLibItem
->
m_Pos
.
y
;
/* Y a t-il rotation (pour l'orientation, la justification)*/
/* Y a t-il rotation (pour l'orientation, la justification)*/
if
(
DrawLibItem
->
m_Transform
[
0
][
1
])
// Rotation du composant de 90deg
if
(
DrawLibItem
->
m_Transform
[
0
][
1
]
)
// Rotation du composant de 90deg
{
{
if
(
orient
==
TEXT_ORIENT_HORIZ
)
orient
=
TEXT_ORIENT_VERT
;
if
(
orient
==
TEXT_ORIENT_HORIZ
)
else
orient
=
TEXT_ORIENT_HORIZ
;
orient
=
TEXT_ORIENT_VERT
;
else
orient
=
TEXT_ORIENT_HORIZ
;
/* Y a t-il rotation, miroir (pour les justifications)*/
/* Y a t-il rotation, miroir (pour les justifications)*/
EXCHG
(
hjustify
,
vjustify
);
EXCHG
(
hjustify
,
vjustify
);
if
(
DrawLibItem
->
m_Transform
[
1
][
0
]
<
0
)
vjustify
=
-
vjustify
;
if
(
DrawLibItem
->
m_Transform
[
1
][
0
]
<
0
)
if
(
DrawLibItem
->
m_Transform
[
1
][
0
]
>
0
)
hjustify
=
-
hjustify
;
vjustify
=
-
vjustify
;
if
(
DrawLibItem
->
m_Transform
[
1
][
0
]
>
0
)
hjustify
=
-
hjustify
;
}
}
else
else
{
/* Texte horizontal: Y a t-il miroir (pour les justifications)*/
{
if
(
DrawLibItem
->
m_Transform
[
0
][
0
]
<
0
)
/* Texte horizontal: Y a t-il miroir (pour les justifications)*/
hjustify
=
-
hjustify
;
if
(
DrawLibItem
->
m_Transform
[
0
][
0
]
<
0
)
if
(
DrawLibItem
->
m_Transform
[
1
][
1
]
>
0
)
hjustify
=
-
hjustify
;
vjustify
=
-
vjustify
;
if
(
DrawLibItem
->
m_Transform
[
1
][
1
]
>
0
)
vjustify
=
-
vjustify
;
}
}
if
(
Field
->
m_FieldId
==
REFERENCE
)
if
(
Field
->
m_FieldId
==
REFERENCE
)
color
=
ReturnLayerColor
(
LAYER_REFERENCEPART
);
color
=
ReturnLayerColor
(
LAYER_REFERENCEPART
);
else
if
(
Field
->
m_FieldId
==
VALUE
)
else
if
(
Field
->
m_FieldId
==
VALUE
)
color
=
ReturnLayerColor
(
LAYER_VALUEPART
);
color
=
ReturnLayerColor
(
LAYER_VALUEPART
);
else
color
=
ReturnLayerColor
(
LAYER_FIELDS
);
else
color
=
ReturnLayerColor
(
LAYER_FIELDS
);
if
(
!
IsMulti
||
(
Field
->
m_FieldId
!=
REFERENCE
)
)
if
(
!
IsMulti
||
(
Field
->
m_FieldId
!=
REFERENCE
)
)
{
{
DrawGraphicText
(
panel
,
DC
,
pos
,
color
,
Field
->
m_Text
.
GetData
(),
DrawGraphicText
(
panel
,
DC
,
pos
,
color
,
Field
->
m_Text
.
GetData
(),
orient
?
TEXT_ORIENT_VERT
:
TEXT_ORIENT_HORIZ
,
orient
?
TEXT_ORIENT_VERT
:
TEXT_ORIENT_HORIZ
,
Field
->
m_Size
,
Field
->
m_Size
,
hjustify
,
vjustify
,
LineWidth
);
hjustify
,
vjustify
,
LineWidth
);
}
}
else
/* Le champ est la reference, et il y a plusieurs parts par boitier */
else
/* Le champ est la reference, et il y a plusieurs parts par boitier */
{
/* On ajoute alors A ou B ... a la reference */
{
/* On ajoute alors A ou B ... a la reference */
wxString
fulltext
=
Field
->
m_Text
;
wxString
fulltext
=
Field
->
m_Text
;
fulltext
.
Append
(
'A'
-
1
+
DrawLibItem
->
m_Multi
);
fulltext
.
Append
(
'A'
-
1
+
DrawLibItem
->
m_Multi
);
DrawGraphicText
(
panel
,
DC
,
pos
,
color
,
fulltext
.
GetData
(),
DrawGraphicText
(
panel
,
DC
,
pos
,
color
,
fulltext
.
GetData
(),
orient
?
TEXT_ORIENT_VERT
:
TEXT_ORIENT_HORIZ
,
orient
?
TEXT_ORIENT_VERT
:
TEXT_ORIENT_HORIZ
,
Field
->
m_Size
,
Field
->
m_Size
,
hjustify
,
vjustify
,
LineWidth
);
hjustify
,
vjustify
,
LineWidth
);
}
}
}
}
/********************************************************************************/
/********************************************************************************/
EDA_LibComponentStruct
*
FindLibPart
(
const
wxChar
*
Name
,
const
wxString
&
LibName
,
int
Alias
)
EDA_LibComponentStruct
*
FindLibPart
(
const
wxChar
*
Name
,
const
wxString
&
LibName
,
int
Alias
)
/********************************************************************************/
/********************************************************************************/
/*
/*
Routine to find a part in one of the libraries given its name.
*
Routine to find a part in one of the libraries given its name.
Name = Name of part.
*
Name = Name of part.
LibName = Name of Lib; if "": seach in all libs
*
LibName = Name of Lib; if "": seach in all libs
Alias = Flag: si flag != 0, retourne un pointeur sur une part ou un alias
*
Alias = Flag: si flag != 0, retourne un pointeur sur une part ou un alias
si flag = 0, retourne un pointeur sur une part meme si le nom
*
si flag = 0, retourne un pointeur sur une part meme si le nom
correspond a un alias
*
correspond a un alias
Alias = FIND_ROOT, ou Alias = FIND_ALIAS
*
Alias = FIND_ROOT, ou Alias = FIND_ALIAS
*/
*/
{
{
EDA_LibComponentStruct
*
Entry
;
EDA_LibComponentStruct
*
Entry
;
static
EDA_LibComponentStruct
DummyEntry
(
wxEmptyString
);
/* Used only to call PQFind. */
LibraryStruct
*
Lib
=
g_LibraryList
;
static
EDA_LibComponentStruct
DummyEntry
(
wxEmptyString
);
/* Used only to call PQFind. */
DummyEntry
.
m_Drawings
=
NULL
;
/* Used only to call PQFind. */
LibraryStruct
*
Lib
=
g_LibraryList
;
DummyEntry
.
m_Drawings
=
NULL
;
/* Used only to call PQFind. */
DummyEntry
.
m_Name
.
m_Text
=
Name
;
DummyEntry
.
m_Name
.
m_Text
=
Name
;
PQCompFunc
((
PQCompFuncType
)
LibraryEntryCompare
);
PQCompFunc
(
(
PQCompFuncType
)
LibraryEntryCompare
);
Entry
=
NULL
;
FindLibName
.
Empty
();
Entry
=
NULL
;
FindLibName
.
Empty
();
while
(
Lib
)
while
(
Lib
)
{
{
if
(
!
LibName
.
IsEmpty
()
)
if
(
!
LibName
.
IsEmpty
()
)
{
{
if
(
Lib
->
m_Name
!=
LibName
)
if
(
Lib
->
m_Name
!=
LibName
)
{
{
Lib
=
Lib
->
m_Pnext
;
continue
;
Lib
=
Lib
->
m_Pnext
;
continue
;
}
}
}
}
if
(
Lib
==
NULL
)
break
;
if
(
Lib
==
NULL
)
Entry
=
(
EDA_LibComponentStruct
*
)
PQFind
(
Lib
->
m_Entries
,
&
DummyEntry
);
break
;
if
(
Entry
!=
NULL
)
Entry
=
(
EDA_LibComponentStruct
*
)
PQFind
(
Lib
->
m_Entries
,
&
DummyEntry
);
if
(
Entry
!=
NULL
)
{
{
FindLibName
=
Lib
->
m_Name
;
FindLibName
=
Lib
->
m_Name
;
break
;
break
;
...
@@ -347,13 +382,14 @@ LibraryStruct *Lib = g_LibraryList;
...
@@ -347,13 +382,14 @@ LibraryStruct *Lib = g_LibraryList;
if
(
Entry
)
if
(
Entry
)
{
{
if
(
(
Entry
->
Type
!=
ROOT
)
&&
(
Alias
==
FIND_ROOT
)
)
if
(
(
Entry
->
Type
!=
ROOT
)
&&
(
Alias
==
FIND_ROOT
)
)
Entry
=
FindLibPart
(
((
EDA_LibCmpAliasStruct
*
)
Entry
)
->
m_RootName
.
GetData
()
,
Entry
=
FindLibPart
(
(
(
EDA_LibCmpAliasStruct
*
)
Entry
)
->
m_RootName
.
GetData
()
,
Lib
->
m_Name
,
FIND_ROOT
);
Lib
->
m_Name
,
FIND_ROOT
);
}
}
return
(
Entry
)
;
return
Entry
;
}
}
/*****************************************************************************
/*****************************************************************************
* Routine to draw the given part at given position, transformed/mirror as
* Routine to draw the given part at given position, transformed/mirror as
* specified, and in the given drawing mode.
* specified, and in the given drawing mode.
...
@@ -361,43 +397,49 @@ LibraryStruct *Lib = g_LibraryList;
...
@@ -361,43 +397,49 @@ LibraryStruct *Lib = g_LibraryList;
* else draw in color = Color
* else draw in color = Color
*****************************************************************************/
*****************************************************************************/
/* DrawMode = GrXOR, GrOR ..*/
/* DrawMode = GrXOR, GrOR ..*/
void
DrawLibPartAux
(
WinEDA_DrawPanel
*
panel
,
wxDC
*
DC
,
void
DrawLibPartAux
(
WinEDA_DrawPanel
*
panel
,
wxDC
*
DC
,
EDA_SchComponentStruct
*
Component
,
EDA_SchComponentStruct
*
Component
,
EDA_LibComponentStruct
*
Entry
,
EDA_LibComponentStruct
*
Entry
,
const
wxPoint
&
Pos
,
const
wxPoint
&
Pos
,
int
TransMat
[
2
][
2
],
int
TransMat
[
2
][
2
],
int
Multi
,
int
convert
,
int
DrawMode
,
int
Multi
,
int
convert
,
int
DrawMode
,
int
Color
,
bool
DrawPinText
)
int
Color
,
bool
DrawPinText
)
{
{
int
i
,
x1
,
y1
,
x2
,
y2
,
t1
,
t2
,
orient
;
int
i
,
x1
,
y1
,
x2
,
y2
,
t1
,
t2
,
orient
;
LibEDA_BaseStruct
*
DEntry
=
NULL
;
LibEDA_BaseStruct
*
DEntry
=
NULL
;
int
CharColor
;
int
CharColor
;
int
fill_option
;
int
fill_option
;
int
SetHightColor
;
int
SetHightColor
;
int
LineWidth
;
int
LineWidth
;
//#define GETCOLOR(l) Color < 0 ? (ReturnLayerColor(l)| SetHightColor) : Color;
//#define GETCOLOR(l) Color < 0 ? (ReturnLayerColor(l)| SetHightColor) : Color;
#define GETCOLOR(l) Color < 0 ? SetHightColor ? s_ItemSelectColor : (ReturnLayerColor(l)| SetHightColor) : Color;
#define GETCOLOR( l ) Color < 0 ? SetHightColor ?\
s_ItemSelectColor : (ReturnLayerColor( l ) | SetHightColor) : Color;
if
(
Entry
->
m_Drawings
==
NULL
)
return
;
if
(
Entry
->
m_Drawings
==
NULL
)
GRSetDrawMode
(
DC
,
DrawMode
);
return
;
GRSetDrawMode
(
DC
,
DrawMode
);
for
(
DEntry
=
Entry
->
m_Drawings
;
DEntry
!=
NULL
;
DEntry
=
DEntry
->
Next
()
)
for
(
DEntry
=
Entry
->
m_Drawings
;
DEntry
!=
NULL
;
DEntry
=
DEntry
->
Next
()
)
{
{
/* Elimination des elements non relatifs a l'unite */
/* Elimination des elements non relatifs a l'unite */
if
(
Multi
&&
DEntry
->
m_Unit
&&
(
DEntry
->
m_Unit
!=
Multi
)
)
continue
;
if
(
Multi
&&
DEntry
->
m_Unit
&&
(
DEntry
->
m_Unit
!=
Multi
)
)
continue
;
if
(
convert
&&
DEntry
->
m_Convert
&&
(
DEntry
->
m_Convert
!=
convert
)
)
if
(
convert
&&
DEntry
->
m_Convert
&&
(
DEntry
->
m_Convert
!=
convert
)
)
continue
;
continue
;
if
(
DEntry
->
m_Flags
&
IS_MOVED
)
continue
;
// Element en deplacement non trace
if
(
DEntry
->
m_Flags
&
IS_MOVED
)
continue
;
// Element en deplacement non trace
SetHightColor
=
(
DEntry
->
m_Selected
&
IS_SELECTED
)
?
HIGHT_LIGHT_FLAG
:
0
;
SetHightColor
=
(
DEntry
->
m_Selected
&
IS_SELECTED
)
?
HIGHT_LIGHT_FLAG
:
0
;
LineWidth
=
MAX
(
DEntry
->
m_Width
,
g_DrawMinimunLineWidth
);
LineWidth
=
MAX
(
DEntry
->
m_Width
,
g_DrawMinimunLineWidth
);
switch
(
DEntry
->
m_StructType
)
switch
(
DEntry
->
m_StructType
)
{
{
case
COMPONENT_ARC_DRAW_TYPE
:
case
COMPONENT_ARC_DRAW_TYPE
:
{
{
int
xc
,
yc
,
x2
,
y2
;
int
xc
,
yc
,
x2
,
y2
;
LibDrawArc
*
Arc
=
(
LibDrawArc
*
)
DEntry
;
LibDrawArc
*
Arc
=
(
LibDrawArc
*
)
DEntry
;
CharColor
=
GETCOLOR
(
LAYER_DEVICE
);
CharColor
=
GETCOLOR
(
LAYER_DEVICE
);
xc
=
Pos
.
x
+
TransMat
[
0
][
0
]
*
Arc
->
m_Pos
.
x
+
xc
=
Pos
.
x
+
TransMat
[
0
][
0
]
*
Arc
->
m_Pos
.
x
+
TransMat
[
0
][
1
]
*
Arc
->
m_Pos
.
y
;
TransMat
[
0
][
1
]
*
Arc
->
m_Pos
.
y
;
yc
=
Pos
.
y
+
TransMat
[
1
][
0
]
*
Arc
->
m_Pos
.
x
+
yc
=
Pos
.
y
+
TransMat
[
1
][
0
]
*
Arc
->
m_Pos
.
x
+
...
@@ -411,85 +453,94 @@ int LineWidth;
...
@@ -411,85 +453,94 @@ int LineWidth;
y1
=
Pos
.
y
+
TransMat
[
1
][
0
]
*
Arc
->
m_ArcEnd
.
x
+
y1
=
Pos
.
y
+
TransMat
[
1
][
0
]
*
Arc
->
m_ArcEnd
.
x
+
TransMat
[
1
][
1
]
*
Arc
->
m_ArcEnd
.
y
;
TransMat
[
1
][
1
]
*
Arc
->
m_ArcEnd
.
y
;
t1
=
Arc
->
t1
;
t2
=
Arc
->
t2
;
t1
=
Arc
->
t1
;
t2
=
Arc
->
t2
;
bool
swap
=
MapAngles
(
&
t1
,
&
t2
,
TransMat
);
bool
swap
=
MapAngles
(
&
t1
,
&
t2
,
TransMat
);
if
(
swap
)
{
EXCHG
(
x1
,
x2
);
EXCHG
(
y1
,
y2
)
}
if
(
swap
)
{
EXCHG
(
x1
,
x2
);
EXCHG
(
y1
,
y2
)
}
fill_option
=
Arc
->
m_Fill
&
(
~
g_PrintFillMask
);
fill_option
=
Arc
->
m_Fill
&
(
~
g_PrintFillMask
);
if
(
Color
<
0
)
// Normal Color Layer
if
(
Color
<
0
)
// Normal Color Layer
{
{
if
(
(
fill_option
==
FILLED_WITH_BG_BODYCOLOR
)
&&
!
g_IsPrinting
)
if
(
(
fill_option
==
FILLED_WITH_BG_BODYCOLOR
)
&&
!
g_IsPrinting
)
GRFilledArc
(
&
panel
->
m_ClipBox
,
DC
,
xc
,
yc
,
t1
,
t2
,
GRFilledArc
(
&
panel
->
m_ClipBox
,
DC
,
xc
,
yc
,
t1
,
t2
,
Arc
->
m_Rayon
,
Arc
->
m_Width
,
CharColor
,
Arc
->
m_Rayon
,
Arc
->
m_Width
,
CharColor
,
ReturnLayerColor
(
LAYER_DEVICE_BACKGROUND
)
);
ReturnLayerColor
(
LAYER_DEVICE_BACKGROUND
)
);
else
if
(
fill_option
==
FILLED_SHAPE
)
else
if
(
fill_option
==
FILLED_SHAPE
)
GRFilledArc
(
&
panel
->
m_ClipBox
,
DC
,
xc
,
yc
,
t1
,
t2
,
GRFilledArc
(
&
panel
->
m_ClipBox
,
DC
,
xc
,
yc
,
t1
,
t2
,
Arc
->
m_Rayon
,
CharColor
,
CharColor
);
Arc
->
m_Rayon
,
CharColor
,
CharColor
);
#ifdef DRAW_ARC_WITH_ANGLE
#ifdef DRAW_ARC_WITH_ANGLE
else
GRArc
(
&
panel
->
m_ClipBox
,
DC
,
xc
,
yc
,
t1
,
t2
,
else
Arc
->
m_Rayon
,
LineWidth
,
CharColor
);
GRArc
(
&
panel
->
m_ClipBox
,
DC
,
xc
,
yc
,
t1
,
t2
,
Arc
->
m_Rayon
,
LineWidth
,
CharColor
);
#else
#else
else
GRArc1
(
&
panel
->
m_ClipBox
,
DC
,
x1
,
y1
,
x2
,
y2
,
else
xc
,
yc
,
LineWidth
,
CharColor
);
GRArc1
(
&
panel
->
m_ClipBox
,
DC
,
x1
,
y1
,
x2
,
y2
,
xc
,
yc
,
LineWidth
,
CharColor
);
#endif
#endif
}
}
#ifdef DRAW_ARC_WITH_ANGLE
#ifdef DRAW_ARC_WITH_ANGLE
else
GRArc
(
&
panel
->
m_ClipBox
,
DC
,
xc
,
yc
,
t1
,
t2
,
else
Arc
->
m_Rayon
,
Circle
->
m_Width
,
CharColor
);
GRArc
(
&
panel
->
m_ClipBox
,
DC
,
xc
,
yc
,
t1
,
t2
,
Arc
->
m_Rayon
,
Circle
->
m_Width
,
CharColor
);
#else
#else
else
GRArc1
(
&
panel
->
m_ClipBox
,
DC
,
x1
,
y1
,
x2
,
y2
,
else
xc
,
yc
,
Arc
->
m_Width
,
CharColor
);
GRArc1
(
&
panel
->
m_ClipBox
,
DC
,
x1
,
y1
,
x2
,
y2
,
xc
,
yc
,
Arc
->
m_Width
,
CharColor
);
#endif
#endif
}
}
break
;
break
;
case
COMPONENT_CIRCLE_DRAW_TYPE
:
case
COMPONENT_CIRCLE_DRAW_TYPE
:
{
{
LibDrawCircle
*
Circle
=
(
LibDrawCircle
*
)
DEntry
;
LibDrawCircle
*
Circle
=
(
LibDrawCircle
*
)
DEntry
;
CharColor
=
GETCOLOR
(
LAYER_DEVICE
);
CharColor
=
GETCOLOR
(
LAYER_DEVICE
);
x1
=
Pos
.
x
+
TransMat
[
0
][
0
]
*
Circle
->
m_Pos
.
x
+
x1
=
Pos
.
x
+
TransMat
[
0
][
0
]
*
Circle
->
m_Pos
.
x
+
TransMat
[
0
][
1
]
*
Circle
->
m_Pos
.
y
;
TransMat
[
0
][
1
]
*
Circle
->
m_Pos
.
y
;
y1
=
Pos
.
y
+
TransMat
[
1
][
0
]
*
Circle
->
m_Pos
.
x
+
y1
=
Pos
.
y
+
TransMat
[
1
][
0
]
*
Circle
->
m_Pos
.
x
+
TransMat
[
1
][
1
]
*
Circle
->
m_Pos
.
y
;
TransMat
[
1
][
1
]
*
Circle
->
m_Pos
.
y
;
fill_option
=
Circle
->
m_Fill
&
(
~
g_PrintFillMask
);
fill_option
=
Circle
->
m_Fill
&
(
~
g_PrintFillMask
);
if
(
Color
<
0
)
if
(
Color
<
0
)
{
{
if
(
(
fill_option
==
FILLED_WITH_BG_BODYCOLOR
)
&&
!
g_IsPrinting
)
if
(
(
fill_option
==
FILLED_WITH_BG_BODYCOLOR
)
&&
!
g_IsPrinting
)
GRFilledCircle
(
&
panel
->
m_ClipBox
,
DC
,
x1
,
y1
,
GRFilledCircle
(
&
panel
->
m_ClipBox
,
DC
,
x1
,
y1
,
Circle
->
m_Rayon
,
LineWidth
,
CharColor
,
Circle
->
m_Rayon
,
LineWidth
,
CharColor
,
ReturnLayerColor
(
LAYER_DEVICE_BACKGROUND
));
ReturnLayerColor
(
LAYER_DEVICE_BACKGROUND
)
);
else
if
(
fill_option
==
FILLED_SHAPE
)
else
if
(
fill_option
==
FILLED_SHAPE
)
GRFilledCircle
(
&
panel
->
m_ClipBox
,
DC
,
x1
,
y1
,
GRFilledCircle
(
&
panel
->
m_ClipBox
,
DC
,
x1
,
y1
,
Circle
->
m_Rayon
,
0
,
CharColor
,
CharColor
);
Circle
->
m_Rayon
,
0
,
CharColor
,
CharColor
);
else
GRCircle
(
&
panel
->
m_ClipBox
,
DC
,
x1
,
y1
,
else
Circle
->
m_Rayon
,
LineWidth
,
CharColor
);
GRCircle
(
&
panel
->
m_ClipBox
,
DC
,
x1
,
y1
,
Circle
->
m_Rayon
,
LineWidth
,
CharColor
);
}
}
else
GRCircle
(
&
panel
->
m_ClipBox
,
DC
,
x1
,
y1
,
else
Circle
->
m_Rayon
,
LineWidth
,
CharColor
);
GRCircle
(
&
panel
->
m_ClipBox
,
DC
,
x1
,
y1
,
Circle
->
m_Rayon
,
LineWidth
,
CharColor
);
}
}
break
;
break
;
case
COMPONENT_GRAPHIC_TEXT_DRAW_TYPE
:
case
COMPONENT_GRAPHIC_TEXT_DRAW_TYPE
:
{
{
LibDrawText
*
Text
=
(
LibDrawText
*
)
DEntry
;
LibDrawText
*
Text
=
(
LibDrawText
*
)
DEntry
;
CharColor
=
GETCOLOR
(
LAYER_DEVICE
);
CharColor
=
GETCOLOR
(
LAYER_DEVICE
);
/* The text orientation may need to be flipped if the
/* The text orientation may need to be flipped if the
transformation matrix cuases xy axes to be flipped. */
*
transformation matrix cuases xy axes to be flipped. */
t1
=
(
TransMat
[
0
][
0
]
!=
0
)
^
(
Text
->
m_Horiz
!=
0
);
t1
=
(
TransMat
[
0
][
0
]
!=
0
)
^
(
Text
->
m_Horiz
!=
0
);
x1
=
Pos
.
x
+
TransMat
[
0
][
0
]
*
Text
->
m_Pos
.
x
x1
=
Pos
.
x
+
TransMat
[
0
][
0
]
*
Text
->
m_Pos
.
x
+
TransMat
[
0
][
1
]
*
Text
->
m_Pos
.
y
;
+
TransMat
[
0
][
1
]
*
Text
->
m_Pos
.
y
;
y1
=
Pos
.
y
+
TransMat
[
1
][
0
]
*
Text
->
m_Pos
.
x
y1
=
Pos
.
y
+
TransMat
[
1
][
0
]
*
Text
->
m_Pos
.
x
+
TransMat
[
1
][
1
]
*
Text
->
m_Pos
.
y
;
+
TransMat
[
1
][
1
]
*
Text
->
m_Pos
.
y
;
DrawGraphicText
(
panel
,
DC
,
wxPoint
(
x1
,
y1
),
CharColor
,
Text
->
m_Text
,
DrawGraphicText
(
panel
,
DC
,
wxPoint
(
x1
,
y1
),
CharColor
,
Text
->
m_Text
,
t1
?
TEXT_ORIENT_HORIZ
:
TEXT_ORIENT_VERT
,
t1
?
TEXT_ORIENT_HORIZ
:
TEXT_ORIENT_VERT
,
Text
->
m_Size
,
Text
->
m_Size
,
GR_TEXT_HJUSTIFY_CENTER
,
GR_TEXT_VJUSTIFY_CENTER
,
LineWidth
);
GR_TEXT_HJUSTIFY_CENTER
,
GR_TEXT_VJUSTIFY_CENTER
,
LineWidth
);
}
}
break
;
break
;
case
COMPONENT_RECT_DRAW_TYPE
:
case
COMPONENT_RECT_DRAW_TYPE
:
{
{
LibDrawSquare
*
Square
=
(
LibDrawSquare
*
)
DEntry
;
LibDrawSquare
*
Square
=
(
LibDrawSquare
*
)
DEntry
;
CharColor
=
GETCOLOR
(
LAYER_DEVICE
);
CharColor
=
GETCOLOR
(
LAYER_DEVICE
);
x1
=
Pos
.
x
+
TransMat
[
0
][
0
]
*
Square
->
m_Pos
.
x
x1
=
Pos
.
x
+
TransMat
[
0
][
0
]
*
Square
->
m_Pos
.
x
+
TransMat
[
0
][
1
]
*
Square
->
m_Pos
.
y
;
+
TransMat
[
0
][
1
]
*
Square
->
m_Pos
.
y
;
...
@@ -500,34 +551,36 @@ int LineWidth;
...
@@ -500,34 +551,36 @@ int LineWidth;
y2
=
Pos
.
y
+
TransMat
[
1
][
0
]
*
Square
->
m_End
.
x
y2
=
Pos
.
y
+
TransMat
[
1
][
0
]
*
Square
->
m_End
.
x
+
TransMat
[
1
][
1
]
*
Square
->
m_End
.
y
;
+
TransMat
[
1
][
1
]
*
Square
->
m_End
.
y
;
fill_option
=
Square
->
m_Fill
&
(
~
g_PrintFillMask
);
fill_option
=
Square
->
m_Fill
&
(
~
g_PrintFillMask
);
if
(
Color
<
0
)
if
(
Color
<
0
)
{
{
if
(
(
fill_option
==
FILLED_WITH_BG_BODYCOLOR
)
&&
!
g_IsPrinting
)
if
(
(
fill_option
==
FILLED_WITH_BG_BODYCOLOR
)
&&
!
g_IsPrinting
)
GRFilledRect
(
&
panel
->
m_ClipBox
,
DC
,
x1
,
y1
,
x2
,
y2
,
GRFilledRect
(
&
panel
->
m_ClipBox
,
DC
,
x1
,
y1
,
x2
,
y2
,
CharColor
,
LineWidth
,
CharColor
,
LineWidth
,
ReturnLayerColor
(
LAYER_DEVICE_BACKGROUND
));
ReturnLayerColor
(
LAYER_DEVICE_BACKGROUND
)
);
else
if
(
fill_option
==
FILLED_SHAPE
)
else
if
(
fill_option
==
FILLED_SHAPE
)
GRFilledRect
(
&
panel
->
m_ClipBox
,
DC
,
x1
,
y1
,
x2
,
y2
,
GRFilledRect
(
&
panel
->
m_ClipBox
,
DC
,
x1
,
y1
,
x2
,
y2
,
CharColor
,
CharColor
);
CharColor
,
CharColor
);
else
GRRect
(
&
panel
->
m_ClipBox
,
DC
,
x1
,
y1
,
x2
,
y2
,
else
LineWidth
,
CharColor
);
GRRect
(
&
panel
->
m_ClipBox
,
DC
,
x1
,
y1
,
x2
,
y2
,
LineWidth
,
CharColor
);
}
}
else
GRRect
(
&
panel
->
m_ClipBox
,
DC
,
x1
,
y1
,
x2
,
y2
,
else
LineWidth
,
CharColor
);
GRRect
(
&
panel
->
m_ClipBox
,
DC
,
x1
,
y1
,
x2
,
y2
,
LineWidth
,
CharColor
);
}
}
break
;
break
;
case
COMPONENT_PIN_DRAW_TYPE
:
/* Trace des Pins */
case
COMPONENT_PIN_DRAW_TYPE
:
/* Trace des Pins */
{
{
LibDrawPin
*
Pin
=
(
LibDrawPin
*
)
DEntry
;
LibDrawPin
*
Pin
=
(
LibDrawPin
*
)
DEntry
;
if
(
Pin
->
m_Attributs
&
PINNOTDRAW
)
if
(
Pin
->
m_Attributs
&
PINNOTDRAW
)
{
{
if
(
(
ActiveScreen
->
m_Type
==
SCHEMATIC_FRAME
)
&&
if
(
(
ActiveScreen
->
m_Type
==
SCHEMATIC_FRAME
)
!
g_ShowAllPins
)
&&
!
g_ShowAllPins
)
break
;
break
;
}
}
/* Calcul de l'orientation reelle de la Pin */
/* Calcul de l'orientation reelle de la Pin */
orient
=
Pin
->
ReturnPinDrawOrient
(
TransMat
);
orient
=
Pin
->
ReturnPinDrawOrient
(
TransMat
);
/* Calcul de la position du point de reference */
/* Calcul de la position du point de reference */
x2
=
Pos
.
x
+
(
TransMat
[
0
][
0
]
*
Pin
->
m_Pos
.
x
)
x2
=
Pos
.
x
+
(
TransMat
[
0
][
0
]
*
Pin
->
m_Pos
.
x
)
...
@@ -536,37 +589,38 @@ int LineWidth;
...
@@ -536,37 +589,38 @@ int LineWidth;
+
(
TransMat
[
1
][
1
]
*
Pin
->
m_Pos
.
y
);
+
(
TransMat
[
1
][
1
]
*
Pin
->
m_Pos
.
y
);
/* Dessin de la pin et du symbole special associe */
/* Dessin de la pin et du symbole special associe */
CharColor
=
GETCOLOR
(
LAYER_PIN
);
CharColor
=
GETCOLOR
(
LAYER_PIN
);
Pin
->
DrawPinSymbol
(
panel
,
DC
,
wxPoint
(
x2
,
y2
)
,
orient
,
DrawMode
,
CharColor
);
Pin
->
DrawPinSymbol
(
panel
,
DC
,
wxPoint
(
x2
,
y2
)
,
orient
,
DrawMode
,
CharColor
);
if
(
DrawPinText
)
if
(
DrawPinText
)
{
{
wxPoint
pinpos
(
x2
,
y2
);
wxPoint
pinpos
(
x2
,
y2
);
CharColor
=
SetHightColor
?
s_ItemSelectColor
:
Color
;
CharColor
=
SetHightColor
?
s_ItemSelectColor
:
Color
;
Pin
->
DrawPinTexts
(
panel
,
DC
,
pinpos
,
orient
,
Pin
->
DrawPinTexts
(
panel
,
DC
,
pinpos
,
orient
,
Entry
->
m_TextInside
,
Entry
->
m_TextInside
,
Entry
->
m_DrawPinNum
,
Entry
->
m_DrawPinName
,
Entry
->
m_DrawPinNum
,
Entry
->
m_DrawPinName
,
CharColor
,
DrawMode
);
CharColor
,
DrawMode
);
}
}
}
}
break
;
break
;
case
COMPONENT_POLYLINE_DRAW_TYPE
:
case
COMPONENT_POLYLINE_DRAW_TYPE
:
{
{
LibDrawPolyline
*
polyline
=
(
LibDrawPolyline
*
)
DEntry
;
LibDrawPolyline
*
polyline
=
(
LibDrawPolyline
*
)
DEntry
;
CharColor
=
GETCOLOR
(
LAYER_DEVICE
);
CharColor
=
GETCOLOR
(
LAYER_DEVICE
);
if
(
Buf_Poly_Drawings
==
NULL
)
if
(
Buf_Poly_Drawings
==
NULL
)
{
{
Buf_Poly_Size
=
polyline
->
n
;
Buf_Poly_Size
=
polyline
->
n
;
Buf_Poly_Drawings
=
(
int
*
)
MyMalloc
(
sizeof
(
int
)
*
2
*
Buf_Poly_Size
);
Buf_Poly_Drawings
=
(
int
*
)
MyMalloc
(
sizeof
(
int
)
*
2
*
Buf_Poly_Size
);
}
}
else
if
(
Buf_Poly_Size
<
polyline
->
n
)
else
if
(
Buf_Poly_Size
<
polyline
->
n
)
{
{
Buf_Poly_Size
=
polyline
->
n
;
Buf_Poly_Size
=
polyline
->
n
;
Buf_Poly_Drawings
=
(
int
*
)
realloc
(
Buf_Poly_Drawings
,
Buf_Poly_Drawings
=
(
int
*
)
realloc
(
Buf_Poly_Drawings
,
sizeof
(
int
)
*
2
*
Buf_Poly_Size
);
sizeof
(
int
)
*
2
*
Buf_Poly_Size
);
}
}
for
(
i
=
0
;
i
<
polyline
->
n
;
i
++
)
for
(
i
=
0
;
i
<
polyline
->
n
;
i
++
)
{
{
Buf_Poly_Drawings
[
i
*
2
]
=
Pos
.
x
+
Buf_Poly_Drawings
[
i
*
2
]
=
Pos
.
x
+
TransMat
[
0
][
0
]
*
polyline
->
PolyList
[
i
*
2
]
+
TransMat
[
0
][
0
]
*
polyline
->
PolyList
[
i
*
2
]
+
...
@@ -575,161 +629,185 @@ int LineWidth;
...
@@ -575,161 +629,185 @@ int LineWidth;
TransMat
[
1
][
0
]
*
polyline
->
PolyList
[
i
*
2
]
+
TransMat
[
1
][
0
]
*
polyline
->
PolyList
[
i
*
2
]
+
TransMat
[
1
][
1
]
*
polyline
->
PolyList
[
i
*
2
+
1
];
TransMat
[
1
][
1
]
*
polyline
->
PolyList
[
i
*
2
+
1
];
}
}
fill_option
=
polyline
->
m_Fill
&
(
~
g_PrintFillMask
);
fill_option
=
polyline
->
m_Fill
&
(
~
g_PrintFillMask
);
if
(
Color
<
0
)
if
(
Color
<
0
)
{
{
if
(
(
fill_option
==
FILLED_WITH_BG_BODYCOLOR
)
&&
!
g_IsPrinting
)
if
(
(
fill_option
==
FILLED_WITH_BG_BODYCOLOR
)
&&
!
g_IsPrinting
)
GRPoly
(
&
panel
->
m_ClipBox
,
DC
,
polyline
->
n
,
GRPoly
(
&
panel
->
m_ClipBox
,
DC
,
polyline
->
n
,
Buf_Poly_Drawings
,
1
,
LineWidth
,
CharColor
,
Buf_Poly_Drawings
,
1
,
LineWidth
,
CharColor
,
ReturnLayerColor
(
LAYER_DEVICE_BACKGROUND
));
ReturnLayerColor
(
LAYER_DEVICE_BACKGROUND
)
);
else
if
(
fill_option
==
FILLED_SHAPE
)
else
if
(
fill_option
==
FILLED_SHAPE
)
GRPoly
(
&
panel
->
m_ClipBox
,
DC
,
polyline
->
n
,
GRPoly
(
&
panel
->
m_ClipBox
,
DC
,
polyline
->
n
,
Buf_Poly_Drawings
,
1
,
LineWidth
,
CharColor
,
CharColor
);
Buf_Poly_Drawings
,
1
,
LineWidth
,
CharColor
,
CharColor
);
else
GRPoly
(
&
panel
->
m_ClipBox
,
DC
,
polyline
->
n
,
else
Buf_Poly_Drawings
,
0
,
LineWidth
,
CharColor
,
CharColor
);
GRPoly
(
&
panel
->
m_ClipBox
,
DC
,
polyline
->
n
,
Buf_Poly_Drawings
,
0
,
LineWidth
,
CharColor
,
CharColor
);
}
}
else
GRPoly
(
&
panel
->
m_ClipBox
,
DC
,
polyline
->
n
,
else
Buf_Poly_Drawings
,
0
,
LineWidth
,
CharColor
,
CharColor
);
GRPoly
(
&
panel
->
m_ClipBox
,
DC
,
polyline
->
n
,
Buf_Poly_Drawings
,
0
,
LineWidth
,
CharColor
,
CharColor
);
}
}
break
;
break
;
default
:
default
:
wxBell
();
wxBell
();
break
;
break
;
}
/* Fin Switch */
}
}
/* Fin Boucle de dessin */
if
(
g_DebugLevel
>
4
)
/* Draw the component boundary box */
/* Fin Switch */
}
/* Fin Boucle de dessin */
if
(
g_DebugLevel
>
4
)
/* Draw the component boundary box */
{
{
EDA_Rect
BoundaryBox
;
EDA_Rect
BoundaryBox
;
if
(
Component
)
BoundaryBox
=
Component
->
GetBoundaryBox
();
if
(
Component
)
else
BoundaryBox
=
Entry
->
GetBoundaryBox
(
Multi
,
convert
);
BoundaryBox
=
Component
->
GetBoundaryBox
();
else
BoundaryBox
=
Entry
->
GetBoundaryBox
(
Multi
,
convert
);
x1
=
BoundaryBox
.
GetX
();
x1
=
BoundaryBox
.
GetX
();
y1
=
BoundaryBox
.
GetY
();
y1
=
BoundaryBox
.
GetY
();
x2
=
BoundaryBox
.
GetRight
();
x2
=
BoundaryBox
.
GetRight
();
y2
=
BoundaryBox
.
GetBottom
();
y2
=
BoundaryBox
.
GetBottom
();
GRRect
(
&
panel
->
m_ClipBox
,
DC
,
x1
,
y1
,
x2
,
y2
,
BROWN
);
GRRect
(
&
panel
->
m_ClipBox
,
DC
,
x1
,
y1
,
x2
,
y2
,
BROWN
);
BoundaryBox
=
Component
->
m_Field
[
REFERENCE
].
GetBoundaryBox
();
BoundaryBox
=
Component
->
m_Field
[
REFERENCE
].
GetBoundaryBox
();
x1
=
BoundaryBox
.
GetX
();
x1
=
BoundaryBox
.
GetX
();
y1
=
BoundaryBox
.
GetY
();
y1
=
BoundaryBox
.
GetY
();
x2
=
BoundaryBox
.
GetRight
();
x2
=
BoundaryBox
.
GetRight
();
y2
=
BoundaryBox
.
GetBottom
();
y2
=
BoundaryBox
.
GetBottom
();
GRRect
(
&
panel
->
m_ClipBox
,
DC
,
x1
,
y1
,
x2
,
y2
,
BROWN
);
GRRect
(
&
panel
->
m_ClipBox
,
DC
,
x1
,
y1
,
x2
,
y2
,
BROWN
);
BoundaryBox
=
Component
->
m_Field
[
VALUE
].
GetBoundaryBox
();
BoundaryBox
=
Component
->
m_Field
[
VALUE
].
GetBoundaryBox
();
x1
=
BoundaryBox
.
GetX
();
x1
=
BoundaryBox
.
GetX
();
y1
=
BoundaryBox
.
GetY
();
y1
=
BoundaryBox
.
GetY
();
x2
=
BoundaryBox
.
GetRight
();
x2
=
BoundaryBox
.
GetRight
();
y2
=
BoundaryBox
.
GetBottom
();
y2
=
BoundaryBox
.
GetBottom
();
GRRect
(
&
panel
->
m_ClipBox
,
DC
,
x1
,
y1
,
x2
,
y2
,
BROWN
);
GRRect
(
&
panel
->
m_ClipBox
,
DC
,
x1
,
y1
,
x2
,
y2
,
BROWN
);
}
}
}
}
/********************************************************************************/
/********************************************************************************/
void
LibDrawPin
::
DrawPinSymbol
(
WinEDA_DrawPanel
*
panel
,
wxDC
*
DC
,
void
LibDrawPin
::
DrawPinSymbol
(
WinEDA_DrawPanel
*
panel
,
wxDC
*
DC
,
const
wxPoint
&
pin_pos
,
int
orient
,
int
DrawMode
,
int
Color
)
const
wxPoint
&
pin_pos
,
int
orient
,
int
DrawMode
,
int
Color
)
/*******************************************************************************/
/*******************************************************************************/
/* Draw the pin symbol (without texts)
/* Draw the pin symbol (without texts)
if Color != 0 draw with Color, eles with the normal pin color
*
if Color != 0 draw with Color, eles with the normal pin color
*/
*/
{
{
int
MapX1
,
MapY1
,
x1
,
y1
;
int
MapX1
,
MapY1
,
x1
,
y1
;
int
color
;
int
color
;
int
width
=
MAX
(
m_Width
,
g_DrawMinimunLineWidth
);
int
width
=
MAX
(
m_Width
,
g_DrawMinimunLineWidth
);
int
posX
=
pin_pos
.
x
,
posY
=
pin_pos
.
y
,
len
=
m_PinLen
;
int
posX
=
pin_pos
.
x
,
posY
=
pin_pos
.
y
,
len
=
m_PinLen
;
if
(
Color
>=
0
)
color
=
Color
;
if
(
Color
>=
0
)
else
color
=
ReturnLayerColor
(
LAYER_PIN
);
color
=
Color
;
GRSetDrawMode
(
DC
,
DrawMode
);
else
color
=
ReturnLayerColor
(
LAYER_PIN
);
GRSetDrawMode
(
DC
,
DrawMode
);
MapX1
=
MapY1
=
0
;
x1
=
posX
;
y1
=
posY
;
MapX1
=
MapY1
=
0
;
x1
=
posX
;
y1
=
posY
;
switch
(
orient
)
switch
(
orient
)
{
{
case
PIN_UP
:
case
PIN_UP
:
y1
=
posY
-
len
;
MapY1
=
1
;
y1
=
posY
-
len
;
MapY1
=
1
;
break
;
break
;
case
PIN_DOWN
:
case
PIN_DOWN
:
y1
=
posY
+
len
;
MapY1
=
-
1
;
y1
=
posY
+
len
;
MapY1
=
-
1
;
break
;
break
;
case
PIN_LEFT
:
case
PIN_LEFT
:
x1
=
posX
-
len
,
MapX1
=
1
;
x1
=
posX
-
len
,
MapX1
=
1
;
break
;
break
;
case
PIN_RIGHT
:
case
PIN_RIGHT
:
x1
=
posX
+
len
;
MapX1
=
-
1
;
x1
=
posX
+
len
;
MapX1
=
-
1
;
break
;
break
;
}
}
if
(
m_PinShape
&
INVERT
)
if
(
m_PinShape
&
INVERT
)
{
{
GRCircle
(
&
panel
->
m_ClipBox
,
DC
,
MapX1
*
INVERT_PIN_RADIUS
+
x1
,
GRCircle
(
&
panel
->
m_ClipBox
,
DC
,
MapX1
*
INVERT_PIN_RADIUS
+
x1
,
MapY1
*
INVERT_PIN_RADIUS
+
y1
,
MapY1
*
INVERT_PIN_RADIUS
+
y1
,
INVERT_PIN_RADIUS
,
width
,
color
);
INVERT_PIN_RADIUS
,
width
,
color
);
GRMoveTo
(
MapX1
*
INVERT_PIN_RADIUS
*
2
+
x1
,
GRMoveTo
(
MapX1
*
INVERT_PIN_RADIUS
*
2
+
x1
,
MapY1
*
INVERT_PIN_RADIUS
*
2
+
y1
);
MapY1
*
INVERT_PIN_RADIUS
*
2
+
y1
);
GRLineTo
(
&
panel
->
m_ClipBox
,
DC
,
posX
,
posY
,
width
,
color
);
GRLineTo
(
&
panel
->
m_ClipBox
,
DC
,
posX
,
posY
,
width
,
color
);
}
}
else
else
{
{
GRMoveTo
(
x1
,
y1
);
GRMoveTo
(
x1
,
y1
);
GRLineTo
(
&
panel
->
m_ClipBox
,
DC
,
posX
,
posY
,
width
,
color
);
GRLineTo
(
&
panel
->
m_ClipBox
,
DC
,
posX
,
posY
,
width
,
color
);
}
}
if
(
m_PinShape
&
CLOCK
)
if
(
m_PinShape
&
CLOCK
)
{
{
if
(
MapY1
==
0
)
/* MapX1 = +- 1 */
if
(
MapY1
==
0
)
/* MapX1 = +- 1 */
{
{
GRMoveTo
(
x1
,
y1
+
CLOCK_PIN_DIM
);
GRMoveTo
(
x1
,
y1
+
CLOCK_PIN_DIM
);
GRLineTo
(
&
panel
->
m_ClipBox
,
DC
,
x1
-
MapX1
*
CLOCK_PIN_DIM
,
y1
,
width
,
color
);
GRLineTo
(
&
panel
->
m_ClipBox
,
DC
,
x1
-
MapX1
*
CLOCK_PIN_DIM
,
y1
,
width
,
color
);
GRLineTo
(
&
panel
->
m_ClipBox
,
DC
,
x1
,
y1
-
CLOCK_PIN_DIM
,
width
,
color
);
GRLineTo
(
&
panel
->
m_ClipBox
,
DC
,
x1
,
y1
-
CLOCK_PIN_DIM
,
width
,
color
);
}
}
else
/* MapX1 = 0 */
else
/* MapX1 = 0 */
{
{
GRMoveTo
(
x1
+
CLOCK_PIN_DIM
,
y1
);
GRMoveTo
(
x1
+
CLOCK_PIN_DIM
,
y1
);
GRLineTo
(
&
panel
->
m_ClipBox
,
DC
,
x1
,
y1
-
MapY1
*
CLOCK_PIN_DIM
,
width
,
color
);
GRLineTo
(
&
panel
->
m_ClipBox
,
DC
,
x1
,
y1
-
MapY1
*
CLOCK_PIN_DIM
,
width
,
color
);
GRLineTo
(
&
panel
->
m_ClipBox
,
DC
,
x1
-
CLOCK_PIN_DIM
,
y1
,
width
,
color
);
GRLineTo
(
&
panel
->
m_ClipBox
,
DC
,
x1
-
CLOCK_PIN_DIM
,
y1
,
width
,
color
);
}
}
}
}
if
(
m_PinShape
&
LOWLEVEL_IN
)
/* IEEE symbol "Active Low Input" */
if
(
m_PinShape
&
LOWLEVEL_IN
)
/* IEEE symbol "Active Low Input" */
{
{
if
(
MapY1
==
0
)
/* MapX1 = +- 1 */
if
(
MapY1
==
0
)
/* MapX1 = +- 1 */
{
{
GRMoveTo
(
x1
+
MapX1
*
IEEE_SYMBOL_PIN_DIM
*
2
,
y1
);
GRMoveTo
(
x1
+
MapX1
*
IEEE_SYMBOL_PIN_DIM
*
2
,
y1
);
GRLineTo
(
&
panel
->
m_ClipBox
,
DC
,
x1
+
MapX1
*
IEEE_SYMBOL_PIN_DIM
*
2
,
GRLineTo
(
&
panel
->
m_ClipBox
,
DC
,
x1
+
MapX1
*
IEEE_SYMBOL_PIN_DIM
*
2
,
y1
-
IEEE_SYMBOL_PIN_DIM
,
width
,
color
);
y1
-
IEEE_SYMBOL_PIN_DIM
,
width
,
color
);
GRLineTo
(
&
panel
->
m_ClipBox
,
DC
,
x1
,
y1
,
width
,
color
);
GRLineTo
(
&
panel
->
m_ClipBox
,
DC
,
x1
,
y1
,
width
,
color
);
}
}
else
/* MapX1 = 0 */
else
/* MapX1 = 0 */
{
{
GRMoveTo
(
x1
,
y1
+
MapY1
*
IEEE_SYMBOL_PIN_DIM
*
2
);
GRMoveTo
(
x1
,
y1
+
MapY1
*
IEEE_SYMBOL_PIN_DIM
*
2
);
GRLineTo
(
&
panel
->
m_ClipBox
,
DC
,
x1
-
IEEE_SYMBOL_PIN_DIM
,
GRLineTo
(
&
panel
->
m_ClipBox
,
DC
,
x1
-
IEEE_SYMBOL_PIN_DIM
,
y1
+
MapY1
*
IEEE_SYMBOL_PIN_DIM
*
2
,
width
,
color
);
y1
+
MapY1
*
IEEE_SYMBOL_PIN_DIM
*
2
,
width
,
color
);
GRLineTo
(
&
panel
->
m_ClipBox
,
DC
,
x1
,
y1
,
width
,
color
);
GRLineTo
(
&
panel
->
m_ClipBox
,
DC
,
x1
,
y1
,
width
,
color
);
}
}
}
}
if
(
m_PinShape
&
LOWLEVEL_OUT
)
/* IEEE symbol "Active Low Output" */
if
(
m_PinShape
&
LOWLEVEL_OUT
)
/* IEEE symbol "Active Low Output" */
{
{
if
(
MapY1
==
0
)
/* MapX1 = +- 1 */
if
(
MapY1
==
0
)
/* MapX1 = +- 1 */
{
{
GRMoveTo
(
x1
,
y1
-
IEEE_SYMBOL_PIN_DIM
);
GRMoveTo
(
x1
,
y1
-
IEEE_SYMBOL_PIN_DIM
);
GRLineTo
(
&
panel
->
m_ClipBox
,
DC
,
x1
+
MapX1
*
IEEE_SYMBOL_PIN_DIM
*
2
,
y1
,
width
,
color
);
GRLineTo
(
&
panel
->
m_ClipBox
,
DC
,
x1
+
MapX1
*
IEEE_SYMBOL_PIN_DIM
*
2
,
y1
,
width
,
color
);
}
}
else
/* MapX1 = 0 */
else
/* MapX1 = 0 */
{
{
GRMoveTo
(
x1
-
IEEE_SYMBOL_PIN_DIM
,
y1
);
GRMoveTo
(
x1
-
IEEE_SYMBOL_PIN_DIM
,
y1
);
GRLineTo
(
&
panel
->
m_ClipBox
,
DC
,
x1
,
y1
+
MapY1
*
IEEE_SYMBOL_PIN_DIM
*
2
,
width
,
color
);
GRLineTo
(
&
panel
->
m_ClipBox
,
DC
,
x1
,
y1
+
MapY1
*
IEEE_SYMBOL_PIN_DIM
*
2
,
width
,
color
);
}
}
}
}
/* Draw the pin end target (active end of the pin) */
/* Draw the pin end target (active end of the pin) */
if
(
!
g_IsPrinting
)
// Draw but do not print the pin end target 1 pixel width */
if
(
!
g_IsPrinting
)
// Draw but do not print the pin end target 1 pixel width */
GRCircle
(
&
panel
->
m_ClipBox
,
DC
,
posX
,
posY
,
TARGET_PIN_DIAM
,
0
,
color
);
GRCircle
(
&
panel
->
m_ClipBox
,
DC
,
posX
,
posY
,
TARGET_PIN_DIAM
,
0
,
color
);
}
}
...
@@ -744,53 +822,55 @@ int posX = pin_pos.x, posY = pin_pos.y, len = m_PinLen;
...
@@ -744,53 +822,55 @@ int posX = pin_pos.x, posY = pin_pos.y, len = m_PinLen;
* transform (only mirror and rotate so it remains on the unit circle) to *
* transform (only mirror and rotate so it remains on the unit circle) to *
* a new point which is used to detect new angle. *
* a new point which is used to detect new angle. *
*****************************************************************************/
*****************************************************************************/
bool
MapAngles
(
int
*
Angle1
,
int
*
Angle2
,
int
TransMat
[
2
][
2
]
)
bool
MapAngles
(
int
*
Angle1
,
int
*
Angle2
,
int
TransMat
[
2
][
2
]
)
{
{
int
Angle
,
Delta
;
int
Angle
,
Delta
;
double
x
,
y
,
t
;
double
x
,
y
,
t
;
bool
swap
=
FALSE
;
bool
swap
=
FALSE
;
Delta
=
*
Angle2
-
*
Angle1
;
Delta
=
*
Angle2
-
*
Angle1
;
if
(
Delta
>=
1800
)
if
(
Delta
>=
1800
)
{
{
*
Angle1
-=
1
;
*
Angle1
-=
1
;
*
Angle2
+=
1
;
*
Angle2
+=
1
;
}
}
x
=
cos
(
*
Angle1
*
M_PI
/
1800.0
);
x
=
cos
(
*
Angle1
*
M_PI
/
1800.0
);
y
=
sin
(
*
Angle1
*
M_PI
/
1800.0
);
y
=
sin
(
*
Angle1
*
M_PI
/
1800.0
);
t
=
x
*
TransMat
[
0
][
0
]
+
y
*
TransMat
[
0
][
1
];
t
=
x
*
TransMat
[
0
][
0
]
+
y
*
TransMat
[
0
][
1
];
y
=
x
*
TransMat
[
1
][
0
]
+
y
*
TransMat
[
1
][
1
];
y
=
x
*
TransMat
[
1
][
0
]
+
y
*
TransMat
[
1
][
1
];
x
=
t
;
x
=
t
;
*
Angle1
=
(
int
)
(
atan2
(
y
,
x
)
*
1800.0
/
M_PI
+
0.5
);
*
Angle1
=
(
int
)
(
atan2
(
y
,
x
)
*
1800.0
/
M_PI
+
0.5
);
x
=
cos
(
*
Angle2
*
M_PI
/
1800.0
);
x
=
cos
(
*
Angle2
*
M_PI
/
1800.0
);
y
=
sin
(
*
Angle2
*
M_PI
/
1800.0
);
y
=
sin
(
*
Angle2
*
M_PI
/
1800.0
);
t
=
x
*
TransMat
[
0
][
0
]
+
y
*
TransMat
[
0
][
1
];
t
=
x
*
TransMat
[
0
][
0
]
+
y
*
TransMat
[
0
][
1
];
y
=
x
*
TransMat
[
1
][
0
]
+
y
*
TransMat
[
1
][
1
];
y
=
x
*
TransMat
[
1
][
0
]
+
y
*
TransMat
[
1
][
1
];
x
=
t
;
x
=
t
;
*
Angle2
=
(
int
)
(
atan2
(
y
,
x
)
*
1800.0
/
M_PI
+
0.5
);
*
Angle2
=
(
int
)
(
atan2
(
y
,
x
)
*
1800.0
/
M_PI
+
0.5
);
NORMALIZE_ANGLE
(
*
Angle1
);
NORMALIZE_ANGLE
(
*
Angle1
);
NORMALIZE_ANGLE
(
*
Angle2
);
NORMALIZE_ANGLE
(
*
Angle2
);
if
(
*
Angle2
<
*
Angle1
)
*
Angle2
+=
3600
;
if
(
*
Angle2
<
*
Angle1
)
*
Angle2
+=
3600
;
if
(
*
Angle2
-
*
Angle1
>
1800
)
if
(
*
Angle2
-
*
Angle1
>
1800
)
{
/* Need to swap the two angles. */
{
/* Need to swap the two angles. */
Angle
=
(
*
Angle1
);
Angle
=
(
*
Angle1
);
*
Angle1
=
(
*
Angle2
);
*
Angle1
=
(
*
Angle2
);
*
Angle2
=
Angle
;
*
Angle2
=
Angle
;
NORMALIZE_ANGLE
(
*
Angle1
);
NORMALIZE_ANGLE
(
*
Angle1
);
NORMALIZE_ANGLE
(
*
Angle2
);
NORMALIZE_ANGLE
(
*
Angle2
);
if
(
*
Angle2
<
*
Angle1
)
*
Angle2
+=
3600
;
if
(
*
Angle2
<
*
Angle1
)
*
Angle2
+=
3600
;
swap
=
TRUE
;
swap
=
TRUE
;
}
}
if
(
Delta
>=
1800
)
if
(
Delta
>=
1800
)
{
{
*
Angle1
+=
1
;
*
Angle1
+=
1
;
*
Angle2
-=
1
;
*
Angle2
-=
1
;
}
}
return
swap
;
return
swap
;
...
@@ -801,58 +881,58 @@ bool swap = FALSE;
...
@@ -801,58 +881,58 @@ bool swap = FALSE;
* Routine to display an outline version of given library entry. *
* Routine to display an outline version of given library entry. *
* This routine is applied by the PlaceLibItem routine above. *
* This routine is applied by the PlaceLibItem routine above. *
*****************************************************************************/
*****************************************************************************/
void
DrawingLibInGhost
(
WinEDA_DrawPanel
*
panel
,
wxDC
*
DC
,
void
DrawingLibInGhost
(
WinEDA_DrawPanel
*
panel
,
wxDC
*
DC
,
EDA_LibComponentStruct
*
LibEntry
,
EDA_LibComponentStruct
*
LibEntry
,
EDA_SchComponentStruct
*
DrawLibItem
,
int
PartX
,
int
PartY
,
EDA_SchComponentStruct
*
DrawLibItem
,
int
PartX
,
int
PartY
,
int
multi
,
int
convert
,
int
Color
,
bool
DrawPinText
)
int
multi
,
int
convert
,
int
Color
,
bool
DrawPinText
)
{
{
int
DrawMode
=
g_XorMode
;
int
DrawMode
=
g_XorMode
;
DrawLibPartAux
(
panel
,
DC
,
DrawLibItem
,
LibEntry
,
wxPoint
(
PartX
,
PartY
),
DrawLibPartAux
(
panel
,
DC
,
DrawLibItem
,
LibEntry
,
wxPoint
(
PartX
,
PartY
),
DrawLibItem
->
m_Transform
,
DrawLibItem
->
m_Transform
,
multi
,
convert
,
DrawMode
,
Color
,
DrawPinText
);
multi
,
convert
,
DrawMode
,
Color
,
DrawPinText
);
}
}
/************************************************************/
/************************************************************/
/* Routine to draw One LibraryDrawStruct at given position, */
/* Routine to draw One LibraryDrawStruct at given position, */
/* matrice de transformation 1 0 0 -1 (normale) */
/* matrice de transformation 1 0 0 -1 (normale) */
/* DrawMode = GrXOR, GrOR .. */
/* DrawMode = GrXOR, GrOR .. */
/************************************************************/
/************************************************************/
/* Utilise en LibEdit et Lib Browse */
/* Utilise en LibEdit et Lib Browse */
void
DrawLibraryDrawStruct
(
WinEDA_DrawPanel
*
panel
,
wxDC
*
DC
,
void
DrawLibraryDrawStruct
(
WinEDA_DrawPanel
*
panel
,
wxDC
*
DC
,
EDA_LibComponentStruct
*
LibEntry
,
EDA_LibComponentStruct
*
LibEntry
,
int
PartX
,
int
PartY
,
int
PartX
,
int
PartY
,
LibEDA_BaseStruct
*
DrawItem
,
int
Multi
,
LibEDA_BaseStruct
*
DrawItem
,
int
Multi
,
int
DrawMode
,
int
Color
)
int
DrawMode
,
int
Color
)
{
{
int
i
,
x1
,
y1
,
x2
,
y2
,
t1
,
t2
,
orient
;
int
i
,
x1
,
y1
,
x2
,
y2
,
t1
,
t2
,
orient
;
int
CharColor
;
int
CharColor
;
int
TransMat
[
2
][
2
];
int
TransMat
[
2
][
2
];
int
fill_option
;
int
fill_option
;
#undef GETCOLOR
#undef GETCOLOR
#define GETCOLOR(
l) Color < 0 ? ReturnLayerColor(l
) : Color;
#define GETCOLOR(
l ) Color < 0 ? ReturnLayerColor( l
) : Color;
Multi
=
0
;
/* unused */
Multi
=
0
;
/* unused */
/* Trace de la structure */
/* Trace de la structure */
CharColor
=
GETCOLOR
(
LAYER_DEVICE
);
CharColor
=
GETCOLOR
(
LAYER_DEVICE
);
GRSetDrawMode
(
DC
,
DrawMode
);
GRSetDrawMode
(
DC
,
DrawMode
);
TransMat
[
0
][
0
]
=
1
;
TransMat
[
0
][
0
]
=
1
;
TransMat
[
0
][
1
]
=
TransMat
[
1
][
0
]
=
0
;
TransMat
[
0
][
1
]
=
TransMat
[
1
][
0
]
=
0
;
TransMat
[
1
][
1
]
=
-
1
;
TransMat
[
1
][
1
]
=
-
1
;
int
LineWidth
=
MAX
(
DrawItem
->
m_Width
,
g_DrawMinimunLineWidth
);
int
LineWidth
=
MAX
(
DrawItem
->
m_Width
,
g_DrawMinimunLineWidth
);
switch
(
DrawItem
->
m_StructType
)
switch
(
DrawItem
->
m_StructType
)
{
{
case
COMPONENT_ARC_DRAW_TYPE
:
case
COMPONENT_ARC_DRAW_TYPE
:
{
{
int
xc
,
yc
,
x2
,
y2
;
int
xc
,
yc
,
x2
,
y2
;
LibDrawArc
*
Arc
=
(
LibDrawArc
*
)
DrawItem
;
LibDrawArc
*
Arc
=
(
LibDrawArc
*
)
DrawItem
;
t1
=
Arc
->
t1
;
t2
=
Arc
->
t2
;
t1
=
Arc
->
t1
;
t2
=
Arc
->
t2
;
bool
swap
=
MapAngles
(
&
t1
,
&
t2
,
TransMat
);
bool
swap
=
MapAngles
(
&
t1
,
&
t2
,
TransMat
);
xc
=
PartX
+
Arc
->
m_Pos
.
x
;
xc
=
PartX
+
Arc
->
m_Pos
.
x
;
yc
=
PartY
-
Arc
->
m_Pos
.
y
;
yc
=
PartY
-
Arc
->
m_Pos
.
y
;
x2
=
PartX
+
Arc
->
m_ArcStart
.
x
;
x2
=
PartX
+
Arc
->
m_ArcStart
.
x
;
...
@@ -860,127 +940,141 @@ int fill_option;
...
@@ -860,127 +940,141 @@ int fill_option;
x1
=
PartX
+
Arc
->
m_ArcEnd
.
x
;
x1
=
PartX
+
Arc
->
m_ArcEnd
.
x
;
y1
=
PartY
-
Arc
->
m_ArcEnd
.
y
;
y1
=
PartY
-
Arc
->
m_ArcEnd
.
y
;
if
(
swap
)
{
EXCHG
(
x1
,
x2
);
EXCHG
(
y1
,
y2
)}
if
(
swap
)
{
EXCHG
(
x1
,
x2
);
EXCHG
(
y1
,
y2
)
}
fill_option
=
Arc
->
m_Fill
&
(
~
g_PrintFillMask
);
fill_option
=
Arc
->
m_Fill
&
(
~
g_PrintFillMask
);
if
(
(
Arc
->
m_Fill
==
FILLED_WITH_BG_BODYCOLOR
)
&&
!
g_IsPrinting
)
if
(
(
Arc
->
m_Fill
==
FILLED_WITH_BG_BODYCOLOR
)
&&
!
g_IsPrinting
)
GRFilledArc
(
&
panel
->
m_ClipBox
,
DC
,
xc
,
yc
,
t1
,
t2
,
GRFilledArc
(
&
panel
->
m_ClipBox
,
DC
,
xc
,
yc
,
t1
,
t2
,
Arc
->
m_Rayon
,
CharColor
,
Arc
->
m_Rayon
,
CharColor
,
ReturnLayerColor
(
LAYER_DEVICE_BACKGROUND
)
);
ReturnLayerColor
(
LAYER_DEVICE_BACKGROUND
)
);
else
if
(
Arc
->
m_Fill
==
FILLED_SHAPE
)
else
if
(
Arc
->
m_Fill
==
FILLED_SHAPE
)
GRFilledArc
(
&
panel
->
m_ClipBox
,
DC
,
xc
,
yc
,
t1
,
t2
,
GRFilledArc
(
&
panel
->
m_ClipBox
,
DC
,
xc
,
yc
,
t1
,
t2
,
Arc
->
m_Rayon
,
LineWidth
,
CharColor
,
CharColor
);
Arc
->
m_Rayon
,
LineWidth
,
CharColor
,
CharColor
);
#ifdef DRAW_ARC_WITH_ANGLE
#ifdef DRAW_ARC_WITH_ANGLE
else
GRArc
(
&
panel
->
m_ClipBox
,
DC
,
xc
,
yc
,
t1
,
t2
,
else
Arc
->
m_Rayon
,
CharColor
);
GRArc
(
&
panel
->
m_ClipBox
,
DC
,
xc
,
yc
,
t1
,
t2
,
Arc
->
m_Rayon
,
CharColor
);
#else
#else
else
GRArc1
(
&
panel
->
m_ClipBox
,
DC
,
x1
,
y1
,
x2
,
y2
,
else
xc
,
yc
,
LineWidth
,
CharColor
);
GRArc1
(
&
panel
->
m_ClipBox
,
DC
,
x1
,
y1
,
x2
,
y2
,
xc
,
yc
,
LineWidth
,
CharColor
);
#endif
#endif
}
}
break
;
break
;
case
COMPONENT_CIRCLE_DRAW_TYPE
:
case
COMPONENT_CIRCLE_DRAW_TYPE
:
{
{
LibDrawCircle
*
Circle
=
(
LibDrawCircle
*
)
DrawItem
;
LibDrawCircle
*
Circle
=
(
LibDrawCircle
*
)
DrawItem
;
x1
=
PartX
+
Circle
->
m_Pos
.
x
;
x1
=
PartX
+
Circle
->
m_Pos
.
x
;
y1
=
PartY
-
Circle
->
m_Pos
.
y
;
y1
=
PartY
-
Circle
->
m_Pos
.
y
;
fill_option
=
Circle
->
m_Fill
&
(
~
g_PrintFillMask
);
fill_option
=
Circle
->
m_Fill
&
(
~
g_PrintFillMask
);
if
(
(
fill_option
==
FILLED_WITH_BG_BODYCOLOR
)
&&
!
g_IsPrinting
)
if
(
(
fill_option
==
FILLED_WITH_BG_BODYCOLOR
)
&&
!
g_IsPrinting
)
GRFilledCircle
(
&
panel
->
m_ClipBox
,
DC
,
x1
,
y1
,
GRFilledCircle
(
&
panel
->
m_ClipBox
,
DC
,
x1
,
y1
,
Circle
->
m_Rayon
,
LineWidth
,
CharColor
,
Circle
->
m_Rayon
,
LineWidth
,
CharColor
,
ReturnLayerColor
(
LAYER_DEVICE_BACKGROUND
));
ReturnLayerColor
(
LAYER_DEVICE_BACKGROUND
)
);
else
if
(
fill_option
==
FILLED_SHAPE
)
else
if
(
fill_option
==
FILLED_SHAPE
)
GRFilledCircle
(
&
panel
->
m_ClipBox
,
DC
,
x1
,
y1
,
GRFilledCircle
(
&
panel
->
m_ClipBox
,
DC
,
x1
,
y1
,
Circle
->
m_Rayon
,
0
,
CharColor
,
CharColor
);
Circle
->
m_Rayon
,
0
,
CharColor
,
CharColor
);
else
GRCircle
(
&
panel
->
m_ClipBox
,
DC
,
x1
,
y1
,
else
Circle
->
m_Rayon
,
LineWidth
,
CharColor
);
GRCircle
(
&
panel
->
m_ClipBox
,
DC
,
x1
,
y1
,
Circle
->
m_Rayon
,
LineWidth
,
CharColor
);
}
}
break
;
break
;
case
COMPONENT_GRAPHIC_TEXT_DRAW_TYPE
:
case
COMPONENT_GRAPHIC_TEXT_DRAW_TYPE
:
{
{
LibDrawText
*
Text
=
(
LibDrawText
*
)
DrawItem
;
LibDrawText
*
Text
=
(
LibDrawText
*
)
DrawItem
;
x1
=
PartX
+
Text
->
m_Pos
.
x
;
x1
=
PartX
+
Text
->
m_Pos
.
x
;
y1
=
PartY
-
Text
->
m_Pos
.
y
;
y1
=
PartY
-
Text
->
m_Pos
.
y
;
DrawGraphicText
(
panel
,
DC
,
wxPoint
(
x1
,
y1
),
CharColor
,
Text
->
m_Text
,
DrawGraphicText
(
panel
,
DC
,
wxPoint
(
x1
,
y1
),
CharColor
,
Text
->
m_Text
,
Text
->
m_Horiz
,
Text
->
m_Horiz
,
Text
->
m_Size
,
Text
->
m_Size
,
GR_TEXT_HJUSTIFY_CENTER
,
GR_TEXT_VJUSTIFY_CENTER
,
LineWidth
);
GR_TEXT_HJUSTIFY_CENTER
,
GR_TEXT_VJUSTIFY_CENTER
,
LineWidth
);
}
}
break
;
break
;
case
COMPONENT_RECT_DRAW_TYPE
:
case
COMPONENT_RECT_DRAW_TYPE
:
{
{
LibDrawSquare
*
Square
=
(
LibDrawSquare
*
)
DrawItem
;
LibDrawSquare
*
Square
=
(
LibDrawSquare
*
)
DrawItem
;
x1
=
PartX
+
Square
->
m_Pos
.
x
;
x1
=
PartX
+
Square
->
m_Pos
.
x
;
y1
=
PartY
-
Square
->
m_Pos
.
y
;
y1
=
PartY
-
Square
->
m_Pos
.
y
;
x2
=
PartX
+
Square
->
m_End
.
x
;
x2
=
PartX
+
Square
->
m_End
.
x
;
y2
=
PartY
-
Square
->
m_End
.
y
;
y2
=
PartY
-
Square
->
m_End
.
y
;
fill_option
=
Square
->
m_Fill
&
(
~
g_PrintFillMask
);
fill_option
=
Square
->
m_Fill
&
(
~
g_PrintFillMask
);
if
(
(
fill_option
==
FILLED_WITH_BG_BODYCOLOR
)
&&
!
g_IsPrinting
)
if
(
(
fill_option
==
FILLED_WITH_BG_BODYCOLOR
)
&&
!
g_IsPrinting
)
GRFilledRect
(
&
panel
->
m_ClipBox
,
DC
,
x1
,
y1
,
x2
,
y2
,
GRFilledRect
(
&
panel
->
m_ClipBox
,
DC
,
x1
,
y1
,
x2
,
y2
,
CharColor
,
LineWidth
,
CharColor
,
LineWidth
,
ReturnLayerColor
(
LAYER_DEVICE_BACKGROUND
));
ReturnLayerColor
(
LAYER_DEVICE_BACKGROUND
)
);
else
if
(
fill_option
==
FILLED_SHAPE
)
else
if
(
fill_option
==
FILLED_SHAPE
)
GRFilledRect
(
&
panel
->
m_ClipBox
,
DC
,
x1
,
y1
,
x2
,
y2
,
GRFilledRect
(
&
panel
->
m_ClipBox
,
DC
,
x1
,
y1
,
x2
,
y2
,
CharColor
,
CharColor
);
CharColor
,
CharColor
);
else
GRRect
(
&
panel
->
m_ClipBox
,
DC
,
x1
,
y1
,
x2
,
y2
,
LineWidth
,
else
CharColor
);
GRRect
(
&
panel
->
m_ClipBox
,
DC
,
x1
,
y1
,
x2
,
y2
,
LineWidth
,
CharColor
);
}
}
break
;
break
;
case
COMPONENT_PIN_DRAW_TYPE
:
/* Trace des Pins */
case
COMPONENT_PIN_DRAW_TYPE
:
/* Trace des Pins */
{
{
LibDrawPin
*
Pin
=
(
LibDrawPin
*
)
DrawItem
;
LibDrawPin
*
Pin
=
(
LibDrawPin
*
)
DrawItem
;
x2
=
PartX
+
Pin
->
m_Pos
.
x
;
x2
=
PartX
+
Pin
->
m_Pos
.
x
;
y2
=
PartY
-
Pin
->
m_Pos
.
y
;
y2
=
PartY
-
Pin
->
m_Pos
.
y
;
/* Compute the real pin orientation, i.e. pin orient + component orient */
/* Compute the real pin orientation, i.e. pin orient + component orient */
orient
=
Pin
->
ReturnPinDrawOrient
(
TransMat
);
orient
=
Pin
->
ReturnPinDrawOrient
(
TransMat
);
/* Dessin de la pin et du symbole special associe */
/* Dessin de la pin et du symbole special associe */
if
(
Pin
->
m_Attributs
&
PINNOTDRAW
)
CharColor
=
DARKGRAY
;
if
(
Pin
->
m_Attributs
&
PINNOTDRAW
)
else
CharColor
=
-
1
;
CharColor
=
DARKGRAY
;
else
CharColor
=
-
1
;
Pin
->
DrawPinSymbol
(
panel
,
DC
,
wxPoint
(
x2
,
y2
),
orient
,
DrawMode
);
wxPoint
pinpos
(
x2
,
y2
);
Pin
->
DrawPinSymbol
(
panel
,
DC
,
wxPoint
(
x2
,
y2
),
orient
,
DrawMode
);
Pin
->
DrawPinTexts
(
panel
,
DC
,
pinpos
,
orient
,
wxPoint
pinpos
(
x2
,
y2
);
Pin
->
DrawPinTexts
(
panel
,
DC
,
pinpos
,
orient
,
LibEntry
->
m_TextInside
,
LibEntry
->
m_TextInside
,
LibEntry
->
m_DrawPinNum
,
LibEntry
->
m_DrawPinName
,
LibEntry
->
m_DrawPinNum
,
LibEntry
->
m_DrawPinName
,
CharColor
,
DrawMode
);
CharColor
,
DrawMode
);
}
}
break
;
break
;
case
COMPONENT_POLYLINE_DRAW_TYPE
:
case
COMPONENT_POLYLINE_DRAW_TYPE
:
{
{
LibDrawPolyline
*
polyline
=
(
LibDrawPolyline
*
)
DrawItem
;
LibDrawPolyline
*
polyline
=
(
LibDrawPolyline
*
)
DrawItem
;
if
(
Buf_Poly_Drawings
==
NULL
)
if
(
Buf_Poly_Drawings
==
NULL
)
{
{
Buf_Poly_Size
=
polyline
->
n
;
Buf_Poly_Size
=
polyline
->
n
;
Buf_Poly_Drawings
=
(
int
*
)
MyMalloc
(
sizeof
(
int
)
*
2
*
Buf_Poly_Size
);
Buf_Poly_Drawings
=
(
int
*
)
MyMalloc
(
sizeof
(
int
)
*
2
*
Buf_Poly_Size
);
}
}
else
if
(
Buf_Poly_Size
<
polyline
->
n
)
else
if
(
Buf_Poly_Size
<
polyline
->
n
)
{
{
Buf_Poly_Size
=
polyline
->
n
;
Buf_Poly_Size
=
polyline
->
n
;
Buf_Poly_Drawings
=
(
int
*
)
realloc
(
Buf_Poly_Drawings
,
Buf_Poly_Drawings
=
(
int
*
)
realloc
(
Buf_Poly_Drawings
,
sizeof
(
int
)
*
2
*
Buf_Poly_Size
);
sizeof
(
int
)
*
2
*
Buf_Poly_Size
);
}
}
for
(
i
=
0
;
i
<
polyline
->
n
;
i
++
)
for
(
i
=
0
;
i
<
polyline
->
n
;
i
++
)
{
{
Buf_Poly_Drawings
[
i
*
2
]
=
PartX
+
polyline
->
PolyList
[
i
*
2
];
Buf_Poly_Drawings
[
i
*
2
]
=
PartX
+
polyline
->
PolyList
[
i
*
2
];
Buf_Poly_Drawings
[
i
*
2
+
1
]
=
PartY
-
polyline
->
PolyList
[
i
*
2
+
1
];
Buf_Poly_Drawings
[
i
*
2
+
1
]
=
PartY
-
polyline
->
PolyList
[
i
*
2
+
1
];
}
}
fill_option
=
polyline
->
m_Fill
&
(
~
g_PrintFillMask
);
fill_option
=
polyline
->
m_Fill
&
(
~
g_PrintFillMask
);
if
(
(
fill_option
==
FILLED_WITH_BG_BODYCOLOR
)
&&
!
g_IsPrinting
)
if
(
(
fill_option
==
FILLED_WITH_BG_BODYCOLOR
)
&&
!
g_IsPrinting
)
GRPoly
(
&
panel
->
m_ClipBox
,
DC
,
polyline
->
n
,
GRPoly
(
&
panel
->
m_ClipBox
,
DC
,
polyline
->
n
,
Buf_Poly_Drawings
,
1
,
LineWidth
,
CharColor
,
Buf_Poly_Drawings
,
1
,
LineWidth
,
CharColor
,
ReturnLayerColor
(
LAYER_DEVICE_BACKGROUND
));
ReturnLayerColor
(
LAYER_DEVICE_BACKGROUND
)
);
else
if
(
fill_option
==
FILLED_SHAPE
)
else
if
(
fill_option
==
FILLED_SHAPE
)
GRPoly
(
&
panel
->
m_ClipBox
,
DC
,
polyline
->
n
,
GRPoly
(
&
panel
->
m_ClipBox
,
DC
,
polyline
->
n
,
Buf_Poly_Drawings
,
1
,
LineWidth
,
CharColor
,
CharColor
);
Buf_Poly_Drawings
,
1
,
LineWidth
,
CharColor
,
CharColor
);
else
GRPoly
(
&
panel
->
m_ClipBox
,
DC
,
polyline
->
n
,
else
Buf_Poly_Drawings
,
0
,
LineWidth
,
CharColor
,
CharColor
);
GRPoly
(
&
panel
->
m_ClipBox
,
DC
,
polyline
->
n
,
Buf_Poly_Drawings
,
0
,
LineWidth
,
CharColor
,
CharColor
);
break
;
break
;
}
}
default
:
;
}
}
}
}
eeschema/eelibs_read_libraryfiles.cpp
View file @
f3c324d5
...
@@ -17,22 +17,22 @@
...
@@ -17,22 +17,22 @@
/* Fonctions locales */
/* Fonctions locales */
/* pour librairies de composants */
/* pour librairies de composants */
static
LibEDA_BaseStruct
*
GetDrawEntry
(
WinEDA_DrawFrame
*
frame
,
FILE
*
f
,
static
LibEDA_BaseStruct
*
GetDrawEntry
(
WinEDA_DrawFrame
*
frame
,
FILE
*
f
,
char
*
Line
,
int
*
LineNum
);
char
*
Line
,
int
*
LineNum
);
static
bool
GetLibEntryField
(
EDA_LibComponentStruct
*
LibEntry
,
char
*
line
);
static
bool
GetLibEntryField
(
EDA_LibComponentStruct
*
LibEntry
,
char
*
line
);
static
bool
AddAliasNames
(
EDA_LibComponentStruct
*
LibEntry
,
char
*
line
);
static
bool
AddAliasNames
(
EDA_LibComponentStruct
*
LibEntry
,
char
*
line
);
static
void
InsertAlias
(
PriorQue
**
PQ
,
static
void
InsertAlias
(
PriorQue
**
PQ
,
EDA_LibComponentStruct
*
LibEntry
,
int
*
NumOfParts
);
EDA_LibComponentStruct
*
LibEntry
,
int
*
NumOfParts
);
static
bool
ReadLibEntryDateAndTime
(
EDA_LibComponentStruct
*
LibEntry
,
char
*
Line
);
static
bool
ReadLibEntryDateAndTime
(
EDA_LibComponentStruct
*
LibEntry
,
char
*
Line
);
static
int
AddFootprintFilterList
(
EDA_LibComponentStruct
*
LibEntryLibEntry
,
static
int
AddFootprintFilterList
(
EDA_LibComponentStruct
*
LibEntryLibEntry
,
FILE
*
f
,
char
*
Line
,
int
*
LineNum
);
FILE
*
f
,
char
*
Line
,
int
*
LineNum
);
/* pour doc librairies */
/* pour doc librairies */
/****************************************************/
/****************************************************/
/* Routines de lecture des librairies de composants */
/* Routines de lecture des librairies de composants */
/****************************************************/
/****************************************************/
/*****************************************************************************
/*****************************************************************************
...
@@ -41,194 +41,219 @@ static int AddFootprintFilterList(EDA_LibComponentStruct *LibEntryLibEntry,
...
@@ -41,194 +41,219 @@ static int AddFootprintFilterList(EDA_LibComponentStruct *LibEntryLibEntry,
* IF library already exists, it is NOT reloaded. *
* IF library already exists, it is NOT reloaded. *
* return: new lib or NULL *
* return: new lib or NULL *
*****************************************************************************/
*****************************************************************************/
LibraryStruct
*
LoadLibraryName
(
WinEDA_DrawFrame
*
frame
,
LibraryStruct
*
LoadLibraryName
(
WinEDA_DrawFrame
*
frame
,
const
wxString
&
FullLibName
,
const
wxString
&
LibName
)
const
wxString
&
FullLibName
,
const
wxString
&
LibName
)
{
{
int
NumOfParts
;
int
NumOfParts
;
FILE
*
f
;
FILE
*
f
;
LibraryStruct
*
NewLib
;
LibraryStruct
*
NewLib
;
PriorQue
*
Entries
;
PriorQue
*
Entries
;
wxString
FullFileName
;
wxString
FullFileName
;
if
(
(
NewLib
=
FindLibrary
(
LibName
))
!=
NULL
)
if
(
(
NewLib
=
FindLibrary
(
LibName
)
)
!=
NULL
)
{
{
if
(
NewLib
->
m_FullFileName
==
FullLibName
)
if
(
NewLib
->
m_FullFileName
==
FullLibName
)
return
NewLib
;
return
NewLib
;
FreeCmpLibrary
(
frame
,
LibName
);
FreeCmpLibrary
(
frame
,
LibName
);
}
}
NewLib
=
NULL
;
NewLib
=
NULL
;
f
=
wxFopen
(
FullLibName
,
wxT
(
"rt"
)
);
f
=
wxFopen
(
FullLibName
,
wxT
(
"rt"
)
);
if
(
f
==
NULL
)
if
(
f
==
NULL
)
{
{
wxString
msg
;
wxString
msg
;
msg
.
Printf
(
_
(
"Library <%s> not found"
),
FullLibName
.
GetData
()
);
msg
.
Printf
(
_
(
"Library <%s> not found"
),
FullLibName
.
GetData
()
);
DisplayError
(
frame
,
msg
);
DisplayError
(
frame
,
msg
);
return
NULL
;
return
NULL
;
}
}
NewLib
=
new
LibraryStruct
(
LIBRARY_TYPE_EESCHEMA
,
LibName
,
FullLibName
);
NewLib
=
new
LibraryStruct
(
LIBRARY_TYPE_EESCHEMA
,
LibName
,
FullLibName
);
Entries
=
LoadLibraryAux
(
frame
,
NewLib
,
f
,
&
NumOfParts
);
if
(
Entries
!=
NULL
)
Entries
=
LoadLibraryAux
(
frame
,
NewLib
,
f
,
&
NumOfParts
);
if
(
Entries
!=
NULL
)
{
{
NewLib
->
m_Entries
=
Entries
;
NewLib
->
m_Entries
=
Entries
;
NewLib
->
m_NumOfParts
=
NumOfParts
;
NewLib
->
m_NumOfParts
=
NumOfParts
;
if
(
g_LibraryList
==
NULL
)
g_LibraryList
=
NewLib
;
if
(
g_LibraryList
==
NULL
)
g_LibraryList
=
NewLib
;
else
else
{
{
LibraryStruct
*
tmplib
=
g_LibraryList
;
LibraryStruct
*
tmplib
=
g_LibraryList
;
while
(
tmplib
->
m_Pnext
)
tmplib
=
tmplib
->
m_Pnext
;
while
(
tmplib
->
m_Pnext
)
tmplib
=
tmplib
->
m_Pnext
;
tmplib
->
m_Pnext
=
NewLib
;
tmplib
->
m_Pnext
=
NewLib
;
}
}
FullFileName
=
FullLibName
;
FullFileName
=
FullLibName
;
ChangeFileNameExt
(
FullFileName
,
DOC_EXT
);
ChangeFileNameExt
(
FullFileName
,
DOC_EXT
);
LoadDocLib
(
frame
,
FullFileName
,
NewLib
->
m_Name
);
LoadDocLib
(
frame
,
FullFileName
,
NewLib
->
m_Name
);
}
}
else
delete
NewLib
;
else
delete
NewLib
;
fclose
(
f
);
fclose
(
f
);
return
NewLib
;
return
NewLib
;
}
}
/******************************************/
/******************************************/
void
LoadLibraries
(
WinEDA_DrawFrame
*
frame
)
void
LoadLibraries
(
WinEDA_DrawFrame
*
frame
)
/******************************************/
/******************************************/
/* Delete toutes les librairies chargees et recree toutes les librairies
/* Delete toutes les librairies chargees et recree toutes les librairies
donnes dans la liste g_LibName_List
*
donnes dans la liste g_LibName_List
*/
*/
{
{
wxString
FullLibName
,
msg
;
wxString
FullLibName
,
msg
;
wxString
LibName
;
wxString
LibName
;
unsigned
ii
,
iimax
=
g_LibName_List
.
GetCount
();
unsigned
ii
,
iimax
=
g_LibName_List
.
GetCount
();
frame
->
PrintMsg
(
_
(
"Start loading schematic libs"
)
);
frame
->
PrintMsg
(
_
(
"Start loading schematic libs"
)
);
// Free the unwanted libraries (i.e. not in list) but keep the .cache lib
// Free the unwanted libraries (i.e. not in list) but keep the .cache lib
LibraryStruct
*
nextlib
,
*
lib
=
g_LibraryList
;
LibraryStruct
*
nextlib
,
*
lib
=
g_LibraryList
;
for
(
;
lib
!=
NULL
;
lib
=
nextlib
)
for
(
;
lib
!=
NULL
;
lib
=
nextlib
)
{
{
nextlib
=
lib
->
m_Pnext
;
nextlib
=
lib
->
m_Pnext
;
if
(
lib
->
m_IsLibCache
)
continue
;
if
(
lib
->
m_IsLibCache
)
continue
;
wxString
libname
=
lib
->
m_Name
;
wxString
libname
=
lib
->
m_Name
;
// is this library in "wanted list" g_LibName_List ?
// is this library in "wanted list" g_LibName_List ?
int
test
=
g_LibName_List
.
Index
(
libname
);
int
test
=
g_LibName_List
.
Index
(
libname
);
if
(
test
==
wxNOT_FOUND
)
FreeCmpLibrary
(
frame
,
libname
);
if
(
test
==
wxNOT_FOUND
)
FreeCmpLibrary
(
frame
,
libname
);
}
}
// Load missing libraries (if any)
// Load missing libraries (if any)
for
(
ii
=
0
;
ii
<
iimax
;
ii
++
)
for
(
ii
=
0
;
ii
<
iimax
;
ii
++
)
{
{
LibName
=
g_LibName_List
[
ii
];
LibName
=
g_LibName_List
[
ii
];
if
(
LibName
.
IsEmpty
()
)
continue
;
if
(
LibName
.
IsEmpty
()
)
FullLibName
=
MakeFileName
(
g_RealLibDirBuffer
,
LibName
,
g_LibExtBuffer
);
continue
;
msg
=
wxT
(
"Loading "
)
+
FullLibName
;
FullLibName
=
MakeFileName
(
g_RealLibDirBuffer
,
LibName
,
g_LibExtBuffer
);
if
(
LoadLibraryName
(
frame
,
FullLibName
,
LibName
)
)
msg
=
wxT
(
"Loading "
)
+
FullLibName
;
msg
+=
wxT
(
" OK"
);
if
(
LoadLibraryName
(
frame
,
FullLibName
,
LibName
)
)
msg
+=
wxT
(
" OK"
);
else
else
msg
+=
wxT
(
" ->Error"
);
msg
+=
wxT
(
" ->Error"
);
frame
->
PrintMsg
(
msg
);
frame
->
PrintMsg
(
msg
);
}
}
// reorder the linked list to match the order filename list:
// reorder the linked list to match the order filename list:
int
NumOfLibs
;
int
NumOfLibs
;
for
(
NumOfLibs
=
0
,
lib
=
g_LibraryList
;
lib
!=
NULL
;
lib
=
lib
->
m_Pnext
)
for
(
NumOfLibs
=
0
,
lib
=
g_LibraryList
;
lib
!=
NULL
;
lib
=
lib
->
m_Pnext
)
{
{
lib
->
m_Flags
=
0
;
lib
->
m_Flags
=
0
;
NumOfLibs
++
;
NumOfLibs
++
;
}
}
if
(
NumOfLibs
==
0
)
return
;
LibraryStruct
**
libs
=
if
(
NumOfLibs
==
0
)
(
LibraryStruct
**
)
MyZMalloc
(
sizeof
(
LibraryStruct
*
)
*
(
NumOfLibs
+
2
));
return
;
LibraryStruct
**
libs
=
(
LibraryStruct
**
)
MyZMalloc
(
sizeof
(
LibraryStruct
*
)
*
(
NumOfLibs
+
2
)
);
int
jj
=
0
;
int
jj
=
0
;
for
(
ii
=
0
;
ii
<
g_LibName_List
.
GetCount
();
ii
++
)
for
(
ii
=
0
;
ii
<
g_LibName_List
.
GetCount
();
ii
++
)
{
{
if
(
jj
>=
NumOfLibs
)
break
;
if
(
jj
>=
NumOfLibs
)
lib
=
FindLibrary
(
g_LibName_List
[
ii
]);
break
;
if
(
lib
)
lib
=
FindLibrary
(
g_LibName_List
[
ii
]
);
if
(
lib
)
{
{
lib
->
m_Flags
=
1
;
lib
->
m_Flags
=
1
;
libs
[
jj
++
]
=
lib
;
libs
[
jj
++
]
=
lib
;
}
}
}
}
/* Put lib cache at end of list */
/* Put lib cache at end of list */
for
(
lib
=
g_LibraryList
;
lib
!=
NULL
;
lib
=
lib
->
m_Pnext
)
for
(
lib
=
g_LibraryList
;
lib
!=
NULL
;
lib
=
lib
->
m_Pnext
)
{
{
if
(
lib
->
m_Flags
==
0
)
libs
[
jj
++
]
=
lib
;
if
(
lib
->
m_Flags
==
0
)
libs
[
jj
++
]
=
lib
;
}
}
libs
[
jj
]
=
NULL
;
libs
[
jj
]
=
NULL
;
/* Change the linked list pointers */
/* Change the linked list pointers */
for
(
ii
=
0
;
libs
[
ii
]
!=
NULL
;
ii
++
)
for
(
ii
=
0
;
libs
[
ii
]
!=
NULL
;
ii
++
)
libs
[
ii
]
->
m_Pnext
=
libs
[
ii
+
1
];
libs
[
ii
]
->
m_Pnext
=
libs
[
ii
+
1
];
g_LibraryList
=
libs
[
0
];
g_LibraryList
=
libs
[
0
];
MyFree
(
libs
);
MyFree
(
libs
);
for
(
lib
=
g_LibraryList
;
lib
!=
NULL
;
lib
=
lib
->
m_Pnext
)
for
(
lib
=
g_LibraryList
;
lib
!=
NULL
;
lib
=
lib
->
m_Pnext
)
lib
->
m_Flags
=
0
;
lib
->
m_Flags
=
0
;
}
}
/*****************************************************************************
/*****************************************************************************
* Routine to free a library from the current loaded libraries. *
* Routine to free a library from the current loaded libraries. *
*****************************************************************************/
*****************************************************************************/
void
FreeCmpLibrary
(
wxWindow
*
frame
,
const
wxString
&
LibName
)
void
FreeCmpLibrary
(
wxWindow
*
frame
,
const
wxString
&
LibName
)
{
{
int
NumOfLibs
=
NumOfLibraries
();
int
NumOfLibs
=
NumOfLibraries
();
LibraryStruct
*
Lib
,
*
TempLib
;
LibraryStruct
*
Lib
,
*
TempLib
;
if
(
NumOfLibs
==
0
)
if
(
NumOfLibs
==
0
)
{
{
DisplayError
(
frame
,
wxT
(
"No libraries are loaded"
),
20
);
DisplayError
(
frame
,
wxT
(
"No libraries are loaded"
),
20
);
return
;
return
;
}
}
/* Search for this library name: */
/* Search for this library name: */
for
(
Lib
=
g_LibraryList
;
Lib
!=
NULL
;
Lib
=
Lib
->
m_Pnext
)
for
(
Lib
=
g_LibraryList
;
Lib
!=
NULL
;
Lib
=
Lib
->
m_Pnext
)
{
{
if
(
LibName
==
Lib
->
m_Name
)
break
;
if
(
LibName
==
Lib
->
m_Name
)
break
;
}
}
if
(
Lib
==
NULL
)
return
;
if
(
Lib
==
NULL
)
return
;
if
(
Lib
==
g_LibraryList
)
g_LibraryList
=
Lib
->
m_Pnext
;
if
(
Lib
==
g_LibraryList
)
g_LibraryList
=
Lib
->
m_Pnext
;
else
else
{
{
for
(
TempLib
=
g_LibraryList
;
TempLib
->
m_Pnext
!=
Lib
;
TempLib
=
TempLib
->
m_Pnext
);
for
(
TempLib
=
g_LibraryList
;
TempLib
->
m_Pnext
!=
Lib
;
TempLib
=
TempLib
->
m_Pnext
)
;
TempLib
->
m_Pnext
=
TempLib
->
m_Pnext
->
m_Pnext
;
TempLib
->
m_Pnext
=
TempLib
->
m_Pnext
->
m_Pnext
;
}
}
delete
Lib
;
delete
Lib
;
/* La librairie supprimee est peut etre celle selectee dans libedit */
/* La librairie supprimee est peut etre celle selectee dans libedit */
if
(
Lib
==
CurrentLib
)
CurrentLib
=
NULL
;
if
(
Lib
==
CurrentLib
)
CurrentLib
=
NULL
;
}
}
/******************************/
/******************************/
const
wxChar
**
GetLibNames
(
void
)
const
wxChar
**
GetLibNames
(
void
)
/******************************/
/******************************/
/* Routine to return pointers to all library names.
/* Routine to return pointers to all library names.
User is responsible to deallocate memory
*
User is responsible to deallocate memory
*/
*/
{
{
int
ii
,
NumOfLibs
=
NumOfLibraries
();
int
ii
,
NumOfLibs
=
NumOfLibraries
();
const
wxChar
**
Names
;
const
wxChar
**
Names
;
LibraryStruct
*
Lib
;
LibraryStruct
*
Lib
;
Names
=
(
const
wxChar
**
)
MyZMalloc
(
sizeof
(
wxChar
*
)
*
(
NumOfLibs
+
1
)
);
Names
=
(
const
wxChar
**
)
MyZMalloc
(
sizeof
(
wxChar
*
)
*
(
NumOfLibs
+
1
)
);
for
(
ii
=
0
,
Lib
=
g_LibraryList
;
Lib
!=
NULL
;
Lib
=
Lib
->
m_Pnext
,
ii
++
)
for
(
ii
=
0
,
Lib
=
g_LibraryList
;
Lib
!=
NULL
;
Lib
=
Lib
->
m_Pnext
,
ii
++
)
{
{
Names
[
ii
]
=
Lib
->
m_Name
.
GetData
();
Names
[
ii
]
=
Lib
->
m_Name
.
GetData
();
}
}
Names
[
ii
]
=
NULL
;
Names
[
ii
]
=
NULL
;
return
Names
;
return
Names
;
...
@@ -239,70 +264,73 @@ LibraryStruct *Lib;
...
@@ -239,70 +264,73 @@ LibraryStruct *Lib;
* Routine to compare two EDA_LibComponentStruct for the PriorQue module. *
* Routine to compare two EDA_LibComponentStruct for the PriorQue module. *
* Comparison (insensitive case) is based on Part name. *
* Comparison (insensitive case) is based on Part name. *
*****************************************************************************/
*****************************************************************************/
int
LibraryEntryCompare
(
EDA_LibComponentStruct
*
LE1
,
EDA_LibComponentStruct
*
LE2
)
int
LibraryEntryCompare
(
EDA_LibComponentStruct
*
LE1
,
EDA_LibComponentStruct
*
LE2
)
{
{
return
LE1
->
m_Name
.
m_Text
.
CmpNoCase
(
LE2
->
m_Name
.
m_Text
);
return
LE1
->
m_Name
.
m_Text
.
CmpNoCase
(
LE2
->
m_Name
.
m_Text
);
}
}
/*****************************************************************************
/*****************************************************************************
* Routine to load a library from given open file. *
* Routine to load a library from given open file. *
*****************************************************************************/
*****************************************************************************/
PriorQue
*
LoadLibraryAux
(
WinEDA_DrawFrame
*
frame
,
LibraryStruct
*
Library
,
FILE
*
libfile
,
int
*
NumOfParts
)
PriorQue
*
LoadLibraryAux
(
WinEDA_DrawFrame
*
frame
,
LibraryStruct
*
Library
,
FILE
*
libfile
,
int
*
NumOfParts
)
{
{
int
LineNum
=
0
;
int
LineNum
=
0
;
char
Line
[
1024
];
char
Line
[
1024
];
PriorQue
*
PQ
=
NULL
;
PriorQue
*
PQ
=
NULL
;
EDA_LibComponentStruct
*
LibEntry
;
EDA_LibComponentStruct
*
LibEntry
;
wxString
msg
;
wxString
msg
;
wxBusyCursor
ShowWait
;
// Display a Busy Cursor..
wxBusyCursor
ShowWait
;
// Display a Busy Cursor..
*
NumOfParts
=
0
;
*
NumOfParts
=
0
;
if
(
GetLine
(
libfile
,
Line
,
&
LineNum
,
sizeof
(
Line
)
)
==
NULL
)
if
(
GetLine
(
libfile
,
Line
,
&
LineNum
,
sizeof
(
Line
)
)
==
NULL
)
{
{
msg
=
_
(
"File <"
)
+
Library
->
m_Name
+
_
(
"> is empty!"
);
msg
=
_
(
"File <"
)
+
Library
->
m_Name
+
_
(
"> is empty!"
);
DisplayError
(
frame
,
msg
);
DisplayError
(
frame
,
msg
);
return
NULL
;
return
NULL
;
}
}
if
(
strnicmp
(
Line
,
LIBFILE_IDENT
,
10
)
!=
0
)
if
(
strnicmp
(
Line
,
LIBFILE_IDENT
,
10
)
!=
0
)
{
{
msg
=
_
(
"File <"
)
+
Library
->
m_Name
+
_
(
"> is NOT EESCHEMA library!"
);
msg
=
_
(
"File <"
)
+
Library
->
m_Name
+
_
(
"> is NOT EESCHEMA library!"
);
DisplayError
(
frame
,
msg
);
DisplayError
(
frame
,
msg
);
return
NULL
;
return
NULL
;
}
}
if
(
Library
)
Library
->
m_Header
=
CONV_FROM_UTF8
(
Line
);
if
(
Library
)
Library
->
m_Header
=
CONV_FROM_UTF8
(
Line
);
PQInit
(
&
PQ
);
PQInit
(
&
PQ
);
PQCompFunc
((
PQCompFuncType
)
LibraryEntryCompare
);
PQCompFunc
(
(
PQCompFuncType
)
LibraryEntryCompare
);
while
(
GetLine
(
libfile
,
Line
,
&
LineNum
,
sizeof
(
Line
)
)
)
while
(
GetLine
(
libfile
,
Line
,
&
LineNum
,
sizeof
(
Line
)
)
)
{
{
if
(
strnicmp
(
Line
,
"$HEADER"
,
7
)
==
0
)
if
(
strnicmp
(
Line
,
"$HEADER"
,
7
)
==
0
)
{
{
if
(
Library
)
if
(
Library
)
{
{
if
(
!
Library
->
ReadHeader
(
libfile
,
&
LineNum
)
)
if
(
!
Library
->
ReadHeader
(
libfile
,
&
LineNum
)
)
{
{
msg
=
_
(
"Library <"
)
+
Library
->
m_Name
+
_
(
"> header read error"
);
msg
=
_
(
"Library <"
)
+
Library
->
m_Name
+
_
(
"> header read error"
);
DisplayError
(
frame
,
msg
,
30
);
DisplayError
(
frame
,
msg
,
30
);
}
}
}
}
continue
;
continue
;
}
}
if
(
strnicmp
(
Line
,
"DEF"
,
3
)
==
0
)
if
(
strnicmp
(
Line
,
"DEF"
,
3
)
==
0
)
{
{
/* Read one DEF/ENDDEF part entry from library: */
/* Read one DEF/ENDDEF part entry from library: */
LibEntry
=
Read_Component_Definition
(
frame
,
Line
,
libfile
,
&
LineNum
);
LibEntry
=
Read_Component_Definition
(
frame
,
Line
,
libfile
,
&
LineNum
);
if
(
LibEntry
)
if
(
LibEntry
)
{
{
/* If we are here, this part is O.k. - put it in: */
/* If we are here, this part is O.k. - put it in: */
++*
NumOfParts
;
++
*
NumOfParts
;
PQInsert
(
&
PQ
,
LibEntry
);
PQInsert
(
&
PQ
,
LibEntry
);
InsertAlias
(
&
PQ
,
LibEntry
,
NumOfParts
);
InsertAlias
(
&
PQ
,
LibEntry
,
NumOfParts
);
}
}
}
}
}
}
...
@@ -312,133 +340,133 @@ wxBusyCursor ShowWait; // Display a Busy Cursor..
...
@@ -312,133 +340,133 @@ wxBusyCursor ShowWait; // Display a Busy Cursor..
/*********************************************************************************************/
/*********************************************************************************************/
EDA_LibComponentStruct
*
Read_Component_Definition
(
WinEDA_DrawFrame
*
frame
,
char
*
Line
,
EDA_LibComponentStruct
*
Read_Component_Definition
(
WinEDA_DrawFrame
*
frame
,
char
*
Line
,
FILE
*
f
,
int
*
LineNum
)
FILE
*
f
,
int
*
LineNum
)
/*********************************************************************************************/
/*********************************************************************************************/
/* Routine to Read a DEF/ENDDEF part entry from given open file.
/* Routine to Read a DEF/ENDDEF part entry from given open file.
*/
*/
{
{
int
unused
;
int
unused
;
char
*
p
,
*
Name
,
*
Prefix
=
NULL
;
char
*
p
,
*
Name
,
*
Prefix
=
NULL
;
EDA_LibComponentStruct
*
LibEntry
=
NULL
;
EDA_LibComponentStruct
*
LibEntry
=
NULL
;
bool
Res
;
bool
Res
;
wxString
Msg
;
wxString
Msg
;
p
=
strtok
(
Line
,
"
\t\r\n
"
);
p
=
strtok
(
Line
,
"
\t\r\n
"
);
if
(
strcmp
(
p
,
"DEF"
)
!=
0
)
if
(
strcmp
(
p
,
"DEF"
)
!=
0
)
{
{
Msg
.
Printf
(
wxT
(
"DEF command expected in line %d, aborted."
),
*
LineNum
);
Msg
.
Printf
(
wxT
(
"DEF command expected in line %d, aborted."
),
*
LineNum
);
DisplayError
(
frame
,
Msg
);
DisplayError
(
frame
,
Msg
);
return
NULL
;
return
NULL
;
}
}
/* Read DEF line: */
/* Read DEF line: */
char
drawnum
=
0
,
drawname
=
0
;
char
drawnum
=
0
,
drawname
=
0
;
LibEntry
=
new
EDA_LibComponentStruct
(
NULL
);
LibEntry
=
new
EDA_LibComponentStruct
(
NULL
);
if
((
Name
=
strtok
(
NULL
,
"
\t\n
"
))
==
NULL
||
/* Part name: */
if
(
(
Name
=
strtok
(
NULL
,
"
\t\n
"
)
)
==
NULL
/* Part name: */
(
Prefix
=
strtok
(
NULL
,
"
\t\n
"
))
==
NULL
||
/* Prefix name: */
||
(
Prefix
=
strtok
(
NULL
,
"
\t\n
"
)
)
==
NULL
/* Prefix name: */
(
p
=
strtok
(
NULL
,
"
\t\n
"
))
==
NULL
||
/* NumOfPins: */
||
(
p
=
strtok
(
NULL
,
"
\t\n
"
)
)
==
NULL
/* NumOfPins: */
sscanf
(
p
,
"%d"
,
&
unused
)
!=
1
||
||
sscanf
(
p
,
"%d"
,
&
unused
)
!=
1
(
p
=
strtok
(
NULL
,
"
\t\n
"
))
==
NULL
||
/* TextInside: */
||
(
p
=
strtok
(
NULL
,
"
\t\n
"
)
)
==
NULL
/* TextInside: */
sscanf
(
p
,
"%d"
,
&
LibEntry
->
m_TextInside
)
!=
1
||
||
sscanf
(
p
,
"%d"
,
&
LibEntry
->
m_TextInside
)
!=
1
(
p
=
strtok
(
NULL
,
"
\t\n
"
))
==
NULL
||
/* DrawNums: */
||
(
p
=
strtok
(
NULL
,
"
\t\n
"
)
)
==
NULL
/* DrawNums: */
sscanf
(
p
,
"%c"
,
&
drawnum
)
!=
1
||
||
sscanf
(
p
,
"%c"
,
&
drawnum
)
!=
1
(
p
=
strtok
(
NULL
,
"
\t\n
"
))
==
NULL
||
/* DrawNums: */
||
(
p
=
strtok
(
NULL
,
"
\t\n
"
)
)
==
NULL
/* DrawNums: */
sscanf
(
p
,
"%c"
,
&
drawname
)
!=
1
||
||
sscanf
(
p
,
"%c"
,
&
drawname
)
!=
1
(
p
=
strtok
(
NULL
,
"
\t\n
"
))
==
NULL
||
/* m_UnitCount: */
||
(
p
=
strtok
(
NULL
,
"
\t\n
"
)
)
==
NULL
/* m_UnitCount: */
sscanf
(
p
,
"%d"
,
&
LibEntry
->
m_UnitCount
)
!=
1
)
||
sscanf
(
p
,
"%d"
,
&
LibEntry
->
m_UnitCount
)
!=
1
)
{
{
Msg
.
Printf
(
wxT
(
"Wrong DEF format in line %d, skipped."
),
*
LineNum
);
Msg
.
Printf
(
wxT
(
"Wrong DEF format in line %d, skipped."
),
*
LineNum
);
DisplayError
(
frame
,
Msg
);
DisplayError
(
frame
,
Msg
);
while
(
GetLine
(
f
,
Line
,
LineNum
,
1024
)
)
while
(
GetLine
(
f
,
Line
,
LineNum
,
1024
)
)
{
{
p
=
strtok
(
Line
,
"
\t\n
"
);
p
=
strtok
(
Line
,
"
\t\n
"
);
if
(
stricmp
(
p
,
"ENDDEF"
)
==
0
)
break
;
if
(
stricmp
(
p
,
"ENDDEF"
)
==
0
)
break
;
}
}
return
NULL
;
return
NULL
;
}
}
else
/* Mise a jour des infos de la ligne "DEF" */
else
/* Mise a jour des infos de la ligne "DEF" */
{
{
LibEntry
->
m_DrawPinNum
=
(
drawnum
==
'N'
)
?
FALSE
:
TRUE
;
LibEntry
->
m_DrawPinNum
=
(
drawnum
==
'N'
)
?
FALSE
:
TRUE
;
LibEntry
->
m_DrawPinName
=
(
drawname
==
'N'
)
?
FALSE
:
TRUE
;
LibEntry
->
m_DrawPinName
=
(
drawname
==
'N'
)
?
FALSE
:
TRUE
;
/* Copy part name and prefix. */
/* Copy part name and prefix. */
strupper
(
Name
);
strupper
(
Name
);
if
(
Name
[
0
]
!=
'~'
)
LibEntry
->
m_Name
.
m_Text
=
CONV_FROM_UTF8
(
Name
);
if
(
Name
[
0
]
!=
'~'
)
LibEntry
->
m_Name
.
m_Text
=
CONV_FROM_UTF8
(
Name
);
else
else
{
{
LibEntry
->
m_Name
.
m_Text
=
CONV_FROM_UTF8
(
&
Name
[
1
]
);
LibEntry
->
m_Name
.
m_Text
=
CONV_FROM_UTF8
(
&
Name
[
1
]
);
LibEntry
->
m_Name
.
m_Attributs
|=
TEXT_NO_VISIBLE
;
LibEntry
->
m_Name
.
m_Attributs
|=
TEXT_NO_VISIBLE
;
}
}
if
(
strcmp
(
Prefix
,
"~"
)
==
0
)
if
(
strcmp
(
Prefix
,
"~"
)
==
0
)
{
{
LibEntry
->
m_Prefix
.
m_Text
.
Empty
();
LibEntry
->
m_Prefix
.
m_Text
.
Empty
();
LibEntry
->
m_Prefix
.
m_Attributs
|=
TEXT_NO_VISIBLE
;
LibEntry
->
m_Prefix
.
m_Attributs
|=
TEXT_NO_VISIBLE
;
}
}
else
LibEntry
->
m_Prefix
.
m_Text
=
CONV_FROM_UTF8
(
Prefix
);
else
LibEntry
->
m_Prefix
.
m_Text
=
CONV_FROM_UTF8
(
Prefix
);
// Copy optional infos
// Copy optional infos
if
(
(
p
=
strtok
(
NULL
,
"
\t\n
"
)
)
!=
NULL
)
// m_UnitSelectionLocked param
if
(
(
p
=
strtok
(
NULL
,
"
\t\n
"
)
)
!=
NULL
)
// m_UnitSelectionLocked param
{
{
if
(
*
p
==
'L'
)
LibEntry
->
m_UnitSelectionLocked
=
TRUE
;
if
(
*
p
==
'L'
)
LibEntry
->
m_UnitSelectionLocked
=
TRUE
;
}
}
if
(
(
p
=
strtok
(
NULL
,
"
\t\n
"
))
!=
NULL
)
/* Type Of Component */
if
(
(
p
=
strtok
(
NULL
,
"
\t\n
"
)
)
!=
NULL
)
/* Type Of Component */
{
{
if
(
*
p
==
'P'
)
LibEntry
->
m_Options
=
ENTRY_POWER
;
if
(
*
p
==
'P'
)
LibEntry
->
m_Options
=
ENTRY_POWER
;
}
}
}
}
/* Analyse lignes suivantes */
/* Analyse lignes suivantes */
while
(
GetLine
(
f
,
Line
,
LineNum
,
1024
)
)
while
(
GetLine
(
f
,
Line
,
LineNum
,
1024
)
)
{
{
p
=
strtok
(
Line
,
"
\t\n
"
);
p
=
strtok
(
Line
,
"
\t\n
"
);
Res
=
TRUE
;
/* Pour test d'erreur (Res = FALSE = erreur) */
Res
=
TRUE
;
/* Pour test d'erreur (Res = FALSE = erreur) */
if
(
(
Line
[
0
]
==
'T'
)
&&
(
Line
[
1
]
==
'i'
)
)
if
(
(
Line
[
0
]
==
'T'
)
&&
(
Line
[
1
]
==
'i'
)
)
{
{
Res
=
ReadLibEntryDateAndTime
(
LibEntry
,
Line
);
Res
=
ReadLibEntryDateAndTime
(
LibEntry
,
Line
);
}
}
else
if
(
Line
[
0
]
==
'F'
)
else
if
(
Line
[
0
]
==
'F'
)
{
{
Res
=
GetLibEntryField
(
LibEntry
,
Line
);
Res
=
GetLibEntryField
(
LibEntry
,
Line
);
}
}
else
if
(
strcmp
(
p
,
"ENDDEF"
)
==
0
)
else
if
(
strcmp
(
p
,
"ENDDEF"
)
==
0
)
{
{
break
;
break
;
}
}
else
if
(
strcmp
(
p
,
"DRAW"
)
==
0
)
else
if
(
strcmp
(
p
,
"DRAW"
)
==
0
)
{
{
LibEntry
->
m_Drawings
=
GetDrawEntry
(
frame
,
f
,
Line
,
LineNum
);
LibEntry
->
m_Drawings
=
GetDrawEntry
(
frame
,
f
,
Line
,
LineNum
);
}
}
else
if
(
strncmp
(
p
,
"ALIAS"
,
5
)
==
0
)
else
if
(
strncmp
(
p
,
"ALIAS"
,
5
)
==
0
)
{
{
p
=
strtok
(
NULL
,
"
\r\n
"
);
p
=
strtok
(
NULL
,
"
\r\n
"
);
Res
=
AddAliasNames
(
LibEntry
,
p
);
Res
=
AddAliasNames
(
LibEntry
,
p
);
}
}
else
if
(
strncmp
(
p
,
"$FPLIST"
,
5
)
==
0
)
else
if
(
strncmp
(
p
,
"$FPLIST"
,
5
)
==
0
)
{
{
Res
=
AddFootprintFilterList
(
LibEntry
,
f
,
Line
,
LineNum
);
Res
=
AddFootprintFilterList
(
LibEntry
,
f
,
Line
,
LineNum
);
}
}
else
else
{
{
Msg
.
Printf
(
wxT
(
"Undefined command
\"
%s
\"
in line %d, skipped."
),
p
,
*
LineNum
);
Msg
.
Printf
(
wxT
(
"Undefined command
\"
%s
\"
in line %d, skipped."
),
p
,
*
LineNum
);
frame
->
PrintMsg
(
Msg
);
frame
->
PrintMsg
(
Msg
);
}
}
/* Fin analyse de la ligne ou block: test de l'info lue */
/* Fin analyse de la ligne ou block: test de l'info lue */
if
(
!
Res
)
if
(
!
Res
)
{
/* Something went wrong there. */
{
/* Something went wrong there. */
Msg
.
Printf
(
wxT
(
" Error Line %d, Library not loaded"
),
*
LineNum
);
Msg
.
Printf
(
wxT
(
" Error Line %d, Library not loaded"
),
*
LineNum
);
DisplayError
(
frame
,
Msg
);
DisplayError
(
frame
,
Msg
);
delete
LibEntry
;
delete
LibEntry
;
return
NULL
;
return
NULL
;
}
}
...
@@ -450,60 +478,63 @@ wxString Msg;
...
@@ -450,60 +478,63 @@ wxString Msg;
}
}
/*****************************************************************************
/*****************************************************************************
* Routine to load a DRAW definition from given file. Note "DRAW" line has *
* Routine to load a DRAW definition from given file. Note "DRAW" line has *
* been read already. Reads upto and include ENDDRAW, or an error (NULL ret). *
* been read already. Reads upto and include ENDDRAW, or an error (NULL ret). *
*****************************************************************************/
*****************************************************************************/
static
LibEDA_BaseStruct
*
GetDrawEntry
(
WinEDA_DrawFrame
*
frame
,
FILE
*
f
,
char
*
Line
,
int
*
LineNum
)
static
LibEDA_BaseStruct
*
GetDrawEntry
(
WinEDA_DrawFrame
*
frame
,
FILE
*
f
,
char
*
Line
,
int
*
LineNum
)
{
{
int
i
=
0
,
jj
,
ll
,
Unit
,
Convert
,
size1
,
size2
;
int
i
=
0
,
jj
,
ll
,
Unit
,
Convert
,
size1
,
size2
;
char
*
p
,
Buffer
[
1024
],
BufName
[
256
],
char
*
p
,
Buffer
[
1024
],
BufName
[
256
],
PinNum
[
256
],
PinNum
[
256
],
chartmp
[
256
],
chartmp1
[
256
];
chartmp
[
256
],
chartmp1
[
256
];
wxString
MsgLine
;
wxString
MsgLine
;
bool
Error
=
FALSE
;
bool
Error
=
FALSE
;
LibEDA_BaseStruct
*
Tail
=
NULL
,
LibEDA_BaseStruct
*
Tail
=
NULL
,
*
New
=
NULL
,
*
New
=
NULL
,
*
Head
=
NULL
;
*
Head
=
NULL
;
while
(
TRUE
)
while
(
TRUE
)
{
{
if
(
GetLine
(
f
,
Line
,
LineNum
,
1024
)
==
NULL
)
if
(
GetLine
(
f
,
Line
,
LineNum
,
1024
)
==
NULL
)
{
{
DisplayError
(
frame
,
wxT
(
"File ended prematurely"
)
);
DisplayError
(
frame
,
wxT
(
"File ended prematurely"
)
);
return
Head
;
return
Head
;
}
}
if
(
strncmp
(
Line
,
"ENDDRAW"
,
7
)
==
0
)
if
(
strncmp
(
Line
,
"ENDDRAW"
,
7
)
==
0
)
{
{
break
;
break
;
}
}
New
=
NULL
;
New
=
NULL
;
switch
(
Line
[
0
]
)
switch
(
Line
[
0
]
)
{
{
case
'A'
:
/* Arc */
case
'A'
:
/* Arc */
{
{
int
startx
,
starty
,
endx
,
endy
;
int
startx
,
starty
,
endx
,
endy
;
LibDrawArc
*
Arc
=
new
LibDrawArc
();
LibDrawArc
*
Arc
=
new
LibDrawArc
();
New
=
Arc
;
New
=
Arc
;
ll
=
0
;
ll
=
0
;
int
nbarg
=
sscanf
(
&
Line
[
2
],
"%d %d %d %d %d %d %d %d %s %d %d %d %d"
,
int
nbarg
=
sscanf
(
&
Line
[
2
],
"%d %d %d %d %d %d %d %d %s %d %d %d %d"
,
&
Arc
->
m_Pos
.
x
,
&
Arc
->
m_Pos
.
y
,
&
Arc
->
m_Rayon
,
&
Arc
->
m_Pos
.
x
,
&
Arc
->
m_Pos
.
y
,
&
Arc
->
m_Rayon
,
&
Arc
->
t1
,
&
Arc
->
t2
,
&
Unit
,
&
Convert
,
&
Arc
->
t1
,
&
Arc
->
t2
,
&
Unit
,
&
Convert
,
&
Arc
->
m_Width
,
chartmp
,
&
startx
,
&
starty
,
&
endx
,
&
endy
);
&
Arc
->
m_Width
,
chartmp
,
&
startx
,
&
starty
,
&
endx
,
&
endy
);
if
(
nbarg
<
8
)
Error
=
TRUE
;
if
(
nbarg
<
8
)
Error
=
TRUE
;
Arc
->
m_Unit
=
Unit
;
Arc
->
m_Convert
=
Convert
;
Arc
->
m_Unit
=
Unit
;
Arc
->
m_Convert
=
Convert
;
if
(
chartmp
[
0
]
==
'F'
)
Arc
->
m_Fill
=
FILLED_SHAPE
;
if
(
chartmp
[
0
]
==
'F'
)
if
(
chartmp
[
0
]
==
'f'
)
Arc
->
m_Fill
=
FILLED_WITH_BG_BODYCOLOR
;
Arc
->
m_Fill
=
FILLED_SHAPE
;
if
(
chartmp
[
0
]
==
'f'
)
Arc
->
m_Fill
=
FILLED_WITH_BG_BODYCOLOR
;
NORMALIZE_ANGLE
(
Arc
->
t1
);
NORMALIZE_ANGLE
(
Arc
->
t1
);
NORMALIZE_ANGLE
(
Arc
->
t2
);
NORMALIZE_ANGLE
(
Arc
->
t2
);
if
(
nbarg
>=
13
)
// Coord reelles des extremites de l'arc lues
if
(
nbarg
>=
13
)
// Coord reelles des extremites de l'arc lues
{
{
Arc
->
m_ArcStart
.
x
=
startx
;
Arc
->
m_ArcStart
.
y
=
starty
;
Arc
->
m_ArcStart
.
x
=
startx
;
Arc
->
m_ArcStart
.
y
=
starty
;
Arc
->
m_ArcEnd
.
x
=
endx
;
Arc
->
m_ArcEnd
.
y
=
endy
;
Arc
->
m_ArcEnd
.
x
=
endx
;
Arc
->
m_ArcEnd
.
y
=
endy
;
...
@@ -512,74 +543,82 @@ LibEDA_BaseStruct *Tail = NULL,
...
@@ -512,74 +543,82 @@ LibEDA_BaseStruct *Tail = NULL,
{
{
Arc
->
m_ArcStart
.
x
=
Arc
->
m_Rayon
;
Arc
->
m_ArcStart
.
y
=
0
;
Arc
->
m_ArcStart
.
x
=
Arc
->
m_Rayon
;
Arc
->
m_ArcStart
.
y
=
0
;
Arc
->
m_ArcEnd
.
x
=
Arc
->
m_Rayon
;
Arc
->
m_ArcEnd
.
y
=
0
;
Arc
->
m_ArcEnd
.
x
=
Arc
->
m_Rayon
;
Arc
->
m_ArcEnd
.
y
=
0
;
RotatePoint
(
&
Arc
->
m_ArcStart
.
x
,
&
Arc
->
m_ArcStart
.
y
,
-
Arc
->
t1
);
RotatePoint
(
&
Arc
->
m_ArcStart
.
x
,
&
Arc
->
m_ArcStart
.
y
,
-
Arc
->
t1
);
Arc
->
m_ArcStart
.
x
+=
Arc
->
m_Pos
.
x
;
Arc
->
m_ArcStart
.
y
+=
Arc
->
m_Pos
.
y
;
Arc
->
m_ArcStart
.
x
+=
Arc
->
m_Pos
.
x
;
Arc
->
m_ArcStart
.
y
+=
Arc
->
m_Pos
.
y
;
RotatePoint
(
&
Arc
->
m_ArcEnd
.
x
,
&
Arc
->
m_ArcEnd
.
y
,
-
Arc
->
t2
);
RotatePoint
(
&
Arc
->
m_ArcEnd
.
x
,
&
Arc
->
m_ArcEnd
.
y
,
-
Arc
->
t2
);
Arc
->
m_ArcEnd
.
x
+=
Arc
->
m_Pos
.
x
;
Arc
->
m_ArcEnd
.
y
+=
Arc
->
m_Pos
.
y
;
Arc
->
m_ArcEnd
.
x
+=
Arc
->
m_Pos
.
x
;
Arc
->
m_ArcEnd
.
y
+=
Arc
->
m_Pos
.
y
;
}
}
}
}
break
;
break
;
case
'C'
:
/* Circle */
case
'C'
:
/* Circle */
{
{
LibDrawCircle
*
Circle
=
new
LibDrawCircle
();
LibDrawCircle
*
Circle
=
new
LibDrawCircle
();
New
=
Circle
;
ll
=
0
;
New
=
Circle
;
ll
=
0
;
Error
=
sscanf
(
&
Line
[
2
],
"%d %d %d %d %d %d %s"
,
Error
=
sscanf
(
&
Line
[
2
],
"%d %d %d %d %d %d %s"
,
&
Circle
->
m_Pos
.
x
,
&
Circle
->
m_Pos
.
y
,
&
Circle
->
m_Rayon
,
&
Circle
->
m_Pos
.
x
,
&
Circle
->
m_Pos
.
y
,
&
Circle
->
m_Rayon
,
&
Unit
,
&
Convert
,
&
Circle
->
m_Width
,
chartmp
)
<
6
;
&
Unit
,
&
Convert
,
&
Circle
->
m_Width
,
chartmp
)
<
6
;
Circle
->
m_Unit
=
Unit
;
Circle
->
m_Unit
=
Unit
;
Circle
->
m_Convert
=
Convert
;
Circle
->
m_Convert
=
Convert
;
if
(
chartmp
[
0
]
==
'F'
)
Circle
->
m_Fill
=
FILLED_SHAPE
;
if
(
chartmp
[
0
]
==
'F'
)
if
(
chartmp
[
0
]
==
'f'
)
Circle
->
m_Fill
=
FILLED_WITH_BG_BODYCOLOR
;
Circle
->
m_Fill
=
FILLED_SHAPE
;
if
(
chartmp
[
0
]
==
'f'
)
Circle
->
m_Fill
=
FILLED_WITH_BG_BODYCOLOR
;
}
}
break
;
break
;
case
'T'
:
/* Text */
case
'T'
:
/* Text */
{
{
LibDrawText
*
Text
=
new
LibDrawText
();
LibDrawText
*
Text
=
new
LibDrawText
();
New
=
Text
;
New
=
Text
;
Buffer
[
0
]
=
0
;
Buffer
[
0
]
=
0
;
Error
=
sscanf
(
&
Line
[
2
],
"%d %d %d %d %d %d %d %s"
,
Error
=
sscanf
(
&
Line
[
2
],
"%d %d %d %d %d %d %d %s"
,
&
Text
->
m_Horiz
,
&
Text
->
m_Horiz
,
&
Text
->
m_Pos
.
x
,
&
Text
->
m_Pos
.
y
,
&
Text
->
m_Pos
.
x
,
&
Text
->
m_Pos
.
y
,
&
Text
->
m_Size
.
x
,
&
Text
->
m_Type
,
&
Text
->
m_Size
.
x
,
&
Text
->
m_Type
,
&
Unit
,
&
Convert
,
Buffer
)
!=
8
;
&
Unit
,
&
Convert
,
Buffer
)
!=
8
;
Text
->
m_Unit
=
Unit
;
Text
->
m_Convert
=
Convert
;
Text
->
m_Unit
=
Unit
;
Text
->
m_Convert
=
Convert
;
Text
->
m_Size
.
y
=
Text
->
m_Size
.
x
;
Text
->
m_Size
.
y
=
Text
->
m_Size
.
x
;
if
(
!
Error
)
if
(
!
Error
)
{
/* Convert '~' to spaces. */
{
/* Convert '~' to spaces. */
Text
->
m_Text
=
CONV_FROM_UTF8
(
Buffer
);
Text
->
m_Text
=
CONV_FROM_UTF8
(
Buffer
);
Text
->
m_Text
.
Replace
(
wxT
(
"~"
),
wxT
(
" "
));
// Les espaces sont restitus
Text
->
m_Text
.
Replace
(
wxT
(
"~"
),
wxT
(
" "
)
);
// Les espaces sont restitus
}
}
}
}
break
;
break
;
case
'S'
:
/* Square */
case
'S'
:
/* Square */
{
{
LibDrawSquare
*
Square
=
new
LibDrawSquare
();
LibDrawSquare
*
Square
=
new
LibDrawSquare
();
New
=
Square
;
ll
=
0
;
New
=
Square
;
ll
=
0
;
Error
=
sscanf
(
&
Line
[
2
],
"%d %d %d %d %d %d %d %s"
,
Error
=
sscanf
(
&
Line
[
2
],
"%d %d %d %d %d %d %d %s"
,
&
Square
->
m_Pos
.
x
,
&
Square
->
m_Pos
.
y
,
&
Square
->
m_Pos
.
x
,
&
Square
->
m_Pos
.
y
,
&
Square
->
m_End
.
x
,
&
Square
->
m_End
.
y
,
&
Square
->
m_End
.
x
,
&
Square
->
m_End
.
y
,
&
Unit
,
&
Convert
,
&
Square
->
m_Width
,
chartmp
)
<
7
;
&
Unit
,
&
Convert
,
&
Square
->
m_Width
,
chartmp
)
<
7
;
Square
->
m_Unit
=
Unit
;
Square
->
m_Convert
=
Convert
;
Square
->
m_Unit
=
Unit
;
Square
->
m_Convert
=
Convert
;
if
(
chartmp
[
0
]
==
'F'
)
Square
->
m_Fill
=
FILLED_SHAPE
;
if
(
chartmp
[
0
]
==
'F'
)
if
(
chartmp
[
0
]
==
'f'
)
Square
->
m_Fill
=
FILLED_WITH_BG_BODYCOLOR
;
Square
->
m_Fill
=
FILLED_SHAPE
;
if
(
chartmp
[
0
]
==
'f'
)
Square
->
m_Fill
=
FILLED_WITH_BG_BODYCOLOR
;
}
}
break
;
break
;
case
'X'
:
/* Pin Description */
case
'X'
:
/* Pin Description */
{
{
*
Buffer
=
0
;
*
Buffer
=
0
;
LibDrawPin
*
Pin
=
new
LibDrawPin
();
LibDrawPin
*
Pin
=
new
LibDrawPin
();
New
=
Pin
;
New
=
Pin
;
i
=
sscanf
(
Line
+
2
,
"%s %s %d %d %d %s %d %d %d %d %s %s"
,
i
=
sscanf
(
Line
+
2
,
"%s %s %d %d %d %s %d %d %d %d %s %s"
,
BufName
,
PinNum
,
BufName
,
PinNum
,
&
Pin
->
m_Pos
.
x
,
&
Pin
->
m_Pos
.
y
,
&
Pin
->
m_Pos
.
x
,
&
Pin
->
m_Pos
.
y
,
&
ll
,
chartmp1
,
&
ll
,
chartmp1
,
&
size1
,
&
size2
,
&
size1
,
&
size2
,
&
Unit
,
&
Convert
,
chartmp
,
Buffer
);
&
Unit
,
&
Convert
,
chartmp
,
Buffer
);
Pin
->
m_PinNumSize
=
size1
;
/* Parametres type short */
Pin
->
m_PinNumSize
=
size1
;
/* Parametres type short */
Pin
->
m_PinNameSize
=
size2
;
Pin
->
m_PinNameSize
=
size2
;
...
@@ -587,124 +626,154 @@ LibEDA_BaseStruct *Tail = NULL,
...
@@ -587,124 +626,154 @@ LibEDA_BaseStruct *Tail = NULL,
Pin
->
m_Orient
=
chartmp1
[
0
]
&
255
;
Pin
->
m_Orient
=
chartmp1
[
0
]
&
255
;
Pin
->
m_Unit
=
Unit
;
Pin
->
m_Convert
=
Convert
;
Pin
->
m_Unit
=
Unit
;
Pin
->
m_Convert
=
Convert
;
strncpy
((
char
*
)
&
Pin
->
m_PinNum
,
PinNum
,
4
);
strncpy
(
(
char
*
)
&
Pin
->
m_PinNum
,
PinNum
,
4
);
Error
=
(
i
!=
11
&&
i
!=
12
);
Error
=
(
i
!=
11
&&
i
!=
12
);
Pin
->
m_PinName
=
CONV_FROM_UTF8
(
BufName
);
Pin
->
m_PinName
=
CONV_FROM_UTF8
(
BufName
);
jj
=
*
chartmp
&
255
;
jj
=
*
chartmp
&
255
;
switch
(
jj
)
switch
(
jj
)
{
{
case
'I'
:
case
'I'
:
Pin
->
m_PinType
=
PIN_INPUT
;
break
;
Pin
->
m_PinType
=
PIN_INPUT
;
break
;
case
'O'
:
case
'O'
:
Pin
->
m_PinType
=
PIN_OUTPUT
;
break
;
Pin
->
m_PinType
=
PIN_OUTPUT
;
break
;
case
'B'
:
case
'B'
:
Pin
->
m_PinType
=
PIN_BIDI
;
break
;
Pin
->
m_PinType
=
PIN_BIDI
;
break
;
case
'T'
:
case
'T'
:
Pin
->
m_PinType
=
PIN_TRISTATE
;
break
;
Pin
->
m_PinType
=
PIN_TRISTATE
;
break
;
case
'P'
:
case
'P'
:
Pin
->
m_PinType
=
PIN_PASSIVE
;
break
;
Pin
->
m_PinType
=
PIN_PASSIVE
;
break
;
case
'U'
:
case
'U'
:
Pin
->
m_PinType
=
PIN_UNSPECIFIED
;
break
;
Pin
->
m_PinType
=
PIN_UNSPECIFIED
;
break
;
case
'W'
:
case
'W'
:
Pin
->
m_PinType
=
PIN_POWER_IN
;
break
;
Pin
->
m_PinType
=
PIN_POWER_IN
;
break
;
case
'w'
:
case
'w'
:
Pin
->
m_PinType
=
PIN_POWER_OUT
;
break
;
Pin
->
m_PinType
=
PIN_POWER_OUT
;
break
;
case
'C'
:
case
'C'
:
Pin
->
m_PinType
=
PIN_OPENCOLLECTOR
;
break
;
Pin
->
m_PinType
=
PIN_OPENCOLLECTOR
;
break
;
case
'E'
:
case
'E'
:
Pin
->
m_PinType
=
PIN_OPENEMITTER
;
break
;
Pin
->
m_PinType
=
PIN_OPENEMITTER
;
break
;
default
:
default
:
MsgLine
.
Printf
(
wxT
(
"Unknown Pin Type [%c] line %d"
),
MsgLine
.
Printf
(
wxT
(
"Unknown Pin Type [%c] line %d"
),
jj
,
*
LineNum
);
jj
,
*
LineNum
);
DisplayError
(
frame
,
MsgLine
);
DisplayError
(
frame
,
MsgLine
);
}
}
if
(
i
==
12
)
/* Special Symbole defined */
if
(
i
==
12
)
/* Special Symbole defined */
for
(
jj
=
strlen
(
Buffer
);
jj
>
0
;
)
for
(
jj
=
strlen
(
Buffer
);
jj
>
0
;
)
{
{
switch
(
Buffer
[
--
jj
]
)
switch
(
Buffer
[
--
jj
]
)
{
{
case
'~'
:
break
;
case
'~'
:
case
'N'
:
Pin
->
m_Attributs
|=
PINNOTDRAW
;
break
;
break
;
case
'I'
:
Pin
->
m_PinShape
|=
INVERT
;
break
;
case
'C'
:
Pin
->
m_PinShape
|=
CLOCK
;
break
;
case
'N'
:
case
'L'
:
Pin
->
m_PinShape
|=
LOWLEVEL_IN
;
break
;
Pin
->
m_Attributs
|=
PINNOTDRAW
;
break
;
case
'V'
:
Pin
->
m_PinShape
|=
LOWLEVEL_OUT
;
break
;
case
'I'
:
Pin
->
m_PinShape
|=
INVERT
;
break
;
case
'C'
:
Pin
->
m_PinShape
|=
CLOCK
;
break
;
case
'L'
:
Pin
->
m_PinShape
|=
LOWLEVEL_IN
;
break
;
case
'V'
:
Pin
->
m_PinShape
|=
LOWLEVEL_OUT
;
break
;
default
:
default
:
MsgLine
.
Printf
(
wxT
(
"Unknown Pin Shape [%c] line %d"
),
MsgLine
.
Printf
(
wxT
(
"Unknown Pin Shape [%c] line %d"
),
Buffer
[
jj
],
*
LineNum
);
Buffer
[
jj
],
*
LineNum
);
DisplayError
(
frame
,
MsgLine
);
break
;
DisplayError
(
frame
,
MsgLine
);
break
;
}
}
}
}
}
}
break
;
break
;
case
'P'
:
/* Polyline */
case
'P'
:
/* Polyline */
{
{
LibDrawPolyline
*
Polyl
=
new
LibDrawPolyline
();
LibDrawPolyline
*
Polyl
=
new
LibDrawPolyline
();
New
=
Polyl
;
New
=
Polyl
;
if
(
sscanf
(
&
Line
[
2
],
"%d %d %d %d"
,
if
(
sscanf
(
&
Line
[
2
],
"%d %d %d %d"
,
&
Polyl
->
n
,
&
Unit
,
&
Convert
,
&
Polyl
->
n
,
&
Unit
,
&
Convert
,
&
Polyl
->
m_Width
)
==
4
&&
&
Polyl
->
m_Width
)
==
4
Polyl
->
n
>
0
)
&&
Polyl
->
n
>
0
)
{
{
Polyl
->
m_Unit
=
Unit
;
Polyl
->
m_Convert
=
Convert
;
Polyl
->
m_Unit
=
Unit
;
Polyl
->
m_Convert
=
Convert
;
Polyl
->
PolyList
=
(
int
*
)
Polyl
->
PolyList
=
(
int
*
)
MyZMalloc
(
sizeof
(
int
)
*
Polyl
->
n
*
2
);
MyZMalloc
(
sizeof
(
int
)
*
Polyl
->
n
*
2
);
p
=
strtok
(
&
Line
[
2
],
"
\t\n
"
);
p
=
strtok
(
&
Line
[
2
],
"
\t\n
"
);
p
=
strtok
(
NULL
,
"
\t\n
"
);
p
=
strtok
(
NULL
,
"
\t\n
"
);
p
=
strtok
(
NULL
,
"
\t\n
"
);
p
=
strtok
(
NULL
,
"
\t\n
"
);
p
=
strtok
(
NULL
,
"
\t\n
"
);
p
=
strtok
(
NULL
,
"
\t\n
"
);
for
(
i
=
0
;
i
<
Polyl
->
n
*
2
&&
!
Error
;
i
++
)
for
(
i
=
0
;
i
<
Polyl
->
n
*
2
&&
!
Error
;
i
++
)
{
{
p
=
strtok
(
NULL
,
"
\t\n
"
);
p
=
strtok
(
NULL
,
"
\t\n
"
);
Error
=
sscanf
(
p
,
"%d"
,
&
Polyl
->
PolyList
[
i
]
)
!=
1
;
Error
=
sscanf
(
p
,
"%d"
,
&
Polyl
->
PolyList
[
i
]
)
!=
1
;
}
}
Polyl
->
m_Fill
=
NO_FILL
;
Polyl
->
m_Fill
=
NO_FILL
;
if
(
(
p
=
strtok
(
NULL
,
"
\t\n
"
)
)
!=
NULL
)
if
(
(
p
=
strtok
(
NULL
,
"
\t\n
"
)
)
!=
NULL
)
{
{
if
(
p
[
0
]
==
'F'
)
Polyl
->
m_Fill
=
FILLED_SHAPE
;
if
(
p
[
0
]
==
'F'
)
if
(
p
[
0
]
==
'f'
)
Polyl
->
m_Fill
=
FILLED_SHAPE
;
if
(
p
[
0
]
==
'f'
)
Polyl
->
m_Fill
=
FILLED_WITH_BG_BODYCOLOR
;
Polyl
->
m_Fill
=
FILLED_WITH_BG_BODYCOLOR
;
}
}
}
}
else
else
Error
=
TRUE
;
Error
=
TRUE
;
}
}
break
;
break
;
default
:
default
:
MsgLine
.
Printf
(
wxT
(
"Undefined DRAW command in line %d, aborted."
),
MsgLine
.
Printf
(
wxT
(
"Undefined DRAW command in line %d, aborted."
),
*
LineNum
);
*
LineNum
);
DisplayError
(
frame
,
MsgLine
);
DisplayError
(
frame
,
MsgLine
);
return
Head
;
return
Head
;
}
}
if
(
Error
)
if
(
Error
)
{
{
MsgLine
.
Printf
(
wxT
(
"Error in %c DRAW command in line %d, aborted."
),
MsgLine
.
Printf
(
wxT
(
"Error in %c DRAW command in line %d, aborted."
),
Line
[
0
],
*
LineNum
);
Line
[
0
],
*
LineNum
);
DisplayError
(
frame
,
MsgLine
);
DisplayError
(
frame
,
MsgLine
);
delete
New
;
delete
New
;
/* FLush till end of draw: */
/* FLush till end of draw: */
do
{
do
{
if
(
GetLine
(
f
,
Line
,
LineNum
,
1024
)
==
NULL
)
if
(
GetLine
(
f
,
Line
,
LineNum
,
1024
)
==
NULL
)
{
{
DisplayError
(
frame
,
wxT
(
"File ended prematurely"
)
);
DisplayError
(
frame
,
wxT
(
"File ended prematurely"
)
);
return
Head
;
return
Head
;
}
}
}
while
(
strncmp
(
Line
,
"ENDDRAW"
,
7
)
!=
0
);
}
while
(
strncmp
(
Line
,
"ENDDRAW"
,
7
)
!=
0
);
return
(
Head
);
}
return
Head
;
}
else
else
{
{
if
(
Head
==
NULL
)
Head
=
Tail
=
New
;
if
(
Head
==
NULL
)
Head
=
Tail
=
New
;
else
else
{
{
Tail
->
Pnext
=
New
;
Tail
=
New
;
Tail
->
Pnext
=
New
;
Tail
=
New
;
...
@@ -719,79 +788,102 @@ LibEDA_BaseStruct *Tail = NULL,
...
@@ -719,79 +788,102 @@ LibEDA_BaseStruct *Tail = NULL,
/*****************************************************************************
/*****************************************************************************
* Routine to find the library given its name. *
* Routine to find the library given its name. *
*****************************************************************************/
*****************************************************************************/
LibraryStruct
*
FindLibrary
(
const
wxString
&
Name
)
LibraryStruct
*
FindLibrary
(
const
wxString
&
Name
)
{
{
LibraryStruct
*
Lib
=
g_LibraryList
;
LibraryStruct
*
Lib
=
g_LibraryList
;
while
(
Lib
)
while
(
Lib
)
{
{
if
(
Lib
->
m_Name
==
Name
)
return
Lib
;
if
(
Lib
->
m_Name
==
Name
)
return
Lib
;
Lib
=
Lib
->
m_Pnext
;
Lib
=
Lib
->
m_Pnext
;
}
}
return
NULL
;
return
NULL
;
}
}
/*****************************************************************************
/*****************************************************************************
* Routine to find the number of libraries currently loaded. *
* Routine to find the number of libraries currently loaded. *
*****************************************************************************/
*****************************************************************************/
int
NumOfLibraries
(
void
)
int
NumOfLibraries
(
void
)
{
{
int
ii
;
int
ii
;
LibraryStruct
*
Lib
=
g_LibraryList
;
LibraryStruct
*
Lib
=
g_LibraryList
;
for
(
ii
=
0
;
Lib
!=
NULL
;
Lib
=
Lib
->
m_Pnext
)
ii
++
;
for
(
ii
=
0
;
Lib
!=
NULL
;
Lib
=
Lib
->
m_Pnext
)
ii
++
;
return
ii
;
return
ii
;
}
}
/*****************************************************************************/
/*****************************************************************************/
static
bool
GetLibEntryField
(
EDA_LibComponentStruct
*
LibEntry
,
char
*
line
)
static
bool
GetLibEntryField
(
EDA_LibComponentStruct
*
LibEntry
,
char
*
line
)
/*****************************************************************************/
/*****************************************************************************/
/* Analyse la ligne de description du champ de la forme:
/* Analyse la ligne de description du champ de la forme:
Fn "CA3130" 150 -200 50 H V
*
Fn "CA3130" 150 -200 50 H V
ou n = 0 (REFERENCE), 1 (VALUE) , 2 .. 11 = autres champs, facultatifs
*
ou n = 0 (REFERENCE), 1 (VALUE) , 2 .. 11 = autres champs, facultatifs
*/
*/
{
{
int
posx
,
posy
,
size
,
orient
,
hjustify
,
vjustify
;
int
posx
,
posy
,
size
,
orient
,
hjustify
,
vjustify
;
bool
draw
;
bool
draw
;
char
*
Text
,
char
*
Text
,
Char1
[
256
],
Char2
[
256
],
Char1
[
256
],
Char2
[
256
],
Char3
[
256
],
Char4
[
256
],
Char3
[
256
],
Char4
[
256
],
FieldUserName
[
1024
];
FieldUserName
[
1024
];
int
NumOfField
,
nbparam
;
int
NumOfField
,
nbparam
;
LibDrawField
*
Field
=
NULL
;
LibDrawField
*
Field
=
NULL
;
if
(
sscanf
(
line
+
1
,
"%d"
,
&
NumOfField
)
!=
1
)
return
(
0
);
if
(
sscanf
(
line
+
1
,
"%d"
,
&
NumOfField
)
!=
1
)
return
0
;
/* Recherche du debut des donnees (debut du texte suivant) */
/* Recherche du debut des donnees (debut du texte suivant) */
while
(
*
line
!=
0
)
line
++
;
while
(
*
line
!=
0
)
while
(
*
line
==
0
)
line
++
;
line
++
;
while
(
*
line
==
0
)
line
++
;
/* recherche du texte */
/* recherche du texte */
while
(
*
line
&&
(
*
line
!=
'"'
)
)
line
++
;
while
(
*
line
&&
(
*
line
!=
'"'
)
)
if
(
*
line
==
0
)
return
(
0
);
line
++
;
line
++
;
Text
=
line
;
if
(
*
line
==
0
)
return
0
;
line
++
;
Text
=
line
;
/* recherche fin de texte */
/* recherche fin de texte */
while
(
*
line
&&
(
*
line
!=
'"'
)
)
line
++
;
while
(
*
line
&&
(
*
line
!=
'"'
)
)
if
(
*
line
==
0
)
return
(
0
);
line
++
;
if
(
*
line
==
0
)
return
0
;
*
line
=
0
;
line
++
;
*
line
=
0
;
line
++
;
FieldUserName
[
0
]
=
0
;
FieldUserName
[
0
]
=
0
;
nbparam
=
sscanf
(
line
,
" %d %d %d %c %c %c %c"
,
nbparam
=
sscanf
(
line
,
" %d %d %d %c %c %c %c"
,
&
posx
,
&
posy
,
&
size
,
Char1
,
Char2
,
Char3
,
Char4
);
&
posx
,
&
posy
,
&
size
,
Char1
,
Char2
,
Char3
,
Char4
);
orient
=
TEXT_ORIENT_HORIZ
;
if
(
Char1
[
0
]
==
'V'
)
orient
=
TEXT_ORIENT_VERT
;
orient
=
TEXT_ORIENT_HORIZ
;
if
(
Char1
[
0
]
==
'V'
)
draw
=
TRUE
;
if
(
Char2
[
0
]
==
'I'
)
draw
=
FALSE
;
orient
=
TEXT_ORIENT_VERT
;
draw
=
TRUE
;
if
(
Char2
[
0
]
==
'I'
)
draw
=
FALSE
;
hjustify
=
GR_TEXT_HJUSTIFY_CENTER
;
hjustify
=
GR_TEXT_HJUSTIFY_CENTER
;
vjustify
=
GR_TEXT_VJUSTIFY_CENTER
;
vjustify
=
GR_TEXT_VJUSTIFY_CENTER
;
if
(
nbparam
>=
6
)
if
(
nbparam
>=
6
)
{
{
if
(
*
Char3
==
'L'
)
hjustify
=
GR_TEXT_HJUSTIFY_LEFT
;
if
(
*
Char3
==
'L'
)
else
if
(
*
Char3
==
'R'
)
hjustify
=
GR_TEXT_HJUSTIFY_RIGHT
;
hjustify
=
GR_TEXT_HJUSTIFY_LEFT
;
if
(
*
Char4
==
'B'
)
vjustify
=
GR_TEXT_VJUSTIFY_BOTTOM
;
else
if
(
*
Char3
==
'R'
)
else
if
(
*
Char4
==
'T'
)
vjustify
=
GR_TEXT_VJUSTIFY_TOP
;
hjustify
=
GR_TEXT_HJUSTIFY_RIGHT
;
if
(
*
Char4
==
'B'
)
vjustify
=
GR_TEXT_VJUSTIFY_BOTTOM
;
else
if
(
*
Char4
==
'T'
)
vjustify
=
GR_TEXT_VJUSTIFY_TOP
;
}
}
switch
(
NumOfField
)
switch
(
NumOfField
)
{
{
case
REFERENCE
:
case
REFERENCE
:
Field
=
&
LibEntry
->
m_Prefix
;
Field
=
&
LibEntry
->
m_Prefix
;
...
@@ -804,302 +896,335 @@ LibDrawField * Field = NULL;
...
@@ -804,302 +896,335 @@ LibDrawField * Field = NULL;
break
;
break
;
default
:
default
:
if
(
NumOfField
>=
NUMBER_OF_FIELDS
)
break
;
if
(
NumOfField
>=
NUMBER_OF_FIELDS
)
Field
=
new
LibDrawField
(
NumOfField
);
break
;
Field
=
new
LibDrawField
(
NumOfField
);
Field
->
Pnext
=
LibEntry
->
Fields
;
Field
->
Pnext
=
LibEntry
->
Fields
;
LibEntry
->
Fields
=
Field
;
LibEntry
->
Fields
=
Field
;
break
;
break
;
}
}
if
(
Field
==
NULL
)
return
FALSE
;
if
(
Field
==
NULL
)
return
FALSE
;
Field
->
m_Pos
.
x
=
posx
;
Field
->
m_Pos
.
y
=
posy
;
Field
->
m_Pos
.
x
=
posx
;
Field
->
m_Pos
.
y
=
posy
;
Field
->
m_Orient
=
orient
;
Field
->
m_Orient
=
orient
;
if
(
draw
==
FALSE
)
Field
->
m_Attributs
|=
TEXT_NO_VISIBLE
;
if
(
draw
==
FALSE
)
Field
->
m_Attributs
|=
TEXT_NO_VISIBLE
;
Field
->
m_Size
.
x
=
Field
->
m_Size
.
y
=
size
;
Field
->
m_Size
.
x
=
Field
->
m_Size
.
y
=
size
;
Field
->
m_Text
=
CONV_FROM_UTF8
(
Text
);
Field
->
m_Text
=
CONV_FROM_UTF8
(
Text
);
if
(
NumOfField
>=
FIELD1
)
if
(
NumOfField
>=
FIELD1
)
{
{
ReadDelimitedText
(
FieldUserName
,
line
,
sizeof
(
FieldUserName
)
);
ReadDelimitedText
(
FieldUserName
,
line
,
sizeof
(
FieldUserName
)
);
Field
->
m_Name
=
CONV_FROM_UTF8
(
FieldUserName
);
Field
->
m_Name
=
CONV_FROM_UTF8
(
FieldUserName
);
}
}
Field
->
m_HJustify
=
hjustify
;
Field
->
m_HJustify
=
hjustify
;
Field
->
m_VJustify
=
vjustify
;
Field
->
m_VJustify
=
vjustify
;
return
(
TRUE
)
;
return
TRUE
;
}
}
/********************************************************************/
/********************************************************************/
static
bool
AddAliasNames
(
EDA_LibComponentStruct
*
LibEntry
,
char
*
line
)
static
bool
AddAliasNames
(
EDA_LibComponentStruct
*
LibEntry
,
char
*
line
)
/********************************************************************/
/********************************************************************/
/* Read the alias names (in buffer line) and add them in alias list
/* Read the alias names (in buffer line) and add them in alias list
names are separated by spaces
*
names are separated by spaces
*/
*/
{
{
char
*
text
;
char
*
text
;
wxString
name
;
wxString
name
;
text
=
strtok
(
line
,
"
\t\r\n
"
);
text
=
strtok
(
line
,
"
\t\r\n
"
);
while
(
text
)
while
(
text
)
{
{
name
=
CONV_FROM_UTF8
(
text
);
name
=
CONV_FROM_UTF8
(
text
);
LibEntry
->
m_AliasList
.
Add
(
name
);
LibEntry
->
m_AliasList
.
Add
(
name
);
text
=
strtok
(
NULL
,
"
\t\r\n
"
);
text
=
strtok
(
NULL
,
"
\t\r\n
"
);
}
}
return
(
TRUE
);
return
TRUE
;
}
}
/********************************************************************/
/********************************************************************/
static
void
InsertAlias
(
PriorQue
**
PQ
,
EDA_LibComponentStruct
*
LibEntry
,
static
void
InsertAlias
(
PriorQue
**
PQ
,
EDA_LibComponentStruct
*
LibEntry
,
int
*
NumOfParts
)
int
*
NumOfParts
)
/********************************************************************/
/********************************************************************/
/* create in library (in list PQ) aliases of the "root" component LibEntry*/
/* create in library (in list PQ) aliases of the "root" component LibEntry*/
{
{
EDA_LibCmpAliasStruct
*
AliasEntry
;
EDA_LibCmpAliasStruct
*
AliasEntry
;
unsigned
ii
;
unsigned
ii
;
if
(
LibEntry
->
m_AliasList
.
GetCount
()
==
0
)
if
(
LibEntry
->
m_AliasList
.
GetCount
()
==
0
)
return
;
/* No alias for this component */
return
;
/* No alias for this component */
for
(
ii
=
0
;
ii
<
LibEntry
->
m_AliasList
.
GetCount
();
ii
++
)
for
(
ii
=
0
;
ii
<
LibEntry
->
m_AliasList
.
GetCount
();
ii
++
)
{
{
AliasEntry
=
new
EDA_LibCmpAliasStruct
(
LibEntry
->
m_AliasList
[
ii
],
AliasEntry
=
new
EDA_LibCmpAliasStruct
(
LibEntry
->
m_AliasList
[
ii
],
LibEntry
->
m_Name
.
m_Text
.
GetData
());
LibEntry
->
m_Name
.
m_Text
.
GetData
()
);
++*
NumOfParts
;
PQInsert
(
PQ
,
AliasEntry
);
++
*
NumOfParts
;
PQInsert
(
PQ
,
AliasEntry
);
}
}
}
}
/*******************************************************/
/* Routines de lecture des Documentation de composants */
/*******************************************************/
/*******************************************************/
/* Routines de lecture des Documentation de composants */
/*******************************************************/
/**********************************************************************************************/
/**********************************************************************************************/
int
LoadDocLib
(
WinEDA_DrawFrame
*
frame
,
const
wxString
&
FullDocLibName
,
const
wxString
&
Libname
)
int
LoadDocLib
(
WinEDA_DrawFrame
*
frame
,
const
wxString
&
FullDocLibName
,
const
wxString
&
Libname
)
/**********************************************************************************************/
/**********************************************************************************************/
/* Routine to load a library from given open file.*/
/* Routine to load a library from given open file.*/
{
{
int
LineNum
=
0
;
int
LineNum
=
0
;
char
Line
[
1024
],
*
Name
,
*
Text
;
char
Line
[
1024
],
*
Name
,
*
Text
;
EDA_LibComponentStruct
*
Entry
;
EDA_LibComponentStruct
*
Entry
;
FILE
*
f
;
FILE
*
f
;
wxString
msg
;
wxString
msg
;
f
=
wxFopen
(
FullDocLibName
,
wxT
(
"rt"
)
);
f
=
wxFopen
(
FullDocLibName
,
wxT
(
"rt"
)
);
if
(
f
==
NULL
)
return
(
0
);
if
(
f
==
NULL
)
return
0
;
if
(
GetLine
(
f
,
Line
,
&
LineNum
,
sizeof
(
Line
)
)
==
NULL
)
if
(
GetLine
(
f
,
Line
,
&
LineNum
,
sizeof
(
Line
)
)
==
NULL
)
{
/* pas de lignes utiles */
{
/* pas de lignes utiles */
fclose
(
f
);
fclose
(
f
);
return
0
;
return
0
;
}
}
if
(
strnicmp
(
Line
,
DOCFILE_IDENT
,
10
)
!=
0
)
if
(
strnicmp
(
Line
,
DOCFILE_IDENT
,
10
)
!=
0
)
{
{
DisplayError
(
frame
,
wxT
(
"File is NOT EESCHEMA doclib!"
)
);
DisplayError
(
frame
,
wxT
(
"File is NOT EESCHEMA doclib!"
)
);
fclose
(
f
);
fclose
(
f
);
return
0
;
return
0
;
}
}
while
(
GetLine
(
f
,
Line
,
&
LineNum
,
sizeof
(
Line
)
)
)
while
(
GetLine
(
f
,
Line
,
&
LineNum
,
sizeof
(
Line
)
)
)
{
{
if
(
strncmp
(
Line
,
"$CMP"
,
4
)
!=
0
)
if
(
strncmp
(
Line
,
"$CMP"
,
4
)
!=
0
)
{
{
msg
.
Printf
(
wxT
(
"$CMP command expected in line %d, aborted."
),
LineNum
);
msg
.
Printf
(
wxT
(
"$CMP command expected in line %d, aborted."
),
LineNum
);
DisplayError
(
frame
,
msg
);
DisplayError
(
frame
,
msg
);
fclose
(
f
);
fclose
(
f
);
return
0
;
return
0
;
}
}
/* Read one $CMP/$ENDCMP part entry from library: */
/* Read one $CMP/$ENDCMP part entry from library: */
Name
=
strtok
(
Line
+
5
,
"
\n\r
"
);
Name
=
strtok
(
Line
+
5
,
"
\n\r
"
);
wxString
cmpname
;
cmpname
=
CONV_FROM_UTF8
(
Name
);
wxString
cmpname
;
cmpname
=
CONV_FROM_UTF8
(
Name
);
Entry
=
FindLibPart
(
cmpname
.
GetData
(),
Libname
,
FIND_ALIAS
);
Entry
=
FindLibPart
(
cmpname
.
GetData
(),
Libname
,
FIND_ALIAS
);
while
(
GetLine
(
f
,
Line
,
&
LineNum
,
sizeof
(
Line
)
)
)
while
(
GetLine
(
f
,
Line
,
&
LineNum
,
sizeof
(
Line
)
)
)
{
{
if
(
strncmp
(
Line
,
"$ENDCMP"
,
7
)
==
0
)
break
;
if
(
strncmp
(
Line
,
"$ENDCMP"
,
7
)
==
0
)
Text
=
strtok
(
Line
+
2
,
"
\n\r
"
);
break
;
switch
(
Line
[
0
]
)
Text
=
strtok
(
Line
+
2
,
"
\n\r
"
);
switch
(
Line
[
0
]
)
{
{
case
'D'
:
case
'D'
:
if
(
Entry
)
Entry
->
m_Doc
=
CONV_FROM_UTF8
(
Text
);
if
(
Entry
)
Entry
->
m_Doc
=
CONV_FROM_UTF8
(
Text
);
break
;
break
;
case
'K'
:
case
'K'
:
if
(
Entry
)
Entry
->
m_KeyWord
=
CONV_FROM_UTF8
(
Text
);
if
(
Entry
)
Entry
->
m_KeyWord
=
CONV_FROM_UTF8
(
Text
);
break
;
break
;
case
'F'
:
case
'F'
:
if
(
Entry
)
Entry
->
m_DocFile
=
CONV_FROM_UTF8
(
Text
);
if
(
Entry
)
Entry
->
m_DocFile
=
CONV_FROM_UTF8
(
Text
);
break
;
break
;
}
}
}
}
}
}
fclose
(
f
);
fclose
(
f
);
return
1
;
return
1
;
}
}
/*********************************************************************************/
/*********************************************************************************/
static
bool
ReadLibEntryDateAndTime
(
EDA_LibComponentStruct
*
LibEntry
,
char
*
Line
)
static
bool
ReadLibEntryDateAndTime
(
EDA_LibComponentStruct
*
LibEntry
,
char
*
Line
)
/*********************************************************************************/
/*********************************************************************************/
/* lit date et time de modif composant sous le format:
/* lit date et time de modif composant sous le format:
"Ti yy/mm/jj hh:mm:ss"
*
"Ti yy/mm/jj hh:mm:ss"
*/
*/
{
{
int
year
,
mon
,
day
,
hour
,
min
,
sec
;
int
year
,
mon
,
day
,
hour
,
min
,
sec
;
char
*
text
;
char
*
text
;
year
=
mon
=
day
=
hour
=
min
=
sec
=
0
;
year
=
mon
=
day
=
hour
=
min
=
sec
=
0
;
text
=
strtok
(
Line
,
"
\r\t\n
"
);
text
=
strtok
(
Line
,
"
\r\t\n
"
);
text
=
strtok
(
NULL
,
"
\r\t\n
"
);
// text pointe donnees utiles
text
=
strtok
(
NULL
,
"
\r\t\n
"
);
// text pointe donnees utiles
sscanf
(
Line
,
"%d/%d/%d %d:%d:%d"
,
&
year
,
&
mon
,
&
day
,
&
hour
,
&
min
,
&
sec
);
sscanf
(
Line
,
"%d/%d/%d %d:%d:%d"
,
&
year
,
&
mon
,
&
day
,
&
hour
,
&
min
,
&
sec
);
LibEntry
->
m_LastDate
=
(
sec
&
63
)
LibEntry
->
m_LastDate
=
(
sec
&
63
)
+
((
min
&
63
)
<<
6
)
+
(
(
min
&
63
)
<<
6
)
+
((
hour
&
31
)
<<
12
)
+
(
(
hour
&
31
)
<<
12
)
+
((
day
&
31
)
<<
17
)
+
(
(
day
&
31
)
<<
17
)
+
((
mon
&
15
)
<<
22
)
+
(
(
mon
&
15
)
<<
22
)
+
((
year
-
1990
)
<<
26
);
+
(
(
year
-
1990
)
<<
26
);
return
TRUE
;
return
TRUE
;
}
}
/*******************************************/
/*******************************************/
static
int
SortItemsFct
(
const
void
*
ref
,
const
void
*
item
);
static
int
SortItemsFct
(
const
void
*
ref
,
const
void
*
item
);
void
EDA_LibComponentStruct
::
SortDrawItems
(
void
)
void
EDA_LibComponentStruct
::
SortDrawItems
(
void
)
/*******************************************/
/*******************************************/
/* Trie les lments graphiques d'un composant lib pour amliorer
/* Trie les lments graphiques d'un composant lib pour amliorer
le trac:
*
le trac:
items remplis en premier, pins en dernier
*
items remplis en premier, pins en dernier
En cas de superposition d'items, c'est plus lisible
*
En cas de superposition d'items, c'est plus lisible
*/
*/
{
{
LibEDA_BaseStruct
**
Bufentry
,
**
BufentryBase
,
*
Entry
=
m_Drawings
;
LibEDA_BaseStruct
**
Bufentry
,
**
BufentryBase
,
*
Entry
=
m_Drawings
;
int
ii
,
nbitems
;
int
ii
,
nbitems
;
if
(
Entry
==
NULL
)
return
;
/* Pas d'alias pour ce composant */
if
(
Entry
==
NULL
)
return
;
/* Pas d'alias pour ce composant */
/* calcul du nombre d'items */
/* calcul du nombre d'items */
for
(
nbitems
=
0
;
Entry
!=
NULL
;
Entry
=
Entry
->
Next
())
nbitems
++
;
for
(
nbitems
=
0
;
Entry
!=
NULL
;
Entry
=
Entry
->
Next
()
)
nbitems
++
;
BufentryBase
=
BufentryBase
=
(
LibEDA_BaseStruct
**
)
MyZMalloc
(
(
nbitems
+
1
)
*
sizeof
(
LibEDA_BaseStruct
*
)
);
(
LibEDA_BaseStruct
**
)
MyZMalloc
(
(
nbitems
+
1
)
*
sizeof
(
LibEDA_BaseStruct
*
)
);
/* memorisation du chainage : */
/* memorisation du chainage : */
for
(
Entry
=
m_Drawings
,
ii
=
0
;
Entry
!=
NULL
;
Entry
=
Entry
->
Next
()
)
for
(
Entry
=
m_Drawings
,
ii
=
0
;
Entry
!=
NULL
;
Entry
=
Entry
->
Next
()
)
BufentryBase
[
ii
++
]
=
Entry
;
BufentryBase
[
ii
++
]
=
Entry
;
/* Tri du chainage */
/* Tri du chainage */
qsort
(
BufentryBase
,
nbitems
,
sizeof
(
LibEDA_BaseStruct
*
),
SortItemsFct
);
qsort
(
BufentryBase
,
nbitems
,
sizeof
(
LibEDA_BaseStruct
*
),
SortItemsFct
);
/* Mise a jour du chainage. Remarque:
/* Mise a jour du chainage. Remarque:
le dernier element de BufEntryBase (BufEntryBase[nbitems]) est NULL*/
*
le dernier element de BufEntryBase (BufEntryBase[nbitems]) est NULL*/
m_Drawings
=
*
BufentryBase
;
m_Drawings
=
*
BufentryBase
;
Bufentry
=
BufentryBase
;
Bufentry
=
BufentryBase
;
for
(
ii
=
0
;
ii
<
nbitems
;
ii
++
)
for
(
ii
=
0
;
ii
<
nbitems
;
ii
++
)
{
{
(
*
Bufentry
)
->
Pnext
=
*
(
Bufentry
+
1
);
(
*
Bufentry
)
->
Pnext
=
*
(
Bufentry
+
1
);
Bufentry
++
;
Bufentry
++
;
}
}
MyFree
(
BufentryBase
);
MyFree
(
BufentryBase
);
}
}
int
SortItemsFct
(
const
void
*
ref
,
const
void
*
item
)
int
SortItemsFct
(
const
void
*
ref
,
const
void
*
item
)
{
{
#define Ref
(*(LibEDA_BaseStruct **)(ref)
)
#define Ref
( *(LibEDA_BaseStruct**) (ref)
)
#define Item
(*(LibEDA_BaseStruct **)(item)
)
#define Item
( *(LibEDA_BaseStruct**) (item)
)
#define BEFORE -1
#define BEFORE -1
#define AFTER 1
#define AFTER 1
int
fill_ref
=
0
,
fill_item
=
0
;
int
fill_ref
=
0
,
fill_item
=
0
;
switch
(
Ref
->
m_StructType
)
switch
(
Ref
->
m_StructType
)
{
{
case
COMPONENT_ARC_DRAW_TYPE
:
case
COMPONENT_ARC_DRAW_TYPE
:
{
{
const
LibDrawArc
*
draw
=
(
const
LibDrawArc
*
)
Ref
;
const
LibDrawArc
*
draw
=
(
const
LibDrawArc
*
)
Ref
;
fill_ref
=
draw
->
m_Fill
;
fill_ref
=
draw
->
m_Fill
;
break
;
break
;
}
}
case
COMPONENT_CIRCLE_DRAW_TYPE
:
case
COMPONENT_CIRCLE_DRAW_TYPE
:
{
{
const
LibDrawCircle
*
draw
=
(
const
LibDrawCircle
*
)
Ref
;
const
LibDrawCircle
*
draw
=
(
const
LibDrawCircle
*
)
Ref
;
fill_ref
=
draw
->
m_Fill
;
fill_ref
=
draw
->
m_Fill
;
break
;
break
;
}
}
case
COMPONENT_RECT_DRAW_TYPE
:
case
COMPONENT_RECT_DRAW_TYPE
:
{
{
const
LibDrawSquare
*
draw
=
(
const
LibDrawSquare
*
)
Ref
;
const
LibDrawSquare
*
draw
=
(
const
LibDrawSquare
*
)
Ref
;
fill_ref
=
draw
->
m_Fill
;
fill_ref
=
draw
->
m_Fill
;
break
;
break
;
}
}
case
COMPONENT_POLYLINE_DRAW_TYPE
:
case
COMPONENT_POLYLINE_DRAW_TYPE
:
{
{
const
LibDrawPolyline
*
draw
=
(
const
LibDrawPolyline
*
)
Ref
;
const
LibDrawPolyline
*
draw
=
(
const
LibDrawPolyline
*
)
Ref
;
fill_ref
=
draw
->
m_Fill
;
fill_ref
=
draw
->
m_Fill
;
break
;
break
;
}
}
case
COMPONENT_GRAPHIC_TEXT_DRAW_TYPE
:
case
COMPONENT_GRAPHIC_TEXT_DRAW_TYPE
:
if
(
Item
->
m_StructType
==
COMPONENT_PIN_DRAW_TYPE
)
return
BEFORE
;
if
(
Item
->
m_StructType
==
COMPONENT_PIN_DRAW_TYPE
)
if
(
Item
->
m_StructType
==
COMPONENT_GRAPHIC_TEXT_DRAW_TYPE
)
return
0
;
return
BEFORE
;
if
(
Item
->
m_StructType
==
COMPONENT_GRAPHIC_TEXT_DRAW_TYPE
)
return
0
;
return
1
;
return
1
;
break
;
break
;
case
COMPONENT_PIN_DRAW_TYPE
:
case
COMPONENT_PIN_DRAW_TYPE
:
if
(
Item
->
m_StructType
==
COMPONENT_PIN_DRAW_TYPE
)
if
(
Item
->
m_StructType
==
COMPONENT_PIN_DRAW_TYPE
)
{
{
int
ii
;
int
ii
;
// We sort the pins by orientation
// We sort the pins by orientation
ii
=
((
LibDrawPin
*
)
Ref
)
->
m_Orient
-
((
LibDrawPin
*
)
Item
)
->
m_Orient
;
ii
=
(
(
LibDrawPin
*
)
Ref
)
->
m_Orient
-
(
(
LibDrawPin
*
)
Item
)
->
m_Orient
;
if
(
ii
)
return
ii
;
if
(
ii
)
return
ii
;
/* We sort the pins by position (x or y).
/* We sort the pins by position (x or y).
note: at this point, most of pins have same x pos or y pos,
*
note: at this point, most of pins have same x pos or y pos,
because they are sorted by orientation and generally are vertically or
*
because they are sorted by orientation and generally are vertically or
horizontally aligned */
*
horizontally aligned */
wxPoint
pos_ref
,
pos_tst
;
wxPoint
pos_ref
,
pos_tst
;
pos_ref
=
((
LibDrawPin
*
)
Ref
)
->
m_Pos
;
pos_ref
=
(
(
LibDrawPin
*
)
Ref
)
->
m_Pos
;
pos_tst
=
((
LibDrawPin
*
)
Item
)
->
m_Pos
;
pos_tst
=
(
(
LibDrawPin
*
)
Item
)
->
m_Pos
;
if
(
(
ii
=
pos_ref
.
x
-
pos_tst
.
x
)
)
return
ii
;
if
(
(
ii
=
pos_ref
.
x
-
pos_tst
.
x
)
)
return
ii
;
ii
=
pos_ref
.
y
-
pos_tst
.
y
;
ii
=
pos_ref
.
y
-
pos_tst
.
y
;
return
ii
;
return
ii
;
}
}
else
return
AFTER
;
else
return
AFTER
;
break
;
break
;
default
:
;
}
}
/* Test de l'item */
/* Test de l'item */
switch
(
Item
->
m_StructType
)
switch
(
Item
->
m_StructType
)
{
{
case
COMPONENT_ARC_DRAW_TYPE
:
case
COMPONENT_ARC_DRAW_TYPE
:
{
{
const
LibDrawArc
*
draw
=
(
const
LibDrawArc
*
)
Item
;
const
LibDrawArc
*
draw
=
(
const
LibDrawArc
*
)
Item
;
fill_item
=
draw
->
m_Fill
;
fill_item
=
draw
->
m_Fill
;
break
;
break
;
}
}
case
COMPONENT_CIRCLE_DRAW_TYPE
:
case
COMPONENT_CIRCLE_DRAW_TYPE
:
{
{
const
LibDrawCircle
*
draw
=
(
const
LibDrawCircle
*
)
Item
;
const
LibDrawCircle
*
draw
=
(
const
LibDrawCircle
*
)
Item
;
fill_item
=
draw
->
m_Fill
;
fill_item
=
draw
->
m_Fill
;
break
;
break
;
}
}
case
COMPONENT_RECT_DRAW_TYPE
:
case
COMPONENT_RECT_DRAW_TYPE
:
{
{
const
LibDrawSquare
*
draw
=
(
const
LibDrawSquare
*
)
Item
;
const
LibDrawSquare
*
draw
=
(
const
LibDrawSquare
*
)
Item
;
fill_item
=
draw
->
m_Fill
;
fill_item
=
draw
->
m_Fill
;
break
;
break
;
}
}
case
COMPONENT_POLYLINE_DRAW_TYPE
:
case
COMPONENT_POLYLINE_DRAW_TYPE
:
{
{
const
LibDrawPolyline
*
draw
=
(
const
LibDrawPolyline
*
)
Item
;
const
LibDrawPolyline
*
draw
=
(
const
LibDrawPolyline
*
)
Item
;
fill_item
=
draw
->
m_Fill
;
fill_item
=
draw
->
m_Fill
;
break
;
break
;
}
}
...
@@ -1111,38 +1236,44 @@ int fill_ref = 0, fill_item = 0;
...
@@ -1111,38 +1236,44 @@ int fill_ref = 0, fill_item = 0;
case
COMPONENT_PIN_DRAW_TYPE
:
case
COMPONENT_PIN_DRAW_TYPE
:
return
BEFORE
;
return
BEFORE
;
break
;
break
;
default
:
;
}
}
if
(
fill_ref
&
fill_item
)
return
0
;
if
(
fill_ref
&
fill_item
)
if
(
fill_ref
)
return
BEFORE
;
return
0
;
if
(
fill_ref
)
return
BEFORE
;
return
AFTER
;
return
AFTER
;
}
}
/*****************************************************************************/
/*****************************************************************************/
int
AddFootprintFilterList
(
EDA_LibComponentStruct
*
LibEntryLibEntry
,
FILE
*
f
,
int
AddFootprintFilterList
(
EDA_LibComponentStruct
*
LibEntryLibEntry
,
FILE
*
f
,
char
*
Line
,
int
*
LineNum
)
char
*
Line
,
int
*
LineNum
)
/******************************************************************************/
/******************************************************************************/
/* read the FootprintFilter List stating with:
/* read the FootprintFilter List stating with:
FPLIST
*
FPLIST
and ending with:
*
and ending with:
ENDFPLIST
*
ENDFPLIST
*/
*/
{
{
for
(
;
;
)
for
(
;
;
)
{
{
if
(
GetLine
(
f
,
Line
,
LineNum
,
1024
)
==
NULL
)
if
(
GetLine
(
f
,
Line
,
LineNum
,
1024
)
==
NULL
)
{
{
DisplayError
(
NULL
,
wxT
(
"File ended prematurely"
)
);
DisplayError
(
NULL
,
wxT
(
"File ended prematurely"
)
);
return
0
;
return
0
;
}
}
if
(
stricmp
(
Line
,
"$ENDFPLIST"
)
==
0
)
if
(
stricmp
(
Line
,
"$ENDFPLIST"
)
==
0
)
{
{
break
;
/*normal exit on end of list */
break
;
/*normal exit on end of list */
}
}
LibEntryLibEntry
->
m_FootprintList
.
Add
(
CONV_FROM_UTF8
(
Line
+
1
)
);
LibEntryLibEntry
->
m_FootprintList
.
Add
(
CONV_FROM_UTF8
(
Line
+
1
)
);
}
}
return
1
;
return
1
;
...
...
eeschema/hotkeys.cpp
View file @
f3c324d5
...
@@ -212,6 +212,8 @@ wxPoint MousePos = m_CurrentScreen->m_MousePosition;
...
@@ -212,6 +212,8 @@ wxPoint MousePos = m_CurrentScreen->m_MousePosition;
}
}
ChangeTextOrient
(
(
DrawTextStruct
*
)
DrawStruct
,
DC
);
ChangeTextOrient
(
(
DrawTextStruct
*
)
DrawStruct
,
DC
);
break
;
break
;
default
:
;
}
}
break
;
break
;
...
...
eeschema/libclass.cpp
View file @
f3c324d5
...
@@ -13,12 +13,12 @@
...
@@ -13,12 +13,12 @@
#include "protos.h"
#include "protos.h"
/*******************************************************/
/*******************************************************/
/* Methodes relatives a la manipulation des librairies */
/* Methodes relatives a la manipulation des librairies */
/*******************************************************/
/*******************************************************/
/***************************************************************************************/
/***************************************************************************************/
LibraryStruct
::
LibraryStruct
(
int
type
,
const
wxString
&
name
,
const
wxString
&
fullname
)
LibraryStruct
::
LibraryStruct
(
int
type
,
const
wxString
&
name
,
const
wxString
&
fullname
)
/***************************************************************************************/
/***************************************************************************************/
{
{
m_Type
=
type
;
/* type indicator */
m_Type
=
type
;
/* type indicator */
...
@@ -31,129 +31,147 @@ LibraryStruct::LibraryStruct(int type, const wxString & name, const wxString & f
...
@@ -31,129 +31,147 @@ LibraryStruct::LibraryStruct(int type, const wxString & name, const wxString & f
m_TimeStamp
=
0
;
m_TimeStamp
=
0
;
m_Flags
=
0
;
m_Flags
=
0
;
m_IsLibCache
=
FALSE
;
m_IsLibCache
=
FALSE
;
}
}
/*****************************************/
/*****************************************/
void
FreeLibraryEntry
(
LibCmpEntry
*
Entry
)
void
FreeLibraryEntry
(
LibCmpEntry
*
Entry
)
/*****************************************/
/*****************************************/
/* Used by PQFreeFunc() to delete all entries
/* Used by PQFreeFunc() to delete all entries
*/
*/
{
{
delete
Entry
;
delete
Entry
;
}
}
/******************************/
/******************************/
LibraryStruct
::~
LibraryStruct
()
LibraryStruct
::~
LibraryStruct
()
/******************************/
/******************************/
{
{
if
(
m_Entries
)
PQFreeFunc
(
m_Entries
,
(
void
(
*
)(
void
*
))
FreeLibraryEntry
);
if
(
m_Entries
)
PQFreeFunc
(
m_Entries
,
(
void
(
*
)
(
void
*
)
)
FreeLibraryEntry
);
}
}
/*******************************************/
/*******************************************/
bool
LibraryStruct
::
WriteHeader
(
FILE
*
file
)
bool
LibraryStruct
::
WriteHeader
(
FILE
*
file
)
/*******************************************/
/*******************************************/
/* Ecrit l'entete du fichier librairie
/* Ecrit l'entete du fichier librairie
*/
*/
{
{
char
BufLine
[
1024
];
char
BufLine
[
1024
];
bool
succes
=
TRUE
;
bool
succes
=
TRUE
;
DateAndTime
(
BufLine
);
DateAndTime
(
BufLine
);
if
(
fprintf
(
file
,
"%s %d.%d Date: %s
\n
"
,
LIBFILE_IDENT
,
if
(
fprintf
(
file
,
"%s %d.%d Date: %s
\n
"
,
LIBFILE_IDENT
,
LIB_VERSION_MAJOR
,
LIB_VERSION_MINOR
,
LIB_VERSION_MAJOR
,
LIB_VERSION_MINOR
,
BufLine
)
!=
5
)
BufLine
)
!=
5
)
succes
=
FALSE
;
succes
=
FALSE
;
#if 0
#if 0
if ( fprintf(file,"$HEADER\n") != 1 ) succes = FALSE;
if( fprintf( file, "$HEADER\n" ) != 1 )
if ( fprintf(file,"TimeStamp %8.8lX\n", m_TimeStamp) != 2 ) succes = FALSE;
succes = FALSE;
if ( fprintf(file,"Parts %d\n", m_NumOfParts) != 2 ) succes = FALSE;
if( fprintf( file, "TimeStamp %8.8lX\n", m_TimeStamp ) != 2 )
if ( fprintf(file,"$ENDHEADER\n") != 1 ) succes = FALSE;
succes = FALSE;
if( fprintf( file, "Parts %d\n", m_NumOfParts ) != 2 )
succes = FALSE;
if( fprintf( file, "$ENDHEADER\n" ) != 1 )
succes = FALSE;
#endif
#endif
return
(
succes
)
;
return
succes
;
}
}
/***********************************************************/
/***********************************************************/
bool
LibraryStruct
::
ReadHeader
(
FILE
*
libfile
,
int
*
LineNum
)
bool
LibraryStruct
::
ReadHeader
(
FILE
*
libfile
,
int
*
LineNum
)
/***********************************************************/
/***********************************************************/
/* Ecrit l'entete du fichier librairie
/* Ecrit l'entete du fichier librairie
*/
*/
{
{
char
Line
[
1024
],
*
text
,
*
data
;
char
Line
[
1024
],
*
text
,
*
data
;
while
(
GetLine
(
libfile
,
Line
,
LineNum
,
sizeof
(
Line
)
)
)
while
(
GetLine
(
libfile
,
Line
,
LineNum
,
sizeof
(
Line
)
)
)
{
{
text
=
strtok
(
Line
,
"
\t\r\n
"
);
text
=
strtok
(
Line
,
"
\t\r\n
"
);
data
=
strtok
(
NULL
,
"
\t\r\n
"
);
data
=
strtok
(
NULL
,
"
\t\r\n
"
);
if
(
stricmp
(
text
,
"TimeStamp"
)
==
0
)
if
(
stricmp
(
text
,
"TimeStamp"
)
==
0
)
m_TimeStamp
=
atol
(
data
);
m_TimeStamp
=
atol
(
data
);
if
(
stricmp
(
text
,
"$ENDHEADER"
)
==
0
)
return
TRUE
;
if
(
stricmp
(
text
,
"$ENDHEADER"
)
==
0
)
return
TRUE
;
}
}
return
FALSE
;
return
FALSE
;
}
}
/*********************/
/*********************/
/* class LibCmpEntry */
/* class LibCmpEntry */
/*********************/
/*********************/
/* Basic class for librarty oomponent description
/* Basic class for librarty oomponent description
Not directly used
*
Not directly used
Used to create the 2 derived classes :
*
Used to create the 2 derived classes :
- EDA_LibCmpAliasStruct
*
- EDA_LibCmpAliasStruct
- EDA_LibComponentStruct
*
- EDA_LibComponentStruct
*/
*/
/********************************************************************/
/********************************************************************/
LibCmpEntry
::
LibCmpEntry
(
LibrEntryType
CmpType
,
const
wxChar
*
CmpName
)
:
LibCmpEntry
::
LibCmpEntry
(
LibrEntryType
CmpType
,
const
wxChar
*
CmpName
)
:
EDA_BaseStruct
(
LIBCOMPONENT_STRUCT_TYPE
)
EDA_BaseStruct
(
LIBCOMPONENT_STRUCT_TYPE
)
/********************************************************************/
/********************************************************************/
{
{
Type
=
CmpType
;
Type
=
CmpType
;
m_Name
.
m_FieldId
=
VALUE
;
m_Name
.
m_FieldId
=
VALUE
;
if
(
CmpName
)
m_Name
.
m_Text
=
CmpName
;
if
(
CmpName
)
m_Name
.
m_Text
=
CmpName
;
}
}
/******************************/
/******************************/
LibCmpEntry
::~
LibCmpEntry
(
void
)
LibCmpEntry
::~
LibCmpEntry
(
void
)
/******************************/
/******************************/
{
{
}
}
/*******************************/
/*******************************/
/* class EDA_LibCmpAliasStruct */
/* class EDA_LibCmpAliasStruct */
/*******************************/
/*******************************/
/* Class to define an alias of a component
/* Class to define an alias of a component
An alias uses the component defintion (graphic, pins...)
* An alias uses the component defintion (graphic, pins...)
but has its own name and documentation.
* but has its own name and documentation.
Therefore, when the component is modified, alias of this component are modified.
* Therefore, when the component is modified, alias of this component are modified.
This is a simple method to create components with differs very few
* This is a simple method to create components with differs very few
(like 74LS00, 74HC00 ... and many op amps )
* (like 74LS00, 74HC00 ... and many op amps )
*/
*/
EDA_LibCmpAliasStruct
::
EDA_LibCmpAliasStruct
(
const
wxChar
*
CmpName
,
EDA_LibCmpAliasStruct
::
EDA_LibCmpAliasStruct
(
const
wxChar
*
CmpName
,
const
wxChar
*
CmpRootName
)
:
const
wxChar
*
CmpRootName
)
:
LibCmpEntry
(
ALIAS
,
CmpName
)
LibCmpEntry
(
ALIAS
,
CmpName
)
{
{
if
(
CmpRootName
==
NULL
)
m_RootName
.
Empty
();
if
(
CmpRootName
==
NULL
)
else
m_RootName
=
CmpRootName
;
m_RootName
.
Empty
();
else
m_RootName
=
CmpRootName
;
}
}
EDA_LibCmpAliasStruct
::~
EDA_LibCmpAliasStruct
(
void
)
EDA_LibCmpAliasStruct
::~
EDA_LibCmpAliasStruct
(
void
)
{
{
}
}
/********************************/
/********************************/
/* class EDA_LibComponentStruct */
/* class EDA_LibComponentStruct */
/********************************/
/********************************/
/* This is a standard component (in library)
/* This is a standard component (in library)
*/
*/
EDA_LibComponentStruct
::
EDA_LibComponentStruct
(
const
wxChar
*
CmpName
)
:
EDA_LibComponentStruct
::
EDA_LibComponentStruct
(
const
wxChar
*
CmpName
)
:
LibCmpEntry
(
ROOT
,
CmpName
)
LibCmpEntry
(
ROOT
,
CmpName
)
{
{
m_Drawings
=
NULL
;
m_Drawings
=
NULL
;
m_LastDate
=
0
;
m_LastDate
=
0
;
...
@@ -167,23 +185,24 @@ EDA_LibComponentStruct:: EDA_LibComponentStruct( const wxChar * CmpName):
...
@@ -167,23 +185,24 @@ EDA_LibComponentStruct:: EDA_LibComponentStruct( const wxChar * CmpName):
m_Prefix
.
m_FieldId
=
REFERENCE
;
m_Prefix
.
m_FieldId
=
REFERENCE
;
}
}
/******************************************************/
/******************************************************/
EDA_LibComponentStruct
::~
EDA_LibComponentStruct
(
void
)
EDA_LibComponentStruct
::~
EDA_LibComponentStruct
(
void
)
/******************************************************/
/******************************************************/
{
{
LibEDA_BaseStruct
*
DrawItem
,
*
NextDrawItem
;
LibEDA_BaseStruct
*
DrawItem
,
*
NextDrawItem
;
LibDrawField
*
TempField
,
*
field
;
LibDrawField
*
TempField
,
*
field
;
field
=
Fields
;
Fields
=
NULL
;
field
=
Fields
;
Fields
=
NULL
;
while
(
field
)
while
(
field
)
{
{
TempField
=
field
;
field
=
(
LibDrawField
*
)
field
->
Pnext
;
TempField
=
field
;
field
=
(
LibDrawField
*
)
field
->
Pnext
;
delete
TempField
;
delete
TempField
;
}
}
/* suppression des elements dependants */
/* suppression des elements dependants */
DrawItem
=
m_Drawings
;
m_Drawings
=
NULL
;
DrawItem
=
m_Drawings
;
m_Drawings
=
NULL
;
while
(
DrawItem
)
while
(
DrawItem
)
{
{
NextDrawItem
=
DrawItem
->
Next
();
NextDrawItem
=
DrawItem
->
Next
();
delete
DrawItem
;
delete
DrawItem
;
...
@@ -193,109 +212,121 @@ LibDrawField *TempField, *field;
...
@@ -193,109 +212,121 @@ LibDrawField *TempField, *field;
/**********************************************************************/
/**********************************************************************/
EDA_Rect
EDA_LibComponentStruct
::
GetBoundaryBox
(
int
Unit
,
int
Convert
)
EDA_Rect
EDA_LibComponentStruct
::
GetBoundaryBox
(
int
Unit
,
int
Convert
)
/**********************************************************************/
/**********************************************************************/
/* Return the componenty boundary box ( in user coordinates )
/* Return the componenty boundary box ( in user coordinates )
The unit Unit, and the shape Convert are considered.
*
The unit Unit, and the shape Convert are considered.
If Unit == 0, Unit is not used
*
If Unit == 0, Unit is not used
if Convert == 0 Convert is non used
*
if Convert == 0 Convert is non used
**/
**/
{
{
int
xmin
,
xmax
,
ymin
,
ymax
,
x1
,
y1
;
int
xmin
,
xmax
,
ymin
,
ymax
,
x1
,
y1
;
int
*
pt
,
ii
;
int
*
pt
,
ii
;
LibEDA_BaseStruct
*
DrawEntry
;
LibEDA_BaseStruct
*
DrawEntry
;
EDA_Rect
BoundaryBox
;
EDA_Rect
BoundaryBox
;
DrawEntry
=
m_Drawings
;
DrawEntry
=
m_Drawings
;
if
(
DrawEntry
)
if
(
DrawEntry
)
{
{
xmin
=
ymin
=
0x7FFFFFFF
;
xmax
=
ymax
=
0x80000000
;
xmin
=
ymin
=
0x7FFFFFFF
;
xmax
=
ymax
=
0x80000000
;
}
}
else
else
{
{
xmin
=
ymin
=
-
50
;
xmax
=
ymax
=
50
;
// Min size in 1/1000 inch
xmin
=
ymin
=
-
50
;
xmax
=
ymax
=
50
;
// Min size in 1/1000 inch
}
}
for
(
;
DrawEntry
!=
NULL
;
DrawEntry
=
DrawEntry
->
Next
()
)
for
(
;
DrawEntry
!=
NULL
;
DrawEntry
=
DrawEntry
->
Next
()
)
{
{
if
(
DrawEntry
->
m_Unit
>
0
)
// The item is non common to units
if
(
DrawEntry
->
m_Unit
>
0
)
// The item is non common to units
if
(
(
m_UnitCount
>
1
)
&&
(
Unit
>
0
)
&&
(
Unit
!=
DrawEntry
->
m_Unit
)
)
if
(
(
m_UnitCount
>
1
)
&&
(
Unit
>
0
)
&&
(
Unit
!=
DrawEntry
->
m_Unit
)
)
continue
;
continue
;
if
(
DrawEntry
->
m_Convert
>
0
)
//The item is not common to alls convert
if
(
DrawEntry
->
m_Convert
>
0
)
//The item is not common to alls convert
if
(
(
Convert
>
0
)
&&
(
Convert
!=
DrawEntry
->
m_Convert
)
)
if
(
(
Convert
>
0
)
&&
(
Convert
!=
DrawEntry
->
m_Convert
)
)
continue
;
continue
;
switch
(
DrawEntry
->
m_StructType
)
switch
(
DrawEntry
->
m_StructType
)
{
{
case
COMPONENT_ARC_DRAW_TYPE
:
case
COMPONENT_ARC_DRAW_TYPE
:
{
{
// Arc is reduced to a line from m_Start to m_End.
// Arc is reduced to a line from m_Start to m_End.
// TO DO better.
// TO DO better.
LibDrawArc
*
Arc
=
(
LibDrawArc
*
)
DrawEntry
;
LibDrawArc
*
Arc
=
(
LibDrawArc
*
)
DrawEntry
;
x1
=
Arc
->
m_ArcStart
.
x
;
x1
=
Arc
->
m_ArcStart
.
x
;
y1
=
Arc
->
m_ArcStart
.
y
;
y1
=
Arc
->
m_ArcStart
.
y
;
xmin
=
MIN
(
xmin
,
x1
);
xmin
=
MIN
(
xmin
,
x1
);
ymin
=
MIN
(
ymin
,
y1
);
ymin
=
MIN
(
ymin
,
y1
);
xmax
=
MAX
(
xmax
,
x1
);
xmax
=
MAX
(
xmax
,
x1
);
ymax
=
MAX
(
ymax
,
y1
);
ymax
=
MAX
(
ymax
,
y1
);
x1
=
Arc
->
m_ArcEnd
.
x
;
x1
=
Arc
->
m_ArcEnd
.
x
;
y1
=
Arc
->
m_ArcEnd
.
y
;
y1
=
Arc
->
m_ArcEnd
.
y
;
xmin
=
MIN
(
xmin
,
x1
);
xmin
=
MIN
(
xmin
,
x1
);
ymin
=
MIN
(
ymin
,
y1
);
ymin
=
MIN
(
ymin
,
y1
);
xmax
=
MAX
(
xmax
,
x1
);
xmax
=
MAX
(
xmax
,
x1
);
ymax
=
MAX
(
ymax
,
y1
);
ymax
=
MAX
(
ymax
,
y1
);
}
}
break
;
break
;
case
COMPONENT_CIRCLE_DRAW_TYPE
:
case
COMPONENT_CIRCLE_DRAW_TYPE
:
{
{
LibDrawCircle
*
Circle
=
(
LibDrawCircle
*
)
DrawEntry
;
LibDrawCircle
*
Circle
=
(
LibDrawCircle
*
)
DrawEntry
;
x1
=
Circle
->
m_Pos
.
x
-
Circle
->
m_Rayon
;
x1
=
Circle
->
m_Pos
.
x
-
Circle
->
m_Rayon
;
y1
=
Circle
->
m_Pos
.
y
-
Circle
->
m_Rayon
;
y1
=
Circle
->
m_Pos
.
y
-
Circle
->
m_Rayon
;
xmin
=
MIN
(
xmin
,
x1
);
xmin
=
MIN
(
xmin
,
x1
);
ymin
=
MIN
(
ymin
,
y1
);
ymin
=
MIN
(
ymin
,
y1
);
x1
=
Circle
->
m_Pos
.
x
+
Circle
->
m_Rayon
;
x1
=
Circle
->
m_Pos
.
x
+
Circle
->
m_Rayon
;
y1
=
Circle
->
m_Pos
.
y
+
Circle
->
m_Rayon
;
y1
=
Circle
->
m_Pos
.
y
+
Circle
->
m_Rayon
;
xmax
=
MAX
(
xmax
,
x1
);
xmax
=
MAX
(
xmax
,
x1
);
ymax
=
MAX
(
ymax
,
y1
);
ymax
=
MAX
(
ymax
,
y1
);
}
}
break
;
break
;
case
COMPONENT_RECT_DRAW_TYPE
:
case
COMPONENT_RECT_DRAW_TYPE
:
{
{
LibDrawSquare
*
Square
=
(
LibDrawSquare
*
)
DrawEntry
;
LibDrawSquare
*
Square
=
(
LibDrawSquare
*
)
DrawEntry
;
xmin
=
MIN
(
xmin
,
Square
->
m_Pos
.
x
);
xmin
=
MIN
(
xmin
,
Square
->
m_Pos
.
x
);
xmin
=
MIN
(
xmin
,
Square
->
m_End
.
x
);
xmin
=
MIN
(
xmin
,
Square
->
m_End
.
x
);
xmax
=
MAX
(
xmax
,
Square
->
m_Pos
.
x
);
xmax
=
MAX
(
xmax
,
Square
->
m_Pos
.
x
);
xmax
=
MAX
(
xmax
,
Square
->
m_End
.
x
);
xmax
=
MAX
(
xmax
,
Square
->
m_End
.
x
);
ymin
=
MIN
(
ymin
,
Square
->
m_Pos
.
y
);
ymin
=
MIN
(
ymin
,
Square
->
m_Pos
.
y
);
ymin
=
MIN
(
ymin
,
Square
->
m_End
.
y
);
ymin
=
MIN
(
ymin
,
Square
->
m_End
.
y
);
ymax
=
MAX
(
ymax
,
Square
->
m_Pos
.
y
);
ymax
=
MAX
(
ymax
,
Square
->
m_Pos
.
y
);
ymax
=
MAX
(
ymax
,
Square
->
m_End
.
y
);
ymax
=
MAX
(
ymax
,
Square
->
m_End
.
y
);
}
}
break
;
break
;
case
COMPONENT_PIN_DRAW_TYPE
:
case
COMPONENT_PIN_DRAW_TYPE
:
{
{
LibDrawPin
*
Pin
=
(
LibDrawPin
*
)
DrawEntry
;
LibDrawPin
*
Pin
=
(
LibDrawPin
*
)
DrawEntry
;
x1
=
Pin
->
m_Pos
.
x
;
x1
=
Pin
->
m_Pos
.
x
;
y1
=
Pin
->
m_Pos
.
y
;
y1
=
Pin
->
m_Pos
.
y
;
xmin
=
MIN
(
xmin
,
x1
);
xmin
=
MIN
(
xmin
,
x1
);
xmax
=
MAX
(
xmax
,
x1
);
xmax
=
MAX
(
xmax
,
x1
);
ymin
=
MIN
(
ymin
,
y1
);
ymin
=
MIN
(
ymin
,
y1
);
ymax
=
MAX
(
ymax
,
y1
);
ymax
=
MAX
(
ymax
,
y1
);
#if 0 // 0 pour englober le point origine de la pin, 1 pour englober toute la pin
#if 0 \
switch ( Pin->Orient )
// 0 pour englober le point origine de la pin, 1 pour englober toute la pin
switch( Pin->Orient )
{
{
case PIN_UP: y1 += Pin->Len; break;
case PIN_UP:
case PIN_DOWN: y1 -= Pin->Len; break;
y1 += Pin->Len; break;
case PIN_LEFT: x1 -= Pin->Len; break;
case PIN_RIGHT: x1 += Pin->Len; break;
case PIN_DOWN:
y1 -= Pin->Len; break;
case PIN_LEFT:
x1 -= Pin->Len; break;
case PIN_RIGHT:
x1 += Pin->Len; break;
}
}
xmin = MIN(xmin, x1);
xmax = MAX(xmax, x1);
xmin = MIN( xmin, x1 );
ymin = MIN(ymin, y1);
xmax = MAX( xmax, x1 );
ymax = MAX(ymax, y1);
ymin = MIN( ymin, y1 );
ymax = MAX( ymax, y1 );
#endif
#endif
}
}
break
;
break
;
...
@@ -305,52 +336,64 @@ EDA_Rect BoundaryBox;
...
@@ -305,52 +336,64 @@ EDA_Rect BoundaryBox;
case
COMPONENT_POLYLINE_DRAW_TYPE
:
case
COMPONENT_POLYLINE_DRAW_TYPE
:
{
{
LibDrawPolyline
*
polyline
=
(
LibDrawPolyline
*
)
DrawEntry
;
LibDrawPolyline
*
polyline
=
(
LibDrawPolyline
*
)
DrawEntry
;
pt
=
polyline
->
PolyList
;
pt
=
polyline
->
PolyList
;
for
(
ii
=
0
;
ii
<
polyline
->
n
;
ii
++
)
for
(
ii
=
0
;
ii
<
polyline
->
n
;
ii
++
)
{
{
if
(
xmin
>
*
pt
)
xmin
=
*
pt
;
if
(
xmin
>
*
pt
)
if
(
xmax
<
*
pt
)
xmax
=
*
pt
;
xmin
=
*
pt
;
if
(
xmax
<
*
pt
)
xmax
=
*
pt
;
pt
++
;
pt
++
;
if
(
ymin
>
*
pt
)
ymin
=
*
pt
;
if
(
ymin
>
*
pt
)
if
(
ymax
<
*
pt
)
ymax
=
*
pt
;
ymin
=
*
pt
;
if
(
ymax
<
*
pt
)
ymax
=
*
pt
;
pt
++
;
pt
++
;
}
}
}
}
break
;
break
;
default
:
;
}
}
}
}
// Update the BoundaryBox. Remenber the fact the screen Y axis is the reverse */
// Update the BoundaryBox. Remenber the fact the screen Y axis is the reverse */
ymax
=
-
ymax
;
ymin
=
-
ymin
;
// Y is is screen axis sense
ymax
=
-
ymax
;
ymin
=
-
ymin
;
// Y is is screen axis sense
// Ensure w and H > 0 (wxRect assume it)
// Ensure w and H > 0 (wxRect assume it)
if
(
xmax
<
xmin
)
EXCHG
(
xmax
,
xmin
);
if
(
xmax
<
xmin
)
if
(
ymax
<
ymin
)
EXCHG
(
ymax
,
ymin
);
EXCHG
(
xmax
,
xmin
);
BoundaryBox
.
SetX
(
xmin
);
BoundaryBox
.
SetWidth
(
xmax
-
xmin
);
if
(
ymax
<
ymin
)
BoundaryBox
.
SetY
(
ymin
);
BoundaryBox
.
SetHeight
(
ymax
-
ymin
);
EXCHG
(
ymax
,
ymin
);
BoundaryBox
.
SetX
(
xmin
);
BoundaryBox
.
SetWidth
(
xmax
-
xmin
);
BoundaryBox
.
SetY
(
ymin
);
BoundaryBox
.
SetHeight
(
ymax
-
ymin
);
return
BoundaryBox
;
return
BoundaryBox
;
}
}
/***************************/
/***************************/
/* class LibraryFieldEntry */
/* class LibraryFieldEntry */
/***************************/
/***************************/
/* a Field is a string linked to a component.
Unlike a pure graphic text, fields can be used in netlist generation
and other things.
4 fields have a special meaning:
/* a Field is a string linked to a component.
REFERENCE
* Unlike a pure graphic text, fields can be used in netlist generation
VALUE
* and other things.
FOOTPRINT NAME
*
SCHEMATIC LINK (reserved but not used in kicad)
* 4 fields have a special meaning:
*/
* REFERENCE
LibDrawField
::
LibDrawField
(
int
idfield
)
:
LibEDA_BaseStruct
(
COMPONENT_FIELD_DRAW_TYPE
)
* VALUE
* FOOTPRINT NAME
* SCHEMATIC LINK (reserved but not used in kicad)
*/
LibDrawField
::
LibDrawField
(
int
idfield
)
:
LibEDA_BaseStruct
(
COMPONENT_FIELD_DRAW_TYPE
)
{
{
m_FieldId
=
idfield
;
/* 0 a 11, 0 = REFERENCE, 1 = VALUE*/
m_FieldId
=
idfield
;
/* 0 a 11, 0 = REFERENCE, 1 = VALUE*/
if
(
m_FieldId
<
0
)
m_FieldId
=
0
;
if
(
m_FieldId
<
0
)
if
(
m_FieldId
>=
NUMBER_OF_FIELDS
)
m_FieldId
=
NUMBER_OF_FIELDS
-
1
;
m_FieldId
=
0
;
if
(
m_FieldId
>=
NUMBER_OF_FIELDS
)
m_FieldId
=
NUMBER_OF_FIELDS
-
1
;
m_Size
.
x
=
m_Size
.
y
=
DEFAULT_SIZE_TEXT
;
m_Size
.
x
=
m_Size
.
y
=
DEFAULT_SIZE_TEXT
;
m_Orient
=
0
;
/* Orientation */
m_Orient
=
0
;
/* Orientation */
m_Attributs
=
0
;
/* Attributs = unvisible ... */
m_Attributs
=
0
;
/* Attributs = unvisible ... */
...
@@ -359,21 +402,25 @@ LibDrawField::LibDrawField(int idfield) : LibEDA_BaseStruct(COMPONENT_FIELD_DRAW
...
@@ -359,21 +402,25 @@ LibDrawField::LibDrawField(int idfield) : LibEDA_BaseStruct(COMPONENT_FIELD_DRAW
m_VJustify
=
GR_TEXT_VJUSTIFY_CENTER
;
/* Horizontal and vertical text justification */
m_VJustify
=
GR_TEXT_VJUSTIFY_CENTER
;
/* Horizontal and vertical text justification */
}
}
LibDrawField
::~
LibDrawField
(
void
)
LibDrawField
::~
LibDrawField
(
void
)
{
{
}
}
// Creation et Duplication d'un field
LibDrawField
*
LibDrawField
::
GenCopy
(
void
)
// Creation et Duplication d'un field
LibDrawField
*
LibDrawField
::
GenCopy
(
void
)
{
{
LibDrawField
*
newfield
=
new
LibDrawField
(
m_FieldId
);
LibDrawField
*
newfield
=
new
LibDrawField
(
m_FieldId
);
Copy
(
newfield
);
Copy
(
newfield
);
return
newfield
;
return
newfield
;
}
}
// copie du field dans le field Target
void
LibDrawField
::
Copy
(
LibDrawField
*
Target
)
// copie du field dans le field Target
void
LibDrawField
::
Copy
(
LibDrawField
*
Target
)
{
{
Target
->
m_Pos
=
m_Pos
;
Target
->
m_Pos
=
m_Pos
;
Target
->
m_Size
=
m_Size
;
Target
->
m_Size
=
m_Size
;
...
@@ -386,19 +433,21 @@ void LibDrawField::Copy(LibDrawField * Target)
...
@@ -386,19 +433,21 @@ void LibDrawField::Copy(LibDrawField * Target)
Target
->
m_VJustify
=
m_VJustify
;
Target
->
m_VJustify
=
m_VJustify
;
}
}
/* Elements Graphiques */
/* Elements Graphiques */
LibEDA_BaseStruct
::
LibEDA_BaseStruct
(
int
struct_type
)
:
LibEDA_BaseStruct
::
LibEDA_BaseStruct
(
KICAD_T
struct_type
)
:
EDA_BaseStruct
(
struct_type
)
EDA_BaseStruct
(
struct_type
)
{
{
m_Unit
=
0
;
/* Unit identification (for multi part per package)
m_Unit
=
0
;
/* Unit identification (for multi part per package)
0 if the item is common to all units */
*
0 if the item is common to all units */
m_Convert
=
0
;
/* Shape identification (for parts which have a convert shape)
m_Convert
=
0
;
/* Shape identification (for parts which have a convert shape)
0 if the item is common to all shapes */
*
0 if the item is common to all shapes */
m_Width
=
0
;
/* Default value to draw lines or arc ... */
m_Width
=
0
;
/* Default value to draw lines or arc ... */
}
}
/***************************************************************/
/***************************************************************/
LibDrawPin
::
LibDrawPin
(
void
)
:
LibEDA_BaseStruct
(
COMPONENT_PIN_DRAW_TYPE
)
LibDrawPin
::
LibDrawPin
(
void
)
:
LibEDA_BaseStruct
(
COMPONENT_PIN_DRAW_TYPE
)
/***************************************************************/
/***************************************************************/
{
{
m_PinLen
=
300
;
/* default Pin len */
m_PinLen
=
300
;
/* default Pin len */
...
@@ -410,58 +459,80 @@ LibDrawPin::LibDrawPin(void) : LibEDA_BaseStruct(COMPONENT_PIN_DRAW_TYPE)
...
@@ -410,58 +459,80 @@ LibDrawPin::LibDrawPin(void) : LibEDA_BaseStruct(COMPONENT_PIN_DRAW_TYPE)
m_PinNumSize
=
50
;
m_PinNumSize
=
50
;
m_PinNameSize
=
50
;
/* Default size for pin name and num */
m_PinNameSize
=
50
;
/* Default size for pin name and num */
m_Width
=
0
;
m_Width
=
0
;
// m_PinNumWidth = m_PinNameWidth = 0; // Unused
// m_PinNumWidth = m_PinNameWidth = 0; // Unused
}
}
/******************************************/
/******************************************/
wxPoint
LibDrawPin
::
ReturnPinEndPoint
(
void
)
wxPoint
LibDrawPin
::
ReturnPinEndPoint
(
void
)
/******************************************/
/******************************************/
/* return the pin end position, for a component in normal orient
/* return the pin end position, for a component in normal orient
*/
*/
{
{
wxPoint
pos
=
m_Pos
;
wxPoint
pos
=
m_Pos
;
switch
(
m_Orient
)
switch
(
m_Orient
)
{
{
case
PIN_UP
:
pos
.
y
+=
m_PinLen
;
break
;
case
PIN_UP
:
case
PIN_DOWN
:
pos
.
y
-=
m_PinLen
;
break
;
pos
.
y
+=
m_PinLen
;
break
;
case
PIN_LEFT
:
pos
.
x
-=
m_PinLen
;
break
;
case
PIN_RIGHT
:
pos
.
x
+=
m_PinLen
;
break
;
case
PIN_DOWN
:
pos
.
y
-=
m_PinLen
;
break
;
case
PIN_LEFT
:
pos
.
x
-=
m_PinLen
;
break
;
case
PIN_RIGHT
:
pos
.
x
+=
m_PinLen
;
break
;
}
}
return
pos
;
return
pos
;
}
}
/********************************************************/
/********************************************************/
int
LibDrawPin
::
ReturnPinDrawOrient
(
int
TransMat
[
2
][
2
]
)
int
LibDrawPin
::
ReturnPinDrawOrient
(
int
TransMat
[
2
][
2
]
)
/********************************************************/
/********************************************************/
/* Return the pin real orientation (PIN_UP, PIN_DOWN, PIN_RIGHT, PIN_LEFT),
/* Return the pin real orientation (PIN_UP, PIN_DOWN, PIN_RIGHT, PIN_LEFT),
according to its orientation,
*
according to its orientation,
AND the matrix transform (rot, mirror) TransMat
*
AND the matrix transform (rot, mirror) TransMat
*/
*/
{
{
int
orient
;
int
orient
;
int
x1
=
0
,
y1
=
0
;
int
x1
=
0
,
y1
=
0
;
int
t1
,
t2
;
int
t1
,
t2
;
switch
(
m_Orient
)
switch
(
m_Orient
)
{
{
case
PIN_UP
:
y1
=
1
;
break
;
case
PIN_UP
:
case
PIN_DOWN
:
y1
=
-
1
;
break
;
y1
=
1
;
break
;
case
PIN_LEFT
:
x1
=
-
1
;
break
;
case
PIN_RIGHT
:
x1
=
1
;
break
;
case
PIN_DOWN
:
y1
=
-
1
;
break
;
case
PIN_LEFT
:
x1
=
-
1
;
break
;
case
PIN_RIGHT
:
x1
=
1
;
break
;
}
}
t1
=
TransMat
[
0
][
0
]
*
x1
+
TransMat
[
0
][
1
]
*
y1
;
t1
=
TransMat
[
0
][
0
]
*
x1
+
TransMat
[
0
][
1
]
*
y1
;
t2
=
TransMat
[
1
][
0
]
*
x1
+
TransMat
[
1
][
1
]
*
y1
;
t2
=
TransMat
[
1
][
0
]
*
x1
+
TransMat
[
1
][
1
]
*
y1
;
orient
=
PIN_UP
;
orient
=
PIN_UP
;
if
(
t1
==
0
)
if
(
t1
==
0
)
{
{
if
(
t2
>
0
)
orient
=
PIN_DOWN
;
if
(
t2
>
0
)
orient
=
PIN_DOWN
;
}
}
else
else
{
{
orient
=
PIN_RIGHT
;
orient
=
PIN_RIGHT
;
if
(
t1
<
0
)
orient
=
PIN_LEFT
;
if
(
t1
<
0
)
orient
=
PIN_LEFT
;
}
}
return
orient
;
return
orient
;
...
@@ -469,45 +540,52 @@ int t1, t2;
...
@@ -469,45 +540,52 @@ int t1, t2;
/****************************************************/
/****************************************************/
void
LibDrawPin
::
ReturnPinStringNum
(
wxString
&
buffer
)
void
LibDrawPin
::
ReturnPinStringNum
(
wxString
&
buffer
)
/****************************************************/
/****************************************************/
/* fill the buffer with pin num as a wxString
/* fill the buffer with pin num as a wxString
Pin num is coded as a long
*
Pin num is coded as a long
Used to print/draw the pin num
*
Used to print/draw the pin num
*/
*/
{
{
char
ascii_buf
[
5
];
char
ascii_buf
[
5
];
strncpy
(
ascii_buf
,
(
char
*
)
&
m_PinNum
,
4
);
strncpy
(
ascii_buf
,
(
char
*
)
&
m_PinNum
,
4
);
ascii_buf
[
4
]
=
0
;
ascii_buf
[
4
]
=
0
;
buffer
=
CONV_FROM_UTF8
(
ascii_buf
);
buffer
=
CONV_FROM_UTF8
(
ascii_buf
);
}
}
/****************************************************/
/****************************************************/
void
LibDrawPin
::
SetPinNumFromString
(
wxString
&
buffer
)
void
LibDrawPin
::
SetPinNumFromString
(
wxString
&
buffer
)
/****************************************************/
/****************************************************/
/* fill the buffer with pin num as a wxString
/* fill the buffer with pin num as a wxString
Pin num is coded as a long
*
Pin num is coded as a long
Used to print/draw the pin num
*
Used to print/draw the pin num
*/
*/
{
{
char
ascii_buf
[
4
];
char
ascii_buf
[
4
];
unsigned
ii
,
len
=
buffer
.
Len
();
unsigned
ii
,
len
=
buffer
.
Len
();
ascii_buf
[
0
]
=
ascii_buf
[
1
]
=
ascii_buf
[
2
]
=
ascii_buf
[
3
]
=
0
;
ascii_buf
[
0
]
=
ascii_buf
[
1
]
=
ascii_buf
[
2
]
=
ascii_buf
[
3
]
=
0
;
if
(
len
>
4
)
len
=
4
;
if
(
len
>
4
)
for
(
ii
=
0
;
ii
<
len
;
ii
++
)
len
=
4
;
for
(
ii
=
0
;
ii
<
len
;
ii
++
)
{
{
ascii_buf
[
ii
]
=
buffer
.
GetChar
(
ii
)
&
0xFF
;
ascii_buf
[
ii
]
=
buffer
.
GetChar
(
ii
)
&
0xFF
;
}
}
strncpy
((
char
*
)
&
m_PinNum
,
ascii_buf
,
4
);
strncpy
(
(
char
*
)
&
m_PinNum
,
ascii_buf
,
4
);
}
}
/*************************************/
/*************************************/
LibDrawPin
*
LibDrawPin
::
GenCopy
(
void
)
LibDrawPin
*
LibDrawPin
::
GenCopy
(
void
)
/*************************************/
/*************************************/
{
{
LibDrawPin
*
newpin
=
new
LibDrawPin
();
LibDrawPin
*
newpin
=
new
LibDrawPin
();
newpin
->
m_Pos
=
m_Pos
;
newpin
->
m_Pos
=
m_Pos
;
newpin
->
m_PinLen
=
m_PinLen
;
newpin
->
m_PinLen
=
m_PinLen
;
...
@@ -528,8 +606,9 @@ LibDrawPin * newpin = new LibDrawPin();
...
@@ -528,8 +606,9 @@ LibDrawPin * newpin = new LibDrawPin();
return
newpin
;
return
newpin
;
}
}
/**************************************************************/
/**************************************************************/
LibDrawArc
::
LibDrawArc
(
void
)
:
LibEDA_BaseStruct
(
COMPONENT_ARC_DRAW_TYPE
)
LibDrawArc
::
LibDrawArc
(
void
)
:
LibEDA_BaseStruct
(
COMPONENT_ARC_DRAW_TYPE
)
/**************************************************************/
/**************************************************************/
{
{
m_Rayon
=
0
;
m_Rayon
=
0
;
...
@@ -540,10 +619,10 @@ LibDrawArc::LibDrawArc(void) : LibEDA_BaseStruct(COMPONENT_ARC_DRAW_TYPE)
...
@@ -540,10 +619,10 @@ LibDrawArc::LibDrawArc(void) : LibEDA_BaseStruct(COMPONENT_ARC_DRAW_TYPE)
/************************************/
/************************************/
LibDrawArc
*
LibDrawArc
::
GenCopy
(
void
)
LibDrawArc
*
LibDrawArc
::
GenCopy
(
void
)
/************************************/
/************************************/
{
{
LibDrawArc
*
newitem
=
new
LibDrawArc
();
LibDrawArc
*
newitem
=
new
LibDrawArc
();
newitem
->
m_Pos
=
m_Pos
;
newitem
->
m_Pos
=
m_Pos
;
newitem
->
m_ArcStart
=
m_ArcStart
;
newitem
->
m_ArcStart
=
m_ArcStart
;
...
@@ -561,18 +640,19 @@ LibDrawArc * newitem = new LibDrawArc();
...
@@ -561,18 +640,19 @@ LibDrawArc * newitem = new LibDrawArc();
/**********************************************************************/
/**********************************************************************/
LibDrawCircle
::
LibDrawCircle
(
void
)
:
LibEDA_BaseStruct
(
COMPONENT_CIRCLE_DRAW_TYPE
)
LibDrawCircle
::
LibDrawCircle
(
void
)
:
LibEDA_BaseStruct
(
COMPONENT_CIRCLE_DRAW_TYPE
)
/**********************************************************************/
/**********************************************************************/
{
{
m_Rayon
=
0
;
m_Rayon
=
0
;
m_Fill
=
NO_FILL
;
m_Fill
=
NO_FILL
;
}
}
/*******************************************/
/*******************************************/
LibDrawCircle
*
LibDrawCircle
::
GenCopy
(
void
)
LibDrawCircle
*
LibDrawCircle
::
GenCopy
(
void
)
/*******************************************/
/*******************************************/
{
{
LibDrawCircle
*
newitem
=
new
LibDrawCircle
();
LibDrawCircle
*
newitem
=
new
LibDrawCircle
();
newitem
->
m_Pos
=
m_Pos
;
newitem
->
m_Pos
=
m_Pos
;
newitem
->
m_Rayon
=
m_Rayon
;
newitem
->
m_Rayon
=
m_Rayon
;
...
@@ -586,20 +666,21 @@ LibDrawCircle * newitem = new LibDrawCircle();
...
@@ -586,20 +666,21 @@ LibDrawCircle * newitem = new LibDrawCircle();
/*****************************************************************/
/*****************************************************************/
LibDrawText
::
LibDrawText
(
void
)
:
LibEDA_BaseStruct
(
COMPONENT_GRAPHIC_TEXT_DRAW_TYPE
)
LibDrawText
::
LibDrawText
(
void
)
:
LibEDA_BaseStruct
(
COMPONENT_GRAPHIC_TEXT_DRAW_TYPE
)
/*****************************************************************/
/*****************************************************************/
{
{
m_Horiz
=
TEXT_ORIENT_HORIZ
;
m_Horiz
=
TEXT_ORIENT_HORIZ
;
m_Size
=
wxSize
(
50
,
50
);
m_Size
=
wxSize
(
50
,
50
);
m_Type
=
0
;
m_Type
=
0
;
m_Width
=
0
;
m_Width
=
0
;
}
}
/***************************************/
/***************************************/
LibDrawText
*
LibDrawText
::
GenCopy
(
void
)
LibDrawText
*
LibDrawText
::
GenCopy
(
void
)
/***************************************/
/***************************************/
{
{
LibDrawText
*
newitem
=
new
LibDrawText
();
LibDrawText
*
newitem
=
new
LibDrawText
();
newitem
->
m_Pos
=
m_Pos
;
newitem
->
m_Pos
=
m_Pos
;
newitem
->
m_Horiz
=
m_Horiz
;
newitem
->
m_Horiz
=
m_Horiz
;
...
@@ -614,16 +695,16 @@ LibDrawText * newitem = new LibDrawText();
...
@@ -614,16 +695,16 @@ LibDrawText * newitem = new LibDrawText();
}
}
LibDrawSquare
::
LibDrawSquare
(
void
)
:
LibEDA_BaseStruct
(
COMPONENT_RECT_DRAW_TYPE
)
LibDrawSquare
::
LibDrawSquare
(
void
)
:
LibEDA_BaseStruct
(
COMPONENT_RECT_DRAW_TYPE
)
{
{
m_Width
=
0
;
m_Width
=
0
;
m_Fill
=
NO_FILL
;
m_Fill
=
NO_FILL
;
}
}
LibDrawSquare
*
LibDrawSquare
::
GenCopy
(
void
)
LibDrawSquare
*
LibDrawSquare
::
GenCopy
(
void
)
{
{
LibDrawSquare
*
newitem
=
new
LibDrawSquare
();
LibDrawSquare
*
newitem
=
new
LibDrawSquare
();
newitem
->
m_Pos
=
m_Pos
;
newitem
->
m_Pos
=
m_Pos
;
newitem
->
m_End
=
m_End
;
newitem
->
m_End
=
m_End
;
...
@@ -635,14 +716,16 @@ LibDrawSquare * newitem = new LibDrawSquare();
...
@@ -635,14 +716,16 @@ LibDrawSquare * newitem = new LibDrawSquare();
return
newitem
;
return
newitem
;
}
}
LibDrawSegment
::
LibDrawSegment
(
void
)
:
LibEDA_BaseStruct
(
COMPONENT_LINE_DRAW_TYPE
)
LibDrawSegment
::
LibDrawSegment
(
void
)
:
LibEDA_BaseStruct
(
COMPONENT_LINE_DRAW_TYPE
)
{
{
m_Width
=
0
;
m_Width
=
0
;
}
}
LibDrawSegment
*
LibDrawSegment
::
GenCopy
(
void
)
LibDrawSegment
*
LibDrawSegment
::
GenCopy
(
void
)
{
{
LibDrawSegment
*
newitem
=
new
LibDrawSegment
();
LibDrawSegment
*
newitem
=
new
LibDrawSegment
();
newitem
->
m_Pos
=
m_Pos
;
newitem
->
m_Pos
=
m_Pos
;
newitem
->
m_End
=
m_End
;
newitem
->
m_End
=
m_End
;
...
@@ -654,7 +737,7 @@ LibDrawSegment * newitem = new LibDrawSegment();
...
@@ -654,7 +737,7 @@ LibDrawSegment * newitem = new LibDrawSegment();
}
}
LibDrawPolyline
::
LibDrawPolyline
(
void
)
:
LibEDA_BaseStruct
(
COMPONENT_POLYLINE_DRAW_TYPE
)
LibDrawPolyline
::
LibDrawPolyline
(
void
)
:
LibEDA_BaseStruct
(
COMPONENT_POLYLINE_DRAW_TYPE
)
{
{
n
=
0
;
n
=
0
;
PolyList
=
NULL
;
PolyList
=
NULL
;
...
@@ -662,19 +745,21 @@ LibDrawPolyline::LibDrawPolyline(void) : LibEDA_BaseStruct(COMPONENT_POLYLINE_DR
...
@@ -662,19 +745,21 @@ LibDrawPolyline::LibDrawPolyline(void) : LibEDA_BaseStruct(COMPONENT_POLYLINE_DR
m_Width
=
0
;
m_Width
=
0
;
}
}
/************************************************/
/************************************************/
LibDrawPolyline
*
LibDrawPolyline
::
GenCopy
(
void
)
LibDrawPolyline
*
LibDrawPolyline
::
GenCopy
(
void
)
/************************************************/
/************************************************/
{
{
LibDrawPolyline
*
newitem
=
new
LibDrawPolyline
();
LibDrawPolyline
*
newitem
=
new
LibDrawPolyline
();
int
size
;
int
size
;
newitem
->
n
=
n
;
newitem
->
n
=
n
;
size
=
sizeof
(
int
)
*
2
*
n
;
size
=
sizeof
(
int
)
*
2
*
n
;
if
(
size
)
if
(
size
)
{
{
newitem
->
PolyList
=
(
int
*
)
MyMalloc
(
size
);
newitem
->
PolyList
=
(
int
*
)
MyMalloc
(
size
);
memcpy
(
newitem
->
PolyList
,
PolyList
,
size
);
memcpy
(
newitem
->
PolyList
,
PolyList
,
size
);
}
}
newitem
->
m_Pos
=
m_Pos
;
newitem
->
m_Pos
=
m_Pos
;
newitem
->
m_Width
=
m_Width
;
newitem
->
m_Width
=
m_Width
;
...
@@ -685,23 +770,23 @@ int size;
...
@@ -685,23 +770,23 @@ int size;
return
newitem
;
return
newitem
;
}
}
/***************************************************/
/***************************************************/
void
LibDrawPolyline
::
AddPoint
(
const
wxPoint
&
point
)
void
LibDrawPolyline
::
AddPoint
(
const
wxPoint
&
point
)
/***************************************************/
/***************************************************/
/* add a point to the polyline coordinate list, and realloc the memory
/* add a point to the polyline coordinate list, and realloc the memory
*/
*/
{
{
int
allocsize
;
int
allocsize
;
n
++
;
n
++
;
allocsize
=
2
*
sizeof
(
int
)
*
n
;
allocsize
=
2
*
sizeof
(
int
)
*
n
;
if
(
PolyList
==
NULL
)
if
(
PolyList
==
NULL
)
PolyList
=
(
int
*
)
MyMalloc
(
allocsize
);
PolyList
=
(
int
*
)
MyMalloc
(
allocsize
);
else
else
PolyList
=
(
int
*
)
realloc
(
PolyList
,
allocsize
);
PolyList
=
(
int
*
)
realloc
(
PolyList
,
allocsize
);
PolyList
[(
n
*
2
)
-
2
]
=
point
.
x
;
PolyList
[(
n
*
2
)
-
2
]
=
point
.
x
;
PolyList
[(
n
*
2
)
-
1
]
=
-
point
.
y
;
PolyList
[(
n
*
2
)
-
1
]
=
-
point
.
y
;
}
}
eeschema/libcmp.h
View file @
f3c324d5
...
@@ -15,7 +15,7 @@
...
@@ -15,7 +15,7 @@
#define LIB_VERSION_MINOR 3
#define LIB_VERSION_MINOR 3
#define LIBFILE_IDENT "EESchema-LIBRARY Version"
/* Must be at the lib file start. */
#define LIBFILE_IDENT "EESchema-LIBRARY Version"
/* Must be at the lib file start. */
#define DOCFILE_IDENT "EESchema-DOCLIB Version 2.0"
/* Must be at the doc file start. */
#define DOCFILE_IDENT "EESchema-DOCLIB Version 2.0"
/* Must be at the doc file start. */
#define DOC_EXT
wxT(".dcm")
/* extension des fichiers de documentation */
#define DOC_EXT
wxT( ".dcm" )
/* extension des fichiers de documentation */
#define TARGET_PIN_DIAM 12
/* Diam cercle des extremites des pins */
#define TARGET_PIN_DIAM 12
/* Diam cercle des extremites des pins */
...
@@ -56,9 +56,9 @@ typedef enum {
...
@@ -56,9 +56,9 @@ typedef enum {
/* flags utilises dans FindLibPart() : */
/* flags utilises dans FindLibPart() : */
#define FIND_ROOT 0
/* indique la recherche du composant racine si
#define FIND_ROOT 0
/* indique la recherche du composant racine si
meme si le composant specifie est un alias */
*
meme si le composant specifie est un alias */
#define FIND_ALIAS 1
/* indique la recherche du composant specifie
#define FIND_ALIAS 1
/* indique la recherche du composant specifie
(alias ou racine) */
*
(alias ou racine) */
/* definition des types des structures d'elements de librairie */
/* definition des types des structures d'elements de librairie */
typedef
enum
{
typedef
enum
{
...
@@ -90,23 +90,25 @@ typedef enum { /* Type des Pins. si modif: modifier tableau des mgs suivant */
...
@@ -90,23 +90,25 @@ typedef enum { /* Type des Pins. si modif: modifier tableau des mgs suivant */
}
ElectricPinType
;
}
ElectricPinType
;
/* Messages d'affichage du type electrique */
/* Messages d'affichage du type electrique */
eda_global
wxChar
*
MsgPinElectricType
[]
eda_global
wxChar
*
MsgPinElectricType
[]
#ifdef MAIN
#ifdef MAIN
=
{
=
{
wxT
(
"input"
),
wxT
(
"input"
),
wxT
(
"output"
),
wxT
(
"output"
),
wxT
(
"BiDi"
),
wxT
(
"BiDi"
),
wxT
(
"3state"
),
wxT
(
"3state"
),
wxT
(
"passive"
),
wxT
(
"passive"
),
wxT
(
"unspc"
),
wxT
(
"unspc"
),
wxT
(
"power_in"
),
wxT
(
"power_in"
),
wxT
(
"power_out"
),
wxT
(
"power_out"
),
wxT
(
"openCol"
),
wxT
(
"openCol"
),
wxT
(
"openEm"
),
wxT
(
"openEm"
),
wxT
(
"?????"
)
wxT
(
"?????"
)
}
}
#endif
#endif
;
;
/* Autres bits: bits du membre .Flag des Pins */
/* Autres bits: bits du membre .Flag des Pins */
#define PINNOTDRAW 1
/* si 1: pin invisible */
#define PINNOTDRAW 1
/* si 1: pin invisible */
...
@@ -117,14 +119,14 @@ typedef enum { /* Forme des Pins */
...
@@ -117,14 +119,14 @@ typedef enum { /* Forme des Pins */
CLOCK
=
2
,
CLOCK
=
2
,
LOWLEVEL_IN
=
4
,
LOWLEVEL_IN
=
4
,
LOWLEVEL_OUT
=
8
LOWLEVEL_OUT
=
8
}
DrawPinShape
;
}
DrawPinShape
;
typedef
enum
{
/* Orientation des Pins */
typedef
enum
{
/* Orientation des Pins */
PIN_RIGHT
=
'R'
,
PIN_RIGHT
=
'R'
,
PIN_LEFT
=
'L'
,
PIN_LEFT
=
'L'
,
PIN_UP
=
'U'
,
PIN_UP
=
'U'
,
PIN_DOWN
=
'D'
,
PIN_DOWN
=
'D'
,
}
DrawPinOrient
;
}
DrawPinOrient
;
/*************************************/
/*************************************/
/* Classe representant une librairie */
/* Classe representant une librairie */
...
@@ -138,8 +140,8 @@ public:
...
@@ -138,8 +140,8 @@ public:
wxString
m_FullFileName
;
/* Full File Name (with path) of library loaded. */
wxString
m_FullFileName
;
/* Full File Name (with path) of library loaded. */
wxString
m_Header
;
/* first line of library loaded. */
wxString
m_Header
;
/* first line of library loaded. */
int
m_NumOfParts
;
/* Number of parts this library has. */
int
m_NumOfParts
;
/* Number of parts this library has. */
PriorQue
*
m_Entries
;
/* Parts themselves are saved here. */
PriorQue
*
m_Entries
;
/* Parts themselves are saved here. */
LibraryStruct
*
m_Pnext
;
/* Point on next lib in chain. */
LibraryStruct
*
m_Pnext
;
/* Point on next lib in chain. */
int
m_Modified
;
/* flag indicateur d'edition */
int
m_Modified
;
/* flag indicateur d'edition */
int
m_Size
;
// Size in bytes (for statistics)
int
m_Size
;
// Size in bytes (for statistics)
unsigned
long
m_TimeStamp
;
// Signature temporelle
unsigned
long
m_TimeStamp
;
// Signature temporelle
...
@@ -148,10 +150,10 @@ public:
...
@@ -148,10 +150,10 @@ public:
// True for the library cache
// True for the library cache
public
:
public
:
LibraryStruct
(
int
type
,
const
wxString
&
name
,
const
wxString
&
fullname
);
LibraryStruct
(
int
type
,
const
wxString
&
name
,
const
wxString
&
fullname
);
~
LibraryStruct
();
~
LibraryStruct
();
bool
WriteHeader
(
FILE
*
file
);
bool
WriteHeader
(
FILE
*
file
);
bool
ReadHeader
(
FILE
*
file
,
int
*
LineNum
);
bool
ReadHeader
(
FILE
*
file
,
int
*
LineNum
);
};
};
...
@@ -161,24 +163,27 @@ public:
...
@@ -161,24 +163,27 @@ public:
/* class LibEDA_BaseStruct : Basic class for items used in a library component
/* class LibEDA_BaseStruct : Basic class for items used in a library component
(graphic shapes, texts, fields, pins)
*
(graphic shapes, texts, fields, pins)
*/
*/
class
LibEDA_BaseStruct
:
public
EDA_BaseStruct
class
LibEDA_BaseStruct
:
public
EDA_BaseStruct
{
{
public
:
public
:
int
m_Unit
;
/* Unit identification (for multi part per parkage)
int
m_Unit
;
/* Unit identification (for multi part per parkage)
0 if the item is common to all units */
*
0 if the item is common to all units */
int
m_Convert
;
/* Shape identification (for parts which have a convert shape)
int
m_Convert
;
/* Shape identification (for parts which have a convert shape)
0 if the item is common to all shapes */
*
0 if the item is common to all shapes */
wxPoint
m_Pos
;
/* Position or centre (Arc and Circle) or start point (segments) */
wxPoint
m_Pos
;
/* Position or centre (Arc and Circle) or start point (segments) */
int
m_Width
;
/* Width of draw lines */
int
m_Width
;
/* Width of draw lines */
public
:
public
:
LibEDA_BaseStruct
*
Next
(
void
)
{
return
(
LibEDA_BaseStruct
*
)
Pnext
;}
LibEDA_BaseStruct
*
Next
(
void
)
LibEDA_BaseStruct
(
int
struct_type
);
{
virtual
~
LibEDA_BaseStruct
(
void
){}
return
(
LibEDA_BaseStruct
*
)
Pnext
;
void
Display_Infos_DrawEntry
(
WinEDA_DrawFrame
*
frame
);
}
LibEDA_BaseStruct
(
KICAD_T
struct_type
);
virtual
~
LibEDA_BaseStruct
(
void
)
{
}
void
Display_Infos_DrawEntry
(
WinEDA_DrawFrame
*
frame
);
};
};
...
@@ -191,30 +196,32 @@ public:
...
@@ -191,30 +196,32 @@ public:
int
m_PinType
;
/* Electrical pin properties */
int
m_PinType
;
/* Electrical pin properties */
int
m_Attributs
;
/* bit 0 != 0: pin invisible */
int
m_Attributs
;
/* bit 0 != 0: pin invisible */
long
m_PinNum
;
/* Pin number: 4 Ascii code like "12" or "anod" or "G6"
long
m_PinNum
;
/* Pin number: 4 Ascii code like "12" or "anod" or "G6"
"12" is really "12\0\0"*/
*
"12" is really "12\0\0"*/
wxString
m_PinName
;
wxString
m_PinName
;
int
m_PinNumSize
,
m_PinNameSize
;
/* Pin num and Pin name sizes */
int
m_PinNumSize
,
m_PinNameSize
;
/* Pin num and Pin name sizes */
// short m_PinNumWidth, m_PinNameWidth; /* (Unused) Pin num and Pin name text width */
// short m_PinNumWidth, m_PinNameWidth; /* (Unused) Pin num and Pin name text width */
public
:
public
:
LibDrawPin
(
void
);
LibDrawPin
(
void
);
~
LibDrawPin
(
void
)
{}
~
LibDrawPin
(
void
)
{
}
LibDrawPin
*
GenCopy
(
void
);
LibDrawPin
*
GenCopy
(
void
);
bool
WriteDescr
(
FILE
*
File
);
bool
WriteDescr
(
FILE
*
File
);
void
Display_Infos
(
WinEDA_DrawFrame
*
frame
);
void
Display_Infos
(
WinEDA_DrawFrame
*
frame
);
wxPoint
ReturnPinEndPoint
(
void
);
wxPoint
ReturnPinEndPoint
(
void
);
int
ReturnPinDrawOrient
(
int
TransMat
[
2
][
2
]);
int
ReturnPinDrawOrient
(
int
TransMat
[
2
][
2
]
);
void
ReturnPinStringNum
(
wxString
&
buffer
);
void
ReturnPinStringNum
(
wxString
&
buffer
);
void
SetPinNumFromString
(
wxString
&
buffer
);
void
SetPinNumFromString
(
wxString
&
buffer
);
void
DrawPinSymbol
(
WinEDA_DrawPanel
*
panel
,
wxDC
*
DC
,
const
wxPoint
&
pin_pos
,
int
orient
,
void
DrawPinSymbol
(
WinEDA_DrawPanel
*
panel
,
wxDC
*
DC
,
const
wxPoint
&
pin_pos
,
int
DrawMode
,
int
Color
=
-
1
);
int
orient
,
int
DrawMode
,
int
Color
=
-
1
);
void
DrawPinTexts
(
WinEDA_DrawPanel
*
panel
,
wxDC
*
DC
,
wxPoint
&
pin_pos
,
int
orient
,
void
DrawPinTexts
(
WinEDA_DrawPanel
*
panel
,
wxDC
*
DC
,
wxPoint
&
pin_pos
,
int
orient
,
int
TextInside
,
bool
DrawPinNum
,
bool
DrawPinName
,
int
TextInside
,
bool
DrawPinNum
,
bool
DrawPinName
,
int
Color
,
int
DrawMode
);
int
Color
,
int
DrawMode
);
void
PlotPinTexts
(
wxPoint
&
pin_pos
,
int
orient
,
void
PlotPinTexts
(
wxPoint
&
pin_pos
,
int
orient
,
int
TextInside
,
bool
DrawPinNum
,
bool
DrawPinName
);
int
TextInside
,
bool
DrawPinNum
,
bool
DrawPinName
);
};
};
...
@@ -227,10 +234,10 @@ public:
...
@@ -227,10 +234,10 @@ public:
wxPoint
m_ArcStart
,
m_ArcEnd
;
/* position des 2 extremites de l'arc en coord reelles*/
wxPoint
m_ArcStart
,
m_ArcEnd
;
/* position des 2 extremites de l'arc en coord reelles*/
public
:
public
:
LibDrawArc
(
void
);
LibDrawArc
(
void
);
~
LibDrawArc
(
void
){
}
~
LibDrawArc
(
void
)
{
}
LibDrawArc
*
GenCopy
(
void
);
LibDrawArc
*
GenCopy
(
void
);
bool
WriteDescr
(
FILE
*
File
);
bool
WriteDescr
(
FILE
*
File
);
};
};
class
LibDrawCircle
:
public
LibEDA_BaseStruct
class
LibDrawCircle
:
public
LibEDA_BaseStruct
...
@@ -240,10 +247,10 @@ public:
...
@@ -240,10 +247,10 @@ public:
int
m_Fill
;
int
m_Fill
;
public
:
public
:
LibDrawCircle
(
void
);
LibDrawCircle
(
void
);
~
LibDrawCircle
(
void
){
}
~
LibDrawCircle
(
void
)
{
}
LibDrawCircle
*
GenCopy
(
void
);
LibDrawCircle
*
GenCopy
(
void
);
bool
WriteDescr
(
FILE
*
File
);
bool
WriteDescr
(
FILE
*
File
);
};
};
class
LibDrawText
:
public
LibEDA_BaseStruct
class
LibDrawText
:
public
LibEDA_BaseStruct
...
@@ -255,10 +262,10 @@ public:
...
@@ -255,10 +262,10 @@ public:
wxString
m_Text
;
wxString
m_Text
;
public
:
public
:
LibDrawText
(
void
);
LibDrawText
(
void
);
~
LibDrawText
(
void
){
}
~
LibDrawText
(
void
)
{
}
LibDrawText
*
GenCopy
(
void
);
LibDrawText
*
GenCopy
(
void
);
bool
WriteDescr
(
FILE
*
File
);
bool
WriteDescr
(
FILE
*
File
);
};
};
class
LibDrawSquare
:
public
LibEDA_BaseStruct
class
LibDrawSquare
:
public
LibEDA_BaseStruct
...
@@ -268,10 +275,10 @@ public:
...
@@ -268,10 +275,10 @@ public:
int
m_Fill
;
int
m_Fill
;
public
:
public
:
LibDrawSquare
(
void
);
LibDrawSquare
(
void
);
~
LibDrawSquare
(
void
){
}
~
LibDrawSquare
(
void
)
{
}
LibDrawSquare
*
GenCopy
(
void
);
LibDrawSquare
*
GenCopy
(
void
);
bool
WriteDescr
(
FILE
*
File
);
bool
WriteDescr
(
FILE
*
File
);
};
};
class
LibDrawSegment
:
public
LibEDA_BaseStruct
class
LibDrawSegment
:
public
LibEDA_BaseStruct
...
@@ -280,28 +287,31 @@ public:
...
@@ -280,28 +287,31 @@ public:
wxPoint
m_End
;
wxPoint
m_End
;
public
:
public
:
LibDrawSegment
(
void
);
LibDrawSegment
(
void
);
~
LibDrawSegment
(
void
){
}
~
LibDrawSegment
(
void
)
{
}
LibDrawSegment
*
GenCopy
(
void
);
LibDrawSegment
*
GenCopy
(
void
);
bool
WriteDescr
(
FILE
*
File
);
bool
WriteDescr
(
FILE
*
File
);
};
};
class
LibDrawPolyline
:
public
LibEDA_BaseStruct
class
LibDrawPolyline
:
public
LibEDA_BaseStruct
{
{
public
:
public
:
int
n
,
*
PolyList
;
int
n
,
*
PolyList
;
int
m_Fill
;
int
m_Fill
;
public
:
public
:
LibDrawPolyline
(
void
);
LibDrawPolyline
(
void
);
~
LibDrawPolyline
(
void
){
if
(
PolyList
)
free
(
PolyList
);}
~
LibDrawPolyline
(
void
)
{
LibDrawPolyline
*
GenCopy
(
void
);
if
(
PolyList
)
void
AddPoint
(
const
wxPoint
&
point
);
free
(
PolyList
);
bool
WriteDescr
(
FILE
*
File
);
}
LibDrawPolyline
*
GenCopy
(
void
);
void
AddPoint
(
const
wxPoint
&
point
);
bool
WriteDescr
(
FILE
*
File
);
};
};
/* Fields identiques aux fields des composants, pouvant etre predefinis en lib
/* Fields identiques aux fields des composants, pouvant etre predefinis en lib
2 Fields sont toujours presents : Prefix (U, IC..) et Name (74LS00..)*/
*
2 Fields sont toujours presents : Prefix (U, IC..) et Name (74LS00..)*/
class
LibDrawField
:
public
LibEDA_BaseStruct
class
LibDrawField
:
public
LibEDA_BaseStruct
{
{
public
:
public
:
...
@@ -316,12 +326,12 @@ public:
...
@@ -316,12 +326,12 @@ public:
wxString
m_Name
;
/* Field Name */
wxString
m_Name
;
/* Field Name */
public
:
public
:
LibDrawField
(
int
idfield
=
2
);
LibDrawField
(
int
idfield
=
2
);
~
LibDrawField
(
void
);
~
LibDrawField
(
void
);
LibDrawField
*
GenCopy
(
void
);
LibDrawField
*
GenCopy
(
void
);
void
Copy
(
LibDrawField
*
Target
);
void
Copy
(
LibDrawField
*
Target
);
bool
WriteDescr
(
FILE
*
File
);
bool
WriteDescr
(
FILE
*
File
);
};
};
...
@@ -330,7 +340,7 @@ class LibCmpEntry : public EDA_BaseStruct
...
@@ -330,7 +340,7 @@ class LibCmpEntry : public EDA_BaseStruct
{
{
public
:
public
:
LibrEntryType
Type
;
/* Type = ROOT;
LibrEntryType
Type
;
/* Type = ROOT;
= ALIAS pour struct LibraryAliasType */
*
= ALIAS pour struct LibraryAliasType */
LibDrawField
m_Name
;
// name (74LS00 ..) in lib ( = VALUE )
LibDrawField
m_Name
;
// name (74LS00 ..) in lib ( = VALUE )
wxString
m_Doc
;
/* ligne de documentation */
wxString
m_Doc
;
/* ligne de documentation */
wxString
m_KeyWord
;
/* liste des mots cles */
wxString
m_KeyWord
;
/* liste des mots cles */
...
@@ -338,12 +348,12 @@ public:
...
@@ -338,12 +348,12 @@ public:
LibrEntryOptions
m_Options
;
// special features (i.e. Entry is a POWER)
LibrEntryOptions
m_Options
;
// special features (i.e. Entry is a POWER)
public
:
public
:
LibCmpEntry
(
LibrEntryType
CmpType
,
const
wxChar
*
CmpName
);
LibCmpEntry
(
LibrEntryType
CmpType
,
const
wxChar
*
CmpName
);
virtual
~
LibCmpEntry
(
void
);
virtual
~
LibCmpEntry
(
void
);
bool
WriteDescr
(
FILE
*
File
);
bool
WriteDescr
(
FILE
*
File
);
};
};
class
EDA_LibComponentStruct
:
public
LibCmpEntry
/* composant "racine" */
class
EDA_LibComponentStruct
:
public
LibCmpEntry
/* composant "racine" */
{
{
public
:
public
:
LibDrawField
m_Prefix
;
/* Prefix ( U, IC ... ) = REFERENCE */
LibDrawField
m_Prefix
;
/* Prefix ( U, IC ... ) = REFERENCE */
...
@@ -352,61 +362,61 @@ public:
...
@@ -352,61 +362,61 @@ public:
int
m_UnitCount
;
/* Units (or sections) per package */
int
m_UnitCount
;
/* Units (or sections) per package */
bool
m_UnitSelectionLocked
;
// True if units are differents and their selection is locked
bool
m_UnitSelectionLocked
;
// True if units are differents and their selection is locked
// (i.e. if part A cannot be automatically changed in part B
// (i.e. if part A cannot be automatically changed in part B
int
m_TextInside
;
/* if 0: pin name drawn on the pin itself
int
m_TextInside
;
/* if 0: pin name drawn on the pin itself
if > 0 pin name drawn inside the component,
*
if > 0 pin name drawn inside the component,
with a distance of m_TextInside in mils */
*
with a distance of m_TextInside in mils */
bool
m_DrawPinNum
;
bool
m_DrawPinNum
;
bool
m_DrawPinName
;
bool
m_DrawPinName
;
LibDrawField
*
Fields
;
/* Auxiliairy Field list (id = 2 a 11*/
LibDrawField
*
Fields
;
/* Auxiliairy Field list (id = 2 a 11*/
LibEDA_BaseStruct
*
m_Drawings
;
/* How to draw this part */
LibEDA_BaseStruct
*
m_Drawings
;
/* How to draw this part */
long
m_LastDate
;
// Last change Date
long
m_LastDate
;
// Last change Date
public
:
public
:
EDA_LibComponentStruct
(
const
wxChar
*
CmpName
);
EDA_LibComponentStruct
(
const
wxChar
*
CmpName
);
EDA_Rect
GetBoundaryBox
(
int
Unit
,
int
Convert
);
/* return Box around the part. */
EDA_Rect
GetBoundaryBox
(
int
Unit
,
int
Convert
);
/* return Box around the part. */
~
EDA_LibComponentStruct
(
void
);
~
EDA_LibComponentStruct
(
void
);
void
SortDrawItems
(
void
);
void
SortDrawItems
(
void
);
};
};
class
EDA_LibCmpAliasStruct
:
public
LibCmpEntry
class
EDA_LibCmpAliasStruct
:
public
LibCmpEntry
{
{
public
:
public
:
wxString
m_RootName
;
/* Part name pour le composant de reference */
wxString
m_RootName
;
/* Part name pour le composant de reference */
public
:
public
:
EDA_LibCmpAliasStruct
(
const
wxChar
*
CmpName
,
const
wxChar
*
CmpRootName
);
EDA_LibCmpAliasStruct
(
const
wxChar
*
CmpName
,
const
wxChar
*
CmpRootName
);
~
EDA_LibCmpAliasStruct
(
void
);
~
EDA_LibCmpAliasStruct
(
void
);
};
};
/* Variables */
/* Variables */
extern
LibraryStruct
*
LibraryList
;
/* All part libs are saved here. */
extern
LibraryStruct
*
LibraryList
;
/* All part libs are saved here. */
/* Variables Utiles pour les editions de composants en librairie */
/* Variables Utiles pour les editions de composants en librairie */
eda_global
LibEDA_BaseStruct
*
LibItemToRepeat
;
/* pointeur sur l'lment que l'on
eda_global
LibEDA_BaseStruct
*
LibItemToRepeat
;
/* pointeur sur l'lment que l'on
peut rpter (Pin..;) */
*
peut rpter (Pin..;) */
eda_global
LibraryStruct
*
CurrentLib
;
/* Pointeur sur la librairie du
eda_global
LibraryStruct
*
CurrentLib
;
/* Pointeur sur la librairie du
composant en cours d'edition */
*
composant en cours d'edition */
eda_global
EDA_LibComponentStruct
*
CurrentLibEntry
;
/* pointeur sur le composant en
eda_global
EDA_LibComponentStruct
*
CurrentLibEntry
;
/* pointeur sur le composant en
cours d'edition */
*
cours d'edition */
eda_global
LibEDA_BaseStruct
*
CurrentDrawItem
;
/* pointeur sur les
eda_global
LibEDA_BaseStruct
*
CurrentDrawItem
;
/* pointeur sur les
elements de dessin du comp. en edition */
*
elements de dessin du comp. en edition */
eda_global
wxString
CurrentAliasName
;
// Nom de l'alias selectionn
eda_global
wxString
CurrentAliasName
;
// Nom de l'alias selectionn
eda_global
bool
g_AsDeMorgan
;
// Pour libedit:
eda_global
bool
g_AsDeMorgan
;
// Pour libedit:
eda_global
int
CurrentUnit
eda_global
int
CurrentUnit
#ifdef MAIN
#ifdef MAIN
=
1
=
1
#endif
#endif
;
;
eda_global
int
CurrentConvert
/* Convert = 1 .. 255 */
eda_global
int
CurrentConvert
/* Convert = 1 .. 255 */
#ifdef MAIN
#ifdef MAIN
=
1
=
1
#endif
#endif
;
;
eda_global
wxString
FindLibName
;
/* nom de la librairie ou a ete trouve le
eda_global
wxString
FindLibName
;
/* nom de la librairie ou a ete trouve le
dernier composant recherche par FindLibPart() */
*
dernier composant recherche par FindLibPart() */
#endif // LIBCMP_H
#endif // LIBCMP_H
eeschema/libframe.cpp
View file @
f3c324d5
...
@@ -543,6 +543,7 @@ wxClientDC dc(DrawPanel);
...
@@ -543,6 +543,7 @@ wxClientDC dc(DrawPanel);
case
COMPONENT_GRAPHIC_TEXT_DRAW_TYPE
:
case
COMPONENT_GRAPHIC_TEXT_DRAW_TYPE
:
EditSymbolText
(
&
dc
,
CurrentDrawItem
);
EditSymbolText
(
&
dc
,
CurrentDrawItem
);
break
;
break
;
default
:
;
}
}
DrawPanel
->
CursorOn
(
&
dc
);
DrawPanel
->
CursorOn
(
&
dc
);
}
}
...
...
eeschema/locate.cpp
View file @
f3c324d5
...
@@ -839,6 +839,9 @@ int seuil;
...
@@ -839,6 +839,9 @@ int seuil;
return
(
DrawItem
);
/* Texte trouve */
return
(
DrawItem
);
/* Texte trouve */
}
}
break
;
break
;
default
:
;
}
}
}
}
return
(
NULL
);
return
(
NULL
);
...
...
eeschema/plot.cpp
View file @
f3c324d5
...
@@ -290,6 +290,9 @@ wxPoint pos;
...
@@ -290,6 +290,9 @@ wxPoint pos;
MyFree
(
Poly
);
MyFree
(
Poly
);
}
}
break
;
break
;
default
:
;
}
/* Fin Switch */
}
/* Fin Switch */
Plume
(
'U'
);
Plume
(
'U'
);
}
/* Fin Boucle de dessin */
}
/* Fin Boucle de dessin */
...
...
eeschema/program.h
View file @
f3c324d5
/********************************************/
/********************************************/
/* Definitions for the EESchema program: */
/* Definitions for the EESchema program: */
/********************************************/
/********************************************/
#ifndef PROGRAM_H
#ifndef PROGRAM_H
#define PROGRAM_H
#define PROGRAM_H
...
@@ -39,42 +39,56 @@ typedef enum { /* Type des Marqueurs */
...
@@ -39,42 +39,56 @@ typedef enum { /* Type des Marqueurs */
/* Messages correspondants aux types des marqueurs */
/* Messages correspondants aux types des marqueurs */
#ifdef MAIN
#ifdef MAIN
const
wxChar
*
NameMarqueurType
[]
=
const
wxChar
*
NameMarqueurType
[]
=
{
{
wxT
(
""
),
wxT
(
""
),
wxT
(
"ERC"
),
wxT
(
"ERC"
),
wxT
(
"PCB"
),
wxT
(
"PCB"
),
wxT
(
"SIMUL"
),
wxT
(
"SIMUL"
),
wxT
(
"?????"
)
wxT
(
"?????"
)
};
};
#else
#else
extern
const
wxChar
*
NameMarqueurType
[];
extern
const
wxChar
*
NameMarqueurType
[];
#endif
#endif
/* Forward declarations */
/* Forward declarations */
class
DrawSheetStruct
;
class
DrawSheetStruct
;
class
EDA_DrawLineStruct
:
public
EDA_BaseLineStruct
/* Segment decription
base class to describe items which have 2 end points (track, wire, draw line ...) */
/**
* Class EDA_DrawLineStruct
* is a segment decription base class to describe items which have 2 end
* points (track, wire, draw line ...)
*/
class
EDA_DrawLineStruct
:
public
EDA_BaseStruct
{
{
public
:
public
:
bool
m_StartIsDangling
,
m_EndIsDangling
;
// TRUE si Start ou End not connected (wires, tracks...)
int
m_Layer
;
// Layer number
int
m_Width
;
// 0 = line, > 0 = tracks, bus ...
wxPoint
m_Start
;
// Line start point
wxPoint
m_End
;
// Line end point
bool
m_StartIsDangling
;
bool
m_EndIsDangling
;
// TRUE si Start ou End not connected (wires, tracks...)
public
:
public
:
EDA_DrawLineStruct
(
const
wxPoint
&
pos
,
int
layer
);
EDA_DrawLineStruct
(
const
wxPoint
&
pos
,
int
layer
);
~
EDA_DrawLineStruct
(
void
)
{}
~
EDA_DrawLineStruct
(
void
)
{
}
bool
IsOneEndPointAt
(
const
wxPoint
&
pos
);
bool
IsOneEndPointAt
(
const
wxPoint
&
pos
);
EDA_DrawLineStruct
*
GenCopy
(
void
);
EDA_DrawLineStruct
*
GenCopy
(
void
);
bool
IsNull
(
void
)
bool
IsNull
(
void
)
{
{
return
(
m_Start
==
m_End
)
;
return
m_Start
==
m_End
;
}
}
virtual
void
Draw
(
WinEDA_DrawPanel
*
panel
,
wxDC
*
DC
,
const
wxPoint
&
offset
,
int
draw_mode
,
int
Color
=
-
1
);
virtual
void
Draw
(
WinEDA_DrawPanel
*
panel
,
wxDC
*
DC
,
const
wxPoint
&
offset
,
int
draw_mode
,
int
Color
=
-
1
);
};
};
class
DrawMarkerStruct
:
public
EDA_BaseStruct
/* marqueurs */
class
DrawMarkerStruct
:
public
EDA_BaseStruct
/* marqueurs */
{
{
public
:
public
:
wxPoint
m_Pos
;
/* XY coordinates of marker. */
wxPoint
m_Pos
;
/* XY coordinates of marker. */
...
@@ -83,27 +97,34 @@ public:
...
@@ -83,27 +97,34 @@ public:
wxString
m_Comment
;
/* Texte (commentaireassocie eventuel */
wxString
m_Comment
;
/* Texte (commentaireassocie eventuel */
public
:
public
:
DrawMarkerStruct
(
const
wxPoint
&
pos
,
const
wxString
&
text
);
DrawMarkerStruct
(
const
wxPoint
&
pos
,
const
wxString
&
text
);
~
DrawMarkerStruct
(
void
);
~
DrawMarkerStruct
(
void
);
DrawMarkerStruct
*
GenCopy
(
void
);
DrawMarkerStruct
*
GenCopy
(
void
);
wxString
GetComment
(
void
);
wxString
GetComment
(
void
);
virtual
void
Draw
(
WinEDA_DrawPanel
*
panel
,
wxDC
*
DC
,
const
wxPoint
&
offset
,
int
draw_mode
,
int
Color
=
-
1
);
virtual
void
Draw
(
WinEDA_DrawPanel
*
panel
,
wxDC
*
DC
,
const
wxPoint
&
offset
,
int
draw_mode
,
int
Color
=
-
1
);
};
};
class
DrawNoConnectStruct
:
public
EDA_BaseStruct
/* Symboles de non connexion */
class
DrawNoConnectStruct
:
public
EDA_BaseStruct
/* Symboles de non connexion */
{
{
public
:
public
:
wxPoint
m_Pos
;
/* XY coordinates of NoConnect. */
wxPoint
m_Pos
;
/* XY coordinates of NoConnect. */
public
:
public
:
DrawNoConnectStruct
(
const
wxPoint
&
pos
);
DrawNoConnectStruct
(
const
wxPoint
&
pos
);
~
DrawNoConnectStruct
(
void
)
{}
~
DrawNoConnectStruct
(
void
)
{
}
DrawNoConnectStruct
*
GenCopy
(
void
);
DrawNoConnectStruct
*
GenCopy
(
void
);
virtual
void
Draw
(
WinEDA_DrawPanel
*
panel
,
wxDC
*
DC
,
const
wxPoint
&
offset
,
int
draw_mode
,
int
Color
=
-
1
);
virtual
void
Draw
(
WinEDA_DrawPanel
*
panel
,
wxDC
*
DC
,
const
wxPoint
&
offset
,
int
draw_mode
,
int
Color
=
-
1
);
};
};
class
DrawBusEntryStruct
:
public
EDA_BaseStruct
/* Struct de descr 1 raccord
a 45 degres de BUS ou WIRE */
/**
* Class DrawBusEntryStruct
* Struct de descr 1 raccord a 45 degres de BUS ou WIRE
*/
class
DrawBusEntryStruct
:
public
EDA_BaseStruct
{
{
public
:
public
:
int
m_Layer
;
int
m_Layer
;
...
@@ -112,42 +133,45 @@ public:
...
@@ -112,42 +133,45 @@ public:
wxSize
m_Size
;
wxSize
m_Size
;
public
:
public
:
DrawBusEntryStruct
(
const
wxPoint
&
pos
,
int
shape
,
int
id
);
DrawBusEntryStruct
(
const
wxPoint
&
pos
,
int
shape
,
int
id
);
~
DrawBusEntryStruct
(
void
)
{}
~
DrawBusEntryStruct
(
void
)
{
}
DrawBusEntryStruct
*
GenCopy
(
void
);
DrawBusEntryStruct
*
GenCopy
(
void
);
wxPoint
m_End
(
void
);
// retourne la coord de fin du raccord
wxPoint
m_End
(
void
);
// retourne la coord de fin du raccord
virtual
void
Draw
(
WinEDA_DrawPanel
*
panel
,
wxDC
*
DC
,
const
wxPoint
&
offset
,
int
draw_mode
,
int
Color
=
-
1
);
virtual
void
Draw
(
WinEDA_DrawPanel
*
panel
,
wxDC
*
DC
,
const
wxPoint
&
offset
,
int
draw_mode
,
int
Color
=
-
1
);
};
};
class
DrawPolylineStruct
:
public
EDA_BaseStruct
/* Polyligne (serie de segments) */
class
DrawPolylineStruct
:
public
EDA_BaseStruct
/* Polyligne (serie de segments) */
{
{
public
:
public
:
int
m_Layer
;
int
m_Layer
;
int
m_Width
;
int
m_Width
;
int
m_NumOfPoints
;
/* Number of XY pairs in Points array. */
int
m_NumOfPoints
;
/* Number of XY pairs in Points array. */
int
*
m_Points
;
/* XY pairs that forms the polyline. */
int
*
m_Points
;
/* XY pairs that forms the polyline. */
public
:
public
:
DrawPolylineStruct
(
int
layer
);
DrawPolylineStruct
(
int
layer
);
~
DrawPolylineStruct
(
void
);
~
DrawPolylineStruct
(
void
);
DrawPolylineStruct
*
GenCopy
(
void
);
DrawPolylineStruct
*
GenCopy
(
void
);
virtual
void
Draw
(
WinEDA_DrawPanel
*
panel
,
wxDC
*
DC
,
const
wxPoint
&
offset
,
int
draw_mode
,
int
Color
=
-
1
);
virtual
void
Draw
(
WinEDA_DrawPanel
*
panel
,
wxDC
*
DC
,
const
wxPoint
&
offset
,
int
draw_mode
,
int
Color
=
-
1
);
};
};
class
DrawJunctionStruct
:
public
EDA_BaseStruct
class
DrawJunctionStruct
:
public
EDA_BaseStruct
{
{
public
:
public
:
int
m_Layer
;
int
m_Layer
;
wxPoint
m_Pos
;
/* XY coordinates of connection. */
wxPoint
m_Pos
;
/* XY coordinates of connection. */
public
:
public
:
DrawJunctionStruct
(
const
wxPoint
&
pos
);
DrawJunctionStruct
(
const
wxPoint
&
pos
);
~
DrawJunctionStruct
(
void
){}
~
DrawJunctionStruct
(
void
)
{
}
DrawJunctionStruct
*
GenCopy
(
void
);
DrawJunctionStruct
*
GenCopy
(
void
);
virtual
void
Draw
(
WinEDA_DrawPanel
*
panel
,
wxDC
*
DC
,
const
wxPoint
&
offset
,
int
draw_mode
,
int
Color
=
-
1
);
virtual
void
Draw
(
WinEDA_DrawPanel
*
panel
,
wxDC
*
DC
,
const
wxPoint
&
offset
,
int
draw_mode
,
int
Color
=
-
1
);
};
};
class
DrawTextStruct
:
public
EDA_BaseStruct
,
public
EDA_TextStruct
class
DrawTextStruct
:
public
EDA_BaseStruct
,
public
EDA_TextStruct
{
{
public
:
public
:
int
m_Layer
;
int
m_Layer
;
...
@@ -155,32 +179,38 @@ public:
...
@@ -155,32 +179,38 @@ public:
bool
m_IsDangling
;
// TRUE si non connect
bool
m_IsDangling
;
// TRUE si non connect
public
:
public
:
DrawTextStruct
(
const
wxPoint
&
pos
=
wxPoint
(
0
,
0
),
const
wxString
&
text
=
wxEmptyString
);
DrawTextStruct
(
const
wxPoint
&
pos
=
wxPoint
(
0
,
0
),
const
wxString
&
text
=
wxEmptyString
);
~
DrawTextStruct
(
void
)
{}
~
DrawTextStruct
(
void
)
{
}
DrawTextStruct
*
GenCopy
(
void
);
DrawTextStruct
*
GenCopy
(
void
);
virtual
void
Draw
(
WinEDA_DrawPanel
*
panel
,
wxDC
*
DC
,
const
wxPoint
&
offset
,
int
draw_mode
,
int
Color
=
-
1
);
virtual
void
Draw
(
WinEDA_DrawPanel
*
panel
,
wxDC
*
DC
,
const
wxPoint
&
offset
,
int
draw_mode
,
void
SwapData
(
DrawTextStruct
*
copyitem
);
int
Color
=
-
1
);
virtual
void
Place
(
WinEDA_DrawFrame
*
frame
,
wxDC
*
DC
);
void
SwapData
(
DrawTextStruct
*
copyitem
);
virtual
void
Place
(
WinEDA_DrawFrame
*
frame
,
wxDC
*
DC
);
private
:
private
:
void
DrawAsText
(
WinEDA_DrawPanel
*
panel
,
wxDC
*
DC
,
const
wxPoint
&
offset
,
int
draw_mode
,
int
Color
);
void
DrawAsText
(
WinEDA_DrawPanel
*
panel
,
wxDC
*
DC
,
const
wxPoint
&
offset
,
void
DrawAsLabel
(
WinEDA_DrawPanel
*
panel
,
wxDC
*
DC
,
const
wxPoint
&
offset
,
int
draw_mode
,
int
Color
);
int
draw_mode
,
int
Color
);
void
DrawAsGlobalLabel
(
WinEDA_DrawPanel
*
panel
,
wxDC
*
DC
,
const
wxPoint
&
offset
,
int
draw_mode
,
int
Color
);
void
DrawAsLabel
(
WinEDA_DrawPanel
*
panel
,
wxDC
*
DC
,
const
wxPoint
&
offset
,
int
draw_mode
,
int
Color
);
void
DrawAsGlobalLabel
(
WinEDA_DrawPanel
*
panel
,
wxDC
*
DC
,
const
wxPoint
&
offset
,
int
draw_mode
,
int
Color
);
};
};
class
DrawLabelStruct
:
public
DrawTextStruct
class
DrawLabelStruct
:
public
DrawTextStruct
{
{
public
:
public
:
DrawLabelStruct
(
const
wxPoint
&
pos
=
wxPoint
(
0
,
0
),
const
wxString
&
text
=
wxEmptyString
);
DrawLabelStruct
(
const
wxPoint
&
pos
=
wxPoint
(
0
,
0
),
const
wxString
&
text
=
wxEmptyString
);
~
DrawLabelStruct
(
void
)
{
}
~
DrawLabelStruct
(
void
)
{
}
};
};
class
DrawGlobalLabelStruct
:
public
DrawTextStruct
class
DrawGlobalLabelStruct
:
public
DrawTextStruct
{
{
public
:
public
:
DrawGlobalLabelStruct
(
const
wxPoint
&
pos
=
wxPoint
(
0
,
0
),
const
wxString
&
text
=
wxEmptyString
);
DrawGlobalLabelStruct
(
const
wxPoint
&
pos
=
wxPoint
(
0
,
0
),
~
DrawGlobalLabelStruct
(
void
)
{}
const
wxString
&
text
=
wxEmptyString
);
~
DrawGlobalLabelStruct
(
void
)
{
}
};
};
...
@@ -188,9 +218,9 @@ public:
...
@@ -188,9 +218,9 @@ public:
class
LayerStruct
class
LayerStruct
{
{
public
:
public
:
char
LayerNames
[
MAX_LAYERS
+
1
][
8
];
char
LayerNames
[
MAX_LAYERS
+
1
][
8
];
int
LayerColor
[
MAX_LAYERS
+
1
];
int
LayerColor
[
MAX_LAYERS
+
1
];
char
LayerStatus
[
MAX_LAYERS
+
1
];
char
LayerStatus
[
MAX_LAYERS
+
1
];
int
NumberOfLayers
;
int
NumberOfLayers
;
int
CurrentLayer
;
int
CurrentLayer
;
int
CurrentWidth
;
int
CurrentWidth
;
...
@@ -200,4 +230,3 @@ public:
...
@@ -200,4 +230,3 @@ public:
#endif
/* PROGRAM_H */
#endif
/* PROGRAM_H */
eeschema/symbdraw.cpp
View file @
f3c324d5
/*********************************************************************/
/*********************************************************************/
/* EESchema - symbdraw.cpp */
/* EESchema - symbdraw.cpp */
/* Create, move .. graphic shapes used to build and draw a component */
/* Create, move .. graphic shapes used to build and draw a component */
/* (lines, arcs .. */
/* (lines, arcs .. */
/*********************************************************************/
/*********************************************************************/
#include "fctsys.h"
#include "fctsys.h"
...
@@ -19,10 +19,10 @@
...
@@ -19,10 +19,10 @@
#include "id.h"
#include "id.h"
/* Routines locales */
/* Routines locales */
static
void
SymbolDisplayDraw
(
WinEDA_DrawPanel
*
panel
,
wxDC
*
DC
,
bool
erase
);
static
void
SymbolDisplayDraw
(
WinEDA_DrawPanel
*
panel
,
wxDC
*
DC
,
bool
erase
);
static
void
ComputeArc
(
LibDrawArc
*
DrawItem
,
wxPoint
ArcCentre
);
static
void
ComputeArc
(
LibDrawArc
*
DrawItem
,
wxPoint
ArcCentre
);
static
void
RedrawWhileMovingCursor
(
WinEDA_DrawPanel
*
panel
,
wxDC
*
DC
,
bool
erase
);
static
void
RedrawWhileMovingCursor
(
WinEDA_DrawPanel
*
panel
,
wxDC
*
DC
,
bool
erase
);
static
void
MoveLibDrawItemAt
(
LibEDA_BaseStruct
*
DrawItem
,
wxPoint
newpos
);
static
void
MoveLibDrawItemAt
(
LibEDA_BaseStruct
*
DrawItem
,
wxPoint
newpos
);
/* Variables locales */
/* Variables locales */
static
int
StateDrawArc
,
ArcStartX
,
ArcStartY
,
ArcEndX
,
ArcEndY
;
static
int
StateDrawArc
,
ArcStartX
,
ArcStartY
,
ArcEndX
,
ArcEndY
;
...
@@ -30,126 +30,137 @@ static wxPoint InitPosition, StartCursor, ItemPreviousPos;
...
@@ -30,126 +30,137 @@ static wxPoint InitPosition, StartCursor, ItemPreviousPos;
static
int
FlSymbol_Fill
=
NO_FILL
;
static
int
FlSymbol_Fill
=
NO_FILL
;
/************************************/
/************************************/
/* class WinEDA_PartPropertiesFrame */
/* class WinEDA_PartPropertiesFrame */
/************************************/
/************************************/
#include "dialog_cmp_graphic_properties.cpp"
#include "dialog_cmp_graphic_properties.cpp"
/************************************************************/
/************************************************************/
void
WinEDA_bodygraphics_PropertiesFrame
::
void
WinEDA_bodygraphics_PropertiesFrame
::
bodygraphics_PropertiesAccept
(
wxCommandEvent
&
event
)
bodygraphics_PropertiesAccept
(
wxCommandEvent
&
event
)
/************************************************************/
/************************************************************/
/* Update the current draw item
/* Update the current draw item
*/
*/
{
{
g_FlDrawSpecificConvert
=
m_CommonConvert
->
GetValue
()
?
FALSE
:
TRUE
;
g_FlDrawSpecificConvert
=
m_CommonConvert
->
GetValue
()
?
FALSE
:
TRUE
;
g_FlDrawSpecificUnit
=
m_CommonUnit
->
GetValue
()
?
FALSE
:
TRUE
;
g_FlDrawSpecificUnit
=
m_CommonUnit
->
GetValue
()
?
FALSE
:
TRUE
;
if
(
m_Filled
)
if
(
m_Filled
)
FlSymbol_Fill
=
m_Filled
->
GetSelection
();
FlSymbol_Fill
=
m_Filled
->
GetSelection
();
g_LibSymbolDefaultLineWidth
=
m_GraphicShapeWidthCtrl
->
GetValue
();
g_LibSymbolDefaultLineWidth
=
m_GraphicShapeWidthCtrl
->
GetValue
();
if
(
CurrentDrawItem
)
if
(
CurrentDrawItem
)
{
{
if
(
!
(
CurrentDrawItem
->
m_Flags
&
IS_NEW
)
)
// if IS_NEW, copy for undo is done before place
if
(
!
(
CurrentDrawItem
->
m_Flags
&
IS_NEW
)
)
// if IS_NEW, copy for undo is done before place
m_Parent
->
SaveCopyInUndoList
(
CurrentLibEntry
);
m_Parent
->
SaveCopyInUndoList
(
CurrentLibEntry
);
wxClientDC
dc
(
m_Parent
->
DrawPanel
);
wxClientDC
dc
(
m_Parent
->
DrawPanel
);
m_Parent
->
DrawPanel
->
PrepareGraphicContext
(
&
dc
);
DrawLibraryDrawStruct
(
m_Parent
->
DrawPanel
,
&
dc
,
CurrentLibEntry
,
0
,
0
,
m_Parent
->
DrawPanel
->
PrepareGraphicContext
(
&
dc
);
CurrentDrawItem
,
CurrentUnit
,
g_XorMode
);
if
(
g_FlDrawSpecificUnit
)
CurrentDrawItem
->
m_Unit
=
CurrentUnit
;
DrawLibraryDrawStruct
(
m_Parent
->
DrawPanel
,
&
dc
,
CurrentLibEntry
,
0
,
0
,
else
CurrentDrawItem
->
m_Unit
=
0
;
CurrentDrawItem
,
CurrentUnit
,
g_XorMode
);
if
(
g_FlDrawSpecificConvert
)
CurrentDrawItem
->
m_Convert
=
CurrentConvert
;
else
CurrentDrawItem
->
m_Convert
=
0
;
if
(
g_FlDrawSpecificUnit
)
if
(
m_Filled
)
CurrentDrawItem
->
m_Unit
=
CurrentUnit
;
else
CurrentDrawItem
->
m_Unit
=
0
;
if
(
g_FlDrawSpecificConvert
)
CurrentDrawItem
->
m_Convert
=
CurrentConvert
;
else
CurrentDrawItem
->
m_Convert
=
0
;
if
(
m_Filled
)
{
{
switch
(
CurrentDrawItem
->
m_StructType
)
switch
(
CurrentDrawItem
->
m_StructType
)
{
{
case
COMPONENT_ARC_DRAW_TYPE
:
case
COMPONENT_ARC_DRAW_TYPE
:
((
LibDrawArc
*
)
CurrentDrawItem
)
->
m_Fill
=
FlSymbol_Fill
;
(
(
LibDrawArc
*
)
CurrentDrawItem
)
->
m_Fill
=
FlSymbol_Fill
;
((
LibDrawArc
*
)
CurrentDrawItem
)
->
m_Width
=
m_GraphicShapeWidthCtrl
->
GetValue
();
(
(
LibDrawArc
*
)
CurrentDrawItem
)
->
m_Width
=
m_GraphicShapeWidthCtrl
->
GetValue
();
break
;
break
;
case
COMPONENT_CIRCLE_DRAW_TYPE
:
case
COMPONENT_CIRCLE_DRAW_TYPE
:
((
LibDrawCircle
*
)
CurrentDrawItem
)
->
m_Fill
=
FlSymbol_Fill
;
(
(
LibDrawCircle
*
)
CurrentDrawItem
)
->
m_Fill
=
FlSymbol_Fill
;
((
LibDrawCircle
*
)
CurrentDrawItem
)
->
m_Width
=
m_GraphicShapeWidthCtrl
->
GetValue
();
(
(
LibDrawCircle
*
)
CurrentDrawItem
)
->
m_Width
=
m_GraphicShapeWidthCtrl
->
GetValue
();
break
;
break
;
case
COMPONENT_RECT_DRAW_TYPE
:
case
COMPONENT_RECT_DRAW_TYPE
:
((
LibDrawSquare
*
)
CurrentDrawItem
)
->
m_Fill
=
FlSymbol_Fill
;
(
(
LibDrawSquare
*
)
CurrentDrawItem
)
->
m_Fill
=
FlSymbol_Fill
;
((
LibDrawSquare
*
)
CurrentDrawItem
)
->
m_Width
=
m_GraphicShapeWidthCtrl
->
GetValue
();
(
(
LibDrawSquare
*
)
CurrentDrawItem
)
->
m_Width
=
m_GraphicShapeWidthCtrl
->
GetValue
();
break
;
break
;
case
COMPONENT_POLYLINE_DRAW_TYPE
:
case
COMPONENT_POLYLINE_DRAW_TYPE
:
((
LibDrawPolyline
*
)
CurrentDrawItem
)
->
m_Fill
=
FlSymbol_Fill
;
(
(
LibDrawPolyline
*
)
CurrentDrawItem
)
->
m_Fill
=
FlSymbol_Fill
;
((
LibDrawPolyline
*
)
CurrentDrawItem
)
->
m_Width
=
m_GraphicShapeWidthCtrl
->
GetValue
();
(
(
LibDrawPolyline
*
)
CurrentDrawItem
)
->
m_Width
=
m_GraphicShapeWidthCtrl
->
GetValue
();
break
;
break
;
default
:
break
;
default
:
break
;
}
}
}
}
CurrentLibEntry
->
SortDrawItems
();
CurrentLibEntry
->
SortDrawItems
();
m_Parent
->
m_CurrentScreen
->
SetModify
();
m_Parent
->
m_CurrentScreen
->
SetModify
();
DrawLibraryDrawStruct
(
m_Parent
->
DrawPanel
,
&
dc
,
CurrentLibEntry
,
0
,
0
,
DrawLibraryDrawStruct
(
m_Parent
->
DrawPanel
,
&
dc
,
CurrentLibEntry
,
0
,
0
,
CurrentDrawItem
,
CurrentUnit
,
g_XorMode
);
CurrentDrawItem
,
CurrentUnit
,
g_XorMode
);
}
}
Close
();
Close
();
if
(
CurrentDrawItem
)
if
(
CurrentDrawItem
)
CurrentDrawItem
->
Display_Infos_DrawEntry
(
m_Parent
);
CurrentDrawItem
->
Display_Infos_DrawEntry
(
m_Parent
);
m_Parent
->
ReDrawPanel
();
m_Parent
->
ReDrawPanel
();
}
}
/**********************************************************/
/**********************************************************/
void
WinEDA_LibeditFrame
::
EditGraphicSymbol
(
wxDC
*
DC
,
void
WinEDA_LibeditFrame
::
EditGraphicSymbol
(
wxDC
*
DC
,
LibEDA_BaseStruct
*
DrawItem
)
LibEDA_BaseStruct
*
DrawItem
)
/**********************************************************/
/**********************************************************/
/* Install the dialog box for editing a graphical item properties
/* Install the dialog box for editing a graphical item properties
*/
*/
{
{
if
(
DrawItem
==
NULL
)
return
;
if
(
DrawItem
==
NULL
)
return
;
WinEDA_bodygraphics_PropertiesFrame
*
frame
=
new
WinEDA_bodygraphics_PropertiesFrame
(
this
);
WinEDA_bodygraphics_PropertiesFrame
*
frame
=
new
WinEDA_bodygraphics_PropertiesFrame
(
this
);
frame
->
ShowModal
();
frame
->
Destroy
();
frame
->
ShowModal
();
frame
->
Destroy
();
}
}
/****************************************************************/
/****************************************************************/
static
void
AbortSymbolTraceOn
(
WinEDA_DrawPanel
*
Panel
,
wxDC
*
DC
)
static
void
AbortSymbolTraceOn
(
WinEDA_DrawPanel
*
Panel
,
wxDC
*
DC
)
/****************************************************************/
/****************************************************************/
{
{
StateDrawArc
=
0
;
StateDrawArc
=
0
;
Panel
->
ManageCurseur
=
NULL
;
Panel
->
ManageCurseur
=
NULL
;
Panel
->
ForceCloseManageCurseur
=
NULL
;
Panel
->
ForceCloseManageCurseur
=
NULL
;
if
(
CurrentDrawItem
==
NULL
)
return
;
if
(
CurrentDrawItem
==
NULL
)
return
;
if
(
CurrentDrawItem
->
m_Flags
&
IS_NEW
)
if
(
CurrentDrawItem
->
m_Flags
&
IS_NEW
)
{
{
if
(
CurrentDrawItem
->
m_StructType
==
COMPONENT_ARC_DRAW_TYPE
)
if
(
CurrentDrawItem
->
m_StructType
==
COMPONENT_ARC_DRAW_TYPE
)
{
{
Panel
->
m_Parent
->
RedrawActiveWindow
(
DC
,
TRUE
);
Panel
->
m_Parent
->
RedrawActiveWindow
(
DC
,
TRUE
);
}
}
else
DrawLibraryDrawStruct
(
Panel
,
DC
,
CurrentLibEntry
,
0
,
0
,
else
CurrentDrawItem
,
CurrentUnit
,
g_XorMode
);
DrawLibraryDrawStruct
(
Panel
,
DC
,
CurrentLibEntry
,
0
,
0
,
CurrentDrawItem
,
CurrentUnit
,
g_XorMode
);
delete
CurrentDrawItem
;
delete
CurrentDrawItem
;
}
}
else
else
{
{
wxPoint
curpos
;
wxPoint
curpos
;
curpos
=
Panel
->
GetScreen
()
->
m_Curseur
;
curpos
=
Panel
->
GetScreen
()
->
m_Curseur
;
Panel
->
GetScreen
()
->
m_Curseur
=
StartCursor
;
Panel
->
GetScreen
()
->
m_Curseur
=
StartCursor
;
RedrawWhileMovingCursor
(
Panel
,
DC
,
TRUE
);
RedrawWhileMovingCursor
(
Panel
,
DC
,
TRUE
);
Panel
->
GetScreen
()
->
m_Curseur
=
curpos
;
Panel
->
GetScreen
()
->
m_Curseur
=
curpos
;
DrawLibraryDrawStruct
(
Panel
,
DC
,
CurrentLibEntry
,
0
,
0
,
DrawLibraryDrawStruct
(
Panel
,
DC
,
CurrentLibEntry
,
0
,
0
,
CurrentDrawItem
,
CurrentUnit
,
GR_DEFAULT_DRAWMODE
);
CurrentDrawItem
,
CurrentUnit
,
GR_DEFAULT_DRAWMODE
);
CurrentDrawItem
->
m_Flags
=
0
;
CurrentDrawItem
->
m_Flags
=
0
;
}
}
...
@@ -158,25 +169,27 @@ static void AbortSymbolTraceOn(WinEDA_DrawPanel * Panel, wxDC * DC)
...
@@ -158,25 +169,27 @@ static void AbortSymbolTraceOn(WinEDA_DrawPanel * Panel, wxDC * DC)
}
}
/*********************************************************************/
/*********************************************************************/
LibEDA_BaseStruct
*
WinEDA_LibeditFrame
::
CreateGraphicItem
(
wxDC
*
DC
)
LibEDA_BaseStruct
*
WinEDA_LibeditFrame
::
CreateGraphicItem
(
wxDC
*
DC
)
/*********************************************************************/
/*********************************************************************/
/* Routine de creation d'un nouvel element type LibraryDrawStruct
/* Routine de creation d'un nouvel element type LibraryDrawStruct
POLYLINE
*
POLYLINE
ARC
*
ARC
CIRCLE
*
CIRCLE
RECTANGLE
*
RECTANGLE
*/
*/
{
{
int
DrawType
;
int
DrawType
;
int
*
ptpoly
;
int
*
ptpoly
;
if
(
CurrentDrawItem
)
return
NULL
;
if
(
CurrentDrawItem
)
return
NULL
;
DrawPanel
->
m_IgnoreMouseEvents
=
TRUE
;
DrawPanel
->
m_IgnoreMouseEvents
=
TRUE
;
// Creation du nouvel element
// Creation du nouvel element
switch
(
m_ID_current_state
)
switch
(
m_ID_current_state
)
{
{
case
ID_LIBEDIT_BODY_LINE_BUTT
:
case
ID_LIBEDIT_BODY_LINE_BUTT
:
DrawType
=
COMPONENT_POLYLINE_DRAW_TYPE
;
DrawType
=
COMPONENT_POLYLINE_DRAW_TYPE
;
...
@@ -199,21 +212,22 @@ int * ptpoly;
...
@@ -199,21 +212,22 @@ int * ptpoly;
break
;
break
;
default
:
default
:
DisplayError
(
this
,
wxT
(
"SymbolBeginDrawItem Internal err: Id error"
)
);
DisplayError
(
this
,
wxT
(
"SymbolBeginDrawItem Internal err: Id error"
)
);
return
NULL
;
return
NULL
;
}
}
DrawPanel
->
ManageCurseur
=
SymbolDisplayDraw
;
DrawPanel
->
ManageCurseur
=
SymbolDisplayDraw
;
DrawPanel
->
ForceCloseManageCurseur
=
AbortSymbolTraceOn
;
DrawPanel
->
ForceCloseManageCurseur
=
AbortSymbolTraceOn
;
switch
(
DrawType
)
switch
(
DrawType
)
{
{
case
COMPONENT_ARC_DRAW_TYPE
:
case
COMPONENT_ARC_DRAW_TYPE
:
{
{
LibDrawArc
*
Arc
=
new
LibDrawArc
();
LibDrawArc
*
Arc
=
new
LibDrawArc
();
CurrentDrawItem
=
Arc
;
CurrentDrawItem
=
Arc
;
ArcStartX
=
ArcEndX
=
m_CurrentScreen
->
m_Curseur
.
x
;
ArcStartX
=
ArcEndX
=
m_CurrentScreen
->
m_Curseur
.
x
;
ArcStartY
=
ArcEndY
=
-
m_CurrentScreen
->
m_Curseur
.
y
;
ArcStartY
=
ArcEndY
=
-
m_CurrentScreen
->
m_Curseur
.
y
;
StateDrawArc
=
1
;
StateDrawArc
=
1
;
Arc
->
m_Fill
=
FlSymbol_Fill
;
Arc
->
m_Fill
=
FlSymbol_Fill
;
Arc
->
m_Width
=
g_LibSymbolDefaultLineWidth
;
Arc
->
m_Width
=
g_LibSymbolDefaultLineWidth
;
...
@@ -222,10 +236,11 @@ int * ptpoly;
...
@@ -222,10 +236,11 @@ int * ptpoly;
case
COMPONENT_CIRCLE_DRAW_TYPE
:
case
COMPONENT_CIRCLE_DRAW_TYPE
:
{
{
LibDrawCircle
*
Circle
=
new
LibDrawCircle
();
LibDrawCircle
*
Circle
=
new
LibDrawCircle
();
CurrentDrawItem
=
Circle
;
CurrentDrawItem
=
Circle
;
Circle
->
m_Pos
.
x
=
m_CurrentScreen
->
m_Curseur
.
x
;
Circle
->
m_Pos
.
x
=
m_CurrentScreen
->
m_Curseur
.
x
;
Circle
->
m_Pos
.
y
=
-
m_CurrentScreen
->
m_Curseur
.
y
;
Circle
->
m_Pos
.
y
=
-
m_CurrentScreen
->
m_Curseur
.
y
;
Circle
->
m_Fill
=
FlSymbol_Fill
;
Circle
->
m_Fill
=
FlSymbol_Fill
;
Circle
->
m_Width
=
g_LibSymbolDefaultLineWidth
;
Circle
->
m_Width
=
g_LibSymbolDefaultLineWidth
;
}
}
...
@@ -233,10 +248,11 @@ int * ptpoly;
...
@@ -233,10 +248,11 @@ int * ptpoly;
case
COMPONENT_RECT_DRAW_TYPE
:
case
COMPONENT_RECT_DRAW_TYPE
:
{
{
LibDrawSquare
*
Square
=
new
LibDrawSquare
();
LibDrawSquare
*
Square
=
new
LibDrawSquare
();
CurrentDrawItem
=
Square
;
CurrentDrawItem
=
Square
;
Square
->
m_Pos
.
x
=
m_CurrentScreen
->
m_Curseur
.
x
;
Square
->
m_Pos
.
x
=
m_CurrentScreen
->
m_Curseur
.
x
;
Square
->
m_Pos
.
y
=
-
m_CurrentScreen
->
m_Curseur
.
y
;
Square
->
m_Pos
.
y
=
-
m_CurrentScreen
->
m_Curseur
.
y
;
Square
->
m_End
=
Square
->
m_Pos
;
Square
->
m_End
=
Square
->
m_Pos
;
Square
->
m_Fill
=
FlSymbol_Fill
;
Square
->
m_Fill
=
FlSymbol_Fill
;
Square
->
m_Width
=
g_LibSymbolDefaultLineWidth
;
Square
->
m_Width
=
g_LibSymbolDefaultLineWidth
;
...
@@ -246,12 +262,13 @@ int * ptpoly;
...
@@ -246,12 +262,13 @@ int * ptpoly;
case
COMPONENT_POLYLINE_DRAW_TYPE
:
case
COMPONENT_POLYLINE_DRAW_TYPE
:
{
{
LibDrawPolyline
*
polyline
=
new
LibDrawPolyline
();
LibDrawPolyline
*
polyline
=
new
LibDrawPolyline
();
CurrentDrawItem
=
polyline
;
CurrentDrawItem
=
polyline
;
polyline
->
n
=
2
;
polyline
->
n
=
2
;
ptpoly
=
(
int
*
)
MyZMalloc
(
4
*
sizeof
(
int
)
);
ptpoly
=
(
int
*
)
MyZMalloc
(
4
*
sizeof
(
int
)
);
polyline
->
PolyList
=
ptpoly
;
polyline
->
PolyList
=
ptpoly
;
ptpoly
[
0
]
=
ptpoly
[
2
]
=
m_CurrentScreen
->
m_Curseur
.
x
;
ptpoly
[
0
]
=
ptpoly
[
2
]
=
m_CurrentScreen
->
m_Curseur
.
x
;
ptpoly
[
1
]
=
ptpoly
[
3
]
=
-
m_CurrentScreen
->
m_Curseur
.
y
;
ptpoly
[
1
]
=
ptpoly
[
3
]
=
-
m_CurrentScreen
->
m_Curseur
.
y
;
polyline
->
m_Fill
=
FlSymbol_Fill
;
polyline
->
m_Fill
=
FlSymbol_Fill
;
polyline
->
m_Width
=
g_LibSymbolDefaultLineWidth
;
polyline
->
m_Width
=
g_LibSymbolDefaultLineWidth
;
}
}
...
@@ -260,6 +277,7 @@ int * ptpoly;
...
@@ -260,6 +277,7 @@ int * ptpoly;
case
COMPONENT_LINE_DRAW_TYPE
:
case
COMPONENT_LINE_DRAW_TYPE
:
{
{
LibDrawSegment
*
Segment
=
new
LibDrawSegment
();
LibDrawSegment
*
Segment
=
new
LibDrawSegment
();
CurrentDrawItem
=
Segment
;
CurrentDrawItem
=
Segment
;
Segment
->
m_Pos
.
x
=
m_CurrentScreen
->
m_Curseur
.
x
;
Segment
->
m_Pos
.
x
=
m_CurrentScreen
->
m_Curseur
.
x
;
Segment
->
m_Pos
.
y
=
-
m_CurrentScreen
->
m_Curseur
.
y
;
Segment
->
m_Pos
.
y
=
-
m_CurrentScreen
->
m_Curseur
.
y
;
...
@@ -271,13 +289,14 @@ int * ptpoly;
...
@@ -271,13 +289,14 @@ int * ptpoly;
case
COMPONENT_GRAPHIC_TEXT_DRAW_TYPE
:
case
COMPONENT_GRAPHIC_TEXT_DRAW_TYPE
:
{
{
LibDrawText
*
Text
=
new
LibDrawText
();
LibDrawText
*
Text
=
new
LibDrawText
();
CurrentDrawItem
=
Text
;
CurrentDrawItem
=
Text
;
Text
->
m_Size
.
x
=
Text
->
m_Size
.
y
=
g_LastTextSize
;
Text
->
m_Size
.
x
=
Text
->
m_Size
.
y
=
g_LastTextSize
;
Text
->
m_Horiz
=
g_LastTextOrient
;
Text
->
m_Horiz
=
g_LastTextOrient
;
Text
->
m_Pos
.
x
=
m_CurrentScreen
->
m_Curseur
.
x
;
Text
->
m_Pos
.
x
=
m_CurrentScreen
->
m_Curseur
.
x
;
Text
->
m_Pos
.
y
=
-
m_CurrentScreen
->
m_Curseur
.
y
;
Text
->
m_Pos
.
y
=
-
m_CurrentScreen
->
m_Curseur
.
y
;
EditSymbolText
(
NULL
,
Text
);
EditSymbolText
(
NULL
,
Text
);
if
(
Text
->
m_Text
.
IsEmpty
()
)
if
(
Text
->
m_Text
.
IsEmpty
()
)
{
{
delete
Text
;
delete
Text
;
CurrentDrawItem
=
NULL
;
CurrentDrawItem
=
NULL
;
...
@@ -286,19 +305,21 @@ int * ptpoly;
...
@@ -286,19 +305,21 @@ int * ptpoly;
}
}
else
else
{
{
StartMoveDrawSymbol
(
DC
);
StartMoveDrawSymbol
(
DC
);
DrawLibraryDrawStruct
(
DrawPanel
,
DC
,
CurrentLibEntry
,
0
,
0
,
DrawLibraryDrawStruct
(
DrawPanel
,
DC
,
CurrentLibEntry
,
0
,
0
,
Text
,
CurrentUnit
,
g_XorMode
);
Text
,
CurrentUnit
,
g_XorMode
);
}
}
}
}
break
;
break
;
}
}
if
(
CurrentDrawItem
)
if
(
CurrentDrawItem
)
{
{
CurrentDrawItem
->
m_Flags
|=
IS_NEW
;
CurrentDrawItem
->
m_Flags
|=
IS_NEW
;
if
(
g_FlDrawSpecificUnit
)
CurrentDrawItem
->
m_Unit
=
CurrentUnit
;
if
(
g_FlDrawSpecificUnit
)
if
(
g_FlDrawSpecificConvert
)
CurrentDrawItem
->
m_Convert
=
CurrentConvert
;
CurrentDrawItem
->
m_Unit
=
CurrentUnit
;
if
(
g_FlDrawSpecificConvert
)
CurrentDrawItem
->
m_Convert
=
CurrentConvert
;
}
}
DrawPanel
->
MouseToCursorSchema
();
DrawPanel
->
MouseToCursorSchema
();
...
@@ -309,26 +330,28 @@ int * ptpoly;
...
@@ -309,26 +330,28 @@ int * ptpoly;
/********************************************************/
/********************************************************/
void
WinEDA_LibeditFrame
::
GraphicItemBeginDraw
(
wxDC
*
DC
)
void
WinEDA_LibeditFrame
::
GraphicItemBeginDraw
(
wxDC
*
DC
)
/********************************************************/
/********************************************************/
/* Routine de creation d'un nouvel element type LibraryDrawStruct
/* Routine de creation d'un nouvel element type LibraryDrawStruct
*/
*/
{
{
if
(
CurrentDrawItem
==
NULL
)
return
;
if
(
CurrentDrawItem
==
NULL
)
return
;
switch
(
CurrentDrawItem
->
m_StructType
)
switch
(
CurrentDrawItem
->
m_StructType
)
{
{
case
COMPONENT_ARC_DRAW_TYPE
:
case
COMPONENT_ARC_DRAW_TYPE
:
if
(
StateDrawArc
==
1
)
if
(
StateDrawArc
==
1
)
{
{
SymbolDisplayDraw
(
DrawPanel
,
DC
,
FALSE
);
SymbolDisplayDraw
(
DrawPanel
,
DC
,
FALSE
);
StateDrawArc
=
2
;
StateDrawArc
=
2
;
SymbolDisplayDraw
(
DrawPanel
,
DC
,
FALSE
);
SymbolDisplayDraw
(
DrawPanel
,
DC
,
FALSE
);
break
;
break
;
}
}
if
(
StateDrawArc
>
1
)
if
(
StateDrawArc
>
1
)
{
{
EndDrawGraphicItem
(
DC
);
EndDrawGraphicItem
(
DC
);
return
;
return
;
}
}
break
;
break
;
...
@@ -336,96 +359,99 @@ void WinEDA_LibeditFrame::GraphicItemBeginDraw(wxDC * DC)
...
@@ -336,96 +359,99 @@ void WinEDA_LibeditFrame::GraphicItemBeginDraw(wxDC * DC)
case
COMPONENT_CIRCLE_DRAW_TYPE
:
case
COMPONENT_CIRCLE_DRAW_TYPE
:
case
COMPONENT_RECT_DRAW_TYPE
:
case
COMPONENT_RECT_DRAW_TYPE
:
case
COMPONENT_GRAPHIC_TEXT_DRAW_TYPE
:
case
COMPONENT_GRAPHIC_TEXT_DRAW_TYPE
:
EndDrawGraphicItem
(
DC
);
EndDrawGraphicItem
(
DC
);
return
;
return
;
case
COMPONENT_POLYLINE_DRAW_TYPE
:
case
COMPONENT_POLYLINE_DRAW_TYPE
:
{
{
wxPoint
pos
=
m_CurrentScreen
->
m_Curseur
;
wxPoint
pos
=
m_CurrentScreen
->
m_Curseur
;
((
LibDrawPolyline
*
)
CurrentDrawItem
)
->
AddPoint
(
pos
);
(
(
LibDrawPolyline
*
)
CurrentDrawItem
)
->
AddPoint
(
pos
);
}
}
break
;
break
;
case
COMPONENT_LINE_DRAW_TYPE
:
case
COMPONENT_LINE_DRAW_TYPE
:
break
;
break
;
}
default
:
;
}
}
}
/**************************************************************************/
/**************************************************************************/
static
void
RedrawWhileMovingCursor
(
WinEDA_DrawPanel
*
panel
,
wxDC
*
DC
,
bool
erase
)
static
void
RedrawWhileMovingCursor
(
WinEDA_DrawPanel
*
panel
,
wxDC
*
DC
,
bool
erase
)
/**************************************************************************/
/**************************************************************************/
/* Redraw the graphoc shape while moving
/* Redraw the graphoc shape while moving
*/
*/
{
{
BASE_SCREEN
*
Screen
=
panel
->
m_Parent
->
m_CurrentScreen
;
BASE_SCREEN
*
Screen
=
panel
->
m_Parent
->
m_CurrentScreen
;
int
mx
,
my
;
int
mx
,
my
;
/* Erase shape in the old positon*/
/* Erase shape in the old positon*/
if
(
erase
)
if
(
erase
)
{
{
mx
=
ItemPreviousPos
.
x
-
StartCursor
.
x
,
mx
=
ItemPreviousPos
.
x
-
StartCursor
.
x
,
my
=
ItemPreviousPos
.
y
-
StartCursor
.
y
;
my
=
ItemPreviousPos
.
y
-
StartCursor
.
y
;
DrawLibraryDrawStruct
(
panel
,
DC
,
CurrentLibEntry
,
mx
,
my
,
DrawLibraryDrawStruct
(
panel
,
DC
,
CurrentLibEntry
,
mx
,
my
,
CurrentDrawItem
,
CurrentUnit
,
g_XorMode
);
CurrentDrawItem
,
CurrentUnit
,
g_XorMode
);
}
}
/* Redraw moved shape */
/* Redraw moved shape */
mx
=
Screen
->
m_Curseur
.
x
-
StartCursor
.
x
,
mx
=
Screen
->
m_Curseur
.
x
-
StartCursor
.
x
,
my
=
Screen
->
m_Curseur
.
y
-
StartCursor
.
y
;
my
=
Screen
->
m_Curseur
.
y
-
StartCursor
.
y
;
DrawLibraryDrawStruct
(
panel
,
DC
,
CurrentLibEntry
,
mx
,
my
,
DrawLibraryDrawStruct
(
panel
,
DC
,
CurrentLibEntry
,
mx
,
my
,
CurrentDrawItem
,
CurrentUnit
,
g_XorMode
);
CurrentDrawItem
,
CurrentUnit
,
g_XorMode
);
ItemPreviousPos
=
Screen
->
m_Curseur
;
ItemPreviousPos
=
Screen
->
m_Curseur
;
}
}
/*****************************************************************/
/*****************************************************************/
void
MoveLibDrawItemAt
(
LibEDA_BaseStruct
*
DrawItem
,
wxPoint
newpos
)
void
MoveLibDrawItemAt
(
LibEDA_BaseStruct
*
DrawItem
,
wxPoint
newpos
)
/*****************************************************************/
/*****************************************************************/
{
{
int
mx
=
newpos
.
x
,
my
=
newpos
.
y
;
int
mx
=
newpos
.
x
,
my
=
newpos
.
y
;
wxSize
size
;
wxSize
size
;
switch
(
DrawItem
->
m_StructType
)
switch
(
DrawItem
->
m_StructType
)
{
{
case
COMPONENT_ARC_DRAW_TYPE
:
case
COMPONENT_ARC_DRAW_TYPE
:
{
{
int
dx
=
mx
-
((
LibDrawArc
*
)
CurrentDrawItem
)
->
m_Pos
.
x
;
int
dx
=
mx
-
(
(
LibDrawArc
*
)
CurrentDrawItem
)
->
m_Pos
.
x
;
int
dy
=
-
my
-
((
LibDrawArc
*
)
CurrentDrawItem
)
->
m_Pos
.
y
;
int
dy
=
-
my
-
(
(
LibDrawArc
*
)
CurrentDrawItem
)
->
m_Pos
.
y
;
((
LibDrawArc
*
)
CurrentDrawItem
)
->
m_Pos
.
x
=
mx
;
(
(
LibDrawArc
*
)
CurrentDrawItem
)
->
m_Pos
.
x
=
mx
;
((
LibDrawArc
*
)
CurrentDrawItem
)
->
m_Pos
.
y
=
-
my
;
(
(
LibDrawArc
*
)
CurrentDrawItem
)
->
m_Pos
.
y
=
-
my
;
((
LibDrawArc
*
)
CurrentDrawItem
)
->
m_ArcStart
.
x
+=
dx
;
(
(
LibDrawArc
*
)
CurrentDrawItem
)
->
m_ArcStart
.
x
+=
dx
;
((
LibDrawArc
*
)
CurrentDrawItem
)
->
m_ArcStart
.
y
+=
dy
;
(
(
LibDrawArc
*
)
CurrentDrawItem
)
->
m_ArcStart
.
y
+=
dy
;
((
LibDrawArc
*
)
CurrentDrawItem
)
->
m_ArcEnd
.
x
+=
dx
;
(
(
LibDrawArc
*
)
CurrentDrawItem
)
->
m_ArcEnd
.
x
+=
dx
;
((
LibDrawArc
*
)
CurrentDrawItem
)
->
m_ArcEnd
.
y
+=
dy
;
(
(
LibDrawArc
*
)
CurrentDrawItem
)
->
m_ArcEnd
.
y
+=
dy
;
break
;
break
;
}
}
case
COMPONENT_CIRCLE_DRAW_TYPE
:
case
COMPONENT_CIRCLE_DRAW_TYPE
:
((
LibDrawCircle
*
)
CurrentDrawItem
)
->
m_Pos
.
x
=
mx
;
(
(
LibDrawCircle
*
)
CurrentDrawItem
)
->
m_Pos
.
x
=
mx
;
((
LibDrawCircle
*
)
CurrentDrawItem
)
->
m_Pos
.
y
=
-
my
;
(
(
LibDrawCircle
*
)
CurrentDrawItem
)
->
m_Pos
.
y
=
-
my
;
break
;
break
;
case
COMPONENT_RECT_DRAW_TYPE
:
case
COMPONENT_RECT_DRAW_TYPE
:
size
.
x
=
((
LibDrawSquare
*
)
CurrentDrawItem
)
->
m_End
.
x
-
size
.
x
=
(
(
LibDrawSquare
*
)
CurrentDrawItem
)
->
m_End
.
x
-
((
LibDrawSquare
*
)
CurrentDrawItem
)
->
m_Pos
.
x
;
(
(
LibDrawSquare
*
)
CurrentDrawItem
)
->
m_Pos
.
x
;
size
.
y
=
((
LibDrawSquare
*
)
CurrentDrawItem
)
->
m_End
.
y
-
size
.
y
=
(
(
LibDrawSquare
*
)
CurrentDrawItem
)
->
m_End
.
y
-
((
LibDrawSquare
*
)
CurrentDrawItem
)
->
m_Pos
.
y
;
(
(
LibDrawSquare
*
)
CurrentDrawItem
)
->
m_Pos
.
y
;
((
LibDrawSquare
*
)
CurrentDrawItem
)
->
m_Pos
.
x
=
mx
;
(
(
LibDrawSquare
*
)
CurrentDrawItem
)
->
m_Pos
.
x
=
mx
;
((
LibDrawSquare
*
)
CurrentDrawItem
)
->
m_Pos
.
y
=
-
my
;
(
(
LibDrawSquare
*
)
CurrentDrawItem
)
->
m_Pos
.
y
=
-
my
;
((
LibDrawSquare
*
)
CurrentDrawItem
)
->
m_End
.
x
=
mx
+
size
.
x
;
(
(
LibDrawSquare
*
)
CurrentDrawItem
)
->
m_End
.
x
=
mx
+
size
.
x
;
((
LibDrawSquare
*
)
CurrentDrawItem
)
->
m_End
.
y
=
-
my
+
size
.
y
;
(
(
LibDrawSquare
*
)
CurrentDrawItem
)
->
m_End
.
y
=
-
my
+
size
.
y
;
break
;
break
;
case
COMPONENT_POLYLINE_DRAW_TYPE
:
case
COMPONENT_POLYLINE_DRAW_TYPE
:
{
{
int
ii
,
imax
=
((
LibDrawPolyline
*
)
CurrentDrawItem
)
->
n
*
2
;
int
ii
,
imax
=
(
(
LibDrawPolyline
*
)
CurrentDrawItem
)
->
n
*
2
;
int
*
ptpoly
=
((
LibDrawPolyline
*
)
CurrentDrawItem
)
->
PolyList
;
int
*
ptpoly
=
(
(
LibDrawPolyline
*
)
CurrentDrawItem
)
->
PolyList
;
int
dx
=
mx
-
ptpoly
[
0
];
int
dx
=
mx
-
ptpoly
[
0
];
int
dy
=
-
my
-
ptpoly
[
1
];
int
dy
=
-
my
-
ptpoly
[
1
];
for
(
ii
=
0
;
ii
<
imax
;
ii
+=
2
)
for
(
ii
=
0
;
ii
<
imax
;
ii
+=
2
)
{
{
ptpoly
[
ii
]
+=
dx
;
ptpoly
[
ii
]
+=
dx
;
ptpoly
[
ii
+
1
]
+=
dy
;
ptpoly
[
ii
+
1
]
+=
dy
;
...
@@ -437,240 +463,260 @@ wxSize size;
...
@@ -437,240 +463,260 @@ wxSize size;
break
;
break
;
case
COMPONENT_GRAPHIC_TEXT_DRAW_TYPE
:
case
COMPONENT_GRAPHIC_TEXT_DRAW_TYPE
:
((
LibDrawText
*
)
CurrentDrawItem
)
->
m_Pos
.
x
=
mx
;
(
(
LibDrawText
*
)
CurrentDrawItem
)
->
m_Pos
.
x
=
mx
;
((
LibDrawText
*
)
CurrentDrawItem
)
->
m_Pos
.
y
=
-
my
;
(
(
LibDrawText
*
)
CurrentDrawItem
)
->
m_Pos
.
y
=
-
my
;
break
;
break
;
default
:
;
}
}
}
}
/************************************************************/
/************************************************************/
void
WinEDA_LibeditFrame
::
StartMoveDrawSymbol
(
wxDC
*
DC
)
void
WinEDA_LibeditFrame
::
StartMoveDrawSymbol
(
wxDC
*
DC
)
/************************************************************/
/************************************************************/
{
{
if
(
CurrentDrawItem
==
NULL
)
return
;
if
(
CurrentDrawItem
==
NULL
)
return
;
SetCursor
(
wxCURSOR_HAND
);
SetCursor
(
wxCURSOR_HAND
);
CurrentDrawItem
->
m_Flags
|=
IS_MOVED
;
CurrentDrawItem
->
m_Flags
|=
IS_MOVED
;
StartCursor
=
m_CurrentScreen
->
m_Curseur
;
StartCursor
=
m_CurrentScreen
->
m_Curseur
;
switch
(
CurrentDrawItem
->
m_StructType
)
switch
(
CurrentDrawItem
->
m_StructType
)
{
{
case
COMPONENT_ARC_DRAW_TYPE
:
case
COMPONENT_ARC_DRAW_TYPE
:
InitPosition
=
((
LibDrawArc
*
)
CurrentDrawItem
)
->
m_Pos
;
InitPosition
=
(
(
LibDrawArc
*
)
CurrentDrawItem
)
->
m_Pos
;
break
;
break
;
case
COMPONENT_CIRCLE_DRAW_TYPE
:
case
COMPONENT_CIRCLE_DRAW_TYPE
:
InitPosition
=
((
LibDrawCircle
*
)
CurrentDrawItem
)
->
m_Pos
;
InitPosition
=
(
(
LibDrawCircle
*
)
CurrentDrawItem
)
->
m_Pos
;
break
;
break
;
case
COMPONENT_RECT_DRAW_TYPE
:
case
COMPONENT_RECT_DRAW_TYPE
:
InitPosition
=
((
LibDrawSquare
*
)
CurrentDrawItem
)
->
m_Pos
;
InitPosition
=
(
(
LibDrawSquare
*
)
CurrentDrawItem
)
->
m_Pos
;
break
;
break
;
case
COMPONENT_POLYLINE_DRAW_TYPE
:
case
COMPONENT_POLYLINE_DRAW_TYPE
:
InitPosition
.
x
=
*
((
LibDrawPolyline
*
)
CurrentDrawItem
)
->
PolyList
;
InitPosition
.
x
=
*
(
(
LibDrawPolyline
*
)
CurrentDrawItem
)
->
PolyList
;
InitPosition
.
y
=
*
(((
LibDrawPolyline
*
)
CurrentDrawItem
)
->
PolyList
+
1
);
InitPosition
.
y
=
*
(
(
(
LibDrawPolyline
*
)
CurrentDrawItem
)
->
PolyList
+
1
);
break
;
break
;
case
COMPONENT_LINE_DRAW_TYPE
:
case
COMPONENT_LINE_DRAW_TYPE
:
break
;
break
;
case
COMPONENT_GRAPHIC_TEXT_DRAW_TYPE
:
case
COMPONENT_GRAPHIC_TEXT_DRAW_TYPE
:
InitPosition
=
((
LibDrawText
*
)
CurrentDrawItem
)
->
m_Pos
;
InitPosition
=
(
(
LibDrawText
*
)
CurrentDrawItem
)
->
m_Pos
;
break
;
break
;
default
:
;
}
}
ItemPreviousPos
=
m_CurrentScreen
->
m_Curseur
;
ItemPreviousPos
=
m_CurrentScreen
->
m_Curseur
;
DrawPanel
->
ManageCurseur
=
RedrawWhileMovingCursor
;
DrawPanel
->
ManageCurseur
=
RedrawWhileMovingCursor
;
DrawPanel
->
ForceCloseManageCurseur
=
AbortSymbolTraceOn
;
DrawPanel
->
ForceCloseManageCurseur
=
AbortSymbolTraceOn
;
DrawPanel
->
ManageCurseur
(
DrawPanel
,
DC
,
TRUE
);
DrawPanel
->
ManageCurseur
(
DrawPanel
,
DC
,
TRUE
);
}
}
/****************************************************************/
/****************************************************************/
/* Routine de Gestion des evenements souris lors de la creation */
/* Routine de Gestion des evenements souris lors de la creation */
/* d'un nouvel element type LibraryDrawStruct */
/* d'un nouvel element type LibraryDrawStruct */
/****************************************************************/
/****************************************************************/
static
void
SymbolDisplayDraw
(
WinEDA_DrawPanel
*
panel
,
wxDC
*
DC
,
bool
erase
)
static
void
SymbolDisplayDraw
(
WinEDA_DrawPanel
*
panel
,
wxDC
*
DC
,
bool
erase
)
{
{
int
DrawMode
=
g_XorMode
;
int
DrawMode
=
g_XorMode
;
int
*
ptpoly
;
int
*
ptpoly
;
int
dx
,
dy
;
int
dx
,
dy
;
BASE_SCREEN
*
Screen
=
panel
->
m_Parent
->
m_CurrentScreen
;
BASE_SCREEN
*
Screen
=
panel
->
m_Parent
->
m_CurrentScreen
;
int
mx
=
Screen
->
m_Curseur
.
x
,
int
mx
=
Screen
->
m_Curseur
.
x
,
my
=
Screen
->
m_Curseur
.
y
;
my
=
Screen
->
m_Curseur
.
y
;
GRSetDrawMode
(
DC
,
DrawMode
);
GRSetDrawMode
(
DC
,
DrawMode
);
if
(
erase
)
if
(
erase
)
{
{
if
(
StateDrawArc
==
1
)
if
(
StateDrawArc
==
1
)
{
{
int
Color
=
ReturnLayerColor
(
LAYER_DEVICE
);
int
Color
=
ReturnLayerColor
(
LAYER_DEVICE
);
GRLine
(
&
panel
->
m_ClipBox
,
DC
,
ArcStartX
,
-
ArcStartY
,
ArcEndX
,
-
ArcEndY
,
0
,
Color
);
GRLine
(
&
panel
->
m_ClipBox
,
DC
,
ArcStartX
,
-
ArcStartY
,
ArcEndX
,
-
ArcEndY
,
0
,
Color
);
}
}
else
else
{
{
DrawLibraryDrawStruct
(
panel
,
DC
,
CurrentLibEntry
,
0
,
0
,
DrawLibraryDrawStruct
(
panel
,
DC
,
CurrentLibEntry
,
0
,
0
,
CurrentDrawItem
,
CurrentUnit
,
DrawMode
);
CurrentDrawItem
,
CurrentUnit
,
DrawMode
);
if
(
CurrentDrawItem
->
m_StructType
==
COMPONENT_ARC_DRAW_TYPE
)
if
(
CurrentDrawItem
->
m_StructType
==
COMPONENT_ARC_DRAW_TYPE
)
{
{
int
Color
=
ReturnLayerColor
(
LAYER_DEVICE
);
int
Color
=
ReturnLayerColor
(
LAYER_DEVICE
);
GRDashedLine
(
&
panel
->
m_ClipBox
,
DC
,
ArcStartX
,
-
ArcStartY
,
GRDashedLine
(
&
panel
->
m_ClipBox
,
DC
,
ArcStartX
,
-
ArcStartY
,
((
LibDrawArc
*
)
CurrentDrawItem
)
->
m_Pos
.
x
,
(
(
LibDrawArc
*
)
CurrentDrawItem
)
->
m_Pos
.
x
,
-
((
LibDrawArc
*
)
CurrentDrawItem
)
->
m_Pos
.
y
,
-
(
(
LibDrawArc
*
)
CurrentDrawItem
)
->
m_Pos
.
y
,
0
,
Color
);
0
,
Color
);
GRDashedLine
(
&
panel
->
m_ClipBox
,
DC
,
ArcEndX
,
-
ArcEndY
,
GRDashedLine
(
&
panel
->
m_ClipBox
,
DC
,
ArcEndX
,
-
ArcEndY
,
((
LibDrawArc
*
)
CurrentDrawItem
)
->
m_Pos
.
x
,
(
(
LibDrawArc
*
)
CurrentDrawItem
)
->
m_Pos
.
x
,
-
((
LibDrawArc
*
)
CurrentDrawItem
)
->
m_Pos
.
y
,
-
(
(
LibDrawArc
*
)
CurrentDrawItem
)
->
m_Pos
.
y
,
0
,
Color
);
0
,
Color
);
}
}
}
}
}
}
switch
(
CurrentDrawItem
->
m_StructType
)
switch
(
CurrentDrawItem
->
m_StructType
)
{
{
case
COMPONENT_ARC_DRAW_TYPE
:
case
COMPONENT_ARC_DRAW_TYPE
:
if
(
StateDrawArc
==
1
)
if
(
StateDrawArc
==
1
)
{
{
ArcEndX
=
mx
;
ArcEndY
=
-
my
;
ArcEndX
=
mx
;
ArcEndY
=
-
my
;
}
}
if
(
StateDrawArc
==
2
)
if
(
StateDrawArc
==
2
)
{
{
ComputeArc
((
LibDrawArc
*
)
CurrentDrawItem
,
Screen
->
m_Curseur
);
ComputeArc
(
(
LibDrawArc
*
)
CurrentDrawItem
,
Screen
->
m_Curseur
);
}
}
((
LibDrawArc
*
)
CurrentDrawItem
)
->
m_Fill
=
FlSymbol_Fill
;
(
(
LibDrawArc
*
)
CurrentDrawItem
)
->
m_Fill
=
FlSymbol_Fill
;
break
;
break
;
case
COMPONENT_CIRCLE_DRAW_TYPE
:
case
COMPONENT_CIRCLE_DRAW_TYPE
:
dx
=
((
LibDrawCircle
*
)
CurrentDrawItem
)
->
m_Pos
.
x
-
mx
;
dx
=
(
(
LibDrawCircle
*
)
CurrentDrawItem
)
->
m_Pos
.
x
-
mx
;
dy
=
((
LibDrawCircle
*
)
CurrentDrawItem
)
->
m_Pos
.
y
+
my
;
dy
=
(
(
LibDrawCircle
*
)
CurrentDrawItem
)
->
m_Pos
.
y
+
my
;
((
LibDrawCircle
*
)
CurrentDrawItem
)
->
m_Rayon
=
(
int
)
sqrt
(
(
dx
*
dx
)
+
(
dy
*
dy
)
);
(
(
LibDrawCircle
*
)
CurrentDrawItem
)
->
m_Rayon
=
(
int
)
sqrt
(
(
dx
*
dx
)
+
(
dy
*
dy
)
);
((
LibDrawCircle
*
)
CurrentDrawItem
)
->
m_Fill
=
FlSymbol_Fill
;
(
(
LibDrawCircle
*
)
CurrentDrawItem
)
->
m_Fill
=
FlSymbol_Fill
;
break
;
break
;
case
COMPONENT_RECT_DRAW_TYPE
:
case
COMPONENT_RECT_DRAW_TYPE
:
((
LibDrawSquare
*
)
CurrentDrawItem
)
->
m_End
.
x
=
mx
;
(
(
LibDrawSquare
*
)
CurrentDrawItem
)
->
m_End
.
x
=
mx
;
((
LibDrawSquare
*
)
CurrentDrawItem
)
->
m_End
.
y
=
-
my
;
(
(
LibDrawSquare
*
)
CurrentDrawItem
)
->
m_End
.
y
=
-
my
;
((
LibDrawSquare
*
)
CurrentDrawItem
)
->
m_Fill
=
FlSymbol_Fill
;
(
(
LibDrawSquare
*
)
CurrentDrawItem
)
->
m_Fill
=
FlSymbol_Fill
;
break
;
break
;
case
COMPONENT_POLYLINE_DRAW_TYPE
:
case
COMPONENT_POLYLINE_DRAW_TYPE
:
ptpoly
=
((
LibDrawPolyline
*
)
CurrentDrawItem
)
->
PolyList
;
ptpoly
=
(
(
LibDrawPolyline
*
)
CurrentDrawItem
)
->
PolyList
;
ptpoly
+=
2
*
(((
LibDrawPolyline
*
)
CurrentDrawItem
)
->
n
-
1
);
ptpoly
+=
2
*
(
(
(
LibDrawPolyline
*
)
CurrentDrawItem
)
->
n
-
1
);
ptpoly
[
0
]
=
mx
;
ptpoly
[
0
]
=
mx
;
ptpoly
[
1
]
=
-
my
;
ptpoly
[
1
]
=
-
my
;
((
LibDrawPolyline
*
)
CurrentDrawItem
)
->
m_Fill
=
FlSymbol_Fill
;
(
(
LibDrawPolyline
*
)
CurrentDrawItem
)
->
m_Fill
=
FlSymbol_Fill
;
break
;
break
;
case
COMPONENT_LINE_DRAW_TYPE
:
case
COMPONENT_LINE_DRAW_TYPE
:
((
LibDrawSegment
*
)
CurrentDrawItem
)
->
m_End
.
x
=
mx
;
(
(
LibDrawSegment
*
)
CurrentDrawItem
)
->
m_End
.
x
=
mx
;
((
LibDrawSegment
*
)
CurrentDrawItem
)
->
m_End
.
y
=
-
my
;
(
(
LibDrawSegment
*
)
CurrentDrawItem
)
->
m_End
.
y
=
-
my
;
break
;
break
;
case
COMPONENT_GRAPHIC_TEXT_DRAW_TYPE
:
/* Traite par des routines specifiques */
case
COMPONENT_GRAPHIC_TEXT_DRAW_TYPE
:
/* Traite par des routines specifiques */
break
;
break
;
default
:
;
}
}
if
(
StateDrawArc
==
1
)
if
(
StateDrawArc
==
1
)
{
{
int
Color
=
ReturnLayerColor
(
LAYER_DEVICE
);
int
Color
=
ReturnLayerColor
(
LAYER_DEVICE
);
GRLine
(
&
panel
->
m_ClipBox
,
DC
,
ArcStartX
,
-
ArcStartY
,
ArcEndX
,
-
ArcEndY
,
0
,
Color
);
GRLine
(
&
panel
->
m_ClipBox
,
DC
,
ArcStartX
,
-
ArcStartY
,
ArcEndX
,
-
ArcEndY
,
0
,
Color
);
}
}
else
else
{
{
DrawLibraryDrawStruct
(
panel
,
DC
,
CurrentLibEntry
,
0
,
0
,
DrawLibraryDrawStruct
(
panel
,
DC
,
CurrentLibEntry
,
0
,
0
,
CurrentDrawItem
,
CurrentUnit
,
DrawMode
);
CurrentDrawItem
,
CurrentUnit
,
DrawMode
);
if
(
CurrentDrawItem
->
m_StructType
==
COMPONENT_ARC_DRAW_TYPE
)
if
(
CurrentDrawItem
->
m_StructType
==
COMPONENT_ARC_DRAW_TYPE
)
{
{
int
Color
=
ReturnLayerColor
(
LAYER_DEVICE
);
int
Color
=
ReturnLayerColor
(
LAYER_DEVICE
);
GRDashedLine
(
&
panel
->
m_ClipBox
,
DC
,
ArcStartX
,
-
ArcStartY
,
GRDashedLine
(
&
panel
->
m_ClipBox
,
DC
,
ArcStartX
,
-
ArcStartY
,
((
LibDrawArc
*
)
CurrentDrawItem
)
->
m_Pos
.
x
,
(
(
LibDrawArc
*
)
CurrentDrawItem
)
->
m_Pos
.
x
,
-
((
LibDrawArc
*
)
CurrentDrawItem
)
->
m_Pos
.
y
,
-
(
(
LibDrawArc
*
)
CurrentDrawItem
)
->
m_Pos
.
y
,
0
,
Color
);
0
,
Color
);
GRDashedLine
(
&
panel
->
m_ClipBox
,
DC
,
ArcEndX
,
-
ArcEndY
,
GRDashedLine
(
&
panel
->
m_ClipBox
,
DC
,
ArcEndX
,
-
ArcEndY
,
((
LibDrawArc
*
)
CurrentDrawItem
)
->
m_Pos
.
x
,
(
(
LibDrawArc
*
)
CurrentDrawItem
)
->
m_Pos
.
x
,
-
((
LibDrawArc
*
)
CurrentDrawItem
)
->
m_Pos
.
y
,
-
(
(
LibDrawArc
*
)
CurrentDrawItem
)
->
m_Pos
.
y
,
0
,
Color
);
0
,
Color
);
}
}
}
}
}
}
/******************************************************/
/******************************************************/
void
WinEDA_LibeditFrame
::
EndDrawGraphicItem
(
wxDC
*
DC
)
void
WinEDA_LibeditFrame
::
EndDrawGraphicItem
(
wxDC
*
DC
)
/******************************************************/
/******************************************************/
/* Place la structure courante en liste des structures du composant
/* Place la structure courante en liste des structures du composant
courant, si elle existe et redessine toujours celle ci
*
courant, si elle existe et redessine toujours celle ci
Parametres: (tous globaux)
*
Parametres: (tous globaux)
CurrentDrawItem
*
CurrentDrawItem
CurrentLibEntry
*
CurrentLibEntry
*/
*/
{
{
if
(
CurrentLibEntry
==
NULL
)
return
;
if
(
CurrentLibEntry
==
NULL
)
if
(
CurrentDrawItem
==
NULL
)
return
;
return
;
if
(
CurrentDrawItem
==
NULL
)
return
;
if
(
CurrentDrawItem
->
m_StructType
==
COMPONENT_ARC_DRAW_TYPE
)
if
(
CurrentDrawItem
->
m_StructType
==
COMPONENT_ARC_DRAW_TYPE
)
{
{
if
(
StateDrawArc
==
1
)
/* Trace d'arc en cours: doit etre termine */
if
(
StateDrawArc
==
1
)
/* Trace d'arc en cours: doit etre termine */
{
{
DisplayError
(
this
,
wxT
(
"Arc in progress.."
),
10
);
return
;
DisplayError
(
this
,
wxT
(
"Arc in progress.."
),
10
);
return
;
}
}
else
else
{
{
if
(
(
CurrentDrawItem
->
m_Flags
&
IS_MOVED
)
==
0
)
if
(
(
CurrentDrawItem
->
m_Flags
&
IS_MOVED
)
==
0
)
SymbolDisplayDraw
(
DrawPanel
,
DC
,
FALSE
);
SymbolDisplayDraw
(
DrawPanel
,
DC
,
FALSE
);
}
}
}
}
StateDrawArc
=
0
;
StateDrawArc
=
0
;
if
(
CurrentDrawItem
->
m_Flags
&
IS_NEW
)
if
(
CurrentDrawItem
->
m_Flags
&
IS_NEW
)
{
{
SaveCopyInUndoList
(
CurrentLibEntry
);
SaveCopyInUndoList
(
CurrentLibEntry
);
CurrentDrawItem
->
Pnext
=
CurrentLibEntry
->
m_Drawings
;
CurrentDrawItem
->
Pnext
=
CurrentLibEntry
->
m_Drawings
;
CurrentLibEntry
->
m_Drawings
=
CurrentDrawItem
;
CurrentLibEntry
->
m_Drawings
=
CurrentDrawItem
;
switch
(
CurrentDrawItem
->
m_StructType
)
switch
(
CurrentDrawItem
->
m_StructType
)
{
{
case
COMPONENT_ARC_DRAW_TYPE
:
case
COMPONENT_ARC_DRAW_TYPE
:
((
LibDrawArc
*
)
CurrentDrawItem
)
->
m_Fill
=
FlSymbol_Fill
;
(
(
LibDrawArc
*
)
CurrentDrawItem
)
->
m_Fill
=
FlSymbol_Fill
;
break
;
break
;
case
COMPONENT_CIRCLE_DRAW_TYPE
:
case
COMPONENT_CIRCLE_DRAW_TYPE
:
((
LibDrawCircle
*
)
CurrentDrawItem
)
->
m_Fill
=
FlSymbol_Fill
;
(
(
LibDrawCircle
*
)
CurrentDrawItem
)
->
m_Fill
=
FlSymbol_Fill
;
break
;
break
;
case
COMPONENT_RECT_DRAW_TYPE
:
case
COMPONENT_RECT_DRAW_TYPE
:
((
LibDrawSquare
*
)
CurrentDrawItem
)
->
m_Fill
=
FlSymbol_Fill
;
(
(
LibDrawSquare
*
)
CurrentDrawItem
)
->
m_Fill
=
FlSymbol_Fill
;
break
;
break
;
case
COMPONENT_POLYLINE_DRAW_TYPE
:
case
COMPONENT_POLYLINE_DRAW_TYPE
:
((
LibDrawPolyline
*
)
CurrentDrawItem
)
->
m_Fill
=
FlSymbol_Fill
;
(
(
LibDrawPolyline
*
)
CurrentDrawItem
)
->
m_Fill
=
FlSymbol_Fill
;
break
;
break
;
case
COMPONENT_PIN_DRAW_TYPE
:
case
COMPONENT_PIN_DRAW_TYPE
:
case
COMPONENT_LINE_DRAW_TYPE
:
case
COMPONENT_LINE_DRAW_TYPE
:
case
COMPONENT_GRAPHIC_TEXT_DRAW_TYPE
:
case
COMPONENT_GRAPHIC_TEXT_DRAW_TYPE
:
break
;
break
;
default
:
;
}
}
CurrentLibEntry
->
SortDrawItems
();
CurrentLibEntry
->
SortDrawItems
();
}
}
if
(
m_ID_current_state
)
SetCursor
(
wxCURSOR_PENCIL
);
if
(
m_ID_current_state
)
else
SetCursor
(
wxCURSOR_ARROW
);
SetCursor
(
wxCURSOR_PENCIL
);
else
SetCursor
(
wxCURSOR_ARROW
);
if
(
(
CurrentDrawItem
->
m_Flags
&
IS_MOVED
)
)
if
(
(
CurrentDrawItem
->
m_Flags
&
IS_MOVED
)
)
{
{
wxPoint
pos
;
wxPoint
pos
;
pos
.
x
=
GetScreen
()
->
m_Curseur
.
x
+
InitPosition
.
x
-
StartCursor
.
x
,
pos
.
x
=
GetScreen
()
->
m_Curseur
.
x
+
InitPosition
.
x
-
StartCursor
.
x
,
pos
.
y
=
GetScreen
()
->
m_Curseur
.
y
-
InitPosition
.
y
-
StartCursor
.
y
;
pos
.
y
=
GetScreen
()
->
m_Curseur
.
y
-
InitPosition
.
y
-
StartCursor
.
y
;
MoveLibDrawItemAt
(
CurrentDrawItem
,
pos
);
MoveLibDrawItemAt
(
CurrentDrawItem
,
pos
);
}
}
DrawLibEntry
(
DrawPanel
,
DC
,
CurrentLibEntry
,
0
,
0
,
CurrentUnit
,
DrawLibEntry
(
DrawPanel
,
DC
,
CurrentLibEntry
,
0
,
0
,
CurrentUnit
,
CurrentConvert
,
GR_DEFAULT_DRAWMODE
);
CurrentConvert
,
GR_DEFAULT_DRAWMODE
);
CurrentDrawItem
->
m_Flags
=
0
;
CurrentDrawItem
->
m_Flags
=
0
;
...
@@ -683,20 +729,20 @@ void WinEDA_LibeditFrame::EndDrawGraphicItem(wxDC * DC)
...
@@ -683,20 +729,20 @@ void WinEDA_LibeditFrame::EndDrawGraphicItem(wxDC * DC)
}
}
/***************************************************************/
/***************************************************************/
static
void
ComputeArc
(
LibDrawArc
*
DrawItem
,
wxPoint
ArcCentre
)
static
void
ComputeArc
(
LibDrawArc
*
DrawItem
,
wxPoint
ArcCentre
)
/***************************************************************/
/***************************************************************/
/* routine d'ajustage des parametres de l'arc en cours de trace
/* routine d'ajustage des parametres de l'arc en cours de trace
calcule le centre, rayon, angles pour que l'arc en cours
*
calcule le centre, rayon, angles pour que l'arc en cours
passe par les points ArcStartX,Y et ArcEndX,Y avec le centre le plus proche
*
passe par les points ArcStartX,Y et ArcEndX,Y avec le centre le plus proche
de la pos souris
*
de la pos souris
Remarque: le centre n'est evidemment pas sur la grille
*
Remarque: le centre n'est evidemment pas sur la grille
*/
*/
{
{
int
dx
,
dy
;
int
dx
,
dy
;
int
cX
,
cY
;
/* Coord centre de l'arc */
int
cX
,
cY
;
/* Coord centre de l'arc */
int
angle
;
int
angle
;
cX
=
ArcCentre
.
x
;
cY
=
ArcCentre
.
y
;
cX
=
ArcCentre
.
x
;
cY
=
ArcCentre
.
y
;
...
@@ -705,13 +751,13 @@ int angle;
...
@@ -705,13 +751,13 @@ int angle;
/* calcul de cX et cY pour que l'arc passe par ArcStartX,Y et ArcEndX,Y */
/* calcul de cX et cY pour que l'arc passe par ArcStartX,Y et ArcEndX,Y */
dx
=
ArcEndX
-
ArcStartX
;
dy
=
ArcEndY
-
ArcStartY
;
dx
=
ArcEndX
-
ArcStartX
;
dy
=
ArcEndY
-
ArcStartY
;
cX
-=
ArcStartX
;
cY
-=
ArcStartY
;
cX
-=
ArcStartX
;
cY
-=
ArcStartY
;
angle
=
(
int
)(
atan2
(
dy
,
dx
)
*
1800
/
M_PI
);
angle
=
(
int
)
(
atan2
(
dy
,
dx
)
*
1800
/
M_PI
);
RotatePoint
(
&
dx
,
&
dy
,
angle
);
/* Le segment dx, dy est horizontal */
RotatePoint
(
&
dx
,
&
dy
,
angle
);
/* Le segment dx, dy est horizontal */
/* -> dx = longueur, dy = 0 */
/* -> dx = longueur, dy = 0 */
RotatePoint
(
&
cX
,
&
cY
,
angle
);
RotatePoint
(
&
cX
,
&
cY
,
angle
);
cX
=
dx
/
2
;
/* cX, cY est sur la mediane du segment 0,0 a dx,0 */
cX
=
dx
/
2
;
/* cX, cY est sur la mediane du segment 0,0 a dx,0 */
RotatePoint
(
&
cX
,
&
cY
,
-
angle
);
RotatePoint
(
&
cX
,
&
cY
,
-
angle
);
cX
+=
ArcStartX
;
cY
+=
ArcStartY
;
cX
+=
ArcStartX
;
cY
+=
ArcStartY
;
DrawItem
->
m_Pos
.
x
=
cX
;
DrawItem
->
m_Pos
.
y
=
cY
;
DrawItem
->
m_Pos
.
x
=
cX
;
DrawItem
->
m_Pos
.
y
=
cY
;
...
@@ -719,84 +765,87 @@ int angle;
...
@@ -719,84 +765,87 @@ int angle;
dx
=
ArcStartX
-
DrawItem
->
m_Pos
.
x
;
dx
=
ArcStartX
-
DrawItem
->
m_Pos
.
x
;
dy
=
ArcStartY
-
DrawItem
->
m_Pos
.
y
;
dy
=
ArcStartY
-
DrawItem
->
m_Pos
.
y
;
DrawItem
->
m_Rayon
=
(
int
)
sqrt
(
(
dx
*
dx
)
+
(
dy
*
dy
)
);
DrawItem
->
m_Rayon
=
(
int
)
sqrt
(
(
dx
*
dx
)
+
(
dy
*
dy
)
);
DrawItem
->
t1
=
(
int
)(
atan2
(
dy
,
dx
)
*
1800
/
M_PI
);
DrawItem
->
t1
=
(
int
)
(
atan2
(
dy
,
dx
)
*
1800
/
M_PI
);
dx
=
ArcEndX
-
DrawItem
->
m_Pos
.
x
;
dx
=
ArcEndX
-
DrawItem
->
m_Pos
.
x
;
dy
=
ArcEndY
-
DrawItem
->
m_Pos
.
y
;
dy
=
ArcEndY
-
DrawItem
->
m_Pos
.
y
;
DrawItem
->
t2
=
(
int
)(
atan2
(
dy
,
dx
)
*
1800
/
M_PI
);
DrawItem
->
t2
=
(
int
)
(
atan2
(
dy
,
dx
)
*
1800
/
M_PI
);
DrawItem
->
m_ArcStart
.
x
=
ArcStartX
;
DrawItem
->
m_ArcStart
.
x
=
ArcStartX
;
DrawItem
->
m_ArcStart
.
y
=
ArcStartY
;
DrawItem
->
m_ArcStart
.
y
=
ArcStartY
;
DrawItem
->
m_ArcEnd
.
x
=
ArcEndX
;
DrawItem
->
m_ArcEnd
.
x
=
ArcEndX
;
DrawItem
->
m_ArcEnd
.
y
=
ArcEndY
;
DrawItem
->
m_ArcEnd
.
y
=
ArcEndY
;
NORMALIZE_ANGLE
(
DrawItem
->
t1
);
NORMALIZE_ANGLE
(
DrawItem
->
t1
);
NORMALIZE_ANGLE
(
DrawItem
->
t2
);
// angles = 0 .. 3600
NORMALIZE_ANGLE
(
DrawItem
->
t2
);
// angles = 0 .. 3600
// limitation val abs a < 1800 (1/2 cercle) pour eviter Pbs d'affichage en miroir
// limitation val abs a < 1800 (1/2 cercle) pour eviter Pbs d'affichage en miroir
// car en trace on suppose que l'arc fait moins de 180 deg pour trouver
// car en trace on suppose que l'arc fait moins de 180 deg pour trouver
// son orientation apres rot, miroir...
// son orientation apres rot, miroir...
if
(
(
DrawItem
->
t2
-
DrawItem
->
t1
)
>
1800
)
DrawItem
->
t2
-=
3600
;
if
(
(
DrawItem
->
t2
-
DrawItem
->
t1
)
>
1800
)
else
if
(
(
DrawItem
->
t2
-
DrawItem
->
t1
)
<=
-
1800
)
DrawItem
->
t2
+=
3600
;
DrawItem
->
t2
-=
3600
;
else
if
(
(
DrawItem
->
t2
-
DrawItem
->
t1
)
<=
-
1800
)
DrawItem
->
t2
+=
3600
;
wxString
msg
;
wxString
msg
;
angle
=
DrawItem
->
t2
-
DrawItem
->
t1
;
angle
=
DrawItem
->
t2
-
DrawItem
->
t1
;
msg
.
Printf
(
_
(
"Arc %.1f deg"
),
(
float
)
angle
/
10
);
msg
.
Printf
(
_
(
"Arc %.1f deg"
),
(
float
)
angle
/
10
);
EDA_Appl
->
LibeditFrame
->
PrintMsg
(
msg
);
EDA_Appl
->
LibeditFrame
->
PrintMsg
(
msg
);
while
(
(
DrawItem
->
t2
-
DrawItem
->
t1
)
>=
1800
)
while
(
(
DrawItem
->
t2
-
DrawItem
->
t1
)
>=
1800
)
{
{
DrawItem
->
t2
--
;
DrawItem
->
t2
--
;
DrawItem
->
t1
++
;
DrawItem
->
t1
++
;
}
}
while
(
(
DrawItem
->
t1
-
DrawItem
->
t2
)
>=
1800
)
while
(
(
DrawItem
->
t1
-
DrawItem
->
t2
)
>=
1800
)
{
{
DrawItem
->
t2
++
;
DrawItem
->
t2
++
;
DrawItem
->
t1
--
;
DrawItem
->
t1
--
;
}
}
NORMALIZE_ANGLE
(
DrawItem
->
t1
);
NORMALIZE_ANGLE
(
DrawItem
->
t1
);
NORMALIZE_ANGLE
(
DrawItem
->
t2
);
NORMALIZE_ANGLE
(
DrawItem
->
t2
);
}
}
/***************************************************/
/***************************************************/
void
WinEDA_LibeditFrame
::
DeleteDrawPoly
(
wxDC
*
DC
)
void
WinEDA_LibeditFrame
::
DeleteDrawPoly
(
wxDC
*
DC
)
/**************************************************/
/**************************************************/
/* Used for deleting last entered segment while creating a Polyline
/* Used for deleting last entered segment while creating a Polyline
*/
*/
{
{
if
(
CurrentDrawItem
==
NULL
)
if
(
CurrentDrawItem
==
NULL
)
return
;
return
;
if
(
CurrentDrawItem
->
m_StructType
!=
COMPONENT_POLYLINE_DRAW_TYPE
)
if
(
CurrentDrawItem
->
m_StructType
!=
COMPONENT_POLYLINE_DRAW_TYPE
)
return
;
return
;
int
*
ptpoly
;
int
*
ptpoly
;
LibDrawPolyline
*
Poly
=
(
LibDrawPolyline
*
)
CurrentDrawItem
;
LibDrawPolyline
*
Poly
=
(
LibDrawPolyline
*
)
CurrentDrawItem
;
DrawLibraryDrawStruct
(
DrawPanel
,
DC
,
CurrentLibEntry
,
0
,
0
,
DrawLibraryDrawStruct
(
DrawPanel
,
DC
,
CurrentLibEntry
,
0
,
0
,
CurrentDrawItem
,
CurrentUnit
,
g_XorMode
);
CurrentDrawItem
,
CurrentUnit
,
g_XorMode
);
while
(
Poly
->
n
>
2
)
// First segment is kept, only its end point is changed
while
(
Poly
->
n
>
2
)
// First segment is kept, only its end point is changed
{
{
Poly
->
n
--
;
Poly
->
n
--
;
ptpoly
=
Poly
->
PolyList
+
(
2
*
(
Poly
->
n
-
1
)
);
ptpoly
=
Poly
->
PolyList
+
(
2
*
(
Poly
->
n
-
1
)
);
if
(
(
ptpoly
[
0
]
!=
m_CurrentScreen
->
m_Curseur
.
x
)
||
if
(
(
ptpoly
[
0
]
!=
m_CurrentScreen
->
m_Curseur
.
x
)
(
ptpoly
[
1
]
!=
-
m_CurrentScreen
->
m_Curseur
.
y
)
)
||
(
ptpoly
[
1
]
!=
-
m_CurrentScreen
->
m_Curseur
.
y
)
)
{
{
ptpoly
[
0
]
=
m_CurrentScreen
->
m_Curseur
.
x
;
ptpoly
[
0
]
=
m_CurrentScreen
->
m_Curseur
.
x
;
ptpoly
[
1
]
=
-
m_CurrentScreen
->
m_Curseur
.
y
;
ptpoly
[
1
]
=
-
m_CurrentScreen
->
m_Curseur
.
y
;
break
;
break
;
}
}
}
}
int
allocsize
=
2
*
sizeof
(
int
)
*
Poly
->
n
;
int
allocsize
=
2
*
sizeof
(
int
)
*
Poly
->
n
;
Poly
->
PolyList
=
(
int
*
)
realloc
(
Poly
->
PolyList
,
allocsize
);
Poly
->
PolyList
=
(
int
*
)
realloc
(
Poly
->
PolyList
,
allocsize
);
DrawLibraryDrawStruct
(
DrawPanel
,
DC
,
CurrentLibEntry
,
0
,
0
,
DrawLibraryDrawStruct
(
DrawPanel
,
DC
,
CurrentLibEntry
,
0
,
0
,
CurrentDrawItem
,
CurrentUnit
,
g_XorMode
);
CurrentDrawItem
,
CurrentUnit
,
g_XorMode
);
}
}
eeschema/symbedit.cpp
View file @
f3c324d5
/*************************************************/
/*************************************************/
/* Functions to Load from file and save to file */
/* Functions to Load from file and save to file */
/* the graphic shapes used to draw a component */
/* the graphic shapes used to draw a component */
/* When using the import/export symbol options */
/* When using the import/export symbol options */
/* files are the *.sym files */
/* files are the *.sym files */
/*************************************************/
/*************************************************/
/* fichier symbedit.cpp */
/* fichier symbedit.cpp */
#include "fctsys.h"
#include "fctsys.h"
#include "gr_basic.h"
#include "gr_basic.h"
...
@@ -19,36 +19,37 @@
...
@@ -19,36 +19,37 @@
/* Routines locales */
/* Routines locales */
static
bool
CompareSymbols
(
LibEDA_BaseStruct
*
DEntryRef
,
static
bool
CompareSymbols
(
LibEDA_BaseStruct
*
DEntryRef
,
LibEDA_BaseStruct
*
DEntryCompare
);
LibEDA_BaseStruct
*
DEntryCompare
);
/* Variables locales */
/* Variables locales */
/***************************************************/
/***************************************************/
void
WinEDA_LibeditFrame
::
LoadOneSymbol
(
wxDC
*
DC
)
void
WinEDA_LibeditFrame
::
LoadOneSymbol
(
wxDC
*
DC
)
/***************************************************/
/***************************************************/
/* Read a component shape file and add data (graphic items) to the current
/* Read a component shape file and add data (graphic items) to the current
component.
*
component.
*/
*/
{
{
int
NumOfParts
;
int
NumOfParts
;
PriorQue
*
Entries
;
PriorQue
*
Entries
;
EDA_LibComponentStruct
*
LibEntry
=
NULL
;
EDA_LibComponentStruct
*
LibEntry
=
NULL
;
LibEDA_BaseStruct
*
DrawEntry
;
LibEDA_BaseStruct
*
DrawEntry
;
wxString
FullFileName
,
mask
;
wxString
FullFileName
,
mask
;
FILE
*
ImportFile
;
FILE
*
ImportFile
;
wxString
msg
;
wxString
msg
;
if
(
CurrentDrawItem
)
return
;
if
(
CurrentDrawItem
)
if
(
CurrentLibEntry
==
NULL
)
return
;
return
;
if
(
CurrentLibEntry
==
NULL
)
return
;
DrawPanel
->
m_IgnoreMouseEvents
=
TRUE
;
DrawPanel
->
m_IgnoreMouseEvents
=
TRUE
;
mask
=
wxT
(
"*"
)
+
g_SymbolExtBuffer
;
mask
=
wxT
(
"*"
)
+
g_SymbolExtBuffer
;
FullFileName
=
EDA_FileSelector
(
_
(
"Import symbol drawings:"
),
FullFileName
=
EDA_FileSelector
(
_
(
"Import symbol drawings:"
),
g_RealLibDirBuffer
,
/* Chemin par defaut */
g_RealLibDirBuffer
,
/* Chemin par defaut */
wxEmptyString
,
/* nom fichier par defaut */
wxEmptyString
,
/* nom fichier par defaut */
g_SymbolExtBuffer
,
/* extension par defaut */
g_SymbolExtBuffer
,
/* extension par defaut */
...
@@ -58,47 +59,51 @@ wxString msg;
...
@@ -58,47 +59,51 @@ wxString msg;
TRUE
TRUE
);
);
GetScreen
()
->
m_Curseur
=
wxPoint
(
0
,
0
);
GetScreen
()
->
m_Curseur
=
wxPoint
(
0
,
0
);
DrawPanel
->
MouseToCursorSchema
();
DrawPanel
->
MouseToCursorSchema
();
DrawPanel
->
m_IgnoreMouseEvents
=
FALSE
;
DrawPanel
->
m_IgnoreMouseEvents
=
FALSE
;
if
(
FullFileName
.
IsEmpty
()
)
return
;
if
(
FullFileName
.
IsEmpty
()
)
return
;
/* Load data */
/* Load data */
ImportFile
=
wxFopen
(
FullFileName
,
wxT
(
"rt"
)
);
ImportFile
=
wxFopen
(
FullFileName
,
wxT
(
"rt"
)
);
if
(
ImportFile
==
NULL
)
if
(
ImportFile
==
NULL
)
{
{
msg
.
Printf
(
_
(
"Failed to open Symbol File <%s>"
),
FullFileName
.
GetData
()
);
msg
.
Printf
(
_
(
"Failed to open Symbol File <%s>"
),
FullFileName
.
GetData
()
);
DisplayError
(
this
,
msg
,
20
);
DisplayError
(
this
,
msg
,
20
);
return
;
return
;
}
}
Entries
=
LoadLibraryAux
(
this
,
NULL
,
ImportFile
,
&
NumOfParts
);
Entries
=
LoadLibraryAux
(
this
,
NULL
,
ImportFile
,
&
NumOfParts
);
fclose
(
ImportFile
);
fclose
(
ImportFile
);
if
(
Entries
==
NULL
)
return
;
if
(
Entries
==
NULL
)
return
;
if
(
NumOfParts
>
1
)
if
(
NumOfParts
>
1
)
DisplayError
(
this
,
_
(
"Warning: more than 1 part in Symbol File"
),
20
);
DisplayError
(
this
,
_
(
"Warning: more than 1 part in Symbol File"
),
20
);
LibEntry
=
(
EDA_LibComponentStruct
*
)
PQFirst
(
&
Entries
,
FALSE
);
LibEntry
=
(
EDA_LibComponentStruct
*
)
PQFirst
(
&
Entries
,
FALSE
);
if
(
LibEntry
==
NULL
)
if
(
LibEntry
==
NULL
)
DisplayError
(
this
,
_
(
"Symbol File is void"
),
20
);
DisplayError
(
this
,
_
(
"Symbol File is void"
),
20
);
else
/* add data to the current symbol */
else
/* add data to the current symbol */
{
{
DrawEntry
=
LibEntry
->
m_Drawings
;
DrawEntry
=
LibEntry
->
m_Drawings
;
while
(
DrawEntry
)
while
(
DrawEntry
)
{
{
if
(
DrawEntry
->
m_Unit
)
DrawEntry
->
m_Unit
=
CurrentUnit
;
if
(
DrawEntry
->
m_Unit
)
if
(
DrawEntry
->
m_Convert
)
DrawEntry
->
m_Convert
=
CurrentConvert
;
DrawEntry
->
m_Unit
=
CurrentUnit
;
if
(
DrawEntry
->
m_Convert
)
DrawEntry
->
m_Convert
=
CurrentConvert
;
DrawEntry
->
m_Flags
=
IS_NEW
;
DrawEntry
->
m_Flags
=
IS_NEW
;
DrawEntry
->
m_Selected
=
IS_SELECTED
;
DrawEntry
->
m_Selected
=
IS_SELECTED
;
if
(
DrawEntry
->
Pnext
==
NULL
)
if
(
DrawEntry
->
Pnext
==
NULL
)
{
/* Fin de liste trouvee */
{
/* Fin de liste trouvee */
DrawEntry
->
Pnext
=
CurrentLibEntry
->
m_Drawings
;
DrawEntry
->
Pnext
=
CurrentLibEntry
->
m_Drawings
;
CurrentLibEntry
->
m_Drawings
=
LibEntry
->
m_Drawings
;
CurrentLibEntry
->
m_Drawings
=
LibEntry
->
m_Drawings
;
...
@@ -107,39 +112,43 @@ wxString msg;
...
@@ -107,39 +112,43 @@ wxString msg;
}
}
DrawEntry
=
DrawEntry
->
Next
();
DrawEntry
=
DrawEntry
->
Next
();
}
}
SuppressDuplicateDrawItem
(
CurrentLibEntry
);
SuppressDuplicateDrawItem
(
CurrentLibEntry
);
m_CurrentScreen
->
SetModify
();
m_CurrentScreen
->
SetModify
();
// Move (and place ) the new draw items:
// Move (and place ) the new draw items:
HandleBlockBegin
(
DC
,
-
1
,
GetScreen
()
->
m_Curseur
);
HandleBlockBegin
(
DC
,
-
1
,
GetScreen
()
->
m_Curseur
);
HandleBlockEnd
(
DC
);
HandleBlockEnd
(
DC
);
RedrawActiveWindow
(
DC
,
TRUE
);
RedrawActiveWindow
(
DC
,
TRUE
);
}
}
PQFreeFunc
(
Entries
,
(
void
(
*
)(
void
*
))
FreeLibraryEntry
);
PQFreeFunc
(
Entries
,
(
void
(
*
)
(
void
*
)
)
FreeLibraryEntry
);
}
}
/********************************************/
/********************************************/
void
WinEDA_LibeditFrame
::
SaveOneSymbol
(
void
)
void
WinEDA_LibeditFrame
::
SaveOneSymbol
(
void
)
/********************************************/
/********************************************/
/* Save in file the current symbol
/* Save in file the current symbol
file format is like the standard libraries, but there is only one symbol
*
file format is like the standard libraries, but there is only one symbol
Invisible pins are not saved
*
Invisible pins are not saved
*/
*/
{
{
EDA_LibComponentStruct
*
LibEntry
=
CurrentLibEntry
;
EDA_LibComponentStruct
*
LibEntry
=
CurrentLibEntry
;
int
Unit
=
CurrentUnit
,
convert
=
CurrentConvert
;
int
Unit
=
CurrentUnit
,
convert
=
CurrentConvert
;
int
SymbUnit
,
SymbConvert
;
int
SymbUnit
,
SymbConvert
;
LibEDA_BaseStruct
*
DrawEntry
;
LibEDA_BaseStruct
*
DrawEntry
;
wxString
FullFileName
,
mask
;
wxString
FullFileName
,
mask
;
wxString
msg
;
wxString
msg
;
FILE
*
ExportFile
;
FILE
*
ExportFile
;
if
(
LibEntry
->
m_Drawings
==
NULL
)
return
;
if
(
LibEntry
->
m_Drawings
==
NULL
)
return
;
/* Creation du fichier symbole */
/* Creation du fichier symbole */
mask
=
wxT
(
"*"
)
+
g_SymbolExtBuffer
;
mask
=
wxT
(
"*"
)
+
g_SymbolExtBuffer
;
FullFileName
=
EDA_FileSelector
(
_
(
"Export symbol drawings:"
),
FullFileName
=
EDA_FileSelector
(
_
(
"Export symbol drawings:"
),
g_RealLibDirBuffer
,
/* Chemin par defaut */
g_RealLibDirBuffer
,
/* Chemin par defaut */
wxEmptyString
,
/* nom fichier par defaut */
wxEmptyString
,
/* nom fichier par defaut */
g_SymbolExtBuffer
,
/* extension par defaut */
g_SymbolExtBuffer
,
/* extension par defaut */
...
@@ -148,51 +157,53 @@ FILE * ExportFile;
...
@@ -148,51 +157,53 @@ FILE * ExportFile;
wxFD_SAVE
,
wxFD_SAVE
,
TRUE
TRUE
);
);
if
(
FullFileName
.
IsEmpty
()
)
return
;
if
(
FullFileName
.
IsEmpty
()
)
return
;
ExportFile
=
wxFopen
(
FullFileName
,
wxT
(
"wt"
)
);
ExportFile
=
wxFopen
(
FullFileName
,
wxT
(
"wt"
)
);
if
(
ExportFile
==
NULL
)
if
(
ExportFile
==
NULL
)
{
{
msg
.
Printf
(
_
(
"Unable to create <%s>"
),
FullFileName
.
GetData
()
);
msg
.
Printf
(
_
(
"Unable to create <%s>"
),
FullFileName
.
GetData
()
);
DisplayError
(
this
,
msg
);
DisplayError
(
this
,
msg
);
return
;
return
;
}
}
msg
.
Printf
(
_
(
"Save Symbol in [%s]"
),
FullFileName
.
GetData
()
);
msg
.
Printf
(
_
(
"Save Symbol in [%s]"
),
FullFileName
.
GetData
()
);
Affiche_Message
(
msg
);
Affiche_Message
(
msg
);
/* Creation de l'entete de la librairie */
/* Creation de l'entete de la librairie */
char
Line
[
256
];
char
Line
[
256
];
fprintf
(
ExportFile
,
"%s %d.%d %s Date: %s
\n
"
,
LIBFILE_IDENT
,
fprintf
(
ExportFile
,
"%s %d.%d %s Date: %s
\n
"
,
LIBFILE_IDENT
,
LIB_VERSION_MAJOR
,
LIB_VERSION_MINOR
,
LIB_VERSION_MAJOR
,
LIB_VERSION_MINOR
,
"SYMBOL"
,
DateAndTime
(
Line
)
);
"SYMBOL"
,
DateAndTime
(
Line
)
);
/* Creation du commentaire donnant le nom du composant */
/* Creation du commentaire donnant le nom du composant */
fprintf
(
ExportFile
,
"# SYMBOL %s
\n
#
\n
"
,
fprintf
(
ExportFile
,
"# SYMBOL %s
\n
#
\n
"
,
(
const
char
*
)
LibEntry
->
m_Name
.
m_Text
.
GetData
()
);
(
const
char
*
)
LibEntry
->
m_Name
.
m_Text
.
GetData
()
);
/* Generation des lignes utiles */
/* Generation des lignes utiles */
fprintf
(
ExportFile
,
"DEF %s"
,
(
const
char
*
)
LibEntry
->
m_Name
.
m_Text
.
GetData
());
fprintf
(
ExportFile
,
"DEF %s"
,
(
const
char
*
)
LibEntry
->
m_Name
.
m_Text
.
GetData
()
);
if
(
!
LibEntry
->
m_Prefix
.
m_Text
.
IsEmpty
())
if
(
!
LibEntry
->
m_Prefix
.
m_Text
.
IsEmpty
()
)
fprintf
(
ExportFile
,
" %s"
,
(
const
char
*
)
LibEntry
->
m_Prefix
.
m_Text
.
GetData
());
fprintf
(
ExportFile
,
" %s"
,
(
const
char
*
)
LibEntry
->
m_Prefix
.
m_Text
.
GetData
()
);
else
fprintf
(
ExportFile
,
" ~"
);
else
fprintf
(
ExportFile
,
" ~"
);
fprintf
(
ExportFile
,
" %d %d %c %c %d %d %c
\n
"
,
fprintf
(
ExportFile
,
" %d %d %c %c %d %d %c
\n
"
,
0
,
/* unused */
0
,
/* unused */
LibEntry
->
m_TextInside
,
LibEntry
->
m_TextInside
,
LibEntry
->
m_DrawPinNum
?
'Y'
:
'N'
,
LibEntry
->
m_DrawPinNum
?
'Y'
:
'N'
,
LibEntry
->
m_DrawPinName
?
'Y'
:
'N'
,
LibEntry
->
m_DrawPinName
?
'Y'
:
'N'
,
1
,
0
/* unused */
,
'N'
);
1
,
0
/* unused */
,
'N'
);
/* Position / orientation / visibilite des champs */
/* Position / orientation / visibilite des champs */
LibEntry
->
m_Prefix
.
WriteDescr
(
ExportFile
);
LibEntry
->
m_Prefix
.
WriteDescr
(
ExportFile
);
LibEntry
->
m_Name
.
WriteDescr
(
ExportFile
);
LibEntry
->
m_Name
.
WriteDescr
(
ExportFile
);
DrawEntry
=
LibEntry
->
m_Drawings
;
DrawEntry
=
LibEntry
->
m_Drawings
;
if
(
DrawEntry
)
if
(
DrawEntry
)
{
{
fprintf
(
ExportFile
,
"DRAW
\n
"
);
fprintf
(
ExportFile
,
"DRAW
\n
"
);
for
(
;
DrawEntry
!=
NULL
;
DrawEntry
=
DrawEntry
->
Next
()
)
for
(
;
DrawEntry
!=
NULL
;
DrawEntry
=
DrawEntry
->
Next
()
)
{
{
/* Elimination des elements non relatifs a l'unite */
/* Elimination des elements non relatifs a l'unite */
if
(
Unit
&&
DrawEntry
->
m_Unit
&&
(
DrawEntry
->
m_Unit
!=
Unit
)
)
if
(
Unit
&&
DrawEntry
->
m_Unit
&&
(
DrawEntry
->
m_Unit
!=
Unit
)
)
...
@@ -201,178 +212,211 @@ FILE * ExportFile;
...
@@ -201,178 +212,211 @@ FILE * ExportFile;
continue
;
continue
;
/* .Unit , . Convert est laisse a 0 ou mis a 1 */
/* .Unit , . Convert est laisse a 0 ou mis a 1 */
SymbUnit
=
DrawEntry
->
m_Unit
;
if
(
SymbUnit
>
1
)
SymbUnit
=
1
;
SymbUnit
=
DrawEntry
->
m_Unit
;
if
(
SymbUnit
>
1
)
SymbUnit
=
1
;
SymbConvert
=
DrawEntry
->
m_Convert
;
SymbConvert
=
DrawEntry
->
m_Convert
;
if
(
SymbConvert
>
1
)
SymbConvert
=
1
;
if
(
SymbConvert
>
1
)
switch
(
DrawEntry
->
m_StructType
)
SymbConvert
=
1
;
switch
(
DrawEntry
->
m_StructType
)
{
{
case
COMPONENT_ARC_DRAW_TYPE
:
case
COMPONENT_ARC_DRAW_TYPE
:
#define DRAWSTRUCT ((LibDrawArc *) DrawEntry
)
#define DRAWSTRUCT ( (LibDrawArc*) DrawEntry
)
DRAWSTRUCT
->
WriteDescr
(
ExportFile
);
DRAWSTRUCT
->
WriteDescr
(
ExportFile
);
break
;
break
;
case
COMPONENT_CIRCLE_DRAW_TYPE
:
case
COMPONENT_CIRCLE_DRAW_TYPE
:
#undef DRAWSTRUCT
#undef DRAWSTRUCT
#define DRAWSTRUCT ((LibDrawCircle *) DrawEntry
)
#define DRAWSTRUCT ( (LibDrawCircle*) DrawEntry
)
DRAWSTRUCT
->
WriteDescr
(
ExportFile
);
DRAWSTRUCT
->
WriteDescr
(
ExportFile
);
break
;
break
;
case
COMPONENT_GRAPHIC_TEXT_DRAW_TYPE
:
case
COMPONENT_GRAPHIC_TEXT_DRAW_TYPE
:
#undef DRAWSTRUCT
#undef DRAWSTRUCT
#define DRAWSTRUCT ((LibDrawText *) DrawEntry
)
#define DRAWSTRUCT ( (LibDrawText*) DrawEntry
)
DRAWSTRUCT
->
WriteDescr
(
ExportFile
);
DRAWSTRUCT
->
WriteDescr
(
ExportFile
);
break
;
break
;
case
COMPONENT_RECT_DRAW_TYPE
:
case
COMPONENT_RECT_DRAW_TYPE
:
#undef DRAWSTRUCT
#undef DRAWSTRUCT
#define DRAWSTRUCT ((LibDrawSquare *) DrawEntry
)
#define DRAWSTRUCT ( (LibDrawSquare*) DrawEntry
)
DRAWSTRUCT
->
WriteDescr
(
ExportFile
);
DRAWSTRUCT
->
WriteDescr
(
ExportFile
);
break
;
break
;
case
COMPONENT_PIN_DRAW_TYPE
:
case
COMPONENT_PIN_DRAW_TYPE
:
#undef DRAWSTRUCT
#undef DRAWSTRUCT
#define DRAWSTRUCT ((LibDrawPin *) DrawEntry)
#define DRAWSTRUCT ( (LibDrawPin*) DrawEntry )
if
(
DRAWSTRUCT
->
m_Attributs
&
PINNOTDRAW
)
break
;
if
(
DRAWSTRUCT
->
m_Attributs
&
PINNOTDRAW
)
break
;
DRAWSTRUCT
->
WriteDescr
(
ExportFile
);
DRAWSTRUCT
->
WriteDescr
(
ExportFile
);
break
;
break
;
case
COMPONENT_POLYLINE_DRAW_TYPE
:
case
COMPONENT_POLYLINE_DRAW_TYPE
:
#undef DRAWSTRUCT
#undef DRAWSTRUCT
#define DRAWSTRUCT ((LibDrawPolyline *) DrawEntry
)
#define DRAWSTRUCT ( (LibDrawPolyline*) DrawEntry
)
DRAWSTRUCT
->
WriteDescr
(
ExportFile
);
DRAWSTRUCT
->
WriteDescr
(
ExportFile
);
break
;
break
;
default
:
;
}
}
}
}
fprintf
(
ExportFile
,
"ENDDRAW
\n
"
);
fprintf
(
ExportFile
,
"ENDDRAW
\n
"
);
}
}
fprintf
(
ExportFile
,
"ENDDEF
\n
"
);
fprintf
(
ExportFile
,
"ENDDEF
\n
"
);
fclose
(
ExportFile
);
fclose
(
ExportFile
);
}
}
/*****************************************************************/
/*****************************************************************/
void
SuppressDuplicateDrawItem
(
EDA_LibComponentStruct
*
LibEntry
)
void
SuppressDuplicateDrawItem
(
EDA_LibComponentStruct
*
LibEntry
)
/*****************************************************************/
/*****************************************************************/
/* Delete redundant graphic items.
/* Delete redundant graphic items.
Useful after loading asymbole from a file symbol, because some graphic items
*
Useful after loading asymbole from a file symbol, because some graphic items
can be duplicated.
*
can be duplicated.
*/
*/
{
{
LibEDA_BaseStruct
*
DEntryRef
,
*
DEntryCompare
;
LibEDA_BaseStruct
*
DEntryRef
,
*
DEntryCompare
;
bool
deleted
;
bool
deleted
;
wxDC
*
DC
=
NULL
;
wxDC
*
DC
=
NULL
;
DEntryRef
=
LibEntry
->
m_Drawings
;
DEntryRef
=
LibEntry
->
m_Drawings
;
while
(
DEntryRef
)
while
(
DEntryRef
)
{
{
if
(
DEntryRef
->
Pnext
==
NULL
)
return
;
if
(
DEntryRef
->
Pnext
==
NULL
)
return
;
DEntryCompare
=
DEntryRef
->
Next
();
DEntryCompare
=
DEntryRef
->
Next
();
if
(
DEntryCompare
==
NULL
)
return
;
if
(
DEntryCompare
==
NULL
)
return
;
deleted
=
0
;
deleted
=
0
;
while
(
DEntryCompare
)
while
(
DEntryCompare
)
{
{
if
(
CompareSymbols
(
DEntryRef
,
DEntryCompare
)
==
TRUE
)
if
(
CompareSymbols
(
DEntryRef
,
DEntryCompare
)
==
TRUE
)
{
{
DeleteOneLibraryDrawStruct
(
NULL
,
DC
,
LibEntry
,
DEntryRef
,
1
);
DeleteOneLibraryDrawStruct
(
NULL
,
DC
,
LibEntry
,
DEntryRef
,
1
);
deleted
=
TRUE
;
deleted
=
TRUE
;
break
;
break
;
}
}
DEntryCompare
=
DEntryCompare
->
Next
();
DEntryCompare
=
DEntryCompare
->
Next
();
}
}
if
(
!
deleted
)
DEntryRef
=
DEntryRef
->
Next
();
else
DEntryRef
=
LibEntry
->
m_Drawings
;
if
(
!
deleted
)
DEntryRef
=
DEntryRef
->
Next
();
else
DEntryRef
=
LibEntry
->
m_Drawings
;
}
}
}
}
/********************************************************************/
/********************************************************************/
static
bool
CompareSymbols
(
LibEDA_BaseStruct
*
DEntryRef
,
static
bool
CompareSymbols
(
LibEDA_BaseStruct
*
DEntryRef
,
LibEDA_BaseStruct
*
DEntryCompare
)
LibEDA_BaseStruct
*
DEntryCompare
)
/********************************************************************/
/********************************************************************/
/* Compare 2 graphic items (arc, lines ...).
/* Compare 2 graphic items (arc, lines ...).
return FALSE si different
*
return FALSE si different
TRUE si they are identical, and therefore redundant
*
TRUE si they are identical, and therefore redundant
*/
*/
{
{
int
ii
;
int
ii
;
int
*
ptref
,
*
ptcomp
;
int
*
ptref
,
*
ptcomp
;
/* Comparaison des proprietes generales */
/* Comparaison des proprietes generales */
if
(
DEntryRef
->
m_StructType
!=
DEntryCompare
->
m_StructType
)
return
(
FALSE
);
if
(
DEntryRef
->
m_StructType
!=
DEntryCompare
->
m_StructType
)
if
(
DEntryRef
->
m_Unit
!=
DEntryCompare
->
m_Unit
)
return
(
FALSE
);
return
FALSE
;
if
(
DEntryRef
->
m_Convert
!=
DEntryCompare
->
m_Convert
)
return
(
FALSE
);
if
(
DEntryRef
->
m_Unit
!=
DEntryCompare
->
m_Unit
)
return
FALSE
;
switch
(
DEntryRef
->
m_StructType
)
if
(
DEntryRef
->
m_Convert
!=
DEntryCompare
->
m_Convert
)
return
FALSE
;
switch
(
DEntryRef
->
m_StructType
)
{
{
case
COMPONENT_ARC_DRAW_TYPE
:
case
COMPONENT_ARC_DRAW_TYPE
:
#undef REFSTRUCT
#undef REFSTRUCT
#undef CMPSTRUCT
#undef CMPSTRUCT
#define REFSTRUCT ((LibDrawArc *) DEntryRef)
#define REFSTRUCT ( (LibDrawArc*) DEntryRef )
#define CMPSTRUCT ((LibDrawArc *) DEntryCompare)
#define CMPSTRUCT ( (LibDrawArc*) DEntryCompare )
if
(
REFSTRUCT
->
m_Pos
.
x
!=
CMPSTRUCT
->
m_Pos
.
x
)
return
(
FALSE
);
if
(
REFSTRUCT
->
m_Pos
.
x
!=
CMPSTRUCT
->
m_Pos
.
x
)
if
(
REFSTRUCT
->
m_Pos
.
y
!=
CMPSTRUCT
->
m_Pos
.
y
)
return
(
FALSE
);
return
FALSE
;
if
(
REFSTRUCT
->
t1
!=
CMPSTRUCT
->
t1
)
return
(
FALSE
);
if
(
REFSTRUCT
->
m_Pos
.
y
!=
CMPSTRUCT
->
m_Pos
.
y
)
if
(
REFSTRUCT
->
t2
!=
CMPSTRUCT
->
t2
)
return
(
FALSE
);
return
FALSE
;
if
(
REFSTRUCT
->
t1
!=
CMPSTRUCT
->
t1
)
return
FALSE
;
if
(
REFSTRUCT
->
t2
!=
CMPSTRUCT
->
t2
)
return
FALSE
;
break
;
break
;
case
COMPONENT_CIRCLE_DRAW_TYPE
:
case
COMPONENT_CIRCLE_DRAW_TYPE
:
#undef REFSTRUCT
#undef REFSTRUCT
#undef CMPSTRUCT
#undef CMPSTRUCT
#define REFSTRUCT ((LibDrawCircle *) DEntryRef)
#define REFSTRUCT ( (LibDrawCircle*) DEntryRef )
#define CMPSTRUCT ((LibDrawCircle *) DEntryCompare)
#define CMPSTRUCT ( (LibDrawCircle*) DEntryCompare )
if
(
REFSTRUCT
->
m_Pos
.
x
!=
CMPSTRUCT
->
m_Pos
.
x
)
return
(
FALSE
);
if
(
REFSTRUCT
->
m_Pos
.
x
!=
CMPSTRUCT
->
m_Pos
.
x
)
if
(
REFSTRUCT
->
m_Pos
.
y
!=
CMPSTRUCT
->
m_Pos
.
y
)
return
(
FALSE
);
return
FALSE
;
if
(
REFSTRUCT
->
m_Rayon
!=
CMPSTRUCT
->
m_Rayon
)
return
(
FALSE
);
if
(
REFSTRUCT
->
m_Pos
.
y
!=
CMPSTRUCT
->
m_Pos
.
y
)
return
FALSE
;
if
(
REFSTRUCT
->
m_Rayon
!=
CMPSTRUCT
->
m_Rayon
)
return
FALSE
;
break
;
break
;
case
COMPONENT_GRAPHIC_TEXT_DRAW_TYPE
:
case
COMPONENT_GRAPHIC_TEXT_DRAW_TYPE
:
#undef REFSTRUCT
#undef REFSTRUCT
#undef CMPSTRUCT
#undef CMPSTRUCT
#define REFSTRUCT ((LibDrawText *) DEntryRef)
#define REFSTRUCT ( (LibDrawText*) DEntryRef )
#define CMPSTRUCT ((LibDrawText *) DEntryCompare)
#define CMPSTRUCT ( (LibDrawText*) DEntryCompare )
if
(
REFSTRUCT
->
m_Pos
!=
CMPSTRUCT
->
m_Pos
)
return
(
FALSE
);
if
(
REFSTRUCT
->
m_Pos
!=
CMPSTRUCT
->
m_Pos
)
if
(
REFSTRUCT
->
m_Size
!=
CMPSTRUCT
->
m_Size
)
return
(
FALSE
);
return
FALSE
;
if
(
REFSTRUCT
->
m_Size
!=
CMPSTRUCT
->
m_Size
)
return
FALSE
;
if
(
REFSTRUCT
->
m_Text
!=
CMPSTRUCT
->
m_Text
)
if
(
REFSTRUCT
->
m_Text
!=
CMPSTRUCT
->
m_Text
)
return
(
FALSE
)
;
return
FALSE
;
break
;
break
;
case
COMPONENT_RECT_DRAW_TYPE
:
case
COMPONENT_RECT_DRAW_TYPE
:
#undef REFSTRUCT
#undef REFSTRUCT
#undef CMPSTRUCT
#undef CMPSTRUCT
#define REFSTRUCT ((LibDrawSquare *) DEntryRef)
#define REFSTRUCT ( (LibDrawSquare*) DEntryRef )
#define CMPSTRUCT ((LibDrawSquare *) DEntryCompare)
#define CMPSTRUCT ( (LibDrawSquare*) DEntryCompare )
if
(
REFSTRUCT
->
m_Pos
!=
CMPSTRUCT
->
m_Pos
)
return
(
FALSE
);
if
(
REFSTRUCT
->
m_Pos
!=
CMPSTRUCT
->
m_Pos
)
if
(
REFSTRUCT
->
m_End
!=
CMPSTRUCT
->
m_End
)
return
(
FALSE
);
return
FALSE
;
if
(
REFSTRUCT
->
m_End
!=
CMPSTRUCT
->
m_End
)
return
FALSE
;
break
;
break
;
case
COMPONENT_PIN_DRAW_TYPE
:
case
COMPONENT_PIN_DRAW_TYPE
:
#undef REFSTRUCT
#undef REFSTRUCT
#undef CMPSTRUCT
#undef CMPSTRUCT
#define REFSTRUCT ((LibDrawPin *) DEntryRef)
#define REFSTRUCT ( (LibDrawPin*) DEntryRef )
#define CMPSTRUCT ((LibDrawPin *) DEntryCompare)
#define CMPSTRUCT ( (LibDrawPin*) DEntryCompare )
if
(
REFSTRUCT
->
m_Pos
!=
CMPSTRUCT
->
m_Pos
)
return
(
FALSE
);
if
(
REFSTRUCT
->
m_Pos
!=
CMPSTRUCT
->
m_Pos
)
return
FALSE
;
break
;
break
;
case
COMPONENT_POLYLINE_DRAW_TYPE
:
case
COMPONENT_POLYLINE_DRAW_TYPE
:
#undef REFSTRUCT
#undef REFSTRUCT
#undef CMPSTRUCT
#undef CMPSTRUCT
#define REFSTRUCT ((LibDrawPolyline *) DEntryRef)
#define REFSTRUCT ( (LibDrawPolyline*) DEntryRef )
#define CMPSTRUCT ((LibDrawPolyline *) DEntryCompare)
#define CMPSTRUCT ( (LibDrawPolyline*) DEntryCompare )
if
(
REFSTRUCT
->
n
!=
CMPSTRUCT
->
n
)
return
(
FALSE
);
if
(
REFSTRUCT
->
n
!=
CMPSTRUCT
->
n
)
return
FALSE
;
ptref
=
REFSTRUCT
->
PolyList
;
ptref
=
REFSTRUCT
->
PolyList
;
ptcomp
=
CMPSTRUCT
->
PolyList
;
ptcomp
=
CMPSTRUCT
->
PolyList
;
for
(
ii
=
2
*
REFSTRUCT
->
n
;
ii
>
0
;
ii
--
)
for
(
ii
=
2
*
REFSTRUCT
->
n
;
ii
>
0
;
ii
--
)
{
{
if
(
*
ptref
!=
*
ptcomp
)
return
(
FALSE
);
if
(
*
ptref
!=
*
ptcomp
)
return
FALSE
;
ptref
++
;
ptcomp
++
;
ptref
++
;
ptcomp
++
;
}
}
break
;
break
;
default
:
;
}
}
return
(
TRUE
);
}
return
TRUE
;
}
/***************************************************************************/
/***************************************************************************/
...
@@ -383,18 +427,19 @@ int * ptref, *ptcomp;
...
@@ -383,18 +427,19 @@ int * ptref, *ptcomp;
/* d'ancrage ( coord 0,0 ). */
/* d'ancrage ( coord 0,0 ). */
/***************************************************************************/
/***************************************************************************/
void
WinEDA_LibeditFrame
::
PlaceAncre
(
void
)
void
WinEDA_LibeditFrame
::
PlaceAncre
(
void
)
{
{
int
ii
,
*
ptsegm
;
int
ii
,
*
ptsegm
;
int
dx
,
dy
;
/* Offsets de deplacement */
int
dx
,
dy
;
/* Offsets de deplacement */
EDA_LibComponentStruct
*
LibEntry
;
EDA_LibComponentStruct
*
LibEntry
;
LibEDA_BaseStruct
*
DrawEntry
;
LibEDA_BaseStruct
*
DrawEntry
;
dx
=
-
m_CurrentScreen
->
m_Curseur
.
x
;
dx
=
-
m_CurrentScreen
->
m_Curseur
.
x
;
dy
=
m_CurrentScreen
->
m_Curseur
.
y
;
dy
=
m_CurrentScreen
->
m_Curseur
.
y
;
LibEntry
=
CurrentLibEntry
;
LibEntry
=
CurrentLibEntry
;
if
(
LibEntry
==
NULL
)
return
;
if
(
LibEntry
==
NULL
)
return
;
m_CurrentScreen
->
SetModify
();
m_CurrentScreen
->
SetModify
();
...
@@ -402,13 +447,13 @@ LibEDA_BaseStruct * DrawEntry;
...
@@ -402,13 +447,13 @@ LibEDA_BaseStruct * DrawEntry;
LibEntry
->
m_Prefix
.
m_Pos
.
x
+=
dx
;
LibEntry
->
m_Prefix
.
m_Pos
.
y
+=
dy
;
LibEntry
->
m_Prefix
.
m_Pos
.
x
+=
dx
;
LibEntry
->
m_Prefix
.
m_Pos
.
y
+=
dy
;
DrawEntry
=
LibEntry
->
m_Drawings
;
DrawEntry
=
LibEntry
->
m_Drawings
;
while
(
DrawEntry
)
while
(
DrawEntry
)
{
{
switch
(
DrawEntry
->
m_StructType
)
switch
(
DrawEntry
->
m_StructType
)
{
{
case
COMPONENT_ARC_DRAW_TYPE
:
case
COMPONENT_ARC_DRAW_TYPE
:
#undef STRUCT
#undef STRUCT
#define STRUCT ((LibDrawArc *) DrawEntry
)
#define STRUCT ( (LibDrawArc*) DrawEntry
)
STRUCT
->
m_Pos
.
x
+=
dx
;
STRUCT
->
m_Pos
.
x
+=
dx
;
STRUCT
->
m_Pos
.
y
+=
dy
;
STRUCT
->
m_Pos
.
y
+=
dy
;
STRUCT
->
m_ArcStart
.
x
+=
dx
;
STRUCT
->
m_ArcStart
.
x
+=
dx
;
...
@@ -419,21 +464,21 @@ LibEDA_BaseStruct * DrawEntry;
...
@@ -419,21 +464,21 @@ LibEDA_BaseStruct * DrawEntry;
case
COMPONENT_CIRCLE_DRAW_TYPE
:
case
COMPONENT_CIRCLE_DRAW_TYPE
:
#undef STRUCT
#undef STRUCT
#define STRUCT ((LibDrawCircle *) DrawEntry
)
#define STRUCT ( (LibDrawCircle*) DrawEntry
)
STRUCT
->
m_Pos
.
x
+=
dx
;
STRUCT
->
m_Pos
.
x
+=
dx
;
STRUCT
->
m_Pos
.
y
+=
dy
;
STRUCT
->
m_Pos
.
y
+=
dy
;
break
;
break
;
case
COMPONENT_GRAPHIC_TEXT_DRAW_TYPE
:
case
COMPONENT_GRAPHIC_TEXT_DRAW_TYPE
:
#undef STRUCT
#undef STRUCT
#define STRUCT ((LibDrawText *) DrawEntry
)
#define STRUCT ( (LibDrawText*) DrawEntry
)
STRUCT
->
m_Pos
.
x
+=
dx
;
STRUCT
->
m_Pos
.
x
+=
dx
;
STRUCT
->
m_Pos
.
y
+=
dy
;
STRUCT
->
m_Pos
.
y
+=
dy
;
break
;
break
;
case
COMPONENT_RECT_DRAW_TYPE
:
case
COMPONENT_RECT_DRAW_TYPE
:
#undef STRUCT
#undef STRUCT
#define STRUCT ((LibDrawSquare *) DrawEntry
)
#define STRUCT ( (LibDrawSquare*) DrawEntry
)
STRUCT
->
m_Pos
.
x
+=
dx
;
STRUCT
->
m_Pos
.
x
+=
dx
;
STRUCT
->
m_Pos
.
y
+=
dy
;
STRUCT
->
m_Pos
.
y
+=
dy
;
STRUCT
->
m_End
.
x
+=
dx
;
STRUCT
->
m_End
.
x
+=
dx
;
...
@@ -442,27 +487,30 @@ LibEDA_BaseStruct * DrawEntry;
...
@@ -442,27 +487,30 @@ LibEDA_BaseStruct * DrawEntry;
case
COMPONENT_PIN_DRAW_TYPE
:
case
COMPONENT_PIN_DRAW_TYPE
:
#undef STRUCT
#undef STRUCT
#define STRUCT ((LibDrawPin *) DrawEntry
)
#define STRUCT ( (LibDrawPin*) DrawEntry
)
STRUCT
->
m_Pos
.
x
+=
dx
;
STRUCT
->
m_Pos
.
x
+=
dx
;
STRUCT
->
m_Pos
.
y
+=
dy
;
STRUCT
->
m_Pos
.
y
+=
dy
;
break
;
break
;
case
COMPONENT_POLYLINE_DRAW_TYPE
:
case
COMPONENT_POLYLINE_DRAW_TYPE
:
#undef STRUCT
#undef STRUCT
#define STRUCT ((LibDrawPolyline *) DrawEntry
)
#define STRUCT ( (LibDrawPolyline*) DrawEntry
)
ptsegm
=
STRUCT
->
PolyList
;
ptsegm
=
STRUCT
->
PolyList
;
for
(
ii
=
STRUCT
->
n
;
ii
>
0
;
ii
--
)
for
(
ii
=
STRUCT
->
n
;
ii
>
0
;
ii
--
)
{
{
*
ptsegm
+=
dx
;
ptsegm
++
;
*
ptsegm
+=
dx
;
ptsegm
++
;
*
ptsegm
+=
dy
;
ptsegm
++
;
*
ptsegm
+=
dy
;
ptsegm
++
;
}
}
break
;
break
;
default
:
;
}
}
DrawEntry
=
DrawEntry
->
Next
();
DrawEntry
=
DrawEntry
->
Next
();
}
}
/* Redraw the symbol */
/* Redraw the symbol */
m_CurrentScreen
->
m_Curseur
.
x
=
m_CurrentScreen
->
m_Curseur
.
y
=
0
;
m_CurrentScreen
->
m_Curseur
.
x
=
m_CurrentScreen
->
m_Curseur
.
y
=
0
;
Recadre_Trace
(
TRUE
);
Recadre_Trace
(
TRUE
);
m_CurrentScreen
->
SetRefreshReq
();
m_CurrentScreen
->
SetRefreshReq
();
}
}
include/base_struct.h
View file @
f3c324d5
...
@@ -14,7 +14,9 @@ extern std::ostream& operator<<( std::ostream& out, const wxPoint& pt );
...
@@ -14,7 +14,9 @@ extern std::ostream& operator<<( std::ostream& out, const wxPoint& pt );
/* Id for class identification, at run time */
/* Id for class identification, at run time */
enum
DrawStructureType
{
enum
KICAD_T
{
NOT_USED
=
-
1
,
// the 3d code uses this value
EOT
=
0
,
// search types array terminator (End Of Types)
EOT
=
0
,
// search types array terminator (End Of Types)
...
@@ -80,7 +82,6 @@ enum SEARCH_RESULT {
...
@@ -80,7 +82,6 @@ enum SEARCH_RESULT {
SEARCH_CONTINUE
SEARCH_CONTINUE
};
};
typedef
DrawStructureType
KICAD_T
;
// shorter name
class
EDA_BaseStruct
;
class
EDA_BaseStruct
;
class
WinEDA_DrawFrame
;
class
WinEDA_DrawFrame
;
...
@@ -126,7 +127,7 @@ public:
...
@@ -126,7 +127,7 @@ public:
class
EDA_BaseStruct
/* Basic class, not directly used */
class
EDA_BaseStruct
/* Basic class, not directly used */
{
{
public
:
public
:
int
m_StructType
;
/* Struct ident for run time identification */
KICAD_T
m_StructType
;
/* Struct ident for run time identification */
EDA_BaseStruct
*
Pnext
;
/* Linked list: Link (next struct) */
EDA_BaseStruct
*
Pnext
;
/* Linked list: Link (next struct) */
EDA_BaseStruct
*
Pback
;
/* Linked list: Link (previous struct) */
EDA_BaseStruct
*
Pback
;
/* Linked list: Link (previous struct) */
EDA_BaseStruct
*
m_Parent
;
/* Linked list: Link (parent struct) */
EDA_BaseStruct
*
m_Parent
;
/* Linked list: Link (parent struct) */
...
@@ -163,11 +164,11 @@ private:
...
@@ -163,11 +164,11 @@ private:
public
:
public
:
EDA_BaseStruct
(
EDA_BaseStruct
*
parent
,
int
idType
);
EDA_BaseStruct
(
EDA_BaseStruct
*
parent
,
KICAD_T
idType
);
EDA_BaseStruct
(
int
struct_type
);
EDA_BaseStruct
(
KICAD_T
struct_type
);
virtual
~
EDA_BaseStruct
()
{
};
virtual
~
EDA_BaseStruct
()
{
};
EDA_BaseStruct
*
Next
(
void
)
{
return
Pnext
;
}
EDA_BaseStruct
*
Next
(
)
{
return
Pnext
;
}
/* Gestion de l'etat (status) de la structure (active, deleted..) */
/* Gestion de l'etat (status) de la structure (active, deleted..) */
int
GetState
(
int
type
);
int
GetState
(
int
type
);
...
@@ -381,7 +382,7 @@ protected:
...
@@ -381,7 +382,7 @@ protected:
public
:
public
:
BOARD_ITEM
(
BOARD_ITEM
*
StructFather
,
DrawStructureType
idtype
)
:
BOARD_ITEM
(
BOARD_ITEM
*
StructFather
,
KICAD_T
idtype
)
:
EDA_BaseStruct
(
StructFather
,
idtype
),
EDA_BaseStruct
(
StructFather
,
idtype
),
m_Layer
(
0
)
m_Layer
(
0
)
{
{
...
@@ -450,22 +451,6 @@ public:
...
@@ -450,22 +451,6 @@ public:
};
};
/* Base class for building items like lines, which have 1 start point and 1 end point.
* Arc and circles can use this class.
*/
class
EDA_BaseLineStruct
:
public
EDA_BaseStruct
{
public
:
int
m_Layer
;
// Layer number
int
m_Width
;
// 0 = line, > 0 = tracks, bus ...
wxPoint
m_Start
;
// Line start point
wxPoint
m_End
;
// Line end point
public
:
EDA_BaseLineStruct
(
EDA_BaseStruct
*
StructFather
,
DrawStructureType
idtype
);
};
/**************************/
/**************************/
/* class DrawPickedStruct */
/* class DrawPickedStruct */
/**************************/
/**************************/
...
...
include/pcbstruct.h
View file @
f3c324d5
...
@@ -358,7 +358,7 @@ public:
...
@@ -358,7 +358,7 @@ public:
int
m_Angle
;
// pour les arcs: "longueur" de l'arc en 1/10 deg
int
m_Angle
;
// pour les arcs: "longueur" de l'arc en 1/10 deg
public
:
public
:
DRAWSEGMENT
(
BOARD_ITEM
*
StructFather
,
DrawStructureType
idtype
=
TYPEDRAWSEGMENT
);
DRAWSEGMENT
(
BOARD_ITEM
*
StructFather
,
KICAD_T
idtype
=
TYPEDRAWSEGMENT
);
~
DRAWSEGMENT
(
void
);
~
DRAWSEGMENT
(
void
);
// Read/write data
// Read/write data
...
...
include/wxstruct.h
View file @
f3c324d5
...
@@ -501,7 +501,7 @@ public:
...
@@ -501,7 +501,7 @@ public:
virtual
void
SwitchLayer
(
wxDC
*
DC
,
int
layer
);
virtual
void
SwitchLayer
(
wxDC
*
DC
,
int
layer
);
// divers
// divers
void
AddHistory
(
int
value
,
DrawStructureType
type
);
// Add value in data list history
void
AddHistory
(
int
value
,
KICAD_T
type
);
// Add value in data list history
void
InstallGridFrame
(
const
wxPoint
&
pos
);
void
InstallGridFrame
(
const
wxPoint
&
pos
);
};
};
...
...
pcbnew/block_module_editor.cpp
View file @
f3c324d5
...
@@ -502,6 +502,9 @@ void MoveMarkedItems( MODULE* module, wxPoint offset )
...
@@ -502,6 +502,9 @@ void MoveMarkedItems( MODULE* module, wxPoint offset )
(
(
EDGE_MODULE
*
)
item
)
->
m_End0
.
x
+=
offset
.
x
;
(
(
EDGE_MODULE
*
)
item
)
->
m_End0
.
x
+=
offset
.
x
;
(
(
EDGE_MODULE
*
)
item
)
->
m_End0
.
y
+=
offset
.
y
;
(
(
EDGE_MODULE
*
)
item
)
->
m_End0
.
y
+=
offset
.
y
;
break
;
break
;
default
:
;
}
}
item
->
m_Flags
=
item
->
m_Selected
=
0
;
item
->
m_Flags
=
item
->
m_Selected
=
0
;
...
@@ -588,6 +591,9 @@ void MirrorMarkedItems( MODULE* module, wxPoint offset )
...
@@ -588,6 +591,9 @@ void MirrorMarkedItems( MODULE* module, wxPoint offset )
SETMIRROR
(
(
(
TEXTE_MODULE
*
)
item
)
->
m_Pos
.
x
);
SETMIRROR
(
(
(
TEXTE_MODULE
*
)
item
)
->
m_Pos
.
x
);
(
(
TEXTE_MODULE
*
)
item
)
->
m_Pos0
.
x
=
(
(
TEXTE_MODULE
*
)
item
)
->
m_Pos
.
x
;
(
(
TEXTE_MODULE
*
)
item
)
->
m_Pos0
.
x
=
(
(
TEXTE_MODULE
*
)
item
)
->
m_Pos
.
x
;
break
;
break
;
default
:
;
}
}
item
->
m_Flags
=
item
->
m_Selected
=
0
;
item
->
m_Flags
=
item
->
m_Selected
=
0
;
...
@@ -639,6 +645,9 @@ void RotateMarkedItems( MODULE* module, wxPoint offset )
...
@@ -639,6 +645,9 @@ void RotateMarkedItems( MODULE* module, wxPoint offset )
(
(
TEXTE_MODULE
*
)
item
)
->
m_Pos0
=
(
(
TEXTE_MODULE
*
)
item
)
->
m_Pos
;
(
(
TEXTE_MODULE
*
)
item
)
->
m_Pos0
=
(
(
TEXTE_MODULE
*
)
item
)
->
m_Pos
;
(
(
TEXTE_MODULE
*
)
item
)
->
m_Orient
+=
900
;
(
(
TEXTE_MODULE
*
)
item
)
->
m_Orient
+=
900
;
break
;
break
;
default
:
;
}
}
item
->
m_Flags
=
item
->
m_Selected
=
0
;
item
->
m_Flags
=
item
->
m_Selected
=
0
;
...
...
pcbnew/class_edge_mod.cpp
View file @
f3c324d5
...
@@ -31,6 +31,7 @@
...
@@ -31,6 +31,7 @@
EDGE_MODULE
::
EDGE_MODULE
(
MODULE
*
parent
)
:
EDGE_MODULE
::
EDGE_MODULE
(
MODULE
*
parent
)
:
BOARD_ITEM
(
parent
,
TYPEEDGEMODULE
)
BOARD_ITEM
(
parent
,
TYPEEDGEMODULE
)
{
{
m_Width
=
0
;
m_Shape
=
S_SEGMENT
;
m_Shape
=
S_SEGMENT
;
m_Angle
=
0
;
m_Angle
=
0
;
m_Width
=
120
;
m_Width
=
120
;
...
...
pcbnew/class_track.cpp
View file @
f3c324d5
...
@@ -22,9 +22,10 @@
...
@@ -22,9 +22,10 @@
/* Constructeur des classes type pistes, vias et zones */
/* Constructeur des classes type pistes, vias et zones */
TRACK
::
TRACK
(
BOARD_ITEM
*
StructFather
,
DrawStructureType
idtype
)
:
TRACK
::
TRACK
(
BOARD_ITEM
*
StructFather
,
KICAD_T
idtype
)
:
BOARD_ITEM
(
StructFather
,
idtype
)
BOARD_ITEM
(
StructFather
,
idtype
)
{
{
m_Width
=
0
;
m_Shape
=
S_SEGMENT
;
m_Shape
=
S_SEGMENT
;
start
=
end
=
NULL
;
start
=
end
=
NULL
;
m_NetCode
=
0
;
m_NetCode
=
0
;
...
...
pcbnew/class_track.h
View file @
f3c324d5
...
@@ -40,7 +40,7 @@ public:
...
@@ -40,7 +40,7 @@ public:
int
m_Param
;
// Auxiliary variable ( used in some computations )
int
m_Param
;
// Auxiliary variable ( used in some computations )
public
:
public
:
TRACK
(
BOARD_ITEM
*
StructFather
,
DrawStructureType
idtype
=
TYPETRACK
);
TRACK
(
BOARD_ITEM
*
StructFather
,
KICAD_T
idtype
=
TYPETRACK
);
TRACK
(
const
TRACK
&
track
);
TRACK
(
const
TRACK
&
track
);
TRACK
*
Next
()
{
return
(
TRACK
*
)
Pnext
;
}
TRACK
*
Next
()
{
return
(
TRACK
*
)
Pnext
;
}
...
...
pcbnew/classpcb.cpp
View file @
f3c324d5
...
@@ -52,10 +52,10 @@ EDGE_ZONE:: ~EDGE_ZONE( void )
...
@@ -52,10 +52,10 @@ EDGE_ZONE:: ~EDGE_ZONE( void )
/**********************/
/**********************/
/* Classe DRAWSEGMENT: constructeur */
/* Classe DRAWSEGMENT: constructeur */
DRAWSEGMENT
::
DRAWSEGMENT
(
BOARD_ITEM
*
StructFather
,
DrawStructureType
idtype
)
:
DRAWSEGMENT
::
DRAWSEGMENT
(
BOARD_ITEM
*
StructFather
,
KICAD_T
idtype
)
:
BOARD_ITEM
(
StructFather
,
idtype
)
BOARD_ITEM
(
StructFather
,
idtype
)
{
{
m_Flags
=
m_Shape
=
m_Type
=
m_Angle
=
0
;
m_
Width
=
m_
Flags
=
m_Shape
=
m_Type
=
m_Angle
=
0
;
}
}
...
...
pcbnew/classtrc.cpp
View file @
f3c324d5
...
@@ -19,7 +19,7 @@
...
@@ -19,7 +19,7 @@
/* Constructeur des classes type pistes, vias et zones */
/* Constructeur des classes type pistes, vias et zones */
TRACK
::
TRACK
(
EDA_BaseStruct
*
StructFather
,
DrawStructureType
idtype
)
:
TRACK
::
TRACK
(
EDA_BaseStruct
*
StructFather
,
KICAD_T
idtype
)
:
SEGDRAW_Struct
(
StructFather
,
idtype
)
SEGDRAW_Struct
(
StructFather
,
idtype
)
{
{
m_Shape
=
S_SEGMENT
;
m_Shape
=
S_SEGMENT
;
...
...
pcbnew/dialog_track_options.cpp
View file @
f3c324d5
...
@@ -281,7 +281,7 @@ void WinEDA_PcbTracksDialog::AcceptPcbOptions(wxCommandEvent& event)
...
@@ -281,7 +281,7 @@ void WinEDA_PcbTracksDialog::AcceptPcbOptions(wxCommandEvent& event)
/*********************************************************************/
/*********************************************************************/
void
WinEDA_BasePcbFrame
::
AddHistory
(
int
value
,
DrawStructureType
type
)
void
WinEDA_BasePcbFrame
::
AddHistory
(
int
value
,
KICAD_T
type
)
/**********************************************************************/
/**********************************************************************/
// Mise a jour des listes des dernieres epaisseurs de via et track utilisées
// Mise a jour des listes des dernieres epaisseurs de via et track utilisées
{
{
...
...
pcbnew/ratsnest.cpp
View file @
f3c324d5
...
@@ -1254,6 +1254,9 @@ int* WinEDA_BasePcbFrame::build_ratsnest_pad( EDA_BaseStruct* ref,
...
@@ -1254,6 +1254,9 @@ int* WinEDA_BasePcbFrame::build_ratsnest_pad( EDA_BaseStruct* ref,
conn_number
=
track_ref
->
m_Sous_Netcode
;
conn_number
=
track_ref
->
m_Sous_Netcode
;
break
;
break
;
}
}
default
:
;
}
}
if
(
current_net_code
<=
0
)
if
(
current_net_code
<=
0
)
...
...
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