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
0ac3e1fb
Commit
0ac3e1fb
authored
Oct 14, 2013
by
Maciej Suminski
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Namespace KiGfx->KIGFX.
template<> -> template <> Some more reformatting according to uncrustify results.
parent
22045b61
Changes
139
Hide whitespace changes
Inline
Side-by-side
Showing
139 changed files
with
1129 additions
and
974 deletions
+1129
-974
Shaders.cmake
CMakeModules/Shaders.cmake
+2
-1
drawframe.cpp
common/drawframe.cpp
+6
-6
drawpanel_gal.cpp
common/drawpanel_gal.cpp
+10
-10
cairo_compositor.cpp
common/gal/cairo/cairo_compositor.cpp
+2
-1
cairo_gal.cpp
common/gal/cairo/cairo_gal.cpp
+5
-2
color4d.cpp
common/gal/color4d.cpp
+15
-9
graphics_abstraction_layer.cpp
common/gal/graphics_abstraction_layer.cpp
+2
-2
cached_container.cpp
common/gal/opengl/cached_container.cpp
+6
-2
gpu_manager.cpp
common/gal/opengl/gpu_manager.cpp
+1
-1
noncached_container.cpp
common/gal/opengl/noncached_container.cpp
+1
-1
opengl_compositor.cpp
common/gal/opengl/opengl_compositor.cpp
+6
-4
opengl_gal.cpp
common/gal/opengl/opengl_gal.cpp
+7
-3
shader.cpp
common/gal/opengl/shader.cpp
+4
-2
shader.frag
common/gal/opengl/shader.frag
+0
-1
shader.vert
common/gal/opengl/shader.vert
+0
-1
vertex_container.cpp
common/gal/opengl/vertex_container.cpp
+1
-1
vertex_item.cpp
common/gal/opengl/vertex_item.cpp
+1
-1
vertex_manager.cpp
common/gal/opengl/vertex_manager.cpp
+3
-1
stroke_font.cpp
common/gal/stroke_font.cpp
+3
-1
seg.cpp
common/geometry/seg.cpp
+20
-14
shape_collisions.cpp
common/geometry/shape_collisions.cpp
+24
-20
shape_line_chain.cpp
common/geometry/shape_line_chain.cpp
+33
-18
math_util.cpp
common/math/math_util.cpp
+12
-8
painter.cpp
common/painter.cpp
+1
-1
action_manager.cpp
common/tool/action_manager.cpp
+4
-3
context_menu.cpp
common/tool/context_menu.cpp
+4
-1
tool_base.cpp
common/tool/tool_base.cpp
+2
-2
tool_dispatcher.cpp
common/tool/tool_dispatcher.cpp
+21
-19
tool_event.cpp
common/tool/tool_event.cpp
+36
-32
tool_interactive.cpp
common/tool/tool_interactive.cpp
+4
-2
tool_manager.cpp
common/tool/tool_manager.cpp
+16
-10
view.cpp
common/view/view.cpp
+21
-7
view_group.cpp
common/view/view_group.cpp
+4
-3
view_item.cpp
common/view/view_item.cpp
+2
-1
wx_view_controls.cpp
common/view/wx_view_controls.cpp
+16
-12
worksheet_viewitem.cpp
common/worksheet_viewitem.cpp
+1
-1
zoom.cpp
common/zoom.cpp
+2
-2
base_struct.h
include/base_struct.h
+1
-1
class_drawpanel_gal.h
include/class_drawpanel_gal.h
+9
-9
cairo_compositor.h
include/gal/cairo/cairo_compositor.h
+2
-2
cairo_gal.h
include/gal/cairo/cairo_gal.h
+6
-6
color4d.h
include/gal/color4d.h
+3
-3
compositor.h
include/gal/compositor.h
+2
-2
definitions.h
include/gal/definitions.h
+12
-12
graphics_abstraction_layer.h
include/gal/graphics_abstraction_layer.h
+2
-2
cached_container.h
include/gal/opengl/cached_container.h
+3
-3
gpu_manager.h
include/gal/opengl/gpu_manager.h
+8
-9
noncached_container.h
include/gal/opengl/noncached_container.h
+2
-2
opengl_compositor.h
include/gal/opengl/opengl_compositor.h
+2
-2
opengl_gal.h
include/gal/opengl/opengl_gal.h
+4
-3
shader.h
include/gal/opengl/shader.h
+3
-3
vertex_common.h
include/gal/opengl/vertex_common.h
+4
-4
vertex_container.h
include/gal/opengl/vertex_container.h
+3
-2
vertex_item.h
include/gal/opengl/vertex_item.h
+2
-2
vertex_manager.h
include/gal/opengl/vertex_manager.h
+2
-2
stroke_font.h
include/gal/stroke_font.h
+2
-2
rtree.h
include/geometry/rtree.h
+2
-2
seg.h
include/geometry/seg.h
+36
-37
shape.h
include/geometry/shape.h
+12
-9
shape_circle.h
include/geometry/shape_circle.h
+7
-4
shape_index.h
include/geometry/shape_index.h
+19
-14
shape_index_list.h
include/geometry/shape_index_list.h
+72
-67
shape_rect.h
include/geometry/shape_rect.h
+25
-12
length.h.usuned
include/length.h.usuned
+2
-2
macros.h
include/macros.h
+2
-2
box2.h
include/math/box2.h
+7
-5
math_util.h
include/math/math_util.h
+7
-3
matrix3x3.h
include/math/matrix3x3.h
+43
-24
vector2d.h
include/math/vector2d.h
+28
-28
painter.h
include/painter.h
+2
-2
rtree.h
include/rtree.h
+2
-2
action_manager.h
include/tool/action_manager.h
+2
-2
coroutine.h
include/tool/coroutine.h
+34
-30
delegate.h
include/tool/delegate.h
+51
-49
coroutine_example.cpp
include/tool/examples/coroutine_example.cpp
+27
-24
delegate_example.cpp
include/tool/examples/delegate_example.cpp
+16
-15
tool_action.h
include/tool/tool_action.h
+8
-8
tool_base.h
include/tool/tool_base.h
+6
-6
tool_dispatcher.h
include/tool/tool_dispatcher.h
+6
-5
tool_event.h
include/tool/tool_event.h
+46
-39
tool_interactive.h
include/tool/tool_interactive.h
+11
-10
tool_manager.h
include/tool/tool_manager.h
+11
-11
view.h
include/view/view.h
+57
-57
view_controls.h
include/view/view_controls.h
+2
-2
view_group.h
include/view/view_group.h
+3
-4
view_item.h
include/view/view_item.h
+5
-5
view_rtree.h
include/view/view_rtree.h
+2
-2
wx_view_controls.h
include/view/wx_view_controls.h
+5
-3
worksheet_viewitem.h
include/worksheet_viewitem.h
+1
-1
basepcbframe.cpp
pcbnew/basepcbframe.cpp
+14
-14
class_pcb_layer_widget.cpp
pcbnew/class_pcb_layer_widget.cpp
+2
-2
dialog_display_options.cpp
pcbnew/dialogs/dialog_display_options.cpp
+4
-4
dialog_general_options.cpp
pcbnew/dialogs/dialog_general_options.cpp
+4
-4
pcb_painter.cpp
pcbnew/pcb_painter.cpp
+1
-1
pcb_painter.h
pcbnew/pcb_painter.h
+2
-2
pcbframe.cpp
pcbnew/pcbframe.cpp
+4
-4
direction.h
pcbnew/router/direction.h
+0
-1
pns_index.h
pcbnew/router/pns_index.h
+0
-1
pns_item.cpp
pcbnew/router/pns_item.cpp
+0
-1
pns_item.h
pcbnew/router/pns_item.h
+3
-4
pns_itemset.cpp
pcbnew/router/pns_itemset.cpp
+0
-1
pns_itemset.h
pcbnew/router/pns_itemset.h
+0
-1
pns_joint.h
pcbnew/router/pns_joint.h
+3
-4
pns_layerset.h
pcbnew/router/pns_layerset.h
+0
-1
pns_line.cpp
pcbnew/router/pns_line.cpp
+4
-5
pns_line.h
pcbnew/router/pns_line.h
+0
-1
pns_line_placer.cpp
pcbnew/router/pns_line_placer.cpp
+3
-5
pns_line_placer.h
pcbnew/router/pns_line_placer.h
+0
-1
pns_node.cpp
pcbnew/router/pns_node.cpp
+9
-9
pns_optimizer.cpp
pcbnew/router/pns_optimizer.cpp
+8
-9
pns_optimizer.h
pcbnew/router/pns_optimizer.h
+0
-1
pns_router.cpp
pcbnew/router/pns_router.cpp
+35
-35
pns_router.h
pcbnew/router/pns_router.h
+5
-6
pns_routing_settings.h
pcbnew/router/pns_routing_settings.h
+0
-1
pns_segment.h
pcbnew/router/pns_segment.h
+0
-1
pns_shove.cpp
pcbnew/router/pns_shove.cpp
+0
-1
pns_shove.h
pcbnew/router/pns_shove.h
+0
-1
pns_solid.cpp
pcbnew/router/pns_solid.cpp
+0
-1
pns_solid.h
pcbnew/router/pns_solid.h
+0
-1
pns_utils.cpp
pcbnew/router/pns_utils.cpp
+0
-1
pns_utils.h
pcbnew/router/pns_utils.h
+0
-1
pns_walkaround.cpp
pcbnew/router/pns_walkaround.cpp
+6
-7
pns_walkaround.h
pcbnew/router/pns_walkaround.h
+0
-1
router_preview_item.cpp
pcbnew/router/router_preview_item.cpp
+2
-3
router_preview_item.h
pcbnew/router/router_preview_item.h
+6
-7
router_tool.cpp
pcbnew/router/router_tool.cpp
+1
-1
router_tool.h
pcbnew/router/router_tool.h
+0
-1
trace.h
pcbnew/router/trace.h
+3
-3
bright_box.cpp
pcbnew/tools/bright_box.cpp
+6
-5
bright_box.h
pcbnew/tools/bright_box.h
+2
-2
common_actions.cpp
pcbnew/tools/common_actions.cpp
+8
-8
item_state.h
pcbnew/tools/item_state.h
+10
-5
move_tool.cpp
pcbnew/tools/move_tool.cpp
+8
-6
move_tool.h
pcbnew/tools/move_tool.h
+1
-1
pcb_tools.cpp
pcbnew/tools/pcb_tools.cpp
+10
-11
selection_area.cpp
pcbnew/tools/selection_area.cpp
+7
-6
selection_area.h
pcbnew/tools/selection_area.h
+4
-4
selection_tool.cpp
pcbnew/tools/selection_tool.cpp
+23
-13
selection_tool.h
pcbnew/tools/selection_tool.h
+2
-2
No files found.
CMakeModules/Shaders.cmake
View file @
0ac3e1fb
...
...
@@ -24,7 +24,8 @@ file( WRITE ${outputFile} "// Do not edit this file, it is autogenerated by CMak
#define SHADER_SRC_H
const unsigned int shaders_number =
${
shadersNumber
}
;
const char *shaders_src[] = {
\n
"
)
const char* shaders_src[] =
{
\n
"
)
foreach
(
inputFile
${
inputFiles
}
)
# put the input file name into the output file
...
...
common/drawframe.cpp
View file @
0ac3e1fb
...
...
@@ -231,7 +231,7 @@ void EDA_DRAW_FRAME::OnToggleGridState( wxCommandEvent& aEvent )
if
(
m_galCanvasActive
)
{
m_galCanvas
->
GetGAL
()
->
SetGridVisibility
(
IsGridVisible
()
);
m_galCanvas
->
GetView
()
->
MarkTargetDirty
(
K
iGfx
::
TARGET_NONCACHED
);
m_galCanvas
->
GetView
()
->
MarkTargetDirty
(
K
IGFX
::
TARGET_NONCACHED
);
}
m_canvas
->
Refresh
();
...
...
@@ -391,7 +391,7 @@ void EDA_DRAW_FRAME::OnSelectGrid( wxCommandEvent& event )
{
m_galCanvas
->
GetGAL
()
->
SetGridSize
(
VECTOR2D
(
screen
->
GetGrid
().
m_Size
.
x
,
screen
->
GetGrid
().
m_Size
.
y
)
);
m_galCanvas
->
GetView
()
->
MarkTargetDirty
(
K
iGfx
::
TARGET_NONCACHED
);
m_galCanvas
->
GetView
()
->
MarkTargetDirty
(
K
IGFX
::
TARGET_NONCACHED
);
}
m_canvas
->
Refresh
();
...
...
@@ -425,8 +425,8 @@ void EDA_DRAW_FRAME::OnSelectZoom( wxCommandEvent& event )
if
(
m_galCanvasActive
)
{
// Apply computed view settings to GAL
K
iGfx
::
VIEW
*
view
=
m_galCanvas
->
GetView
();
K
iGfx
::
GAL
*
gal
=
m_galCanvas
->
GetGAL
();
K
IGFX
::
VIEW
*
view
=
m_galCanvas
->
GetView
();
K
IGFX
::
GAL
*
gal
=
m_galCanvas
->
GetGAL
();
double
zoomFactor
=
gal
->
GetWorldScale
()
/
gal
->
GetZoomFactor
();
double
zoom
=
1.0
/
(
zoomFactor
*
GetZoom
()
);
...
...
@@ -954,8 +954,8 @@ void EDA_DRAW_FRAME::AdjustScrollBars( const wxPoint& aCenterPositionIU )
void
EDA_DRAW_FRAME
::
UseGalCanvas
(
bool
aEnable
)
{
K
iGfx
::
VIEW
*
view
=
m_galCanvas
->
GetView
();
K
iGfx
::
GAL
*
gal
=
m_galCanvas
->
GetGAL
();
K
IGFX
::
VIEW
*
view
=
m_galCanvas
->
GetView
();
K
IGFX
::
GAL
*
gal
=
m_galCanvas
->
GetGAL
();
double
zoomFactor
=
gal
->
GetWorldScale
()
/
gal
->
GetZoomFactor
();
...
...
common/drawpanel_gal.cpp
View file @
0ac3e1fb
...
...
@@ -66,13 +66,13 @@ EDA_DRAW_PANEL_GAL::EDA_DRAW_PANEL_GAL( wxWindow* aParentWindow, wxWindowID aWin
m_gal
->
SetZoomFactor
(
1.0
);
m_gal
->
ComputeWorldScreenMatrix
();
m_painter
=
new
K
iGfx
::
PCB_PAINTER
(
m_gal
);
m_painter
=
new
K
IGFX
::
PCB_PAINTER
(
m_gal
);
m_view
=
new
K
iGfx
::
VIEW
(
true
);
m_view
=
new
K
IGFX
::
VIEW
(
true
);
m_view
->
SetPainter
(
m_painter
);
m_view
->
SetGAL
(
m_gal
);
m_viewControls
=
new
K
iGfx
::
WX_VIEW_CONTROLS
(
m_view
,
this
);
m_viewControls
=
new
K
IGFX
::
WX_VIEW_CONTROLS
(
m_view
,
this
);
Connect
(
wxEVT_PAINT
,
wxPaintEventHandler
(
EDA_DRAW_PANEL_GAL
::
onPaint
),
NULL
,
this
);
Connect
(
wxEVT_SIZE
,
wxSizeEventHandler
(
EDA_DRAW_PANEL_GAL
::
onSize
),
NULL
,
this
);
...
...
@@ -90,7 +90,7 @@ EDA_DRAW_PANEL_GAL::EDA_DRAW_PANEL_GAL( wxWindow* aParentWindow, wxWindowID aWin
Connect
(
wxEVT_KEY_UP
,
wxEventHandler
(
EDA_DRAW_PANEL_GAL
::
onEvent
),
NULL
,
this
);
Connect
(
wxEVT_KEY_DOWN
,
wxEventHandler
(
EDA_DRAW_PANEL_GAL
::
onEvent
),
NULL
,
this
);
Connect
(
wxEVT_ENTER_WINDOW
,
wxEventHandler
(
EDA_DRAW_PANEL_GAL
::
onEnter
),
NULL
,
this
);
Connect
(
K
iGfx
::
WX_VIEW_CONTROLS
::
EVT_REFRESH_MOUSE
,
Connect
(
K
IGFX
::
WX_VIEW_CONTROLS
::
EVT_REFRESH_MOUSE
,
wxEventHandler
(
EDA_DRAW_PANEL_GAL
::
onEvent
),
NULL
,
this
);
m_refreshTimer
.
SetOwner
(
this
);
...
...
@@ -122,12 +122,12 @@ void EDA_DRAW_PANEL_GAL::onPaint( wxPaintEvent& WXUNUSED( aEvent ) )
m_lastRefresh
=
wxGetLocalTimeMillis
();
m_gal
->
BeginDrawing
();
m_gal
->
SetBackgroundColor
(
K
iGfx
::
COLOR4D
(
0.0
,
0.0
,
0.0
,
1.0
)
);
m_gal
->
SetBackgroundColor
(
K
IGFX
::
COLOR4D
(
0.0
,
0.0
,
0.0
,
1.0
)
);
m_gal
->
ClearScreen
();
m_view
->
ClearTargets
();
// Grid has to be redrawn only when the NONCACHED target is redrawn
if
(
m_view
->
IsTargetDirty
(
K
iGfx
::
TARGET_NONCACHED
)
)
if
(
m_view
->
IsTargetDirty
(
K
IGFX
::
TARGET_NONCACHED
)
)
m_gal
->
DrawGrid
();
m_view
->
Redraw
();
m_gal
->
DrawCursor
(
m_viewControls
->
GetCursorPosition
()
);
...
...
@@ -139,8 +139,8 @@ void EDA_DRAW_PANEL_GAL::onPaint( wxPaintEvent& WXUNUSED( aEvent ) )
void
EDA_DRAW_PANEL_GAL
::
onSize
(
wxSizeEvent
&
aEvent
)
{
m_gal
->
ResizeScreen
(
aEvent
.
GetSize
().
x
,
aEvent
.
GetSize
().
y
);
m_view
->
MarkTargetDirty
(
K
iGfx
::
TARGET_CACHED
);
m_view
->
MarkTargetDirty
(
K
iGfx
::
TARGET_NONCACHED
);
m_view
->
MarkTargetDirty
(
K
IGFX
::
TARGET_CACHED
);
m_view
->
MarkTargetDirty
(
K
IGFX
::
TARGET_NONCACHED
);
}
...
...
@@ -189,11 +189,11 @@ void EDA_DRAW_PANEL_GAL::SwitchBackend( GalType aGalType )
switch
(
aGalType
)
{
case
GAL_TYPE_OPENGL
:
m_gal
=
new
K
iGfx
::
OPENGL_GAL
(
this
,
this
,
this
);
m_gal
=
new
K
IGFX
::
OPENGL_GAL
(
this
,
this
,
this
);
break
;
case
GAL_TYPE_CAIRO
:
m_gal
=
new
K
iGfx
::
CAIRO_GAL
(
this
,
this
,
this
);
m_gal
=
new
K
IGFX
::
CAIRO_GAL
(
this
,
this
,
this
);
break
;
case
GAL_TYPE_NONE
:
...
...
common/gal/cairo/cairo_compositor.cpp
View file @
0ac3e1fb
...
...
@@ -31,7 +31,7 @@
#include <gal/cairo/cairo_compositor.h>
#include <wx/log.h>
using
namespace
K
iGfx
;
using
namespace
K
IGFX
;
CAIRO_COMPOSITOR
::
CAIRO_COMPOSITOR
(
cairo_t
**
aMainContext
)
:
m_current
(
0
),
m_currentContext
(
aMainContext
),
m_mainContext
(
*
aMainContext
)
...
...
@@ -67,6 +67,7 @@ unsigned int CAIRO_COMPOSITOR::CreateBuffer()
{
// Pixel storage
BitmapPtr
bitmap
(
new
unsigned
int
[
m_bufferSize
]
);
memset
(
bitmap
.
get
(),
0x00
,
m_bufferSize
*
sizeof
(
int
)
);
// Create the Cairo surface
...
...
common/gal/cairo/cairo_gal.cpp
View file @
0ac3e1fb
...
...
@@ -33,10 +33,10 @@
#include <limits>
using
namespace
K
iGfx
;
using
namespace
K
IGFX
;
CAIRO_GAL
::
CAIRO_GAL
(
wxWindow
*
aParent
,
wxEvtHandler
*
aMouseListener
,
wxEvtHandler
*
aPaintListener
,
const
wxString
&
aName
)
:
wxEvtHandler
*
aPaintListener
,
const
wxString
&
aName
)
:
wxWindow
(
aParent
,
wxID_ANY
,
wxDefaultPosition
,
wxDefaultSize
,
wxEXPAND
,
aName
)
{
parentWindow
=
aParent
;
...
...
@@ -92,6 +92,7 @@ CAIRO_GAL::~CAIRO_GAL()
void
CAIRO_GAL
::
BeginDrawing
()
{
initSurface
();
if
(
!
validCompositor
)
setCompositor
();
...
...
@@ -284,6 +285,7 @@ void CAIRO_GAL::ResizeScreen( int aWidth, int aHeight )
if
(
validCompositor
)
compositor
->
Resize
(
aWidth
,
aHeight
);
validCompositor
=
false
;
SetSize
(
wxSize
(
aWidth
,
aHeight
)
);
...
...
@@ -788,6 +790,7 @@ void CAIRO_GAL::ClearTarget( RenderTarget aTarget )
compositor
->
SetBuffer
(
overlayBuffer
);
break
;
}
compositor
->
ClearBuffer
();
// Restore the previous state
...
...
common/gal/color4d.cpp
View file @
0ac3e1fb
...
...
@@ -26,7 +26,7 @@
#include <gal/color4d.h>
using
namespace
K
iGfx
;
using
namespace
K
IGFX
;
COLOR4D
::
COLOR4D
(
EDA_COLOR_T
aColor
)
{
...
...
@@ -85,14 +85,14 @@ void COLOR4D::ToHSV( double& aOutH, double& aOutS, double& aOutV ) const
return
;
}
if
(
r
>=
max
)
// > is bogus, just keeps compiler happy
aOutH
=
(
g
-
b
)
/
delta
;
// between yellow & magenta
if
(
r
>=
max
)
// > is bogus, just keeps compiler happy
aOutH
=
(
g
-
b
)
/
delta
;
// between yellow & magenta
else
if
(
g
>=
max
)
aOutH
=
2.0
+
(
b
-
r
)
/
delta
;
// between cyan & yellow
aOutH
=
2.0
+
(
b
-
r
)
/
delta
;
// between cyan & yellow
else
aOutH
=
4.0
+
(
r
-
g
)
/
delta
;
// between magenta & cyan
aOutH
=
4.0
+
(
r
-
g
)
/
delta
;
// between magenta & cyan
aOutH
*=
60.0
;
// degrees
aOutH
*=
60.0
;
// degrees
if
(
aOutH
<
0.0
)
aOutH
+=
360.0
;
...
...
@@ -104,7 +104,7 @@ void COLOR4D::FromHSV( double aInH, double aInS, double aInV )
double
hh
,
p
,
q
,
t
,
ff
;
long
i
;
if
(
aInS
<=
0.0
)
// < is bogus, just shuts up warnings
if
(
aInS
<=
0.0
)
// < is bogus, just shuts up warnings
{
r
=
aInV
;
g
=
aInV
;
...
...
@@ -113,8 +113,10 @@ void COLOR4D::FromHSV( double aInH, double aInS, double aInV )
}
hh
=
aInH
;
if
(
hh
>=
360.0
)
hh
=
0.0
;
hh
/=
60.0
;
i
=
(
long
)
hh
;
...
...
@@ -124,18 +126,20 @@ void COLOR4D::FromHSV( double aInH, double aInS, double aInV )
q
=
aInV
*
(
1.0
-
(
aInS
*
ff
)
);
t
=
aInV
*
(
1.0
-
(
aInS
*
(
1.0
-
ff
)
)
);
switch
(
i
)
switch
(
i
)
{
case
0
:
r
=
aInV
;
g
=
t
;
b
=
p
;
break
;
case
1
:
r
=
q
;
g
=
aInV
;
b
=
p
;
break
;
case
2
:
r
=
p
;
g
=
aInV
;
...
...
@@ -147,11 +151,13 @@ void COLOR4D::FromHSV( double aInH, double aInS, double aInV )
g
=
q
;
b
=
aInV
;
break
;
case
4
:
r
=
t
;
g
=
p
;
b
=
aInV
;
break
;
case
5
:
default
:
r
=
aInV
;
...
...
@@ -165,9 +171,9 @@ void COLOR4D::FromHSV( double aInH, double aInS, double aInV )
COLOR4D
&
COLOR4D
::
Saturate
(
double
aFactor
)
{
double
h
,
s
,
v
;
ToHSV
(
h
,
s
,
v
);
FromHSV
(
h
,
aFactor
,
1.0
);
return
*
this
;
}
common/gal/graphics_abstraction_layer.cpp
View file @
0ac3e1fb
...
...
@@ -29,10 +29,10 @@
#include <gal/graphics_abstraction_layer.h>
#include <gal/definitions.h>
using
namespace
K
iGfx
;
using
namespace
K
IGFX
;
GAL
::
GAL
()
:
strokeFont
(
this
)
strokeFont
(
this
)
{
// Set the default values for the internal variables
SetIsFill
(
false
);
...
...
common/gal/opengl/cached_container.cpp
View file @
0ac3e1fb
...
...
@@ -39,7 +39,7 @@
#include <profile.h>
#endif
/* __WXDEBUG__ */
using
namespace
K
iGfx
;
using
namespace
K
IGFX
;
CACHED_CONTAINER
::
CACHED_CONTAINER
(
unsigned
int
aSize
)
:
VERTEX_CONTAINER
(
aSize
),
m_item
(
NULL
)
...
...
@@ -88,7 +88,7 @@ void CACHED_CONTAINER::FinishItem()
#if CACHED_CONTAINER_TEST > 1
wxLogDebug
(
wxT
(
"Finishing item 0x%08lx (size %d)"
),
(
long
)
m_item
,
m_itemSize
);
test
();
m_item
=
NULL
;
// electric fence
m_item
=
NULL
;
// electric fence
#endif
}
...
...
@@ -157,6 +157,7 @@ void CACHED_CONTAINER::Delete( VERTEX_ITEM* aItem )
// Indicate that the item is not stored in the container anymore
aItem
->
setSize
(
0
);
}
m_items
.
erase
(
aItem
);
#if CACHED_CONTAINER_TEST > 1
...
...
@@ -371,6 +372,7 @@ void CACHED_CONTAINER::mergeFreeChunks()
std
::
list
<
Chunk
>
freeChunks
;
FreeChunkMap
::
const_iterator
it
,
it_end
;
for
(
it
=
m_freeChunks
.
begin
(),
it_end
=
m_freeChunks
.
end
();
it
!=
it_end
;
++
it
)
{
freeChunks
.
push_back
(
std
::
make_pair
(
it
->
second
,
it
->
first
)
);
...
...
@@ -527,6 +529,7 @@ void CACHED_CONTAINER::test()
// Free space check
unsigned
int
freeSpace
=
0
;
FreeChunkMap
::
iterator
itf
;
for
(
itf
=
m_freeChunks
.
begin
();
itf
!=
m_freeChunks
.
end
();
++
itf
)
freeSpace
+=
getChunkSize
(
*
itf
);
...
...
@@ -543,4 +546,5 @@ void CACHED_CONTAINER::test()
// Overlapping check TBD
}
#endif
/* CACHED_CONTAINER_TEST */
common/gal/opengl/gpu_manager.cpp
View file @
0ac3e1fb
...
...
@@ -37,7 +37,7 @@
#include <profile.h>
#endif
using
namespace
K
iGfx
;
using
namespace
K
IGFX
;
GPU_MANAGER
*
GPU_MANAGER
::
MakeManager
(
VERTEX_CONTAINER
*
aContainer
)
{
...
...
common/gal/opengl/noncached_container.cpp
View file @
0ac3e1fb
...
...
@@ -31,7 +31,7 @@
#include <gal/opengl/noncached_container.h>
#include <cstdlib>
using
namespace
K
iGfx
;
using
namespace
K
IGFX
;
NONCACHED_CONTAINER
::
NONCACHED_CONTAINER
(
unsigned
int
aSize
)
:
VERTEX_CONTAINER
(
aSize
),
m_freePtr
(
0
)
...
...
common/gal/opengl/opengl_compositor.cpp
View file @
0ac3e1fb
...
...
@@ -31,7 +31,7 @@
#include <gal/opengl/opengl_compositor.h>
#include <wx/log.h>
using
namespace
K
iGfx
;
using
namespace
K
IGFX
;
OPENGL_COMPOSITOR
::
OPENGL_COMPOSITOR
()
:
m_initialized
(
false
),
m_current
(
0
)
...
...
@@ -95,12 +95,12 @@ unsigned int OPENGL_COMPOSITOR::CreateBuffer()
{
wxASSERT
(
m_initialized
);
//
if( usedBuffers() >= m_maxBuffers )
if
(
usedBuffers
()
>=
m_maxBuffers
)
{
wxLogError
(
wxT
(
"Cannot create more framebuffers. OpenGL rendering backend requires at"
"least 3 framebuffers. You may try to update/change "
"your graphic drivers."
)
);
return
0
;
// Unfortunately we have no more free buffers left
return
0
;
// Unfortunately we have no more free buffers left
}
// GL_COLOR_ATTACHMENTn are consecutive integers
...
...
@@ -145,7 +145,7 @@ unsigned int OPENGL_COMPOSITOR::CreateBuffer()
case
GL_FRAMEBUFFER_INCOMPLETE_DRAW_BUFFER
:
wxLogFatalError
(
wxT
(
"The framebuffer does not have at least "
"one image attached to it."
)
);
"one image attached to it."
)
);
break
;
case
GL_FRAMEBUFFER_INCOMPLETE_READ_BUFFER
:
...
...
@@ -225,6 +225,7 @@ void OPENGL_COMPOSITOR::ClearBuffer()
void
OPENGL_COMPOSITOR
::
DrawBuffer
(
unsigned
int
aBufferHandle
)
{
wxASSERT
(
m_initialized
);
if
(
aBufferHandle
==
0
||
aBufferHandle
>
usedBuffers
()
)
{
wxLogError
(
wxT
(
"Wrong framebuffer handle"
)
);
...
...
@@ -281,6 +282,7 @@ void OPENGL_COMPOSITOR::clean()
glDeleteRenderbuffers
(
1
,
&
m_depthBuffer
);
OPENGL_BUFFERS
::
const_iterator
it
;
for
(
it
=
m_buffers
.
begin
();
it
!=
m_buffers
.
end
();
++
it
)
{
glDeleteTextures
(
1
,
&
it
->
textureTarget
);
...
...
common/gal/opengl/opengl_gal.cpp
View file @
0ac3e1fb
...
...
@@ -37,7 +37,7 @@
#include <limits>
using
namespace
K
iGfx
;
using
namespace
K
IGFX
;
// Prototypes
void
InitTesselatorCallbacks
(
GLUtesselator
*
aTesselator
);
...
...
@@ -90,10 +90,12 @@ OPENGL_GAL::OPENGL_GAL( wxWindow* aParent, wxEvtHandler* aMouseListener,
// Tesselator initialization
tesselator
=
gluNewTess
();
InitTesselatorCallbacks
(
tesselator
);
if
(
tesselator
==
NULL
)
{
wxLogFatalError
(
wxT
(
"Could not create the tesselator"
)
);
}
gluTessProperty
(
tesselator
,
GLU_TESS_WINDING_RULE
,
GLU_TESS_WINDING_POSITIVE
);
}
...
...
@@ -367,7 +369,8 @@ void OPENGL_GAL::DrawArc( const VECTOR2D& aCenterPoint, double aRadius, double a
currentManager
->
Color
(
strokeColor
.
r
,
strokeColor
.
g
,
strokeColor
.
b
,
strokeColor
.
a
);
VECTOR2D
p
(
cos
(
aStartAngle
)
*
aRadius
,
sin
(
aStartAngle
)
*
aRadius
);
double
alpha
;
double
alpha
;
for
(
alpha
=
aStartAngle
+
alphaIncrement
;
alpha
<
aEndAngle
;
alpha
+=
alphaIncrement
)
{
VECTOR2D
p_next
(
cos
(
alpha
)
*
aRadius
,
sin
(
alpha
)
*
aRadius
);
...
...
@@ -570,7 +573,7 @@ void OPENGL_GAL::ClearScreen()
void
OPENGL_GAL
::
SetStrokeColor
(
const
COLOR4D
&
aColor
)
{
strokeColor
=
aColor
;
strokeColor
=
aColor
;
// This is the default drawing color
currentManager
->
Color
(
aColor
.
r
,
aColor
.
g
,
aColor
.
b
,
aColor
.
a
);
...
...
@@ -734,6 +737,7 @@ void OPENGL_GAL::ClearTarget( RenderTarget aTarget )
compositor
.
SetBuffer
(
overlayBuffer
);
break
;
}
compositor
.
ClearBuffer
();
// Restore the previous state
...
...
common/gal/opengl/shader.cpp
View file @
0ac3e1fb
...
...
@@ -34,7 +34,7 @@
#include <gal/opengl/shader.h>
#include "shader_src.h"
using
namespace
K
iGfx
;
using
namespace
K
IGFX
;
SHADER
::
SHADER
()
:
isProgramCreated
(
false
),
...
...
@@ -101,17 +101,19 @@ bool SHADER::Link()
(
GLint
*
)
&
isShaderLinked
);
#ifdef __WXDEBUG__
if
(
!
isShaderLinked
)
{
int
maxLength
;
glGetProgramiv
(
programNumber
,
GL_INFO_LOG_LENGTH
,
&
maxLength
);
maxLength
=
maxLength
+
1
;
char
*
linkInfoLog
=
new
char
[
maxLength
];
char
*
linkInfoLog
=
new
char
[
maxLength
];
glGetProgramInfoLog
(
programNumber
,
maxLength
,
&
maxLength
,
linkInfoLog
);
std
::
cerr
<<
"Shader linking error:"
<<
std
::
endl
;
std
::
cerr
<<
linkInfoLog
;
delete
[]
linkInfoLog
;
}
#endif
/* __WXDEBUG__ */
return
isShaderLinked
;
...
...
common/gal/opengl/shader.frag
View file @
0ac3e1fb
...
...
@@ -73,4 +73,3 @@ void main()
gl_FragColor
=
gl_Color
;
}
}
common/gal/opengl/shader.vert
View file @
0ac3e1fb
...
...
@@ -96,4 +96,3 @@ void main()
gl_FrontColor
=
gl_Color
;
}
common/gal/opengl/vertex_container.cpp
View file @
0ac3e1fb
...
...
@@ -33,7 +33,7 @@
#include <gal/opengl/shader.h>
#include <wx/log.h>
using
namespace
K
iGfx
;
using
namespace
K
IGFX
;
VERTEX_CONTAINER
*
VERTEX_CONTAINER
::
MakeContainer
(
bool
aCached
)
{
...
...
common/gal/opengl/vertex_item.cpp
View file @
0ac3e1fb
...
...
@@ -31,7 +31,7 @@
#include <gal/opengl/vertex_manager.h>
#include <cstring>
using
namespace
K
iGfx
;
using
namespace
K
IGFX
;
VERTEX_ITEM
::
VERTEX_ITEM
(
const
VERTEX_MANAGER
&
aManager
)
:
m_manager
(
aManager
),
m_offset
(
0
),
m_size
(
0
)
...
...
common/gal/opengl/vertex_manager.cpp
View file @
0ac3e1fb
...
...
@@ -34,7 +34,7 @@
#include <gal/opengl/gpu_manager.h>
#include <gal/opengl/vertex_item.h>
using
namespace
K
iGfx
;
using
namespace
K
IGFX
;
VERTEX_MANAGER
::
VERTEX_MANAGER
(
bool
aCached
)
:
m_noTransform
(
true
),
m_transform
(
1.0
f
)
...
...
@@ -106,6 +106,7 @@ void VERTEX_MANAGER::ChangeItemColor( const VERTEX_ITEM& aItem, const COLOR4D& a
unsigned
int
offset
=
aItem
.
GetOffset
();
VERTEX
*
vertex
=
m_container
->
GetVertices
(
offset
);
for
(
unsigned
int
i
=
0
;
i
<
size
;
++
i
)
{
vertex
->
r
=
aColor
.
r
*
255.0
;
...
...
@@ -125,6 +126,7 @@ void VERTEX_MANAGER::ChangeItemDepth( const VERTEX_ITEM& aItem, GLfloat aDepth )
unsigned
int
offset
=
aItem
.
GetOffset
();
VERTEX
*
vertex
=
m_container
->
GetVertices
(
offset
);
for
(
unsigned
int
i
=
0
;
i
<
size
;
++
i
)
{
vertex
->
z
=
aDepth
;
...
...
common/gal/stroke_font.cpp
View file @
0ac3e1fb
...
...
@@ -27,7 +27,7 @@
#include <gal/stroke_font.h>
#include <gal/graphics_abstraction_layer.h>
using
namespace
K
iGfx
;
using
namespace
K
IGFX
;
const
double
STROKE_FONT
::
LINE_HEIGHT_RATIO
=
1.6
;
...
...
@@ -177,11 +177,13 @@ void STROKE_FONT::Draw( std::string aText, const VECTOR2D& aPosition, double aRo
case
GR_TEXT_HJUSTIFY_RIGHT
:
if
(
!
m_mirrored
)
m_gal
->
Translate
(
VECTOR2D
(
-
textsize
.
x
,
0
)
);
break
;
case
GR_TEXT_HJUSTIFY_LEFT
:
if
(
m_mirrored
)
m_gal
->
Translate
(
VECTOR2D
(
-
textsize
.
x
,
0
)
);
break
;
default
:
...
...
common/geometry/seg.cpp
View file @
0ac3e1fb
...
...
@@ -25,7 +25,9 @@
#include <geometry/seg.h>
template
<
typename
T
>
int
sgn
(
T
val
)
{
template
<
typename
T
>
int
sgn
(
T
val
)
{
return
(
T
(
0
)
<
val
)
-
(
val
<
T
(
0
)
);
}
...
...
@@ -64,8 +66,8 @@ bool SEG::PointCloserThan( const VECTOR2I& aP, int dist ) const
}
VECTOR2I
nearest
;
nearest
.
x
=
a
.
x
+
rescale
(
t
,
(
ecoord
)
d
.
x
,
l_squared
);
nearest
.
y
=
a
.
y
+
rescale
(
t
,
(
ecoord
)
d
.
y
,
l_squared
);
nearest
.
x
=
a
.
x
+
rescale
(
t
,
(
ecoord
)
d
.
x
,
l_squared
);
nearest
.
y
=
a
.
y
+
rescale
(
t
,
(
ecoord
)
d
.
y
,
l_squared
);
return
(
nearest
-
aP
).
SquaredEuclideanNorm
()
<=
dist_sq
;
}
...
...
@@ -86,6 +88,7 @@ SEG::ecoord SEG::SquaredDistance( const SEG& aSeg ) const
};
ecoord
m
=
VECTOR2I
::
ECOORD_MAX
;
for
(
int
i
=
0
;
i
<
4
;
i
++
)
m
=
std
::
min
(
m
,
pts
[
i
].
SquaredEuclideanNorm
()
);
...
...
@@ -95,9 +98,9 @@ SEG::ecoord SEG::SquaredDistance( const SEG& aSeg ) const
OPT_VECTOR2I
SEG
::
Intersect
(
const
SEG
&
aSeg
,
bool
aIgnoreEndpoints
,
bool
aLines
)
const
{
const
VECTOR2I
e
(
b
-
a
);
const
VECTOR2I
f
(
aSeg
.
b
-
aSeg
.
a
);
const
VECTOR2I
ac
(
aSeg
.
a
-
a
);
const
VECTOR2I
e
(
b
-
a
);
const
VECTOR2I
f
(
aSeg
.
b
-
aSeg
.
a
);
const
VECTOR2I
ac
(
aSeg
.
a
-
a
);
ecoord
d
=
f
.
Cross
(
e
);
ecoord
p
=
f
.
Cross
(
ac
);
...
...
@@ -105,15 +108,18 @@ OPT_VECTOR2I SEG::Intersect( const SEG& aSeg, bool aIgnoreEndpoints, bool aLines
if
(
d
==
0
)
return
OPT_VECTOR2I
();
if
(
!
aLines
&&
d
>
0
&&
(
q
<
0
||
q
>
d
||
p
<
0
||
p
>
d
)
)
if
(
!
aLines
&&
d
>
0
&&
(
q
<
0
||
q
>
d
||
p
<
0
||
p
>
d
)
)
return
OPT_VECTOR2I
();
if
(
!
aLines
&&
d
<
0
&&
(
q
<
d
||
p
<
d
||
p
>
0
||
q
>
0
)
)
if
(
!
aLines
&&
d
<
0
&&
(
q
<
d
||
p
<
d
||
p
>
0
||
q
>
0
)
)
return
OPT_VECTOR2I
();
if
(
!
aLines
&&
aIgnoreEndpoints
&&
(
q
==
0
||
q
==
d
)
&&
(
p
==
0
||
p
==
d
)
)
if
(
!
aLines
&&
aIgnoreEndpoints
&&
(
q
==
0
||
q
==
d
)
&&
(
p
==
0
||
p
==
d
)
)
return
OPT_VECTOR2I
();
VECTOR2I
ip
(
aSeg
.
a
.
x
+
rescale
(
q
,
(
ecoord
)
f
.
x
,
d
),
aSeg
.
a
.
y
+
rescale
(
q
,
(
ecoord
)
f
.
y
,
d
)
);
VECTOR2I
ip
(
aSeg
.
a
.
x
+
rescale
(
q
,
(
ecoord
)
f
.
x
,
d
),
aSeg
.
a
.
y
+
rescale
(
q
,
(
ecoord
)
f
.
y
,
d
)
);
return
ip
;
}
...
...
@@ -121,7 +127,7 @@ OPT_VECTOR2I SEG::Intersect( const SEG& aSeg, bool aIgnoreEndpoints, bool aLines
bool
SEG
::
ccw
(
const
VECTOR2I
&
a
,
const
VECTOR2I
&
b
,
const
VECTOR2I
&
c
)
const
{
return
(
ecoord
)
(
c
.
y
-
a
.
y
)
*
(
b
.
x
-
a
.
x
)
>
(
ecoord
)
(
b
.
y
-
a
.
y
)
*
(
c
.
x
-
a
.
x
);
return
(
ecoord
)
(
c
.
y
-
a
.
y
)
*
(
b
.
x
-
a
.
x
)
>
(
ecoord
)
(
b
.
y
-
a
.
y
)
*
(
c
.
x
-
a
.
x
);
}
...
...
@@ -133,8 +139,8 @@ bool SEG::Collide( const SEG& aSeg, int aClearance ) const
ccw
(
a
,
b
,
aSeg
.
a
)
!=
ccw
(
a
,
b
,
aSeg
.
b
)
)
return
true
;
#define CHK(
_seg, _pt
) \
if( (_seg).PointCloserThan
(
_pt, aClearance ) ) return true;
#define CHK(
_seg, _pt
) \
if( (_seg).PointCloserThan
(
_pt, aClearance ) ) return true;
CHK
(
*
this
,
aSeg
.
a
);
CHK
(
*
this
,
aSeg
.
b
);
...
...
common/geometry/shape_collisions.cpp
View file @
0ac3e1fb
...
...
@@ -41,11 +41,11 @@ static inline bool Collide( const SHAPE_CIRCLE& aA, const SHAPE_CIRCLE& aB, int
ecoord
dist_sq
=
delta
.
SquaredEuclideanNorm
();
if
(
dist_sq
>=
min_dist_sq
)
if
(
dist_sq
>=
min_dist_sq
)
return
false
;
if
(
aNeedMTV
)
aMTV
=
delta
.
Resize
(
sqrt
(
abs
(
min_dist_sq
-
dist_sq
)
)
+
1
);
if
(
aNeedMTV
)
aMTV
=
delta
.
Resize
(
sqrt
(
abs
(
min_dist_sq
-
dist_sq
)
)
+
1
);
return
true
;
}
...
...
@@ -60,28 +60,29 @@ static inline bool Collide( const SHAPE_RECT& aA, const SHAPE_CIRCLE& aB, int a
const
ecoord
min_dist
=
aClearance
+
r
;
const
ecoord
min_dist_sq
=
min_dist
*
min_dist
;
if
(
aA
.
BBox
(
0
).
Contains
(
c
)
)
if
(
aA
.
BBox
(
0
).
Contains
(
c
)
)
return
true
;
const
VECTOR2I
vts
[]
=
{
VECTOR2I
(
p0
.
x
,
p0
.
y
),
VECTOR2I
(
p0
.
x
,
p0
.
y
+
size
.
y
),
VECTOR2I
(
p0
.
x
+
size
.
x
,
p0
.
y
+
size
.
y
),
VECTOR2I
(
p0
.
x
+
size
.
x
,
p0
.
y
),
VECTOR2I
(
p0
.
x
,
p0
.
y
)
};
const
VECTOR2I
vts
[]
=
{
VECTOR2I
(
p0
.
x
,
p0
.
y
),
VECTOR2I
(
p0
.
x
,
p0
.
y
+
size
.
y
),
VECTOR2I
(
p0
.
x
+
size
.
x
,
p0
.
y
+
size
.
y
),
VECTOR2I
(
p0
.
x
+
size
.
x
,
p0
.
y
),
VECTOR2I
(
p0
.
x
,
p0
.
y
)
};
ecoord
nearest_seg_dist_sq
=
VECTOR2I
::
ECOORD_MAX
;
VECTOR2I
nearest
;
bool
inside
=
c
.
x
>=
p0
.
x
&&
c
.
x
<=
(
p0
.
x
+
size
.
x
)
&&
c
.
y
>=
p0
.
y
&&
c
.
y
<=
(
p0
.
y
+
size
.
y
);
bool
inside
=
c
.
x
>=
p0
.
x
&&
c
.
x
<=
(
p0
.
x
+
size
.
x
)
&&
c
.
y
>=
p0
.
y
&&
c
.
y
<=
(
p0
.
y
+
size
.
y
);
if
(
!
inside
)
{
for
(
int
i
=
0
;
i
<
4
;
i
++
)
{
const
SEG
seg
(
vts
[
i
],
vts
[
i
+
1
]
);
const
SEG
seg
(
vts
[
i
],
vts
[
i
+
1
]
);
ecoord
dist_sq
=
seg
.
SquaredDistance
(
c
);
if
(
dist_sq
<
min_dist_sq
)
...
...
@@ -119,7 +120,7 @@ static inline bool Collide( const SHAPE_CIRCLE& aA, const SHAPE_LINE_CHAIN& aB,
{
for
(
int
s
=
0
;
s
<
aB
.
SegmentCount
();
s
++
)
{
if
(
aA
.
Collide
(
aB
.
CSegment
(
s
),
aClearance
)
)
if
(
aA
.
Collide
(
aB
.
CSegment
(
s
),
aClearance
)
)
return
true
;
}
...
...
@@ -131,8 +132,9 @@ static inline bool Collide( const SHAPE_LINE_CHAIN& aA, const SHAPE_LINE_CHAIN&
bool
aNeedMTV
,
VECTOR2I
&
aMTV
)
{
for
(
int
i
=
0
;
i
<
aB
.
SegmentCount
();
i
++
)
if
(
aA
.
Collide
(
aB
.
CSegment
(
i
),
aClearance
)
)
if
(
aA
.
Collide
(
aB
.
CSegment
(
i
),
aClearance
)
)
return
true
;
return
false
;
}
...
...
@@ -143,8 +145,9 @@ static inline bool Collide( const SHAPE_RECT& aA, const SHAPE_LINE_CHAIN& aB, in
for
(
int
s
=
0
;
s
<
aB
.
SegmentCount
();
s
++
)
{
SEG
seg
=
aB
.
CSegment
(
s
);
if
(
aA
.
Collide
(
seg
,
aClearance
)
)
return
true
;
if
(
aA
.
Collide
(
seg
,
aClearance
)
)
return
true
;
}
return
false
;
...
...
@@ -222,12 +225,13 @@ bool CollideShapes( const SHAPE* aA, const SHAPE* aB, int aClearance, bool aNeed
bool
SHAPE
::
Collide
(
const
SHAPE
*
aShape
,
int
aClerance
,
VECTOR2I
&
aMTV
)
const
{
return
CollideShapes
(
this
,
aShape
,
aClerance
,
true
,
aMTV
);
return
CollideShapes
(
this
,
aShape
,
aClerance
,
true
,
aMTV
);
}
bool
SHAPE
::
Collide
(
const
SHAPE
*
aShape
,
int
aClerance
)
const
bool
SHAPE
::
Collide
(
const
SHAPE
*
aShape
,
int
aClerance
)
const
{
VECTOR2I
dummy
;
return
CollideShapes
(
this
,
aShape
,
aClerance
,
false
,
dummy
);
}
common/geometry/shape_line_chain.cpp
View file @
0ac3e1fb
...
...
@@ -47,12 +47,12 @@ bool SHAPE_LINE_CHAIN::Collide( const SEG& aSeg, int aClearance ) const
BOX2I
box_a
(
aSeg
.
a
,
aSeg
.
b
-
aSeg
.
a
);
BOX2I
::
ecoord_type
dist_sq
=
(
BOX2I
::
ecoord_type
)
aClearance
*
aClearance
;
for
(
int
i
=
0
;
i
<
SegmentCount
()
;
i
++
)
for
(
int
i
=
0
;
i
<
SegmentCount
()
;
i
++
)
{
const
SEG
&
s
=
CSegment
(
i
);
BOX2I
box_b
(
s
.
a
,
s
.
b
-
s
.
a
);
BOX2I
::
ecoord_type
d
=
box_a
.
SquaredDistance
(
box_b
);
BOX2I
::
ecoord_type
d
=
box_a
.
SquaredDistance
(
box_b
);
if
(
d
<
dist_sq
)
{
...
...
@@ -64,9 +64,11 @@ bool SHAPE_LINE_CHAIN::Collide( const SEG& aSeg, int aClearance ) const
return
false
;
}
const
SHAPE_LINE_CHAIN
SHAPE_LINE_CHAIN
::
Reverse
()
const
{
SHAPE_LINE_CHAIN
a
(
*
this
);
reverse
(
a
.
m_points
.
begin
(),
a
.
m_points
.
end
()
);
a
.
m_closed
=
m_closed
;
...
...
@@ -77,6 +79,7 @@ const SHAPE_LINE_CHAIN SHAPE_LINE_CHAIN::Reverse() const
int
SHAPE_LINE_CHAIN
::
Length
()
const
{
int
l
=
0
;
for
(
int
i
=
0
;
i
<
SegmentCount
();
i
++
)
l
+=
CSegment
(
i
).
Length
();
...
...
@@ -88,11 +91,12 @@ void SHAPE_LINE_CHAIN::Replace( int aStartIndex, int aEndIndex, const VECTOR2I&
{
if
(
aEndIndex
<
0
)
aEndIndex
+=
PointCount
();
if
(
aStartIndex
<
0
)
aStartIndex
+=
PointCount
();
if
(
aStartIndex
==
aEndIndex
)
m_points
[
aStartIndex
]
=
aP
;
m_points
[
aStartIndex
]
=
aP
;
else
{
m_points
.
erase
(
m_points
.
begin
()
+
aStartIndex
+
1
,
m_points
.
begin
()
+
aEndIndex
+
1
);
...
...
@@ -105,6 +109,7 @@ void SHAPE_LINE_CHAIN::Replace( int aStartIndex, int aEndIndex, const SHAPE_LINE
{
if
(
aEndIndex
<
0
)
aEndIndex
+=
PointCount
();
if
(
aStartIndex
<
0
)
aStartIndex
+=
PointCount
();
...
...
@@ -115,9 +120,10 @@ void SHAPE_LINE_CHAIN::Replace( int aStartIndex, int aEndIndex, const SHAPE_LINE
void
SHAPE_LINE_CHAIN
::
Remove
(
int
aStartIndex
,
int
aEndIndex
)
{
if
(
aEndIndex
<
0
)
if
(
aEndIndex
<
0
)
aEndIndex
+=
PointCount
();
if
(
aStartIndex
<
0
)
if
(
aStartIndex
<
0
)
aStartIndex
+=
PointCount
();
m_points
.
erase
(
m_points
.
begin
()
+
aStartIndex
,
m_points
.
begin
()
+
aEndIndex
+
1
);
...
...
@@ -127,6 +133,7 @@ void SHAPE_LINE_CHAIN::Remove( int aStartIndex, int aEndIndex )
int
SHAPE_LINE_CHAIN
::
Distance
(
const
VECTOR2I
&
aP
)
const
{
int
d
=
INT_MAX
;
for
(
int
s
=
0
;
s
<
SegmentCount
();
s
++
)
d
=
min
(
d
,
CSegment
(
s
).
Distance
(
aP
)
);
...
...
@@ -185,6 +192,7 @@ const SHAPE_LINE_CHAIN SHAPE_LINE_CHAIN::Slice( int aStartIndex, int aEndIndex )
if
(
aEndIndex
<
0
)
aEndIndex
+=
PointCount
();
if
(
aStartIndex
<
0
)
aStartIndex
+=
PointCount
();
...
...
@@ -197,7 +205,7 @@ const SHAPE_LINE_CHAIN SHAPE_LINE_CHAIN::Slice( int aStartIndex, int aEndIndex )
struct
compareOriginDistance
{
compareOriginDistance
(
VECTOR2I
&
aOrigin
)
:
compareOriginDistance
(
VECTOR2I
&
aOrigin
)
:
m_origin
(
aOrigin
)
{};
bool
operator
()(
const
SHAPE_LINE_CHAIN
::
Intersection
&
aA
,
...
...
@@ -215,6 +223,7 @@ int SHAPE_LINE_CHAIN::Intersect( const SEG& aSeg, Intersections& aIp ) const
for
(
int
s
=
0
;
s
<
SegmentCount
();
s
++
)
{
OPT_VECTOR2I
p
=
CSegment
(
s
).
Intersect
(
aSeg
);
if
(
p
)
{
Intersection
is
;
...
...
@@ -236,7 +245,7 @@ int SHAPE_LINE_CHAIN::Intersect( const SHAPE_LINE_CHAIN& aChain, Intersections&
{
BOX2I
bb_other
=
aChain
.
BBox
();
for
(
int
s1
=
0
;
s1
<
SegmentCount
();
s1
++
)
for
(
int
s1
=
0
;
s1
<
SegmentCount
();
s1
++
)
{
const
SEG
&
a
=
CSegment
(
s1
);
const
BOX2I
bb_cur
(
a
.
a
,
a
.
b
-
a
.
a
);
...
...
@@ -305,7 +314,6 @@ int SHAPE_LINE_CHAIN::Intersect( const SHAPE_LINE_CHAIN& aChain, Intersections&
is
.
their
=
b
;
aIp
.
push_back
(
is
);
}
}
}
}
...
...
@@ -317,6 +325,7 @@ int SHAPE_LINE_CHAIN::Intersect( const SHAPE_LINE_CHAIN& aChain, Intersections&
int
SHAPE_LINE_CHAIN
::
PathLength
(
const
VECTOR2I
&
aP
)
const
{
int
sum
=
0
;
for
(
int
i
=
0
;
i
<
SegmentCount
();
i
++
)
{
const
SEG
seg
=
CSegment
(
i
);
...
...
@@ -340,7 +349,7 @@ bool SHAPE_LINE_CHAIN::PointInside( const VECTOR2I& aP ) const
if
(
!
m_closed
||
SegmentCount
()
<
3
)
return
false
;
int
cur
=
CSegment
(
0
).
Side
(
aP
);
int
cur
=
CSegment
(
0
).
Side
(
aP
);
if
(
cur
==
0
)
return
false
;
...
...
@@ -352,7 +361,7 @@ bool SHAPE_LINE_CHAIN::PointInside( const VECTOR2I& aP ) const
if
(
aP
==
s
.
a
||
aP
==
s
.
b
)
// edge does not belong to the interior!
return
false
;
if
(
s
.
Side
(
aP
)
!=
cur
)
if
(
s
.
Side
(
aP
)
!=
cur
)
return
false
;
}
...
...
@@ -372,7 +381,7 @@ bool SHAPE_LINE_CHAIN::PointOnEdge( const VECTOR2I& aP ) const
if
(
s
.
a
==
aP
||
s
.
b
==
aP
)
return
true
;
if
(
s
.
Distance
(
aP
)
<=
1
)
if
(
s
.
Distance
(
aP
)
<=
1
)
return
true
;
}
...
...
@@ -387,6 +396,7 @@ const optional<SHAPE_LINE_CHAIN::Intersection> SHAPE_LINE_CHAIN::SelfIntersectin
for
(
int
s2
=
s1
+
1
;
s2
<
SegmentCount
();
s2
++
)
{
const
VECTOR2I
s2a
=
CSegment
(
s2
).
a
,
s2b
=
CSegment
(
s2
).
b
;
if
(
s1
+
1
!=
s2
&&
CSegment
(
s1
).
Contains
(
s2a
)
)
{
Intersection
is
;
...
...
@@ -395,7 +405,7 @@ const optional<SHAPE_LINE_CHAIN::Intersection> SHAPE_LINE_CHAIN::SelfIntersectin
is
.
p
=
s2a
;
return
is
;
}
else
if
(
CSegment
(
s1
).
Contains
(
s2b
)
)
else
if
(
CSegment
(
s1
).
Contains
(
s2b
)
)
{
Intersection
is
;
is
.
our
=
CSegment
(
s1
);
...
...
@@ -443,10 +453,11 @@ SHAPE_LINE_CHAIN& SHAPE_LINE_CHAIN::Simplify()
int
np
=
PointCount
();
// stage 1: eliminate duplicate vertices
while
(
i
<
np
)
while
(
i
<
np
)
{
int
j
=
i
+
1
;
while
(
j
<
np
&&
CPoint
(
i
)
==
CPoint
(
j
)
)
while
(
j
<
np
&&
CPoint
(
i
)
==
CPoint
(
j
)
)
j
++
;
pts_unique
.
push_back
(
CPoint
(
i
)
);
...
...
@@ -457,17 +468,19 @@ SHAPE_LINE_CHAIN& SHAPE_LINE_CHAIN::Simplify()
np
=
pts_unique
.
size
();
i
=
0
;
// stage 1: eliminate collinear segments
while
(
i
<
np
-
2
)
{
const
VECTOR2I
p0
=
pts_unique
[
i
];
const
VECTOR2I
p1
=
pts_unique
[
i
+
1
];
const
VECTOR2I
p1
=
pts_unique
[
i
+
1
];
int
n
=
i
;
while
(
n
<
np
-
2
&&
SEG
(
p0
,
p1
).
LineDistance
(
pts_unique
[
n
+
2
]
)
<=
1
)
n
++
;
m_points
.
push_back
(
p0
);
if
(
n
>
i
)
i
=
n
;
...
...
@@ -493,9 +506,11 @@ const VECTOR2I SHAPE_LINE_CHAIN::NearestPoint( const VECTOR2I& aP ) const
{
int
min_d
=
INT_MAX
;
int
nearest
=
0
;
for
(
int
i
=
0
;
i
<
SegmentCount
();
i
++
)
for
(
int
i
=
0
;
i
<
SegmentCount
();
i
++
)
{
int
d
=
CSegment
(
i
).
Distance
(
aP
);
if
(
d
<
min_d
)
{
min_d
=
d
;
...
...
@@ -511,10 +526,10 @@ const string SHAPE_LINE_CHAIN::Format() const
{
stringstream
ss
;
ss
<<
m_points
.
size
()
<<
" "
<<
(
m_closed
?
1
:
0
)
<<
" "
;
ss
<<
m_points
.
size
()
<<
" "
<<
(
m_closed
?
1
:
0
)
<<
" "
;
for
(
int
i
=
0
;
i
<
PointCount
();
i
++
)
ss
<<
m_points
[
i
].
x
<<
" "
<<
m_points
[
i
].
y
<<
" "
;
// Format() << " ";
ss
<<
m_points
[
i
].
x
<<
" "
<<
m_points
[
i
].
y
<<
" "
;
// Format() << " ";
return
ss
.
str
();
}
common/math/math_util.cpp
View file @
0ac3e1fb
...
...
@@ -28,16 +28,18 @@
#include <climits>
#include <math/math_util.h>
template
<>
int
rescale
(
int
numerator
,
int
value
,
int
denominator
)
template
<>
int
rescale
(
int
numerator
,
int
value
,
int
denominator
)
{
return
(
int
)
(
(
int64_t
)
numerator
*
(
int64_t
)
value
/
(
int64_t
)
denominator
);
}
template
<>
int64_t
rescale
(
int64_t
numerator
,
int64_t
value
,
int64_t
denominator
)
template
<>
int64_t
rescale
(
int64_t
numerator
,
int64_t
value
,
int64_t
denominator
)
{
int64_t
r
=
0
;
int64_t
sign
=
(
(
numerator
<
0
)
?
-
1
:
1
)
*
(
denominator
<
0
?
-
1
:
1
)
*
(
value
<
0
?
-
1
:
1
);
int64_t
sign
=
(
(
numerator
<
0
)
?
-
1
:
1
)
*
(
denominator
<
0
?
-
1
:
1
)
*
(
value
<
0
?
-
1
:
1
);
int64_t
a
=
std
::
abs
(
numerator
);
int64_t
b
=
std
::
abs
(
value
);
...
...
@@ -51,7 +53,9 @@ template<> int64_t rescale( int64_t numerator, int64_t value, int64_t denominato
return
sign
*
(
(
a
*
b
+
r
)
/
c
);
else
return
sign
*
(
a
/
c
*
b
+
(
a
%
c
*
b
+
r
)
/
c
);
}
else
{
}
else
{
uint64_t
a0
=
a
&
0xFFFFFFFF
;
uint64_t
a1
=
a
>>
32
;
uint64_t
b0
=
b
&
0xFFFFFFFF
;
...
...
@@ -61,16 +65,16 @@ template<> int64_t rescale( int64_t numerator, int64_t value, int64_t denominato
int
i
;
a0
=
a0
*
b0
+
t1a
;
a1
=
a1
*
b1
+
(
t1
>>
32
)
+
(
a0
<
t1a
);
a1
=
a1
*
b1
+
(
t1
>>
32
)
+
(
a0
<
t1a
);
a0
+=
r
;
a1
+=
(
(
uint64_t
)
a0
)
<
r
;
a1
+=
(
(
uint64_t
)
a0
)
<
r
;
for
(
i
=
63
;
i
>=
0
;
i
--
)
{
a1
+=
a1
+
(
(
a0
>>
i
)
&
1
);
a1
+=
a1
+
(
(
a0
>>
i
)
&
1
);
t1
+=
t1
;
if
(
(
uint64_t
)
c
<=
a1
)
if
(
(
uint64_t
)
c
<=
a1
)
{
a1
-=
c
;
t1
++
;
...
...
common/painter.cpp
View file @
0ac3e1fb
...
...
@@ -27,7 +27,7 @@
#include <painter.h>
#include <gal/graphics_abstraction_layer.h>
using
namespace
K
iGfx
;
using
namespace
K
IGFX
;
RENDER_SETTINGS
::
RENDER_SETTINGS
()
{
...
...
common/tool/action_manager.cpp
View file @
0ac3e1fb
...
...
@@ -36,7 +36,7 @@ ACTION_MANAGER::ACTION_MANAGER( TOOL_MANAGER* aToolManager ) :
void
ACTION_MANAGER
::
RegisterAction
(
TOOL_ACTION
*
aAction
)
{
assert
(
aAction
->
GetId
()
==
-
1
);
// Check if the TOOL_ACTION was not registered before
assert
(
aAction
->
GetId
()
==
-
1
);
// Check if the TOOL_ACTION was not registered before
aAction
->
setId
(
MakeActionId
(
aAction
->
m_name
)
);
...
...
@@ -67,6 +67,7 @@ void ACTION_MANAGER::UnregisterAction( TOOL_ACTION* aAction )
int
ACTION_MANAGER
::
MakeActionId
(
const
std
::
string
&
aActionName
)
{
static
int
currentActionId
=
1
;
return
currentActionId
++
;
}
...
...
@@ -76,7 +77,7 @@ bool ACTION_MANAGER::RunAction( const std::string& aActionName ) const
std
::
map
<
std
::
string
,
TOOL_ACTION
*>::
const_iterator
it
=
m_actionNameIndex
.
find
(
aActionName
);
if
(
it
==
m_actionNameIndex
.
end
()
)
return
false
;
// no action with given name found
return
false
;
// no action with given name found
runAction
(
it
->
second
);
...
...
@@ -89,7 +90,7 @@ bool ACTION_MANAGER::RunHotKey( int aHotKey ) const
std
::
map
<
int
,
TOOL_ACTION
*>::
const_iterator
it
=
m_actionHotKeys
.
find
(
aHotKey
);
if
(
it
==
m_actionHotKeys
.
end
()
)
return
false
;
// no appropriate action found for the hotkey
return
false
;
// no appropriate action found for the hotkey
runAction
(
it
->
second
);
...
...
common/tool/context_menu.cpp
View file @
0ac3e1fb
...
...
@@ -88,6 +88,7 @@ void CONTEXT_MENU::SetTitle( const wxString& aTitle )
void
CONTEXT_MENU
::
Add
(
const
wxString
&
aLabel
,
int
aId
)
{
#ifdef DEBUG
if
(
m_menu
.
FindItem
(
aId
)
!=
NULL
)
wxLogWarning
(
wxT
(
"Adding more than one menu entry with the same ID may result in"
"undefined behaviour"
)
);
...
...
@@ -135,13 +136,15 @@ std::string CONTEXT_MENU::getHotKeyDescription( const TOOL_ACTION& aAction ) con
if
(
hotkey
&
MD_ModAlt
)
description
+=
"ALT+"
;
if
(
hotkey
&
MD_ModCtrl
)
description
+=
"CTRL+"
;
if
(
hotkey
&
MD_ModShift
)
description
+=
"SHIFT+"
;
// TODO dispatch keys such as Fx, TAB, PG_UP/DN, HOME, END, etc.
description
+=
char
(
hotkey
&
~
MD_ModifierMask
);
description
+=
char
(
hotkey
&
~
MD_ModifierMask
);
return
description
;
}
...
...
common/tool/tool_base.cpp
View file @
0ac3e1fb
...
...
@@ -25,13 +25,13 @@
#include <tool/tool_event.h>
#include <tool/tool_manager.h>
K
iGfx
::
VIEW
*
TOOL_BASE
::
getView
()
const
K
IGFX
::
VIEW
*
TOOL_BASE
::
getView
()
const
{
return
m_toolMgr
->
GetView
();
}
K
iGfx
::
VIEW_CONTROLS
*
TOOL_BASE
::
getViewControls
()
const
K
IGFX
::
VIEW_CONTROLS
*
TOOL_BASE
::
getViewControls
()
const
{
return
m_toolMgr
->
GetViewControls
();
}
...
...
common/tool/tool_dispatcher.cpp
View file @
0ac3e1fb
...
...
@@ -111,7 +111,7 @@ void TOOL_DISPATCHER::ResetState()
}
K
iGfx
::
VIEW
*
TOOL_DISPATCHER
::
getView
()
K
IGFX
::
VIEW
*
TOOL_DISPATCHER
::
getView
()
{
return
m_editFrame
->
GetGalCanvas
()
->
GetView
();
}
...
...
@@ -139,7 +139,7 @@ bool TOOL_DISPATCHER::handleMouseButton( wxEvent& aEvent, int aIndex, bool aMoti
st
->
pressed
=
true
;
evt
=
TOOL_EVENT
(
TC_Mouse
,
TA_MouseDown
,
args
);
}
else
if
(
up
)
// Handle mouse button release
else
if
(
up
)
// Handle mouse button release
{
st
->
pressed
=
false
;
...
...
@@ -166,7 +166,8 @@ bool TOOL_DISPATCHER::handleMouseButton( wxEvent& aEvent, int aIndex, bool aMoti
if
(
st
->
pressed
&&
aMotion
)
{
st
->
dragging
=
true
;
double
dragPixelDistance
=
getView
()
->
ToScreen
(
m_lastMousePos
-
st
->
dragOrigin
,
false
).
EuclideanNorm
();
double
dragPixelDistance
=
getView
()
->
ToScreen
(
m_lastMousePos
-
st
->
dragOrigin
,
false
).
EuclideanNorm
();
st
->
dragMaxDelta
=
std
::
max
(
st
->
dragMaxDelta
,
dragPixelDistance
);
wxLongLong
t
=
wxGetLocalTimeMillis
();
...
...
@@ -200,17 +201,17 @@ void TOOL_DISPATCHER::DispatchWxEvent( wxEvent& aEvent )
// Mouse handling
if
(
type
==
wxEVT_MOTION
||
type
==
wxEVT_MOUSEWHEEL
||
type
==
wxEVT_LEFT_DOWN
||
type
==
wxEVT_LEFT_UP
||
type
==
wxEVT_MIDDLE_DOWN
||
type
==
wxEVT_MIDDLE_UP
||
type
==
wxEVT_RIGHT_DOWN
||
type
==
wxEVT_RIGHT_UP
||
// Event issued whem mouse retains position in screen coordinates,
// but changes in world coordinates (eg. autopanning)
type
==
KiGfx
::
WX_VIEW_CONTROLS
::
EVT_REFRESH_MOUSE
)
type
==
wxEVT_LEFT_DOWN
||
type
==
wxEVT_LEFT_UP
||
type
==
wxEVT_MIDDLE_DOWN
||
type
==
wxEVT_MIDDLE_UP
||
type
==
wxEVT_RIGHT_DOWN
||
type
==
wxEVT_RIGHT_UP
||
// Event issued whem mouse retains position in screen coordinates,
// but changes in world coordinates (eg. autopanning)
type
==
KIGFX
::
WX_VIEW_CONTROLS
::
EVT_REFRESH_MOUSE
)
{
VECTOR2D
screenPos
=
m_toolMgr
->
GetViewControls
()
->
GetCursorPosition
();
VECTOR2D
pos
=
getView
()
->
ToWorld
(
screenPos
);
if
(
pos
!=
m_lastMousePos
||
type
==
K
iGfx
::
WX_VIEW_CONTROLS
::
EVT_REFRESH_MOUSE
)
if
(
pos
!=
m_lastMousePos
||
type
==
K
IGFX
::
WX_VIEW_CONTROLS
::
EVT_REFRESH_MOUSE
)
{
motion
=
true
;
m_lastMousePos
=
pos
;
...
...
@@ -235,7 +236,7 @@ void TOOL_DISPATCHER::DispatchWxEvent( wxEvent& aEvent )
if
(
type
==
wxEVT_KEY_UP
)
{
if
(
key
==
WXK_ESCAPE
)
// ESC is the special key for cancelling tools
if
(
key
==
WXK_ESCAPE
)
// ESC is the special key for cancelling tools
evt
=
TOOL_EVENT
(
TC_Command
,
TA_CancelTool
);
else
evt
=
TOOL_EVENT
(
TC_Keyboard
,
TA_KeyUp
,
key
|
mods
);
...
...
@@ -262,14 +263,15 @@ void TOOL_DISPATCHER::DispatchWxCommand( const wxCommandEvent& aEvent )
// fixme: use TOOL_ACTIONs here
switch
(
aEvent
.
GetId
()
)
{
case
ID_PNS_ROUTER_TOOL
:
toolName
=
"pcbnew.InteractiveRouter"
;
activateTool
=
true
;
break
;
case
ID_SELECTION_TOOL
:
toolName
=
"pcbnew.InteractiveSelection"
;
activateTool
=
true
;
break
;
case
ID_PNS_ROUTER_TOOL
:
toolName
=
"pcbnew.InteractiveRouter"
;
activateTool
=
true
;
break
;
case
ID_SELECTION_TOOL
:
toolName
=
"pcbnew.InteractiveSelection"
;
activateTool
=
true
;
break
;
}
// do nothing if the legacy view is active
...
...
common/tool/tool_event.cpp
View file @
0ac3e1fb
...
...
@@ -64,49 +64,53 @@ const std::string TOOL_EVENT::Format() const
{
std
::
string
ev
;
const
FlagString
categories
[]
=
{
{
TC_Mouse
,
"mouse"
},
const
FlagString
categories
[]
=
{
{
TC_Mouse
,
"mouse"
},
{
TC_Keyboard
,
"keyboard"
},
{
TC_Command
,
"command"
},
{
TC_Message
,
"message"
},
{
TC_View
,
"view"
},
{
0
,
""
}
{
TC_Command
,
"command"
},
{
TC_Message
,
"message"
},
{
TC_View
,
"view"
},
{
0
,
""
}
};
const
FlagString
actions
[]
=
{
{
TA_MouseClick
,
"click"
},
{
TA_MouseUp
,
"button-up"
},
{
TA_MouseDown
,
"button-down"
},
{
TA_MouseDrag
,
"drag"
},
{
TA_MouseMotion
,
"motion"
},
{
TA_MouseWheel
,
"wheel"
},
{
TA_KeyUp
,
"key-up"
},
{
TA_KeyDown
,
"key-down"
},
{
TA_ViewRefresh
,
"view-refresh"
},
{
TA_ViewZoom
,
"view-zoom"
},
{
TA_ViewPan
,
"view-pan"
},
{
TA_ViewDirty
,
"view-dirty"
},
{
TA_ChangeLayer
,
"change-layer"
},
{
TA_CancelTool
,
"cancel-tool"
},
const
FlagString
actions
[]
=
{
{
TA_MouseClick
,
"click"
},
{
TA_MouseUp
,
"button-up"
},
{
TA_MouseDown
,
"button-down"
},
{
TA_MouseDrag
,
"drag"
},
{
TA_MouseMotion
,
"motion"
},
{
TA_MouseWheel
,
"wheel"
},
{
TA_KeyUp
,
"key-up"
},
{
TA_KeyDown
,
"key-down"
},
{
TA_ViewRefresh
,
"view-refresh"
},
{
TA_ViewZoom
,
"view-zoom"
},
{
TA_ViewPan
,
"view-pan"
},
{
TA_ViewDirty
,
"view-dirty"
},
{
TA_ChangeLayer
,
"change-layer"
},
{
TA_CancelTool
,
"cancel-tool"
},
{
TA_ContextMenuUpdate
,
"context-menu-update"
},
{
TA_ContextMenuChoice
,
"context-menu-choice"
},
{
TA_Action
,
"action"
},
{
0
,
""
}
{
TA_Action
,
"action"
},
{
0
,
""
}
};
const
FlagString
buttons
[]
=
{
{
MB_None
,
"none"
},
{
MB_Left
,
"left"
},
{
MB_Right
,
"right"
},
const
FlagString
buttons
[]
=
{
{
MB_None
,
"none"
},
{
MB_Left
,
"left"
},
{
MB_Right
,
"right"
},
{
MB_Middle
,
"middle"
},
{
0
,
""
}
{
0
,
""
}
};
const
FlagString
modifiers
[]
=
{
const
FlagString
modifiers
[]
=
{
{
MD_ModShift
,
"shift"
},
{
MD_ModCtrl
,
"ctrl"
},
{
MD_ModAlt
,
"alt"
},
{
0
,
""
}
{
MD_ModCtrl
,
"ctrl"
},
{
MD_ModAlt
,
"alt"
},
{
0
,
""
}
};
ev
=
"category: "
;
...
...
common/tool/tool_interactive.cpp
View file @
0ac3e1fb
...
...
@@ -31,12 +31,14 @@
TOOL_INTERACTIVE
::
TOOL_INTERACTIVE
(
TOOL_ID
aId
,
const
std
::
string
&
aName
)
:
TOOL_BASE
(
TOOL_Interactive
,
aId
,
aName
)
{};
{
}
TOOL_INTERACTIVE
::
TOOL_INTERACTIVE
(
const
std
::
string
&
aName
)
:
TOOL_BASE
(
TOOL_Interactive
,
TOOL_MANAGER
::
MakeToolId
(
aName
),
aName
)
{};
{
}
TOOL_INTERACTIVE
::~
TOOL_INTERACTIVE
()
...
...
common/tool/tool_manager.cpp
View file @
0ac3e1fb
...
...
@@ -85,12 +85,12 @@ struct TOOL_MANAGER::TOOL_STATE
bool
operator
==
(
const
TOOL_MANAGER
::
TOOL_STATE
&
aRhs
)
const
{
return
(
aRhs
.
theTool
==
this
->
theTool
)
;
return
aRhs
.
theTool
==
this
->
theTool
;
}
bool
operator
!=
(
const
TOOL_MANAGER
::
TOOL_STATE
&
aRhs
)
const
{
return
(
aRhs
.
theTool
!=
this
->
theTool
)
;
return
aRhs
.
theTool
!=
this
->
theTool
;
}
};
...
...
@@ -137,6 +137,7 @@ void TOOL_MANAGER::RegisterTool( TOOL_BASE* aTool )
if
(
aTool
->
GetType
()
==
TOOL_Interactive
)
{
bool
initState
=
static_cast
<
TOOL_INTERACTIVE
*>
(
aTool
)
->
Init
();
if
(
!
initState
)
{
wxLogError
(
wxT
(
"Initialization of the %s tool failed"
),
aTool
->
GetName
().
c_str
()
);
...
...
@@ -232,6 +233,7 @@ bool TOOL_MANAGER::runTool( TOOL_BASE* aTool )
// If the tool is already active, do not invoke it again
if
(
state
->
idle
==
false
)
return
false
;
state
->
idle
=
false
;
static_cast
<
TOOL_INTERACTIVE
*>
(
aTool
)
->
Reset
();
...
...
@@ -269,6 +271,7 @@ void TOOL_MANAGER::ScheduleNextState( TOOL_BASE* aTool, TOOL_STATE_FUNC& aHandle
const
TOOL_EVENT_LIST
&
aConditions
)
{
TOOL_STATE
*
st
=
m_toolState
[
aTool
];
st
->
transitions
.
push_back
(
TRANSITION
(
aConditions
,
aHandler
)
);
}
...
...
@@ -309,8 +312,9 @@ void TOOL_MANAGER::dispatchInternal( TOOL_EVENT& aEvent )
st
->
wakeupEvent
=
aEvent
;
st
->
pendingWait
=
false
;
st
->
waitEvents
.
clear
();
if
(
st
->
cofunc
&&
!
st
->
cofunc
->
Resume
()
)
finishTool
(
st
);
// The couroutine has finished
finishTool
(
st
);
// The couroutine has finished
// If the tool did not request to propagate
// the event to other tools, we should stop it now
...
...
@@ -345,7 +349,7 @@ void TOOL_MANAGER::dispatchInternal( TOOL_EVENT& aEvent )
st
->
cofunc
->
Call
(
aEvent
);
if
(
!
st
->
cofunc
->
Running
()
)
finishTool
(
st
);
// The couroutine has finished immediately?
finishTool
(
st
);
// The couroutine has finished immediately?
}
}
}
...
...
@@ -360,9 +364,9 @@ bool TOOL_MANAGER::dispatchStandardEvents( TOOL_EVENT& aEvent )
{
// Check if there is a hotkey associated
if
(
m_actionMgr
->
RunHotKey
(
aEvent
.
Modifier
()
|
aEvent
.
KeyCode
()
)
)
return
false
;
// hotkey event was handled so it does not go any further
return
false
;
// hotkey event was handled so it does not go any further
}
else
if
(
aEvent
.
Category
()
==
TC_Command
)
// it may be a tool activation event
else
if
(
aEvent
.
Category
()
==
TC_Command
)
// it may be a tool activation event
{
dispatchActivation
(
aEvent
);
// do not return false, as the event has to go on to the destined tool
...
...
@@ -392,6 +396,7 @@ void TOOL_MANAGER::finishTool( TOOL_STATE* aState )
{
// Find the tool to be deactivated
std
::
deque
<
TOOL_ID
>::
iterator
it
,
it_end
;
for
(
it
=
m_activeTools
.
begin
(),
it_end
=
m_activeTools
.
end
();
it
!=
it_end
;
++
it
)
{
if
(
aState
==
m_toolIdIndex
[
*
it
]
)
...
...
@@ -411,7 +416,7 @@ void TOOL_MANAGER::finishTool( TOOL_STATE* aState )
bool
TOOL_MANAGER
::
ProcessEvent
(
TOOL_EVENT
&
aEvent
)
{
//
wxLogDebug( "event: %s", aEvent.Format().c_str() );
// wxLogDebug( "event: %s", aEvent.Format().c_str() );
// Early dispatch of events destined for the TOOL_MANAGER
if
(
!
dispatchStandardEvents
(
aEvent
)
)
...
...
@@ -451,7 +456,7 @@ bool TOOL_MANAGER::ProcessEvent( TOOL_EVENT& aEvent )
if
(
m_view
->
IsDirty
()
)
{
PCB_EDIT_FRAME
*
f
=
static_cast
<
PCB_EDIT_FRAME
*>
(
GetEditFrame
()
);
f
->
GetGalCanvas
()
->
Refresh
();
// fixme: ugly hack, provide a method in TOOL_DISPATCHER.
f
->
GetGalCanvas
()
->
Refresh
();
// fixme: ugly hack, provide a method in TOOL_DISPATCHER.
}
return
false
;
...
...
@@ -475,12 +480,13 @@ void TOOL_MANAGER::ScheduleContextMenu( TOOL_BASE* aTool, CONTEXT_MENU* aMenu,
TOOL_ID
TOOL_MANAGER
::
MakeToolId
(
const
std
::
string
&
aToolName
)
{
static
int
currentId
;
return
currentId
++
;
}
void
TOOL_MANAGER
::
SetEnvironment
(
EDA_ITEM
*
aModel
,
K
iGfx
::
VIEW
*
aView
,
K
iGfx
::
VIEW_CONTROLS
*
aViewControls
,
wxWindow
*
aFrame
)
void
TOOL_MANAGER
::
SetEnvironment
(
EDA_ITEM
*
aModel
,
K
IGFX
::
VIEW
*
aView
,
K
IGFX
::
VIEW_CONTROLS
*
aViewControls
,
wxWindow
*
aFrame
)
{
m_model
=
aModel
;
m_view
=
aView
;
...
...
common/view/view.cpp
View file @
0ac3e1fb
...
...
@@ -38,7 +38,7 @@
#include <profile.h>
#endif
/* __WXDEBUG__ */
using
namespace
K
iGfx
;
using
namespace
K
IGFX
;
VIEW
::
VIEW
(
bool
aIsDynamic
)
:
m_enableOrderModifier
(
true
),
...
...
@@ -348,7 +348,7 @@ void VIEW::SetLayerOrder( int aLayer, int aRenderingOrder )
int
VIEW
::
GetLayerOrder
(
int
aLayer
)
const
{
return
m_layers
.
at
(
aLayer
).
renderingOrder
;
return
m_layers
.
at
(
aLayer
).
renderingOrder
;
}
...
...
@@ -383,7 +383,7 @@ void VIEW::SortLayers( int aLayers[], int& aCount ) const
struct
VIEW
::
updateItemsColor
{
updateItemsColor
(
int
aLayer
,
PAINTER
*
aPainter
,
GAL
*
aGal
)
:
layer
(
aLayer
),
painter
(
aPainter
),
gal
(
aGal
)
layer
(
aLayer
),
painter
(
aPainter
),
gal
(
aGal
)
{
}
...
...
@@ -474,7 +474,8 @@ void VIEW::ChangeLayerDepth( int aLayer, int aDepth )
m_layers
[
aLayer
].
items
->
Query
(
r
,
visitor
);
}
int
VIEW
::
GetTopLayer
(
)
const
int
VIEW
::
GetTopLayer
()
const
{
if
(
m_topLayers
.
size
()
==
0
)
return
0
;
...
...
@@ -512,10 +513,13 @@ void VIEW::SetTopLayer( int aLayer, bool aEnabled )
void
VIEW
::
EnableTopLayer
(
bool
aEnable
)
{
if
(
aEnable
==
m_enableOrderModifier
)
return
;
if
(
aEnable
==
m_enableOrderModifier
)
return
;
m_enableOrderModifier
=
aEnable
;
std
::
set
<
unsigned
int
>::
iterator
it
;
if
(
aEnable
)
{
for
(
it
=
m_topLayers
.
begin
();
it
!=
m_topLayers
.
end
();
++
it
)
...
...
@@ -615,8 +619,10 @@ void VIEW::draw( VIEW_ITEM* aItem, int aLayer, bool aImmediate ) const
{
group
=
m_gal
->
BeginGroup
();
aItem
->
setGroup
(
aLayer
,
group
);
if
(
!
m_painter
->
Draw
(
aItem
,
aLayer
)
)
aItem
->
ViewDraw
(
aLayer
,
m_gal
);
// Alternative drawing method
m_gal
->
EndGroup
();
}
}
...
...
@@ -648,6 +654,7 @@ void VIEW::draw( VIEW_ITEM* aItem, bool aImmediate ) const
void
VIEW
::
draw
(
VIEW_GROUP
*
aGroup
,
bool
aImmediate
)
const
{
std
::
set
<
VIEW_ITEM
*>::
const_iterator
it
;
for
(
it
=
aGroup
->
Begin
();
it
!=
aGroup
->
End
();
++
it
)
{
draw
(
*
it
,
aImmediate
);
...
...
@@ -687,6 +694,7 @@ struct VIEW::recacheItem
{
// Remove previously cached group
int
prevGroup
=
aItem
->
getGroup
(
layer
);
if
(
prevGroup
>=
0
)
gal
->
DeleteGroup
(
prevGroup
);
...
...
@@ -694,8 +702,10 @@ struct VIEW::recacheItem
{
int
group
=
gal
->
BeginGroup
();
aItem
->
setGroup
(
layer
,
group
);
if
(
!
view
->
m_painter
->
Draw
(
aItem
,
layer
)
)
aItem
->
ViewDraw
(
layer
,
gal
);
// Alternative drawing method
gal
->
EndGroup
();
}
else
...
...
@@ -803,7 +813,7 @@ void VIEW::clearGroupCache()
for
(
LayerMapIter
i
=
m_layers
.
begin
();
i
!=
m_layers
.
end
();
++
i
)
{
VIEW_LAYER
*
l
=
&
(
(
*
i
).
second
);
VIEW_LAYER
*
l
=
&
(
(
*
i
).
second
);
l
->
items
->
Query
(
r
,
visitor
);
}
}
...
...
@@ -881,6 +891,7 @@ void VIEW::updateItemGeometry( VIEW_ITEM* aItem, int aLayer )
// Redraw the item from scratch
int
prevGroup
=
aItem
->
getGroup
(
aLayer
);
if
(
prevGroup
>=
0
)
m_gal
->
DeleteGroup
(
prevGroup
);
...
...
@@ -894,6 +905,7 @@ void VIEW::updateItemGeometry( VIEW_ITEM* aItem, int aLayer )
void
VIEW
::
updateBbox
(
VIEW_ITEM
*
aItem
)
{
int
layers
[
VIEW_MAX_LAYERS
],
layers_count
;
aItem
->
ViewGetLayers
(
layers
,
layers_count
);
for
(
int
i
=
0
;
i
<
layers_count
;
i
++
)
...
...
@@ -912,6 +924,7 @@ void VIEW::updateLayers( VIEW_ITEM* aItem )
// Remove the item from previous layer set
aItem
->
getLayers
(
layers
,
layers_count
);
for
(
int
i
=
0
;
i
<
layers_count
;
i
++
)
{
VIEW_LAYER
&
l
=
m_layers
[
layers
[
i
]];
...
...
@@ -922,6 +935,7 @@ void VIEW::updateLayers( VIEW_ITEM* aItem )
// Add the item to new layer set
aItem
->
ViewGetLayers
(
layers
,
layers_count
);
aItem
->
saveLayers
(
layers
,
layers_count
);
for
(
int
i
=
0
;
i
<
layers_count
;
i
++
)
{
VIEW_LAYER
&
l
=
m_layers
[
layers
[
i
]];
...
...
@@ -938,7 +952,7 @@ bool VIEW::areRequiredLayersEnabled( int aLayerId ) const
std
::
set
<
int
>::
iterator
it
,
it_end
;
for
(
it
=
m_layers
.
at
(
aLayerId
).
requiredLayers
.
begin
(),
it_end
=
m_layers
.
at
(
aLayerId
).
requiredLayers
.
end
();
it
!=
it_end
;
++
it
)
it_end
=
m_layers
.
at
(
aLayerId
).
requiredLayers
.
end
();
it
!=
it_end
;
++
it
)
{
// That is enough if just one layer is not enabled
if
(
!
m_layers
.
at
(
*
it
).
enabled
)
...
...
common/view/view_group.cpp
View file @
0ac3e1fb
...
...
@@ -39,10 +39,10 @@
#include <boost/foreach.hpp>
#include <layers_id_colors_and_visibility.h>
using
namespace
K
iGfx
;
using
namespace
K
IGFX
;
VIEW_GROUP
::
VIEW_GROUP
(
VIEW
*
aView
)
:
m_layer
(
ITEM_GAL_LAYER
(
GP_OVERLAY
)
)
m_layer
(
ITEM_GAL_LAYER
(
GP_OVERLAY
)
)
{
m_view
=
aView
;
}
...
...
@@ -80,6 +80,7 @@ unsigned int VIEW_GROUP::GetSize() const
const
BOX2I
VIEW_GROUP
::
ViewBBox
()
const
{
BOX2I
maxBox
;
maxBox
.
SetMaximum
();
return
maxBox
;
}
...
...
@@ -105,7 +106,7 @@ void VIEW_GROUP::ViewDraw( int aLayer, GAL* aGal ) const
aGal
->
AdvanceDepth
();
if
(
!
painter
->
Draw
(
item
,
layers
[
i
]
)
)
item
->
ViewDraw
(
layers
[
i
],
aGal
);
// Alternative drawing method
item
->
ViewDraw
(
layers
[
i
],
aGal
);
// Alternative drawing method
}
}
...
...
common/view/view_item.cpp
View file @
0ac3e1fb
...
...
@@ -27,7 +27,7 @@
#include <view/view_item.h>
#include <view/view.h>
using
namespace
K
iGfx
;
using
namespace
K
IGFX
;
void
VIEW_ITEM
::
ViewSetVisible
(
bool
aIsVisible
)
{
...
...
@@ -69,6 +69,7 @@ void VIEW_ITEM::ViewRelease()
void
VIEW_ITEM
::
getLayers
(
int
*
aLayers
,
int
&
aCount
)
const
{
int
*
layersPtr
=
aLayers
;
for
(
unsigned
int
i
=
0
;
i
<
m_layers
.
size
();
++
i
)
{
if
(
m_layers
[
i
]
)
...
...
common/view/wx_view_controls.cpp
View file @
0ac3e1fb
...
...
@@ -30,7 +30,7 @@
#include <gal/graphics_abstraction_layer.h>
#include <tool/tool_dispatcher.h>
using
namespace
K
iGfx
;
using
namespace
K
IGFX
;
const
wxEventType
WX_VIEW_CONTROLS
::
EVT_REFRESH_MOUSE
=
wxNewEventType
();
...
...
@@ -40,25 +40,25 @@ WX_VIEW_CONTROLS::WX_VIEW_CONTROLS( VIEW* aView, wxWindow* aParentPanel ) :
m_parentPanel
(
aParentPanel
)
{
m_parentPanel
->
Connect
(
wxEVT_MOTION
,
wxMouseEventHandler
(
WX_VIEW_CONTROLS
::
onMotion
),
NULL
,
this
);
WX_VIEW_CONTROLS
::
onMotion
),
NULL
,
this
);
m_parentPanel
->
Connect
(
wxEVT_MOUSEWHEEL
,
wxMouseEventHandler
(
WX_VIEW_CONTROLS
::
onWheel
),
NULL
,
this
);
WX_VIEW_CONTROLS
::
onWheel
),
NULL
,
this
);
m_parentPanel
->
Connect
(
wxEVT_MIDDLE_UP
,
wxMouseEventHandler
(
WX_VIEW_CONTROLS
::
onButton
),
NULL
,
this
);
WX_VIEW_CONTROLS
::
onButton
),
NULL
,
this
);
m_parentPanel
->
Connect
(
wxEVT_MIDDLE_DOWN
,
wxMouseEventHandler
(
WX_VIEW_CONTROLS
::
onButton
),
NULL
,
this
);
WX_VIEW_CONTROLS
::
onButton
),
NULL
,
this
);
m_parentPanel
->
Connect
(
wxEVT_LEFT_UP
,
wxMouseEventHandler
(
WX_VIEW_CONTROLS
::
onButton
),
NULL
,
this
);
WX_VIEW_CONTROLS
::
onButton
),
NULL
,
this
);
m_parentPanel
->
Connect
(
wxEVT_LEFT_DOWN
,
wxMouseEventHandler
(
WX_VIEW_CONTROLS
::
onButton
),
NULL
,
this
);
WX_VIEW_CONTROLS
::
onButton
),
NULL
,
this
);
#if defined _WIN32 || defined _WIN64
m_parentPanel
->
Connect
(
wxEVT_ENTER_WINDOW
,
wxMouseEventHandler
(
WX_VIEW_CONTROLS
::
onEnter
),
NULL
,
this
);
WX_VIEW_CONTROLS
::
onEnter
),
NULL
,
this
);
#endif
m_panTimer
.
SetOwner
(
this
);
this
->
Connect
(
wxEVT_TIMER
,
wxTimerEventHandler
(
WX_VIEW_CONTROLS
::
onTimer
),
NULL
,
this
);
WX_VIEW_CONTROLS
::
onTimer
),
NULL
,
this
);
}
...
...
@@ -133,7 +133,7 @@ void WX_VIEW_CONTROLS::onWheel( wxMouseEvent& aEvent )
double
timeDiff
=
timeStamp
.
ToDouble
()
-
m_timeStamp
.
ToDouble
();
m_timeStamp
=
timeStamp
;
double
zoomScale
;
double
zoomScale
;
// Set scaling speed depending on scroll wheel event interval
if
(
timeDiff
<
500
&&
timeDiff
>
0
)
...
...
@@ -171,6 +171,7 @@ void WX_VIEW_CONTROLS::onButton( wxMouseEvent& aEvent )
{
m_state
=
IDLE
;
// Stop autopanning when user release left mouse button
}
break
;
case
DRAG_PANNING
:
...
...
@@ -178,6 +179,7 @@ void WX_VIEW_CONTROLS::onButton( wxMouseEvent& aEvent )
{
m_state
=
IDLE
;
}
break
;
}
...
...
@@ -214,7 +216,7 @@ void WX_VIEW_CONTROLS::onTimer( wxTimerEvent& aEvent )
}
break
;
case
IDLE
:
// Just remove unnecessary warnings
case
IDLE
:
// Just remove unnecessary warnings
case
DRAG_PANNING
:
break
;
}
...
...
@@ -284,6 +286,7 @@ bool WX_VIEW_CONTROLS::handleAutoPanning( const wxMouseEvent& aEvent )
return
false
;
}
return
true
;
break
;
...
...
@@ -295,6 +298,7 @@ bool WX_VIEW_CONTROLS::handleAutoPanning( const wxMouseEvent& aEvent )
return
true
;
}
return
false
;
break
;
...
...
@@ -303,5 +307,5 @@ bool WX_VIEW_CONTROLS::handleAutoPanning( const wxMouseEvent& aEvent )
}
wxASSERT_MSG
(
false
,
wxT
(
"This line should never be reached"
)
);
return
false
;
// Should not be reached, just avoid the compiler warnings..
return
false
;
// Should not be reached, just avoid the compiler warnings..
}
common/worksheet_viewitem.cpp
View file @
0ac3e1fb
...
...
@@ -34,7 +34,7 @@
#include <layers_id_colors_and_visibility.h>
#include <boost/foreach.hpp>
using
namespace
K
iGfx
;
using
namespace
K
IGFX
;
WORKSHEET_VIEWITEM
::
WORKSHEET_VIEWITEM
(
const
std
::
string
&
aFileName
,
const
std
::
string
&
aSheetName
,
const
PAGE_INFO
*
aPageInfo
,
const
TITLE_BLOCK
*
aTitleBlock
)
:
...
...
common/zoom.cpp
View file @
0ac3e1fb
...
...
@@ -197,8 +197,8 @@ void EDA_DRAW_FRAME::OnZoom( wxCommandEvent& event )
if
(
m_galCanvasActive
)
{
// Apply computed view settings to GAL
K
iGfx
::
VIEW
*
view
=
m_galCanvas
->
GetView
();
K
iGfx
::
GAL
*
gal
=
m_galCanvas
->
GetGAL
();
K
IGFX
::
VIEW
*
view
=
m_galCanvas
->
GetView
();
K
IGFX
::
GAL
*
gal
=
m_galCanvas
->
GetGAL
();
double
zoomFactor
=
gal
->
GetWorldScale
()
/
gal
->
GetZoomFactor
();
double
zoom
=
1.0
/
(
zoomFactor
*
GetZoom
()
);
...
...
include/base_struct.h
View file @
0ac3e1fb
...
...
@@ -301,7 +301,7 @@ typedef unsigned STATUS_FLAGS;
* is a base class for most all the KiCad significant classes, used in
* schematics and boards.
*/
class
EDA_ITEM
:
public
K
iGfx
::
VIEW_ITEM
class
EDA_ITEM
:
public
K
IGFX
::
VIEW_ITEM
{
private
:
...
...
include/class_drawpanel_gal.h
View file @
0ac3e1fb
...
...
@@ -38,7 +38,7 @@
class
BOARD
;
class
TOOL_DISPATCHER
;
namespace
K
iGfx
namespace
K
IGFX
{
class
GAL
;
class
VIEW
;
...
...
@@ -73,7 +73,7 @@ public:
* Returns a pointer to the GAL instance used in the panel.
* @return The instance of GAL.
*/
K
iGfx
::
GAL
*
GetGAL
()
const
K
IGFX
::
GAL
*
GetGAL
()
const
{
return
m_gal
;
}
...
...
@@ -83,7 +83,7 @@ public:
* Returns a pointer to the VIEW instance used in the panel.
* @return The instance of VIEW.
*/
K
iGfx
::
VIEW
*
GetView
()
const
K
IGFX
::
VIEW
*
GetView
()
const
{
return
m_view
;
}
...
...
@@ -93,9 +93,9 @@ public:
* Returns a pointer to the VIEW_CONTROLS instance used in the panel.
* @return The instance of VIEW_CONTROLS.
*/
K
iGfx
::
VIEW_CONTROLS
*
GetViewControls
()
const
K
IGFX
::
VIEW_CONTROLS
*
GetViewControls
()
const
{
return
(
K
iGfx
::
VIEW_CONTROLS
*
)(
m_viewControls
);
return
(
K
IGFX
::
VIEW_CONTROLS
*
)(
m_viewControls
);
}
/// @copydoc wxWindow::Refresh()
...
...
@@ -125,12 +125,12 @@ protected:
bool
m_pendingRefresh
;
wxTimer
m_refreshTimer
;
K
iGfx
::
GAL
*
m_gal
;
///< Interface for drawing objects on a 2D-surface
K
iGfx
::
VIEW
*
m_view
;
///< Stores view settings (scale, center, etc.)
K
IGFX
::
GAL
*
m_gal
;
///< Interface for drawing objects on a 2D-surface
K
IGFX
::
VIEW
*
m_view
;
///< Stores view settings (scale, center, etc.)
///< and items to be drawn
K
iGfx
::
PAINTER
*
m_painter
;
///< Contains information about how to draw items
K
IGFX
::
PAINTER
*
m_painter
;
///< Contains information about how to draw items
///< using GAL
K
iGfx
::
WX_VIEW_CONTROLS
*
m_viewControls
;
///< Control for VIEW (moving, zooming, etc.)
K
IGFX
::
WX_VIEW_CONTROLS
*
m_viewControls
;
///< Control for VIEW (moving, zooming, etc.)
GalType
m_currentGal
;
///< Currently used GAL
TOOL_DISPATCHER
*
m_eventDispatcher
;
///< Processes and forwards events to tools
};
...
...
include/gal/cairo/cairo_compositor.h
View file @
0ac3e1fb
...
...
@@ -36,7 +36,7 @@
#include <boost/smart_ptr/shared_array.hpp>
#include <deque>
namespace
K
iGfx
namespace
K
IGFX
{
class
CAIRO_COMPOSITOR
:
public
COMPOSITOR
{
...
...
@@ -122,6 +122,6 @@ protected:
return
m_buffers
.
size
();
}
};
}
// namespace K
iGfx
}
// namespace K
IGFX
#endif
/* COMPOSITOR_H_ */
include/gal/cairo/cairo_gal.h
View file @
0ac3e1fb
...
...
@@ -40,9 +40,9 @@
#define SCREEN_DEPTH 24
#else
#if wxCHECK_VERSION( 2, 9, 0 )
#define SCREEN_DEPTH wxBITMAP_SCREEN_DEPTH
#define SCREEN_DEPTH
wxBITMAP_SCREEN_DEPTH
#else
#define SCREEN_DEPTH 32
#define SCREEN_DEPTH
32
#endif
#endif
...
...
@@ -58,7 +58,7 @@
* of KiCad graphics surfaces as well.
*
*/
namespace
K
iGfx
namespace
K
IGFX
{
class
CAIRO_COMPOSITOR
;
...
...
@@ -126,7 +126,7 @@ public:
// --------------
/// @brief Resizes the canvas.
virtual
void
ResizeScreen
(
int
aWidth
,
int
aHeight
);
virtual
void
ResizeScreen
(
int
aWidth
,
int
aHeight
);
/// @brief Shows/hides the GAL canvas
virtual
bool
Show
(
bool
aShow
);
...
...
@@ -386,6 +386,6 @@ private:
/// Format used to store pixels
static
const
cairo_format_t
GAL_FORMAT
=
CAIRO_FORMAT_RGB24
;
};
}
// namespace K
iGfx
}
// namespace K
IGFX
#endif // CAIROGAL_H_
#endif
// CAIROGAL_H_
include/gal/color4d.h
View file @
0ac3e1fb
...
...
@@ -30,7 +30,7 @@
#include <colors.h>
#include <cassert>
namespace
K
iGfx
namespace
K
IGFX
{
/**
* Class COLOR4D
...
...
@@ -182,7 +182,7 @@ public:
double
GetBrightness
()
const
{
// Weighted W3C formula
return
(
r
*
0
.
299
+
g
*
0
.
587
+
b
*
0
.
117
)
;
return
r
*
0
.
299
+
g
*
0
.
587
+
b
*
0
.
117
;
}
/**
...
...
@@ -217,6 +217,6 @@ public:
double
b
;
///< Blue component
double
a
;
///< Alpha component
};
}
// namespace K
iGfx
}
// namespace K
IGFX
#endif
/* COLOR4D_H_ */
include/gal/compositor.h
View file @
0ac3e1fb
...
...
@@ -31,7 +31,7 @@
#ifndef COMPOSITOR_H_
#define COMPOSITOR_H_
namespace
K
iGfx
namespace
K
IGFX
{
class
COMPOSITOR
...
...
@@ -101,6 +101,6 @@ protected:
unsigned
int
m_height
;
///< Height of the buffer (in pixels)
};
}
// namespace K
iGfx
}
// namespace K
IGFX
#endif
/* COMPOSITOR_H_ */
include/gal/definitions.h
View file @
0ac3e1fb
...
...
@@ -31,18 +31,18 @@
#define SWAP( varA, condition, varB ) if( varA condition varB ) { double tmp = varA; varA = varB; \
varB = tmp; }
namespace
K
iGfx
namespace
K
IGFX
{
/**
* RenderTarget: Possible rendering targets
*/
enum
RenderTarget
{
TARGET_CACHED
=
0
,
///< Main rendering target (cached)
TARGET_NONCACHED
,
///< Auxiliary rendering target (noncached)
TARGET_OVERLAY
,
///< Items that may change while the view stays the same (noncached)
TARGETS_NUMBER
///< Number of available rendering targets
};
}
/**
* RenderTarget: Possible rendering targets
*/
enum
RenderTarget
{
TARGET_CACHED
=
0
,
///< Main rendering target (cached)
TARGET_NONCACHED
,
///< Auxiliary rendering target (noncached)
TARGET_OVERLAY
,
///< Items that may change while the view stays the same (noncached)
TARGETS_NUMBER
///< Number of available rendering targets
};
}
// namespace KIGFX
#endif
/* DEFINITIONS_H_ */
include/gal/graphics_abstraction_layer.h
View file @
0ac3e1fb
...
...
@@ -40,7 +40,7 @@
#include <gal/stroke_font.h>
#include <newstroke_font.h>
namespace
K
iGfx
namespace
K
IGFX
{
/**
* GridStyle: Type definition of the grid style
...
...
@@ -891,6 +891,6 @@ protected:
static
const
int
MIN_DEPTH
=
-
2048
;
static
const
int
MAX_DEPTH
=
2047
;
};
}
// namespace KiGfx
}
// namespace KIGFX
#endif
/* GRAPHICSABSTRACTIONLAYER_H_ */
include/gal/opengl/cached_container.h
View file @
0ac3e1fb
...
...
@@ -37,9 +37,9 @@
#include <set>
// Debug messages verbosity level
//#define CACHED_CONTAINER_TEST 1
//
#define CACHED_CONTAINER_TEST 1
namespace
K
iGfx
namespace
K
IGFX
{
class
VERTEX_ITEM
;
class
SHADER
;
...
...
@@ -173,6 +173,6 @@ private:
inline
void
test
()
{}
#endif
/* CACHED_CONTAINER_TEST */
};
}
// namespace K
iGfx
}
// namespace K
IGFX
#endif
/* CACHED_CONTAINER_H_ */
include/gal/opengl/gpu_manager.h
View file @
0ac3e1fb
...
...
@@ -33,7 +33,7 @@
#include <gal/opengl/vertex_common.h>
#include <boost/scoped_array.hpp>
namespace
K
iGfx
namespace
K
IGFX
{
class
SHADER
;
class
VERTEX_CONTAINER
;
...
...
@@ -90,14 +90,14 @@ protected:
GPU_MANAGER
(
VERTEX_CONTAINER
*
aContainer
);
///< Drawing status flag.
bool
m_isDrawing
;
bool
m_isDrawing
;
///< Container that stores vertices data.
VERTEX_CONTAINER
*
m_container
;
///< Shader handling
SHADER
*
m_shader
;
int
m_shaderAttrib
;
///< Location of shader attributes (for glVertexAttribPointer)
int
m_shaderAttrib
;
///< Location of shader attributes (for glVertexAttribPointer)
};
...
...
@@ -130,12 +130,11 @@ public:
virtual
void
uploadToGpu
();
protected
:
bool
m_buffersInitialized
;
bool
m_buffersInitialized
;
boost
::
scoped_array
<
GLuint
>
m_indices
;
GLuint
*
m_indicesPtr
;
GLuint
m_verticesBuffer
;
unsigned
int
m_indicesSize
;
GLuint
*
m_indicesPtr
;
GLuint
m_verticesBuffer
;
unsigned
int
m_indicesSize
;
};
...
...
@@ -159,5 +158,5 @@ public:
///< @copydoc GPU_MANAGER::EndDrawing()
virtual
void
EndDrawing
();
};
}
// namespace K
iGfx
}
// namespace K
IGFX
#endif
/* GPU_MANAGER_H_ */
include/gal/opengl/noncached_container.h
View file @
0ac3e1fb
...
...
@@ -33,7 +33,7 @@
#include <gal/opengl/vertex_container.h>
namespace
K
iGfx
namespace
K
IGFX
{
class
VERTEX_ITEM
;
class
SHADER
;
...
...
@@ -68,6 +68,6 @@ protected:
///< Index of the free first space where a vertex can be stored
unsigned
int
m_freePtr
;
};
}
// namespace K
iGfx
}
// namespace K
IGFX
#endif
/* NONCACHED_CONTAINER_H_ */
include/gal/opengl/opengl_compositor.h
View file @
0ac3e1fb
...
...
@@ -35,7 +35,7 @@
#include <GL/glew.h>
#include <deque>
namespace
K
iGfx
namespace
K
IGFX
{
class
OPENGL_COMPOSITOR
:
public
COMPOSITOR
{
...
...
@@ -105,6 +105,6 @@ protected:
return
m_buffers
.
size
();
}
};
}
// namespace K
iGfx
}
// namespace K
IGFX
#endif
/* COMPOSITOR_H_ */
include/gal/opengl/opengl_gal.h
View file @
0ac3e1fb
...
...
@@ -57,7 +57,7 @@
#define CALLBACK
#endif
namespace
K
iGfx
namespace
K
IGFX
{
class
SHADER
;
...
...
@@ -253,6 +253,7 @@ public:
{
/// Manager used for storing new vertices
VERTEX_MANAGER
*
vboManager
;
/// Intersect points, that have to be freed after tessellation
std
::
deque
<
boost
::
shared_array
<
GLdouble
>
>&
intersectPoints
;
}
TessParams
;
...
...
@@ -377,6 +378,6 @@ private:
*/
unsigned
int
getNewGroupNumber
();
};
}
// namespace K
iGfx
}
// namespace K
IGFX
#endif // OPENGLGAL_H_
#endif
// OPENGLGAL_H_
include/gal/opengl/shader.h
View file @
0ac3e1fb
...
...
@@ -34,14 +34,14 @@
#include <string>
#include <deque>
namespace
K
iGfx
namespace
K
IGFX
{
class
OPENGL_GAL
;
/// Type definition for the shader
enum
ShaderType
{
SHADER_TYPE_VERTEX
=
GL_VERTEX_SHADER
,
///< Vertex shader
SHADER_TYPE_VERTEX
=
GL_VERTEX_SHADER
,
///< Vertex shader
SHADER_TYPE_FRAGMENT
=
GL_FRAGMENT_SHADER
,
///< Fragment shader
SHADER_TYPE_GEOMETRY
=
GL_GEOMETRY_SHADER
///< Geometry shader
};
...
...
@@ -205,6 +205,6 @@ private:
GLuint
geomOutputType
;
///< Output type [e.g. GL_LINES, GL_TRIANGLES, GL_QUADS etc.]
std
::
deque
<
GLint
>
parameterLocation
;
///< Location of the parameter
};
}
// namespace K
iGfx
}
// namespace K
IGFX
#endif
/* SHADER_H_ */
include/gal/opengl/vertex_common.h
View file @
0ac3e1fb
...
...
@@ -32,10 +32,11 @@
#include <GL/glew.h>
namespace
K
iGfx
namespace
K
IGFX
{
// Possible types of shaders
enum
SHADER_TYPE
{
enum
SHADER_TYPE
{
SHADER_NONE
=
0
,
SHADER_LINE
,
SHADER_FILLED_CIRCLE
,
...
...
@@ -68,7 +69,6 @@ const unsigned int ShaderSize = sizeof(VERTEX().shader);
const
unsigned
int
ShaderStride
=
ShaderSize
/
sizeof
(
GLfloat
);
const
unsigned
int
IndexSize
=
sizeof
(
GLuint
);
}
// namespace KiGfx
}
// namespace KIGFX
#endif
/* VERTEX_COMMON_H_ */
include/gal/opengl/vertex_container.h
View file @
0ac3e1fb
...
...
@@ -32,7 +32,7 @@
#include <gal/opengl/vertex_common.h>
namespace
K
iGfx
namespace
K
IGFX
{
class
VERTEX_ITEM
;
class
SHADER
;
...
...
@@ -45,6 +45,7 @@ public:
* Returns a pointer to a new container of an appropriate type.
*/
static
VERTEX_CONTAINER
*
MakeContainer
(
bool
aCached
);
virtual
~
VERTEX_CONTAINER
();
/**
...
...
@@ -170,6 +171,6 @@ protected:
///< Default initial size of a container (expressed in vertices)
static
const
unsigned
int
defaultInitSize
=
1048576
;
};
}
// namespace K
iGfx
}
// namespace K
IGFX
#endif
/* VERTEX_CONTAINER_H_ */
include/gal/opengl/vertex_item.h
View file @
0ac3e1fb
...
...
@@ -34,7 +34,7 @@
#include <gal/color4d.h>
#include <cstddef>
namespace
K
iGfx
namespace
K
IGFX
{
class
VERTEX_MANAGER
;
...
...
@@ -98,6 +98,6 @@ private:
m_size
=
aSize
;
}
};
}
// namespace K
iGfx
}
// namespace K
IGFX
#endif
/* VERTEX_ITEM_H_ */
include/gal/opengl/vertex_manager.h
View file @
0ac3e1fb
...
...
@@ -40,7 +40,7 @@
#include <boost/smart_ptr/shared_ptr.hpp>
#include <wx/log.h>
namespace
K
iGfx
namespace
K
IGFX
{
class
SHADER
;
class
VERTEX_ITEM
;
...
...
@@ -342,6 +342,6 @@ protected:
GLfloat
m_shader
[
ShaderStride
];
};
}
// namespace K
iGfx
}
// namespace K
IGFX
#endif
/* VERTEX_MANAGER_H_ */
include/gal/stroke_font.h
View file @
0ac3e1fb
...
...
@@ -34,7 +34,7 @@
#include <math/box2.h>
namespace
K
iGfx
namespace
K
IGFX
{
class
GAL
;
...
...
@@ -184,6 +184,6 @@ private:
static
const
double
LINE_HEIGHT_RATIO
;
};
}
// namespace K
iGfx
}
// namespace K
IGFX
#endif
/* STROKE_FONT_H_ */
include/geometry/rtree.h
View file @
0ac3e1fb
...
...
@@ -42,9 +42,9 @@
// RTree.h
//
#define RTREE_TEMPLATE template<class DATATYPE, class ELEMTYPE, int NUMDIMS, \
#define RTREE_TEMPLATE template
<class DATATYPE, class ELEMTYPE, int NUMDIMS, \
class ELEMTYPEREAL, int TMAXNODES, int TMINNODES>
#define RTREE_SEARCH_TEMPLATE template<class DATATYPE, class ELEMTYPE, int NUMDIMS, \
#define RTREE_SEARCH_TEMPLATE template
<class DATATYPE, class ELEMTYPE, int NUMDIMS, \
class ELEMTYPEREAL, int TMAXNODES, int TMINNODES, class VISITOR>
#define RTREE_QUAL RTree<DATATYPE, ELEMTYPE, NUMDIMS, ELEMTYPEREAL, TMAXNODES, \
TMINNODES>
...
...
include/geometry/seg.h
View file @
0ac3e1fb
...
...
@@ -36,43 +36,42 @@ typedef boost::optional<VECTOR2I> OPT_VECTOR2I;
class
SEG
{
private
:
typedef
VECTOR2I
::
extended_type
ecoord
;
public
:
friend
inline
std
::
ostream
&
operator
<<
(
std
::
ostream
&
aStream
,
const
SEG
&
aSeg
);
/* Start and the of the segment. Public, to make access simpler. These are references
* to an object the segment belongs to (e.g. a line chain) or references to locally stored points
* (m_a, m_b).
*/
VECTOR2I
&
a
,
b
;
/** Default constructor
* Creates an empty (0, 0) segment, locally-referenced
*/
SEG
()
:
a
(
m_a
),
b
(
m_b
)
{
a
=
m_a
;
b
=
m_b
;
m_is_local
=
true
;
m_index
=
-
1
;
}
/**
* Constructor
* Creates a segment between (aX1, aY1) and (aX2, aY2), locally referenced
*/
SEG
(
int
aX1
,
int
aY1
,
int
aX2
,
int
aY2
)
:
a
(
m_a
),
b
(
m_b
)
{
m_a
=
VECTOR2I
(
aX1
,
aY1
);
m_b
=
VECTOR2I
(
aX2
,
aY2
);
a
=
m_a
;
b
=
m_b
;
m_is_local
=
true
;
m_index
=
-
1
;
}
private
:
typedef
VECTOR2I
::
extended_type
ecoord
;
public
:
friend
inline
std
::
ostream
&
operator
<<
(
std
::
ostream
&
aStream
,
const
SEG
&
aSeg
);
/* Start and the of the segment. Public, to make access simpler. These are references
* to an object the segment belongs to (e.g. a line chain) or references to locally stored points
* (m_a, m_b).
*/
VECTOR2I
&
a
,
b
;
/** Default constructor
* Creates an empty (0, 0) segment, locally-referenced
*/
SEG
()
:
a
(
m_a
),
b
(
m_b
)
{
a
=
m_a
;
b
=
m_b
;
m_is_local
=
true
;
m_index
=
-
1
;
}
/**
* Constructor
* Creates a segment between (aX1, aY1) and (aX2, aY2), locally referenced
*/
SEG
(
int
aX1
,
int
aY1
,
int
aX2
,
int
aY2
)
:
a
(
m_a
),
b
(
m_b
)
{
m_a
=
VECTOR2I
(
aX1
,
aY1
);
m_b
=
VECTOR2I
(
aX2
,
aY2
);
a
=
m_a
;
b
=
m_b
;
m_is_local
=
true
;
m_index
=
-
1
;
}
/**
* Constructor
...
...
include/geometry/shape.h
View file @
0ac3e1fb
...
...
@@ -35,11 +35,12 @@
* Lists all supported shapes
*/
enum
ShapeType
{
SH_RECT
=
0
,
///> axis-aligned rectangle
SH_SEGMENT
,
///> line segment
SH_LINE_CHAIN
,
///> line chain (polyline)
SH_CIRCLE
///> circle
enum
ShapeType
{
SH_RECT
=
0
,
///> axis-aligned rectangle
SH_SEGMENT
,
///> line segment
SH_LINE_CHAIN
,
///> line chain (polyline)
SH_CIRCLE
///> circle
};
/**
...
...
@@ -47,7 +48,8 @@ enum ShapeType {
*
* Represents an abstract shape on 2D plane.
*/
class
SHAPE
{
class
SHAPE
{
protected
:
typedef
VECTOR2I
::
extended_type
ecoord
;
...
...
@@ -77,7 +79,8 @@ class SHAPE {
* Returns a dynamically allocated copy of the shape
* @retval copy of the shape
*/
virtual
SHAPE
*
Clone
()
const
{
virtual
SHAPE
*
Clone
()
const
{
assert
(
false
);
return
NULL
;
};
...
...
@@ -106,6 +109,7 @@ class SHAPE {
*/
virtual
bool
Collide
(
const
SHAPE
*
aShape
,
int
aClerance
,
VECTOR2I
&
aMTV
)
const
;
virtual
bool
Collide
(
const
SHAPE
*
aShape
,
int
aClerance
=
0
)
const
;
/**
* Function Collide()
*
...
...
@@ -139,9 +143,8 @@ class SHAPE {
private
:
///> type of our shape
ShapeType
m_type
;
};
bool
CollideShapes
(
const
SHAPE
*
aA
,
const
SHAPE
*
aB
,
int
aClearance
,
bool
aNeedMTV
,
VECTOR2I
&
aMTV
);
bool
CollideShapes
(
const
SHAPE
*
aA
,
const
SHAPE
*
aB
,
int
aClearance
,
bool
aNeedMTV
,
VECTOR2I
&
aMTV
);
#endif // __SHAPE_H
include/geometry/shape_circle.h
View file @
0ac3e1fb
...
...
@@ -27,13 +27,13 @@
#include "shape.h"
class
SHAPE_CIRCLE
:
public
SHAPE
{
class
SHAPE_CIRCLE
:
public
SHAPE
{
public
:
SHAPE_CIRCLE
()
:
SHAPE_CIRCLE
()
:
SHAPE
(
SH_CIRCLE
),
m_radius
(
0
)
{};
SHAPE_CIRCLE
(
const
VECTOR2I
&
aCenter
,
int
aRadius
)
:
SHAPE_CIRCLE
(
const
VECTOR2I
&
aCenter
,
int
aRadius
)
:
SHAPE
(
SH_CIRCLE
),
m_radius
(
aRadius
),
m_center
(
aCenter
)
{};
~
SHAPE_CIRCLE
()
{};
...
...
@@ -41,12 +41,14 @@ public:
const
BOX2I
BBox
(
int
aClearance
=
0
)
const
{
const
VECTOR2I
rc
(
m_radius
+
aClearance
,
m_radius
+
aClearance
);
return
BOX2I
(
m_center
-
rc
,
rc
*
2
);
}
bool
Collide
(
const
SEG
&
aSeg
,
int
aClearance
=
0
)
const
{
int
rc
=
aClearance
+
m_radius
;
return
aSeg
.
Distance
(
m_center
)
<=
rc
;
}
...
...
@@ -69,6 +71,7 @@ public:
{
return
m_center
;
}
private
:
int
m_radius
;
VECTOR2I
m_center
;
...
...
include/geometry/shape_index.h
View file @
0ac3e1fb
...
...
@@ -46,10 +46,11 @@ static const SHAPE* shapeFunctor( T aItem )
return
aItem
->
GetShape
();
}
/**
* shapeFunctor template function: specialization for T = SHAPE*
*/
template
<>
template
<>
const
SHAPE
*
shapeFunctor
(
SHAPE
*
aItem
);
/**
...
...
@@ -67,6 +68,7 @@ BOX2I boundingBox( T aObject )
return
shapeFunctor
(
aObject
)
->
BBox
();
}
/**
* acceptVisitor template method
*
...
...
@@ -82,6 +84,7 @@ void acceptVisitor( T aObject, V aVisitor )
aVisitor
(
aObject
);
}
/**
* collide template method
*
...
...
@@ -93,22 +96,23 @@ void acceptVisitor( T aObject, V aVisitor )
* @param minDistance minimum collision distance
* @return if object and anotherObject collide
*/
template
<
class
T
,
class
U
>
template
<
class
T
,
class
U
>
bool
collide
(
T
aObject
,
U
aAnotherObject
,
int
aMinDistance
)
{
return
shapeFunctor
(
aObject
)
->
Collide
(
aAnotherObject
,
aMinDistance
);
}
template
<
class
T
,
class
V
>
template
<
class
T
,
class
V
>
bool
queryCallback
(
T
aShape
,
void
*
aContext
)
{
V
*
visitor
=
(
V
*
)
aContext
;
acceptVisitor
<
T
,
V
>
(
aShape
,
*
visitor
);
acceptVisitor
<
T
,
V
>
(
aShape
,
*
visitor
);
return
true
;
}
template
<
class
T
=
SHAPE
*>
template
<
class
T
=
SHAPE
*>
class
SHAPE_INDEX
{
public
:
...
...
@@ -242,7 +246,7 @@ class SHAPE_INDEX
* Accepts a visitor for every SHAPE object contained in this INDEX.
* @param visitor Visitor object to be run
*/
template
<
class
V
>
template
<
class
V
>
void
Accept
(
V
aVisitor
)
{
Iterator
iter
=
this
->
Begin
();
...
...
@@ -271,7 +275,7 @@ class SHAPE_INDEX
* @param minDistance distance threshold
* @param visitor object to be invoked on every object contained in the search area.
*/
template
<
class
V
>
template
<
class
V
>
int
Query
(
const
SHAPE
*
aShape
,
int
aMinDistance
,
V
&
aVisitor
,
bool
aExact
)
{
BOX2I
box
=
aShape
->
BBox
();
...
...
@@ -299,19 +303,19 @@ class SHAPE_INDEX
* Class members implementation
*/
template
<
class
T
>
template
<
class
T
>
SHAPE_INDEX
<
T
>::
SHAPE_INDEX
()
{
this
->
m_tree
=
new
RTree
<
T
,
int
,
2
,
float
>
();
}
template
<
class
T
>
template
<
class
T
>
SHAPE_INDEX
<
T
>::~
SHAPE_INDEX
()
{
delete
this
->
m_tree
;
}
template
<
class
T
>
template
<
class
T
>
void
SHAPE_INDEX
<
T
>::
Add
(
T
aShape
)
{
BOX2I
box
=
boundingBox
(
aShape
);
...
...
@@ -321,7 +325,7 @@ void SHAPE_INDEX<T>::Add( T aShape )
this
->
m_tree
->
Insert
(
min
,
max
,
aShape
);
}
template
<
class
T
>
template
<
class
T
>
void
SHAPE_INDEX
<
T
>::
Remove
(
T
aShape
)
{
BOX2I
box
=
boundingBox
(
aShape
);
...
...
@@ -331,19 +335,20 @@ void SHAPE_INDEX<T>::Remove( T aShape )
this
->
m_tree
->
Remove
(
min
,
max
,
aShape
);
}
template
<
class
T
>
template
<
class
T
>
void
SHAPE_INDEX
<
T
>::
RemoveAll
()
{
this
->
m_tree
->
RemoveAll
();
}
template
<
class
T
>
template
<
class
T
>
void
SHAPE_INDEX
<
T
>::
Reindex
()
{
RTree
<
T
,
int
,
2
,
float
>*
newTree
;
newTree
=
new
RTree
<
T
,
int
,
2
,
float
>
();
Iterator
iter
=
this
->
Begin
();
while
(
!
iter
.
IsNull
()
)
{
T
shape
=
*
iter
;
...
...
@@ -358,7 +363,7 @@ void SHAPE_INDEX<T>::Reindex()
this
->
m_tree
=
newTree
;
}
template
<
class
T
>
template
<
class
T
>
typename
SHAPE_INDEX
<
T
>::
Iterator
SHAPE_INDEX
<
T
>::
Begin
()
{
return
Iterator
(
this
);
...
...
include/geometry/shape_index_list.h
View file @
0ac3e1fb
...
...
@@ -27,16 +27,17 @@
#include <boost/unordered_map.hpp>
template
<
class
T
>
const
SHAPE
*
defaultShapeFunctor
(
const
T
aItem
)
template
<
class
T
>
const
SHAPE
*
defaultShapeFunctor
(
const
T
aItem
)
{
return
aItem
->
GetShape
();
}
template
<
class
T
,
const
SHAPE
*
(
ShapeFunctor
)(
const
T
)
=
defaultShapeFunctor
<
T
>
>
class
SHAPE_INDEX_LIST
{
struct
ShapeEntry
{
template
<
class
T
,
const
SHAPE
*
(
ShapeFunctor
)
(
const
T
)
=
defaultShapeFunctor
<
T
>
>
class
SHAPE_INDEX_LIST
{
struct
ShapeEntry
{
ShapeEntry
(
T
aParent
)
{
shape
=
ShapeFunctor
(
aParent
);
...
...
@@ -58,75 +59,77 @@ class SHAPE_INDEX_LIST {
public
:
// "Normal" iterator interface, for STL algorithms.
class
iterator
{
public
:
iterator
()
{};
class
iterator
{
public
:
iterator
()
{};
iterator
(
ShapeVecIter
aCurrent
)
:
m_current
(
aCurrent
)
{};
iterator
(
ShapeVecIter
aCurrent
)
:
m_current
(
aCurrent
)
{};
iterator
(
const
iterator
&
aB
)
:
m_current
(
aB
.
m_current
)
{};
iterator
(
const
iterator
&
aB
)
:
m_current
(
aB
.
m_current
)
{};
T
operator
*
()
const
{
return
(
*
m_current
).
parent
;
}
T
operator
*
()
const
{
return
(
*
m_current
).
parent
;
}
void
operator
++
()
{
++
m_current
;
}
void
operator
++
()
{
++
m_current
;
}
iterator
&
operator
++
(
int
aDummy
)
{
++
m_current
;
return
*
this
;
}
iterator
&
operator
++
(
int
aDummy
)
{
++
m_current
;
return
*
this
;
}
bool
operator
==
(
const
iterator
&
aRhs
)
const
{
return
m_current
==
aRhs
.
m_current
;
}
bool
operator
==
(
const
iterator
&
aRhs
)
const
{
return
m_current
==
aRhs
.
m_current
;
}
bool
operator
!=
(
const
iterator
&
aRhs
)
const
{
return
m_current
!=
aRhs
.
m_current
;
}
bool
operator
!=
(
const
iterator
&
aRhs
)
const
{
return
m_current
!=
aRhs
.
m_current
;
}
const
iterator
&
operator
=
(
const
iterator
&
aRhs
)
{
m_current
=
aRhs
.
m_current
;
return
*
this
;
}
const
iterator
&
operator
=
(
const
iterator
&
aRhs
)
{
m_current
=
aRhs
.
m_current
;
return
*
this
;
}
private
:
ShapeVecIter
m_current
;
private
:
ShapeVecIter
m_current
;
};
// "Query" iterator, for iterating over a set of spatially matching shapes.
class
query_iterator
{
public
:
query_iterator
()
{
}
class
query_iterator
{
public
:
query_iterator
()
{
}
query_iterator
(
ShapeVecIter
aCurrent
,
ShapeVecIter
aEnd
,
SHAPE
*
aShape
,
int
aMinDistance
,
bool
aExact
)
:
m_end
(
aEnd
),
m_current
(
aCurrent
),
m_shape
(
aShape
),
m_minDistance
(
aMinDistance
),
m_exact
(
aExact
)
{
if
(
aShape
)
{
query_iterator
(
ShapeVecIter
aCurrent
,
ShapeVecIter
aEnd
,
SHAPE
*
aShape
,
int
aMinDistance
,
bool
aExact
)
:
m_end
(
aEnd
),
m_current
(
aCurrent
),
m_shape
(
aShape
),
m_minDistance
(
aMinDistance
),
m_exact
(
aExact
)
{
if
(
aShape
)
{
m_refBBox
=
aShape
->
BBox
();
next
();
}
}
query_iterator
(
const
query_iterator
&
aB
)
:
query_iterator
(
const
query_iterator
&
aB
)
:
m_end
(
aB
.
m_end
),
m_current
(
aB
.
m_current
),
m_shape
(
aB
.
m_shape
),
...
...
@@ -191,19 +194,19 @@ public:
}
}
ShapeVecIter
m_end
;
ShapeVecIter
m_current
;
BOX2I
m_refBBox
;
bool
m_exact
;
SHAPE
*
m_shape
;
int
m_minDistance
;
ShapeVecIter
m_end
;
ShapeVecIter
m_current
;
BOX2I
m_refBBox
;
bool
m_exact
;
SHAPE
*
m_shape
;
int
m_minDistance
;
};
void
Add
(
T
aItem
)
{
ShapeEntry
s
(
aItem
);
m_shapes
.
push_back
(
s
);
m_shapes
.
push_back
(
s
);
}
void
Remove
(
const
T
aItem
)
...
...
@@ -227,8 +230,8 @@ public:
return
m_shapes
.
size
();
}
template
<
class
Visitor
>
int
Query
(
const
SHAPE
*
aShape
,
int
aMinDistance
,
Visitor
&
aV
,
bool
aExact
=
true
)
//
const
template
<
class
Visitor
>
int
Query
(
const
SHAPE
*
aShape
,
int
aMinDistance
,
Visitor
&
aV
,
bool
aExact
=
true
)
//
const
{
ShapeVecIter
i
;
int
n
=
0
;
...
...
@@ -243,11 +246,13 @@ public:
if
(
!
aExact
||
i
->
shape
->
Collide
(
aShape
,
aMinDistance
)
)
{
n
++
;
if
(
!
aV
(
i
->
parent
)
)
return
n
;
}
}
}
return
n
;
}
...
...
@@ -263,7 +268,7 @@ public:
const
query_iterator
qend
()
{
return
query_iterator
(
m_shapes
.
end
(),
m_shapes
.
end
(),
NULL
,
0
,
false
);
return
query_iterator
(
m_shapes
.
end
(),
m_shapes
.
end
(),
NULL
,
0
,
false
);
}
iterator
begin
()
...
...
include/geometry/shape_rect.h
View file @
0ac3e1fb
...
...
@@ -30,7 +30,8 @@
#include <geometry/shape_circle.h>
#include <geometry/seg.h>
class
SHAPE_RECT
:
public
SHAPE
{
class
SHAPE_RECT
:
public
SHAPE
{
public
:
/**
* Constructor
...
...
@@ -50,11 +51,11 @@ class SHAPE_RECT : public SHAPE {
* Constructor
* Creates a rectangle defined by top-left corner aP0, width aW and height aH.
*/
SHAPE_RECT
(
const
VECTOR2I
&
aP0
,
int
aW
,
int
aH
)
:
SHAPE_RECT
(
const
VECTOR2I
&
aP0
,
int
aW
,
int
aH
)
:
SHAPE
(
SH_RECT
),
m_p0
(
aP0
),
m_w
(
aW
),
m_h
(
aH
)
{};
/// @copydoc SHAPE::BBox()
const
BOX2I
BBox
(
int
aClearance
=
0
)
const
const
BOX2I
BBox
(
int
aClearance
=
0
)
const
{
BOX2I
bbox
(
VECTOR2I
(
m_p0
.
x
-
aClearance
,
m_p0
.
y
-
aClearance
),
VECTOR2I
(
m_w
+
2
*
aClearance
,
m_h
+
2
*
aClearance
)
);
...
...
@@ -76,17 +77,17 @@ class SHAPE_RECT : public SHAPE {
/// @copydoc SHAPE::Collide()
bool
Collide
(
const
SEG
&
aSeg
,
int
aClearance
=
0
)
const
{
//VECTOR2I pmin = VECTOR2I(
std::min(aSeg.a.x, aSeg.b.x), std::min(aSeg.a.y, aSeg.b.y)
);
//VECTOR2I pmax = VECTOR2I(
std::max(aSeg.a.x, aSeg.b.x), std::max(aSeg.a.y, aSeg.b.y
));
//BOX2I r(
pmin, VECTOR2I(pmax.x - pmin.x, pmax.y - pmin.y)
);
//VECTOR2I pmin = VECTOR2I(
std::min( aSeg.a.x, aSeg.b.x ), std::min( aSeg.a.y, aSeg.b.y )
);
//VECTOR2I pmax = VECTOR2I(
std::max( aSeg.a.x, aSeg.b.x ), std::max( aSeg.a.y, aSeg.b.y
));
//BOX2I r(
pmin, VECTOR2I( pmax.x - pmin.x, pmax.y - pmin.y )
);
//if
(BBox(0).SquaredDistance(r) > aClearance * aClearance
)
//if
( BBox( 0 ).SquaredDistance( r ) > aClearance * aClearance
)
// return false;
if
(
BBox
(
0
).
Contains
(
aSeg
.
a
)
||
BBox
(
0
).
Contains
(
aSeg
.
b
)
)
return
true
;
VECTOR2I
vts
[]
=
{
VECTOR2I
(
m_p0
.
x
,
m_p0
.
y
),
VECTOR2I
vts
[]
=
{
VECTOR2I
(
m_p0
.
x
,
m_p0
.
y
),
VECTOR2I
(
m_p0
.
x
,
m_p0
.
y
+
m_h
),
VECTOR2I
(
m_p0
.
x
+
m_w
,
m_p0
.
y
+
m_h
),
VECTOR2I
(
m_p0
.
x
+
m_w
,
m_p0
.
y
),
...
...
@@ -107,28 +108,40 @@ class SHAPE_RECT : public SHAPE {
*
* @return top-left corner of the rectangle
*/
const
VECTOR2I
&
GetPosition
()
const
{
return
m_p0
;
}
const
VECTOR2I
&
GetPosition
()
const
{
return
m_p0
;
}
/**
* Function GetSize()
*
* @return size of the rectangle
*/
const
VECTOR2I
GetSize
()
const
{
return
VECTOR2I
(
m_w
,
m_h
);
}
const
VECTOR2I
GetSize
()
const
{
return
VECTOR2I
(
m_w
,
m_h
);
}
/**
* Function GetWidth()
*
* @return width of the rectangle
*/
const
int
GetWidth
()
const
{
return
m_w
;
}
const
int
GetWidth
()
const
{
return
m_w
;
}
/**
* Function GetHeight()
*
* @return height of the rectangle
*/
const
int
GetHeight
()
const
{
return
m_h
;
}
const
int
GetHeight
()
const
{
return
m_h
;
}
private
:
///> Top-left corner
...
...
include/length.h.usuned
View file @
0ac3e1fb
...
...
@@ -67,7 +67,7 @@ template < typename T > struct LENGTH_TRAITS< T, 0 >
typedef T flat;
};
template< typename T, int P > class LENGTH
template
< typename T, int P > class LENGTH
{
friend class LENGTH_UNITS< T >;
friend class LENGTH_TRAITS< T, P >;
...
...
@@ -109,7 +109,7 @@ public:
this->m_U = y.m_U;
return *this;
}
template<typename Y> operator LENGTH< Y, P > ( void )
template
<typename Y> operator LENGTH< Y, P > ( void )
{
return this->m_U;
}
...
...
include/macros.h
View file @
0ac3e1fb
...
...
@@ -58,7 +58,7 @@ static inline const wxChar* GetChars( const wxString& s )
}
// This really needs a function? well, it is used *a lot* of times
template
<
class
T
>
inline
void
NEGATE
(
T
&
x
)
{
x
=
-
x
;
}
template
<
class
T
>
inline
void
NEGATE
(
T
&
x
)
{
x
=
-
x
;
}
/// # of elements in an array
#define DIM( x ) unsigned( sizeof(x) / sizeof( (x)[0] ) ) // not size_t
...
...
@@ -67,7 +67,7 @@ template<class T> inline void NEGATE( T &x ) { x = -x; }
// std::swap works only with arguments of the same type (which is saner);
// here the compiler will figure out what to do (I hope to get rid of
// this soon or late)
template
<
class
T
,
class
T2
>
inline
void
EXCHG
(
T
&
a
,
T2
&
b
)
template
<
class
T
,
class
T2
>
inline
void
EXCHG
(
T
&
a
,
T2
&
b
)
{
T
temp
=
a
;
a
=
b
;
...
...
include/math/box2.h
View file @
0ac3e1fb
...
...
@@ -39,7 +39,8 @@ template <>
class
BOX2_TRAITS
<
VECTOR2I
>
{
public
:
enum
{
enum
{
c_max_size
=
INT_MAX
-
1
,
c_min_coord_value
=
INT_MIN
/
2
+
1
};
...
...
@@ -61,7 +62,7 @@ public:
typedef
typename
Vec
::
coord_type
coord_type
;
typedef
typename
Vec
::
extended_type
ecoord_type
;
BOX2
()
{
};
BOX2
()
{};
BOX2
(
const
Vec
&
aPos
,
const
Vec
&
aSize
)
:
m_Pos
(
aPos
),
...
...
@@ -91,6 +92,7 @@ public:
void
Compute
(
const
Container
&
aPointList
)
{
Vec
vmin
,
vmax
;
typename
Container
::
const_iterator
i
;
if
(
!
aPointList
.
size
()
)
...
...
@@ -164,7 +166,7 @@ public:
rel_pos
.
y
+=
size
.
y
;
}
return
(
rel_pos
.
x
>=
0
)
&&
(
rel_pos
.
y
>=
0
)
&&
(
rel_pos
.
y
<=
size
.
y
)
&&
(
rel_pos
.
x
<=
size
.
x
);
return
(
rel_pos
.
x
>=
0
)
&&
(
rel_pos
.
y
>=
0
)
&&
(
rel_pos
.
y
<=
size
.
y
)
&&
(
rel_pos
.
x
<=
size
.
x
);
}
/**
...
...
@@ -418,8 +420,8 @@ public:
{
ecoord_type
x2
=
m_Pos
.
x
+
m_Size
.
x
;
ecoord_type
y2
=
m_Pos
.
y
+
m_Size
.
y
;
ecoord_type
xdiff
=
std
::
max
(
aP
.
x
<
m_Pos
.
x
?
m_Pos
.
x
-
aP
.
x
:
m_Pos
.
x
-
x2
,
(
ecoord_type
)
0
);
ecoord_type
ydiff
=
std
::
max
(
aP
.
y
<
m_Pos
.
y
?
m_Pos
.
y
-
aP
.
y
:
m_Pos
.
y
-
y2
,
(
ecoord_type
)
0
);
ecoord_type
xdiff
=
std
::
max
(
aP
.
x
<
m_Pos
.
x
?
m_Pos
.
x
-
aP
.
x
:
m_Pos
.
x
-
x2
,
(
ecoord_type
)
0
);
ecoord_type
ydiff
=
std
::
max
(
aP
.
y
<
m_Pos
.
y
?
m_Pos
.
y
-
aP
.
y
:
m_Pos
.
y
-
y2
,
(
ecoord_type
)
0
);
return
xdiff
*
xdiff
+
ydiff
*
ydiff
;
}
...
...
include/math/math_util.h
View file @
0ac3e1fb
...
...
@@ -34,14 +34,18 @@
* Scales a number (value) by rational (numerator/denominator). Numerator must be <= denominator.
*/
template
<
typename
T
>
T
rescale
(
T
numerator
,
T
value
,
T
denominator
)
template
<
typename
T
>
T
rescale
(
T
numerator
,
T
value
,
T
denominator
)
{
return
numerator
*
value
/
denominator
;
}
// explicit specializations for integer types, taking care of overflow.
template
<>
int
rescale
(
int
numerator
,
int
value
,
int
denominator
);
template
<>
int64_t
rescale
(
int64_t
numerator
,
int64_t
value
,
int64_t
denominator
);
template
<>
int
rescale
(
int
numerator
,
int
value
,
int
denominator
);
template
<>
int64_t
rescale
(
int64_t
numerator
,
int64_t
value
,
int64_t
denominator
);
#endif // __MATH_UTIL_H
include/math/matrix3x3.h
View file @
0ac3e1fb
...
...
@@ -51,8 +51,11 @@
*/
// Forward declaration for template friends
template
<
class
T
>
class
MATRIX3x3
;
template
<
class
T
>
std
::
ostream
&
operator
<<
(
std
::
ostream
&
stream
,
const
MATRIX3x3
<
T
>&
matrix
);
template
<
class
T
>
class
MATRIX3x3
;
template
<
class
T
>
std
::
ostream
&
operator
<<
(
std
::
ostream
&
stream
,
const
MATRIX3x3
<
T
>&
matrix
);
template
<
class
T
>
class
MATRIX3x3
...
...
@@ -164,20 +167,21 @@ public:
// Operators
//! @brief Matrix multiplication
template
<
class
T
>
MATRIX3x3
<
T
>
const
operator
*
(
MATRIX3x3
<
T
>
const
&
a
,
MATRIX3x3
<
T
>
const
&
b
);
template
<
class
T
>
MATRIX3x3
<
T
>
const
operator
*
(
MATRIX3x3
<
T
>
const
&
a
,
MATRIX3x3
<
T
>
const
&
b
);
//! @brief Multiplication with a 2D vector, the 3rd z-component is assumed to be 1
template
<
class
T
>
VECTOR2
<
T
>
const
operator
*
(
MATRIX3x3
<
T
>
const
&
a
,
VECTOR2
<
T
>
const
&
b
);
template
<
class
T
>
VECTOR2
<
T
>
const
operator
*
(
MATRIX3x3
<
T
>
const
&
a
,
VECTOR2
<
T
>
const
&
b
);
//! @brief Multiplication with a scalar
template
<
class
T
,
class
S
>
MATRIX3x3
<
T
>
const
operator
*
(
MATRIX3x3
<
T
>
const
&
a
,
T
scalar
);
template
<
class
T
,
class
S
>
MATRIX3x3
<
T
>
const
operator
*
(
T
scalar
,
MATRIX3x3
<
T
>
const
&
matrix
);
template
<
class
T
,
class
S
>
MATRIX3x3
<
T
>
const
operator
*
(
MATRIX3x3
<
T
>
const
&
a
,
T
scalar
);
template
<
class
T
,
class
S
>
MATRIX3x3
<
T
>
const
operator
*
(
T
scalar
,
MATRIX3x3
<
T
>
const
&
matrix
);
// ----------------------
// --- Implementation ---
// ----------------------
template
<
class
T
>
MATRIX3x3
<
T
>::
MATRIX3x3
()
template
<
class
T
>
MATRIX3x3
<
T
>::
MATRIX3x3
()
{
for
(
int
j
=
0
;
j
<
3
;
j
++
)
{
...
...
@@ -189,8 +193,8 @@ template<class T> MATRIX3x3<T>::MATRIX3x3()
}
template
<
class
T
>
MATRIX3x3
<
T
>::
MATRIX3x3
(
T
a00
,
T
a01
,
T
a02
,
T
a10
,
T
a11
,
T
a12
,
T
a20
,
T
a21
,
T
a22
)
template
<
class
T
>
MATRIX3x3
<
T
>::
MATRIX3x3
(
T
a00
,
T
a01
,
T
a02
,
T
a10
,
T
a11
,
T
a12
,
T
a20
,
T
a21
,
T
a22
)
{
m_data
[
0
][
0
]
=
a00
;
m_data
[
0
][
1
]
=
a01
;
...
...
@@ -206,7 +210,8 @@ template<class T> MATRIX3x3<T>::MATRIX3x3( T a00, T a01, T a02, T a10, T a11, T
}
template
<
class
T
>
void
MATRIX3x3
<
T
>::
SetIdentity
(
void
)
template
<
class
T
>
void
MATRIX3x3
<
T
>::
SetIdentity
(
void
)
{
for
(
int
j
=
0
;
j
<
3
;
j
++
)
{
...
...
@@ -221,14 +226,16 @@ template<class T> void MATRIX3x3<T>::SetIdentity( void )
}
template
<
class
T
>
void
MATRIX3x3
<
T
>::
SetTranslation
(
VECTOR2
<
T
>
aTranslation
)
template
<
class
T
>
void
MATRIX3x3
<
T
>::
SetTranslation
(
VECTOR2
<
T
>
aTranslation
)
{
m_data
[
0
][
2
]
=
aTranslation
.
x
;
m_data
[
1
][
2
]
=
aTranslation
.
y
;
}
template
<
class
T
>
VECTOR2
<
T
>
MATRIX3x3
<
T
>::
GetTranslation
(
void
)
const
template
<
class
T
>
VECTOR2
<
T
>
MATRIX3x3
<
T
>::
GetTranslation
(
void
)
const
{
VECTOR2
<
T
>
result
;
result
.
x
=
m_data
[
0
][
2
];
...
...
@@ -237,7 +244,8 @@ template<class T> VECTOR2<T> MATRIX3x3<T>::GetTranslation( void ) const
}
template
<
class
T
>
void
MATRIX3x3
<
T
>::
SetRotation
(
T
aAngle
)
template
<
class
T
>
void
MATRIX3x3
<
T
>::
SetRotation
(
T
aAngle
)
{
T
cosValue
=
cos
(
aAngle
);
T
sinValue
=
sin
(
aAngle
);
...
...
@@ -248,21 +256,24 @@ template<class T> void MATRIX3x3<T>::SetRotation( T aAngle )
}
template
<
class
T
>
void
MATRIX3x3
<
T
>::
SetScale
(
VECTOR2
<
T
>
aScale
)
template
<
class
T
>
void
MATRIX3x3
<
T
>::
SetScale
(
VECTOR2
<
T
>
aScale
)
{
m_data
[
0
][
0
]
=
aScale
.
x
;
m_data
[
1
][
1
]
=
aScale
.
y
;
}
template
<
class
T
>
VECTOR2
<
T
>
MATRIX3x3
<
T
>::
GetScale
(
void
)
const
template
<
class
T
>
VECTOR2
<
T
>
MATRIX3x3
<
T
>::
GetScale
(
void
)
const
{
VECTOR2
<
T
>
result
(
m_data
[
0
][
0
],
m_data
[
1
][
1
]
);
return
result
;
}
template
<
class
T
>
MATRIX3x3
<
T
>
const
operator
*
(
MATRIX3x3
<
T
>
const
&
a
,
MATRIX3x3
<
T
>
const
&
b
)
template
<
class
T
>
MATRIX3x3
<
T
>
const
operator
*
(
MATRIX3x3
<
T
>
const
&
a
,
MATRIX3x3
<
T
>
const
&
b
)
{
MATRIX3x3
<
T
>
result
;
...
...
@@ -279,8 +290,9 @@ template<class T> MATRIX3x3<T> const operator*( MATRIX3x3<T> const& a, MATRIX3x3
}
template
<
class
T
>
VECTOR2
<
T
>
const
operator
*
(
MATRIX3x3
<
T
>
const
&
matrix
,
VECTOR2
<
T
>
const
&
vector
)
template
<
class
T
>
VECTOR2
<
T
>
const
operator
*
(
MATRIX3x3
<
T
>
const
&
matrix
,
VECTOR2
<
T
>
const
&
vector
)
{
VECTOR2
<
T
>
result
(
0
,
0
);
result
.
x
=
matrix
.
m_data
[
0
][
0
]
*
vector
.
x
+
matrix
.
m_data
[
0
][
1
]
*
vector
.
y
...
...
@@ -292,7 +304,8 @@ template<class T> VECTOR2<T> const operator*( MATRIX3x3<T> const& matrix,
}
template
<
class
T
>
T
MATRIX3x3
<
T
>::
Determinant
(
void
)
const
template
<
class
T
>
T
MATRIX3x3
<
T
>::
Determinant
(
void
)
const
{
return
m_data
[
0
][
0
]
*
(
m_data
[
1
][
1
]
*
m_data
[
2
][
2
]
-
m_data
[
1
][
2
]
*
m_data
[
2
][
1
]
)
-
m_data
[
0
][
1
]
*
(
m_data
[
1
][
0
]
*
m_data
[
2
][
2
]
-
m_data
[
1
][
2
]
*
m_data
[
2
][
0
]
)
...
...
@@ -300,7 +313,8 @@ template<class T> T MATRIX3x3<T>::Determinant( void ) const
}
template
<
class
T
,
class
S
>
MATRIX3x3
<
T
>
const
operator
*
(
MATRIX3x3
<
T
>
const
&
matrix
,
S
scalar
)
template
<
class
T
,
class
S
>
MATRIX3x3
<
T
>
const
operator
*
(
MATRIX3x3
<
T
>
const
&
matrix
,
S
scalar
)
{
MATRIX3x3
<
T
>
result
;
...
...
@@ -316,13 +330,15 @@ template<class T, class S> MATRIX3x3<T> const operator*( MATRIX3x3<T> const& mat
}
template
<
class
T
,
class
S
>
MATRIX3x3
<
T
>
const
operator
*
(
S
scalar
,
MATRIX3x3
<
T
>
const
&
matrix
)
template
<
class
T
,
class
S
>
MATRIX3x3
<
T
>
const
operator
*
(
S
scalar
,
MATRIX3x3
<
T
>
const
&
matrix
)
{
return
matrix
*
scalar
;
}
template
<
class
T
>
MATRIX3x3
<
T
>
MATRIX3x3
<
T
>::
Inverse
(
void
)
const
template
<
class
T
>
MATRIX3x3
<
T
>
MATRIX3x3
<
T
>::
Inverse
()
const
{
MATRIX3x3
<
T
>
result
;
...
...
@@ -342,7 +358,8 @@ template<class T> MATRIX3x3<T> MATRIX3x3<T>::Inverse( void ) const
}
template
<
class
T
>
MATRIX3x3
<
T
>
MATRIX3x3
<
T
>::
Transpose
(
void
)
const
template
<
class
T
>
MATRIX3x3
<
T
>
MATRIX3x3
<
T
>::
Transpose
()
const
{
MATRIX3x3
<
T
>
result
;
...
...
@@ -358,7 +375,8 @@ template<class T> MATRIX3x3<T> MATRIX3x3<T>::Transpose( void ) const
}
template
<
class
T
>
std
::
ostream
&
operator
<<
(
std
::
ostream
&
aStream
,
const
MATRIX3x3
<
T
>&
aMatrix
)
template
<
class
T
>
std
::
ostream
&
operator
<<
(
std
::
ostream
&
aStream
,
const
MATRIX3x3
<
T
>&
aMatrix
)
{
for
(
int
i
=
0
;
i
<
3
;
i
++
)
{
...
...
@@ -377,6 +395,7 @@ template<class T> std::ostream& operator<<( std::ostream& aStream, const MATRIX3
return
aStream
;
}
/* Default specializations */
typedef
MATRIX3x3
<
double
>
MATRIX3x3D
;
...
...
include/math/vector2d.h
View file @
0ac3e1fb
...
...
@@ -102,8 +102,8 @@ public:
template
<
typename
CastingType
>
VECTOR2
(
const
VECTOR2
<
CastingType
>&
aVec
)
{
x
=
(
T
)
aVec
.
x
;
y
=
(
T
)
aVec
.
y
;
x
=
(
T
)
aVec
.
x
;
y
=
(
T
)
aVec
.
y
;
}
/// Casts a vector to another specialized subclass. Beware of rouding
...
...
@@ -131,7 +131,7 @@ public:
* It is used to calculate the length of the vector.
* @return Scalar, the euclidean norm
*/
extended_type
SquaredEuclideanNorm
()
const
;
extended_type
SquaredEuclideanNorm
()
const
;
/**
...
...
@@ -258,24 +258,24 @@ VECTOR2<T>::VECTOR2()
template
<
class
T
>
VECTOR2
<
T
>::
VECTOR2
(
wxPoint
const
&
aPoint
)
{
x
=
T
(
aPoint
.
x
);
y
=
T
(
aPoint
.
y
);
x
=
T
(
aPoint
.
x
);
y
=
T
(
aPoint
.
y
);
}
template
<
class
T
>
VECTOR2
<
T
>::
VECTOR2
(
wxSize
const
&
aSize
)
{
x
=
T
(
aSize
.
x
);
y
=
T
(
aSize
.
y
);
x
=
T
(
aSize
.
x
);
y
=
T
(
aSize
.
y
);
}
#endif
template
<
class
T
>
VECTOR2
<
T
>::
VECTOR2
(
T
aX
,
T
aY
)
{
x
=
aX
;
y
=
aY
;
x
=
aX
;
y
=
aY
;
}
...
...
@@ -285,14 +285,14 @@ T VECTOR2<T>::EuclideanNorm() const
return
sqrt
(
(
extended_type
)
x
*
x
+
(
extended_type
)
y
*
y
);
}
template
<
class
T
>
typename
VECTOR2
<
T
>::
extended_type
VECTOR2
<
T
>::
SquaredEuclideanNorm
()
const
{
return
(
extended_type
)
x
*
x
+
(
extended_type
)
y
*
y
;
return
(
extended_type
)
x
*
x
+
(
extended_type
)
y
*
y
;
}
template
<
class
T
>
double
VECTOR2
<
T
>::
Angle
()
const
{
...
...
@@ -311,8 +311,8 @@ VECTOR2<T> VECTOR2<T>::Perpendicular() const
template
<
class
T
>
VECTOR2
<
T
>&
VECTOR2
<
T
>::
operator
=
(
const
VECTOR2
<
T
>&
aVector
)
{
x
=
aVector
.
x
;
y
=
aVector
.
y
;
x
=
aVector
.
x
;
y
=
aVector
.
y
;
return
*
this
;
}
...
...
@@ -320,8 +320,8 @@ VECTOR2<T>& VECTOR2<T>::operator=( const VECTOR2<T>& aVector )
template
<
class
T
>
VECTOR2
<
T
>&
VECTOR2
<
T
>::
operator
+=
(
const
VECTOR2
<
T
>&
aVector
)
{
x
+=
aVector
.
x
;
y
+=
aVector
.
y
;
x
+=
aVector
.
x
;
y
+=
aVector
.
y
;
return
*
this
;
}
...
...
@@ -329,8 +329,8 @@ VECTOR2<T>& VECTOR2<T>::operator+=( const VECTOR2<T>& aVector )
template
<
class
T
>
VECTOR2
<
T
>&
VECTOR2
<
T
>::
operator
+=
(
const
T
&
aScalar
)
{
x
+=
aScalar
;
y
+=
aScalar
;
x
+=
aScalar
;
y
+=
aScalar
;
return
*
this
;
}
...
...
@@ -338,8 +338,8 @@ VECTOR2<T>& VECTOR2<T>::operator+=( const T& aScalar )
template
<
class
T
>
VECTOR2
<
T
>&
VECTOR2
<
T
>::
operator
-=
(
const
VECTOR2
<
T
>&
aVector
)
{
x
-=
aVector
.
x
;
y
-=
aVector
.
y
;
x
-=
aVector
.
x
;
y
-=
aVector
.
y
;
return
*
this
;
}
...
...
@@ -347,8 +347,8 @@ VECTOR2<T>& VECTOR2<T>::operator-=( const VECTOR2<T>& aVector )
template
<
class
T
>
VECTOR2
<
T
>&
VECTOR2
<
T
>::
operator
-=
(
const
T
&
aScalar
)
{
x
-=
aScalar
;
y
-=
aScalar
;
x
-=
aScalar
;
y
-=
aScalar
;
return
*
this
;
}
template
<
class
T
>
...
...
@@ -365,15 +365,15 @@ VECTOR2<T> VECTOR2<T>::Rotate( double aAngle ) const
template
<
class
T
>
VECTOR2
<
T
>
VECTOR2
<
T
>::
Resize
(
T
aNewLength
)
const
{
if
(
x
==
0
&&
y
==
0
)
return
VECTOR2
<
T
>
(
0
,
0
);
if
(
x
==
0
&&
y
==
0
)
return
VECTOR2
<
T
>
(
0
,
0
);
extended_type
l_sq_current
=
(
extended_type
)
this
->
x
*
this
->
x
+
(
extended_type
)
this
->
y
*
this
->
y
;
extended_type
l_sq_new
=
(
extended_type
)
aNewLength
*
aNewLength
;
extended_type
l_sq_current
=
(
extended_type
)
x
*
x
+
(
extended_type
)
y
*
y
;
extended_type
l_sq_new
=
(
extended_type
)
aNewLength
*
aNewLength
;
return
VECTOR2
<
T
>
(
(
this
->
x
<
0
?
-
1
:
1
)
*
sqrt
(
rescale
(
l_sq_new
,
(
extended_type
)
x
*
x
,
l_sq_current
)
),
(
this
->
y
<
0
?
-
1
:
1
)
*
sqrt
(
rescale
(
l_sq_new
,
(
extended_type
)
y
*
y
,
l_sq_current
))
);
return
VECTOR2
<
T
>
(
(
x
<
0
?
-
1
:
1
)
*
sqrt
(
rescale
(
l_sq_new
,
(
extended_type
)
x
*
x
,
l_sq_current
)
),
(
y
<
0
?
-
1
:
1
)
*
sqrt
(
rescale
(
l_sq_new
,
(
extended_type
)
y
*
y
,
l_sq_current
)
)
);
}
...
...
include/painter.h
View file @
0ac3e1fb
...
...
@@ -38,7 +38,7 @@
class
EDA_ITEM
;
class
COLORS_DESIGN_SETTINGS
;
namespace
K
iGfx
namespace
K
IGFX
{
class
GAL
;
class
VIEW_ITEM
;
...
...
@@ -265,6 +265,6 @@ protected:
/// Color of brightened item frame
COLOR4D
m_brightenedColor
;
};
}
// namespace K
iGfx
}
// namespace K
IGFX
#endif
/* __CLASS_PAINTER_H */
include/rtree.h
View file @
0ac3e1fb
...
...
@@ -36,9 +36,9 @@
// RTree.h
//
#define RTREE_TEMPLATE template<class DATATYPE, class ELEMTYPE, int NUMDIMS, \
#define RTREE_TEMPLATE template
<class DATATYPE, class ELEMTYPE, int NUMDIMS, \
class ELEMTYPEREAL, int TMAXNODES, int TMINNODES>
#define RTREE_SEARCH_TEMPLATE template<class DATATYPE, class ELEMTYPE, int NUMDIMS, \
#define RTREE_SEARCH_TEMPLATE template
<class DATATYPE, class ELEMTYPE, int NUMDIMS, \
class ELEMTYPEREAL, int TMAXNODES, int TMINNODES, class VISITOR>
#define RTREE_QUAL RTree<DATATYPE, ELEMTYPE, NUMDIMS, ELEMTYPEREAL, TMAXNODES, \
TMINNODES>
...
...
include/tool/action_manager.h
View file @
0ac3e1fb
...
...
@@ -76,8 +76,8 @@ public:
bool
RunAction
(
const
std
::
string
&
aActionName
)
const
;
// TODO to be considered
//bool RunAction( int aActionId ) const;
//bool RunAction( TOOL_ACTION* aAction ) const;
//
bool RunAction( int aActionId ) const;
//
bool RunAction( TOOL_ACTION* aAction ) const;
/**
* Function RunHotKey()
...
...
include/tool/coroutine.h
View file @
0ac3e1fb
...
...
@@ -32,27 +32,27 @@
#include "delegate.h"
/**
Class COROUNTINE.
Implements a coroutine. Wikipedia has a good explanation:
"Coroutines are computer program components that generalize subroutines to
allow multiple entry points for suspending and resuming execution at certain locations.
Coroutines are well-suited for implementing more familiar program components such as cooperative
tasks, exceptions, event loop, iterators, infinite lists and pipes."
In other words, a coroutine can be considered a lightweight thread - which can be
preempted only when it deliberately yields the control to the caller. This way,
we avoid concurrency problems such as locking / race conditions.
Uses boost::context library to do the actual context switching.
This particular version takes a DELEGATE as an entry point, so it can invoke
methods within a given object as separate coroutines.
See coroutine_example.cpp for sample code.
*
Class COROUNTINE.
*
Implements a coroutine. Wikipedia has a good explanation:
*
*
"Coroutines are computer program components that generalize subroutines to
*
allow multiple entry points for suspending and resuming execution at certain locations.
*
Coroutines are well-suited for implementing more familiar program components such as cooperative
*
tasks, exceptions, event loop, iterators, infinite lists and pipes."
*
*
In other words, a coroutine can be considered a lightweight thread - which can be
*
preempted only when it deliberately yields the control to the caller. This way,
*
we avoid concurrency problems such as locking / race conditions.
*
*
Uses boost::context library to do the actual context switching.
*
*
This particular version takes a DELEGATE as an entry point, so it can invoke
*
methods within a given object as separate coroutines.
*
*
See coroutine_example.cpp for sample code.
*/
template
<
class
ReturnType
,
class
ArgType
>
template
<
class
ReturnType
,
class
ArgType
>
class
COROUTINE
{
public
:
...
...
@@ -67,8 +67,8 @@ public:
* Constructor
* Creates a coroutine from a member method of an object
*/
template
<
class
T
>
COROUTINE
(
T
*
object
,
ReturnType
(
T
::*
ptr
)(
ArgType
)
)
:
template
<
class
T
>
COROUTINE
(
T
*
object
,
ReturnType
(
T
::*
ptr
)(
ArgType
)
)
:
m_func
(
object
,
ptr
),
m_saved
(
NULL
),
m_stack
(
NULL
),
m_stackSize
(
c_defaultStackSize
)
{
}
...
...
@@ -78,13 +78,14 @@ public:
* Creates a coroutine from a delegate object
*/
COROUTINE
(
DELEGATE
<
ReturnType
,
ArgType
>
aEntry
)
:
m_func
(
aEntry
),
m_saved
(
NULL
),
m_stack
(
NULL
),
m_stackSize
(
c_defaultStackSize
)
m_func
(
aEntry
),
m_saved
(
NULL
),
m_stack
(
NULL
),
m_stackSize
(
c_defaultStackSize
)
{};
~
COROUTINE
()
{
if
(
m_saved
)
delete
m_saved
;
if
(
m_stack
)
free
(
m_stack
);
}
...
...
@@ -114,7 +115,7 @@ public:
}
/**
<F11>* Function SetEntry()
*
<F11>* Function SetEntry()
*
* Defines the entry point for the coroutine, if not set in the constructor.
*/
...
...
@@ -135,7 +136,7 @@ public:
m_stack
=
malloc
(
c_defaultStackSize
);
// align to 16 bytes
void
*
sp
=
(
void
*
)
(
(
(
(
ptrdiff_t
)
m_stack
)
+
m_stackSize
-
0xf
)
&
(
~
0x0f
)
);
void
*
sp
=
(
void
*
)
(
(
(
(
ptrdiff_t
)
m_stack
)
+
m_stackSize
-
0xf
)
&
(
~
0x0f
)
);
m_args
=
&
args
;
m_self
=
boost
::
context
::
make_fcontext
(
sp
,
m_stackSize
,
callerStub
);
...
...
@@ -157,6 +158,7 @@ public:
bool
Resume
()
{
boost
::
context
::
jump_fcontext
(
m_saved
,
m_self
,
0
);
return
m_running
;
}
...
...
@@ -181,7 +183,7 @@ public:
}
private
:
static
const
int
c_defaultStackSize
=
2000000
;
// fixme: make configurable
static
const
int
c_defaultStackSize
=
2000000
;
// fixme: make configurable
/* real entry point of the coroutine */
static
void
callerStub
(
intptr_t
data
)
...
...
@@ -194,17 +196,19 @@ private:
cor
->
m_running
=
false
;
// go back to wherever we came from.
boost
::
context
::
jump_fcontext
(
cor
->
m_self
,
cor
->
m_saved
,
0
);
//
reinterpret_cast<intptr_t>( this ));
boost
::
context
::
jump_fcontext
(
cor
->
m_self
,
cor
->
m_saved
,
0
);
//
reinterpret_cast<intptr_t>( this ));
}
template
<
typename
T
>
struct
strip_ref
template
<
typename
T
>
struct
strip_ref
{
typedef
T
result
;
typedef
T
result
;
};
template
<
typename
T
>
struct
strip_ref
<
T
&>
template
<
typename
T
>
struct
strip_ref
<
T
&>
{
typedef
T
result
;
typedef
T
result
;
};
DELEGATE
<
ReturnType
,
ArgType
>
m_func
;
...
...
include/tool/delegate.h
View file @
0ac3e1fb
...
...
@@ -32,67 +32,69 @@
* Check delegate_example.cpp for a coding sample.
*/
template
<
class
ReturnType
,
class
Arg
>
class
DELEGATE
{
public
:
typedef
ReturnType
(
DELEGATE
<
ReturnType
,
Arg
>::*
MemberPointer
)(
Arg
);
typedef
ReturnType
_ReturnType
;
typedef
Arg
_ArgType
;
DELEGATE
()
{
}
template
<
class
T
>
DELEGATE
(
T
*
object
,
ReturnType
(
T
::*
ptr
)(
Arg
)
)
{
m_ptr
=
reinterpret_cast
<
MemberPointer
>
(
ptr
);
m_object
=
reinterpret_cast
<
void
*>
(
object
);
};
ReturnType
operator
()(
Arg
a
)
const
{
DELEGATE
<
ReturnType
,
Arg
>
*
casted
=
reinterpret_cast
<
DELEGATE
<
ReturnType
,
Arg
>*>
(
m_object
);
return
(
casted
->*
m_ptr
)(
a
);
}
template
<
class
ReturnType
,
class
Arg
>
class
DELEGATE
{
public
:
typedef
ReturnType
(
DELEGATE
<
ReturnType
,
Arg
>::*
MemberPointer
)(
Arg
);
typedef
ReturnType
_ReturnType
;
typedef
Arg
_ArgType
;
DELEGATE
()
{
}
template
<
class
T
>
DELEGATE
(
T
*
object
,
ReturnType
(
T
::*
ptr
)(
Arg
)
)
{
m_ptr
=
reinterpret_cast
<
MemberPointer
>
(
ptr
);
m_object
=
reinterpret_cast
<
void
*>
(
object
);
};
ReturnType
operator
()(
Arg
a
)
const
{
DELEGATE
<
ReturnType
,
Arg
>*
casted
=
reinterpret_cast
<
DELEGATE
<
ReturnType
,
Arg
>*>
(
m_object
);
return
(
casted
->*
m_ptr
)(
a
);
}
private
:
MemberPointer
m_ptr
;
void
*
m_object
;
void
*
m_object
;
};
/**
* Class DELEGATE0
* Same as DELEGATE, but with no arguments.
*/
template
<
class
ReturnType
>
class
DELEGATE0
{
public
:
typedef
ReturnType
(
DELEGATE0
<
ReturnType
>::*
MemberPointer
)();
typedef
ReturnType
_ReturnType
;
DELEGATE0
()
{
}
template
<
class
T
>
DELEGATE0
(
T
*
object
,
ReturnType
(
T
::*
ptr
)(
)
)
{
m_ptr
=
reinterpret_cast
<
MemberPointer
>
(
ptr
);
m_object
=
reinterpret_cast
<
void
*>
(
object
);
};
ReturnType
operator
()(
)
const
{
DELEGATE0
<
ReturnType
>*
casted
=
reinterpret_cast
<
DELEGATE0
<
ReturnType
>*>
(
m_object
);
return
(
casted
->*
m_ptr
)();
}
template
<
class
ReturnType
>
class
DELEGATE0
{
public
:
typedef
ReturnType
(
DELEGATE0
<
ReturnType
>::*
MemberPointer
)();
typedef
ReturnType
_ReturnType
;
DELEGATE0
()
{
}
template
<
class
T
>
DELEGATE0
(
T
*
object
,
ReturnType
(
T
::*
ptr
)()
)
{
m_ptr
=
reinterpret_cast
<
MemberPointer
>
(
ptr
);
m_object
=
reinterpret_cast
<
void
*>
(
object
);
};
ReturnType
operator
()()
const
{
DELEGATE0
<
ReturnType
>*
casted
=
reinterpret_cast
<
DELEGATE0
<
ReturnType
>*>
(
m_object
);
return
(
casted
->*
m_ptr
)();
}
private
:
MemberPointer
m_ptr
;
void
*
m_object
;
void
*
m_object
;
};
#endif
include/tool/examples/coroutine_example.cpp
View file @
0ac3e1fb
...
...
@@ -7,39 +7,42 @@ using namespace std;
typedef
COROUTINE
<
int
,
int
>
MyCoroutine
;
class
MyClass
{
public
:
int
CountTo
(
int
n
)
class
MyClass
{
public
:
int
CountTo
(
int
n
)
{
printf
(
"%s: Coroutine says hi. I will count from 1 to %d and yield each value.
\n
"
,
__FUNCTION__
,
n
);
for
(
int
i
=
1
;
i
<=
n
;
i
++
)
{
printf
(
"%s: Coroutine says hi. I will count from 1 to %d and yield each value.
\n
"
,
__FUNCTION__
,
n
);
for
(
int
i
=
1
;
i
<=
n
;
i
++
)
{
printf
(
"%s: Yielding %d
\n
"
,
__FUNCTION__
,
i
);
cofunc
.
Yield
(
i
);
}
printf
(
"%s: Yielding %d
\n
"
,
__FUNCTION__
,
i
);
cofunc
.
Yield
(
i
);
}
}
void
Run
()
{
cofunc
=
MyCoroutine
(
this
,
&
MyClass
::
CountTo
);
printf
(
"%s: Calling coroutine that will count from 1 to 5.
\n
"
,
__FUNCTION__
);
cofunc
.
Call
(
5
);
void
Run
(
)
while
(
cofunc
.
Running
()
)
{
cofunc
=
MyCoroutine
(
this
,
&
MyClass
::
CountTo
);
printf
(
"%s: Calling coroutine that will count from 1 to 5.
\n
"
,
__FUNCTION__
);
cofunc
.
Call
(
5
);
while
(
cofunc
.
Running
())
{
printf
(
"%s: Got value: %d
\n
"
,
__FUNCTION__
,
cofunc
.
ReturnValue
());
cofunc
.
Resume
();
}
printf
(
"%s: Done!
\n
"
,
__FUNCTION__
);
printf
(
"%s: Got value: %d
\n
"
,
__FUNCTION__
,
cofunc
.
ReturnValue
()
);
cofunc
.
Resume
();
}
MyCoroutine
cofunc
;
printf
(
"%s: Done!
\n
"
,
__FUNCTION__
);
}
MyCoroutine
cofunc
;
};
main
()
{
main
()
{
MyClass
obj
;
obj
.
Run
();
...
...
include/tool/examples/delegate_example.cpp
View file @
0ac3e1fb
...
...
@@ -5,14 +5,15 @@
using
namespace
std
;
class
MyClass
{
public
:
int
MyMethod
(
const
string
&
arg
)
{
printf
(
"MyClass(this = %p)::MyMethod() called with string '%s', length %d
\n
"
,
this
,
arg
.
c_str
(),
arg
.
length
());
return
arg
.
length
();
}
class
MyClass
{
public
:
int
MyMethod
(
const
string
&
arg
)
{
printf
(
"MyClass(this = %p)::MyMethod() called with string '%s', length %d
\n
"
,
this
,
arg
.
c_str
(),
arg
.
length
()
);
return
arg
.
length
();
}
};
typedef
DELEGATE
<
int
,
const
string
&>
MyDelegate
;
...
...
@@ -22,14 +23,14 @@ main()
MyClass
t1
;
MyClass
t2
;
MyDelegate
ptr1
(
&
t1
,
&
MyClass
::
MyMethod
);
MyDelegate
ptr2
(
&
t2
,
&
MyClass
::
MyMethod
);
MyDelegate
ptr1
(
&
t1
,
&
MyClass
::
MyMethod
);
MyDelegate
ptr2
(
&
t2
,
&
MyClass
::
MyMethod
);
int
retval1
,
retval2
;
int
retval1
,
retval2
;
retval1
=
ptr1
(
"apples"
);
retval2
=
ptr2
(
"cherries"
);
retval1
=
ptr1
(
"apples"
);
retval2
=
ptr2
(
"cherries"
);
printf
(
"Object 1 returned %d, object 2 returned %d
\n
"
,
retval1
,
retval2
);
return
0
;
printf
(
"Object 1 returned %d, object 2 returned %d
\n
"
,
retval1
,
retval2
);
return
0
;
}
include/tool/tool_action.h
View file @
0ac3e1fb
...
...
@@ -46,11 +46,11 @@ class TOOL_ACTION
{
public
:
TOOL_ACTION
(
const
std
::
string
&
aName
,
TOOL_ActionScope
aScope
=
AS_CONTEXT
,
int
aDefaultHotKey
=
0
,
const
std
::
string
&
aMenuItem
=
std
::
string
(
""
),
const
std
::
string
&
aMenuDesc
=
std
::
string
(
""
)
)
:
m_name
(
aName
),
m_scope
(
aScope
),
m_defaultHotKey
(
aDefaultHotKey
),
m_currentHotKey
(
aDefaultHotKey
),
m_menuItem
(
aMenuItem
),
m_menuDescription
(
aMenuDesc
),
m_id
(
-
1
),
m_actionMgr
(
NULL
)
int
aDefaultHotKey
=
0
,
const
std
::
string
&
aMenuItem
=
std
::
string
(
""
),
const
std
::
string
&
aMenuDesc
=
std
::
string
(
""
)
)
:
m_name
(
aName
),
m_scope
(
aScope
),
m_defaultHotKey
(
aDefaultHotKey
),
m_currentHotKey
(
aDefaultHotKey
),
m_menuItem
(
aMenuItem
),
m_menuDescription
(
aMenuDesc
),
m_id
(
-
1
),
m_actionMgr
(
NULL
)
{
}
...
...
@@ -205,7 +205,7 @@ private:
std
::
string
m_menuDescription
;
// Icon for menu entry
//KiBitmap m_bitmap;
//
KiBitmap m_bitmap;
/// Unique ID for fast matching. Assigned by ACTION_MANAGER.
int
m_id
;
...
...
@@ -214,10 +214,10 @@ private:
ACTION_MANAGER
*
m_actionMgr
;
/// Origin of the action
//
const TOOL_BASE* m_origin;
// const TOOL_BASE* m_origin;
/// Originating UI object
//
wxWindow* m_uiOrigin;
// wxWindow* m_uiOrigin;
};
#endif
include/tool/tool_base.h
View file @
0ac3e1fb
...
...
@@ -34,7 +34,7 @@
class
EDA_ITEM
;
class
TOOL_MANAGER
;
namespace
K
iGfx
namespace
K
IGFX
{
class
VIEW
;
class
VIEW_CONTROLS
;
...
...
@@ -66,7 +66,7 @@ public:
m_type
(
aType
),
m_toolId
(
aId
),
m_toolName
(
aName
),
m_toolMgr
(
NULL
){};
m_toolMgr
(
NULL
)
{};
virtual
~
TOOL_BASE
()
{};
...
...
@@ -130,7 +130,7 @@ protected:
* Returns the instance of VIEW object used in the application. It allows tools to draw.
* @return The instance of VIEW.
*/
K
iGfx
::
VIEW
*
getView
()
const
;
K
IGFX
::
VIEW
*
getView
()
const
;
/**
* Function getViewControls()
...
...
@@ -139,14 +139,14 @@ protected:
* read & modify user input and its settings (eg. show cursor, enable snapping to grid, etc.)
* @return The instance of VIEW_CONTROLS.
*/
K
iGfx
::
VIEW_CONTROLS
*
getViewControls
()
const
;
K
IGFX
::
VIEW_CONTROLS
*
getViewControls
()
const
;
/**
* Function getEditFrame()
*
* Returns the application window object, casted to requested user type.
*/
template
<
typename
T
>
template
<
typename
T
>
T
*
getEditFrame
()
const
{
return
static_cast
<
T
*>
(
getEditFrameInt
()
);
...
...
@@ -157,7 +157,7 @@ protected:
*
* Returns the model object if it matches the requested type.
*/
template
<
typename
T
>
template
<
typename
T
>
T
*
getModel
(
KICAD_T
modelType
)
const
{
EDA_ITEM
*
m
=
getModelInt
();
...
...
include/tool/tool_dispatcher.h
View file @
0ac3e1fb
...
...
@@ -32,8 +32,8 @@
class
TOOL_MANAGER
;
class
PCB_BASE_FRAME
;
namespace
K
iGfx
{
class
VIEW
;
namespace
K
IGFX
{
class
VIEW
;
};
/**
...
...
@@ -96,22 +96,23 @@ private:
bool
handleMouseButton
(
wxEvent
&
aEvent
,
int
aIndex
,
bool
aMotion
);
///> Saves the state of key modifiers (Alt, Ctrl and so on).
template
<
class
EventType
>
template
<
class
EventType
>
static
int
decodeModifiers
(
const
EventType
*
aState
)
{
int
mods
=
0
;
if
(
aState
->
ControlDown
()
)
mods
|=
MD_ModCtrl
;
if
(
aState
->
AltDown
()
)
mods
|=
MD_ModAlt
;
if
(
aState
->
ShiftDown
()
)
mods
|=
MD_ModShift
;
return
mods
;
}
///> Stores all the informations regarding a mouse button state.
struct
ButtonState
;
...
...
@@ -122,7 +123,7 @@ private:
std
::
vector
<
ButtonState
*>
m_buttons
;
///> Returns the instance of VIEW, used by the application.
K
iGfx
::
VIEW
*
getView
();
K
IGFX
::
VIEW
*
getView
();
///> Instance of tool manager that cooperates with the dispatcher.
TOOL_MANAGER
*
m_toolMgr
;
...
...
include/tool/tool_event.h
View file @
0ac3e1fb
...
...
@@ -142,7 +142,7 @@ public:
const
std
::
string
Format
()
const
;
TOOL_EVENT
(
TOOL_EventCategory
aCategory
=
TC_None
,
TOOL_Actions
aAction
=
TA_None
,
TOOL_ActionScope
aScope
=
AS_GLOBAL
)
:
TOOL_ActionScope
aScope
=
AS_GLOBAL
)
:
m_category
(
aCategory
),
m_actions
(
aAction
),
m_scope
(
aScope
),
...
...
@@ -150,40 +150,43 @@ public:
m_keyCode
(
0
),
m_modifiers
(
0
)
{}
TOOL_EVENT
(
TOOL_EventCategory
aCategory
,
TOOL_Actions
aAction
,
int
aExtraParam
,
TOOL_ActionScope
aScope
=
AS_GLOBAL
)
:
TOOL_EVENT
(
TOOL_EventCategory
aCategory
,
TOOL_Actions
aAction
,
int
aExtraParam
,
TOOL_ActionScope
aScope
=
AS_GLOBAL
)
:
m_category
(
aCategory
),
m_actions
(
aAction
),
m_scope
(
aScope
)
{
if
(
aCategory
==
TC_Mouse
)
{
m_mouseButtons
=
aExtraParam
&
MB_ButtonMask
;
}
else
if
(
aCategory
==
TC_Keyboard
)
{
m_keyCode
=
aExtraParam
&
~
MD_ModifierMask
;
// Filter out modifiers
}
else
if
(
aCategory
==
TC_Command
)
{
if
(
aCategory
==
TC_Mouse
)
{
m_mouseButtons
=
aExtraParam
&
MB_ButtonMask
;
}
else
if
(
aCategory
==
TC_Keyboard
)
{
m_keyCode
=
aExtraParam
&
~
MD_ModifierMask
;
// Filter out modifiers
}
else
if
(
aCategory
==
TC_Command
)
{
m_commandId
=
aExtraParam
;
}
if
(
aCategory
&
(
TC_Mouse
|
TC_Keyboard
)
)
{
m_modifiers
=
aExtraParam
&
MD_ModifierMask
;
}
m_commandId
=
aExtraParam
;
}
if
(
aCategory
&
(
TC_Mouse
|
TC_Keyboard
)
)
{
m_modifiers
=
aExtraParam
&
MD_ModifierMask
;
}
}
TOOL_EVENT
(
TOOL_EventCategory
aCategory
,
TOOL_Actions
aAction
,
const
std
::
string
&
aExtraParam
,
TOOL_ActionScope
aScope
=
AS_GLOBAL
)
:
const
std
::
string
&
aExtraParam
,
TOOL_ActionScope
aScope
=
AS_GLOBAL
)
:
m_category
(
aCategory
),
m_actions
(
aAction
),
m_scope
(
aScope
),
m_mouseButtons
(
0
)
{
if
(
aCategory
==
TC_Command
)
m_commandStr
=
aExtraParam
;
}
{
if
(
aCategory
==
TC_Command
)
m_commandStr
=
aExtraParam
;
}
///> Returns the category (eg. mouse/keyboard/action) of an event..
TOOL_EventCategory
Category
()
const
...
...
@@ -201,35 +204,35 @@ public:
///> where dragging has started.
const
VECTOR2D
Delta
()
const
{
assert
(
m_category
==
TC_Mouse
);
// this should be used only with mouse events
assert
(
m_category
==
TC_Mouse
);
// this should be used only with mouse events
return
m_mouseDelta
;
}
///> Returns mouse cursor position in world coordinates.
const
VECTOR2D
&
Position
()
const
{
assert
(
m_category
==
TC_Mouse
);
// this should be used only with mouse events
assert
(
m_category
==
TC_Mouse
);
// this should be used only with mouse events
return
m_mousePos
;
}
///> Returns the point where dragging has started.
const
VECTOR2D
&
DragOrigin
()
const
{
assert
(
m_category
==
TC_Mouse
);
// this should be used only with mouse events
assert
(
m_category
==
TC_Mouse
);
// this should be used only with mouse events
return
m_mouseDragOrigin
;
}
///> Returns information about mouse buttons state.
int
Buttons
()
const
{
assert
(
m_category
==
TC_Mouse
);
// this should be used only with mouse events
assert
(
m_category
==
TC_Mouse
);
// this should be used only with mouse events
return
m_mouseButtons
;
}
bool
IsClick
(
int
aButtonMask
=
MB_Any
)
const
{
return
(
m_actions
==
TA_MouseClick
)
&&
(
(
m_mouseButtons
&
aButtonMask
)
==
aButtonMask
);
&&
(
(
m_mouseButtons
&
aButtonMask
)
==
aButtonMask
);
}
bool
IsDrag
(
int
aButtonMask
=
MB_Any
)
const
...
...
@@ -244,7 +247,7 @@ public:
bool
IsMotion
()
const
{
return
(
m_actions
==
TA_MouseMotion
)
;
return
m_actions
==
TA_MouseMotion
;
}
bool
IsCancel
()
const
...
...
@@ -255,7 +258,7 @@ public:
///> Returns information about key modifiers state (Ctrl, Alt, etc.)
int
Modifier
(
int
aMask
=
MD_ModifierMask
)
const
{
return
(
m_modifiers
&
aMask
)
;
return
m_modifiers
&
aMask
;
}
int
KeyCode
()
const
...
...
@@ -273,7 +276,7 @@ public:
return
m_actions
==
TA_KeyDown
;
}
void
SetMouseDragOrigin
(
const
VECTOR2D
&
aP
)
void
SetMouseDragOrigin
(
const
VECTOR2D
&
aP
)
{
m_mouseDragOrigin
=
aP
;
}
...
...
@@ -306,9 +309,10 @@ public:
if
(
m_category
==
TC_Command
)
{
if
(
m_commandStr
&&
aEvent
.
m_commandStr
)
return
(
*
m_commandStr
==
*
aEvent
.
m_commandStr
);
return
*
m_commandStr
==
*
aEvent
.
m_commandStr
;
if
(
m_commandId
&&
aEvent
.
m_commandId
)
return
(
*
m_commandId
==
*
aEvent
.
m_commandId
)
;
return
*
m_commandId
==
*
aEvent
.
m_commandId
;
}
return
true
;
...
...
@@ -365,7 +369,8 @@ typedef boost::optional<TOOL_EVENT> OPT_TOOL_EVENT;
* A list of TOOL_EVENTs, with overloaded || operators allowing for
* concatenating TOOL_EVENTs with little code.
*/
class
TOOL_EVENT_LIST
{
class
TOOL_EVENT_LIST
{
public
:
typedef
TOOL_EVENT
value_type
;
typedef
std
::
deque
<
TOOL_EVENT
>::
iterator
iterator
;
...
...
@@ -388,11 +393,12 @@ public:
*/
const
std
::
string
Format
()
const
;
boost
::
optional
<
const
TOOL_EVENT
&>
Matches
(
const
TOOL_EVENT
&
b
)
const
boost
::
optional
<
const
TOOL_EVENT
&>
Matches
(
const
TOOL_EVENT
&
b
)
const
{
for
(
const_iterator
i
=
m_events
.
begin
();
i
!=
m_events
.
end
();
++
i
)
if
(
i
->
Matches
(
b
)
)
if
(
i
->
Matches
(
b
)
)
return
*
i
;
return
boost
::
optional
<
const
TOOL_EVENT
&>
();
}
...
...
@@ -441,9 +447,9 @@ public:
m_events
.
clear
();
for
(
std
::
deque
<
TOOL_EVENT
>::
const_iterator
i
=
b
.
m_events
.
begin
();
i
!=
b
.
m_events
.
end
();
++
i
)
i
!=
b
.
m_events
.
end
();
++
i
)
{
m_events
.
push_back
(
*
i
);
m_events
.
push_back
(
*
i
);
}
return
*
this
;
...
...
@@ -481,6 +487,7 @@ inline const TOOL_EVENT_LIST operator||( const TOOL_EVENT& a, const TOOL_EVENT&
return
l
;
}
inline
const
TOOL_EVENT_LIST
operator
||
(
const
TOOL_EVENT
&
a
,
const
TOOL_EVENT_LIST
&
b
)
{
TOOL_EVENT_LIST
l
(
b
);
...
...
include/tool/tool_interactive.h
View file @
0ac3e1fb
...
...
@@ -81,9 +81,9 @@ public:
* Defines which state (aStateFunc) to go when a certain event arrives (aConditions).
* No conditions means any event.
*/
template
<
class
T
>
void
Go
(
int
(
T
::*
aStateFunc
)(
TOOL_EVENT
&
),
const
TOOL_EVENT_LIST
&
aConditions
=
TOOL_EVENT
(
TC_Any
,
TA_Any
)
);
template
<
class
T
>
void
Go
(
int
(
T
::*
aStateFunc
)(
TOOL_EVENT
&
),
const
TOOL_EVENT_LIST
&
aConditions
=
TOOL_EVENT
(
TC_Any
,
TA_Any
)
);
/**
* Function Wait()
...
...
@@ -91,18 +91,18 @@ public:
* Suspends execution of the tool until an event specified in aEventList arrives.
* No parameters means waiting for any event.
*/
OPT_TOOL_EVENT
Wait
(
const
TOOL_EVENT_LIST
&
aEventList
=
TOOL_EVENT
(
TC_Any
,
TA_Any
)
);
OPT_TOOL_EVENT
Wait
(
const
TOOL_EVENT_LIST
&
aEventList
=
TOOL_EVENT
(
TC_Any
,
TA_Any
)
);
/** functions below are not yet implemented - their interface may change */
/*template<class Parameters, class ReturnValue>
/*template
<class Parameters, class ReturnValue>
bool InvokeTool( const std::string& aToolName, const Parameters& parameters,
ReturnValue& returnValue );
template<class Parameters, class ReturnValue>
template
<class Parameters, class ReturnValue>
bool InvokeWindow( const std::string& aWindowName, const Parameters& parameters,
ReturnValue& returnValue );
template<class T>
template
<class T>
void Yield( const T& returnValue );*/
protected
:
...
...
@@ -121,11 +121,12 @@ private:
};
// hide TOOL_MANAGER implementation
template
<
class
T
>
void
TOOL_INTERACTIVE
::
Go
(
int
(
T
::*
aStateFunc
)(
TOOL_EVENT
&
),
const
TOOL_EVENT_LIST
&
aConditions
)
template
<
class
T
>
void
TOOL_INTERACTIVE
::
Go
(
int
(
T
::*
aStateFunc
)(
TOOL_EVENT
&
),
const
TOOL_EVENT_LIST
&
aConditions
)
{
TOOL_STATE_FUNC
sptr
(
static_cast
<
T
*>
(
this
),
aStateFunc
);
goInternal
(
sptr
,
aConditions
);
}
...
...
include/tool/tool_manager.h
View file @
0ac3e1fb
...
...
@@ -134,16 +134,16 @@ public:
* These are made available to the tool. Called by the parent frame (PCB_EDIT_FRAME)
* when the board is set up.
*/
void
SetEnvironment
(
EDA_ITEM
*
aModel
,
K
iGfx
::
VIEW
*
aView
,
KiGfx
::
VIEW_CONTROLS
*
aViewControls
,
wxWindow
*
aFrame
);
void
SetEnvironment
(
EDA_ITEM
*
aModel
,
K
IGFX
::
VIEW
*
aView
,
KIGFX
::
VIEW_CONTROLS
*
aViewControls
,
wxWindow
*
aFrame
);
/* Accessors for the environment objects (view, model, etc.) */
K
iGfx
::
VIEW
*
GetView
()
const
K
IGFX
::
VIEW
*
GetView
()
const
{
return
m_view
;
}
K
iGfx
::
VIEW_CONTROLS
*
GetViewControls
()
const
K
IGFX
::
VIEW_CONTROLS
*
GetViewControls
()
const
{
return
m_viewControls
;
}
...
...
@@ -163,7 +163,7 @@ public:
* to be called. Called by TOOL_INTERACTIVE::Go(). May be called from a coroutine context.
*/
void
ScheduleNextState
(
TOOL_BASE
*
aTool
,
TOOL_STATE_FUNC
&
aHandler
,
const
TOOL_EVENT_LIST
&
aConditions
);
const
TOOL_EVENT_LIST
&
aConditions
);
/**
* Pauses execution of a given tool until one or more events matching aConditions arrives.
...
...
@@ -171,7 +171,7 @@ public:
* Called only from coroutines.
*/
boost
::
optional
<
TOOL_EVENT
>
ScheduleWait
(
TOOL_BASE
*
aTool
,
const
TOOL_EVENT_LIST
&
aConditions
);
const
TOOL_EVENT_LIST
&
aConditions
);
/**
* Sets behaviour of the tool's context popup menu.
...
...
@@ -183,7 +183,7 @@ public:
* May be called from a coroutine context.
*/
void
ScheduleContextMenu
(
TOOL_BASE
*
aTool
,
CONTEXT_MENU
*
aMenu
,
CONTEXT_MENU_TRIGGER
aTrigger
);
CONTEXT_MENU_TRIGGER
aTrigger
);
/**
* Allows a tool to pass the already handled event to the next tool on the stack.
...
...
@@ -251,7 +251,7 @@ private:
bool
runTool
(
TOOL_BASE
*
aTool
);
template
<
class
Parameters
>
void
invokeTool
(
const
std
::
string
&
aName
,
const
Parameters
&
aToolParams
);
void
invokeTool
(
const
std
::
string
&
aName
,
const
Parameters
&
aToolParams
);
/**
* Function finishTool()
...
...
@@ -270,7 +270,7 @@ private:
*/
bool
isRegistered
(
TOOL_BASE
*
aTool
)
const
{
return
(
m_toolState
.
count
(
aTool
)
>
0
)
;
return
m_toolState
.
count
(
aTool
)
>
0
;
}
/**
...
...
@@ -298,8 +298,8 @@ private:
ACTION_MANAGER
*
m_actionMgr
;
EDA_ITEM
*
m_model
;
K
iGfx
::
VIEW
*
m_view
;
K
iGfx
::
VIEW_CONTROLS
*
m_viewControls
;
K
IGFX
::
VIEW
*
m_view
;
K
IGFX
::
VIEW_CONTROLS
*
m_viewControls
;
wxWindow
*
m_editFrame
;
/// Flag saying if the currently processed event should be passed to other tools.
...
...
include/view/view.h
View file @
0ac3e1fb
...
...
@@ -32,7 +32,7 @@
#include <math/box2.h>
#include <gal/definitions.h>
namespace
K
iGfx
namespace
K
IGFX
{
class
PAINTER
;
class
GAL
;
...
...
@@ -76,14 +76,14 @@ public:
* Adds a VIEW_ITEM to the view.
* @param aItem: item to be added. No ownership is given
*/
void
Add
(
VIEW_ITEM
*
aItem
);
void
Add
(
VIEW_ITEM
*
aItem
);
/**
* Function Remove()
* Removes a VIEW_ITEM from the view.
* @param aItem: item to be removed. Caller must dispose the removed item if necessary
*/
void
Remove
(
VIEW_ITEM
*
aItem
);
void
Remove
(
VIEW_ITEM
*
aItem
);
/**
* Function Query()
...
...
@@ -94,7 +94,7 @@ public:
* first).
* @return Number of found items.
*/
int
Query
(
const
BOX2I
&
aRect
,
std
::
vector
<
LayerItemPair
>&
aResult
);
int
Query
(
const
BOX2I
&
aRect
,
std
::
vector
<
LayerItemPair
>&
aResult
);
/**
* Function SetRequired()
...
...
@@ -104,19 +104,19 @@ public:
* @param aRequiredId is the id of the required layer.
* @param aRequired tells if the required layer should be added or removed from the list.
*/
void
SetRequired
(
int
aLayerId
,
int
aRequiredId
,
bool
aRequired
=
true
);
void
SetRequired
(
int
aLayerId
,
int
aRequiredId
,
bool
aRequired
=
true
);
/**
* Function CopySettings()
* Copies layers and visibility settings from another view.
* @param aOtherView: view from which settings will be copied.
*/
void
CopySettings
(
const
VIEW
*
aOtherView
);
void
CopySettings
(
const
VIEW
*
aOtherView
);
/*
* Convenience wrappers for adding multiple items
* template<class T> void AddItems( const T& aItems );
* template<class T> void RemoveItems( const T& aItems );
* template
<class T> void AddItems( const T& aItems );
* template
<class T> void RemoveItems( const T& aItems );
*/
/**
...
...
@@ -124,27 +124,27 @@ public:
* Assigns a rendering device for the VIEW.
* @param aGal: pointer to the GAL output device
*/
void
SetGAL
(
GAL
*
aGal
);
void
SetGAL
(
GAL
*
aGal
);
/**
* Function GetGAL()
* Returns the GAL this view is using to draw graphical primitives.
* @return Pointer to the currently used GAL instance.
*/
GAL
*
GetGAL
()
const
{
return
m_gal
;
}
GAL
*
GetGAL
()
const
{
return
m_gal
;
}
/**
* Function SetPainter()
* Sets the painter object used by the view for drawing VIEW_ITEMS.
*/
void
SetPainter
(
PAINTER
*
aPainter
);
void
SetPainter
(
PAINTER
*
aPainter
);
/**
* Function GetPainter()
* Returns the painter object used by the view for drawing VIEW_ITEMS.
* @return Pointer to the currently used Painter instance.
*/
PAINTER
*
GetPainter
()
const
{
return
m_painter
;
};
PAINTER
*
GetPainter
()
const
{
return
m_painter
;
};
/**
* Function SetViewport()
...
...
@@ -152,14 +152,14 @@ public:
* @param aViewport: desired visible area, in world space coordinates.
* @param aKeepProportions: when true, the X/Y size proportions are kept.
*/
void
SetViewport
(
const
BOX2D
&
aViewport
,
bool
aKeepProportions
=
true
);
void
SetViewport
(
const
BOX2D
&
aViewport
,
bool
aKeepProportions
=
true
);
/**
* Function GetViewport()
* Returns the current viewport visible area rectangle.
* @return Current viewport rectangle
*/
BOX2D
GetViewport
()
const
;
BOX2D
GetViewport
()
const
;
/**
* Function SetMirror()
...
...
@@ -167,7 +167,7 @@ public:
* @param aMirrorX: when true, the X axis is mirrored
* @param aMirrorY: when true, the Y axis is mirrored.
*/
void
SetMirror
(
bool
aMirrorX
,
bool
aMirrorY
);
void
SetMirror
(
bool
aMirrorX
,
bool
aMirrorY
);
/**
* Function SetScale()
...
...
@@ -175,7 +175,7 @@ public:
* (depending on correct GAL unit length & DPI settings).
* @param aScale: the scalefactor
*/
void
SetScale
(
double
aScale
);
void
SetScale
(
double
aScale
);
/**
* Function SetScale()
...
...
@@ -183,7 +183,7 @@ public:
* (depending on correct GAL unit length & DPI settings).
* @param aScale: the scale factor
*/
void
SetScale
(
double
aScale
,
const
VECTOR2D
&
aAnchor
);
void
SetScale
(
double
aScale
,
const
VECTOR2D
&
aAnchor
);
/**
* Function GetScale()
...
...
@@ -197,7 +197,7 @@ public:
* of the screen).
* @param aCenter: the new center point, in world space coordinates.
*/
void
SetCenter
(
const
VECTOR2D
&
aCenter
);
void
SetCenter
(
const
VECTOR2D
&
aCenter
);
/**
* Function GetCenter()
...
...
@@ -212,7 +212,7 @@ public:
* @param aCoord: the point/vector to be converted
* @param aAbsolute: when true, aCoord is treated as a point, otherwise - as a direction (vector)
*/
VECTOR2D
ToWorld
(
const
VECTOR2D
&
aCoord
,
bool
aAbsolute
=
true
)
const
;
VECTOR2D
ToWorld
(
const
VECTOR2D
&
aCoord
,
bool
aAbsolute
=
true
)
const
;
/**
* Function ToScreen()
...
...
@@ -220,7 +220,7 @@ public:
* @param aCoord: the point/vector to be converted
* @param aAbsolute: when true, aCoord is treated as a point, otherwise - as a direction (vector)
*/
VECTOR2D
ToScreen
(
const
VECTOR2D
&
aCoord
,
bool
aAbsolute
=
true
)
const
;
VECTOR2D
ToScreen
(
const
VECTOR2D
&
aCoord
,
bool
aAbsolute
=
true
)
const
;
/**
* Function ToScreen()
...
...
@@ -228,14 +228,14 @@ public:
* @param aCoord: the coordinate to be transformed.
* @param aAbsolute: when true, aCoord is treated as a point, otherwise - as a direction (vector)
*/
double
ToScreen
(
double
aCoord
,
bool
aAbsolute
=
true
)
const
;
double
ToScreen
(
double
aCoord
,
bool
aAbsolute
=
true
)
const
;
/**
* Function GetScreenPixelSize()
* Returns the size of the our rendering area, in pixels.
* @return viewport screen size
*/
VECTOR2D
GetScreenPixelSize
()
const
;
VECTOR2D
GetScreenPixelSize
()
const
;
/**
* Function AddLayer()
...
...
@@ -244,20 +244,20 @@ public:
* @param aDisplayOnly: layer is display-only (example: selection boxes, floating hints/menus).
* Objects belonging to this layer are not taken into account by Query() method.
*/
void
AddLayer
(
int
aLayer
,
bool
aDisplayOnly
=
false
);
void
AddLayer
(
int
aLayer
,
bool
aDisplayOnly
=
false
);
/**
* Function ClearLayer()
* Removes all items from a given layer.
* @param aLayer: ID of the layer to be cleared
*/
void
ClearLayer
(
int
aLayer
);
void
ClearLayer
(
int
aLayer
);
/**
* Function Clear()
* Removes all items from the view.
*/
void
Clear
();
void
Clear
();
/**
* Function SetLayerVisible()
...
...
@@ -302,7 +302,7 @@ public:
* @param aLayer: the layer
* @param aRenderingOrder: arbitrary number denoting the rendering order.
*/
void
SetLayerOrder
(
int
aLayer
,
int
aRenderingOrder
);
void
SetLayerOrder
(
int
aLayer
,
int
aRenderingOrder
);
/**
* Function GetLayerOrder()
...
...
@@ -310,7 +310,7 @@ public:
* @param aLayer: the layer
* @return Rendering order of a particular layer.
*/
int
GetLayerOrder
(
int
aLayer
)
const
;
int
GetLayerOrder
(
int
aLayer
)
const
;
/**
* Function SortLayers()
...
...
@@ -320,7 +320,7 @@ public:
* @param aLayers stores id of layers to be sorted.
* @param aCount stores the number of layers.
*/
void
SortLayers
(
int
aLayers
[],
int
&
aCount
)
const
;
void
SortLayers
(
int
aLayers
[],
int
&
aCount
)
const
;
/**
* Function UpdateLayerColor()
...
...
@@ -328,14 +328,14 @@ public:
* @param aLayer is a number of the layer to be updated.
* @see RENDER_SETTINGS
*/
void
UpdateLayerColor
(
int
aLayer
);
void
UpdateLayerColor
(
int
aLayer
);
/**
* Function UpdateAllLayersColor()
* Applies the new coloring scheme to all layers. The used scheme is held by RENDER_SETTINGS.
* @see RENDER_SETTINGS
*/
void
UpdateAllLayersColor
();
void
UpdateAllLayersColor
();
/**
* Function ChangeLayerDepth()
...
...
@@ -343,7 +343,7 @@ public:
* @param aLayer is a number of the layer to be updated.
* @param aDepth is the new depth.
*/
void
ChangeLayerDepth
(
int
aLayer
,
int
aDepth
);
void
ChangeLayerDepth
(
int
aLayer
,
int
aDepth
);
/**
* Function SetTopLayer()
...
...
@@ -351,7 +351,7 @@ public:
* @param aLayer: the layer or -1 in case when no particular layer should
* be displayed on the top.
*/
void
SetTopLayer
(
int
aLayer
,
bool
aEnabled
=
true
);
void
SetTopLayer
(
int
aLayer
,
bool
aEnabled
=
true
);
/**
* Function EnableTopLayer()
...
...
@@ -360,42 +360,42 @@ public:
* layer set previously with SetTopLayer function.
* @param aEnabled: whether to enable or disable display of the top layer.
*/
void
EnableTopLayer
(
bool
aEnable
);
void
EnableTopLayer
(
bool
aEnable
);
int
GetTopLayer
()
const
;
int
GetTopLayer
()
const
;
/**
* Function ClearTopLayers()
* Removes all layers from the on-the-top set (they are no longer displayed over the rest of
* layers).
*/
void
ClearTopLayers
();
void
ClearTopLayers
();
/**
* Function UpdateLayerOrder()
* Does everything that is needed to apply the rendering order of layers. It has to be called
* after modification of renderingOrder field of LAYER.
*/
void
UpdateAllLayersOrder
();
void
UpdateAllLayersOrder
();
/**
* Function ClearTargets()
* Clears targets that are marked as dirty.
*/
void
ClearTargets
();
void
ClearTargets
();
/**
* Function Redraw()
* Immediately redraws the whole view.
*/
void
Redraw
();
void
Redraw
();
/**
* Function PartialRedraw()
* Redraws only the parts of the view that have been affected by items
* for which ViewUpdate() function has been called since last redraw.
*/
void
PartialRedraw
();
void
PartialRedraw
();
/**
* Function RecacheAllItems()
...
...
@@ -403,21 +403,21 @@ public:
* @param aForceNow decides if every item should be instantly recached. Otherwise items are
* going to be recached when they become visible.
*/
void
RecacheAllItems
(
bool
aForceNow
=
false
);
void
RecacheAllItems
(
bool
aForceNow
=
false
);
/**
* Function IsDynamic()
* Tells if the VIEW is dynamic (ie. can be changed, for example displaying PCBs in a window)
* or static (that cannot be modified, eg. displaying image/PDF).
*/
bool
IsDynamic
()
const
{
return
m_dynamic
;
}
bool
IsDynamic
()
const
{
return
m_dynamic
;
}
/**
* Function IsDirty()
* Returns true if any of the VIEW layers needs to be refreshened.
* @return True in case if any of layers is marked as dirty.
*/
bool
IsDirty
()
const
;
bool
IsDirty
()
const
;
/**
* Function IsTargetDirty()
...
...
@@ -442,7 +442,7 @@ public:
/// Returns true if the layer is cached
inline
bool
IsCached
(
int
aLayer
)
const
{
return
(
m_layers
.
at
(
aLayer
).
target
==
TARGET_CACHED
)
;
return
m_layers
.
at
(
aLayer
).
target
==
TARGET_CACHED
;
}
/**
...
...
@@ -526,7 +526,7 @@ private:
* @param aImmediate dictates the way of drawing - it allows to force immediate drawing mode
* for cached items.
*/
void
draw
(
VIEW_ITEM
*
aItem
,
int
aLayer
,
bool
aImmediate
=
false
)
const
;
void
draw
(
VIEW_ITEM
*
aItem
,
int
aLayer
,
bool
aImmediate
=
false
)
const
;
/**
* Function draw()
...
...
@@ -536,7 +536,7 @@ private:
* @param aImmediate dictates the way of drawing - it allows to force immediate drawing mode
* for cached items.
*/
void
draw
(
VIEW_ITEM
*
aItem
,
bool
aImmediate
=
false
)
const
;
void
draw
(
VIEW_ITEM
*
aItem
,
bool
aImmediate
=
false
)
const
;
/**
* Function draw()
...
...
@@ -546,7 +546,7 @@ private:
* @param aImmediate dictates the way of drawing - it allows to force immediate drawing mode
* for cached items.
*/
void
draw
(
VIEW_GROUP
*
aGroup
,
bool
aImmediate
=
false
)
const
;
void
draw
(
VIEW_GROUP
*
aGroup
,
bool
aImmediate
=
false
)
const
;
///* Manages dirty flags & redraw queueing when updating an item. Called internally
...
...
@@ -585,42 +585,42 @@ private:
bool
m_enableOrderModifier
;
/// Contains set of possible displayed layers and its properties
LayerMap
m_layers
;
LayerMap
m_layers
;
/// Sorted list of pointers to members of m_layers
LayerOrder
m_orderedLayers
;
LayerOrder
m_orderedLayers
;
/// Stores set of layers that are displayed on the top
std
::
set
<
unsigned
int
>
m_topLayers
;
/// Center point of the VIEW (the point at which we are looking at)
VECTOR2D
m_center
;
VECTOR2D
m_center
;
/// Scale of displayed VIEW_ITEMs
double
m_scale
;
double
m_scale
;
/// PAINTER contains information how do draw items
PAINTER
*
m_painter
;
PAINTER
*
m_painter
;
/// Gives interface to PAINTER, that is used to draw items
GAL
*
m_gal
;
GAL
*
m_gal
;
/// Dynamic VIEW (eg. display PCB in window) allows changes once it is built,
/// static (eg. image/PDF) - does not.
bool
m_dynamic
;
bool
m_dynamic
;
/// Flags to mark targets as dirty, so they have to be redrawn on the next refresh event
bool
m_dirtyTargets
[
TARGETS_NUMBER
];
bool
m_dirtyTargets
[
TARGETS_NUMBER
];
/// Rendering order modifier for layers that are marked as top layers
static
const
int
TOP_LAYER_MODIFIER
=
-
VIEW_MAX_LAYERS
;
/// Panning boundaries
BOX2I
m_panBoundary
;
BOX2I
m_panBoundary
;
/// Zoom limits
VECTOR2D
m_scaleLimits
;
VECTOR2D
m_scaleLimits
;
};
}
// namespace K
iGfx
}
// namespace K
IGFX
#endif
include/view/view_controls.h
View file @
0ac3e1fb
...
...
@@ -34,7 +34,7 @@
#include <math/box2.h>
namespace
K
iGfx
namespace
K
IGFX
{
class
VIEW
;
...
...
@@ -167,6 +167,6 @@ protected:
/// How fast is panning when in auto mode
float
m_autoPanSpeed
;
};
}
// namespace K
iGfx
}
// namespace K
IGFX
#endif
include/view/view_group.h
View file @
0ac3e1fb
...
...
@@ -36,9 +36,8 @@
#include <view/view_item.h>
#include <deque>
namespace
K
iGfx
namespace
K
IGFX
{
class
VIEW_GROUP
:
public
VIEW_ITEM
{
public
:
...
...
@@ -146,7 +145,7 @@ public:
*
* @return Pointer to the VIEW instance.
*/
K
iGfx
::
VIEW
*
GetView
()
const
K
IGFX
::
VIEW
*
GetView
()
const
{
return
m_view
;
}
...
...
@@ -186,6 +185,6 @@ private:
/// Container for storing VIEW_ITEMs
std
::
set
<
VIEW_ITEM
*>
m_items
;
};
}
// namespace K
iGfx
}
// namespace K
IGFX
#endif // VIEW_GROUP_H_
include/view/view_item.h
View file @
0ac3e1fb
...
...
@@ -40,7 +40,8 @@
* Enum KICAD_T
* is the set of class identification values, stored in EDA_ITEM::m_StructType
*/
enum
KICAD_T
{
enum
KICAD_T
{
NOT_USED
=
-
1
,
///< the 3d code uses this value
EOT
=
0
,
///< search types array terminator (End Of Types)
...
...
@@ -134,7 +135,7 @@ enum KICAD_T {
};
namespace
K
iGfx
namespace
K
IGFX
{
// Forward declarations
class
GAL
;
...
...
@@ -347,7 +348,7 @@ protected:
*/
inline
virtual
bool
storesGroups
()
const
{
return
(
m_groupsSize
>
0
)
;
return
m_groupsSize
>
0
;
}
/// Stores layer numbers used by the item.
...
...
@@ -367,8 +368,7 @@ protected:
for
(
int
i
=
0
;
i
<
aCount
;
++
i
)
m_layers
.
set
(
aLayers
[
i
]
);
}
};
}
// namespace K
iGfx
}
// namespace K
IGFX
#endif
include/view/view_rtree.h
View file @
0ac3e1fb
...
...
@@ -29,7 +29,7 @@
#include <rtree.h>
namespace
K
iGfx
namespace
K
IGFX
{
typedef
RTree
<
VIEW_ITEM
*
,
int
,
2
,
float
>
VIEW_RTREE_BASE
;
...
...
@@ -88,6 +88,6 @@ public:
private
:
};
}
// namespace K
iGfx
}
// namespace K
IGFX
#endif
include/view/wx_view_controls.h
View file @
0ac3e1fb
...
...
@@ -38,7 +38,7 @@
class
EDA_DRAW_PANEL_GAL
;
namespace
K
iGfx
namespace
K
IGFX
{
/**
* Class WX_VIEW_CONTROLS
...
...
@@ -74,6 +74,7 @@ public:
void
SetAutoPan
(
bool
aEnabled
)
{
m_autoPanEnabled
=
aEnabled
;
if
(
m_state
==
AUTO_PANNING
)
m_state
=
IDLE
;
}
...
...
@@ -90,7 +91,8 @@ public:
private
:
/// Possible states for WX_VIEW_CONTROLS
enum
State
{
enum
State
{
IDLE
=
1
,
/// Nothing is happening
DRAG_PANNING
,
/// Panning with mouse button pressed
AUTO_PANNING
,
/// Panning on approaching borders of the frame
...
...
@@ -127,6 +129,6 @@ private:
/// Timer repsonsible for handling autopanning
wxTimer
m_panTimer
;
};
}
// namespace K
iGfx
}
// namespace K
IGFX
#endif
include/worksheet_viewitem.h
View file @
0ac3e1fb
...
...
@@ -40,7 +40,7 @@ class WS_DRAW_ITEM_RECT;
class
WS_DRAW_ITEM_POLYGON
;
class
WS_DRAW_ITEM_TEXT
;
namespace
K
iGfx
namespace
K
IGFX
{
class
GAL
;
...
...
pcbnew/basepcbframe.cpp
View file @
0ac3e1fb
...
...
@@ -172,7 +172,7 @@ void PCB_BASE_FRAME::SetBoard( BOARD* aBoard )
if
(
m_galCanvas
)
{
K
iGfx
::
VIEW
*
view
=
m_galCanvas
->
GetView
();
K
IGFX
::
VIEW
*
view
=
m_galCanvas
->
GetView
();
ViewReloadBoard
(
m_Pcb
);
...
...
@@ -185,7 +185,7 @@ void PCB_BASE_FRAME::SetBoard( BOARD* aBoard )
void
PCB_BASE_FRAME
::
ViewReloadBoard
(
const
BOARD
*
aBoard
)
const
{
K
iGfx
::
VIEW
*
view
=
m_galCanvas
->
GetView
();
K
IGFX
::
VIEW
*
view
=
m_galCanvas
->
GetView
();
view
->
Clear
();
// All of PCB drawing elements should be added to the VIEW
...
...
@@ -194,7 +194,7 @@ void PCB_BASE_FRAME::ViewReloadBoard( const BOARD* aBoard ) const
// Load zones
for
(
int
i
=
0
;
i
<
aBoard
->
GetAreaCount
();
++
i
)
{
view
->
Add
(
(
K
iGfx
::
VIEW_ITEM
*
)
(
aBoard
->
GetArea
(
i
)
)
);
view
->
Add
(
(
K
IGFX
::
VIEW_ITEM
*
)
(
aBoard
->
GetArea
(
i
)
)
);
}
// Load drawings
...
...
@@ -240,7 +240,7 @@ void PCB_BASE_FRAME::ViewReloadBoard( const BOARD* aBoard ) const
}
// Add an entry for the worksheet layout
K
iGfx
::
WORKSHEET_VIEWITEM
*
worksheet
=
new
KiGfx
::
WORKSHEET_VIEWITEM
(
K
IGFX
::
WORKSHEET_VIEWITEM
*
worksheet
=
new
KIGFX
::
WORKSHEET_VIEWITEM
(
std
::
string
(
aBoard
->
GetFileName
().
mb_str
()
),
std
::
string
(
GetScreenDesc
().
mb_str
()
),
&
GetPageSettings
(),
&
GetTitleBlock
()
);
...
...
@@ -520,10 +520,10 @@ void PCB_BASE_FRAME::OnTogglePadDrawMode( wxCommandEvent& aEvent )
m_DisplayPadFill
=
DisplayOpt
.
DisplayPadFill
=
!
m_DisplayPadFill
;
// Apply new display options to the GAL canvas
K
iGfx
::
PCB_PAINTER
*
painter
=
static_cast
<
K
iGfx
::
PCB_PAINTER
*>
(
m_galCanvas
->
GetView
()
->
GetPainter
()
);
K
iGfx
::
PCB_RENDER_SETTINGS
*
settings
=
static_cast
<
K
iGfx
::
PCB_RENDER_SETTINGS
*>
(
painter
->
GetSettings
()
);
K
IGFX
::
PCB_PAINTER
*
painter
=
static_cast
<
K
IGFX
::
PCB_PAINTER
*>
(
m_galCanvas
->
GetView
()
->
GetPainter
()
);
K
IGFX
::
PCB_RENDER_SETTINGS
*
settings
=
static_cast
<
K
IGFX
::
PCB_RENDER_SETTINGS
*>
(
painter
->
GetSettings
()
);
settings
->
LoadDisplayOptions
(
DisplayOpt
);
m_galCanvas
->
GetView
()
->
RecacheAllItems
(
true
);
...
...
@@ -856,13 +856,13 @@ void PCB_BASE_FRAME::LoadSettings()
m_DisplayModText
=
FILLED
;
// Apply display settings for GAL
K
iGfx
::
VIEW
*
view
=
m_galCanvas
->
GetView
();
K
IGFX
::
VIEW
*
view
=
m_galCanvas
->
GetView
();
// Set rendering order and properties of layers
for
(
LAYER_NUM
i
=
0
;
(
unsigned
)
i
<
sizeof
(
GAL_LAYER_ORDER
)
/
sizeof
(
LAYER_NUM
);
++
i
)
{
LAYER_NUM
layer
=
GAL_LAYER_ORDER
[
i
];
wxASSERT
(
layer
<
K
iGfx
::
VIEW
::
VIEW_MAX_LAYERS
);
wxASSERT
(
layer
<
K
IGFX
::
VIEW
::
VIEW_MAX_LAYERS
);
view
->
SetLayerOrder
(
layer
,
i
);
...
...
@@ -870,13 +870,13 @@ void PCB_BASE_FRAME::LoadSettings()
{
// Copper layers are required for netname layers
view
->
SetRequired
(
GetNetnameLayer
(
layer
),
layer
);
view
->
SetLayerTarget
(
layer
,
K
iGfx
::
TARGET_CACHED
);
view
->
SetLayerTarget
(
layer
,
K
IGFX
::
TARGET_CACHED
);
}
else
if
(
IsNetnameLayer
(
layer
)
)
{
// Netnames are drawn only when scale is sufficient (level of details)
// so there is no point in caching them
view
->
SetLayerTarget
(
layer
,
K
iGfx
::
TARGET_NONCACHED
);
view
->
SetLayerTarget
(
layer
,
K
IGFX
::
TARGET_NONCACHED
);
}
}
...
...
@@ -895,12 +895,12 @@ void PCB_BASE_FRAME::LoadSettings()
view
->
SetRequired
(
SOLDERPASTE_N_BACK
,
ITEM_GAL_LAYER
(
PAD_BK_VISIBLE
)
);
view
->
SetRequired
(
SOLDERMASK_N_BACK
,
ITEM_GAL_LAYER
(
PAD_BK_VISIBLE
)
);
view
->
SetLayerTarget
(
ITEM_GAL_LAYER
(
GP_OVERLAY
),
K
iGfx
::
TARGET_OVERLAY
);
view
->
SetLayerTarget
(
ITEM_GAL_LAYER
(
GP_OVERLAY
),
K
IGFX
::
TARGET_OVERLAY
);
// Apply layer coloring scheme & display options
if
(
view
->
GetPainter
()
)
{
K
iGfx
::
PCB_RENDER_SETTINGS
*
settings
=
new
KiGfx
::
PCB_RENDER_SETTINGS
();
K
IGFX
::
PCB_RENDER_SETTINGS
*
settings
=
new
KIGFX
::
PCB_RENDER_SETTINGS
();
// Load layers' colors from PCB data
settings
->
ImportLegacyColors
(
m_Pcb
->
GetColorsSettings
()
);
...
...
pcbnew/class_pcb_layer_widget.cpp
View file @
0ac3e1fb
...
...
@@ -396,7 +396,7 @@ void PCB_LAYER_WIDGET::OnLayerVisible( LAYER_NUM aLayer, bool isVisible, bool is
EDA_DRAW_PANEL_GAL
*
galCanvas
=
myframe
->
GetGalCanvas
();
if
(
galCanvas
)
{
K
iGfx
::
VIEW
*
view
=
galCanvas
->
GetView
();
K
IGFX
::
VIEW
*
view
=
galCanvas
->
GetView
();
view
->
SetLayerVisible
(
aLayer
,
isVisible
);
}
...
...
@@ -418,7 +418,7 @@ void PCB_LAYER_WIDGET::OnRenderEnable( int aId, bool isEnabled )
EDA_DRAW_PANEL_GAL
*
galCanvas
=
myframe
->
GetGalCanvas
();
if
(
galCanvas
)
{
K
iGfx
::
VIEW
*
view
=
galCanvas
->
GetView
();
K
IGFX
::
VIEW
*
view
=
galCanvas
->
GetView
();
view
->
SetLayerVisible
(
ITEM_GAL_LAYER
(
aId
),
isEnabled
);
}
...
...
pcbnew/dialogs/dialog_display_options.cpp
View file @
0ac3e1fb
...
...
@@ -170,10 +170,10 @@ void DIALOG_DISPLAY_OPTIONS::OnOkClick(wxCommandEvent& event)
DisplayOpt
.
DisplayNetNamesMode
=
m_ShowNetNamesOption
->
GetSelection
();
// Apply changes to the GAL
K
iGfx
::
VIEW
*
view
=
m_Parent
->
GetGalCanvas
()
->
GetView
();
K
iGfx
::
PCB_PAINTER
*
painter
=
static_cast
<
KiGfx
::
PCB_PAINTER
*>
(
view
->
GetPainter
()
);
K
iGfx
::
PCB_RENDER_SETTINGS
*
settings
=
static_cast
<
K
iGfx
::
PCB_RENDER_SETTINGS
*>
(
painter
->
GetSettings
()
);
K
IGFX
::
VIEW
*
view
=
m_Parent
->
GetGalCanvas
()
->
GetView
();
K
IGFX
::
PCB_PAINTER
*
painter
=
static_cast
<
KIGFX
::
PCB_PAINTER
*>
(
view
->
GetPainter
()
);
K
IGFX
::
PCB_RENDER_SETTINGS
*
settings
=
static_cast
<
K
IGFX
::
PCB_RENDER_SETTINGS
*>
(
painter
->
GetSettings
()
);
settings
->
LoadDisplayOptions
(
DisplayOpt
);
view
->
RecacheAllItems
(
true
);
...
...
pcbnew/dialogs/dialog_general_options.cpp
View file @
0ac3e1fb
...
...
@@ -159,10 +159,10 @@ void PCB_EDIT_FRAME::OnSelectOptionToolbar( wxCommandEvent& event )
{
int
id
=
event
.
GetId
();
bool
state
=
event
.
IsChecked
();
K
iGfx
::
PCB_PAINTER
*
painter
=
static_cast
<
K
iGfx
::
PCB_PAINTER
*>
(
m_galCanvas
->
GetView
()
->
GetPainter
()
);
K
iGfx
::
PCB_RENDER_SETTINGS
*
settings
=
static_cast
<
K
iGfx
::
PCB_RENDER_SETTINGS
*>
(
painter
->
GetSettings
()
);
K
IGFX
::
PCB_PAINTER
*
painter
=
static_cast
<
K
IGFX
::
PCB_PAINTER
*>
(
m_galCanvas
->
GetView
()
->
GetPainter
()
);
K
IGFX
::
PCB_RENDER_SETTINGS
*
settings
=
static_cast
<
K
IGFX
::
PCB_RENDER_SETTINGS
*>
(
painter
->
GetSettings
()
);
bool
recache
=
false
;
switch
(
id
)
...
...
pcbnew/pcb_painter.cpp
View file @
0ac3e1fb
...
...
@@ -41,7 +41,7 @@
#include <pcb_painter.h>
#include <gal/graphics_abstraction_layer.h>
using
namespace
K
iGfx
;
using
namespace
K
IGFX
;
PCB_RENDER_SETTINGS
::
PCB_RENDER_SETTINGS
()
{
...
...
pcbnew/pcb_painter.h
View file @
0ac3e1fb
...
...
@@ -49,7 +49,7 @@ class TEXTE_MODULE;
class
DIMENSION
;
class
PCB_TARGET
;
namespace
K
iGfx
namespace
K
IGFX
{
class
GAL
;
...
...
@@ -152,6 +152,6 @@ protected:
void
draw
(
const
DIMENSION
*
,
int
);
void
draw
(
const
PCB_TARGET
*
);
};
}
// namespace K
iGfx
}
// namespace K
IGFX
#endif
/* __CLASS_PAINTER_H */
pcbnew/pcbframe.cpp
View file @
0ac3e1fb
...
...
@@ -774,8 +774,8 @@ bool PCB_EDIT_FRAME::IsMicroViaAcceptable( void )
void
PCB_EDIT_FRAME
::
setHighContrastLayer
(
LAYER_NUM
aLayer
)
{
// Set display settings for high contrast mode
K
iGfx
::
VIEW
*
view
=
m_galCanvas
->
GetView
();
K
iGfx
::
RENDER_SETTINGS
*
rSettings
=
view
->
GetPainter
()
->
GetSettings
();
K
IGFX
::
VIEW
*
view
=
m_galCanvas
->
GetView
();
K
IGFX
::
RENDER_SETTINGS
*
rSettings
=
view
->
GetPainter
()
->
GetSettings
();
setTopLayer
(
aLayer
);
...
...
@@ -817,7 +817,7 @@ void PCB_EDIT_FRAME::setHighContrastLayer( LAYER_NUM aLayer )
void
PCB_EDIT_FRAME
::
setTopLayer
(
LAYER_NUM
aLayer
)
{
// Set display settings for high contrast mode
K
iGfx
::
VIEW
*
view
=
m_galCanvas
->
GetView
();
K
IGFX
::
VIEW
*
view
=
m_galCanvas
->
GetView
();
view
->
ClearTopLayers
();
view
->
SetTopLayer
(
aLayer
);
...
...
@@ -887,7 +887,7 @@ void PCB_EDIT_FRAME::syncLayerVisibilities()
{
m_Layers
->
SyncLayerVisibilities
();
K
iGfx
::
VIEW
*
view
=
m_galCanvas
->
GetView
();
K
IGFX
::
VIEW
*
view
=
m_galCanvas
->
GetView
();
// Load layer & elements visibility settings
for
(
LAYER_NUM
i
=
0
;
i
<
NB_LAYERS
;
++
i
)
{
...
...
pcbnew/router/direction.h
View file @
0ac3e1fb
...
...
@@ -329,4 +329,3 @@ private:
};
#endif // __DIRECTION_H
pcbnew/router/pns_index.h
View file @
0ac3e1fb
...
...
@@ -260,4 +260,3 @@ PNS_INDEX::NetItemsList* PNS_INDEX::GetItemsForNet( int aNet )
}
#endif
pcbnew/router/pns_item.cpp
View file @
0ac3e1fb
...
...
@@ -86,4 +86,3 @@ const std::string PNS_ITEM::GetKindStr() const
PNS_ITEM
::~
PNS_ITEM
()
{
}
pcbnew/router/pns_item.h
View file @
0ac3e1fb
...
...
@@ -150,9 +150,8 @@ protected:
PNS_NODE
*
m_owner
;
PNS_LAYERSET
m_layers
;
bool
m_movable
;
int
m_net
;
bool
m_movable
;
int
m_net
;
};
#endif // __PNS_ITEM_Ha
#endif // __PNS_ITEM_H
pcbnew/router/pns_itemset.cpp
View file @
0ac3e1fb
...
...
@@ -79,4 +79,3 @@ PNS_ITEMSET& PNS_ITEMSET::FilterNet( int aNet )
m_items
=
newItems
;
return
*
this
;
}
pcbnew/router/pns_itemset.h
View file @
0ac3e1fb
...
...
@@ -60,4 +60,3 @@ private:
};
#endif
pcbnew/router/pns_joint.h
View file @
0ac3e1fb
...
...
@@ -89,8 +89,8 @@ public:
m_linkedItems
[
1
]
->
GetKind
()
!=
SEGMENT
)
return
false
;
PNS_SEGMENT
*
seg1
=
static_cast
<
PNS_SEGMENT
*>
(
m_linkedItems
[
0
]
);
PNS_SEGMENT
*
seg2
=
static_cast
<
PNS_SEGMENT
*>
(
m_linkedItems
[
1
]
);
PNS_SEGMENT
*
seg1
=
static_cast
<
PNS_SEGMENT
*>
(
m_linkedItems
[
0
]
);
PNS_SEGMENT
*
seg2
=
static_cast
<
PNS_SEGMENT
*>
(
m_linkedItems
[
1
]
);
// joints between segments of different widths are not trivial.
return
seg1
->
GetWidth
()
==
seg2
->
GetWidth
();
...
...
@@ -166,7 +166,7 @@ public:
// fixme: duplicate links (?)
for
(
LinkedItems
::
const_iterator
i
=
aJoint
.
m_linkedItems
.
begin
();
i
!=
aJoint
.
m_linkedItems
.
end
();
++
i
)
i
!=
aJoint
.
m_linkedItems
.
end
();
++
i
)
m_linkedItems
.
push_back
(
*
i
);
}
...
...
@@ -204,4 +204,3 @@ inline std::size_t hash_value( PNS_JOINT::HashTag const& p )
}
#endif // __PNS_JOINT_H
pcbnew/router/pns_layerset.h
View file @
0ac3e1fb
...
...
@@ -117,4 +117,3 @@ private:
};
#endif // __PNS_LAYERSET_H
pcbnew/router/pns_line.cpp
View file @
0ac3e1fb
...
...
@@ -37,7 +37,7 @@ PNS_LINE* PNS_LINE::Clone() const
PNS_LINE
*
l
=
new
PNS_LINE
();
l
->
m_line
=
m_line
;
l
->
m_width
=
m_width
;
l
->
m_width
=
m_width
;
l
->
m_layers
=
m_layers
;
l
->
m_net
=
m_net
;
l
->
m_movable
=
m_movable
;
...
...
@@ -434,8 +434,8 @@ void PNS_LINE::NewWalkaround( const SHAPE_LINE_CHAIN& aObstacle,
path
.
Append
(
l_hull
.
CPoint
(
j
)
);
li
=
l_orig
.
Find
(
l_hull
.
CPoint
(
j
)
);
if
(
li
>=
0
&&
(
li
==
(
l_orig
.
PointCount
()
-
1
)
||
outside
[
li
+
1
])
)
if
(
li
>=
0
&&
(
li
==
(
l_orig
.
PointCount
()
-
1
)
||
outside
[
li
+
1
]
)
)
break
;
}
...
...
@@ -755,9 +755,8 @@ void PNS_LINE::ShowLinks()
return
;
}
printf
(
"line %p: %d linked segs
\n
"
,
this
,
(
int
)
m_segmentRefs
->
size
()
);
printf
(
"line %p: %d linked segs
\n
"
,
this
,
(
int
)
m_segmentRefs
->
size
()
);
for
(
int
i
=
0
;
i
<
(
int
)
m_segmentRefs
->
size
();
i
++
)
printf
(
"seg %d: %p
\n
"
,
i
,
(
*
m_segmentRefs
)[
i
]
);
}
pcbnew/router/pns_line.h
View file @
0ac3e1fb
...
...
@@ -261,4 +261,3 @@ private:
};
#endif // __PNS_LINE_H
pcbnew/router/pns_line_placer.cpp
View file @
0ac3e1fb
...
...
@@ -64,7 +64,7 @@ void PNS_LINE_PLACER::ApplySettings( const PNS_ROUTING_SETTINGS& aSettings )
void
PNS_LINE_PLACER
::
StartPlacement
(
const
VECTOR2I
&
aStart
,
int
aNet
,
int
aWidth
,
int
aLayer
)
int
aWidth
,
int
aLayer
)
{
m_direction
=
m_initial_direction
;
TRACE
(
1
,
"world %p, intitial-direction %s layer %d
\n
"
,
...
...
@@ -184,8 +184,7 @@ bool PNS_LINE_PLACER::handlePullback()
// case 2: regardless of the current routing direction, if the tail/head
// extremities form an acute or right angle, reduce the tail by one segment
// (and hope that further iterations) will result with a cleaner trace
bool
pullback_2
=
(
angle
==
DIRECTION_45
::
ANG_RIGHT
||
angle
==
DIRECTION_45
::
ANG_ACUTE
);
bool
pullback_2
=
(
angle
==
DIRECTION_45
::
ANG_RIGHT
||
angle
==
DIRECTION_45
::
ANG_ACUTE
);
if
(
pullback_1
||
pullback_2
)
{
...
...
@@ -380,7 +379,7 @@ bool PNS_LINE_PLACER::handleViaPlacement( PNS_LINE& aHead )
bool
PNS_LINE_PLACER
::
routeHead
(
const
VECTOR2I
&
aP
,
PNS_LINE
&
aNewHead
,
bool
aCwWalkaround
)
bool
aCwWalkaround
)
{
// STAGE 1: route a simple two-segment trace between m_p_start and aP...
SHAPE_LINE_CHAIN
line
=
m_direction
.
BuildInitialTrace
(
m_p_start
,
aP
);
...
...
@@ -677,4 +676,3 @@ PNS_NODE* PNS_LINE_PLACER::GetCurrentNode() const
{
return
m_shove
->
GetCurrentNode
();
}
pcbnew/router/pns_line_placer.h
View file @
0ac3e1fb
...
...
@@ -252,4 +252,3 @@ private:
};
#endif // __PNS_LINE_PLACER_H
pcbnew/router/pns_node.cpp
View file @
0ac3e1fb
...
...
@@ -72,7 +72,7 @@ PNS_NODE::~PNS_NODE()
allocNodes
.
erase
(
this
);
for
(
PNS_INDEX
::
ItemSet
::
iterator
i
=
m_index
->
begin
();
i
!=
m_index
->
end
();
++
i
)
i
!=
m_index
->
end
();
++
i
)
if
(
(
*
i
)
->
BelongsTo
(
this
)
)
delete
*
i
;
...
...
@@ -119,7 +119,7 @@ PNS_NODE* PNS_NODE::Branch()
JointMap
::
iterator
j
;
for
(
PNS_INDEX
::
ItemSet
::
iterator
i
=
m_index
->
begin
();
i
!=
m_index
->
end
();
++
i
)
i
!=
m_index
->
end
();
++
i
)
child
->
m_index
->
Add
(
*
i
);
child
->
m_joints
=
m_joints
;
...
...
@@ -307,9 +307,9 @@ PNS_NODE::OptObstacle PNS_NODE::NearestObstacle( const PNS_LINE* aItem, int aKin
{
found_isects
=
true
;
nearest
.
dist_first
=
dist
;
nearest
.
ip_first
=
isect
.
p
;
nearest
.
item
=
obs
.
item
;
nearest
.
hull
=
hull
;
nearest
.
ip_first
=
isect
.
p
;
nearest
.
item
=
obs
.
item
;
nearest
.
hull
=
hull
;
}
if
(
dist
>
dist_max
)
...
...
@@ -702,7 +702,7 @@ void PNS_NODE::FindLineEnds( PNS_LINE* aLine, PNS_JOINT& a, PNS_JOINT& b )
int
PNS_NODE
::
FindLinesBetweenJoints
(
PNS_JOINT
&
a
,
PNS_JOINT
&
b
,
vector
<
PNS_LINE
*>&
aLines
)
{
BOOST_FOREACH
(
PNS_ITEM
*
item
,
a
.
GetLinkList
()
)
BOOST_FOREACH
(
PNS_ITEM
*
item
,
a
.
GetLinkList
()
)
{
if
(
item
->
GetKind
()
==
PNS_ITEM
::
SEGMENT
)
{
...
...
@@ -844,11 +844,13 @@ void PNS_NODE::Dump( bool aLong )
}
if( !isRoot() )
{
for( i = m_root->m_items.begin(); i != m_root->m_items.end(); i++ )
{
if( (*i)->GetKind() == PNS_ITEM::SEGMENT && !overrides( *i ) )
all_segs.insert( static_cast<PNS_SEGMENT*>(*i) );
}
}
JointMap::iterator j;
...
...
@@ -880,7 +882,6 @@ void PNS_NODE::Dump( bool aLong )
}
int lines_count = 0;
while( !all_segs.empty() )
...
...
@@ -949,7 +950,7 @@ void PNS_NODE::Commit( PNS_NODE* aNode )
Remove
(
item
);
for
(
PNS_INDEX
::
ItemSet
::
iterator
i
=
aNode
->
m_index
->
begin
();
i
!=
aNode
->
m_index
->
end
();
++
i
)
i
!=
aNode
->
m_index
->
end
();
++
i
)
Add
(
*
i
);
releaseChildren
();
...
...
@@ -984,4 +985,3 @@ void PNS_NODE::AllItemsInNet( int aNet, std::list<PNS_ITEM*>& aItems )
}
}
pcbnew/router/pns_optimizer.cpp
View file @
0ac3e1fb
...
...
@@ -301,8 +301,8 @@ bool PNS_OPTIMIZER::mergeObtuse( PNS_LINE* aLine )
while
(
n
<
n_segs
-
step
)
{
const
SEG
s1
=
current_path
.
CSegment
(
n
);
const
SEG
s2
=
current_path
.
CSegment
(
n
+
step
);
const
SEG
s1
=
current_path
.
CSegment
(
n
);
const
SEG
s2
=
current_path
.
CSegment
(
n
+
step
);
SEG
s1opt
,
s2opt
;
if
(
DIRECTION_45
(
s1
).
IsObtuse
(
DIRECTION_45
(
s2
)
)
)
...
...
@@ -512,8 +512,8 @@ PNS_OPTIMIZER::BreakoutList PNS_OPTIMIZER::rectBreakouts( int aWidth,
VECTOR2I
d_offset
;
d_offset
.
x
=
(
s
.
x
>
s
.
y
)
?
(
s
.
x
-
s
.
y
)
/
2
:
0
;
d_offset
.
y
=
(
s
.
x
<
s
.
y
)
?
(
s
.
y
-
s
.
x
)
/
2
:
0
;
d_offset
.
x
=
(
s
.
x
>
s
.
y
)
?
(
s
.
x
-
s
.
y
)
/
2
:
0
;
d_offset
.
y
=
(
s
.
x
<
s
.
y
)
?
(
s
.
y
-
s
.
x
)
/
2
:
0
;
VECTOR2I
d_vert
=
VECTOR2I
(
0
,
s
.
y
/
2
+
aWidth
);
VECTOR2I
d_horiz
=
VECTOR2I
(
s
.
x
/
2
+
aWidth
,
0
);
...
...
@@ -601,7 +601,7 @@ PNS_ITEM* PNS_OPTIMIZER::findPadOrVia( int aLayer, int aNet, const VECTOR2I& aP
if
(
!
jt
)
return
NULL
;
BOOST_FOREACH
(
PNS_ITEM
*
item
,
jt
->
GetLinkList
()
)
BOOST_FOREACH
(
PNS_ITEM
*
item
,
jt
->
GetLinkList
()
)
{
if
(
item
->
GetKind
()
==
PNS_ITEM
::
VIA
||
item
->
GetKind
()
==
PNS_ITEM
::
SOLID
)
return
item
;
...
...
@@ -680,10 +680,10 @@ int PNS_OPTIMIZER::smartPadsSingle( PNS_LINE* aLine, PNS_ITEM* aPad, bool aEnd,
}
SHAPE_LINE_CHAIN
l_best
;
bool
found
=
false
;
int
p_best
=
-
1
;
bool
found
=
false
;
int
p_best
=
-
1
;
BOOST_FOREACH
(
RtVariant
&
vp
,
variants
)
BOOST_FOREACH
(
RtVariant
&
vp
,
variants
)
{
PNS_LINE
tmp
(
*
aLine
,
vp
.
second
);
int
cost
=
PNS_COST_ESTIMATOR
::
CornerCost
(
vp
.
second
);
...
...
@@ -761,4 +761,3 @@ bool PNS_OPTIMIZER::Optimize( PNS_LINE* aLine, int aEffortLevel, PNS_NODE* aWorl
opt
.
SetCollisionMask
(
-
1
);
return
opt
.
Optimize
(
aLine
);
}
pcbnew/router/pns_optimizer.h
View file @
0ac3e1fb
...
...
@@ -164,4 +164,3 @@ private:
};
#endif
pcbnew/router/pns_router.cpp
View file @
0ac3e1fb
...
...
@@ -105,20 +105,20 @@ PNS_ITEM* PNS_ROUTER::syncPad( D_PAD* aPad )
case
PAD_SMD
:
case
PAD_CONN
:
{
LAYER_MSK
lmsk
=
aPad
->
GetLayerMask
();
int
i
;
for
(
i
=
FIRST_COPPER_LAYER
;
i
<=
LAST_COPPER_LAYER
;
i
++
)
if
(
lmsk
&
(
1
<<
i
)
)
{
layers
=
PNS_LAYERSET
(
i
);
break
;
}
{
LAYER_MSK
lmsk
=
aPad
->
GetLayerMask
();
int
i
;
break
;
}
for
(
i
=
FIRST_COPPER_LAYER
;
i
<=
LAST_COPPER_LAYER
;
i
++
)
{
if
(
lmsk
&
(
1
<<
i
)
)
{
layers
=
PNS_LAYERSET
(
i
);
break
;
}
}
break
;
}
default
:
TRACE
(
0
,
"unsupported pad type 0x%x"
,
aPad
->
GetAttribute
()
);
...
...
@@ -280,9 +280,9 @@ PNS_ROUTER::PNS_ROUTER()
m_clearanceFunc
=
NULL
;
m_currentLayer
=
1
;
m_placingVia
=
false
;
m_currentNet
=
-
1
;
m_currentLayer
=
1
;
m_placingVia
=
false
;
m_currentNet
=
-
1
;
m_state
=
IDLE
;
m_world
=
NULL
;
m_placer
=
NULL
;
...
...
@@ -294,7 +294,7 @@ PNS_ROUTER::PNS_ROUTER()
}
void
PNS_ROUTER
::
SetView
(
K
iGfx
::
VIEW
*
aView
)
void
PNS_ROUTER
::
SetView
(
K
IGFX
::
VIEW
*
aView
)
{
if
(
m_previewItems
)
{
...
...
@@ -303,7 +303,7 @@ void PNS_ROUTER::SetView( KiGfx::VIEW* aView )
}
m_view
=
aView
;
m_previewItems
=
new
K
iGfx
::
VIEW_GROUP
(
m_view
);
m_previewItems
=
new
K
IGFX
::
VIEW_GROUP
(
m_view
);
m_previewItems
->
SetLayer
(
ITEM_GAL_LAYER
(
GP_OVERLAY
)
);
m_view
->
Add
(
m_previewItems
);
m_previewItems
->
ViewSetVisible
(
true
);
...
...
@@ -386,7 +386,7 @@ const VECTOR2I PNS_ROUTER::SnapToItem( PNS_ITEM* item, VECTOR2I aP, bool& aSplit
case
PNS_ITEM
:
:
SEGMENT
:
{
PNS_SEGMENT
*
seg
=
static_cast
<
PNS_SEGMENT
*>
(
item
);
PNS_SEGMENT
*
seg
=
static_cast
<
PNS_SEGMENT
*>
(
item
);
const
SEG
&
s
=
seg
->
GetSeg
();
int
w
=
seg
->
GetWidth
();
...
...
@@ -462,7 +462,7 @@ void PNS_ROUTER::EraseView()
if
(
m_previewItems
)
m_previewItems
->
FreeItems
();
m_previewItems
->
ViewUpdate
(
K
iGfx
::
VIEW_ITEM
::
GEOMETRY
);
m_previewItems
->
ViewUpdate
(
K
IGFX
::
VIEW_ITEM
::
GEOMETRY
);
}
...
...
@@ -476,7 +476,7 @@ void PNS_ROUTER::DisplayItem( const PNS_ITEM* aItem, bool aIsHead )
pitem
->
MarkAsHead
();
pitem
->
ViewSetVisible
(
true
);
m_previewItems
->
ViewUpdate
(
K
iGfx
::
VIEW_ITEM
::
GEOMETRY
|
KiGfx
::
VIEW_ITEM
::
APPEARANCE
);
m_previewItems
->
ViewUpdate
(
K
IGFX
::
VIEW_ITEM
::
GEOMETRY
|
KIGFX
::
VIEW_ITEM
::
APPEARANCE
);
}
...
...
@@ -487,7 +487,7 @@ void PNS_ROUTER::DisplayDebugLine( const SHAPE_LINE_CHAIN& aLine, int aType, int
pitem
->
DebugLine
(
aLine
,
aWidth
,
aType
);
m_previewItems
->
Add
(
pitem
);
pitem
->
ViewSetVisible
(
true
);
m_previewItems
->
ViewUpdate
(
K
iGfx
::
VIEW_ITEM
::
GEOMETRY
|
KiGfx
::
VIEW_ITEM
::
APPEARANCE
);
m_previewItems
->
ViewUpdate
(
K
IGFX
::
VIEW_ITEM
::
GEOMETRY
|
KIGFX
::
VIEW_ITEM
::
APPEARANCE
);
}
...
...
@@ -523,7 +523,8 @@ void PNS_ROUTER::Move( const VECTOR2I& aP, PNS_ITEM* endItem )
m_placer
->
GetCurrentNode
()
->
GetUpdatedItems
(
removed
,
added
);
BOOST_FOREACH
(
PNS_ITEM
*
item
,
added
)
{
BOOST_FOREACH
(
PNS_ITEM
*
item
,
added
)
{
DisplayItem
(
item
);
}
...
...
@@ -537,7 +538,7 @@ void PNS_ROUTER::Move( const VECTOR2I& aP, PNS_ITEM* endItem )
m_hiddenItems
.
insert
(
parent
);
parent
->
ViewSetVisible
(
false
);
parent
->
ViewUpdate
(
K
iGfx
::
VIEW_ITEM
::
APPEARANCE
);
parent
->
ViewUpdate
(
K
IGFX
::
VIEW_ITEM
::
APPEARANCE
);
}
}
}
...
...
@@ -552,7 +553,7 @@ void PNS_ROUTER::splitAdjacentSegments( PNS_NODE* aNode, PNS_ITEM* aSeg, const V
if
(
jt
&&
jt
->
LinkCount
()
>=
1
)
return
;
PNS_SEGMENT
*
s_old
=
static_cast
<
PNS_SEGMENT
*>
(
aSeg
);
PNS_SEGMENT
*
s_old
=
static_cast
<
PNS_SEGMENT
*>
(
aSeg
);
PNS_SEGMENT
*
s_new
[
2
];
s_new
[
0
]
=
s_old
->
Clone
();
...
...
@@ -627,7 +628,7 @@ void PNS_ROUTER::commitRouting( PNS_NODE* aNode )
newBI
->
ClearFlags
();
m_view
->
Add
(
newBI
);
m_board
->
Add
(
newBI
);
newBI
->
ViewUpdate
(
K
iGfx
::
VIEW_ITEM
::
GEOMETRY
);
newBI
->
ViewUpdate
(
K
IGFX
::
VIEW_ITEM
::
GEOMETRY
);
}
}
...
...
@@ -770,8 +771,8 @@ void PNS_ROUTER::FlipPosture()
if
(
m_placer
->
GetTail
().
GetCLine
().
SegmentCount
()
==
0
)
{
m_start_diagonal
=
!
m_start_diagonal
;
m_placer
->
SetInitialDirection
(
m_start_diagonal
?
DIRECTION_45
(
DIRECTION_45
::
NE
)
:
DIRECTION_45
(
DIRECTION_45
::
N
)
);
m_placer
->
SetInitialDirection
(
m_start_diagonal
?
DIRECTION_45
(
DIRECTION_45
::
NE
)
:
DIRECTION_45
(
DIRECTION_45
::
N
)
);
}
else
m_placer
->
FlipPosture
();
...
...
@@ -789,12 +790,12 @@ void PNS_ROUTER::SwitchLayer( int layer )
break
;
case
ROUTE_TRACK
:
if
(
m_startsOnVia
)
{
m_currentLayer
=
layer
;
m_placer
->
StartPlacement
(
m_currentStart
,
m_currentNet
,
m_currentWidth
,
m_currentLayer
);
}
if
(
m_startsOnVia
)
{
m_currentLayer
=
layer
;
m_placer
->
StartPlacement
(
m_currentStart
,
m_currentNet
,
m_currentWidth
,
m_currentLayer
);
}
default
:
break
;
...
...
@@ -810,4 +811,3 @@ void PNS_ROUTER::ToggleViaPlacement()
m_placer
->
AddVia
(
m_placingVia
,
m_currentViaDiameter
,
m_currentViaDrill
);
}
}
pcbnew/router/pns_router.h
View file @
0ac3e1fb
...
...
@@ -48,7 +48,7 @@ class PNS_VIA;
class
PNS_CLEARANCE_FUNC
;
class
VIEW_GROUP
;
namespace
K
iGfx
{
namespace
K
IGFX
{
class
VIEW
;
class
VIEW_GROUP
;
};
...
...
@@ -81,7 +81,7 @@ public:
void
SetBoard
(
BOARD
*
aBoard
);
void
SyncWorld
();
void
SetView
(
K
iGfx
::
VIEW
*
aView
);
void
SetView
(
K
IGFX
::
VIEW
*
aView
);
bool
RoutingInProgress
()
const
;
void
StartRouting
(
const
VECTOR2I
&
aP
,
PNS_ITEM
*
aItem
);
...
...
@@ -142,7 +142,7 @@ private:
// optHoverItem queryHoverItemEx(const VECTOR2I& aP);
PNS_ITEM
*
pickSingleItem
(
PNS_ITEMSET
&
aItems
)
const
;
// std::vector<PNS_ITEM*> aItems) const;
PNS_ITEM
*
pickSingleItem
(
PNS_ITEMSET
&
aItems
)
const
;
// std::vector<PNS_ITEM*> aItems) const;
void
splitAdjacentSegments
(
PNS_NODE
*
aNode
,
PNS_ITEM
*
aSeg
,
const
VECTOR2I
&
aP
);
// optHoverItem& aItem);
void
commitRouting
(
PNS_NODE
*
aNode
);
PNS_NODE
*
removeLoops
(
PNS_NODE
*
aNode
,
PNS_SEGMENT
*
aLatestSeg
);
...
...
@@ -173,8 +173,8 @@ private:
PNS_NODE
*
m_world
;
PNS_LINE_PLACER
*
m_placer
;
K
iGfx
::
VIEW
*
m_view
;
K
iGfx
::
VIEW_GROUP
*
m_previewItems
;
K
IGFX
::
VIEW
*
m_view
;
K
IGFX
::
VIEW_GROUP
*
m_previewItems
;
VECTOR2I
m_currentEnd
;
VECTOR2I
m_currentStart
;
...
...
@@ -191,4 +191,3 @@ private:
};
#endif
pcbnew/router/pns_routing_settings.h
View file @
0ac3e1fb
...
...
@@ -51,4 +51,3 @@ public:
};
#endif
pcbnew/router/pns_segment.h
View file @
0ac3e1fb
...
...
@@ -122,4 +122,3 @@ private:
};
#endif
pcbnew/router/pns_shove.cpp
View file @
0ac3e1fb
...
...
@@ -491,4 +491,3 @@ PNS_SHOVE::ShoveStatus PNS_SHOVE::ShoveLines( PNS_LINE* aCurrentHead )
return
SH_INCOMPLETE
;
}
}
pcbnew/router/pns_shove.h
View file @
0ac3e1fb
...
...
@@ -83,4 +83,3 @@ private:
};
#endif
pcbnew/router/pns_solid.cpp
View file @
0ac3e1fb
...
...
@@ -60,4 +60,3 @@ PNS_ITEM* PNS_SOLID::Clone() const
// solids are never cloned as the shove algorithm never moves them
assert
(
false
);
}
pcbnew/router/pns_solid.h
View file @
0ac3e1fb
...
...
@@ -68,4 +68,3 @@ private:
};
#endif
pcbnew/router/pns_utils.cpp
View file @
0ac3e1fb
...
...
@@ -42,4 +42,3 @@ const SHAPE_LINE_CHAIN OctagonalHull( const VECTOR2I& aP0,
return
s
;
}
pcbnew/router/pns_utils.h
View file @
0ac3e1fb
...
...
@@ -30,4 +30,3 @@ const SHAPE_LINE_CHAIN OctagonalHull( const VECTOR2I& aP0, const VECTOR2I& aSize
int
aClearance
,
int
aChamfer
);
#endif // __PNS_UTILS_H
pcbnew/router/pns_walkaround.cpp
View file @
0ac3e1fb
...
...
@@ -75,9 +75,9 @@ PNS_WALKAROUND::WalkaroundStatus PNS_WALKAROUND::singleStep( PNS_LINE& aPath,
}
aPath
.
NewWalkaround
(
current_obs
->
hull
,
path_pre
[
0
],
path_walk
[
0
],
path_post
[
0
],
aWindingDirection
);
path_post
[
0
],
aWindingDirection
);
aPath
.
NewWalkaround
(
current_obs
->
hull
,
path_pre
[
1
],
path_walk
[
1
],
path_post
[
1
],
!
aWindingDirection
);
path_post
[
1
],
!
aWindingDirection
);
int
len_pre
=
path_walk
[
0
].
Length
();
int
len_alt
=
path_walk
[
1
].
Length
();
...
...
@@ -196,13 +196,13 @@ PNS_WALKAROUND::WalkaroundStatus PNS_WALKAROUND::Route( const PNS_LINE& aInitial
const
SEG
s
=
l
.
Segment
(
i
);
VECTOR2I
nearest
=
s
.
NearestPoint
(
m_cursorPos
);
VECTOR2I
::
extended_type
dist_a
=
(
s
.
a
-
m_cursorPos
).
SquaredEuclideanNorm
();
VECTOR2I
::
extended_type
dist_b
=
(
s
.
b
-
m_cursorPos
).
SquaredEuclideanNorm
();
VECTOR2I
::
extended_type
dist_n
=
(
nearest
-
m_cursorPos
).
SquaredEuclideanNorm
();
VECTOR2I
::
extended_type
dist_a
=
(
s
.
a
-
m_cursorPos
).
SquaredEuclideanNorm
();
VECTOR2I
::
extended_type
dist_b
=
(
s
.
b
-
m_cursorPos
).
SquaredEuclideanNorm
();
VECTOR2I
::
extended_type
dist_n
=
(
nearest
-
m_cursorPos
).
SquaredEuclideanNorm
();
if
(
dist_n
<=
dist_a
&&
dist_n
<
dist_b
)
{
// PNSDisplayDebugLine(
l, 3
);
// PNSDisplayDebugLine(
l, 3
);
l
.
Remove
(
i
+
1
,
-
1
);
l
.
Append
(
nearest
);
l
.
Simplify
();
...
...
@@ -228,4 +228,3 @@ PNS_WALKAROUND::WalkaroundStatus PNS_WALKAROUND::Route( const PNS_LINE& aInitial
return
st
;
}
pcbnew/router/pns_walkaround.h
View file @
0ac3e1fb
...
...
@@ -95,4 +95,3 @@ private:
};
#endif // __PNS_WALKAROUND_H
pcbnew/router/router_preview_item.cpp
View file @
0ac3e1fb
...
...
@@ -29,7 +29,7 @@
#include "pns_segment.h"
#include "pns_via.h"
using
namespace
K
iGfx
;
using
namespace
K
IGFX
;
ROUTER_PREVIEW_ITEM
::
ROUTER_PREVIEW_ITEM
(
const
PNS_ITEM
*
aItem
,
VIEW_GROUP
*
aParent
)
:
EDA_ITEM
(
NOT_USED
)
...
...
@@ -115,7 +115,7 @@ const BOX2I ROUTER_PREVIEW_ITEM::ViewBBox() const
}
void
ROUTER_PREVIEW_ITEM
::
ViewDraw
(
int
aLayer
,
K
iGfx
::
GAL
*
aGal
)
const
void
ROUTER_PREVIEW_ITEM
::
ViewDraw
(
int
aLayer
,
K
IGFX
::
GAL
*
aGal
)
const
{
switch
(
m_type
)
{
...
...
@@ -227,4 +227,3 @@ const COLOR4D ROUTER_PREVIEW_ITEM::assignColor( int aStyle ) const
return
color
;
}
pcbnew/router/router_preview_item.h
View file @
0ac3e1fb
...
...
@@ -56,7 +56,7 @@ public:
PR_SUGGESTION
=
1
};
ROUTER_PREVIEW_ITEM
(
const
PNS_ITEM
*
aItem
=
NULL
,
K
iGfx
::
VIEW_GROUP
*
aParent
=
NULL
);
ROUTER_PREVIEW_ITEM
(
const
PNS_ITEM
*
aItem
=
NULL
,
K
IGFX
::
VIEW_GROUP
*
aParent
=
NULL
);
~
ROUTER_PREVIEW_ITEM
();
void
Update
(
const
PNS_ITEM
*
aItem
);
...
...
@@ -69,7 +69,7 @@ public:
const
BOX2I
ViewBBox
()
const
;
virtual
void
ViewDraw
(
int
aLayer
,
K
iGfx
::
GAL
*
aGal
)
const
;
virtual
void
ViewDraw
(
int
aLayer
,
K
IGFX
::
GAL
*
aGal
)
const
;
virtual
void
ViewGetLayers
(
int
aLayers
[],
int
&
aCount
)
const
{
...
...
@@ -80,10 +80,10 @@ public:
void
MarkAsHead
();
private
:
const
K
iGfx
::
COLOR4D
assignColor
(
int
aStyle
)
const
;
const
K
iGfx
::
COLOR4D
getLayerColor
(
int
aLayer
)
const
;
const
K
IGFX
::
COLOR4D
assignColor
(
int
aStyle
)
const
;
const
K
IGFX
::
COLOR4D
getLayerColor
(
int
aLayer
)
const
;
K
iGfx
::
VIEW_GROUP
*
m_parent
;
K
IGFX
::
VIEW_GROUP
*
m_parent
;
PNS_ROUTER
*
m_router
;
SHAPE_LINE_CHAIN
m_line
;
...
...
@@ -93,11 +93,10 @@ private:
int
m_width
;
int
m_layer
;
K
iGfx
::
COLOR4D
m_color
;
K
IGFX
::
COLOR4D
m_color
;
VECTOR2I
m_stuckPosition
;
VECTOR2I
m_viaCenter
;
};
#endif
pcbnew/router/router_tool.cpp
View file @
0ac3e1fb
...
...
@@ -38,7 +38,7 @@
#include "pns_router.h"
#include "trace.h"
using
namespace
K
iGfx
;
using
namespace
K
IGFX
;
using
namespace
std
;
using
boost
::
optional
;
...
...
pcbnew/router/router_tool.h
View file @
0ac3e1fb
...
...
@@ -77,4 +77,3 @@ private:
};
#endif
pcbnew/router/trace.h
View file @
0ac3e1fb
...
...
@@ -27,13 +27,13 @@
#include <iostream>
#include <boost/format.hpp>
static
void
_trace_print
(
const
char
*
funcName
,
int
level
,
const
std
::
string
&
m
sg
)
static
void
_trace_print
(
const
char
*
aFuncName
,
int
level
,
const
std
::
string
&
aM
sg
)
{
std
::
cerr
<<
"trace["
<<
level
<<
"]: "
<<
funcName
<<
": "
<<
m
sg
<<
std
::
endl
;
std
::
cerr
<<
"trace["
<<
level
<<
"]: "
<<
aFuncName
<<
": "
<<
aM
sg
<<
std
::
endl
;
}
#define TRACE( level, fmt, ... ) \
_trace_print( __FUNCTION__, level, (
boost::format( fmt ) % __VA_ARGS__
).str() );
_trace_print( __FUNCTION__, level, (
boost::format( fmt ) % __VA_ARGS__
).str() );
#define TRACEn( level, msg ) \
_trace_print( __FUNCTION__, level, std::string( msg ) );
...
...
pcbnew/tools/bright_box.cpp
View file @
0ac3e1fb
...
...
@@ -26,18 +26,18 @@
#include <gal/graphics_abstraction_layer.h>
#include <class_track.h>
using
namespace
K
iGfx
;
using
namespace
K
IGFX
;
BRIGHT_BOX
::
BRIGHT_BOX
(
BOARD_ITEM
*
aItem
)
:
EDA_ITEM
(
NOT_USED
),
// this item is never added to a BOARD so it needs no type
item
(
aItem
)
EDA_ITEM
(
NOT_USED
),
// this item is never added to a BOARD so it needs no type
item
(
aItem
)
{
}
const
BOX2I
BRIGHT_BOX
::
ViewBBox
()
const
{
return
item
->
ViewBBox
();
return
item
->
ViewBBox
();
}
...
...
@@ -69,4 +69,5 @@ void BRIGHT_BOX::ViewDraw( int aLayer, GAL* aGal ) const
}
}
const
COLOR4D
BRIGHT_BOX
::
BrightColor
=
KiGfx
::
COLOR4D
(
0.0
,
1.0
,
0.0
,
1.0
);
const
COLOR4D
BRIGHT_BOX
::
BrightColor
=
KIGFX
::
COLOR4D
(
0.0
,
1.0
,
0.0
,
1.0
);
pcbnew/tools/bright_box.h
View file @
0ac3e1fb
...
...
@@ -44,7 +44,7 @@ public:
virtual
const
BOX2I
ViewBBox
()
const
;
void
ViewDraw
(
int
aLayer
,
K
iGfx
::
GAL
*
aGal
)
const
;
void
ViewDraw
(
int
aLayer
,
K
IGFX
::
GAL
*
aGal
)
const
;
void
ViewGetLayers
(
int
aLayers
[],
int
&
aCount
)
const
;
void
Show
(
int
x
,
std
::
ostream
&
st
)
const
...
...
@@ -53,7 +53,7 @@ public:
private
:
static
const
int
BrightBoxLayer
=
ITEM_GAL_LAYER
(
GP_OVERLAY
);
static
const
K
iGfx
::
COLOR4D
BrightColor
;
static
const
K
IGFX
::
COLOR4D
BrightColor
;
static
const
double
LineWidth
=
100000
.
0
;
BOARD_ITEM
*
item
;
...
...
pcbnew/tools/common_actions.cpp
View file @
0ac3e1fb
...
...
@@ -27,18 +27,18 @@
// Selection tool actions
TOOL_ACTION
COMMON_ACTIONS
::
selectionActivate
(
"pcbnew.InteractiveSelection"
,
AS_GLOBAL
,
'S'
,
"Selection tool"
,
"Allows to select items"
);
AS_GLOBAL
,
'S'
,
"Selection tool"
,
"Allows to select items"
);
// Move tool actions
TOOL_ACTION
COMMON_ACTIONS
::
moveActivate
(
"pcbnew.InteractiveMove"
,
AS_GLOBAL
,
'M'
,
"Move"
,
"Moves the selected item(s)"
);
AS_GLOBAL
,
'M'
,
"Move"
,
"Moves the selected item(s)"
);
TOOL_ACTION
COMMON_ACTIONS
::
rotate
(
"pcbnew.InteractiveMove.rotate"
,
AS_CONTEXT
,
' '
,
"Rotate"
,
"Rotates selected item(s)"
);
AS_CONTEXT
,
' '
,
"Rotate"
,
"Rotates selected item(s)"
);
TOOL_ACTION
COMMON_ACTIONS
::
flip
(
"pcbnew.InteractiveMove.flip"
,
AS_CONTEXT
,
'F'
,
"Flip"
,
"Flips selected item(s)"
);
AS_CONTEXT
,
'F'
,
"Flip"
,
"Flips selected item(s)"
);
pcbnew/tools/item_state.h
View file @
0ac3e1fb
...
...
@@ -73,6 +73,7 @@ public:
std
::
deque
<
BOARD_ITEM
*>::
iterator
it
,
it_end
;
std
::
deque
<
COMMAND
>::
iterator
cmd
,
cmd_end
;
for
(
it
=
m_items
.
begin
(),
it_end
=
m_items
.
end
();
it
!=
it_end
;
++
it
)
{
for
(
cmd
=
m_commands
.
begin
(),
cmd_end
=
m_commands
.
end
();
cmd
!=
cmd_end
;
++
cmd
)
...
...
@@ -105,6 +106,7 @@ public:
m_canSave
=
false
;
#endif
std
::
deque
<
BOARD_ITEM
*>::
iterator
it
,
it_end
;
for
(
it
=
m_items
.
begin
(),
it_end
=
m_items
.
end
();
it
!=
it_end
;
++
it
)
(
*
it
)
->
Move
(
wxPoint
(
aMovement
.
x
,
aMovement
.
y
)
);
...
...
@@ -126,6 +128,7 @@ public:
m_commands
.
push_front
(
COMMAND
(
COMMAND
::
ROTATE
,
aPoint
,
aAngle
)
);
std
::
deque
<
BOARD_ITEM
*>::
iterator
it
,
it_end
;
for
(
it
=
m_items
.
begin
(),
it_end
=
m_items
.
end
();
it
!=
it_end
;
++
it
)
(
*
it
)
->
Rotate
(
wxPoint
(
aPoint
.
x
,
aPoint
.
y
),
aAngle
);
...
...
@@ -147,6 +150,7 @@ public:
m_commands
.
push_front
(
COMMAND
(
COMMAND
::
FLIP
,
aPoint
)
);
std
::
deque
<
BOARD_ITEM
*>::
iterator
it
,
it_end
;
for
(
it
=
m_items
.
begin
(),
it_end
=
m_items
.
end
();
it
!=
it_end
;
++
it
)
(
*
it
)
->
Flip
(
wxPoint
(
aPoint
.
x
,
aPoint
.
y
)
);
...
...
@@ -166,6 +170,7 @@ public:
m_commands
.
push_front
(
COMMAND
(
COMMAND
::
VISIBILITY
)
);
std
::
deque
<
BOARD_ITEM
*>::
iterator
it
,
it_end
;
for
(
it
=
m_items
.
begin
(),
it_end
=
m_items
.
end
();
it
!=
it_end
;
++
it
)
(
*
it
)
->
ViewSetVisible
(
!
(
*
it
)
->
ViewIsVisible
()
);
}
...
...
@@ -177,14 +182,14 @@ public:
* them properly.
* @return Flag required to refresh items.
*/
K
iGfx
::
VIEW_ITEM
::
ViewUpdateFlags
GetUpdateFlag
()
const
K
IGFX
::
VIEW_ITEM
::
ViewUpdateFlags
GetUpdateFlag
()
const
{
if
(
m_flips
%
2
==
1
)
// If number of flips is odd, then we need to change layers
return
K
iGfx
::
VIEW_ITEM
::
LAYERS
;
if
(
m_flips
%
2
==
1
)
// If number of flips is odd, then we need to change layers
return
K
IGFX
::
VIEW_ITEM
::
LAYERS
;
else
if
(
m_movement
.
x
!=
0
.
0
||
m_movement
.
y
!=
0
.
0
||
m_rotation
!=
0
.
0
)
return
K
iGfx
::
VIEW_ITEM
::
GEOMETRY
;
return
K
IGFX
::
VIEW_ITEM
::
GEOMETRY
;
return
K
iGfx
::
VIEW_ITEM
::
APPEARANCE
;
return
K
IGFX
::
VIEW_ITEM
::
APPEARANCE
;
}
private
:
...
...
pcbnew/tools/move_tool.cpp
View file @
0ac3e1fb
...
...
@@ -31,11 +31,11 @@
#include "selection_tool.h"
#include "move_tool.h"
using
namespace
K
iGfx
;
using
namespace
K
IGFX
;
using
boost
::
optional
;
MOVE_TOOL
::
MOVE_TOOL
()
:
TOOL_INTERACTIVE
(
"pcbnew.InteractiveMove"
),
m_selectionTool
(
NULL
)
TOOL_INTERACTIVE
(
"pcbnew.InteractiveMove"
),
m_selectionTool
(
NULL
)
{
}
...
...
@@ -79,8 +79,9 @@ bool MOVE_TOOL::Init()
int
MOVE_TOOL
::
Main
(
TOOL_EVENT
&
aEvent
)
{
const
SELECTION_TOOL
::
SELECTION
&
selection
=
m_selectionTool
->
GetSelection
();
if
(
selection
.
Empty
()
)
return
0
;
// there are no items to operate on
return
0
;
// there are no items to operate on
VECTOR2D
dragPosition
;
bool
dragging
=
false
;
...
...
@@ -96,8 +97,8 @@ int MOVE_TOOL::Main( TOOL_EVENT& aEvent )
{
if
(
evt
->
IsCancel
()
)
{
restore
=
true
;
// Cancelling the tool means that items have to be restored
break
;
// Finish
restore
=
true
;
// Cancelling the tool means that items have to be restored
break
;
// Finish
}
// Dispatch TOOL_ACTIONs
...
...
@@ -129,6 +130,7 @@ int MOVE_TOOL::Main( TOOL_EVENT& aEvent )
{
// Prepare to drag
std
::
set
<
BOARD_ITEM
*>::
iterator
it
;
for
(
it
=
selection
.
items
.
begin
();
it
!=
selection
.
items
.
end
();
++
it
)
{
// Save the state of the selected items, in case it has to be restored
...
...
@@ -142,7 +144,7 @@ int MOVE_TOOL::Main( TOOL_EVENT& aEvent )
dragPosition
=
evt
->
Position
();
}
else
if
(
evt
->
IsMouseUp
(
MB_Left
)
||
evt
->
IsClick
(
MB_Left
)
)
break
;
// Finish
break
;
// Finish
}
if
(
restore
)
...
...
pcbnew/tools/move_tool.h
View file @
0ac3e1fb
...
...
@@ -33,7 +33,7 @@
class
BOARD_ITEM
;
class
SELECTION_TOOL
;
namespace
K
iGfx
namespace
K
IGFX
{
class
VIEW_GROUP
;
}
...
...
pcbnew/tools/pcb_tools.cpp
View file @
0ac3e1fb
...
...
@@ -41,10 +41,10 @@
void
PCB_EDIT_FRAME
::
setupTools
()
{
// Create the manager and dispatcher & route draw panel events to the dispatcher
m_toolManager
=
new
TOOL_MANAGER
;
m_toolDispatcher
=
new
TOOL_DISPATCHER
(
m_toolManager
,
this
);
m_galCanvas
->
SetEventDispatcher
(
m_toolDispatcher
);
// Create the manager and dispatcher & route draw panel events to the dispatcher
m_toolManager
=
new
TOOL_MANAGER
;
m_toolDispatcher
=
new
TOOL_DISPATCHER
(
m_toolManager
,
this
);
m_galCanvas
->
SetEventDispatcher
(
m_toolDispatcher
);
// Register tool actions
m_toolManager
->
RegisterAction
(
&
COMMON_ACTIONS
::
moveActivate
);
...
...
@@ -52,10 +52,10 @@ void PCB_EDIT_FRAME::setupTools()
m_toolManager
->
RegisterAction
(
&
COMMON_ACTIONS
::
rotate
);
m_toolManager
->
RegisterAction
(
&
COMMON_ACTIONS
::
flip
);
// Register tools
m_toolManager
->
RegisterTool
(
new
SELECTION_TOOL
);
m_toolManager
->
RegisterTool
(
new
ROUTER_TOOL
);
m_toolManager
->
RegisterTool
(
new
MOVE_TOOL
);
// Register tools
m_toolManager
->
RegisterTool
(
new
SELECTION_TOOL
);
m_toolManager
->
RegisterTool
(
new
ROUTER_TOOL
);
m_toolManager
->
RegisterTool
(
new
MOVE_TOOL
);
}
...
...
@@ -71,8 +71,7 @@ void PCB_EDIT_FRAME::destroyTools()
}
void
PCB_EDIT_FRAME
::
onGenericCommand
(
wxCommandEvent
&
aEvent
)
void
PCB_EDIT_FRAME
::
onGenericCommand
(
wxCommandEvent
&
aEvent
)
{
m_toolDispatcher
->
DispatchWxCommand
(
aEvent
);
m_toolDispatcher
->
DispatchWxCommand
(
aEvent
);
}
pcbnew/tools/selection_area.cpp
View file @
0ac3e1fb
...
...
@@ -26,15 +26,16 @@
#include <gal/graphics_abstraction_layer.h>
#include <gal/color4d.h>
using
namespace
K
iGfx
;
using
namespace
K
IGFX
;
const
BOX2I
SELECTION_AREA
::
ViewBBox
()
const
{
BOX2I
tmp
;
BOX2I
tmp
;
tmp
.
SetOrigin
(
m_origin
);
tmp
.
SetEnd
(
m_end
);
tmp
.
Normalize
();
return
tmp
;
tmp
.
Normalize
();
return
tmp
;
}
...
...
@@ -45,7 +46,7 @@ void SELECTION_AREA::ViewGetLayers( int aLayers[], int& aCount ) const
}
void
SELECTION_AREA
::
ViewDraw
(
int
aLayer
,
K
iGfx
::
GAL
*
aGal
)
const
void
SELECTION_AREA
::
ViewDraw
(
int
aLayer
,
K
IGFX
::
GAL
*
aGal
)
const
{
aGal
->
SetLineWidth
(
1.0
);
aGal
->
SetStrokeColor
(
COLOR4D
(
1.0
,
1.0
,
0.4
,
1.0
)
);
...
...
@@ -57,6 +58,6 @@ void SELECTION_AREA::ViewDraw( int aLayer, KiGfx::GAL* aGal ) const
SELECTION_AREA
::
SELECTION_AREA
()
:
EDA_ITEM
(
NOT_USED
)
// this item is never added to a BOARD so it needs no type.
EDA_ITEM
(
NOT_USED
)
// this item is never added to a BOARD so it needs no type.
{
}
pcbnew/tools/selection_area.h
View file @
0ac3e1fb
...
...
@@ -29,7 +29,7 @@
#include <layers_id_colors_and_visibility.h>
#include <math/box2.h>
namespace
K
iGfx
namespace
K
IGFX
{
class
GAL
;
}
...
...
@@ -49,16 +49,16 @@ public:
virtual
const
BOX2I
ViewBBox
()
const
;
void
ViewDraw
(
int
aLayer
,
K
iGfx
::
GAL
*
aGal
)
const
;
void
ViewDraw
(
int
aLayer
,
K
IGFX
::
GAL
*
aGal
)
const
;
void
ViewGetLayers
(
int
aLayers
[],
int
&
aCount
)
const
;
void
SetOrigin
(
VECTOR2I
aOrigin
)
void
SetOrigin
(
VECTOR2I
aOrigin
)
{
m_origin
=
aOrigin
;
}
void
SetEnd
(
VECTOR2I
aEnd
)
void
SetEnd
(
VECTOR2I
aEnd
)
{
m_end
=
aEnd
;
}
...
...
pcbnew/tools/selection_tool.cpp
View file @
0ac3e1fb
...
...
@@ -47,14 +47,14 @@
#include "bright_box.h"
#include "common_actions.h"
using
namespace
K
iGfx
;
using
namespace
K
IGFX
;
using
boost
::
optional
;
SELECTION_TOOL
::
SELECTION_TOOL
()
:
TOOL_INTERACTIVE
(
"pcbnew.InteractiveSelection"
),
m_multiple
(
false
)
TOOL_INTERACTIVE
(
"pcbnew.InteractiveSelection"
),
m_multiple
(
false
)
{
m_selArea
=
new
SELECTION_AREA
;
m_selection
.
group
=
new
K
iGfx
::
VIEW_GROUP
;
m_selection
.
group
=
new
K
IGFX
::
VIEW_GROUP
;
}
...
...
@@ -98,8 +98,8 @@ int SELECTION_TOOL::Main( TOOL_EVENT& aEvent )
{
if
(
!
m_selection
.
Empty
()
)
// Cancel event deselects items...
clearSelection
();
else
// ...unless there is nothing selected
break
;
// then exit the tool
else
// ...unless there is nothing selected
break
;
// then exit the tool
}
// single click? Select single object
...
...
@@ -141,7 +141,7 @@ int SELECTION_TOOL::Main( TOOL_EVENT& aEvent )
void
SELECTION_TOOL
::
AddMenuItem
(
const
TOOL_ACTION
&
aAction
)
{
assert
(
aAction
.
GetId
()
>
0
);
// Check if the action was registered before in ACTION_MANAGER
assert
(
aAction
.
GetId
()
>
0
);
// Check if the action was registered before in ACTION_MANAGER
m_menu
.
Add
(
aAction
);
}
...
...
@@ -177,6 +177,7 @@ void SELECTION_TOOL::toggleSelection( BOARD_ITEM* aItem )
void
SELECTION_TOOL
::
clearSelection
()
{
VIEW_GROUP
::
const_iter
it
,
it_end
;
for
(
it
=
m_selection
.
group
->
Begin
(),
it_end
=
m_selection
.
group
->
End
();
it
!=
it_end
;
++
it
)
{
BOARD_ITEM
*
item
=
static_cast
<
BOARD_ITEM
*>
(
*
it
);
...
...
@@ -208,6 +209,7 @@ void SELECTION_TOOL::selectSingle( const VECTOR2I& aWhere )
case
0
:
if
(
!
m_additive
)
clearSelection
();
break
;
case
1
:
...
...
@@ -220,6 +222,7 @@ void SELECTION_TOOL::selectSingle( const VECTOR2I& aWhere )
for
(
int
i
=
collector
.
GetCount
()
-
1
;
i
>=
0
;
--
i
)
{
BOARD_ITEM
*
boardItem
=
(
collector
)[
i
];
if
(
boardItem
->
Type
()
==
PCB_MODULE_T
||
!
selectable
(
boardItem
)
)
collector
.
Remove
(
i
);
}
...
...
@@ -236,6 +239,7 @@ void SELECTION_TOOL::selectSingle( const VECTOR2I& aWhere )
if
(
item
)
toggleSelection
(
item
);
}
break
;
}
}
...
...
@@ -244,6 +248,7 @@ void SELECTION_TOOL::selectSingle( const VECTOR2I& aWhere )
BOARD_ITEM
*
SELECTION_TOOL
::
pickSmallestComponent
(
GENERAL_COLLECTOR
*
aCollector
)
{
int
count
=
aCollector
->
GetPrimaryCount
();
// try to use preferred layer
if
(
0
==
count
)
count
=
aCollector
->
GetCount
();
...
...
@@ -259,7 +264,7 @@ BOARD_ITEM* SELECTION_TOOL::pickSmallestComponent( GENERAL_COLLECTOR* aCollector
for
(
int
i
=
0
;
i
<
count
;
++
i
)
{
MODULE
*
module
=
(
MODULE
*
)(
*
aCollector
)[
i
];
MODULE
*
module
=
(
MODULE
*
)
(
*
aCollector
)[
i
];
int
lx
=
module
->
GetBoundingBox
().
GetWidth
();
int
ly
=
module
->
GetBoundingBox
().
GetHeight
();
...
...
@@ -317,6 +322,7 @@ bool SELECTION_TOOL::selectMultiple()
view
->
Query
(
selectionBox
,
selectedItems
);
// Get the list of selected items
std
::
vector
<
VIEW
::
LayerItemPair
>::
iterator
it
,
it_end
;
for
(
it
=
selectedItems
.
begin
(),
it_end
=
selectedItems
.
end
();
it
!=
it_end
;
++
it
)
{
BOARD_ITEM
*
item
=
static_cast
<
BOARD_ITEM
*>
(
it
->
first
);
...
...
@@ -349,6 +355,7 @@ BOARD_ITEM* SELECTION_TOOL::disambiguationMenu( GENERAL_COLLECTOR* aCollector )
CONTEXT_MENU
menu
;
int
limit
=
std
::
min
(
10
,
aCollector
->
GetCount
()
);
for
(
int
i
=
0
;
i
<
limit
;
++
i
)
{
wxString
text
;
...
...
@@ -415,27 +422,28 @@ bool SELECTION_TOOL::selectable( const BOARD_ITEM* aItem ) const
if
(
highContrast
)
{
bool
onActive
=
false
;
// Is the item on any of active layers?
int
layers
[
K
iGfx
::
VIEW
::
VIEW_MAX_LAYERS
],
layers_count
;
int
layers
[
K
IGFX
::
VIEW
::
VIEW_MAX_LAYERS
],
layers_count
;
// Filter out items that do not belong to active layers
std
::
set
<
unsigned
int
>
activeLayers
=
getView
()
->
GetPainter
()
->
GetSettings
()
->
GetActiveLayers
();
GetSettings
()
->
GetActiveLayers
();
aItem
->
ViewGetLayers
(
layers
,
layers_count
);
for
(
int
i
=
0
;
i
<
layers_count
;
++
i
)
{
if
(
activeLayers
.
count
(
layers
[
i
]
)
>
0
)
// Item is on at least one of active layers
if
(
activeLayers
.
count
(
layers
[
i
]
)
>
0
)
// Item is on at least one of active layers
{
onActive
=
true
;
break
;
}
}
if
(
!
onActive
)
// We do not want to select items that are in the background
if
(
!
onActive
)
// We do not want to select items that are in the background
return
false
;
}
BOARD
*
board
=
getModel
<
BOARD
>
(
PCB_T
);
switch
(
aItem
->
Type
()
)
{
case
PCB_VIA_T
:
...
...
@@ -444,7 +452,7 @@ bool SELECTION_TOOL::selectable( const BOARD_ITEM* aItem ) const
LAYER_NUM
top
,
bottom
;
static_cast
<
const
SEGVIA
*>
(
aItem
)
->
ReturnLayerPair
(
&
top
,
&
bottom
);
return
(
board
->
IsLayerVisible
(
top
)
||
board
->
IsLayerVisible
(
bottom
)
);
return
board
->
IsLayerVisible
(
top
)
||
board
->
IsLayerVisible
(
bottom
);
}
break
;
...
...
@@ -469,6 +477,7 @@ bool SELECTION_TOOL::selectable( const BOARD_ITEM* aItem ) const
// Module texts are not selectable in multiple selection mode
if
(
m_multiple
)
return
false
;
break
;
// These are not selectable, otherwise silkscreen drawings would be easily destroyed
...
...
@@ -494,7 +503,7 @@ void SELECTION_TOOL::selectItem( BOARD_ITEM* aItem )
{
SELECTION
&
s
;
public
:
public
:
selectBase_
(
SELECTION
&
s_
)
:
s
(
s_
)
{}
void
operator
()(
BOARD_ITEM
*
item
)
...
...
@@ -578,6 +587,7 @@ bool SELECTION_TOOL::containsSelected( const VECTOR2I& aPoint ) const
// Check if the point is located within any of the currently selected items bounding boxes
std
::
set
<
BOARD_ITEM
*>::
iterator
it
,
it_end
;
for
(
it
=
m_selection
.
items
.
begin
(),
it_end
=
m_selection
.
items
.
end
();
it
!=
it_end
;
++
it
)
{
BOX2I
itemBox
=
(
*
it
)
->
ViewBBox
();
...
...
pcbnew/tools/selection_tool.h
View file @
0ac3e1fb
...
...
@@ -36,7 +36,7 @@ class SELECTION_AREA;
class
BOARD_ITEM
;
class
GENERAL_COLLECTOR
;
namespace
K
iGfx
namespace
K
IGFX
{
class
VIEW_GROUP
;
}
...
...
@@ -65,7 +65,7 @@ public:
std
::
set
<
BOARD_ITEM
*>
items
;
/// VIEW_GROUP that holds currently selected items
K
iGfx
::
VIEW_GROUP
*
group
;
K
IGFX
::
VIEW_GROUP
*
group
;
/// Checks if there is anything selected
bool
Empty
()
const
{
return
items
.
empty
();
}
...
...
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