Loading pcbnew/tools/edit_constraints.cpp +16 −2 Original line number Original line Diff line number Diff line Loading @@ -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 ) { { Loading Loading @@ -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 +28 −0 Original line number Original line Diff line number Diff line Loading @@ -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; Loading Loading @@ -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 +13 −3 Original line number Original line Diff line number Diff line Loading @@ -418,15 +418,25 @@ public: } } /** /** * Function Size() * Function PointsSize() * * * Returns number of stored points. * Returns number of stored EDIT_POINTs. */ */ unsigned int Size() const unsigned int PointsSize() 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 { { Loading pcbnew/tools/point_editor.cpp +11 −7 Original line number Original line Diff line number Diff line Loading @@ -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> Loading Loading @@ -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 ); Loading Loading @@ -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; } } Loading Loading @@ -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(); Loading Loading
pcbnew/tools/edit_constraints.cpp +16 −2 Original line number Original line Diff line number Diff line Loading @@ -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 ) { { Loading Loading @@ -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 +28 −0 Original line number Original line Diff line number Diff line Loading @@ -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; Loading Loading @@ -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 +13 −3 Original line number Original line Diff line number Diff line Loading @@ -418,15 +418,25 @@ public: } } /** /** * Function Size() * Function PointsSize() * * * Returns number of stored points. * Returns number of stored EDIT_POINTs. */ */ unsigned int Size() const unsigned int PointsSize() 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 { { Loading
pcbnew/tools/point_editor.cpp +11 −7 Original line number Original line Diff line number Diff line Loading @@ -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> Loading Loading @@ -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 ); Loading Loading @@ -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; } } Loading Loading @@ -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(); Loading