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
e26cdada
Commit
e26cdada
authored
Sep 20, 2011
by
Wayne Stambaugh
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Translate French code names and comments and other minor code cleaning.
parent
4230ac4c
Changes
9
Show whitespace changes
Inline
Side-by-side
Showing
9 changed files
with
488 additions
and
517 deletions
+488
-517
wxBasePcbFrame.h
include/wxBasePcbFrame.h
+1
-2
wxPcbStruct.h
include/wxPcbStruct.h
+3
-3
class_dimension.cpp
pcbnew/class_dimension.cpp
+251
-297
class_dimension.h
pcbnew/class_dimension.h
+17
-12
class_zone.h
pcbnew/class_zone.h
+81
-59
dimension.cpp
pcbnew/dimension.cpp
+79
-83
edit.cpp
pcbnew/edit.cpp
+7
-6
onleftclick.cpp
pcbnew/onleftclick.cpp
+9
-11
plot_rtn.cpp
pcbnew/plot_rtn.cpp
+40
-44
No files found.
include/wxBasePcbFrame.h
View file @
e26cdada
...
...
@@ -20,7 +20,6 @@
/* Forward declarations of classes. */
class
WinEDA_CvpcbFrame
;
class
FOOTPRINT_EDIT_FRAME
;
class
BOARD
;
class
MODULE
;
...
...
@@ -461,7 +460,7 @@ public:
bool
aPlotVia
,
GRTraceMode
aPlotMode
,
bool
aSkipNPTH_Pads
=
false
);
void
Plot
_Serigraphie
(
PLOTTER
*
plotter
,
int
masque_layer
,
GRTraceMode
trace_mode
);
void
Plot
SilkScreen
(
PLOTTER
*
plotter
,
int
masque_layer
,
GRTraceMode
trace_mode
);
/**
* Function PlotDrillMark
...
...
include/wxPcbStruct.h
View file @
e26cdada
...
...
@@ -1145,9 +1145,9 @@ public:
void
Delete_Drawings_All_Layer
(
int
aLayer
);
// Dimension handling:
void
Install_Edit_Dimension
(
DIMENSION
*
Dimension
,
wxDC
*
DC
);
DIMENSION
*
Begin_Dimension
(
DIMENSION
*
Dimension
,
wxDC
*
DC
);
void
Delete
_Dimension
(
DIMENSION
*
Dimension
,
wxDC
*
DC
);
void
ShowDimensionPropertyDialog
(
DIMENSION
*
aDimension
,
wxDC
*
a
DC
);
DIMENSION
*
EditDimension
(
DIMENSION
*
aDimension
,
wxDC
*
a
DC
);
void
Delete
Dimension
(
DIMENSION
*
aDimension
,
wxDC
*
a
DC
);
// netlist handling:
void
InstallNetlistFrame
(
wxDC
*
DC
);
...
...
pcbnew/class_dimension.cpp
View file @
e26cdada
/**
***************************/
/* DIMENSION class definition */
/****************************
*/
/**
* @file class_dimension.cpp
*/
#include "fctsys.h"
#include "gr_basic.h"
...
...
@@ -14,6 +14,7 @@
#include "protos.h"
#include "richio.h"
DIMENSION
::
DIMENSION
(
BOARD_ITEM
*
aParent
)
:
BOARD_ITEM
(
aParent
,
TYPE_DIMENSION
)
{
...
...
@@ -32,25 +33,18 @@ DIMENSION::~DIMENSION()
}
/* Setup the dimension text */
void
DIMENSION
::
SetText
(
const
wxString
&
NewText
)
{
m_Text
->
m_Text
=
NewText
;
}
/* Return the dimension text
*/
wxString
DIMENSION
::
GetText
(
void
)
const
{
return
m_Text
->
m_Text
;
}
/**
* Function SetLayer
* sets the layer this item is on.
* @param aLayer The layer number.
*/
void
DIMENSION
::
SetLayer
(
int
aLayer
)
{
m_Layer
=
aLayer
;
...
...
@@ -69,34 +63,34 @@ void DIMENSION::Copy( DIMENSION* source )
m_TimeStamp
=
GetTimeStamp
();
m_Text
->
Copy
(
source
->
m_Text
);
Barre_ox
=
source
->
Barre_o
x
;
Barre_oy
=
source
->
Barre_o
y
;
Barre_fx
=
source
->
Barre_f
x
;
Barre_fy
=
source
->
Barre_f
y
;
TraitG_ox
=
source
->
TraitG_o
x
;
TraitG_oy
=
source
->
TraitG_o
y
;
TraitG_fx
=
source
->
TraitG_f
x
;
TraitG_fy
=
source
->
TraitG_f
y
;
TraitD_ox
=
source
->
TraitD_o
x
;
TraitD_oy
=
source
->
TraitD_o
y
;
TraitD_fx
=
source
->
TraitD_f
x
;
TraitD_fy
=
source
->
TraitD_f
y
;
FlecheD1_ox
=
source
->
FlecheD1_o
x
;
FlecheD1_oy
=
source
->
FlecheD1_o
y
;
FlecheD1_fx
=
source
->
FlecheD1_f
x
;
FlecheD1_fy
=
source
->
FlecheD1_f
y
;
FlecheD2_ox
=
source
->
FlecheD2_o
x
;
FlecheD2_oy
=
source
->
FlecheD2_o
y
;
FlecheD2_fx
=
source
->
FlecheD2_f
x
;
FlecheD2_fy
=
source
->
FlecheD2_f
y
;
FlecheG1_ox
=
source
->
FlecheG1_o
x
;
FlecheG1_oy
=
source
->
FlecheG1_o
y
;
FlecheG1_fx
=
source
->
FlecheG1_f
x
;
FlecheG1_fy
=
source
->
FlecheG1_f
y
;
FlecheG2_ox
=
source
->
FlecheG2_o
x
;
FlecheG2_oy
=
source
->
FlecheG2_o
y
;
FlecheG2_fx
=
source
->
FlecheG2_f
x
;
FlecheG2_fy
=
source
->
FlecheG2_f
y
;
m_crossBarOx
=
source
->
m_crossBarO
x
;
m_crossBarOy
=
source
->
m_crossBarO
y
;
m_crossBarFx
=
source
->
m_crossBarF
x
;
m_crossBarFy
=
source
->
m_crossBarF
y
;
m_featureLineGOx
=
source
->
m_featureLineGO
x
;
m_featureLineGOy
=
source
->
m_featureLineGO
y
;
m_featureLineGFx
=
source
->
m_featureLineGF
x
;
m_featureLineGFy
=
source
->
m_featureLineGF
y
;
m_featureLineDOx
=
source
->
m_featureLineDO
x
;
m_featureLineDOy
=
source
->
m_featureLineDO
y
;
m_featureLineDFx
=
source
->
m_featureLineDF
x
;
m_featureLineDFy
=
source
->
m_featureLineDF
y
;
m_arrowD1Ox
=
source
->
m_arrowD1O
x
;
m_arrowD1Oy
=
source
->
m_arrowD1O
y
;
m_arrowD1Fx
=
source
->
m_arrowD1F
x
;
m_arrowD1Fy
=
source
->
m_arrowD1F
y
;
m_arrowD2Ox
=
source
->
m_arrowD2O
x
;
m_arrowD2Oy
=
source
->
m_arrowD2O
y
;
m_arrowD2Fx
=
source
->
m_arrowD2F
x
;
m_arrowD2Fy
=
source
->
m_arrowD2F
y
;
m_arrowG1Ox
=
source
->
m_arrowG1O
x
;
m_arrowG1Oy
=
source
->
m_arrowG1O
y
;
m_arrowG1Fx
=
source
->
m_arrowG1F
x
;
m_arrowG1Fy
=
source
->
m_arrowG1F
y
;
m_arrowG2Ox
=
source
->
m_arrowG2O
x
;
m_arrowG2Oy
=
source
->
m_arrowG2O
y
;
m_arrowG2Fx
=
source
->
m_arrowG2F
x
;
m_arrowG2Fy
=
source
->
m_arrowG2F
y
;
}
...
...
@@ -165,56 +159,56 @@ bool DIMENSION::ReadDimensionDescr( LINE_READER* aReader )
case
'b'
:
sscanf
(
Line
+
2
,
" %d %d %d %d %d %d"
,
&
Dummy
,
&
Barre_ox
,
&
Barre_o
y
,
&
Barre_fx
,
&
Barre_f
y
,
&
m_crossBarOx
,
&
m_crossBarO
y
,
&
m_crossBarFx
,
&
m_crossBarF
y
,
&
m_Width
);
break
;
case
'd'
:
sscanf
(
Line
+
2
,
" %d %d %d %d %d %d"
,
&
Dummy
,
&
TraitD_ox
,
&
TraitD_o
y
,
&
TraitD_fx
,
&
TraitD_f
y
,
&
m_featureLineDOx
,
&
m_featureLineDO
y
,
&
m_featureLineDFx
,
&
m_featureLineDF
y
,
&
Dummy
);
break
;
case
'g'
:
sscanf
(
Line
+
2
,
" %d %d %d %d %d %d"
,
&
Dummy
,
&
TraitG_ox
,
&
TraitG_o
y
,
&
TraitG_fx
,
&
TraitG_f
y
,
&
m_featureLineGOx
,
&
m_featureLineGO
y
,
&
m_featureLineGFx
,
&
m_featureLineGF
y
,
&
Dummy
);
break
;
case
'1'
:
sscanf
(
Line
+
2
,
" %d %d %d %d %d %d"
,
&
Dummy
,
&
FlecheD1_ox
,
&
FlecheD1_o
y
,
&
FlecheD1_fx
,
&
FlecheD1_f
y
,
&
m_arrowD1Ox
,
&
m_arrowD1O
y
,
&
m_arrowD1Fx
,
&
m_arrowD1F
y
,
&
Dummy
);
break
;
case
'2'
:
sscanf
(
Line
+
2
,
" %d %d %d %d %d %d"
,
&
Dummy
,
&
FlecheD2_ox
,
&
FlecheD2_o
y
,
&
FlecheD2_fx
,
&
FlecheD2_f
y
,
&
m_arrowD2Ox
,
&
m_arrowD2O
y
,
&
m_arrowD2Fx
,
&
m_arrowD2F
y
,
&
Dummy
);
break
;
case
'3'
:
sscanf
(
Line
+
2
,
" %d %d %d %d %d %d
\n
"
,
&
Dummy
,
&
FlecheG1_ox
,
&
FlecheG1_o
y
,
&
FlecheG1_fx
,
&
FlecheG1_f
y
,
&
m_arrowG1Ox
,
&
m_arrowG1O
y
,
&
m_arrowG1Fx
,
&
m_arrowG1F
y
,
&
Dummy
);
break
;
case
'4'
:
sscanf
(
Line
+
2
,
" %d %d %d %d %d %d"
,
&
Dummy
,
&
FlecheG2_ox
,
&
FlecheG2_o
y
,
&
FlecheG2_fx
,
&
FlecheG2_f
y
,
&
m_arrowG2Ox
,
&
m_arrowG2O
y
,
&
m_arrowG2Fx
,
&
m_arrowG2F
y
,
&
Dummy
);
break
;
}
...
...
@@ -227,50 +221,41 @@ bool DIMENSION::ReadDimensionDescr( LINE_READER* aReader )
}
/**
* Function Move
* @param offset : moving vector
*/
void
DIMENSION
::
Move
(
const
wxPoint
&
offset
)
{
m_Pos
+=
offset
;
m_Text
->
m_Pos
+=
offset
;
Barre_o
x
+=
offset
.
x
;
Barre_o
y
+=
offset
.
y
;
Barre_f
x
+=
offset
.
x
;
Barre_f
y
+=
offset
.
y
;
TraitG_o
x
+=
offset
.
x
;
TraitG_o
y
+=
offset
.
y
;
TraitG_f
x
+=
offset
.
x
;
TraitG_f
y
+=
offset
.
y
;
TraitD_o
x
+=
offset
.
x
;
TraitD_o
y
+=
offset
.
y
;
TraitD_f
x
+=
offset
.
x
;
TraitD_f
y
+=
offset
.
y
;
FlecheG1_o
x
+=
offset
.
x
;
FlecheG1_o
y
+=
offset
.
y
;
FlecheG1_f
x
+=
offset
.
x
;
FlecheG1_f
y
+=
offset
.
y
;
FlecheG2_o
x
+=
offset
.
x
;
FlecheG2_o
y
+=
offset
.
y
;
FlecheG2_f
x
+=
offset
.
x
;
FlecheG2_f
y
+=
offset
.
y
;
FlecheD1_o
x
+=
offset
.
x
;
FlecheD1_o
y
+=
offset
.
y
;
FlecheD1_f
x
+=
offset
.
x
;
FlecheD1_f
y
+=
offset
.
y
;
FlecheD2_o
x
+=
offset
.
x
;
FlecheD2_o
y
+=
offset
.
y
;
FlecheD2_f
x
+=
offset
.
x
;
FlecheD2_f
y
+=
offset
.
y
;
m_crossBarO
x
+=
offset
.
x
;
m_crossBarO
y
+=
offset
.
y
;
m_crossBarF
x
+=
offset
.
x
;
m_crossBarF
y
+=
offset
.
y
;
m_featureLineGO
x
+=
offset
.
x
;
m_featureLineGO
y
+=
offset
.
y
;
m_featureLineGF
x
+=
offset
.
x
;
m_featureLineGF
y
+=
offset
.
y
;
m_featureLineDO
x
+=
offset
.
x
;
m_featureLineDO
y
+=
offset
.
y
;
m_featureLineDF
x
+=
offset
.
x
;
m_featureLineDF
y
+=
offset
.
y
;
m_arrowG1O
x
+=
offset
.
x
;
m_arrowG1O
y
+=
offset
.
y
;
m_arrowG1F
x
+=
offset
.
x
;
m_arrowG1F
y
+=
offset
.
y
;
m_arrowG2O
x
+=
offset
.
x
;
m_arrowG2O
y
+=
offset
.
y
;
m_arrowG2F
x
+=
offset
.
x
;
m_arrowG2F
y
+=
offset
.
y
;
m_arrowD1O
x
+=
offset
.
x
;
m_arrowD1O
y
+=
offset
.
y
;
m_arrowD1F
x
+=
offset
.
x
;
m_arrowD1F
y
+=
offset
.
y
;
m_arrowD2O
x
+=
offset
.
x
;
m_arrowD2O
y
+=
offset
.
y
;
m_arrowD2F
x
+=
offset
.
x
;
m_arrowD2F
y
+=
offset
.
y
;
}
/**
* Function Rotate
* @param aRotCentre - the rotation point.
* @param aAngle - the rotation angle in 0.1 degree.
*/
void
DIMENSION
::
Rotate
(
const
wxPoint
&
aRotCentre
,
int
aAngle
)
{
RotatePoint
(
&
m_Pos
,
aRotCentre
,
aAngle
);
...
...
@@ -284,28 +269,23 @@ void DIMENSION::Rotate(const wxPoint& aRotCentre, int aAngle)
if
(
(
m_Text
->
m_Orient
>
900
)
&&
(
m_Text
->
m_Orient
<
2700
)
)
m_Text
->
m_Orient
-=
1800
;
RotatePoint
(
&
Barre_ox
,
&
Barre_o
y
,
aRotCentre
.
x
,
aRotCentre
.
y
,
aAngle
);
RotatePoint
(
&
Barre_fx
,
&
Barre_f
y
,
aRotCentre
.
x
,
aRotCentre
.
y
,
aAngle
);
RotatePoint
(
&
TraitG_ox
,
&
TraitG_o
y
,
aRotCentre
.
x
,
aRotCentre
.
y
,
aAngle
);
RotatePoint
(
&
TraitG_fx
,
&
TraitG_f
y
,
aRotCentre
.
x
,
aRotCentre
.
y
,
aAngle
);
RotatePoint
(
&
TraitD_ox
,
&
TraitD_o
y
,
aRotCentre
.
x
,
aRotCentre
.
y
,
aAngle
);
RotatePoint
(
&
TraitD_fx
,
&
TraitD_f
y
,
aRotCentre
.
x
,
aRotCentre
.
y
,
aAngle
);
RotatePoint
(
&
FlecheG1_ox
,
&
FlecheG1_o
y
,
aRotCentre
.
x
,
aRotCentre
.
y
,
aAngle
);
RotatePoint
(
&
FlecheG1_fx
,
&
FlecheG1_f
y
,
aRotCentre
.
x
,
aRotCentre
.
y
,
aAngle
);
RotatePoint
(
&
FlecheG2_ox
,
&
FlecheG2_o
y
,
aRotCentre
.
x
,
aRotCentre
.
y
,
aAngle
);
RotatePoint
(
&
FlecheG2_fx
,
&
FlecheG2_f
y
,
aRotCentre
.
x
,
aRotCentre
.
y
,
aAngle
);
RotatePoint
(
&
FlecheD1_ox
,
&
FlecheD1_o
y
,
aRotCentre
.
x
,
aRotCentre
.
y
,
aAngle
);
RotatePoint
(
&
FlecheD1_fx
,
&
FlecheD1_f
y
,
aRotCentre
.
x
,
aRotCentre
.
y
,
aAngle
);
RotatePoint
(
&
FlecheD2_ox
,
&
FlecheD2_o
y
,
aRotCentre
.
x
,
aRotCentre
.
y
,
aAngle
);
RotatePoint
(
&
FlecheD2_fx
,
&
FlecheD2_f
y
,
aRotCentre
.
x
,
aRotCentre
.
y
,
aAngle
);
RotatePoint
(
&
m_crossBarOx
,
&
m_crossBarO
y
,
aRotCentre
.
x
,
aRotCentre
.
y
,
aAngle
);
RotatePoint
(
&
m_crossBarFx
,
&
m_crossBarF
y
,
aRotCentre
.
x
,
aRotCentre
.
y
,
aAngle
);
RotatePoint
(
&
m_featureLineGOx
,
&
m_featureLineGO
y
,
aRotCentre
.
x
,
aRotCentre
.
y
,
aAngle
);
RotatePoint
(
&
m_featureLineGFx
,
&
m_featureLineGF
y
,
aRotCentre
.
x
,
aRotCentre
.
y
,
aAngle
);
RotatePoint
(
&
m_featureLineDOx
,
&
m_featureLineDO
y
,
aRotCentre
.
x
,
aRotCentre
.
y
,
aAngle
);
RotatePoint
(
&
m_featureLineDFx
,
&
m_featureLineDF
y
,
aRotCentre
.
x
,
aRotCentre
.
y
,
aAngle
);
RotatePoint
(
&
m_arrowG1Ox
,
&
m_arrowG1O
y
,
aRotCentre
.
x
,
aRotCentre
.
y
,
aAngle
);
RotatePoint
(
&
m_arrowG1Fx
,
&
m_arrowG1F
y
,
aRotCentre
.
x
,
aRotCentre
.
y
,
aAngle
);
RotatePoint
(
&
m_arrowG2Ox
,
&
m_arrowG2O
y
,
aRotCentre
.
x
,
aRotCentre
.
y
,
aAngle
);
RotatePoint
(
&
m_arrowG2Fx
,
&
m_arrowG2F
y
,
aRotCentre
.
x
,
aRotCentre
.
y
,
aAngle
);
RotatePoint
(
&
m_arrowD1Ox
,
&
m_arrowD1O
y
,
aRotCentre
.
x
,
aRotCentre
.
y
,
aAngle
);
RotatePoint
(
&
m_arrowD1Fx
,
&
m_arrowD1F
y
,
aRotCentre
.
x
,
aRotCentre
.
y
,
aAngle
);
RotatePoint
(
&
m_arrowD2Ox
,
&
m_arrowD2O
y
,
aRotCentre
.
x
,
aRotCentre
.
y
,
aAngle
);
RotatePoint
(
&
m_arrowD2Fx
,
&
m_arrowD2F
y
,
aRotCentre
.
x
,
aRotCentre
.
y
,
aAngle
);
}
/**
* Function Flip
* Flip this object, i.e. change the board side for this object
* @param aCentre - the rotation point.
*/
void
DIMENSION
::
Flip
(
const
wxPoint
&
aCentre
)
{
Mirror
(
aCentre
);
...
...
@@ -313,13 +293,6 @@ void DIMENSION::Flip(const wxPoint& aCentre )
}
/**
* Function Mirror
* Mirror the Dimension , relative to a given horizontal axis
* the text is not mirrored. only its position (and angle) is mirrored
* the layer is not changed
* @param axis_pos : vertical axis position
*/
void
DIMENSION
::
Mirror
(
const
wxPoint
&
axis_pos
)
{
#define INVERT( pos ) (pos) = axis_pos.y - ( (pos) - axis_pos.y )
...
...
@@ -334,26 +307,27 @@ void DIMENSION::Mirror(const wxPoint& axis_pos)
if
(
(
m_Text
->
m_Orient
>
900
)
&&
(
m_Text
->
m_Orient
<
2700
)
)
m_Text
->
m_Orient
-=
1800
;
INVERT
(
Barre_o
y
);
INVERT
(
Barre_f
y
);
INVERT
(
TraitG_o
y
);
INVERT
(
TraitG_f
y
);
INVERT
(
TraitD_o
y
);
INVERT
(
TraitD_f
y
);
INVERT
(
FlecheG1_o
y
);
INVERT
(
FlecheG1_f
y
);
INVERT
(
FlecheG2_o
y
);
INVERT
(
FlecheG2_f
y
);
INVERT
(
FlecheD1_o
y
);
INVERT
(
FlecheD1_f
y
);
INVERT
(
FlecheD2_o
y
);
INVERT
(
FlecheD2_f
y
);
INVERT
(
m_crossBarO
y
);
INVERT
(
m_crossBarF
y
);
INVERT
(
m_featureLineGO
y
);
INVERT
(
m_featureLineGF
y
);
INVERT
(
m_featureLineDO
y
);
INVERT
(
m_featureLineDF
y
);
INVERT
(
m_arrowG1O
y
);
INVERT
(
m_arrowG1F
y
);
INVERT
(
m_arrowG2O
y
);
INVERT
(
m_arrowG2F
y
);
INVERT
(
m_arrowD1O
y
);
INVERT
(
m_arrowD1F
y
);
INVERT
(
m_arrowD2O
y
);
INVERT
(
m_arrowD2F
y
);
}
bool
DIMENSION
::
Save
(
FILE
*
aFile
)
const
{
bool
rc
=
false
;
// note: COTATION was the previous name of DIMENSION
// this old keyword is used here for compatibility
const
char
keyWordLine
[]
=
"$COTATION
\n
"
;
...
...
@@ -378,33 +352,33 @@ bool DIMENSION::Save( FILE* aFile ) const
m_Text
->
m_Mirror
?
0
:
1
);
fprintf
(
aFile
,
"Sb %d %d %d %d %d %d
\n
"
,
S_SEGMENT
,
Barre_ox
,
Barre_o
y
,
Barre_fx
,
Barre_f
y
,
m_Width
);
m_crossBarOx
,
m_crossBarO
y
,
m_crossBarFx
,
m_crossBarF
y
,
m_Width
);
fprintf
(
aFile
,
"Sd %d %d %d %d %d %d
\n
"
,
S_SEGMENT
,
TraitD_ox
,
TraitD_o
y
,
TraitD_fx
,
TraitD_f
y
,
m_Width
);
m_featureLineDOx
,
m_featureLineDO
y
,
m_featureLineDFx
,
m_featureLineDF
y
,
m_Width
);
fprintf
(
aFile
,
"Sg %d %d %d %d %d %d
\n
"
,
S_SEGMENT
,
TraitG_ox
,
TraitG_o
y
,
TraitG_fx
,
TraitG_f
y
,
m_Width
);
m_featureLineGOx
,
m_featureLineGO
y
,
m_featureLineGFx
,
m_featureLineGF
y
,
m_Width
);
fprintf
(
aFile
,
"S1 %d %d %d %d %d %d
\n
"
,
S_SEGMENT
,
FlecheD1_ox
,
FlecheD1_o
y
,
FlecheD1_fx
,
FlecheD1_f
y
,
m_Width
);
m_arrowD1Ox
,
m_arrowD1O
y
,
m_arrowD1Fx
,
m_arrowD1F
y
,
m_Width
);
fprintf
(
aFile
,
"S2 %d %d %d %d %d %d
\n
"
,
S_SEGMENT
,
FlecheD2_ox
,
FlecheD2_o
y
,
FlecheD2_fx
,
FlecheD2_f
y
,
m_Width
);
m_arrowD2Ox
,
m_arrowD2O
y
,
m_arrowD2Fx
,
m_arrowD2F
y
,
m_Width
);
fprintf
(
aFile
,
"S3 %d %d %d %d %d %d
\n
"
,
S_SEGMENT
,
FlecheG1_ox
,
FlecheG1_o
y
,
FlecheG1_fx
,
FlecheG1_f
y
,
m_Width
);
m_arrowG1Ox
,
m_arrowG1O
y
,
m_arrowG1Fx
,
m_arrowG1F
y
,
m_Width
);
fprintf
(
aFile
,
"S4 %d %d %d %d %d %d
\n
"
,
S_SEGMENT
,
FlecheG2_ox
,
FlecheG2_o
y
,
FlecheG2_fx
,
FlecheG2_f
y
,
m_Width
);
m_arrowG2Ox
,
m_arrowG2O
y
,
m_arrowG2Fx
,
m_arrowG2F
y
,
m_Width
);
if
(
fputs
(
keyWordLineEnd
,
aFile
)
==
EOF
)
goto
out
;
...
...
@@ -416,32 +390,26 @@ out:
}
/**
* Function AdjustDimensionDetails
* Calculate coordinates of segments used to draw the dimension.
* @param aDoNotChangeText (bool) if false, the dimension text is initialized
*/
void
DIMENSION
::
AdjustDimensionDetails
(
bool
aDoNotChangeText
)
{
#define ARROW_SIZE 500 //size of arrows
int
ii
;
int
mesure
,
deltax
,
deltay
;
/* val
eur de la mesure sur les axes X et Y
*/
int
fleche_up_X
=
0
,
fleche_up_Y
=
0
;
/* coord des fleches : barr
e / */
int
fleche_dw_X
=
0
,
fleche_dw_Y
=
0
;
/* coord des fleches : barr
e \ */
int
hx
,
hy
;
/*
coord des traits de rappel de cote
*/
int
mesure
,
deltax
,
deltay
;
/* val
ue of the measure on X and Y axes
*/
int
arrow_up_X
=
0
,
arrow_up_Y
=
0
;
/* coordinates of arrow lin
e / */
int
arrow_dw_X
=
0
,
arrow_dw_Y
=
0
;
/* coordinates of arrow lin
e \ */
int
hx
,
hy
;
/*
dimension line interval
*/
float
angle
,
angle_f
;
wxString
msg
;
/* Init layer : */
m_Text
->
SetLayer
(
GetLayer
()
);
/* calculate the size of the dimension
* (text + line above the text) */
/* calculate the size of the dimension (text + line above the text) */
ii
=
m_Text
->
m_Size
.
y
+
m_Text
->
m_Thickness
+
(
m_Width
*
3
);
deltax
=
TraitD_ox
-
TraitG_o
x
;
deltay
=
TraitD_oy
-
TraitG_o
y
;
deltax
=
m_featureLineDOx
-
m_featureLineGO
x
;
deltay
=
m_featureLineDOy
-
m_featureLineGO
y
;
/* Calculate dimension value */
mesure
=
wxRound
(
hypot
(
(
double
)
deltax
,
(
double
)
deltay
)
);
...
...
@@ -451,69 +419,69 @@ void DIMENSION::AdjustDimensionDetails( bool aDoNotChangeText )
else
angle
=
0.0
;
/* Calcul
des parametre dimensions X et Y des fleches et traits de cotes
*/
/* Calcul
ation of parameters X and Y dimensions of the arrows and lines.
*/
hx
=
hy
=
ii
;
/*
On tient compte de l'inclinaison de la cote
*/
/*
Taking into account the slope of the side lines.
*/
if
(
mesure
)
{
hx
=
(
abs
)
(
(
int
)
(
(
(
double
)
deltay
*
hx
)
/
mesure
)
);
hy
=
(
abs
)
(
(
int
)
(
(
(
double
)
deltax
*
hy
)
/
mesure
)
);
if
(
TraitG_ox
>
Barre_o
x
)
if
(
m_featureLineGOx
>
m_crossBarO
x
)
hx
=
-
hx
;
if
(
TraitG_ox
==
Barre_o
x
)
if
(
m_featureLineGOx
==
m_crossBarO
x
)
hx
=
0
;
if
(
TraitG_oy
>
Barre_o
y
)
if
(
m_featureLineGOy
>
m_crossBarO
y
)
hy
=
-
hy
;
if
(
TraitG_oy
==
Barre_o
y
)
if
(
m_featureLineGOy
==
m_crossBarO
y
)
hy
=
0
;
angle_f
=
angle
+
(
M_PI
*
27.5
/
180
);
fleche
_up_X
=
(
int
)
(
ARROW_SIZE
*
cos
(
angle_f
)
);
fleche
_up_Y
=
(
int
)
(
ARROW_SIZE
*
sin
(
angle_f
)
);
arrow
_up_X
=
(
int
)
(
ARROW_SIZE
*
cos
(
angle_f
)
);
arrow
_up_Y
=
(
int
)
(
ARROW_SIZE
*
sin
(
angle_f
)
);
angle_f
=
angle
-
(
M_PI
*
27.5
/
180
);
fleche
_dw_X
=
(
int
)
(
ARROW_SIZE
*
cos
(
angle_f
)
);
fleche
_dw_Y
=
(
int
)
(
ARROW_SIZE
*
sin
(
angle_f
)
);
arrow
_dw_X
=
(
int
)
(
ARROW_SIZE
*
cos
(
angle_f
)
);
arrow
_dw_Y
=
(
int
)
(
ARROW_SIZE
*
sin
(
angle_f
)
);
}
FlecheG1_ox
=
Barre_o
x
;
FlecheG1_oy
=
Barre_o
y
;
FlecheG1_fx
=
Barre_ox
+
fleche
_up_X
;
FlecheG1_fy
=
Barre_oy
+
fleche
_up_Y
;
m_arrowG1Ox
=
m_crossBarO
x
;
m_arrowG1Oy
=
m_crossBarO
y
;
m_arrowG1Fx
=
m_crossBarOx
+
arrow
_up_X
;
m_arrowG1Fy
=
m_crossBarOy
+
arrow
_up_Y
;
FlecheG2_ox
=
Barre_o
x
;
FlecheG2_oy
=
Barre_o
y
;
FlecheG2_fx
=
Barre_ox
+
fleche
_dw_X
;
FlecheG2_fy
=
Barre_oy
+
fleche
_dw_Y
;
m_arrowG2Ox
=
m_crossBarO
x
;
m_arrowG2Oy
=
m_crossBarO
y
;
m_arrowG2Fx
=
m_crossBarOx
+
arrow
_dw_X
;
m_arrowG2Fy
=
m_crossBarOy
+
arrow
_dw_Y
;
/*
la fleche de droite est symetrique a celle de gauche:
* / = -\
et
\ = -/
/*
The right arrow is symmetrical to the left.
* / = -\
and
\ = -/
*/
FlecheD1_ox
=
Barre_f
x
;
FlecheD1_oy
=
Barre_f
y
;
FlecheD1_fx
=
Barre_fx
-
fleche
_dw_X
;
FlecheD1_fy
=
Barre_fy
-
fleche
_dw_Y
;
m_arrowD1Ox
=
m_crossBarF
x
;
m_arrowD1Oy
=
m_crossBarF
y
;
m_arrowD1Fx
=
m_crossBarFx
-
arrow
_dw_X
;
m_arrowD1Fy
=
m_crossBarFy
-
arrow
_dw_Y
;
FlecheD2_ox
=
Barre_f
x
;
FlecheD2_oy
=
Barre_f
y
;
FlecheD2_fx
=
Barre_fx
-
fleche
_up_X
;
FlecheD2_fy
=
Barre_fy
-
fleche
_up_Y
;
m_arrowD2Ox
=
m_crossBarF
x
;
m_arrowD2Oy
=
m_crossBarF
y
;
m_arrowD2Fx
=
m_crossBarFx
-
arrow
_up_X
;
m_arrowD2Fy
=
m_crossBarFy
-
arrow
_up_Y
;
TraitG_fx
=
Barre_o
x
+
hx
;
TraitG_fy
=
Barre_o
y
+
hy
;
m_featureLineGFx
=
m_crossBarO
x
+
hx
;
m_featureLineGFy
=
m_crossBarO
y
+
hy
;
TraitD_fx
=
Barre_f
x
+
hx
;
TraitD_fy
=
Barre_f
y
+
hy
;
m_featureLineDFx
=
m_crossBarF
x
+
hx
;
m_featureLineDFy
=
m_crossBarF
y
+
hy
;
/* Calculate the better text position and orientation: */
m_Pos
.
x
=
m_Text
->
m_Pos
.
x
=
(
Barre_fx
+
TraitG_f
x
)
/
2
;
m_Pos
.
y
=
m_Text
->
m_Pos
.
y
=
(
Barre_fy
+
TraitG_f
y
)
/
2
;
m_Pos
.
x
=
m_Text
->
m_Pos
.
x
=
(
m_crossBarFx
+
m_featureLineGF
x
)
/
2
;
m_Pos
.
y
=
m_Text
->
m_Pos
.
y
=
(
m_crossBarFy
+
m_featureLineGF
y
)
/
2
;
m_Text
->
m_Orient
=
-
(
int
)
(
angle
*
1800
/
M_PI
);
...
...
@@ -535,8 +503,6 @@ void DIMENSION::AdjustDimensionDetails( bool aDoNotChangeText )
}
/* Print 1 dimension: segments and text
*/
void
DIMENSION
::
Draw
(
EDA_DRAW_PANEL
*
panel
,
wxDC
*
DC
,
int
mode_color
,
const
wxPoint
&
offset
)
{
int
ox
,
oy
,
typeaff
,
width
,
gcolor
;
...
...
@@ -567,56 +533,56 @@ void DIMENSION::Draw( EDA_DRAW_PANEL* panel, wxDC* DC, int mode_color, const wxP
case
FILLED
:
GRLine
(
&
panel
->
m_ClipBox
,
DC
,
Barre_ox
-
ox
,
Barre_o
y
-
oy
,
Barre_fx
-
ox
,
Barre_f
y
-
oy
,
width
,
gcolor
);
m_crossBarOx
-
ox
,
m_crossBarO
y
-
oy
,
m_crossBarFx
-
ox
,
m_crossBarF
y
-
oy
,
width
,
gcolor
);
GRLine
(
&
panel
->
m_ClipBox
,
DC
,
TraitG_ox
-
ox
,
TraitG_o
y
-
oy
,
TraitG_fx
-
ox
,
TraitG_f
y
-
oy
,
width
,
gcolor
);
m_featureLineGOx
-
ox
,
m_featureLineGO
y
-
oy
,
m_featureLineGFx
-
ox
,
m_featureLineGF
y
-
oy
,
width
,
gcolor
);
GRLine
(
&
panel
->
m_ClipBox
,
DC
,
TraitD_ox
-
ox
,
TraitD_o
y
-
oy
,
TraitD_fx
-
ox
,
TraitD_f
y
-
oy
,
width
,
gcolor
);
m_featureLineDOx
-
ox
,
m_featureLineDO
y
-
oy
,
m_featureLineDFx
-
ox
,
m_featureLineDF
y
-
oy
,
width
,
gcolor
);
GRLine
(
&
panel
->
m_ClipBox
,
DC
,
FlecheD1_ox
-
ox
,
FlecheD1_o
y
-
oy
,
FlecheD1_fx
-
ox
,
FlecheD1_f
y
-
oy
,
width
,
gcolor
);
m_arrowD1Ox
-
ox
,
m_arrowD1O
y
-
oy
,
m_arrowD1Fx
-
ox
,
m_arrowD1F
y
-
oy
,
width
,
gcolor
);
GRLine
(
&
panel
->
m_ClipBox
,
DC
,
FlecheD2_ox
-
ox
,
FlecheD2_o
y
-
oy
,
FlecheD2_fx
-
ox
,
FlecheD2_f
y
-
oy
,
width
,
gcolor
);
m_arrowD2Ox
-
ox
,
m_arrowD2O
y
-
oy
,
m_arrowD2Fx
-
ox
,
m_arrowD2F
y
-
oy
,
width
,
gcolor
);
GRLine
(
&
panel
->
m_ClipBox
,
DC
,
FlecheG1_ox
-
ox
,
FlecheG1_o
y
-
oy
,
FlecheG1_fx
-
ox
,
FlecheG1_f
y
-
oy
,
width
,
gcolor
);
m_arrowG1Ox
-
ox
,
m_arrowG1O
y
-
oy
,
m_arrowG1Fx
-
ox
,
m_arrowG1F
y
-
oy
,
width
,
gcolor
);
GRLine
(
&
panel
->
m_ClipBox
,
DC
,
FlecheG2_ox
-
ox
,
FlecheG2_o
y
-
oy
,
FlecheG2_fx
-
ox
,
FlecheG2_f
y
-
oy
,
width
,
gcolor
);
m_arrowG2Ox
-
ox
,
m_arrowG2O
y
-
oy
,
m_arrowG2Fx
-
ox
,
m_arrowG2F
y
-
oy
,
width
,
gcolor
);
break
;
case
SKETCH
:
GRCSegm
(
&
panel
->
m_ClipBox
,
DC
,
Barre_ox
-
ox
,
Barre_o
y
-
oy
,
Barre_fx
-
ox
,
Barre_f
y
-
oy
,
m_crossBarOx
-
ox
,
m_crossBarO
y
-
oy
,
m_crossBarFx
-
ox
,
m_crossBarF
y
-
oy
,
width
,
gcolor
);
GRCSegm
(
&
panel
->
m_ClipBox
,
DC
,
TraitG_ox
-
ox
,
TraitG_o
y
-
oy
,
TraitG_fx
-
ox
,
TraitG_f
y
-
oy
,
m_featureLineGOx
-
ox
,
m_featureLineGO
y
-
oy
,
m_featureLineGFx
-
ox
,
m_featureLineGF
y
-
oy
,
width
,
gcolor
);
GRCSegm
(
&
panel
->
m_ClipBox
,
DC
,
TraitD_ox
-
ox
,
TraitD_o
y
-
oy
,
TraitD_fx
-
ox
,
TraitD_f
y
-
oy
,
m_featureLineDOx
-
ox
,
m_featureLineDO
y
-
oy
,
m_featureLineDFx
-
ox
,
m_featureLineDF
y
-
oy
,
width
,
gcolor
);
GRCSegm
(
&
panel
->
m_ClipBox
,
DC
,
FlecheD1_ox
-
ox
,
FlecheD1_o
y
-
oy
,
FlecheD1_fx
-
ox
,
FlecheD1_f
y
-
oy
,
m_arrowD1Ox
-
ox
,
m_arrowD1O
y
-
oy
,
m_arrowD1Fx
-
ox
,
m_arrowD1F
y
-
oy
,
width
,
gcolor
);
GRCSegm
(
&
panel
->
m_ClipBox
,
DC
,
FlecheD2_ox
-
ox
,
FlecheD2_o
y
-
oy
,
FlecheD2_fx
-
ox
,
FlecheD2_f
y
-
oy
,
m_arrowD2Ox
-
ox
,
m_arrowD2O
y
-
oy
,
m_arrowD2Fx
-
ox
,
m_arrowD2F
y
-
oy
,
width
,
gcolor
);
GRCSegm
(
&
panel
->
m_ClipBox
,
DC
,
FlecheG1_ox
-
ox
,
FlecheG1_o
y
-
oy
,
FlecheG1_fx
-
ox
,
FlecheG1_f
y
-
oy
,
m_arrowG1Ox
-
ox
,
m_arrowG1O
y
-
oy
,
m_arrowG1Fx
-
ox
,
m_arrowG1F
y
-
oy
,
width
,
gcolor
);
GRCSegm
(
&
panel
->
m_ClipBox
,
DC
,
FlecheG2_ox
-
ox
,
FlecheG2_o
y
-
oy
,
FlecheG2_fx
-
ox
,
FlecheG2_f
y
-
oy
,
m_arrowG2Ox
-
ox
,
m_arrowG2O
y
-
oy
,
m_arrowG2Fx
-
ox
,
m_arrowG2F
y
-
oy
,
width
,
gcolor
);
break
;
}
...
...
@@ -631,102 +597,96 @@ void DIMENSION::DisplayInfo( EDA_DRAW_FRAME* frame )
}
/**
* Function HitTest
* tests if the given wxPoint is within the bounds of this object.
* @param ref_pos A wxPoint to test
* @return bool - true if a hit, else false
*/
bool
DIMENSION
::
HitTest
(
const
wxPoint
&
ref_pos
)
bool
DIMENSION
::
HitTest
(
const
wxPoint
&
aPoint
)
{
int
ux0
,
uy0
;
int
dx
,
dy
,
spot_cX
,
spot_cY
;
if
(
m_Text
&&
m_Text
->
TextHitTest
(
ref_pos
)
)
if
(
m_Text
&&
m_Text
->
TextHitTest
(
aPoint
)
)
return
true
;
/* Locate SEGMENTS? */
ux0
=
Barre_o
x
;
uy0
=
Barre_o
y
;
ux0
=
m_crossBarO
x
;
uy0
=
m_crossBarO
y
;
/* Recalculate coordinates with ux0, uy0 = origin. */
dx
=
Barre_f
x
-
ux0
;
dy
=
Barre_f
y
-
uy0
;
dx
=
m_crossBarF
x
-
ux0
;
dy
=
m_crossBarF
y
-
uy0
;
spot_cX
=
ref_pos
.
x
-
ux0
;
spot_cY
=
ref_pos
.
y
-
uy0
;
spot_cX
=
aPoint
.
x
-
ux0
;
spot_cY
=
aPoint
.
y
-
uy0
;
if
(
DistanceTest
(
m_Width
/
2
,
dx
,
dy
,
spot_cX
,
spot_cY
)
)
return
true
;
ux0
=
TraitG_o
x
;
uy0
=
TraitG_o
y
;
ux0
=
m_featureLineGO
x
;
uy0
=
m_featureLineGO
y
;
dx
=
TraitG_f
x
-
ux0
;
dy
=
TraitG_f
y
-
uy0
;
dx
=
m_featureLineGF
x
-
ux0
;
dy
=
m_featureLineGF
y
-
uy0
;
spot_cX
=
ref_pos
.
x
-
ux0
;
spot_cY
=
ref_pos
.
y
-
uy0
;
spot_cX
=
aPoint
.
x
-
ux0
;
spot_cY
=
aPoint
.
y
-
uy0
;
if
(
DistanceTest
(
m_Width
/
2
,
dx
,
dy
,
spot_cX
,
spot_cY
)
)
return
true
;
ux0
=
TraitD_o
x
;
uy0
=
TraitD_o
y
;
ux0
=
m_featureLineDO
x
;
uy0
=
m_featureLineDO
y
;
dx
=
TraitD_f
x
-
ux0
;
dy
=
TraitD_f
y
-
uy0
;
dx
=
m_featureLineDF
x
-
ux0
;
dy
=
m_featureLineDF
y
-
uy0
;
spot_cX
=
ref_pos
.
x
-
ux0
;
spot_cY
=
ref_pos
.
y
-
uy0
;
spot_cX
=
aPoint
.
x
-
ux0
;
spot_cY
=
aPoint
.
y
-
uy0
;
if
(
DistanceTest
(
m_Width
/
2
,
dx
,
dy
,
spot_cX
,
spot_cY
)
)
return
true
;
ux0
=
FlecheD1_o
x
;
uy0
=
FlecheD1_o
y
;
ux0
=
m_arrowD1O
x
;
uy0
=
m_arrowD1O
y
;
dx
=
FlecheD1_f
x
-
ux0
;
dy
=
FlecheD1_f
y
-
uy0
;
dx
=
m_arrowD1F
x
-
ux0
;
dy
=
m_arrowD1F
y
-
uy0
;
spot_cX
=
ref_pos
.
x
-
ux0
;
spot_cY
=
ref_pos
.
y
-
uy0
;
spot_cX
=
aPoint
.
x
-
ux0
;
spot_cY
=
aPoint
.
y
-
uy0
;
if
(
DistanceTest
(
m_Width
/
2
,
dx
,
dy
,
spot_cX
,
spot_cY
)
)
return
true
;
ux0
=
FlecheD2_o
x
;
uy0
=
FlecheD2_o
y
;
ux0
=
m_arrowD2O
x
;
uy0
=
m_arrowD2O
y
;
dx
=
FlecheD2_f
x
-
ux0
;
dy
=
FlecheD2_f
y
-
uy0
;
dx
=
m_arrowD2F
x
-
ux0
;
dy
=
m_arrowD2F
y
-
uy0
;
spot_cX
=
ref_pos
.
x
-
ux0
;
spot_cY
=
ref_pos
.
y
-
uy0
;
spot_cX
=
aPoint
.
x
-
ux0
;
spot_cY
=
aPoint
.
y
-
uy0
;
if
(
DistanceTest
(
m_Width
/
2
,
dx
,
dy
,
spot_cX
,
spot_cY
)
)
return
true
;
ux0
=
FlecheG1_o
x
;
uy0
=
FlecheG1_o
y
;
ux0
=
m_arrowG1O
x
;
uy0
=
m_arrowG1O
y
;
dx
=
FlecheG1_f
x
-
ux0
;
dy
=
FlecheG1_f
y
-
uy0
;
dx
=
m_arrowG1F
x
-
ux0
;
dy
=
m_arrowG1F
y
-
uy0
;
spot_cX
=
ref_pos
.
x
-
ux0
;
spot_cY
=
ref_pos
.
y
-
uy0
;
spot_cX
=
aPoint
.
x
-
ux0
;
spot_cY
=
aPoint
.
y
-
uy0
;
if
(
DistanceTest
(
m_Width
/
2
,
dx
,
dy
,
spot_cX
,
spot_cY
)
)
return
true
;
ux0
=
FlecheG2_o
x
;
uy0
=
FlecheG2_o
y
;
ux0
=
m_arrowG2O
x
;
uy0
=
m_arrowG2O
y
;
dx
=
FlecheG2_f
x
-
ux0
;
dy
=
FlecheG2_f
y
-
uy0
;
dx
=
m_arrowG2F
x
-
ux0
;
dy
=
m_arrowG2F
y
-
uy0
;
spot_cX
=
ref_pos
.
x
-
ux0
;
spot_cY
=
ref_pos
.
y
-
uy0
;
spot_cX
=
aPoint
.
x
-
ux0
;
spot_cY
=
aPoint
.
y
-
uy0
;
if
(
DistanceTest
(
m_Width
/
2
,
dx
,
dy
,
spot_cX
,
spot_cY
)
)
return
true
;
...
...
@@ -735,12 +695,6 @@ bool DIMENSION::HitTest( const wxPoint& ref_pos )
}
/**
* Function HitTest (overlaid)
* tests if the given EDA_RECT intersect this object.
* @param refArea : the given EDA_RECT
* @return bool - true if a hit, else false
*/
bool
DIMENSION
::
HitTest
(
EDA_RECT
&
refArea
)
{
if
(
refArea
.
Contains
(
m_Pos
)
)
...
...
@@ -761,23 +715,23 @@ EDA_RECT DIMENSION::GetBoundingBox() const
ymin
=
bBox
.
GetY
();
ymax
=
bBox
.
GetBottom
();
xmin
=
MIN
(
xmin
,
Barre_o
x
);
xmin
=
MIN
(
xmin
,
Barre_f
x
);
ymin
=
MIN
(
ymin
,
Barre_o
y
);
ymin
=
MIN
(
ymin
,
Barre_f
y
);
xmax
=
MAX
(
xmax
,
Barre_o
x
);
xmax
=
MAX
(
xmax
,
Barre_f
x
);
ymax
=
MAX
(
ymax
,
Barre_o
y
);
ymax
=
MAX
(
ymax
,
Barre_f
y
);
xmin
=
MIN
(
xmin
,
TraitG_o
x
);
xmin
=
MIN
(
xmin
,
TraitG_f
x
);
ymin
=
MIN
(
ymin
,
TraitG_o
y
);
ymin
=
MIN
(
ymin
,
TraitG_f
y
);
xmax
=
MAX
(
xmax
,
TraitG_o
x
);
xmax
=
MAX
(
xmax
,
TraitG_f
x
);
ymax
=
MAX
(
ymax
,
TraitG_o
y
);
ymax
=
MAX
(
ymax
,
TraitG_f
y
);
xmin
=
MIN
(
xmin
,
m_crossBarO
x
);
xmin
=
MIN
(
xmin
,
m_crossBarF
x
);
ymin
=
MIN
(
ymin
,
m_crossBarO
y
);
ymin
=
MIN
(
ymin
,
m_crossBarF
y
);
xmax
=
MAX
(
xmax
,
m_crossBarO
x
);
xmax
=
MAX
(
xmax
,
m_crossBarF
x
);
ymax
=
MAX
(
ymax
,
m_crossBarO
y
);
ymax
=
MAX
(
ymax
,
m_crossBarF
y
);
xmin
=
MIN
(
xmin
,
m_featureLineGO
x
);
xmin
=
MIN
(
xmin
,
m_featureLineGF
x
);
ymin
=
MIN
(
ymin
,
m_featureLineGO
y
);
ymin
=
MIN
(
ymin
,
m_featureLineGF
y
);
xmax
=
MAX
(
xmax
,
m_featureLineGO
x
);
xmax
=
MAX
(
xmax
,
m_featureLineGF
x
);
ymax
=
MAX
(
ymax
,
m_featureLineGO
y
);
ymax
=
MAX
(
ymax
,
m_featureLineGF
y
);
bBox
.
SetX
(
xmin
);
bBox
.
SetY
(
ymin
);
...
...
pcbnew/class_dimension.h
View file @
e26cdada
/******************************/
/* DIMENSION class definition */
/******************************/
/**
* @file class_dimension.h
* @brief DIMENSION class definition.
*/
#ifndef DIMENSION_H
#define DIMENSION_H
#include "base_struct.h"
#include "richio.h"
#include "class_board_item.h"
class
EDA_RECT
;
class
READER
;
class
EDA_DRAW_PANEL
;
class
DIMENSION
:
public
BOARD_ITEM
...
...
@@ -19,13 +24,13 @@ public:
int
m_Value
;
/* value of PCB dimensions. */
TEXTE_PCB
*
m_Text
;
int
Barre_ox
,
Barre_oy
,
Barre_fx
,
Barre_f
y
;
int
TraitG_ox
,
TraitG_oy
,
TraitG_fx
,
TraitG_f
y
;
int
TraitD_ox
,
TraitD_oy
,
TraitD_fx
,
TraitD_f
y
;
int
FlecheD1_ox
,
FlecheD1_oy
,
FlecheD1_fx
,
FlecheD1_f
y
;
int
FlecheD2_ox
,
FlecheD2_oy
,
FlecheD2_fx
,
FlecheD2_f
y
;
int
FlecheG1_ox
,
FlecheG1_oy
,
FlecheG1_fx
,
FlecheG1_f
y
;
int
FlecheG2_ox
,
FlecheG2_oy
,
FlecheG2_fx
,
FlecheG2_f
y
;
int
m_crossBarOx
,
m_crossBarOy
,
m_crossBarFx
,
m_crossBarF
y
;
int
m_featureLineGOx
,
m_featureLineGOy
,
m_featureLineGFx
,
m_featureLineGF
y
;
int
m_featureLineDOx
,
m_featureLineDOy
,
m_featureLineDFx
,
m_featureLineDF
y
;
int
m_arrowD1Ox
,
m_arrowD1Oy
,
m_arrowD1Fx
,
m_arrowD1F
y
;
int
m_arrowD2Ox
,
m_arrowD2Oy
,
m_arrowD2Fx
,
m_arrowD2F
y
;
int
m_arrowG1Ox
,
m_arrowG1Oy
,
m_arrowG1Fx
,
m_arrowG1F
y
;
int
m_arrowG2Ox
,
m_arrowG2Oy
,
m_arrowG2Fx
,
m_arrowG2F
y
;
public
:
DIMENSION
(
BOARD_ITEM
*
aParent
);
...
...
pcbnew/class_zone.h
View file @
e26cdada
...
...
@@ -10,11 +10,11 @@
#include <vector>
#include "gr_basic.h"
#include "PolyLine.h"
#include "richio.h"
#include "class_zone_setting.h"
class
EDA_RECT
;
class
LINE_READER
;
class
EDA_DRAW_FRAME
;
class
EDA_DRAW_PANEL
;
class
PCB_EDIT_FRAME
;
...
...
@@ -32,6 +32,7 @@ public:
public
:
SEGMENT
()
{}
SEGMENT
(
const
wxPoint
&
aStart
,
const
wxPoint
&
aEnd
)
{
m_Start
=
aStart
;
...
...
@@ -40,48 +41,66 @@ public:
};
/************************/
/* class ZONE_CONTAINER */
/************************/
/* handle a list of polygons delimiting a copper zone
* a zone is described by a main polygon, a time stamp, a layer and a net name.
* others polygons inside this main polygon are holes.
/**
* Class ZONE_CONTAINER
* handles a list of polygons defining a copper zone.
* A zone is described by a main polygon, a time stamp, a layer, and a net name.
* Other polygons inside the main polygon are holes in the zone.
*/
class
ZONE_CONTAINER
:
public
BOARD_CONNECTED_ITEM
{
public
:
wxString
m_Netname
;
// Net Name
CPolyLine
*
m_Poly
;
// outlines
int
m_CornerSelection
;
// For corner moving, corner index to drag, or -1 if no selection
// For corner moving, corner index to drag, or -1 if no selection.
int
m_CornerSelection
;
int
m_ZoneClearance
;
// clearance value
int
m_ZoneMinThickness
;
// Min thickness value in filled areas
int
m_FillMode
;
// How to fill areas: 0 = use filled polygons, != 0 fill with segments
int
m_ArcToSegmentsCount
;
// number of segments to convert a circle to a polygon
// (uses ARC_APPROX_SEGMENTS_COUNT_LOW_DEF or ARC_APPROX_SEGMENTS_COUNT_HIGHT_DEF)
int
m_PadOption
;
//
int
m_ThermalReliefGapValue
;
// thickness of the gap in thermal reliefs
int
m_ThermalReliefCopperBridgeValue
;
// thickness of the copper bridge in thermal reliefs
// How to fill areas: 0 = use filled polygons, != 0 fill with segments.
int
m_FillMode
;
// number of segments to convert a circle to a polygon (uses
//ARC_APPROX_SEGMENTS_COUNT_LOW_DEF or ARC_APPROX_SEGMENTS_COUNT_HIGHT_DEF)
int
m_ArcToSegmentsCount
;
int
m_PadOption
;
// thickness of the gap in thermal reliefs.
int
m_ThermalReliefGapValue
;
// thickness of the copper bridge in thermal reliefs
int
m_ThermalReliefCopperBridgeValue
;
int
utility
,
utility2
;
// flags used in polygon calculations
bool
m_IsFilled
;
// true when a zone was filled, false after deleting the filled areas
std
::
vector
<
CPolyPt
>
m_FilledPolysList
;
/* set of filled polygons used to draw a zone as a filled area.
* from outlines (m_Poly) but unlike m_Poly these filled polygons have no hole (they are all in one piece)
* In very simple cases m_FilledPolysList is same as m_Poly
* In less simple cases (when m_Poly has holes) m_FilledPolysList is a polygon equivalent to m_Poly, without holes
* but with extra outline segment connecting "holes" with external main outline
* In complex cases an outline described by m_Poly can have many filled areas
*/
std
::
vector
<
SEGMENT
>
m_FillSegmList
;
/* set of segments used to fill area, when fill zone by segment is used.
// true when a zone was filled, false after deleting the filled areas
bool
m_IsFilled
;
/* set of filled polygons used to draw a zone as a filled area.
* from outlines (m_Poly) but unlike m_Poly these filled polygons have no hole
* (they are* all in one piece) In very simple cases m_FilledPolysList is same
* as m_Poly. In less simple cases (when m_Poly has holes) m_FilledPolysList is
* a polygon equivalent to m_Poly, without holes but with extra outline segment
* connecting "holes" with external main outline. In complex cases an outline
* described by m_Poly can have many filled areas
*/
std
::
vector
<
CPolyPt
>
m_FilledPolysList
;
/* set of segments used to fill area, when fill zone by segment is used.
* ( m_FillMode == 1 )
* in this case segments have m_ZoneMinThickness width
*/
std
::
vector
<
SEGMENT
>
m_FillSegmList
;
private
:
CPolyLine
*
smoothedPoly
;
// Corner-smoothed version of m_Poly
int
cornerSmoothingType
;
unsigned
int
cornerRadius
;
public
:
ZONE_CONTAINER
(
BOARD
*
parent
);
~
ZONE_CONTAINER
();
bool
Save
(
FILE
*
aFile
)
const
;
...
...
@@ -94,12 +113,12 @@ public:
*/
int
ReadDescr
(
LINE_READER
*
aReader
);
/** virtual function GetPosition
/**
* Function GetPosition
* @return a wxPoint, position of the first point of the outline
*/
wxPoint
&
GetPosition
();
/**
* Function copy
* copy useful data from the source.
...
...
@@ -137,9 +156,9 @@ public:
/**
* Function DrawWhileCreateOutline
* Draws the zone outline when i
r
is created.
* The moving edges are in XOR graphic mode, old segment in draw_mode graphic mode
(usually GR_OR)
*
The closing edge has its own shape
* Draws the zone outline when i
t
is created.
* The moving edges are in XOR graphic mode, old segment in draw_mode graphic mode
*
(usually GR_OR). The closing edge has its own shape.
* @param panel = current Draw Panel
* @param DC = current Device Context
* @param draw_mode = draw mode: OR, XOR ..
...
...
@@ -164,9 +183,11 @@ public:
/**
* Function CalculateSubAreaBoundaryBox
* Calculates the bounding box of a a filled area ( list of CPolyPt )
* use m_FilledPolysList as list of CPolyPt (that are the corners of one or more polygons or filled areas )
* use m_FilledPolysList as list of CPolyPt (that are the corners of one or more
* polygons or filled areas )
* @return an EDA_RECT as bounding box
* @param aIndexStart = index of the first corner of a polygon (filled area) in m_FilledPolysList
* @param aIndexStart = index of the first corner of a polygon (filled area)
* in m_FilledPolysList
* @param aIndexEnd = index of the last corner of a polygon in m_FilledPolysList
*/
EDA_RECT
CalculateSubAreaBoundaryBox
(
int
aIndexStart
,
int
aIndexEnd
);
...
...
@@ -275,7 +296,7 @@ public:
bool
HitTestForEdge
(
const
wxPoint
&
refPos
);
/**
* Function HitTest (overl
ay
ed)
* Function HitTest (overl
oad
ed)
* tests if the given EDA_RECT contains the bounds of this object.
* @param refArea : the given EDA_RECT
* @return bool - true if a hit, else false
...
...
@@ -427,6 +448,7 @@ public:
};
void
SetCornerSmoothingType
(
int
aType
)
{
cornerSmoothingType
=
aType
;
};
int
GetCornerSmoothingType
()
const
{
return
cornerSmoothingType
;
};
void
SetCornerRadius
(
unsigned
int
aRadius
)
...
...
pcbnew/dimension.cpp
View file @
e26cdada
/**
* @file dimension.cpp
* @brief Dialog and code for editing a d
emi
nsion object.
* @brief Dialog and code for editing a d
ime
nsion object.
*/
#include "fctsys.h"
...
...
@@ -13,15 +13,14 @@
#include "dialog_helpers.h"
/* Local functions */
static
void
Exit_EditDimension
(
EDA_DRAW_PANEL
*
Panel
,
wxDC
*
DC
);
static
void
Montre_Position_New_Dimension
(
EDA_DRAW_PANEL
*
aPanel
,
wxDC
*
aDC
,
static
void
MoveDimension
(
EDA_DRAW_PANEL
*
aPanel
,
wxDC
*
aDC
,
const
wxPoint
&
aPosition
,
bool
aErase
);
/* Local variables : */
static
int
status_dimension
;
/* Used in
c
imension creation:
static
int
status_dimension
;
/* Used in
d
imension creation:
* = 0 : initial value: no dimension in progress
* = 1 : First point created
*
= 2 : Secont
point created, the text must be placed */
*
= 2 : Second
point created, the text must be placed */
/*
* A dimension has this shape:
...
...
@@ -54,7 +53,7 @@ private:
public
:
// Constructor and destructor
DIMENSION_EDITOR_DIALOG
(
PCB_EDIT_FRAME
*
parent
,
DIMENSION
*
Dimension
,
wxDC
*
DC
);
DIMENSION_EDITOR_DIALOG
(
PCB_EDIT_FRAME
*
aParent
,
DIMENSION
*
aDimension
,
wxDC
*
a
DC
);
~
DIMENSION_EDITOR_DIALOG
()
{
}
...
...
@@ -73,18 +72,17 @@ BEGIN_EVENT_TABLE( DIMENSION_EDITOR_DIALOG, wxDialog )
END_EVENT_TABLE
()
DIMENSION_EDITOR_DIALOG
::
DIMENSION_EDITOR_DIALOG
(
PCB_EDIT_FRAME
*
parent
,
DIMENSION
*
Dimension
,
wxDC
*
DC
)
:
wxDialog
(
parent
,
-
1
,
wxString
(
_
(
"Dimension properties"
)
)
)
DIMENSION_EDITOR_DIALOG
::
DIMENSION_EDITOR_DIALOG
(
PCB_EDIT_FRAME
*
aParent
,
DIMENSION
*
aDimension
,
wxDC
*
aDC
)
:
wxDialog
(
aParent
,
-
1
,
_
(
"Dimension Properties"
)
)
{
wxButton
*
Button
;
m_Parent
=
p
arent
;
m_DC
=
DC
;
m_Parent
=
aP
arent
;
m_DC
=
a
DC
;
Centre
();
CurrentDimension
=
Dimension
;
CurrentDimension
=
a
Dimension
;
wxBoxSizer
*
MainBoxSizer
=
new
wxBoxSizer
(
wxHORIZONTAL
);
SetSizer
(
MainBoxSizer
);
...
...
@@ -93,7 +91,7 @@ DIMENSION_EDITOR_DIALOG::DIMENSION_EDITOR_DIALOG( PCB_EDIT_FRAME* parent,
MainBoxSizer
->
Add
(
LeftBoxSizer
,
0
,
wxGROW
|
wxALL
,
5
);
MainBoxSizer
->
Add
(
RightBoxSizer
,
0
,
wxALIGN_CENTER_VERTICAL
|
wxALL
,
5
);
/* Creat
ion des boutons de commande
*/
/* Creat
e command buttons.
*/
Button
=
new
wxButton
(
this
,
wxID_OK
,
_
(
"OK"
)
);
RightBoxSizer
->
Add
(
Button
,
0
,
wxGROW
|
wxALL
,
5
);
...
...
@@ -105,7 +103,7 @@ DIMENSION_EDITOR_DIALOG::DIMENSION_EDITOR_DIALOG( PCB_EDIT_FRAME* parent,
wxDefaultPosition
,
wxSize
(
-
1
,
-
1
),
2
,
display_msg
,
1
,
wxRA_SPECIFY_COLS
);
if
(
Dimension
->
m_Text
->
m_Mirror
)
if
(
a
Dimension
->
m_Text
->
m_Mirror
)
m_Mirror
->
SetSelection
(
1
);
RightBoxSizer
->
Add
(
m_Mirror
,
0
,
wxGROW
|
wxALL
,
5
);
...
...
@@ -113,7 +111,7 @@ DIMENSION_EDITOR_DIALOG::DIMENSION_EDITOR_DIALOG( PCB_EDIT_FRAME* parent,
LeftBoxSizer
->
Add
(
new
wxStaticText
(
this
,
-
1
,
_
(
"Text:"
)
),
0
,
wxGROW
|
wxLEFT
|
wxRIGHT
|
wxTOP
|
wxADJUST_MINSIZE
,
5
);
m_Name
=
new
wxTextCtrl
(
this
,
-
1
,
Dimension
->
m_Text
->
m_Text
,
m_Name
=
new
wxTextCtrl
(
this
,
-
1
,
a
Dimension
->
m_Text
->
m_Text
,
wxDefaultPosition
,
wxSize
(
200
,
-
1
)
);
m_Name
->
SetInsertionPoint
(
1
);
...
...
@@ -123,12 +121,10 @@ DIMENSION_EDITOR_DIALOG::DIMENSION_EDITOR_DIALOG( PCB_EDIT_FRAME* parent,
wxGROW
|
wxALIGN_CENTER_VERTICAL
|
wxLEFT
|
wxRIGHT
|
wxBOTTOM
,
5
);
m_TxtSizeCtrl
=
new
EDA_SIZE_CTRL
(
this
,
_
(
"Size"
),
Dimension
->
m_Text
->
m_Size
,
m_TxtSizeCtrl
=
new
EDA_SIZE_CTRL
(
this
,
_
(
"Size"
),
aDimension
->
m_Text
->
m_Size
,
g_UserUnit
,
LeftBoxSizer
,
m_Parent
->
m_InternalUnits
);
m_TxtWidthCtrl
=
new
EDA_VALUE_CTRL
(
this
,
_
(
"Width"
),
Dimension
->
m_Width
,
m_TxtWidthCtrl
=
new
EDA_VALUE_CTRL
(
this
,
_
(
"Width"
),
aDimension
->
m_Width
,
g_UserUnit
,
LeftBoxSizer
,
m_Parent
->
m_InternalUnits
);
wxStaticText
*
text
=
new
wxStaticText
(
this
,
-
1
,
_
(
"Layer:"
)
);
...
...
@@ -140,10 +136,10 @@ DIMENSION_EDITOR_DIALOG::DIMENSION_EDITOR_DIALOG( PCB_EDIT_FRAME* parent,
for
(
int
layer
=
FIRST_NO_COPPER_LAYER
;
layer
<
NB_LAYERS
;
layer
++
)
{
m_SelLayerBox
->
Append
(
p
arent
->
GetBoard
()
->
GetLayerName
(
layer
)
);
m_SelLayerBox
->
Append
(
aP
arent
->
GetBoard
()
->
GetLayerName
(
layer
)
);
}
m_SelLayerBox
->
SetSelection
(
Dimension
->
GetLayer
()
-
FIRST_NO_COPPER_LAYER
);
m_SelLayerBox
->
SetSelection
(
a
Dimension
->
GetLayer
()
-
FIRST_NO_COPPER_LAYER
);
GetSizer
()
->
Fit
(
this
);
GetSizer
()
->
SetSizeHints
(
this
);
...
...
@@ -200,7 +196,7 @@ void DIMENSION_EDITOR_DIALOG::OnOkClick( wxCommandEvent& event )
}
static
void
Exit_EditDimension
(
EDA_DRAW_PANEL
*
Panel
,
wxDC
*
DC
)
static
void
AbortMoveDimension
(
EDA_DRAW_PANEL
*
Panel
,
wxDC
*
a
DC
)
{
DIMENSION
*
Dimension
=
(
DIMENSION
*
)
Panel
->
GetScreen
()
->
GetCurItem
();
...
...
@@ -208,12 +204,12 @@ static void Exit_EditDimension( EDA_DRAW_PANEL* Panel, wxDC* DC )
{
if
(
Dimension
->
IsNew
()
)
{
Dimension
->
Draw
(
Panel
,
DC
,
GR_XOR
);
Dimension
->
Draw
(
Panel
,
a
DC
,
GR_XOR
);
Dimension
->
DeleteStructure
();
}
else
{
Dimension
->
Draw
(
Panel
,
DC
,
GR_OR
);
Dimension
->
Draw
(
Panel
,
a
DC
,
GR_OR
);
}
}
...
...
@@ -222,75 +218,75 @@ static void Exit_EditDimension( EDA_DRAW_PANEL* Panel, wxDC* DC )
}
DIMENSION
*
PCB_EDIT_FRAME
::
Begin_Dimension
(
DIMENSION
*
Dimension
,
wxDC
*
DC
)
DIMENSION
*
PCB_EDIT_FRAME
::
EditDimension
(
DIMENSION
*
aDimension
,
wxDC
*
a
DC
)
{
wxPoint
pos
;
if
(
Dimension
==
NULL
)
/* debut reel du trace */
if
(
aDimension
==
NULL
)
{
status_dimension
=
1
;
pos
=
GetScreen
()
->
GetCrossHairPosition
();
Dimension
=
new
DIMENSION
(
GetBoard
()
);
Dimension
->
m_Flags
=
IS_NEW
;
a
Dimension
=
new
DIMENSION
(
GetBoard
()
);
a
Dimension
->
m_Flags
=
IS_NEW
;
Dimension
->
SetLayer
(
getActiveLayer
()
);
a
Dimension
->
SetLayer
(
getActiveLayer
()
);
Dimension
->
Barre_ox
=
Dimension
->
Barre_f
x
=
pos
.
x
;
Dimension
->
Barre_oy
=
Dimension
->
Barre_f
y
=
pos
.
y
;
aDimension
->
m_crossBarOx
=
aDimension
->
m_crossBarF
x
=
pos
.
x
;
aDimension
->
m_crossBarOy
=
aDimension
->
m_crossBarF
y
=
pos
.
y
;
Dimension
->
TraitD_ox
=
Dimension
->
TraitD_f
x
=
pos
.
x
;
Dimension
->
TraitD_oy
=
Dimension
->
TraitD_f
y
=
pos
.
y
;
aDimension
->
m_featureLineDOx
=
aDimension
->
m_featureLineDF
x
=
pos
.
x
;
aDimension
->
m_featureLineDOy
=
aDimension
->
m_featureLineDF
y
=
pos
.
y
;
Dimension
->
TraitG_ox
=
Dimension
->
TraitG_f
x
=
pos
.
x
;
Dimension
->
TraitG_oy
=
Dimension
->
TraitG_f
y
=
pos
.
y
;
aDimension
->
m_featureLineGOx
=
aDimension
->
m_featureLineGF
x
=
pos
.
x
;
aDimension
->
m_featureLineGOy
=
aDimension
->
m_featureLineGF
y
=
pos
.
y
;
Dimension
->
FlecheG1_ox
=
Dimension
->
FlecheG1_f
x
=
pos
.
x
;
Dimension
->
FlecheG1_oy
=
Dimension
->
FlecheG1_f
y
=
pos
.
y
;
aDimension
->
m_arrowG1Ox
=
aDimension
->
m_arrowG1F
x
=
pos
.
x
;
aDimension
->
m_arrowG1Oy
=
aDimension
->
m_arrowG1F
y
=
pos
.
y
;
Dimension
->
FlecheG2_ox
=
Dimension
->
FlecheG2_f
x
=
pos
.
x
;
Dimension
->
FlecheG2_oy
=
Dimension
->
FlecheG2_f
y
=
pos
.
y
;
aDimension
->
m_arrowG2Ox
=
aDimension
->
m_arrowG2F
x
=
pos
.
x
;
aDimension
->
m_arrowG2Oy
=
aDimension
->
m_arrowG2F
y
=
pos
.
y
;
Dimension
->
FlecheD1_ox
=
Dimension
->
FlecheD1_f
x
=
pos
.
x
;
Dimension
->
FlecheD1_oy
=
Dimension
->
FlecheD1_f
y
=
pos
.
y
;
aDimension
->
m_arrowD1Ox
=
aDimension
->
m_arrowD1F
x
=
pos
.
x
;
aDimension
->
m_arrowD1Oy
=
aDimension
->
m_arrowD1F
y
=
pos
.
y
;
Dimension
->
FlecheD2_ox
=
Dimension
->
FlecheD2_f
x
=
pos
.
x
;
Dimension
->
FlecheD2_oy
=
Dimension
->
FlecheD2_f
y
=
pos
.
y
;
aDimension
->
m_arrowD2Ox
=
aDimension
->
m_arrowD2F
x
=
pos
.
x
;
aDimension
->
m_arrowD2Oy
=
aDimension
->
m_arrowD2F
y
=
pos
.
y
;
Dimension
->
m_Text
->
m_Size
=
GetBoard
()
->
GetBoardDesignSettings
()
->
m_PcbTextSize
;
a
Dimension
->
m_Text
->
m_Size
=
GetBoard
()
->
GetBoardDesignSettings
()
->
m_PcbTextSize
;
int
width
=
GetBoard
()
->
GetBoardDesignSettings
()
->
m_PcbTextWidth
;
int
maxthickness
=
Clamp_Text_PenSize
(
width
,
Dimension
->
m_Text
->
m_Size
);
int
maxthickness
=
Clamp_Text_PenSize
(
width
,
a
Dimension
->
m_Text
->
m_Size
);
if
(
width
>
maxthickness
)
{
width
=
maxthickness
;
}
Dimension
->
m_Text
->
m_Thickness
=
Dimension
->
m_Width
=
width
;
aDimension
->
m_Text
->
m_Thickness
=
a
Dimension
->
m_Width
=
width
;
Dimension
->
AdjustDimensionDetails
(
);
a
Dimension
->
AdjustDimensionDetails
(
);
Dimension
->
Draw
(
DrawPanel
,
DC
,
GR_XOR
);
aDimension
->
Draw
(
DrawPanel
,
a
DC
,
GR_XOR
);
DrawPanel
->
SetMouseCapture
(
Mo
ntre_Position_New_Dimension
,
Exit_Edit
Dimension
);
return
Dimension
;
DrawPanel
->
SetMouseCapture
(
Mo
veDimension
,
AbortMove
Dimension
);
return
a
Dimension
;
}
// Dimension != NULL
if
(
status_dimension
==
1
)
{
status_dimension
=
2
;
return
Dimension
;
return
a
Dimension
;
}
Dimension
->
Draw
(
DrawPanel
,
DC
,
GR_OR
);
Dimension
->
m_Flags
=
0
;
aDimension
->
Draw
(
DrawPanel
,
a
DC
,
GR_OR
);
a
Dimension
->
m_Flags
=
0
;
/* ADD this new item in list */
GetBoard
()
->
Add
(
Dimension
);
GetBoard
()
->
Add
(
a
Dimension
);
// Add store it in undo/redo list
SaveCopyInUndoList
(
Dimension
,
UR_NEW
);
SaveCopyInUndoList
(
a
Dimension
,
UR_NEW
);
OnModify
();
DrawPanel
->
SetMouseCapture
(
NULL
,
NULL
);
...
...
@@ -299,7 +295,7 @@ DIMENSION* PCB_EDIT_FRAME::Begin_Dimension( DIMENSION* Dimension, wxDC* DC )
}
static
void
Mo
ntre_Position_New_
Dimension
(
EDA_DRAW_PANEL
*
aPanel
,
wxDC
*
aDC
,
static
void
Mo
ve
Dimension
(
EDA_DRAW_PANEL
*
aPanel
,
wxDC
*
aDC
,
const
wxPoint
&
aPosition
,
bool
aErase
)
{
PCB_SCREEN
*
screen
=
(
PCB_SCREEN
*
)
aPanel
->
GetScreen
();
...
...
@@ -319,31 +315,31 @@ static void Montre_Position_New_Dimension( EDA_DRAW_PANEL* aPanel, wxDC* aDC,
if
(
status_dimension
==
1
)
{
Dimension
->
TraitD_o
x
=
pos
.
x
;
Dimension
->
TraitD_o
y
=
pos
.
y
;
Dimension
->
Barre_fx
=
Dimension
->
TraitD_o
x
;
Dimension
->
Barre_fy
=
Dimension
->
TraitD_o
y
;
Dimension
->
m_featureLineDO
x
=
pos
.
x
;
Dimension
->
m_featureLineDO
y
=
pos
.
y
;
Dimension
->
m_crossBarFx
=
Dimension
->
m_featureLineDO
x
;
Dimension
->
m_crossBarFy
=
Dimension
->
m_featureLineDO
y
;
Dimension
->
AdjustDimensionDetails
(
);
}
else
{
int
deltax
,
deltay
,
dx
,
dy
;
float
angle
,
depl
;
deltax
=
Dimension
->
TraitD_ox
-
Dimension
->
TraitG_o
x
;
deltay
=
Dimension
->
TraitD_oy
-
Dimension
->
TraitG_o
y
;
deltax
=
Dimension
->
m_featureLineDOx
-
Dimension
->
m_featureLineGO
x
;
deltay
=
Dimension
->
m_featureLineDOy
-
Dimension
->
m_featureLineGO
y
;
/* Calculating the direction of travel perpendicular to the selected axis. */
angle
=
atan2
(
(
double
)
deltay
,
(
double
)
deltax
)
+
(
M_PI
/
2
);
deltax
=
pos
.
x
-
Dimension
->
TraitD_o
x
;
deltay
=
pos
.
y
-
Dimension
->
TraitD_o
y
;
deltax
=
pos
.
x
-
Dimension
->
m_featureLineDO
x
;
deltay
=
pos
.
y
-
Dimension
->
m_featureLineDO
y
;
depl
=
(
deltax
*
cos
(
angle
)
)
+
(
deltay
*
sin
(
angle
)
);
dx
=
(
int
)
(
depl
*
cos
(
angle
)
);
dy
=
(
int
)
(
depl
*
sin
(
angle
)
);
Dimension
->
Barre_ox
=
Dimension
->
TraitG_o
x
+
dx
;
Dimension
->
Barre_oy
=
Dimension
->
TraitG_o
y
+
dy
;
Dimension
->
Barre_fx
=
Dimension
->
TraitD_o
x
+
dx
;
Dimension
->
Barre_fy
=
Dimension
->
TraitD_o
y
+
dy
;
Dimension
->
m_crossBarOx
=
Dimension
->
m_featureLineGO
x
+
dx
;
Dimension
->
m_crossBarOy
=
Dimension
->
m_featureLineGO
y
+
dy
;
Dimension
->
m_crossBarFx
=
Dimension
->
m_featureLineDO
x
+
dx
;
Dimension
->
m_crossBarFy
=
Dimension
->
m_featureLineDO
y
+
dy
;
Dimension
->
AdjustDimensionDetails
(
);
}
...
...
@@ -352,26 +348,26 @@ static void Montre_Position_New_Dimension( EDA_DRAW_PANEL* aPanel, wxDC* aDC,
}
void
PCB_EDIT_FRAME
::
Install_Edit_Dimension
(
DIMENSION
*
Dimension
,
wxDC
*
DC
)
void
PCB_EDIT_FRAME
::
ShowDimensionPropertyDialog
(
DIMENSION
*
aDimension
,
wxDC
*
a
DC
)
{
if
(
Dimension
==
NULL
)
if
(
a
Dimension
==
NULL
)
return
;
DIMENSION_EDITOR_DIALOG
*
frame
=
new
DIMENSION_EDITOR_DIALOG
(
this
,
Dimension
,
DC
);
DIMENSION_EDITOR_DIALOG
*
frame
=
new
DIMENSION_EDITOR_DIALOG
(
this
,
aDimension
,
a
DC
);
frame
->
ShowModal
();
frame
->
Destroy
();
}
void
PCB_EDIT_FRAME
::
Delete
_Dimension
(
DIMENSION
*
Dimension
,
wxDC
*
DC
)
void
PCB_EDIT_FRAME
::
Delete
Dimension
(
DIMENSION
*
aDimension
,
wxDC
*
a
DC
)
{
if
(
Dimension
==
NULL
)
if
(
a
Dimension
==
NULL
)
return
;
if
(
DC
)
Dimension
->
Draw
(
DrawPanel
,
DC
,
GR_XOR
);
if
(
a
DC
)
aDimension
->
Draw
(
DrawPanel
,
a
DC
,
GR_XOR
);
SaveCopyInUndoList
(
Dimension
,
UR_DELETED
);
Dimension
->
UnLink
();
SaveCopyInUndoList
(
aDimension
,
UR_DELETED
);
a
Dimension
->
UnLink
();
OnModify
();
}
pcbnew/edit.cpp
View file @
e26cdada
/**************************************/
/* edit.cpp: edit PCB implementation. */
/**************************************/
/**
* @file edit.cpp
* @brief Edit PCB implementation.
*/
#include "fctsys.h"
#include "appl_wxstruct.h"
...
...
@@ -897,12 +898,12 @@ void PCB_EDIT_FRAME::Process_Special_Functions( wxCommandEvent& event )
case
ID_POPUP_PCB_DELETE_DIMENSION
:
DrawPanel
->
MoveCursorToCrossHair
();
Delete
_
Dimension
(
(
DIMENSION
*
)
GetCurItem
(),
&
dc
);
DeleteDimension
(
(
DIMENSION
*
)
GetCurItem
(),
&
dc
);
SetCurItem
(
NULL
);
break
;
case
ID_POPUP_PCB_EDIT_DIMENSION
:
Install_Edit_Dimension
(
(
DIMENSION
*
)
GetCurItem
(),
&
dc
);
ShowDimensionPropertyDialog
(
(
DIMENSION
*
)
GetCurItem
(),
&
dc
);
DrawPanel
->
MoveCursorToCrossHair
();
break
;
...
...
@@ -1092,7 +1093,7 @@ void PCB_EDIT_FRAME::RemoveStruct( BOARD_ITEM* Item, wxDC* DC )
break
;
case
TYPE_DIMENSION
:
Delete
_
Dimension
(
(
DIMENSION
*
)
Item
,
DC
);
DeleteDimension
(
(
DIMENSION
*
)
Item
,
DC
);
break
;
case
PCB_TARGET_T
:
...
...
pcbnew/onleftclick.cpp
View file @
e26cdada
/**************************************************************/
/* onleftclick.cpp: */
/* function called when the left button is clicked (released) */
/* function called when the left button is double clicked */
/**************************************************************/
/**
* @file pcbnew/onleftclick.cpp
* @brief Functions called when the left button is clicked or double clicked.
*/
#include "fctsys.h"
#include "class_drawpanel.h"
...
...
@@ -13,7 +12,7 @@
#include "pcbnew_id.h"
/* Handle the left butto
m
mouse click, when a tool is active
/* Handle the left butto
n
mouse click, when a tool is active
*/
void
PCB_EDIT_FRAME
::
OnLeftClick
(
wxDC
*
aDC
,
const
wxPoint
&
aPosition
)
{
...
...
@@ -286,7 +285,7 @@ void PCB_EDIT_FRAME::OnLeftClick( wxDC* aDC, const wxPoint& aPosition )
}
}
else
if
(
DrawStruct
&&
(
DrawStruct
->
Type
()
==
TYPE_ZONE_CONTAINER
)
&&
DrawStruct
->
IsNew
()
)
{
// Add a new corner to the current outline be
e
ing created:
{
// Add a new corner to the current outline being created:
DrawPanel
->
m_AutoPAN_Request
=
true
;
Begin_Zone
(
aDC
);
DrawStruct
=
GetBoard
()
->
m_CurrentZoneContour
;
...
...
@@ -349,13 +348,13 @@ void PCB_EDIT_FRAME::OnLeftClick( wxDC* aDC, const wxPoint& aPosition )
if
(
(
DrawStruct
==
NULL
)
||
(
DrawStruct
->
m_Flags
==
0
)
)
{
DrawStruct
=
Begin_
Dimension
(
NULL
,
aDC
);
DrawStruct
=
Edit
Dimension
(
NULL
,
aDC
);
SetCurItem
(
DrawStruct
);
DrawPanel
->
m_AutoPAN_Request
=
true
;
}
else
if
(
DrawStruct
&&
(
DrawStruct
->
Type
()
==
TYPE_DIMENSION
)
&&
DrawStruct
->
IsNew
()
)
{
DrawStruct
=
Begin_
Dimension
(
(
DIMENSION
*
)
DrawStruct
,
aDC
);
DrawStruct
=
Edit
Dimension
(
(
DIMENSION
*
)
DrawStruct
,
aDC
);
SetCurItem
(
DrawStruct
);
DrawPanel
->
m_AutoPAN_Request
=
true
;
}
...
...
@@ -535,7 +534,7 @@ void PCB_EDIT_FRAME::OnEditItemRequest( wxDC* aDC, BOARD_ITEM* aItem )
break
;
case
TYPE_DIMENSION
:
Install_Edit_Dimension
(
(
DIMENSION
*
)
aItem
,
aDC
);
ShowDimensionPropertyDialog
(
(
DIMENSION
*
)
aItem
,
aDC
);
break
;
case
TYPE_TEXTE_MODULE
:
...
...
@@ -554,4 +553,3 @@ void PCB_EDIT_FRAME::OnEditItemRequest( wxDC* aDC, BOARD_ITEM* aItem )
break
;
}
}
pcbnew/plot_rtn.cpp
View file @
e26cdada
/*************************/
/* Common plot routines. */
/*************************/
/**
* @file plot_rtn.cpp
* @brief Common plot routines.
*/
#include "fctsys.h"
#include "common.h"
...
...
@@ -22,9 +23,7 @@ static void PlotTextModule( PLOTTER* plotter, TEXTE_MODULE* pt_texte,
/* Creates the plot for silkscreen layers
*/
void
PCB_BASE_FRAME
::
Plot_Serigraphie
(
PLOTTER
*
plotter
,
int
aLayerMask
,
GRTraceMode
trace_mode
)
void
PCB_BASE_FRAME
::
PlotSilkScreen
(
PLOTTER
*
plotter
,
int
aLayerMask
,
GRTraceMode
trace_mode
)
{
bool
trace_val
,
trace_ref
;
TEXTE_MODULE
*
pt_texte
;
...
...
@@ -56,7 +55,7 @@ void PCB_BASE_FRAME::Plot_Serigraphie( PLOTTER* plotter,
break
;
default
:
DisplayError
(
this
,
wxT
(
"Plot
_Serigraphie
() error: unexpected Type()"
)
);
DisplayError
(
this
,
wxT
(
"Plot
SilkScreen
() error: unexpected Type()"
)
);
break
;
}
}
...
...
@@ -270,46 +269,46 @@ void PlotDimension( PLOTTER* plotter, DIMENSION* Dimension, int aLayerMask,
PlotTextePcb
(
plotter
,
Dimension
->
m_Text
,
aLayerMask
,
trace_mode
);
DrawTmp
->
m_Start
.
x
=
Dimension
->
Barre_o
x
;
DrawTmp
->
m_Start
.
y
=
Dimension
->
Barre_o
y
;
DrawTmp
->
m_End
.
x
=
Dimension
->
Barre_f
x
;
DrawTmp
->
m_End
.
y
=
Dimension
->
Barre_f
y
;
DrawTmp
->
m_Start
.
x
=
Dimension
->
m_crossBarO
x
;
DrawTmp
->
m_Start
.
y
=
Dimension
->
m_crossBarO
y
;
DrawTmp
->
m_End
.
x
=
Dimension
->
m_crossBarF
x
;
DrawTmp
->
m_End
.
y
=
Dimension
->
m_crossBarF
y
;
PlotDrawSegment
(
plotter
,
DrawTmp
,
aLayerMask
,
trace_mode
);
DrawTmp
->
m_Start
.
x
=
Dimension
->
TraitG_o
x
;
DrawTmp
->
m_Start
.
y
=
Dimension
->
TraitG_o
y
;
DrawTmp
->
m_End
.
x
=
Dimension
->
TraitG_f
x
;
DrawTmp
->
m_End
.
y
=
Dimension
->
TraitG_f
y
;
DrawTmp
->
m_Start
.
x
=
Dimension
->
m_featureLineGO
x
;
DrawTmp
->
m_Start
.
y
=
Dimension
->
m_featureLineGO
y
;
DrawTmp
->
m_End
.
x
=
Dimension
->
m_featureLineGF
x
;
DrawTmp
->
m_End
.
y
=
Dimension
->
m_featureLineGF
y
;
PlotDrawSegment
(
plotter
,
DrawTmp
,
aLayerMask
,
trace_mode
);
DrawTmp
->
m_Start
.
x
=
Dimension
->
TraitD_o
x
;
DrawTmp
->
m_Start
.
y
=
Dimension
->
TraitD_o
y
;
DrawTmp
->
m_End
.
x
=
Dimension
->
TraitD_f
x
;
DrawTmp
->
m_End
.
y
=
Dimension
->
TraitD_f
y
;
DrawTmp
->
m_Start
.
x
=
Dimension
->
m_featureLineDO
x
;
DrawTmp
->
m_Start
.
y
=
Dimension
->
m_featureLineDO
y
;
DrawTmp
->
m_End
.
x
=
Dimension
->
m_featureLineDF
x
;
DrawTmp
->
m_End
.
y
=
Dimension
->
m_featureLineDF
y
;
PlotDrawSegment
(
plotter
,
DrawTmp
,
aLayerMask
,
trace_mode
);
DrawTmp
->
m_Start
.
x
=
Dimension
->
FlecheD1_o
x
;
DrawTmp
->
m_Start
.
y
=
Dimension
->
FlecheD1_o
y
;
DrawTmp
->
m_End
.
x
=
Dimension
->
FlecheD1_f
x
;
DrawTmp
->
m_End
.
y
=
Dimension
->
FlecheD1_f
y
;
DrawTmp
->
m_Start
.
x
=
Dimension
->
m_arrowD1O
x
;
DrawTmp
->
m_Start
.
y
=
Dimension
->
m_arrowD1O
y
;
DrawTmp
->
m_End
.
x
=
Dimension
->
m_arrowD1F
x
;
DrawTmp
->
m_End
.
y
=
Dimension
->
m_arrowD1F
y
;
PlotDrawSegment
(
plotter
,
DrawTmp
,
aLayerMask
,
trace_mode
);
DrawTmp
->
m_Start
.
x
=
Dimension
->
FlecheD2_o
x
;
DrawTmp
->
m_Start
.
y
=
Dimension
->
FlecheD2_o
y
;
DrawTmp
->
m_End
.
x
=
Dimension
->
FlecheD2_f
x
;
DrawTmp
->
m_End
.
y
=
Dimension
->
FlecheD2_f
y
;
DrawTmp
->
m_Start
.
x
=
Dimension
->
m_arrowD2O
x
;
DrawTmp
->
m_Start
.
y
=
Dimension
->
m_arrowD2O
y
;
DrawTmp
->
m_End
.
x
=
Dimension
->
m_arrowD2F
x
;
DrawTmp
->
m_End
.
y
=
Dimension
->
m_arrowD2F
y
;
PlotDrawSegment
(
plotter
,
DrawTmp
,
aLayerMask
,
trace_mode
);
DrawTmp
->
m_Start
.
x
=
Dimension
->
FlecheG1_o
x
;
DrawTmp
->
m_Start
.
y
=
Dimension
->
FlecheG1_o
y
;
DrawTmp
->
m_End
.
x
=
Dimension
->
FlecheG1_f
x
;
DrawTmp
->
m_End
.
y
=
Dimension
->
FlecheG1_f
y
;
DrawTmp
->
m_Start
.
x
=
Dimension
->
m_arrowG1O
x
;
DrawTmp
->
m_Start
.
y
=
Dimension
->
m_arrowG1O
y
;
DrawTmp
->
m_End
.
x
=
Dimension
->
m_arrowG1F
x
;
DrawTmp
->
m_End
.
y
=
Dimension
->
m_arrowG1F
y
;
PlotDrawSegment
(
plotter
,
DrawTmp
,
aLayerMask
,
trace_mode
);
DrawTmp
->
m_Start
.
x
=
Dimension
->
FlecheG2_o
x
;
DrawTmp
->
m_Start
.
y
=
Dimension
->
FlecheG2_o
y
;
DrawTmp
->
m_End
.
x
=
Dimension
->
FlecheG2_f
x
;
DrawTmp
->
m_End
.
y
=
Dimension
->
FlecheG2_f
y
;
DrawTmp
->
m_Start
.
x
=
Dimension
->
m_arrowG2O
x
;
DrawTmp
->
m_Start
.
y
=
Dimension
->
m_arrowG2O
y
;
DrawTmp
->
m_End
.
x
=
Dimension
->
m_arrowG2F
x
;
DrawTmp
->
m_End
.
y
=
Dimension
->
m_arrowG2F
y
;
PlotDrawSegment
(
plotter
,
DrawTmp
,
aLayerMask
,
trace_mode
);
delete
DrawTmp
;
...
...
@@ -367,8 +366,7 @@ void PlotPcbTarget( PLOTTER* plotter, PCB_TARGET* Mire, int aLayerMask, GRTraceM
/* Plot footprints graphic items (outlines) */
void
Plot_Edges_Modules
(
PLOTTER
*
plotter
,
BOARD
*
pcb
,
int
aLayerMask
,
GRTraceMode
trace_mode
)
void
Plot_Edges_Modules
(
PLOTTER
*
plotter
,
BOARD
*
pcb
,
int
aLayerMask
,
GRTraceMode
trace_mode
)
{
for
(
MODULE
*
module
=
pcb
->
m_Modules
;
module
;
module
=
module
->
Next
()
)
{
...
...
@@ -389,8 +387,7 @@ void Plot_Edges_Modules( PLOTTER* plotter, BOARD* pcb, int aLayerMask,
/* Plot a graphic item (outline) relative to a footprint */
void
Plot_1_EdgeModule
(
PLOTTER
*
plotter
,
EDGE_MODULE
*
PtEdge
,
GRTraceMode
trace_mode
)
void
Plot_1_EdgeModule
(
PLOTTER
*
plotter
,
EDGE_MODULE
*
PtEdge
,
GRTraceMode
trace_mode
)
{
int
type_trace
;
/* Type of item to plot. */
int
thickness
;
/* Segment thickness. */
...
...
@@ -467,8 +464,7 @@ void Plot_1_EdgeModule( PLOTTER* plotter, EDGE_MODULE* PtEdge,
/* Plot a PCB Text, i;e. a text found on a copper or technical layer */
void
PlotTextePcb
(
PLOTTER
*
plotter
,
TEXTE_PCB
*
pt_texte
,
int
aLayerMask
,
GRTraceMode
trace_mode
)
void
PlotTextePcb
(
PLOTTER
*
plotter
,
TEXTE_PCB
*
pt_texte
,
int
aLayerMask
,
GRTraceMode
trace_mode
)
{
int
orient
,
thickness
;
wxPoint
pos
;
...
...
@@ -711,7 +707,7 @@ void PCB_BASE_FRAME::Plot_Layer( PLOTTER* plotter, int Layer, GRTraceMode trace_
break
;
default
:
Plot
_Serigraphie
(
plotter
,
layer_mask
,
trace_mode
);
Plot
SilkScreen
(
plotter
,
layer_mask
,
trace_mode
);
// Gerber: Subtract soldermask from silkscreen if enabled
if
(
plotter
->
GetPlotterType
()
==
PLOT_FORMAT_GERBER
...
...
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