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
535a4d1f
Commit
535a4d1f
authored
Jun 13, 2009
by
charras
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Eeschema: code cleanup
parent
b4bd181d
Changes
13
Hide whitespace changes
Inline
Side-by-side
Showing
13 changed files
with
2028 additions
and
2119 deletions
+2028
-2119
common.cpp
common/common.cpp
+123
-119
trigo.cpp
common/trigo.cpp
+1467
-1453
CMakeLists.txt
eeschema/CMakeLists.txt
+1
-0
class_libentry_fields.cpp
eeschema/class_libentry_fields.cpp
+40
-14
class_libentry_fields.h
eeschema/class_libentry_fields.h
+8
-0
class_pin.cpp
eeschema/class_pin.cpp
+77
-22
classes_body_items.cpp
eeschema/classes_body_items.cpp
+145
-240
classes_body_items.h
eeschema/classes_body_items.h
+110
-4
cleanup.cpp
eeschema/cleanup.cpp
+8
-13
locate.cpp
eeschema/locate.cpp
+26
-229
protos.h
eeschema/protos.h
+2
-16
common.h
include/common.h
+7
-7
trigo.h
include/trigo.h
+14
-2
No files found.
common/common.cpp
View file @
535a4d1f
...
@@ -21,25 +21,25 @@
...
@@ -21,25 +21,25 @@
*/
*/
/* Standard page sizes in 1/1000 inch */
/* Standard page sizes in 1/1000 inch */
Ki_PageDescr
g_Sheet_A4
(
wxSize
(
11700
,
8267
),
wxPoint
(
0
,
0
),
wxT
(
"A4"
)
);
Ki_PageDescr
g_Sheet_A4
(
wxSize
(
11700
,
8267
),
wxPoint
(
0
,
0
),
wxT
(
"A4"
)
);
Ki_PageDescr
g_Sheet_A3
(
wxSize
(
16535
,
11700
),
wxPoint
(
0
,
0
),
wxT
(
"A3"
)
);
Ki_PageDescr
g_Sheet_A3
(
wxSize
(
16535
,
11700
),
wxPoint
(
0
,
0
),
wxT
(
"A3"
)
);
Ki_PageDescr
g_Sheet_A2
(
wxSize
(
23400
,
16535
),
wxPoint
(
0
,
0
),
wxT
(
"A2"
)
);
Ki_PageDescr
g_Sheet_A2
(
wxSize
(
23400
,
16535
),
wxPoint
(
0
,
0
),
wxT
(
"A2"
)
);
Ki_PageDescr
g_Sheet_A1
(
wxSize
(
33070
,
23400
),
wxPoint
(
0
,
0
),
wxT
(
"A1"
)
);
Ki_PageDescr
g_Sheet_A1
(
wxSize
(
33070
,
23400
),
wxPoint
(
0
,
0
),
wxT
(
"A1"
)
);
Ki_PageDescr
g_Sheet_A0
(
wxSize
(
46800
,
33070
),
wxPoint
(
0
,
0
),
wxT
(
"A0"
)
);
Ki_PageDescr
g_Sheet_A0
(
wxSize
(
46800
,
33070
),
wxPoint
(
0
,
0
),
wxT
(
"A0"
)
);
Ki_PageDescr
g_Sheet_A
(
wxSize
(
11000
,
8500
),
wxPoint
(
0
,
0
),
wxT
(
"A"
)
);
Ki_PageDescr
g_Sheet_A
(
wxSize
(
11000
,
8500
),
wxPoint
(
0
,
0
),
wxT
(
"A"
)
);
Ki_PageDescr
g_Sheet_B
(
wxSize
(
17000
,
11000
),
wxPoint
(
0
,
0
),
wxT
(
"B"
)
);
Ki_PageDescr
g_Sheet_B
(
wxSize
(
17000
,
11000
),
wxPoint
(
0
,
0
),
wxT
(
"B"
)
);
Ki_PageDescr
g_Sheet_C
(
wxSize
(
22000
,
17000
),
wxPoint
(
0
,
0
),
wxT
(
"C"
)
);
Ki_PageDescr
g_Sheet_C
(
wxSize
(
22000
,
17000
),
wxPoint
(
0
,
0
),
wxT
(
"C"
)
);
Ki_PageDescr
g_Sheet_D
(
wxSize
(
34000
,
22000
),
wxPoint
(
0
,
0
),
wxT
(
"D"
)
);
Ki_PageDescr
g_Sheet_D
(
wxSize
(
34000
,
22000
),
wxPoint
(
0
,
0
),
wxT
(
"D"
)
);
Ki_PageDescr
g_Sheet_E
(
wxSize
(
44000
,
34000
),
wxPoint
(
0
,
0
),
wxT
(
"E"
)
);
Ki_PageDescr
g_Sheet_E
(
wxSize
(
44000
,
34000
),
wxPoint
(
0
,
0
),
wxT
(
"E"
)
);
Ki_PageDescr
g_Sheet_GERBER
(
wxSize
(
32000
,
32000
),
wxPoint
(
0
,
0
),
Ki_PageDescr
g_Sheet_GERBER
(
wxSize
(
32000
,
32000
),
wxPoint
(
0
,
0
),
wxT
(
"GERBER"
)
);
wxT
(
"GERBER"
)
);
Ki_PageDescr
g_Sheet_user
(
wxSize
(
17000
,
11000
),
wxPoint
(
0
,
0
),
Ki_PageDescr
g_Sheet_user
(
wxSize
(
17000
,
11000
),
wxPoint
(
0
,
0
),
wxT
(
"User"
)
);
wxT
(
"User"
)
);
Ki_PageDescr
*
g_SheetSizeList
[
NB_ITEMS
+
1
]
=
Ki_PageDescr
*
g_SheetSizeList
[
NB_ITEMS
+
1
]
=
{
{
&
g_Sheet_A4
,
&
g_Sheet_A3
,
&
g_Sheet_A2
,
&
g_Sheet_A1
,
&
g_Sheet_A0
,
&
g_Sheet_A4
,
&
g_Sheet_A3
,
&
g_Sheet_A2
,
&
g_Sheet_A1
,
&
g_Sheet_A0
,
&
g_Sheet_A
,
&
g_Sheet_B
,
&
g_Sheet_C
,
&
g_Sheet_D
,
&
g_Sheet_E
,
&
g_Sheet_A
,
&
g_Sheet_B
,
&
g_Sheet_C
,
&
g_Sheet_D
,
&
g_Sheet_E
,
&
g_Sheet_user
,
NULL
&
g_Sheet_user
,
NULL
};
};
...
@@ -57,33 +57,33 @@ const wxString PdfFileExtension( wxT( "pdf" ) );
...
@@ -57,33 +57,33 @@ const wxString PdfFileExtension( wxT( "pdf" ) );
/* Proper wxFileDialog wild card definitions. */
/* Proper wxFileDialog wild card definitions. */
const
wxString
ProjectFileWildcard
(
_
(
"Kicad project files (*.pro)|*.pro"
)
);
const
wxString
ProjectFileWildcard
(
_
(
"Kicad project files (*.pro)|*.pro"
)
);
const
wxString
BoardFileWildcard
(
_
(
"Kicad PCB files (*.brd)|*.brd"
)
);
const
wxString
BoardFileWildcard
(
_
(
"Kicad PCB files (*.brd)|*.brd"
)
);
const
wxString
SchematicFileWildcard
(
_
(
"Kicad schematic files (*.sch)|*.sch"
)
);
const
wxString
SchematicFileWildcard
(
_
(
"Kicad schematic files (*.sch)|*.sch"
)
);
const
wxString
NetlistFileWildcard
(
_
(
"Kicad netlist files (*.net)|*.net"
)
);
const
wxString
NetlistFileWildcard
(
_
(
"Kicad netlist files (*.net)|*.net"
)
);
const
wxString
GerberFileWildcard
(
_
(
"Gerber files (*.pho)|*.pho"
)
);
const
wxString
GerberFileWildcard
(
_
(
"Gerber files (*.pho)|*.pho"
)
);
const
wxString
PdfFileWildcard
(
_
(
"Portable document format files (*.pdf)|*.pdf"
)
);
const
wxString
PdfFileWildcard
(
_
(
"Portable document format files (*.pdf)|*.pdf"
)
);
const
wxString
AllFilesWildcard
(
_
(
"All files (*)|*"
)
);
const
wxString
AllFilesWildcard
(
_
(
"All files (*)|*"
)
);
wxString
g_ProductName
=
wxT
(
"KiCad E.D.A. "
);
wxString
g_ProductName
=
wxT
(
"KiCad E.D.A. "
);
bool
g_ShowPageLimits
=
true
;
bool
g_ShowPageLimits
=
true
;
int
g_GridColor
=
DARKGRAY
;
int
g_GridColor
=
DARKGRAY
;
wxString
g_UserLibDirBuffer
;
wxString
g_UserLibDirBuffer
;
int
g_DebugLevel
;
int
g_DebugLevel
;
int
g_MouseOldButtons
;
int
g_MouseOldButtons
;
int
g_KeyPressed
;
int
g_KeyPressed
;
// Nom (full file name) du file Configuration par defaut (kicad.pro)
// Nom (full file name) du file Configuration par defaut (kicad.pro)
wxString
g_Prj_Default_Config_FullFilename
;
wxString
g_Prj_Default_Config_FullFilename
;
// Nom du file Configuration local (<curr projet>.pro)
// Nom du file Configuration local (<curr projet>.pro)
wxString
g_Prj_Config_LocalFilename
;
wxString
g_Prj_Config_LocalFilename
;
// Handle the preferd editor for browsing report files:
// Handle the preferd editor for browsing report files:
int
g_UnitMetric
;
// display units mm = 1, inches = 0, cm = 2
int
g_UnitMetric
;
// display units mm = 1, inches = 0, cm = 2
/* Draw color for moving objects: */
/* Draw color for moving objects: */
int
g_GhostColor
;
int
g_GhostColor
;
/* predefined colors used in kicad.
/* predefined colors used in kicad.
* Please: if you change a value, remember these values are carefully chosen
* Please: if you change a value, remember these values are carefully chosen
...
@@ -92,45 +92,43 @@ int g_GhostColor;
...
@@ -92,45 +92,43 @@ int g_GhostColor;
*/
*/
StructColors
ColorRefs
[
NBCOLOR
]
=
StructColors
ColorRefs
[
NBCOLOR
]
=
{
{
{
0
,
0
,
0
,
BLACK
,
wxT
(
"BLACK"
),
DARKDARKGRAY
},
{
0
,
0
,
0
,
BLACK
,
wxT
(
"BLACK"
),
DARKDARKGRAY
},
{
192
,
0
,
0
,
BLUE
,
wxT
(
"BLUE"
),
LIGHTBLUE
},
{
192
,
0
,
0
,
BLUE
,
wxT
(
"BLUE"
),
LIGHTBLUE
},
{
0
,
160
,
0
,
GREEN
,
wxT
(
"GREEN"
),
LIGHTGREEN
},
{
0
,
160
,
0
,
GREEN
,
wxT
(
"GREEN"
),
LIGHTGREEN
},
{
160
,
160
,
0
,
CYAN
,
wxT
(
"CYAN"
),
LIGHTCYAN
},
{
160
,
160
,
0
,
CYAN
,
wxT
(
"CYAN"
),
LIGHTCYAN
},
{
0
,
0
,
160
,
RED
,
wxT
(
"RED"
),
LIGHTRED
},
{
0
,
0
,
160
,
RED
,
wxT
(
"RED"
),
LIGHTRED
},
{
160
,
0
,
160
,
MAGENTA
,
wxT
(
"MAGENTA"
),
LIGHTMAGENTA
},
{
160
,
0
,
160
,
MAGENTA
,
wxT
(
"MAGENTA"
),
LIGHTMAGENTA
},
{
0
,
128
,
128
,
BROWN
,
wxT
(
"BROWN"
),
YELLOW
},
{
0
,
128
,
128
,
BROWN
,
wxT
(
"BROWN"
),
YELLOW
},
{
192
,
192
,
192
,
LIGHTGRAY
,
wxT
(
"GRAY"
),
WHITE
},
{
192
,
192
,
192
,
LIGHTGRAY
,
wxT
(
"GRAY"
),
WHITE
},
{
128
,
128
,
128
,
DARKGRAY
,
wxT
(
"DARKGRAY"
),
LIGHTGRAY
},
{
128
,
128
,
128
,
DARKGRAY
,
wxT
(
"DARKGRAY"
),
LIGHTGRAY
},
{
255
,
0
,
0
,
LIGHTBLUE
,
wxT
(
"LIGHTBLUE"
),
LIGHTBLUE
},
{
255
,
0
,
0
,
LIGHTBLUE
,
wxT
(
"LIGHTBLUE"
),
LIGHTBLUE
},
{
0
,
255
,
0
,
LIGHTGREEN
,
wxT
(
"LIGHTGREEN"
),
LIGHTGREEN
},
{
0
,
255
,
0
,
LIGHTGREEN
,
wxT
(
"LIGHTGREEN"
),
LIGHTGREEN
},
{
255
,
255
,
0
,
LIGHTCYAN
,
wxT
(
"LIGHTCYAN"
),
LIGHTCYAN
},
{
255
,
255
,
0
,
LIGHTCYAN
,
wxT
(
"LIGHTCYAN"
),
LIGHTCYAN
},
{
0
,
0
,
255
,
LIGHTRED
,
wxT
(
"LIGHTRED"
),
LIGHTRED
},
{
0
,
0
,
255
,
LIGHTRED
,
wxT
(
"LIGHTRED"
),
LIGHTRED
},
{
255
,
0
,
255
,
LIGHTMAGENTA
,
wxT
(
"LIGHTMAGENTA"
),
LIGHTMAGENTA
},
{
255
,
0
,
255
,
LIGHTMAGENTA
,
wxT
(
"LIGHTMAGENTA"
),
LIGHTMAGENTA
},
{
0
,
255
,
255
,
YELLOW
,
wxT
(
"YELLOW"
),
YELLOW
},
{
0
,
255
,
255
,
YELLOW
,
wxT
(
"YELLOW"
),
YELLOW
},
{
255
,
255
,
255
,
WHITE
,
wxT
(
"WHITE"
),
WHITE
},
{
255
,
255
,
255
,
WHITE
,
wxT
(
"WHITE"
),
WHITE
},
{
64
,
64
,
64
,
DARKDARKGRAY
,
wxT
(
"DARKDARKGRAY"
),
DARKGRAY
},
{
64
,
64
,
64
,
DARKDARKGRAY
,
wxT
(
"DARKDARKGRAY"
),
DARKGRAY
},
{
64
,
0
,
0
,
DARKBLUE
,
wxT
(
"DARKBLUE"
),
BLUE
},
{
64
,
0
,
0
,
DARKBLUE
,
wxT
(
"DARKBLUE"
),
BLUE
},
{
0
,
64
,
0
,
DARKGREEN
,
wxT
(
"DARKGREEN"
),
GREEN
},
{
0
,
64
,
0
,
DARKGREEN
,
wxT
(
"DARKGREEN"
),
GREEN
},
{
64
,
64
,
0
,
DARKCYAN
,
wxT
(
"DARKCYAN"
),
CYAN
},
{
64
,
64
,
0
,
DARKCYAN
,
wxT
(
"DARKCYAN"
),
CYAN
},
{
0
,
0
,
80
,
DARKRED
,
wxT
(
"DARKRED"
),
RED
},
{
0
,
0
,
80
,
DARKRED
,
wxT
(
"DARKRED"
),
RED
},
{
64
,
0
,
64
,
DARKMAGENTA
,
wxT
(
"DARKMAGENTA"
),
MAGENTA
},
{
64
,
0
,
64
,
DARKMAGENTA
,
wxT
(
"DARKMAGENTA"
),
MAGENTA
},
{
0
,
64
,
64
,
DARKBROWN
,
wxT
(
"DARKBROWN"
),
BROWN
},
{
0
,
64
,
64
,
DARKBROWN
,
wxT
(
"DARKBROWN"
),
BROWN
},
{
128
,
255
,
255
,
LIGHTYELLOW
,
wxT
(
"LIGHTYELLOW"
),
LIGHTYELLOW
}
{
128
,
255
,
255
,
LIGHTYELLOW
,
wxT
(
"LIGHTYELLOW"
),
LIGHTYELLOW
}
};
};
/*
/*
* Function GetBuildVersion()
* Return the build date
* Return the build date
*/
*/
/****************/
wxString
GetBuildVersion
()
wxString
GetBuildVersion
()
/****************/
{
{
return
g_BuildVersion
;
return
g_BuildVersion
;
}
}
/*
/*
* Function GetAboutBuildVersion()
* Return custom build date for about dialog
* Return custom build date for about dialog
*/
*/
wxString
GetAboutBuildVersion
()
wxString
GetAboutBuildVersion
()
...
@@ -140,15 +138,15 @@ wxString GetAboutBuildVersion()
...
@@ -140,15 +138,15 @@ wxString GetAboutBuildVersion()
/** function SetLocaleTo_C_standard
/** function SetLocaleTo_C_standard
* because kicad is internationalized, switch internatization to "C" standard
* because kicad is internationalized, switch internatization to "C" standard
* i.e. uses the . (dot) as separator in print/read float numbers
* i.e. uses the . (dot) as separator in print/read float numbers
* (some contries (France, Germany ..) use , (comma) as separator)
* (some contries (France, Germany ..) use , (comma) as separator)
* This function must be called before read or write ascii files using float numbers in data
* This function must be called before read or write ascii files using float numbers in data
* the SetLocaleTo_C_standard function must be called after reading or writing the file
* the SetLocaleTo_C_standard function must be called after reading or writing the file
*
*
* This is wrapper to the C setlocale( LC_NUMERIC, "C" ) function,
* This is wrapper to the C setlocale( LC_NUMERIC, "C" ) function,
* but could make more easier an optional use of locale in kicad
* but could make more easier an optional use of locale in kicad
*/
*/
/********************************/
/********************************/
void
SetLocaleTo_C_standard
(
void
)
void
SetLocaleTo_C_standard
(
void
)
{
{
...
@@ -157,13 +155,13 @@ void SetLocaleTo_C_standard( void )
...
@@ -157,13 +155,13 @@ void SetLocaleTo_C_standard( void )
/** function SetLocaleTo_Default
/** function SetLocaleTo_Default
* because kicad is internationalized, switch internatization to default
* because kicad is internationalized, switch internatization to default
* to use the default separator in print/read float numbers
* to use the default separator in print/read float numbers
* (. (dot) but some contries (France, Germany ..) use , (comma) as separator)
* (. (dot) but some contries (France, Germany ..) use , (comma) as separator)
* This function must be called after a call to SetLocaleTo_C_standard
* This function must be called after a call to SetLocaleTo_C_standard
*
*
* This is wrapper to the C setlocale( LC_NUMERIC, "" ) function,
* This is wrapper to the C setlocale( LC_NUMERIC, "" ) function,
* but could make more easier an optional use of locale in kicad
* but could make more easier an optional use of locale in kicad
*/
*/
/********************************/
/********************************/
void
SetLocaleTo_Default
(
void
)
void
SetLocaleTo_Default
(
void
)
...
@@ -174,24 +172,25 @@ void SetLocaleTo_Default( void )
...
@@ -174,24 +172,25 @@ void SetLocaleTo_Default( void )
/********************************************************************/
/********************************************************************/
bool
EnsureTextCtrlWidth
(
wxTextCtrl
*
aCtrl
,
bool
EnsureTextCtrlWidth
(
wxTextCtrl
*
aCtrl
,
const
wxString
*
aString
)
const
wxString
*
aString
)
/********************************************************************/
/********************************************************************/
{
{
wxWindow
*
window
=
aCtrl
->
GetParent
();
wxWindow
*
window
=
aCtrl
->
GetParent
();
if
(
!
window
)
if
(
!
window
)
window
=
aCtrl
;
window
=
aCtrl
;
wxString
ctrlText
;
wxString
ctrlText
;
if
(
!
aString
)
if
(
!
aString
)
{
{
ctrlText
=
aCtrl
->
GetValue
();
ctrlText
=
aCtrl
->
GetValue
();
aString
=
&
ctrlText
;
aString
=
&
ctrlText
;
}
}
wxCoord
width
;
wxCoord
width
;
wxCoord
height
;
wxCoord
height
;
{
{
wxClientDC
dc
(
window
);
wxClientDC
dc
(
window
);
...
@@ -211,9 +210,9 @@ bool EnsureTextCtrlWidth(wxTextCtrl* aCtrl,
...
@@ -211,9 +210,9 @@ bool EnsureTextCtrlWidth(wxTextCtrl* aCtrl,
/*********************************************************************************************/
/*********************************************************************************************/
Ki_PageDescr
::
Ki_PageDescr
(
const
wxSize
&
size
,
Ki_PageDescr
::
Ki_PageDescr
(
const
wxSize
&
size
,
const
wxPoint
&
offset
,
const
wxPoint
&
offset
,
const
wxString
&
name
)
const
wxString
&
name
)
/*********************************************************************************************/
/*********************************************************************************************/
{
{
// All sizes are in 1/1000 inch
// All sizes are in 1/1000 inch
...
@@ -223,12 +222,12 @@ Ki_PageDescr::Ki_PageDescr(const wxSize& size,
...
@@ -223,12 +222,12 @@ Ki_PageDescr::Ki_PageDescr(const wxSize& size,
// Adjust the default value for margins to 400 mils (0,4 inch or 10 mm)
// Adjust the default value for margins to 400 mils (0,4 inch or 10 mm)
#if defined(KICAD_GOST)
#if defined(KICAD_GOST)
m_LeftMargin
=
LEFTMARGIN
;
m_LeftMargin
=
LEFTMARGIN
;
m_RightMargin
=
RIGHTMARGIN
;
m_RightMargin
=
RIGHTMARGIN
;
m_TopMargin
=
TOPMARGIN
;
m_TopMargin
=
TOPMARGIN
;
m_BottomMargin
=
BOTTOMMARGIN
;
m_BottomMargin
=
BOTTOMMARGIN
;
#else
#else
m_LeftMargin
=
m_RightMargin
=
m_TopMargin
=
m_BottomMargin
=
400
;
m_LeftMargin
=
m_RightMargin
=
m_TopMargin
=
m_BottomMargin
=
400
;
#endif
#endif
}
}
...
@@ -323,9 +322,9 @@ wxString ReturnStringFromValue( int aUnits, int aValue, int aInternal_Unit,
...
@@ -323,9 +322,9 @@ wxString ReturnStringFromValue( int aUnits, int aValue, int aInternal_Unit,
StringValue
<<
aValue
;
StringValue
<<
aValue
;
else
else
{
{
value_to_print
=
To_User_Unit
(
(
bool
)
aUnits
,
aValue
,
aInternal_Unit
);
value_to_print
=
To_User_Unit
(
(
bool
)
aUnits
,
aValue
,
aInternal_Unit
);
StringValue
.
Printf
(
(
aInternal_Unit
>
1000
)
?
wxT
(
"%.4f"
)
:
wxT
(
"%.3f"
),
StringValue
.
Printf
(
(
aInternal_Unit
>
1000
)
?
wxT
(
"%.4f"
)
:
wxT
(
"%.3f"
),
value_to_print
);
value_to_print
);
}
}
if
(
aAdd_unit_symbol
)
if
(
aAdd_unit_symbol
)
...
@@ -366,11 +365,12 @@ int ReturnValueFromString( int Units, const wxString& TextValue,
...
@@ -366,11 +365,12 @@ int ReturnValueFromString( int Units, const wxString& TextValue,
if
(
Units
>=
CENTIMETRE
)
if
(
Units
>=
CENTIMETRE
)
Value
=
wxRound
(
dtmp
);
Value
=
wxRound
(
dtmp
);
else
else
Value
=
From_User_Unit
(
(
bool
)
Units
,
dtmp
,
Internal_Unit
);
Value
=
From_User_Unit
(
(
bool
)
Units
,
dtmp
,
Internal_Unit
);
return
Value
;
return
Value
;
}
}
/**
/**
* Function wxStringSplit
* Function wxStringSplit
* Split a String to a String List when founding 'splitter'
* Split a String to a String List when founding 'splitter'
...
@@ -379,25 +379,26 @@ int ReturnValueFromString( int Units, const wxString& TextValue,
...
@@ -379,25 +379,26 @@ int ReturnValueFromString( int Units, const wxString& TextValue,
* @param splitter : wxChar : the 'split' character
* @param splitter : wxChar : the 'split' character
*/
*/
/**********************************************************/
/**********************************************************/
wxArrayString
*
wxStringSplit
(
wxString
txt
,
wxChar
splitter
)
wxArrayString
*
wxStringSplit
(
wxString
txt
,
wxChar
splitter
)
/**********************************************************/
/**********************************************************/
{
{
wxArrayString
*
list
=
new
wxArrayString
();
wxArrayString
*
list
=
new
wxArrayString
();
while
(
1
)
while
(
1
)
{
{
int
index
=
txt
.
Find
(
splitter
);
int
index
=
txt
.
Find
(
splitter
);
if
(
index
==
wxNOT_FOUND
)
if
(
index
==
wxNOT_FOUND
)
break
;
break
;
wxString
tmp
;
wxString
tmp
;
tmp
=
txt
.
Mid
(
0
,
index
);
tmp
=
txt
.
Mid
(
0
,
index
);
txt
=
txt
.
Mid
(
index
+
1
,
txt
.
size
()
-
index
);
txt
=
txt
.
Mid
(
index
+
1
,
txt
.
size
()
-
index
);
list
->
Add
(
tmp
);
list
->
Add
(
tmp
);
}
}
if
(
!
txt
.
IsEmpty
()
)
if
(
!
txt
.
IsEmpty
()
)
{
{
list
->
Add
(
txt
);
list
->
Add
(
txt
);
}
}
return
list
;
return
list
;
...
@@ -407,6 +408,7 @@ wxArrayString* wxStringSplit(wxString txt, wxChar splitter)
...
@@ -407,6 +408,7 @@ wxArrayString* wxStringSplit(wxString txt, wxChar splitter)
/******************************************************************/
/******************************************************************/
double
To_User_Unit
(
bool
is_metric
,
int
val
,
int
internal_unit_value
)
double
To_User_Unit
(
bool
is_metric
,
int
val
,
int
internal_unit_value
)
/******************************************************************/
/******************************************************************/
/**
/**
* Function To_User_Unit
* Function To_User_Unit
* Convert in inch or mm the variable "val" (double)given in internal units
* Convert in inch or mm the variable "val" (double)given in internal units
...
@@ -419,18 +421,20 @@ double To_User_Unit( bool is_metric, int val, int internal_unit_value )
...
@@ -419,18 +421,20 @@ double To_User_Unit( bool is_metric, int val, int internal_unit_value )
double
value
;
double
value
;
if
(
is_metric
)
if
(
is_metric
)
value
=
(
double
)
(
val
)
*
25.4
/
internal_unit_value
;
value
=
(
double
)
(
val
)
*
25.4
/
internal_unit_value
;
else
else
value
=
(
double
)
(
val
)
/
internal_unit_value
;
value
=
(
double
)
(
val
)
/
internal_unit_value
;
return
value
;
return
value
;
}
}
/******************************************************************/
/******************************************************************/
double
To_User_Unit
(
bool
is_metric
,
double
To_User_Unit
(
bool
is_metric
,
double
val
,
double
val
,
int
internal_unit_value
)
int
internal_unit_value
)
/******************************************************************/
/******************************************************************/
/**
/**
* Function To_User_Unit
* Function To_User_Unit
* Convert in inch or mm the variable "val" (double)given in internal units
* Convert in inch or mm the variable "val" (double)given in internal units
...
@@ -451,7 +455,6 @@ double To_User_Unit( bool is_metric,
...
@@ -451,7 +455,6 @@ double To_User_Unit( bool is_metric,
}
}
/*
/*
* Return in internal units the value "val" given in inch or mm
* Return in internal units the value "val" given in inch or mm
*/
*/
...
@@ -490,8 +493,8 @@ wxString GenDate()
...
@@ -490,8 +493,8 @@ wxString GenDate()
time
(
&
buftime
);
time
(
&
buftime
);
Date
=
gmtime
(
&
buftime
);
Date
=
gmtime
(
&
buftime
);
string_date
.
Printf
(
wxT
(
"%d %s %d"
),
Date
->
tm_mday
,
string_date
.
Printf
(
wxT
(
"%d %s %d"
),
Date
->
tm_mday
,
mois
[
Date
->
tm_mon
].
GetData
(),
mois
[
Date
->
tm_mon
].
GetData
(),
Date
->
tm_year
+
1900
);
Date
->
tm_year
+
1900
);
return
string_date
;
return
string_date
;
}
}
...
@@ -580,7 +583,8 @@ wxString ReturnPcbLayerName( int layer_number, bool omitSpacePadding )
...
@@ -580,7 +583,8 @@ wxString ReturnPcbLayerName( int layer_number, bool omitSpacePadding )
// These are only default layer names. For PCBNEW, the copper names
// These are only default layer names. For PCBNEW, the copper names
// may be over-ridden in the BOARD file *.brd.
// may be over-ridden in the BOARD file *.brd.
static
const
wxString
layer_name_list
[]
=
{
static
const
wxString
layer_name_list
[]
=
{
_
(
"Copper "
),
_
(
"Inner L1 "
),
_
(
"Inner L2 "
),
_
(
"Inner L3 "
),
_
(
"Copper "
),
_
(
"Inner L1 "
),
_
(
"Inner L2 "
),
_
(
"Inner L3 "
),
_
(
"Inner L4 "
),
_
(
"Inner L5 "
),
_
(
"Inner L6 "
),
_
(
"Inner L7 "
),
_
(
"Inner L4 "
),
_
(
"Inner L5 "
),
_
(
"Inner L6 "
),
_
(
"Inner L7 "
),
_
(
"Inner L8 "
),
_
(
"Inner L9 "
),
_
(
"Inner L10"
),
_
(
"Inner L11"
),
_
(
"Inner L8 "
),
_
(
"Inner L9 "
),
_
(
"Inner L10"
),
_
(
"Inner L11"
),
...
@@ -622,22 +626,22 @@ EVT_CLOSE( WinEDA_TextFrame::OnClose )
...
@@ -622,22 +626,22 @@ EVT_CLOSE( WinEDA_TextFrame::OnClose )
END_EVENT_TABLE
()
END_EVENT_TABLE
()
/***************************************************************************/
/***************************************************************************/
WinEDA_TextFrame
::
WinEDA_TextFrame
(
wxWindow
*
parent
,
WinEDA_TextFrame
::
WinEDA_TextFrame
(
wxWindow
*
parent
,
const
wxString
&
title
)
:
const
wxString
&
title
)
:
wxDialog
(
parent
,
wxDialog
(
parent
,
-
1
,
title
,
-
1
,
title
,
wxPoint
(
-
1
,
-
1
),
wxPoint
(
-
1
,
-
1
),
wxSize
(
250
,
350
),
wxSize
(
250
,
350
),
wxDEFAULT_DIALOG_STYLE
|
wxDEFAULT_DIALOG_STYLE
|
wxFRAME_FLOAT_ON_PARENT
|
wxFRAME_FLOAT_ON_PARENT
|
MAYBE_RESIZE_BORDER
)
MAYBE_RESIZE_BORDER
)
/***************************************************************************/
/***************************************************************************/
{
{
/*
/*
* TODO background and foreground colors of WinEDA_TextFrame should be
* TODO background and foreground colors of WinEDA_TextFrame should be
* controllable / settable with project settings or config file and not
* controllable / settable with project settings or config file and not
* hardcoded in binairy !
* hardcoded in binairy !
*/
*/
wxSize
size
;
wxSize
size
;
...
...
common/trigo.cpp
View file @
535a4d1f
This source diff could not be displayed because it is too large. You can
view the blob
instead.
eeschema/CMakeLists.txt
View file @
535a4d1f
...
@@ -14,6 +14,7 @@ set(EESCHEMA_SRCS
...
@@ -14,6 +14,7 @@ set(EESCHEMA_SRCS
build_BOM.cpp
build_BOM.cpp
busentry.cpp
busentry.cpp
bus-wire-junction.cpp
bus-wire-junction.cpp
class_BodyItem_Text.cpp
class_drawsheet.cpp
class_drawsheet.cpp
class_drawsheetpath.cpp
class_drawsheetpath.cpp
class_hierarchical_PIN_sheet.cpp
class_hierarchical_PIN_sheet.cpp
...
...
eeschema/class_libentry_fields.cpp
View file @
535a4d1f
...
@@ -254,27 +254,53 @@ void LibDrawField::Draw( WinEDA_DrawPanel* aPanel, wxDC* aDC,
...
@@ -254,27 +254,53 @@ void LibDrawField::Draw( WinEDA_DrawPanel* aPanel, wxDC* aDC,
*/
*/
bool
LibDrawField
::
HitTest
(
const
wxPoint
&
refPos
)
bool
LibDrawField
::
HitTest
(
const
wxPoint
&
refPos
)
{
{
// Reference designator text has one additional character (displays U?)
return
HitTest
(
refPos
,
0
,
DefaultTransformMatrix
);
}
/** Function HitTest
* @return true if the point aPosRef is near this object
* @param aPosRef = a wxPoint to test
* @param aThreshold = unused here (TextHitTest calculates its threshold )
* @param aTransMat = the transform matrix
*/
bool
LibDrawField
::
HitTest
(
wxPoint
aPosRef
,
int
aThreshold
,
const
int
aTransMat
[
2
][
2
]
)
{
int
extraCharCount
=
0
;
// Reference designator text has one or 2 additional character (displays U? or U?A)
if
(
m_FieldId
==
REFERENCE
)
if
(
m_FieldId
==
REFERENCE
)
{
extraCharCount
++
;
m_Text
.
Append
(
'?'
);
m_Text
.
Append
(
'?'
);
// if using TextHitTest() remember this function uses top to bottom y axis convention
EDA_LibComponentStruct
*
parent
=
(
EDA_LibComponentStruct
*
)
m_Parent
;
// and for lib items we are using bottom to top convention
if
(
parent
&&
(
parent
->
m_UnitCount
>
1
)
)
// so for non center Y justification we use a trick.
{
GRTextVertJustifyType
vJustify
=
m_VJustify
;
m_Text
.
Append
(
'A'
);
if
(
m_VJustify
==
GR_TEXT_VJUSTIFY_TOP
)
extraCharCount
++
;
m_VJustify
=
GR_TEXT_VJUSTIFY_BOTTOM
;
}
else
if
(
m_VJustify
==
GR_TEXT_VJUSTIFY_BOTTOM
)
}
m_VJustify
=
GR_TEXT_VJUSTIFY_TOP
;
bool
hit
=
TextHitTest
(
refPos
);
m_VJustify
=
vJustify
;
if
(
m_FieldId
==
REFERENCE
)
wxPoint
physicalpos
=
TransformCoordinate
(
aTransMat
,
m_Pos
);
wxPoint
tmp
=
m_Pos
;
m_Pos
=
physicalpos
;
/* The text orientation may need to be flipped if the
* transformation matrix causes xy axes to be flipped.
* this simple algo works only for schematic matrix (rot 90 or/and mirror)
*/
int
t1
=
(
aTransMat
[
0
][
0
]
!=
0
)
^
(
m_Orient
!=
0
);
int
orient
=
t1
?
TEXT_ORIENT_HORIZ
:
TEXT_ORIENT_VERT
;
EXCHG
(
m_Orient
,
orient
);
bool
hit
=
TextHitTest
(
aPosRef
);
EXCHG
(
m_Orient
,
orient
);
m_Pos
=
tmp
;
while
(
extraCharCount
--
)
m_Text
.
RemoveLast
(
);
m_Text
.
RemoveLast
(
);
return
hit
;
return
hit
;
}
}
// Creation et Duplication d'un field
// Creation et Duplication d'un field
LibDrawField
*
LibDrawField
::
GenCopy
()
LibDrawField
*
LibDrawField
::
GenCopy
()
{
{
...
...
eeschema/class_libentry_fields.h
View file @
535a4d1f
...
@@ -74,6 +74,14 @@ public:
...
@@ -74,6 +74,14 @@ public:
*/
*/
bool
HitTest
(
const
wxPoint
&
refPos
);
bool
HitTest
(
const
wxPoint
&
refPos
);
/** Function HitTest
* @return true if the point aPosRef is near this object
* @param aPosRef = a wxPoint to test
* @param aThreshold = max distance to this object (usually the half thickness of a line)
* @param aTransMat = the transform matrix
*/
virtual
bool
HitTest
(
wxPoint
aPosRef
,
int
aThreshold
,
const
int
aTransMat
[
2
][
2
]
);
void
operator
=
(
const
LibDrawField
&
field
)
void
operator
=
(
const
LibDrawField
&
field
)
{
{
m_FieldId
=
field
.
m_FieldId
;
m_FieldId
=
field
.
m_FieldId
;
...
...
eeschema/class_pin.cpp
View file @
535a4d1f
...
@@ -5,6 +5,7 @@
...
@@ -5,6 +5,7 @@
#include "fctsys.h"
#include "fctsys.h"
#include "appl_wxstruct.h"
#include "appl_wxstruct.h"
#include "gr_basic.h"
#include "gr_basic.h"
#include "trigo.h"
#include "common.h"
#include "common.h"
#include "class_drawpanel.h"
#include "class_drawpanel.h"
#include "drawtxt.h"
#include "drawtxt.h"
...
@@ -14,6 +15,20 @@
...
@@ -14,6 +15,20 @@
#include "plot_common.h"
#include "plot_common.h"
#include "protos.h"
#include "protos.h"
const
wxChar
*
MsgPinElectricType
[]
=
{
wxT
(
"input"
),
wxT
(
"output"
),
wxT
(
"BiDi"
),
wxT
(
"3state"
),
wxT
(
"passive"
),
wxT
(
"unspc"
),
wxT
(
"power_in"
),
wxT
(
"power_out"
),
wxT
(
"openCol"
),
wxT
(
"openEm"
),
wxT
(
"?????"
)
};
LibDrawPin
::
LibDrawPin
()
:
LibEDA_BaseStruct
(
COMPONENT_PIN_DRAW_TYPE
)
LibDrawPin
::
LibDrawPin
()
:
LibEDA_BaseStruct
(
COMPONENT_PIN_DRAW_TYPE
)
{
{
...
@@ -27,8 +42,42 @@ LibDrawPin::LibDrawPin() : LibEDA_BaseStruct( COMPONENT_PIN_DRAW_TYPE )
...
@@ -27,8 +42,42 @@ LibDrawPin::LibDrawPin() : LibEDA_BaseStruct( COMPONENT_PIN_DRAW_TYPE )
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_typeName
=
_
(
"Pin"
);
m_typeName
=
_
(
"Pin"
);
m_PinNumShapeOpt
=
0
;
m_PinNameShapeOpt
=
0
;
m_PinNumPositionOpt
=
0
;
m_PinNamePositionOpt
=
0
;
}
// m_PinNumWidth = m_PinNameWidth = 0; // Unused
/**
* Function HitTest
* tests if the given wxPoint is within the bounds of this object.
* @param aRefPos A wxPoint to test
* @return bool - true if a hit, else false
*/
bool
LibDrawPin
::
HitTest
(
const
wxPoint
&
aRefPos
)
{
int
mindist
=
m_Width
?
m_Width
/
2
:
g_DrawDefaultLineThickness
/
2
;
// Have a minimal tolerance for hit test
if
(
mindist
<
3
)
mindist
=
3
;
// = 3 mils
return
HitTest
(
aRefPos
,
mindist
,
DefaultTransformMatrix
);
}
/** Function HitTest
* @return true if the point aPosRef is near a pin
* @param aRefPos = a wxPoint to test
* @param aThreshold = max distance to a segment
* @param aTransMat = the transform matrix
*/
bool
LibDrawPin
::
HitTest
(
wxPoint
aRefPos
,
int
aThreshold
,
const
int
aTransMat
[
2
][
2
]
)
{
wxPoint
pinPos
=
TransformCoordinate
(
aTransMat
,
m_Pos
);
wxPoint
pinEnd
=
TransformCoordinate
(
aTransMat
,
ReturnPinEndPoint
()
);
return
TestSegmentHit
(
aRefPos
,
pinPos
,
pinEnd
,
aThreshold
);
}
}
...
@@ -461,6 +510,7 @@ void LibDrawPin::DrawPinTexts( WinEDA_DrawPanel* panel,
...
@@ -461,6 +510,7 @@ void LibDrawPin::DrawPinTexts( WinEDA_DrawPanel* panel,
wxSize
PinNumSize
(
m_PinNumSize
,
m_PinNumSize
);
wxSize
PinNumSize
(
m_PinNumSize
,
m_PinNumSize
);
int
nameLineWidth
=
g_DrawDefaultLineThickness
;
int
nameLineWidth
=
g_DrawDefaultLineThickness
;
nameLineWidth
=
Clamp_Text_PenSize
(
nameLineWidth
,
m_PinNameSize
,
false
);
nameLineWidth
=
Clamp_Text_PenSize
(
nameLineWidth
,
m_PinNameSize
,
false
);
int
numLineWidth
=
g_DrawDefaultLineThickness
;
int
numLineWidth
=
g_DrawDefaultLineThickness
;
numLineWidth
=
Clamp_Text_PenSize
(
numLineWidth
,
m_PinNumSize
,
false
);
numLineWidth
=
Clamp_Text_PenSize
(
numLineWidth
,
m_PinNumSize
,
false
);
...
@@ -561,7 +611,7 @@ void LibDrawPin::DrawPinTexts( WinEDA_DrawPanel* panel,
...
@@ -561,7 +611,7 @@ void LibDrawPin::DrawPinTexts( WinEDA_DrawPanel* panel,
TEXT_ORIENT_VERT
,
PinNumSize
,
TEXT_ORIENT_VERT
,
PinNumSize
,
GR_TEXT_HJUSTIFY_CENTER
,
GR_TEXT_HJUSTIFY_CENTER
,
GR_TEXT_VJUSTIFY_BOTTOM
,
numLineWidth
,
GR_TEXT_VJUSTIFY_BOTTOM
,
numLineWidth
,
false
,
false
);
false
,
false
);
}
}
else
/* PIN_UP */
else
/* PIN_UP */
{
{
...
@@ -582,7 +632,7 @@ void LibDrawPin::DrawPinTexts( WinEDA_DrawPanel* panel,
...
@@ -582,7 +632,7 @@ void LibDrawPin::DrawPinTexts( WinEDA_DrawPanel* panel,
TEXT_ORIENT_VERT
,
PinNumSize
,
TEXT_ORIENT_VERT
,
PinNumSize
,
GR_TEXT_HJUSTIFY_CENTER
,
GR_TEXT_HJUSTIFY_CENTER
,
GR_TEXT_VJUSTIFY_BOTTOM
,
numLineWidth
,
GR_TEXT_VJUSTIFY_BOTTOM
,
numLineWidth
,
false
,
false
);
false
,
false
);
}
}
}
}
}
}
...
@@ -611,7 +661,7 @@ void LibDrawPin::DrawPinTexts( WinEDA_DrawPanel* panel,
...
@@ -611,7 +661,7 @@ void LibDrawPin::DrawPinTexts( WinEDA_DrawPanel* panel,
TEXT_ORIENT_HORIZ
,
PinNumSize
,
TEXT_ORIENT_HORIZ
,
PinNumSize
,
GR_TEXT_HJUSTIFY_CENTER
,
GR_TEXT_HJUSTIFY_CENTER
,
GR_TEXT_VJUSTIFY_TOP
,
numLineWidth
,
GR_TEXT_VJUSTIFY_TOP
,
numLineWidth
,
false
,
false
);
false
,
false
);
}
}
}
}
else
/* Its a vertical line. */
else
/* Its a vertical line. */
...
@@ -643,6 +693,7 @@ void LibDrawPin::DrawPinTexts( WinEDA_DrawPanel* panel,
...
@@ -643,6 +693,7 @@ void LibDrawPin::DrawPinTexts( WinEDA_DrawPanel* panel,
}
}
}
}
/*****************************************************************************
/*****************************************************************************
* Plot pin number and pin text info, given the pin line coordinates. *
* Plot pin number and pin text info, given the pin line coordinates. *
* Same as DrawPinTexts((), but output is the plotter
* Same as DrawPinTexts((), but output is the plotter
...
@@ -653,11 +704,11 @@ void LibDrawPin::DrawPinTexts( WinEDA_DrawPanel* panel,
...
@@ -653,11 +704,11 @@ void LibDrawPin::DrawPinTexts( WinEDA_DrawPanel* panel,
* the opposite direction to x2,y2), otherwise all is drawn outside. *
* the opposite direction to x2,y2), otherwise all is drawn outside. *
*****************************************************************************/
*****************************************************************************/
void
LibDrawPin
::
PlotPinTexts
(
wxPoint
&
pin_pos
,
void
LibDrawPin
::
PlotPinTexts
(
wxPoint
&
pin_pos
,
int
orient
,
int
orient
,
int
TextInside
,
int
TextInside
,
bool
DrawPinNum
,
bool
DrawPinNum
,
bool
DrawPinName
,
bool
DrawPinName
,
int
aWidth
)
int
aWidth
)
{
{
int
x
,
y
,
x1
,
y1
;
int
x
,
y
,
x1
,
y1
;
wxString
StringPinNum
;
wxString
StringPinNum
;
...
@@ -956,19 +1007,23 @@ LibDrawPin* LibDrawPin::GenCopy()
...
@@ -956,19 +1007,23 @@ LibDrawPin* LibDrawPin::GenCopy()
{
{
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
;
newpin
->
m_Orient
=
m_Orient
;
newpin
->
m_Orient
=
m_Orient
;
newpin
->
m_PinShape
=
m_PinShape
;
newpin
->
m_PinShape
=
m_PinShape
;
newpin
->
m_PinType
=
m_PinType
;
newpin
->
m_PinType
=
m_PinType
;
newpin
->
m_Attributs
=
m_Attributs
;
newpin
->
m_Attributs
=
m_Attributs
;
newpin
->
m_PinNum
=
m_PinNum
;
newpin
->
m_PinNum
=
m_PinNum
;
newpin
->
m_PinNumSize
=
m_PinNumSize
;
newpin
->
m_PinNumSize
=
m_PinNumSize
;
newpin
->
m_PinNameSize
=
m_PinNameSize
;
newpin
->
m_PinNameSize
=
m_PinNameSize
;
newpin
->
m_Unit
=
m_Unit
;
newpin
->
m_PinNumShapeOpt
=
m_PinNumShapeOpt
;
newpin
->
m_Convert
=
m_Convert
;
newpin
->
m_PinNameShapeOpt
=
m_PinNameShapeOpt
;
newpin
->
m_Flags
=
m_Flags
;
newpin
->
m_PinNumPositionOpt
=
m_PinNumPositionOpt
;
newpin
->
m_Width
=
m_Width
;
newpin
->
m_PinNamePositionOpt
=
m_PinNamePositionOpt
;
newpin
->
m_Unit
=
m_Unit
;
newpin
->
m_Convert
=
m_Convert
;
newpin
->
m_Flags
=
m_Flags
;
newpin
->
m_Width
=
m_Width
;
newpin
->
m_PinName
=
m_PinName
;
newpin
->
m_PinName
=
m_PinName
;
...
...
eeschema/classes_body_items.cpp
View file @
535a4d1f
...
@@ -15,21 +15,6 @@
...
@@ -15,21 +15,6 @@
#include "protos.h"
#include "protos.h"
const
wxChar
*
MsgPinElectricType
[]
=
{
wxT
(
"input"
),
wxT
(
"output"
),
wxT
(
"BiDi"
),
wxT
(
"3state"
),
wxT
(
"passive"
),
wxT
(
"unspc"
),
wxT
(
"power_in"
),
wxT
(
"power_out"
),
wxT
(
"openCol"
),
wxT
(
"openEm"
),
wxT
(
"?????"
)
};
static
int
fill_tab
[
3
]
=
{
'N'
,
'F'
,
'f'
};
static
int
fill_tab
[
3
]
=
{
'N'
,
'F'
,
'f'
};
//#define DRAW_ARC_WITH_ANGLE // Used to draw arcs
//#define DRAW_ARC_WITH_ANGLE // Used to draw arcs
...
@@ -177,21 +162,38 @@ bool LibDrawArc::Load( char* line, wxString& errorMsg )
...
@@ -177,21 +162,38 @@ bool LibDrawArc::Load( char* line, wxString& errorMsg )
/**
/**
* Function HitTest
* Function HitTest
* tests if the given wxPoint is within the bounds of this object.
* tests if the given wxPoint is within the bounds of this object.
* @param aRefPo
s A wxPoint to test
* @param aRefPo
int A wxPoint to test in eeschema space
* @return bool - true if a hit, else false
* @return bool - true if a hit, else false
*/
*/
bool
LibDrawArc
::
HitTest
(
const
wxPoint
&
aRefPo
s
)
bool
LibDrawArc
::
HitTest
(
const
wxPoint
&
aRefPo
int
)
{
{
wxPoint
relpos
=
aRefPos
-
m_Pos
;
int
dist
=
wxRound
(
sqrt
(
(
(
double
)
relpos
.
x
*
relpos
.
x
)
+
(
(
double
)
relpos
.
y
*
relpos
.
y
)
)
);
int
mindist
=
m_Width
?
m_Width
/
2
:
g_DrawDefaultLineThickness
/
2
;
int
mindist
=
m_Width
?
m_Width
/
2
:
g_DrawDefaultLineThickness
/
2
;
// Have a minimal tolerance for hit test
// Have a minimal tolerance for hit test
if
(
mindist
<
3
)
if
(
mindist
<
3
)
mindist
=
3
;
// = 3 mils
mindist
=
3
;
// = 3 mils
if
(
abs
(
dist
-
m_Rayon
)
>
mindist
)
return
HitTest
(
aRefPoint
,
mindist
,
DefaultTransformMatrix
);
}
/** Function HitTest
* @return true if the point aPosRef is near this object
* @param aRefPoint = a wxPoint to test
* @param aThreshold = max distance to this object (usually the half thickness of a line)
* @param aTransMat = the transform matrix
*/
bool
LibDrawArc
::
HitTest
(
wxPoint
aRefPoint
,
int
aThreshold
,
const
int
aTransMat
[
2
][
2
]
)
{
// TODO: use aTransMat to calculmates parameters
wxPoint
relpos
=
aRefPoint
;
NEGATE
(
relpos
.
y
);
// reverse Y axis
relpos
-=
m_Pos
;
int
dist
=
wxRound
(
sqrt
(
(
(
double
)
relpos
.
x
*
relpos
.
x
)
+
(
(
double
)
relpos
.
y
*
relpos
.
y
)
)
);
if
(
abs
(
dist
-
m_Rayon
)
>
aThreshold
)
return
false
;
return
false
;
// We are on the circle, ensure we are on
the arc,
between m_ArcStart and m_ArcEnd
// We are on the circle, ensure we are on
ly on the arc, i.e.
between m_ArcStart and m_ArcEnd
int
astart
=
t1
;
// arc starting point ( in 0.1 degree)
int
astart
=
t1
;
// arc starting point ( in 0.1 degree)
int
aend
=
t2
;
// arc ending point ( in 0.1 degree)
int
aend
=
t2
;
// arc ending point ( in 0.1 degree)
int
atest
=
wxRound
(
atan2
(
relpos
.
y
,
relpos
.
x
)
*
1800.0
/
M_PI
);
int
atest
=
wxRound
(
atan2
(
relpos
.
y
,
relpos
.
x
)
*
1800.0
/
M_PI
);
...
@@ -208,6 +210,7 @@ bool LibDrawArc::HitTest( const wxPoint& aRefPos )
...
@@ -208,6 +210,7 @@ bool LibDrawArc::HitTest( const wxPoint& aRefPos )
return
false
;
return
false
;
}
}
LibDrawArc
*
LibDrawArc
::
GenCopy
()
LibDrawArc
*
LibDrawArc
::
GenCopy
()
{
{
LibDrawArc
*
newitem
=
new
LibDrawArc
();
LibDrawArc
*
newitem
=
new
LibDrawArc
();
...
@@ -422,23 +425,36 @@ bool LibDrawCircle::Load( char* line, wxString& errorMsg )
...
@@ -422,23 +425,36 @@ bool LibDrawCircle::Load( char* line, wxString& errorMsg )
/**
/**
* Function HitTest
* Function HitTest
* tests if the given wxPoint is within the bounds of this object.
* tests if the given wxPoint is within the bounds of this object.
* @param aRefPos A wxPoint to test
* @param aRefPos A wxPoint to test
in eeschema space
* @return bool - true if a hit, else false
* @return bool - true if a hit, else false
*/
*/
bool
LibDrawCircle
::
HitTest
(
const
wxPoint
&
a
RefPos
)
bool
LibDrawCircle
::
HitTest
(
const
wxPoint
&
a
PosRef
)
{
{
wxPoint
relpos
=
aRefPos
-
m_Pos
;
int
dist
=
wxRound
(
sqrt
(
(
(
double
)
relpos
.
x
*
relpos
.
x
)
+
(
(
double
)
relpos
.
y
*
relpos
.
y
)
)
);
int
mindist
=
m_Width
?
m_Width
/
2
:
g_DrawDefaultLineThickness
/
2
;
int
mindist
=
m_Width
?
m_Width
/
2
:
g_DrawDefaultLineThickness
/
2
;
// Have a minimal tolerance for hit test
// Have a minimal tolerance for hit test
if
(
mindist
<
3
)
if
(
mindist
<
3
)
mindist
=
3
;
// = 3 mils
mindist
=
3
;
// = 3 mils
if
(
abs
(
dist
-
m_Rayon
)
>
mindist
)
return
false
;
return
HitTest
(
aPosRef
,
mindist
,
DefaultTransformMatrix
);
}
/** Function HitTest
* @return true if the point aPosRef is near this object
* @param aPosRef = a wxPoint to test
* @param aThreshold = max distance to this object (usually the half thickness of a line)
* @param aTransMat = the transform matrix
*/
bool
LibDrawCircle
::
HitTest
(
wxPoint
aPosRef
,
int
aThreshold
,
const
int
aTransMat
[
2
][
2
]
)
{
wxPoint
relpos
=
aPosRef
-
TransformCoordinate
(
aTransMat
,
m_Pos
);
int
dist
=
wxRound
(
sqrt
(
(
(
double
)
relpos
.
x
*
relpos
.
x
)
+
(
(
double
)
relpos
.
y
*
relpos
.
y
)
)
);
if
(
abs
(
dist
-
m_Rayon
)
<=
aThreshold
)
return
true
;
return
false
;
return
false
;
}
}
LibDrawCircle
*
LibDrawCircle
::
GenCopy
()
LibDrawCircle
*
LibDrawCircle
::
GenCopy
()
{
{
LibDrawCircle
*
newitem
=
new
LibDrawCircle
();
LibDrawCircle
*
newitem
=
new
LibDrawCircle
();
...
@@ -526,216 +542,6 @@ void LibDrawCircle::DisplayInfo( WinEDA_DrawFrame* frame )
...
@@ -526,216 +542,6 @@ void LibDrawCircle::DisplayInfo( WinEDA_DrawFrame* frame )
}
}
/***********************/
/** class LibDrawText **/
/***********************/
LibDrawText
::
LibDrawText
()
:
LibEDA_BaseStruct
(
COMPONENT_GRAPHIC_TEXT_DRAW_TYPE
),
EDA_TextStruct
()
{
m_Size
=
wxSize
(
50
,
50
);
m_typeName
=
_
(
"Text"
);
}
bool
LibDrawText
::
Save
(
FILE
*
ExportFile
)
const
{
wxString
text
=
m_Text
;
// Spaces are not allowed in text because it is not double quoted:
// changed to '~'
text
.
Replace
(
wxT
(
" "
),
wxT
(
"~"
)
);
fprintf
(
ExportFile
,
"T %d %d %d %d %d %d %d %s "
,
m_Orient
,
m_Pos
.
x
,
m_Pos
.
y
,
m_Size
.
x
,
m_Attributs
,
m_Unit
,
m_Convert
,
CONV_TO_UTF8
(
text
)
);
fprintf
(
ExportFile
,
" %s %d"
,
m_Italic
?
"Italic"
:
"Normal"
,
(
m_Bold
>
0
)
?
1
:
0
);
char
hjustify
=
'C'
;
if
(
m_HJustify
==
GR_TEXT_HJUSTIFY_LEFT
)
hjustify
=
'L'
;
else
if
(
m_HJustify
==
GR_TEXT_HJUSTIFY_RIGHT
)
hjustify
=
'R'
;
char
vjustify
=
'C'
;
if
(
m_VJustify
==
GR_TEXT_VJUSTIFY_BOTTOM
)
vjustify
=
'B'
;
else
if
(
m_VJustify
==
GR_TEXT_VJUSTIFY_TOP
)
vjustify
=
'T'
;
fprintf
(
ExportFile
,
" %c %c"
,
hjustify
,
vjustify
);
fprintf
(
ExportFile
,
"
\n
"
);
return
true
;
}
bool
LibDrawText
::
Load
(
char
*
line
,
wxString
&
errorMsg
)
{
int
cnt
,
thickness
;
char
hjustify
=
'C'
,
vjustify
=
'C'
;
char
buf
[
256
];
char
tmp
[
256
];
buf
[
0
]
=
0
;
tmp
[
0
]
=
0
;
// For italic option, Not in old versions
cnt
=
sscanf
(
&
line
[
2
],
"%d %d %d %d %d %d %d %s %s %d %c %c"
,
&
m_Orient
,
&
m_Pos
.
x
,
&
m_Pos
.
y
,
&
m_Size
.
x
,
&
m_Attributs
,
&
m_Unit
,
&
m_Convert
,
buf
,
tmp
,
&
thickness
,
&
hjustify
,
&
vjustify
);
if
(
cnt
<
8
)
{
errorMsg
.
Printf
(
_
(
"text only had %d parameters of the required 8"
),
cnt
);
return
false
;
}
m_Size
.
y
=
m_Size
.
x
;
if
(
strnicmp
(
tmp
,
"Italic"
,
6
)
==
0
)
m_Italic
=
true
;
if
(
thickness
>
0
)
{
m_Bold
=
true
;
}
switch
(
hjustify
)
{
case
'L'
:
m_HJustify
=
GR_TEXT_HJUSTIFY_LEFT
;
break
;
case
'C'
:
m_HJustify
=
GR_TEXT_HJUSTIFY_CENTER
;
break
;
case
'R'
:
m_HJustify
=
GR_TEXT_HJUSTIFY_RIGHT
;
break
;
}
switch
(
vjustify
)
{
case
'T'
:
m_VJustify
=
GR_TEXT_VJUSTIFY_TOP
;
break
;
case
'C'
:
m_VJustify
=
GR_TEXT_VJUSTIFY_CENTER
;
break
;
case
'B'
:
m_VJustify
=
GR_TEXT_VJUSTIFY_BOTTOM
;
break
;
}
/* Convert '~' to spaces. */
m_Text
=
CONV_FROM_UTF8
(
buf
);
m_Text
.
Replace
(
wxT
(
"~"
),
wxT
(
" "
)
);
return
true
;
}
/**
* Function HitTest
* tests if the given wxPoint is within the bounds of this object.
* @param refPos A wxPoint to test
* @return bool - true if a hit, else false
*/
bool
LibDrawText
::
HitTest
(
const
wxPoint
&
refPos
)
{
// if using TextHitTest() remember this function uses top to bottom y axis convention
// and for lib items we are using bottom to top convention
// so for non center Y justification we use a trick.
GRTextVertJustifyType
vJustify
=
m_VJustify
;
if
(
m_VJustify
==
GR_TEXT_VJUSTIFY_TOP
)
m_VJustify
=
GR_TEXT_VJUSTIFY_BOTTOM
;
else
if
(
m_VJustify
==
GR_TEXT_VJUSTIFY_BOTTOM
)
m_VJustify
=
GR_TEXT_VJUSTIFY_TOP
;
bool
hit
=
TextHitTest
(
refPos
);
m_VJustify
=
vJustify
;
return
hit
;
}
LibDrawText
*
LibDrawText
::
GenCopy
()
{
LibDrawText
*
newitem
=
new
LibDrawText
();
newitem
->
m_Pos
=
m_Pos
;
newitem
->
m_Orient
=
m_Orient
;
newitem
->
m_Size
=
m_Size
;
newitem
->
m_Attributs
=
m_Attributs
;
newitem
->
m_Unit
=
m_Unit
;
newitem
->
m_Convert
=
m_Convert
;
newitem
->
m_Flags
=
m_Flags
;
newitem
->
m_Text
=
m_Text
;
newitem
->
m_Width
=
m_Width
;
newitem
->
m_Italic
=
m_Italic
;
newitem
->
m_Bold
=
m_Bold
;
newitem
->
m_HJustify
=
m_HJustify
;
newitem
->
m_VJustify
=
m_VJustify
;
return
newitem
;
}
void
LibDrawText
::
Draw
(
WinEDA_DrawPanel
*
aPanel
,
wxDC
*
aDC
,
const
wxPoint
&
aOffset
,
int
aColor
,
int
aDrawMode
,
void
*
aData
,
const
int
aTransformMatrix
[
2
][
2
]
)
{
wxPoint
pos1
,
pos2
;
int
color
=
ReturnLayerColor
(
LAYER_DEVICE
);
int
linewidth
=
m_Width
;
if
(
linewidth
==
0
)
// Use default values for pen size
{
if
(
m_Bold
)
linewidth
=
GetPenSizeForBold
(
m_Size
.
x
);
else
linewidth
=
g_DrawDefaultLineThickness
;
}
// Clip pen size for small texts:
linewidth
=
Clamp_Text_PenSize
(
linewidth
,
m_Size
,
m_Bold
);
if
(
aColor
<
0
)
// Used normal color or selected color
{
if
(
(
m_Selected
&
IS_SELECTED
)
)
color
=
g_ItemSelectetColor
;
}
else
color
=
aColor
;
pos1
=
TransformCoordinate
(
aTransformMatrix
,
m_Pos
)
+
aOffset
;
/* The text orientation may need to be flipped if the
* transformation matrix causes xy axes to be flipped. */
int
t1
=
(
aTransformMatrix
[
0
][
0
]
!=
0
)
^
(
m_Orient
!=
0
);
DrawGraphicText
(
aPanel
,
aDC
,
pos1
,
(
EDA_Colors
)
color
,
m_Text
,
t1
?
TEXT_ORIENT_HORIZ
:
TEXT_ORIENT_VERT
,
m_Size
,
m_HJustify
,
m_VJustify
,
linewidth
,
m_Italic
,
m_Bold
);
}
void
LibDrawText
::
DisplayInfo
(
WinEDA_DrawFrame
*
frame
)
{
wxString
msg
;
LibEDA_BaseStruct
::
DisplayInfo
(
frame
);
msg
=
ReturnStringFromValue
(
g_UnitMetric
,
m_Width
,
EESCHEMA_INTERNAL_UNIT
,
true
);
frame
->
MsgPanel
->
Affiche_1_Parametre
(
20
,
_
(
"Line width"
),
msg
,
BLUE
);
}
/*************************/
/*************************/
/** class LibDrawSquare **/
/** class LibDrawSquare **/
...
@@ -857,6 +663,62 @@ EDA_Rect LibDrawSquare::GetBoundingBox()
...
@@ -857,6 +663,62 @@ EDA_Rect LibDrawSquare::GetBoundingBox()
return
rect
;
return
rect
;
}
}
/**
* Function HitTest
* tests if the given wxPoint is within the bounds of this object.
* @param aRefPoint A wxPoint to test in eeschema space
* @return bool - true if a hit, else false
*/
bool
LibDrawSquare
::
HitTest
(
const
wxPoint
&
aRefPoint
)
{
int
mindist
=
(
m_Width
?
m_Width
/
2
:
g_DrawDefaultLineThickness
/
2
)
+
1
;
// Have a minimal tolerance for hit test
if
(
mindist
<
3
)
mindist
=
3
;
// = 3 mils
return
HitTest
(
aRefPoint
,
mindist
,
DefaultTransformMatrix
);
}
/** Function HitTest
* @return true if the point aPosRef is near this object
* @param aRefPoint = a wxPoint to test
* @param aThreshold = max distance to this object (usually the half thickness of a line)
* @param aTransMat = the transform matrix
*/
bool
LibDrawSquare
::
HitTest
(
wxPoint
aRefPoint
,
int
aThreshold
,
const
int
aTransMat
[
2
][
2
]
)
{
wxPoint
actualStart
=
TransformCoordinate
(
aTransMat
,
m_Pos
);
wxPoint
actualEnd
=
TransformCoordinate
(
aTransMat
,
m_End
);
// locate lower segment
wxPoint
start
,
end
;
start
=
actualStart
;
end
.
x
=
actualEnd
.
x
;
end
.
y
=
actualStart
.
y
;
if
(
TestSegmentHit
(
aRefPoint
,
start
,
end
,
aThreshold
)
)
return
true
;
// locate right segment
start
.
x
=
actualEnd
.
x
;
end
.
y
=
actualEnd
.
y
;
if
(
TestSegmentHit
(
aRefPoint
,
start
,
end
,
aThreshold
)
)
return
true
;
// locate upper segment
start
.
y
=
actualEnd
.
y
;
end
.
x
=
actualStart
.
x
;
if
(
TestSegmentHit
(
aRefPoint
,
start
,
end
,
aThreshold
)
)
return
true
;
// locate left segment
start
.
x
=
actualStart
.
x
;
end
.
x
=
actualStart
.
y
;
if
(
TestSegmentHit
(
aRefPoint
,
start
,
end
,
aThreshold
)
)
return
true
;
return
false
;
}
/**************************/
/**************************/
/** class LibDrawSegment **/
/** class LibDrawSegment **/
...
@@ -939,6 +801,36 @@ void LibDrawSegment::DisplayInfo( WinEDA_DrawFrame* frame )
...
@@ -939,6 +801,36 @@ void LibDrawSegment::DisplayInfo( WinEDA_DrawFrame* frame )
frame
->
MsgPanel
->
Affiche_1_Parametre
(
60
,
_
(
"Bounding box"
),
msg
,
BROWN
);
frame
->
MsgPanel
->
Affiche_1_Parametre
(
60
,
_
(
"Bounding box"
),
msg
,
BROWN
);
}
}
/**
* Function HitTest
* tests if the given wxPoint is within the bounds of this object.
* @param aRefPos A wxPoint to test
* @return bool - true if a hit, else false
*/
bool
LibDrawSegment
::
HitTest
(
const
wxPoint
&
aPosRef
)
{
int
mindist
=
m_Width
?
m_Width
/
2
:
g_DrawDefaultLineThickness
/
2
;
// Have a minimal tolerance for hit test
if
(
mindist
<
3
)
mindist
=
3
;
// = 3 mils
return
HitTest
(
aPosRef
,
mindist
,
DefaultTransformMatrix
);
}
/** Function HitTest
* @return true if the point aPosRef is near this object
* @param aPosRef = a wxPoint to test
* @param aThreshold = max distance to this object (usually the half thickness of a line)
* @param aTransMat = the transform matrix
*/
bool
LibDrawSegment
::
HitTest
(
wxPoint
aPosRef
,
int
aThreshold
,
const
int
aTransMat
[
2
][
2
]
)
{
wxPoint
start
=
TransformCoordinate
(
aTransMat
,
m_Pos
);
wxPoint
end
=
TransformCoordinate
(
aTransMat
,
m_End
);
return
TestSegmentHit
(
aPosRef
,
start
,
end
,
aThreshold
);
}
/***************************/
/***************************/
/** class LibDrawPolyline **/
/** class LibDrawPolyline **/
...
@@ -1108,6 +1000,21 @@ void LibDrawPolyline::Draw( WinEDA_DrawPanel* aPanel, wxDC* aDC,
...
@@ -1108,6 +1000,21 @@ void LibDrawPolyline::Draw( WinEDA_DrawPanel* aPanel, wxDC* aDC,
}
}
/**
* Function HitTest
* tests if the given wxPoint is within the bounds of this object.
* @param aRefPos A wxPoint to test
* @return bool - true if a hit, else false
*/
bool
LibDrawPolyline
::
HitTest
(
const
wxPoint
&
aRefPos
)
{
int
mindist
=
m_Width
?
m_Width
/
2
:
g_DrawDefaultLineThickness
/
2
;
// Have a minimal tolerance for hit test
if
(
mindist
<
3
)
mindist
=
3
;
// = 3 mils
return
HitTest
(
aRefPos
,
mindist
,
DefaultTransformMatrix
);
}
/** Function HitTest
/** Function HitTest
* @return true if the point aPosRef is near a segment
* @return true if the point aPosRef is near a segment
* @param aPosRef = a wxPoint to test
* @param aPosRef = a wxPoint to test
...
@@ -1123,10 +1030,8 @@ bool LibDrawPolyline::HitTest( wxPoint aPosRef, int aThreshold,
...
@@ -1123,10 +1030,8 @@ bool LibDrawPolyline::HitTest( wxPoint aPosRef, int aThreshold,
{
{
start
=
TransformCoordinate
(
aTransMat
,
m_PolyPoints
[
ii
-
1
]
);
start
=
TransformCoordinate
(
aTransMat
,
m_PolyPoints
[
ii
-
1
]
);
end
=
TransformCoordinate
(
aTransMat
,
m_PolyPoints
[
ii
]
);
end
=
TransformCoordinate
(
aTransMat
,
m_PolyPoints
[
ii
]
);
ref
=
aPosRef
-
start
;
end
-=
start
;
if
(
distance
(
end
.
x
,
end
.
y
,
ref
.
x
,
ref
.
y
,
aThreshold
)
)
if
(
TestSegmentHit
(
aPosRef
,
start
,
end
,
aThreshold
)
)
return
true
;
return
true
;
}
}
...
...
eeschema/classes_body_items.h
View file @
535a4d1f
...
@@ -161,6 +161,29 @@ public:
...
@@ -161,6 +161,29 @@ public:
virtual
bool
Save
(
FILE
*
aFile
)
const
=
0
;
virtual
bool
Save
(
FILE
*
aFile
)
const
=
0
;
virtual
bool
Load
(
char
*
line
,
wxString
&
errorMsg
)
=
0
;
virtual
bool
Load
(
char
*
line
,
wxString
&
errorMsg
)
=
0
;
/**
* Function HitTest
* tests if the given wxPoint is within the bounds of this object.
* @param refPos A wxPoint to test
* @return bool - true if a hit, else false
*/
virtual
bool
HitTest
(
const
wxPoint
&
refPos
)
{
return
false
;
// derived classes should override this function
}
/** Function HitTest (overlayed)
* @return true if the point aPosRef is near this object
* @param aPosRef = a wxPoint to test
* @param aThreshold = max distance to this object (usually the half thickness of a line)
* @param aTransMat = the transform matrix
*/
virtual
bool
HitTest
(
wxPoint
aPosRef
,
int
aThreshold
,
const
int
aTransMat
[
2
][
2
]
)
=
0
;
/** Function GetBoundingBox
* @return the boundary box for this, in library coordinates
*/
virtual
EDA_Rect
GetBoundingBox
()
virtual
EDA_Rect
GetBoundingBox
()
{
{
return
EDA_BaseStruct
::
GetBoundingBox
();
return
EDA_BaseStruct
::
GetBoundingBox
();
...
@@ -188,8 +211,12 @@ public:
...
@@ -188,8 +211,12 @@ public:
int
m_PinNumSize
;
int
m_PinNumSize
;
int
m_PinNameSize
;
/* Pin num and Pin name sizes */
int
m_PinNameSize
;
/* Pin num and Pin name sizes */
// int m_PinNumWidth, m_PinNameWidth; /* (Currently Unused) Pin num and Pin name text width */
// (Currently Unused) Pin num and Pin name text opt: italic/normal/bold, 0 = default:
wxPoint
m_Pos
;
/* Position or centre (Arc and Circle) or start
char
m_PinNumShapeOpt
,
m_PinNameShapeOpt
;
// (Currently Unused) Pin num and Pin name text opt position, 0 = default:
char
m_PinNumPositionOpt
,
m_PinNamePositionOpt
;
wxPoint
m_Pos
;
/* Position or centre (Arc and Circle) or start
* point (segments) */
* point (segments) */
int
m_Width
;
/* Line width */
int
m_Width
;
/* Line width */
...
@@ -217,6 +244,22 @@ public:
...
@@ -217,6 +244,22 @@ public:
virtual
bool
Load
(
char
*
line
,
wxString
&
errorMsg
);
virtual
bool
Load
(
char
*
line
,
wxString
&
errorMsg
);
/**
* Function HitTest
* tests if the given wxPoint is within the bounds of this object.
* @param aRefPos A wxPoint to test
* @return bool - true if a hit, else false
*/
virtual
bool
HitTest
(
const
wxPoint
&
aRefPos
);
/** Function HitTest
* @return true if the point aPosRef is near this object
* @param aPosRef = a wxPoint to test
* @param aThreshold = max distance to this object (usually the half thickness of a line)
* @param aTransMat = the transform matrix
*/
virtual
bool
HitTest
(
wxPoint
aPosRef
,
int
aThreshold
,
const
int
aTransMat
[
2
][
2
]
);
LibDrawPin
*
GenCopy
();
LibDrawPin
*
GenCopy
();
virtual
void
DisplayInfo
(
WinEDA_DrawFrame
*
frame
);
virtual
void
DisplayInfo
(
WinEDA_DrawFrame
*
frame
);
virtual
EDA_Rect
GetBoundingBox
();
virtual
EDA_Rect
GetBoundingBox
();
...
@@ -288,7 +331,14 @@ public:
...
@@ -288,7 +331,14 @@ public:
* @return bool - true if a hit, else false
* @return bool - true if a hit, else false
*/
*/
virtual
bool
HitTest
(
const
wxPoint
&
aRefPos
);
virtual
bool
HitTest
(
const
wxPoint
&
aRefPos
);
/** Function HitTest
* @return true if the point aPosRef is near this object
* @param aPosRef = a wxPoint to test
* @param aThreshold = max distance to this object (usually the half thickness of a line)
* @param aTransMat = the transform matrix
*/
virtual
bool
HitTest
(
wxPoint
aPosRef
,
int
aThreshold
,
const
int
aTransMat
[
2
][
2
]
);
LibDrawArc
*
GenCopy
();
LibDrawArc
*
GenCopy
();
...
@@ -339,6 +389,14 @@ public:
...
@@ -339,6 +389,14 @@ public:
*/
*/
virtual
bool
HitTest
(
const
wxPoint
&
aRefPos
);
virtual
bool
HitTest
(
const
wxPoint
&
aRefPos
);
/** Function HitTest
* @return true if the point aPosRef is near this object
* @param aPosRef = a wxPoint to test
* @param aThreshold = max distance to this object (usually the half thickness of a line)
* @param aTransMat = the transform matrix
*/
virtual
bool
HitTest
(
wxPoint
aPosRef
,
int
aThreshold
,
const
int
aTransMat
[
2
][
2
]
);
LibDrawCircle
*
GenCopy
();
LibDrawCircle
*
GenCopy
();
void
Draw
(
WinEDA_DrawPanel
*
aPanel
,
wxDC
*
aDC
,
const
wxPoint
&
aOffset
,
void
Draw
(
WinEDA_DrawPanel
*
aPanel
,
wxDC
*
aDC
,
const
wxPoint
&
aOffset
,
...
@@ -385,6 +443,14 @@ public:
...
@@ -385,6 +443,14 @@ public:
*/
*/
virtual
bool
HitTest
(
const
wxPoint
&
refPos
);
virtual
bool
HitTest
(
const
wxPoint
&
refPos
);
/** Function HitTest
* @return true if the point aPosRef is near a segment
* @param aPosRef = a wxPoint to test, in eeschema coordinates
* @param aThreshold = max distance to a segment
* @param aTransMat = the transform matrix
*/
virtual
bool
HitTest
(
wxPoint
aPosRef
,
int
aThreshold
,
const
int
aTransMat
[
2
][
2
]
);
/**
/**
* Function HitTest (overlayed)
* Function HitTest (overlayed)
* tests if the given EDA_Rect intersect this object.
* tests if the given EDA_Rect intersect this object.
...
@@ -436,6 +502,22 @@ public:
...
@@ -436,6 +502,22 @@ public:
virtual
bool
Save
(
FILE
*
aFile
)
const
;
virtual
bool
Save
(
FILE
*
aFile
)
const
;
virtual
bool
Load
(
char
*
line
,
wxString
&
errorMsg
);
virtual
bool
Load
(
char
*
line
,
wxString
&
errorMsg
);
/**
* Function HitTest
* tests if the given wxPoint is within the bounds of this object.
* @param aRefPos A wxPoint to test
* @return bool - true if a hit, else false
*/
virtual
bool
HitTest
(
const
wxPoint
&
aRefPos
);
/** Function HitTest
* @return true if the point aPosRef is near this object
* @param aPosRef = a wxPoint to test
* @param aThreshold = max distance to this object (usually the half thickness of a line)
* @param aTransMat = the transform matrix
*/
virtual
bool
HitTest
(
wxPoint
aPosRef
,
int
aThreshold
,
const
int
aTransMat
[
2
][
2
]
);
LibDrawSquare
*
GenCopy
();
LibDrawSquare
*
GenCopy
();
void
Draw
(
WinEDA_DrawPanel
*
aPanel
,
wxDC
*
aDC
,
const
wxPoint
&
aOffset
,
void
Draw
(
WinEDA_DrawPanel
*
aPanel
,
wxDC
*
aDC
,
const
wxPoint
&
aOffset
,
...
@@ -476,6 +558,22 @@ public:
...
@@ -476,6 +558,22 @@ public:
virtual
bool
Save
(
FILE
*
aFile
)
const
;
virtual
bool
Save
(
FILE
*
aFile
)
const
;
virtual
bool
Load
(
char
*
line
,
wxString
&
errorMsg
);
virtual
bool
Load
(
char
*
line
,
wxString
&
errorMsg
);
/**
* Function HitTest
* tests if the given wxPoint is within the bounds of this object.
* @param aRefPos A wxPoint to test
* @return bool - true if a hit, else false
*/
virtual
bool
HitTest
(
const
wxPoint
&
aRefPos
);
/** Function HitTest
* @return true if the point aPosRef is near this object
* @param aPosRef = a wxPoint to test
* @param aThreshold = max distance to this object (usually the half thickness of a line)
* @param aTransMat = the transform matrix
*/
virtual
bool
HitTest
(
wxPoint
aPosRef
,
int
aThreshold
,
const
int
aTransMat
[
2
][
2
]
);
LibDrawSegment
*
GenCopy
();
LibDrawSegment
*
GenCopy
();
void
Draw
(
WinEDA_DrawPanel
*
aPanel
,
wxDC
*
aDC
,
const
wxPoint
&
aOffset
,
void
Draw
(
WinEDA_DrawPanel
*
aPanel
,
wxDC
*
aDC
,
const
wxPoint
&
aOffset
,
...
@@ -523,13 +621,21 @@ public:
...
@@ -523,13 +621,21 @@ public:
*/
*/
unsigned
GetCornerCount
()
const
{
return
m_PolyPoints
.
size
();
}
unsigned
GetCornerCount
()
const
{
return
m_PolyPoints
.
size
();
}
/**
* Function HitTest
* tests if the given wxPoint is within the bounds of this object.
* @param aRefPos A wxPoint to test
* @return bool - true if a hit, else false
*/
virtual
bool
HitTest
(
const
wxPoint
&
aRefPos
);
/** Function HitTest
/** Function HitTest
* @return true if the point aPosRef is near a segment
* @return true if the point aPosRef is near a segment
* @param aPosRef = a wxPoint to test
* @param aPosRef = a wxPoint to test
* @param aThreshold = max distance to a segment
* @param aThreshold = max distance to a segment
* @param aTransMat = the transform matrix
* @param aTransMat = the transform matrix
*/
*/
bool
HitTest
(
wxPoint
aPosRef
,
int
aThreshold
,
const
int
aTransMat
[
2
][
2
]
);
virtual
bool
HitTest
(
wxPoint
aPosRef
,
int
aThreshold
,
const
int
aTransMat
[
2
][
2
]
);
/** Function GetBoundingBox
/** Function GetBoundingBox
* @return the boundary box for this, in library coordinates
* @return the boundary box for this, in library coordinates
...
...
eeschema/cleanup.cpp
View file @
535a4d1f
...
@@ -5,6 +5,7 @@
...
@@ -5,6 +5,7 @@
#include "fctsys.h"
#include "fctsys.h"
#include "appl_wxstruct.h"
#include "appl_wxstruct.h"
#include "common.h"
#include "common.h"
#include "trigo.h"
#include "confirm.h"
#include "confirm.h"
#include "class_drawpickedstruct.h"
#include "class_drawpickedstruct.h"
#include "program.h"
#include "program.h"
...
@@ -16,8 +17,7 @@
...
@@ -16,8 +17,7 @@
/* Routines locales */
/* Routines locales */
static
int
TstAlignSegment
(
EDA_DrawLineStruct
*
RefSegm
,
static
int
TstAlignSegment
(
EDA_DrawLineStruct
*
RefSegm
,
EDA_DrawLineStruct
*
TstSegm
);
EDA_DrawLineStruct
*
TstSegm
);
/* Variable locales */
/* Variable locales */
...
@@ -37,7 +37,7 @@ bool SCH_SCREEN::SchematicCleanUp( wxDC* DC )
...
@@ -37,7 +37,7 @@ bool SCH_SCREEN::SchematicCleanUp( wxDC* DC )
WinEDA_SchematicFrame
*
frame
;
WinEDA_SchematicFrame
*
frame
;
frame
=
(
WinEDA_SchematicFrame
*
)
wxGetApp
().
GetTopWindow
();
frame
=
(
WinEDA_SchematicFrame
*
)
wxGetApp
().
GetTopWindow
();
DrawList
=
EEDrawList
;
DrawList
=
EEDrawList
;
for
(
;
DrawList
!=
NULL
;
DrawList
=
DrawList
->
Next
()
)
for
(
;
DrawList
!=
NULL
;
DrawList
=
DrawList
->
Next
()
)
...
@@ -50,7 +50,7 @@ bool SCH_SCREEN::SchematicCleanUp( wxDC* DC )
...
@@ -50,7 +50,7 @@ bool SCH_SCREEN::SchematicCleanUp( wxDC* DC )
if
(
TstDrawList
->
Type
()
==
DRAW_SEGMENT_STRUCT_TYPE
)
if
(
TstDrawList
->
Type
()
==
DRAW_SEGMENT_STRUCT_TYPE
)
{
{
flag
=
TstAlignSegment
(
(
EDA_DrawLineStruct
*
)
DrawList
,
flag
=
TstAlignSegment
(
(
EDA_DrawLineStruct
*
)
DrawList
,
(
EDA_DrawLineStruct
*
)
TstDrawList
);
(
EDA_DrawLineStruct
*
)
TstDrawList
);
if
(
flag
)
/* Suppression de TstSegm */
if
(
flag
)
/* Suppression de TstSegm */
{
{
/* keep the bits set in .m_Flags, because the deleted segment can be flagged */
/* keep the bits set in .m_Flags, because the deleted segment can be flagged */
...
@@ -87,7 +87,7 @@ void BreakSegmentOnJunction( SCH_SCREEN* Screen )
...
@@ -87,7 +87,7 @@ void BreakSegmentOnJunction( SCH_SCREEN* Screen )
if
(
Screen
==
NULL
)
if
(
Screen
==
NULL
)
{
{
DisplayError
(
NULL
,
DisplayError
(
NULL
,
wxT
(
"BreakSegmentOnJunction() error: NULL screen"
)
);
wxT
(
"BreakSegmentOnJunction() error: NULL screen"
)
);
return
;
return
;
}
}
...
@@ -144,7 +144,6 @@ DrawPickedStruct* BreakSegment( SCH_SCREEN* screen,
...
@@ -144,7 +144,6 @@ DrawPickedStruct* BreakSegment( SCH_SCREEN* screen,
{
{
EDA_BaseStruct
*
DrawList
;
EDA_BaseStruct
*
DrawList
;
EDA_DrawLineStruct
*
segment
,
*
NewSegment
;
EDA_DrawLineStruct
*
segment
,
*
NewSegment
;
int
ox
,
oy
,
fx
,
fy
;
DrawPickedStruct
*
List
=
NULL
;
DrawPickedStruct
*
List
=
NULL
;
DrawList
=
screen
->
EEDrawList
;
DrawList
=
screen
->
EEDrawList
;
...
@@ -154,17 +153,13 @@ DrawPickedStruct* BreakSegment( SCH_SCREEN* screen,
...
@@ -154,17 +153,13 @@ DrawPickedStruct* BreakSegment( SCH_SCREEN* screen,
{
{
case
DRAW_SEGMENT_STRUCT_TYPE
:
case
DRAW_SEGMENT_STRUCT_TYPE
:
segment
=
(
EDA_DrawLineStruct
*
)
DrawList
;
segment
=
(
EDA_DrawLineStruct
*
)
DrawList
;
ox
=
segment
->
m_Start
.
x
;
oy
=
segment
->
m_Start
.
y
;
fx
=
segment
->
m_End
.
x
;
fy
=
segment
->
m_End
.
y
;
if
(
!
TestSegmentHit
(
breakpoint
,
segment
->
m_Start
,
segment
->
m_End
,
0
)
)
if
(
distance
(
fx
-
ox
,
fy
-
oy
,
breakpoint
.
x
-
ox
,
breakpoint
.
y
-
oy
,
0
)
==
0
)
break
;
break
;
/* Segment connecte: doit etre coupe en 2 si px,py n'est
/* Segment connecte: doit etre coupe en 2 si px,py n'est
* pas une extremite */
* pas une extremite */
if
(
(
ox
==
breakpoint
.
x
)
&&
(
oy
==
breakpoint
.
y
)
)
if
(
(
segment
->
m_Start
==
breakpoint
)
||
(
segment
->
m_End
==
breakpoint
)
)
break
;
if
(
(
fx
==
breakpoint
.
x
)
&&
(
fy
==
breakpoint
.
y
)
)
break
;
break
;
/* Ici il faut couper le segment en 2 */
/* Ici il faut couper le segment en 2 */
if
(
PutInUndoList
)
// First: put copy of the old segment in undo list
if
(
PutInUndoList
)
// First: put copy of the old segment in undo list
...
...
eeschema/locate.cpp
View file @
535a4d1f
...
@@ -15,15 +15,11 @@
...
@@ -15,15 +15,11 @@
#include "protos.h"
#include "protos.h"
/* Routines exportees */
int
distance
(
int
dx
,
int
dy
,
int
spot_cX
,
int
spot_cY
,
int
seuil
);
/* Routines Locales */
/* Routines Locales */
static
SCH_ITEM
*
LastSnappedStruct
=
NULL
;
static
SCH_ITEM
*
LastSnappedStruct
=
NULL
;
static
int
PickedBoxMinX
,
PickedBoxMinY
,
PickedBoxMaxX
,
PickedBoxMaxY
;
static
int
PickedBoxMinX
,
PickedBoxMinY
,
PickedBoxMaxX
,
PickedBoxMaxY
;
static
bool
IsBox1InBox2
(
int
StartX1
,
int
StartY1
,
int
EndX1
,
int
EndY1
,
static
bool
IsBox1InBox2
(
int
StartX1
,
int
StartY1
,
int
EndX1
,
int
EndY1
,
int
StartX2
,
int
StartY2
,
int
EndX2
,
int
EndY2
);
int
StartX2
,
int
StartY2
,
int
EndX2
,
int
EndY2
);
static
bool
IsPointOnSegment
(
wxPoint
aPosRef
,
wxPoint
aSegmStart
,
wxPoint
aSegmEnd
,
int
aDist
=
0
);
static
bool
SnapPoint2
(
const
wxPoint
&
aPosRef
,
int
SearchMask
,
static
bool
SnapPoint2
(
const
wxPoint
&
aPosRef
,
int
SearchMask
,
SCH_ITEM
*
DrawList
,
DrawPickedStruct
*
DontSnapList
,
double
aScaleFactor
);
SCH_ITEM
*
DrawList
,
DrawPickedStruct
*
DontSnapList
,
double
aScaleFactor
);
...
@@ -208,6 +204,7 @@ bool SnapPoint2( const wxPoint& aPosRef, int SearchMask,
...
@@ -208,6 +204,7 @@ bool SnapPoint2( const wxPoint& aPosRef, int SearchMask,
if
(
DontSnap
->
m_PickedStruct
==
DrawList
)
if
(
DontSnap
->
m_PickedStruct
==
DrawList
)
continue
;
continue
;
int
hitminDist
=
MAX
(
g_DrawDefaultLineThickness
,
3
)
;
switch
(
DrawList
->
Type
()
)
switch
(
DrawList
->
Type
()
)
{
{
case
DRAW_POLYLINE_STRUCT_TYPE
:
case
DRAW_POLYLINE_STRUCT_TYPE
:
...
@@ -218,8 +215,8 @@ bool SnapPoint2( const wxPoint& aPosRef, int SearchMask,
...
@@ -218,8 +215,8 @@ bool SnapPoint2( const wxPoint& aPosRef, int SearchMask,
for
(
unsigned
i
=
0
;
i
<
STRUCT
->
GetCornerCount
()
-
1
;
i
++
)
for
(
unsigned
i
=
0
;
i
<
STRUCT
->
GetCornerCount
()
-
1
;
i
++
)
{
{
if
(
IsPointOnSegmen
t
(
aPosRef
,
STRUCT
->
m_PolyPoints
[
i
],
if
(
TestSegmentHi
t
(
aPosRef
,
STRUCT
->
m_PolyPoints
[
i
],
STRUCT
->
m_PolyPoints
[
i
+
1
]
)
)
STRUCT
->
m_PolyPoints
[
i
+
1
]
,
hitminDist
)
)
{
{
LastSnappedStruct
=
DrawList
;
LastSnappedStruct
=
DrawList
;
return
TRUE
;
return
TRUE
;
...
@@ -234,7 +231,7 @@ bool SnapPoint2( const wxPoint& aPosRef, int SearchMask,
...
@@ -234,7 +231,7 @@ bool SnapPoint2( const wxPoint& aPosRef, int SearchMask,
if
(
!
(
SearchMask
&
(
DRAWITEM
|
WIREITEM
|
BUSITEM
)
)
)
if
(
!
(
SearchMask
&
(
DRAWITEM
|
WIREITEM
|
BUSITEM
)
)
)
break
;
break
;
if
(
IsPointOnSegment
(
aPosRef
,
STRUCT
->
m_Start
,
STRUCT
->
m_End
)
)
if
(
TestSegmentHit
(
aPosRef
,
STRUCT
->
m_Start
,
STRUCT
->
m_End
,
0
)
)
{
{
if
(
(
(
SearchMask
&
DRAWITEM
)
&&
(
STRUCT
->
GetLayer
()
==
LAYER_NOTES
)
)
if
(
(
(
SearchMask
&
DRAWITEM
)
&&
(
STRUCT
->
GetLayer
()
==
LAYER_NOTES
)
)
||
(
(
SearchMask
&
WIREITEM
)
&&
(
STRUCT
->
GetLayer
()
==
LAYER_WIRE
)
)
||
(
(
SearchMask
&
WIREITEM
)
&&
(
STRUCT
->
GetLayer
()
==
LAYER_WIRE
)
)
...
@@ -266,7 +263,7 @@ bool SnapPoint2( const wxPoint& aPosRef, int SearchMask,
...
@@ -266,7 +263,7 @@ bool SnapPoint2( const wxPoint& aPosRef, int SearchMask,
if
(
!
(
SearchMask
&
(
RACCORDITEM
)
)
)
if
(
!
(
SearchMask
&
(
RACCORDITEM
)
)
)
break
;
break
;
if
(
IsPointOnSegment
(
aPosRef
,
STRUCT
->
m_Pos
,
STRUCT
->
m_End
()
)
)
if
(
TestSegmentHit
(
aPosRef
,
STRUCT
->
m_Pos
,
STRUCT
->
m_End
(),
hitminDist
)
)
{
{
LastSnappedStruct
=
DrawList
;
LastSnappedStruct
=
DrawList
;
return
TRUE
;
return
TRUE
;
...
@@ -654,25 +651,6 @@ static bool IsBox1InBox2( int StartX1, int StartY1, int EndX1, int EndY1,
...
@@ -654,25 +651,6 @@ static bool IsBox1InBox2( int StartX1, int StartY1, int EndX1, int EndY1,
}
}
/********************************************************************************/
static
bool
IsPointOnSegment
(
wxPoint
aPosRef
,
wxPoint
aSegmStart
,
wxPoint
aSegmEnd
,
int
aDist
)
/********************************************************************************/
/* Routine detectant que le point pX,pY est sur le Segment X1,Y1 a X2,Y2
* Retourne TRUE ou FALSE.
*/
{
/* Move coordinates origin to aSegmStart */
aPosRef
-=
aSegmStart
;
aSegmEnd
-=
aSegmStart
;
if
(
distance
(
aSegmEnd
.
x
,
aSegmEnd
.
y
,
aPosRef
.
x
,
aPosRef
.
y
,
aDist
)
)
return
TRUE
;
else
return
FALSE
;
}
/*********************************************************************************/
/*********************************************************************************/
LibEDA_BaseStruct
*
LocateDrawItem
(
SCH_SCREEN
*
Screen
,
LibEDA_BaseStruct
*
LocateDrawItem
(
SCH_SCREEN
*
Screen
,
...
@@ -702,15 +680,6 @@ LibEDA_BaseStruct* LocateDrawItem( SCH_SCREEN* Screen,
...
@@ -702,15 +680,6 @@ LibEDA_BaseStruct* LocateDrawItem( SCH_SCREEN* Screen,
DrawItem
=
LibEntry
->
m_Drawings
;
DrawItem
=
LibEntry
->
m_Drawings
;
int
seuil
=
3
;
/* Tolerance: 1/2 pas de petite grille */
// Calculates aRefPoint according to library components Y axis convention:
// Y axis is bottom to top
// RefPoint Y is top to bottom
// so negate the aRefPoint Y coordinate value does the trick
wxPoint
pointInLibitemsSpace
=
aRefPoint
;
NEGATE
(
pointInLibitemsSpace
.
y
);
for
(
;
DrawItem
!=
NULL
;
DrawItem
=
DrawItem
->
Next
()
)
for
(
;
DrawItem
!=
NULL
;
DrawItem
=
DrawItem
->
Next
()
)
{
{
if
(
Unit
&&
DrawItem
->
m_Unit
&&
(
Unit
!=
DrawItem
->
m_Unit
)
)
if
(
Unit
&&
DrawItem
->
m_Unit
&&
(
Unit
!=
DrawItem
->
m_Unit
)
)
...
@@ -721,88 +690,45 @@ LibEDA_BaseStruct* LocateDrawItem( SCH_SCREEN* Screen,
...
@@ -721,88 +690,45 @@ LibEDA_BaseStruct* LocateDrawItem( SCH_SCREEN* Screen,
switch
(
DrawItem
->
Type
()
)
switch
(
DrawItem
->
Type
()
)
{
{
case
COMPONENT_ARC_DRAW_TYPE
:
case
COMPONENT_ARC_DRAW_TYPE
:
{
LibDrawArc
*
Arc
=
(
LibDrawArc
*
)
DrawItem
;
if
(
(
masque
&
LOCATE_COMPONENT_ARC_DRAW_TYPE
)
==
0
)
if
(
(
masque
&
LOCATE_COMPONENT_ARC_DRAW_TYPE
)
==
0
)
break
;
break
;
if
(
Arc
->
HitTest
(
pointInLibitemsSpace
)
)
if
(
DrawItem
->
HitTest
(
aRefPoint
)
)
return
DrawItem
;
return
DrawItem
;
}
break
;
break
;
case
COMPONENT_CIRCLE_DRAW_TYPE
:
case
COMPONENT_CIRCLE_DRAW_TYPE
:
{
LibDrawCircle
*
Circle
=
(
LibDrawCircle
*
)
DrawItem
;
if
(
(
masque
&
LOCATE_COMPONENT_CIRCLE_DRAW_TYPE
)
==
0
)
if
(
(
masque
&
LOCATE_COMPONENT_CIRCLE_DRAW_TYPE
)
==
0
)
break
;
break
;
if
(
Circle
->
HitTest
(
pointInLibitemsSpace
)
)
if
(
DrawItem
->
HitTest
(
aRefPoint
)
)
return
DrawItem
;
return
DrawItem
;
}
break
;
break
;
case
COMPONENT_RECT_DRAW_TYPE
:
case
COMPONENT_RECT_DRAW_TYPE
:
// Locate a rect if the mouse cursor is on a side of this rectangle
{
// Locate a rect if the mouse cursor is on a side of this rectangle
LibDrawSquare
*
Square
=
(
LibDrawSquare
*
)
DrawItem
;
if
(
(
masque
&
LOCATE_COMPONENT_RECT_DRAW_TYPE
)
==
0
)
if
(
(
masque
&
LOCATE_COMPONENT_RECT_DRAW_TYPE
)
==
0
)
break
;
break
;
wxPoint
start
,
end
;
if
(
DrawItem
->
HitTest
(
aRefPoint
)
)
start
.
x
=
Square
->
m_Pos
.
x
;
start
.
y
=
-
Square
->
m_Pos
.
y
;
end
.
x
=
Square
->
m_End
.
x
;
end
.
y
=
-
Square
->
m_Pos
.
y
;
// locate lower segment
if
(
IsPointOnSegment
(
aRefPoint
,
start
,
end
,
seuil
)
)
return
DrawItem
;
// locate right segment
start
.
x
=
Square
->
m_End
.
x
;
end
.
y
=
-
Square
->
m_End
.
y
;
if
(
IsPointOnSegment
(
aRefPoint
,
start
,
end
,
seuil
)
)
return
DrawItem
;
// locate upper segment
start
.
y
=
-
Square
->
m_End
.
y
;
end
.
x
=
Square
->
m_Pos
.
x
;
if
(
IsPointOnSegment
(
aRefPoint
,
start
,
end
,
seuil
)
)
return
DrawItem
;
// locate left segment
start
.
x
=
Square
->
m_Pos
.
x
;
end
.
x
=
-
Square
->
m_Pos
.
y
;
if
(
IsPointOnSegment
(
aRefPoint
,
start
,
end
,
seuil
)
)
return
DrawItem
;
return
DrawItem
;
}
break
;
break
;
case
COMPONENT_POLYLINE_DRAW_TYPE
:
case
COMPONENT_POLYLINE_DRAW_TYPE
:
{
LibDrawPolyline
*
polyline
=
(
LibDrawPolyline
*
)
DrawItem
;
if
(
(
masque
&
LOCATE_COMPONENT_POLYLINE_DRAW_TYPE
)
==
0
)
if
(
(
masque
&
LOCATE_COMPONENT_POLYLINE_DRAW_TYPE
)
==
0
)
break
;
break
;
if
(
polyline
->
HitTest
(
aRefPoint
,
seuil
,
DefaultTransformMatrix
)
)
if
(
DrawItem
->
HitTest
(
aRefPoint
)
)
return
DrawItem
;
return
DrawItem
;
}
break
;
break
;
case
COMPONENT_LINE_DRAW_TYPE
:
case
COMPONENT_LINE_DRAW_TYPE
:
{
LibDrawSegment
*
Segment
=
(
LibDrawSegment
*
)
DrawItem
;
if
(
(
masque
&
LOCATE_COMPONENT_LINE_DRAW_TYPE
)
==
0
)
if
(
(
masque
&
LOCATE_COMPONENT_LINE_DRAW_TYPE
)
==
0
)
break
;
break
;
if
(
IsPointOnSegment
(
pointInLibitemsSpace
,
Segment
->
m_Pos
,
Segment
->
m_End
,
seuil
)
)
if
(
DrawItem
->
HitTest
(
aRefPoint
)
)
return
DrawItem
;
return
DrawItem
;
}
break
;
break
;
case
COMPONENT_GRAPHIC_TEXT_DRAW_TYPE
:
case
COMPONENT_GRAPHIC_TEXT_DRAW_TYPE
:
{
LibDrawText
*
Text
=
(
LibDrawText
*
)
DrawItem
;
if
(
(
masque
&
LOCATE_COMPONENT_GRAPHIC_TEXT_DRAW_TYPE
)
==
0
)
if
(
(
masque
&
LOCATE_COMPONENT_GRAPHIC_TEXT_DRAW_TYPE
)
==
0
)
break
;
break
;
if
(
Text
->
HitTest
(
pointInLibitemsSpace
)
)
if
(
DrawItem
->
HitTest
(
aRefPoint
)
)
return
DrawItem
;
/* Found! */
return
DrawItem
;
}
break
;
break
;
default
:
default
:
...
@@ -814,117 +740,6 @@ LibEDA_BaseStruct* LocateDrawItem( SCH_SCREEN* Screen,
...
@@ -814,117 +740,6 @@ LibEDA_BaseStruct* LocateDrawItem( SCH_SCREEN* Screen,
}
}
/****************************************************************/
int
distance
(
int
dx
,
int
dy
,
int
spot_cX
,
int
spot_cY
,
int
seuil
)
/****************************************************************/
/*
* Calcul de la distance du point spot_cx,spot_cy a un segment de droite,
* d'origine 0,0 et d'extremite dx, dy;
* retourne:
* 0 si distance > seuil
* 1 si distance <= seuil
* Variables utilisees ( sont ramenees au repere centre sur l'origine du segment)
* dx, dy = coord de l'extremite segment.
* spot_cX,spot_cY = coord du curseur souris
* la recherche se fait selon 4 cas:
* segment horizontal
* segment vertical
* segment quelconque
*/
{
int
cXrot
,
cYrot
,
/* coord du point (souris) dans le repere tourne */
segX
,
segY
;
/* coord extremite segment tj >= 0 */
int
pointX
,
pointY
;
/* coord point a tester dans repere modifie dans lequel
* segX et segY sont >=0 */
segX
=
dx
;
segY
=
dy
;
pointX
=
spot_cX
;
pointY
=
spot_cY
;
/*Recalcul coord pour que le segment soit dans 1er quadrant (coord >= 0)*/
if
(
segX
<
0
)
/* mise en0 par symetrie par rapport a l'axe Y */
{
segX
=
-
segX
;
pointX
=
-
pointX
;
}
if
(
segY
<
0
)
/* mise en > 0 par symymetrie par rapport a l'axe X */
{
segY
=
-
segY
;
pointY
=
-
pointY
;
}
if
(
segY
==
0
)
/* piste Horizontale */
{
if
(
abs
(
pointY
)
<=
seuil
)
{
if
(
(
pointX
>=
0
)
&&
(
pointX
<=
segX
)
)
return
1
;
/* Etude des extremites : cercle de rayon seuil */
if
(
(
pointX
<
0
)
&&
(
pointX
>=
-
seuil
)
)
{
if
(
(
(
pointX
*
pointX
)
+
(
pointY
*
pointY
)
)
<=
(
seuil
*
seuil
)
)
return
1
;
}
if
(
(
pointX
>
segX
)
&&
(
pointX
<=
(
segX
+
seuil
)
)
)
{
if
(
(
(
(
pointX
-
segX
)
*
(
pointX
-
segX
)
)
+
(
pointY
*
pointY
)
)
<=
(
seuil
*
seuil
)
)
return
1
;
}
}
}
else
if
(
segX
==
0
)
/* piste verticale */
{
if
(
abs
(
pointX
)
<=
seuil
)
{
if
(
(
pointY
>=
0
)
&&
(
pointY
<=
segY
)
)
return
1
;
if
(
(
pointY
<
0
)
&&
(
pointY
>=
-
seuil
)
)
{
if
(
(
(
pointY
*
pointY
)
+
(
pointX
*
pointX
)
)
<=
(
seuil
*
seuil
)
)
return
1
;
}
if
(
(
pointY
>
segY
)
&&
(
pointY
<=
(
segY
+
seuil
)
)
)
{
if
(
(
(
(
pointY
-
segY
)
*
(
pointY
-
segY
)
)
+
(
pointX
*
pointX
)
)
<=
(
seuil
*
seuil
)
)
return
1
;
}
}
}
else
/* orientation quelconque */
{
/* On fait un changement d'axe (rotation) de facon a ce que le segment
* de piste soit horizontal dans le nouveau repere */
int
angle
;
angle
=
(
int
)
(
atan2
(
(
double
)
segY
,
(
double
)
segX
)
*
1800
/
M_PI
);
cXrot
=
pointX
;
cYrot
=
pointY
;
RotatePoint
(
&
cXrot
,
&
cYrot
,
angle
);
/* Rotation du point a tester */
RotatePoint
(
&
segX
,
&
segY
,
angle
);
/* Rotation du segment */
/*la piste est Horizontale , par suite des modifs de coordonnes
* et d'axe, donc segX = longueur du segment */
if
(
abs
(
cYrot
)
<=
seuil
)
/* ok sur axe vertical) */
{
if
(
(
cXrot
>=
0
)
&&
(
cXrot
<=
segX
)
)
return
1
;
/* Etude des extremites : cercle de rayon seuil */
if
(
(
cXrot
<
0
)
&&
(
cXrot
>=
-
seuil
)
)
{
if
(
(
(
cXrot
*
cXrot
)
+
(
cYrot
*
cYrot
)
)
<=
(
seuil
*
seuil
)
)
return
1
;
}
if
(
(
cXrot
>
segX
)
&&
(
cXrot
<=
(
segX
+
seuil
)
)
)
{
if
(
(
(
(
cXrot
-
segX
)
*
(
cXrot
-
segX
)
)
+
(
cYrot
*
cYrot
)
)
<=
(
seuil
*
seuil
)
)
return
1
;
}
}
}
return
0
;
}
/*******************************************************************/
/*******************************************************************/
LibDrawPin
*
LocatePinByNumber
(
const
wxString
&
ePin_Number
,
LibDrawPin
*
LocatePinByNumber
(
const
wxString
&
ePin_Number
,
SCH_COMPONENT
*
eComponent
)
SCH_COMPONENT
*
eComponent
)
...
@@ -989,10 +804,6 @@ LibEDA_BaseStruct* LocatePin( const wxPoint& RefPos,
...
@@ -989,10 +804,6 @@ LibEDA_BaseStruct* LocatePin( const wxPoint& RefPos,
* Si convert = 0, le numero convert n'est pas teste
* Si convert = 0, le numero convert n'est pas teste
*/
*/
{
{
LibEDA_BaseStruct
*
DrawItem
;
LibDrawPin
*
Pin
;
int
x1
,
y1
,
x2
,
y2
;
if
(
Entry
==
NULL
)
if
(
Entry
==
NULL
)
return
NULL
;
return
NULL
;
...
@@ -1002,12 +813,12 @@ LibEDA_BaseStruct* LocatePin( const wxPoint& RefPos,
...
@@ -1002,12 +813,12 @@ LibEDA_BaseStruct* LocatePin( const wxPoint& RefPos,
return
NULL
;
return
NULL
;
}
}
DrawItem
=
Entry
->
m_Drawings
;
LibEDA_BaseStruct
*
DrawItem
=
Entry
->
m_Drawings
;
for
(
;
DrawItem
!=
NULL
;
DrawItem
=
DrawItem
->
Next
()
)
for
(
;
DrawItem
!=
NULL
;
DrawItem
=
DrawItem
->
Next
()
)
{
{
if
(
DrawItem
->
Type
()
==
COMPONENT_PIN_DRAW_TYPE
)
/* Pin Trouvee */
if
(
DrawItem
->
Type
()
==
COMPONENT_PIN_DRAW_TYPE
)
/* Pin Trouvee */
{
{
Pin
=
(
LibDrawPin
*
)
DrawItem
;
LibDrawPin
*
Pin
=
(
LibDrawPin
*
)
DrawItem
;
if
(
Unit
&&
DrawItem
->
m_Unit
&&
(
DrawItem
->
m_Unit
!=
Unit
)
)
if
(
Unit
&&
DrawItem
->
m_Unit
&&
(
DrawItem
->
m_Unit
!=
Unit
)
)
continue
;
continue
;
...
@@ -1015,36 +826,22 @@ LibEDA_BaseStruct* LocatePin( const wxPoint& RefPos,
...
@@ -1015,36 +826,22 @@ LibEDA_BaseStruct* LocatePin( const wxPoint& RefPos,
if
(
convert
&&
DrawItem
->
m_Convert
&&
(
DrawItem
->
m_Convert
!=
convert
)
)
if
(
convert
&&
DrawItem
->
m_Convert
&&
(
DrawItem
->
m_Convert
!=
convert
)
)
continue
;
continue
;
x2
=
Pin
->
m_Pos
.
x
;
y2
=
Pin
->
m_Pos
.
y
;
x1
=
Pin
->
ReturnPinEndPoint
().
x
;
y1
=
Pin
->
ReturnPinEndPoint
().
y
;
if
(
DrawLibItem
==
NULL
)
if
(
DrawLibItem
==
NULL
)
{
{
y1
=
-
y1
;
y2
=
-
y2
;
if
(
Pin
->
HitTest
(
RefPos
)
)
return
DrawItem
;
}
}
else
else
{
{
int
x
=
x1
,
y
=
y1
;
int
mindist
=
Pin
->
m_Width
?
Pin
->
m_Width
/
2
:
g_DrawDefaultLineThickness
/
2
;
x1
=
DrawLibItem
->
m_Pos
.
x
+
DrawLibItem
->
m_Transform
[
0
][
0
]
*
x
+
DrawLibItem
->
m_Transform
[
0
][
1
]
*
y
;
y1
=
DrawLibItem
->
m_Pos
.
y
+
DrawLibItem
->
m_Transform
[
1
][
0
]
*
x
+
DrawLibItem
->
m_Transform
[
1
][
1
]
*
y
;
x
=
x2
;
y
=
y2
;
x2
=
DrawLibItem
->
m_Pos
.
x
+
DrawLibItem
->
m_Transform
[
0
][
0
]
*
x
+
DrawLibItem
->
m_Transform
[
0
][
1
]
*
y
;
y2
=
DrawLibItem
->
m_Pos
.
y
+
DrawLibItem
->
m_Transform
[
1
][
0
]
*
x
+
DrawLibItem
->
m_Transform
[
1
][
1
]
*
y
;
}
if
(
x1
>
x2
)
EXCHG
(
x1
,
x2
);
if
(
y1
>
y2
)
EXCHG
(
y1
,
y2
);
if
(
(
RefPos
.
x
>=
x1
)
&&
(
RefPos
.
x
<=
x2
)
// Have a minimal tolerance for hit test
&&
(
RefPos
.
y
>=
y1
)
&&
(
RefPos
.
y
<=
y2
)
)
if
(
mindist
<
3
)
return
DrawItem
;
mindist
=
3
;
// = 3 mils
if
(
Pin
->
HitTest
(
RefPos
-
DrawLibItem
->
m_Pos
,
mindist
,
DrawLibItem
->
m_Transform
)
)
return
DrawItem
;
}
}
}
}
}
...
...
eeschema/protos.h
View file @
535a4d1f
...
@@ -139,12 +139,12 @@ SCH_ITEM * PickStruct(const wxPoint & refpos, BASE_SCREEN* screen, int SearchMas
...
@@ -139,12 +139,12 @@ SCH_ITEM * PickStruct(const wxPoint & refpos, BASE_SCREEN* screen, int SearchMas
Return:
Return:
-Bloc searc:
-Bloc searc
h
:
pointeur sur liste de pointeurs de structures si Plusieurs
pointeur sur liste de pointeurs de structures si Plusieurs
structures selectionnees.
structures selectionnees.
pointeur sur la structure si 1 seule
pointeur sur la structure si 1 seule
Positon se
ra
ch:
Positon se
ar
ch:
pointeur sur la structure.
pointeur sur la structure.
Si pas de structures selectionnees: retourne NULL */
Si pas de structures selectionnees: retourne NULL */
...
@@ -160,20 +160,6 @@ LibDrawPin * LocateAnyPin(SCH_ITEM *DrawList, const wxPoint & RefPos,
...
@@ -160,20 +160,6 @@ LibDrawPin * LocateAnyPin(SCH_ITEM *DrawList, const wxPoint & RefPos,
Hierarchical_PIN_Sheet_Struct
*
LocateAnyPinSheet
(
const
wxPoint
&
RefPos
,
Hierarchical_PIN_Sheet_Struct
*
LocateAnyPinSheet
(
const
wxPoint
&
RefPos
,
SCH_ITEM
*
DrawList
);
SCH_ITEM
*
DrawList
);
int
distance
(
int
dx
,
int
dy
,
int
spot_cX
,
int
spot_cY
,
int
seuil
);
/* Calcul de la distance du point spot_cx,spot_cy a un segment de droite,
d'origine 0,0 et d'extremite dx, dy;
retourne:
0 si distance > seuil
1 si distance <= seuil
Variables utilisees ( sont ramenees au repere centre sur l'origine du segment)
dx, dy = coord de l'extremite segment.
spot_cX,spot_cY = coord du curseur souris
la recherche se fait selon 4 cas:
segment horizontal
segment vertical
segment quelconque */
/***************/
/***************/
/* EEREDRAW.CPP */
/* EEREDRAW.CPP */
...
...
include/common.h
View file @
535a4d1f
...
@@ -271,13 +271,8 @@ void InitKiCadAbout( wxAboutDialogInfo& info);
...
@@ -271,13 +271,8 @@ void InitKiCadAbout( wxAboutDialogInfo& info);
wxString
GetBuildVersion
();
/* Return the build date */
wxString
GetBuildVersion
();
/* Return the build date */
wxString
GetAboutBuildVersion
();
/* Return custom build date for about dialog */
wxString
GetAboutBuildVersion
();
/* Return custom build date for about dialog */
void
Affiche_1_Parametre
(
WinEDA_DrawFrame
*
frame
,
/**
int
pos_X
,
* function Affiche_1_Parametre
const
wxString
&
texte_H
,
const
wxString
&
texte_L
,
int
color
);
/*
* Routine d'affichage d'un parametre.
* Routine d'affichage d'un parametre.
* pos_X = cadrage horizontal
* pos_X = cadrage horizontal
* si pos_X < 0 : la position horizontale est la derniere
* si pos_X < 0 : la position horizontale est la derniere
...
@@ -288,6 +283,11 @@ void Affiche_1_Parametre( WinEDA_DrawFrame* frame,
...
@@ -288,6 +283,11 @@ void Affiche_1_Parametre( WinEDA_DrawFrame* frame,
* si "", par d'affichage sur cette ligne
* si "", par d'affichage sur cette ligne
* color = couleur d'affichage
* color = couleur d'affichage
*/
*/
void
Affiche_1_Parametre
(
WinEDA_DrawFrame
*
frame
,
int
pos_X
,
const
wxString
&
texte_H
,
const
wxString
&
texte_L
,
int
color
);
void
AfficheDoc
(
WinEDA_DrawFrame
*
frame
,
const
wxString
&
Doc
,
void
AfficheDoc
(
WinEDA_DrawFrame
*
frame
,
const
wxString
&
Doc
,
const
wxString
&
KeyW
);
const
wxString
&
KeyW
);
...
...
include/trigo.h
View file @
535a4d1f
...
@@ -14,15 +14,27 @@ void RotatePoint( wxPoint* point, int angle );
...
@@ -14,15 +14,27 @@ void RotatePoint( wxPoint* point, int angle );
void
RotatePoint
(
wxPoint
*
point
,
const
wxPoint
&
centre
,
int
angle
);
void
RotatePoint
(
wxPoint
*
point
,
const
wxPoint
&
centre
,
int
angle
);
void
RotatePoint
(
double
*
pX
,
double
*
pY
,
int
angle
);
void
RotatePoint
(
double
*
pX
,
double
*
pY
,
int
angle
);
void
RotatePoint
(
double
*
pX
,
double
*
pY
,
double
cx
,
double
cy
,
int
angle
);
void
RotatePoint
(
double
*
pX
,
double
*
pY
,
double
cx
,
double
cy
,
int
angle
);
int
ArcTangente
(
int
dy
,
int
dx
);
/* Retourne l'arc tangente en 0.1 degres du vecteur de coord dx, dy
/** function ArcTangente
Retourne l'arc tangente en 0.1 degres du vecteur de coord dx, dy
entre -1800 et 1800
entre -1800 et 1800
Analogue a atan2 ( mais plus rapide pour les caculs si
Analogue a atan2 ( mais plus rapide pour les caculs si
l'angle est souvent 0, -1800, ou +- 900 */
l'angle est souvent 0, -1800, ou +- 900 */
int
ArcTangente
(
int
dy
,
int
dx
);
bool
DistanceTest
(
int
seuil
,
int
dx
,
int
dy
,
int
spot_cX
,
int
spot_cY
);
bool
DistanceTest
(
int
seuil
,
int
dx
,
int
dy
,
int
spot_cX
,
int
spot_cY
);
/** Function TestSegmentHit
* test for hit on line segment
* i.e. cursor within a given distance from segment
* @param aRefPoint = cursor (point to test) coords
* @param aStart is the first end-point of the line segment
* @param aEnd is the second end-point of the line segment
* @param aDist = maximum distance for hit
*/
bool
TestSegmentHit
(
wxPoint
aRefPoint
,
wxPoint
aStart
,
wxPoint
aEnd
,
int
aDist
);
/*******************/
/*******************/
/* Macro NEW_COORD */
/* Macro NEW_COORD */
/*******************/
/*******************/
...
...
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