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