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
5de41eab
Commit
5de41eab
authored
Apr 02, 2014
by
Maciej Suminski
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Added EC_SNAPLINE to make possible snapping EDIT_LINES by their ends rather than by its center.
parent
23392ce8
Changes
4
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
68 additions
and
12 deletions
+68
-12
edit_constraints.cpp
pcbnew/tools/edit_constraints.cpp
+16
-2
edit_constraints.h
pcbnew/tools/edit_constraints.h
+28
-0
edit_points.h
pcbnew/tools/edit_points.h
+13
-3
point_editor.cpp
pcbnew/tools/point_editor.cpp
+11
-7
No files found.
pcbnew/tools/edit_constraints.cpp
View file @
5de41eab
...
@@ -131,8 +131,8 @@ EC_CONVERGING::~EC_CONVERGING()
...
@@ -131,8 +131,8 @@ EC_CONVERGING::~EC_CONVERGING()
void
EC_CONVERGING
::
Apply
(
EDIT_LINE
&
aHandle
)
void
EC_CONVERGING
::
Apply
(
EDIT_LINE
&
aHandle
)
{
{
// The dragged segment endpoints
// The dragged segment endpoints
EDIT_POINT
&
origin
=
m_constrained
.
GetOrigin
();
EDIT_POINT
&
origin
=
aHandle
.
GetOrigin
();
EDIT_POINT
&
end
=
m_constrained
.
GetEnd
();
EDIT_POINT
&
end
=
aHandle
.
GetEnd
();
if
(
m_colinearConstraint
)
if
(
m_colinearConstraint
)
{
{
...
@@ -173,3 +173,17 @@ void EC_CONVERGING::Apply( EDIT_LINE& aHandle )
...
@@ -173,3 +173,17 @@ void EC_CONVERGING::Apply( EDIT_LINE& aHandle )
end
.
SetPosition
(
*
originEndIntersect
);
end
.
SetPosition
(
*
originEndIntersect
);
}
}
}
}
EC_SNAPLINE
::
EC_SNAPLINE
(
EDIT_LINE
&
aLine
,
V2D_TRANSFORM_FUN
aSnapFun
)
:
EDIT_CONSTRAINT
<
EDIT_LINE
>
(
aLine
),
m_snapFun
(
aSnapFun
)
{}
void
EC_SNAPLINE
::
Apply
(
EDIT_LINE
&
aHandle
)
{
VECTOR2D
delta
=
aHandle
.
GetEnd
().
GetPosition
()
-
aHandle
.
GetOrigin
().
GetPosition
();
aHandle
.
GetOrigin
().
SetPosition
(
m_snapFun
(
aHandle
.
GetOrigin
().
GetPosition
()
)
);
aHandle
.
GetEnd
().
SetPosition
(
aHandle
.
GetOrigin
().
GetPosition
()
+
delta
);
}
pcbnew/tools/edit_constraints.h
View file @
5de41eab
...
@@ -26,6 +26,7 @@
...
@@ -26,6 +26,7 @@
#define EDIT_CONSTRAINTS_H_
#define EDIT_CONSTRAINTS_H_
#include <math/vector2d.h>
#include <math/vector2d.h>
#include <boost/function.hpp>
class
EDIT_POINT
;
class
EDIT_POINT
;
class
EDIT_LINE
;
class
EDIT_LINE
;
...
@@ -236,4 +237,31 @@ private:
...
@@ -236,4 +237,31 @@ private:
VECTOR2I
m_draggedVector
;
VECTOR2I
m_draggedVector
;
};
};
/**
* Class EC_SNAPLINE
*
* EDIT_CONSTRAINT for a EDIT_LINE, one of the ends is snapped to a spot determined by a
* transform function passed as parameter (e.g. it can be snapped to a grid), instead of having
* the line center snapped to a point.
*/
class
EC_SNAPLINE
:
public
EDIT_CONSTRAINT
<
EDIT_LINE
>
{
public
:
///> Typedef for a function that determines snapping point.
typedef
boost
::
function
<
VECTOR2D
(
const
VECTOR2D
&
)
>
V2D_TRANSFORM_FUN
;
EC_SNAPLINE
(
EDIT_LINE
&
aLine
,
V2D_TRANSFORM_FUN
aSnapFun
);
virtual
~
EC_SNAPLINE
()
{}
///> @copydoc EDIT_CONSTRAINT::Apply()
virtual
void
Apply
(
EDIT_LINE
&
aHandle
);
private
:
///> Function that determines snapping point.
V2D_TRANSFORM_FUN
m_snapFun
;
};
#endif
/* EDIT_CONSTRAINTS_H_ */
#endif
/* EDIT_CONSTRAINTS_H_ */
pcbnew/tools/edit_points.h
View file @
5de41eab
...
@@ -418,15 +418,25 @@ public:
...
@@ -418,15 +418,25 @@ public:
}
}
/**
/**
* Function Size()
* Function
Points
Size()
*
*
* Returns number of stored
point
s.
* Returns number of stored
EDIT_POINT
s.
*/
*/
unsigned
int
Size
()
const
unsigned
int
Points
Size
()
const
{
{
return
m_points
.
size
();
return
m_points
.
size
();
}
}
/**
* Function LinesSize()
*
* Returns number of stored EDIT_LINEs.
*/
unsigned
int
LinesSize
()
const
{
return
m_lines
.
size
();
}
///> @copydoc VIEW_ITEM::ViewBBox()
///> @copydoc VIEW_ITEM::ViewBBox()
virtual
const
BOX2I
ViewBBox
()
const
virtual
const
BOX2I
ViewBBox
()
const
{
{
...
...
pcbnew/tools/point_editor.cpp
View file @
5de41eab
...
@@ -23,6 +23,7 @@
...
@@ -23,6 +23,7 @@
*/
*/
#include <boost/make_shared.hpp>
#include <boost/make_shared.hpp>
#include <boost/bind.hpp>
#include <tool/tool_manager.h>
#include <tool/tool_manager.h>
#include <view/view_controls.h>
#include <view/view_controls.h>
...
@@ -64,16 +65,11 @@ enum DIMENSION_POINTS
...
@@ -64,16 +65,11 @@ enum DIMENSION_POINTS
DIM_FEATUREDO
,
DIM_FEATUREDO
,
};
};
/**
* Class POINT_EDITOR
*
* Tool that displays edit points allowing to modify items by dragging the points.
*/
class
EDIT_POINTS_FACTORY
class
EDIT_POINTS_FACTORY
{
{
public
:
public
:
static
boost
::
shared_ptr
<
EDIT_POINTS
>
Make
(
EDA_ITEM
*
aItem
)
static
boost
::
shared_ptr
<
EDIT_POINTS
>
Make
(
EDA_ITEM
*
aItem
,
KIGFX
::
GAL
*
aGal
)
{
{
boost
::
shared_ptr
<
EDIT_POINTS
>
points
=
boost
::
make_shared
<
EDIT_POINTS
>
(
aItem
);
boost
::
shared_ptr
<
EDIT_POINTS
>
points
=
boost
::
make_shared
<
EDIT_POINTS
>
(
aItem
);
...
@@ -126,10 +122,18 @@ public:
...
@@ -126,10 +122,18 @@ public:
// Lines have to be added after creating edit points,
// Lines have to be added after creating edit points,
// as they use EDIT_POINT references
// as they use EDIT_POINT references
for
(
int
i
=
0
;
i
<
cornersCount
-
1
;
++
i
)
for
(
int
i
=
0
;
i
<
cornersCount
-
1
;
++
i
)
{
points
->
AddLine
(
points
->
Point
(
i
),
points
->
Point
(
i
+
1
)
);
points
->
AddLine
(
points
->
Point
(
i
),
points
->
Point
(
i
+
1
)
);
points
->
Line
(
i
).
SetConstraint
(
new
EC_SNAPLINE
(
points
->
Line
(
i
),
boost
::
bind
(
&
KIGFX
::
GAL
::
GetGridPoint
,
aGal
,
_1
)
)
);
}
// The last missing line, connecting the last and the first polygon point
// The last missing line, connecting the last and the first polygon point
points
->
AddLine
(
points
->
Point
(
cornersCount
-
1
),
points
->
Point
(
0
)
);
points
->
AddLine
(
points
->
Point
(
cornersCount
-
1
),
points
->
Point
(
0
)
);
points
->
Line
(
points
->
LinesSize
()
-
1
).
SetConstraint
(
new
EC_SNAPLINE
(
points
->
Line
(
points
->
LinesSize
()
-
1
),
boost
::
bind
(
&
KIGFX
::
GAL
::
GetGridPoint
,
aGal
,
_1
)
)
);
break
;
break
;
}
}
...
@@ -208,7 +212,7 @@ int POINT_EDITOR::OnSelectionChange( TOOL_EVENT& aEvent )
...
@@ -208,7 +212,7 @@ int POINT_EDITOR::OnSelectionChange( TOOL_EVENT& aEvent )
PCB_EDIT_FRAME
*
editFrame
=
getEditFrame
<
PCB_EDIT_FRAME
>
();
PCB_EDIT_FRAME
*
editFrame
=
getEditFrame
<
PCB_EDIT_FRAME
>
();
EDA_ITEM
*
item
=
selection
.
items
.
GetPickedItem
(
0
);
EDA_ITEM
*
item
=
selection
.
items
.
GetPickedItem
(
0
);
m_editPoints
=
EDIT_POINTS_FACTORY
::
Make
(
item
);
m_editPoints
=
EDIT_POINTS_FACTORY
::
Make
(
item
,
m_toolMgr
->
GetView
()
->
GetGAL
()
);
if
(
!
m_editPoints
)
if
(
!
m_editPoints
)
{
{
setTransitions
();
setTransitions
();
...
...
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