KiCad PCB EDA Suite
DRAWING_TOOL Class Reference

Class DRAWING_TOOL. More...

#include <drawing_tool.h>

Inheritance diagram for DRAWING_TOOL:
PCB_TOOL TOOL_INTERACTIVE TOOL_BASE

Public Types

enum  MODE {
  MODE::NONE, MODE::LINE, MODE::CIRCLE, MODE::ARC,
  MODE::TEXT, MODE::ANCHOR, MODE::DXF, MODE::DIMENSION,
  MODE::KEEPOUT, MODE::ZONE, MODE::GRAPHIC_POLYGON
}
 

The possible drawing modes of DRAWING_TOOL

More...
 
enum  RESET_REASON { RUN, MODEL_RELOAD, GAL_SWITCH }
 

Determines the reason of reset for a tool

More...
 

Public Member Functions

 DRAWING_TOOL ()
 
 ~DRAWING_TOOL ()
 
bool Init () override
 Function Init() Init() is called once upon a registration of the tool. More...
 
void Reset (RESET_REASON aReason) override
 Function Reset() Brings the tool to a known, initial state. More...
 
TOOL_MENUGetToolMenu ()
 

Get the DRAWING_TOOL top-level context menu

More...
 
MODE GetDrawingMode () const
 Function GetDrawingMode. More...
 
int DrawLine (const TOOL_EVENT &aEvent)
 Function DrawLine() Starts interactively drawing a line. More...
 
int DrawCircle (const TOOL_EVENT &aEvent)
 Function DrawCircle() Starts interactively drawing a circle. More...
 
int DrawArc (const TOOL_EVENT &aEvent)
 Function DrawArc() Starts interactively drawing an arc. More...
 
int PlaceText (const TOOL_EVENT &aEvent)
 Function PlaceText() Displays a dialog that allows to input text and its settings and then lets the user decide where to place the text in editor. More...
 
int DrawDimension (const TOOL_EVENT &aEvent)
 Function DrawDimension() Starts interactively drawing a dimension. More...
 
int DrawZone (const TOOL_EVENT &aEvent)
 Function DrawZone() Starts interactively drawing a zone. More...
 
int DrawGraphicPolygon (const TOOL_EVENT &aEvent)
 
int DrawVia (const TOOL_EVENT &aEvent)
 
int DrawZoneKeepout (const TOOL_EVENT &aEvent)
 Function DrawZoneKeepout() Starts interactively drawing a keepout area. More...
 
int DrawZoneCutout (const TOOL_EVENT &aEvent)
 Function DrawZoneCutout() Starts interactively drawing a zone cutout area of an existing zone. More...
 
int DrawSimilarZone (const TOOL_EVENT &aEvent)
 Function DrawSimilarZone() Starts interactively drawing a zone with same settings as an existing zone. More...
 
int PlaceDXF (const TOOL_EVENT &aEvent)
 Function PlaceDXF() Places a drawing imported from a DXF file in module editor. More...
 
int SetAnchor (const TOOL_EVENT &aEvent)
 Function SetAnchor() Places the footprint anchor (only in module editor). More...
 
void setTransitions () override
 

Sets up handlers for various events.

More...
 
void SetEditModules (bool aEnabled)
 Function SetEditModules() More...
 
bool EditingModules () const
 
void Activate ()
 Function Activate() Runs the tool. More...
 
void SetContextMenu (CONTEXT_MENU *aMenu, CONTEXT_MENU_TRIGGER aTrigger=CMENU_BUTTON)
 Function SetContextMenu() More...
 
void RunMainStack (std::function< void()> aFunc)
 Function RunMainStack() More...
 
template<class T >
void Go (int(T::*aStateFunc)(const TOOL_EVENT &), const TOOL_EVENT_LIST &aConditions=TOOL_EVENT(TC_ANY, TA_ANY))
 Function Go() More...
 
OPT_TOOL_EVENT Wait (const TOOL_EVENT_LIST &aEventList=TOOL_EVENT(TC_ANY, TA_ANY))
 Function Wait() More...
 
TOOL_TYPE GetType () const
 Function GetType() Returns the type of the tool. More...
 
TOOL_ID GetId () const
 Function GetId() Returns the unique identifier of the tool. More...
 
const std::string & GetName () const
 Function GetName() Returns the name of the tool. More...
 
TOOL_MANAGERGetManager () const
 Function GetManager() Returns the instance of TOOL_MANAGER that takes care of the tool. More...
 
TOOL_SETTINGSGetSettings ()
 
bool IsToolActive () const
 

Protected Types

enum  INTERACTIVE_PLACEMENT_OPTIONS {
  IPO_ROTATE = 1, IPO_FLIP = 2, IPO_PROPERTIES = 4, IPO_SINGLE_CLICK = 8,
  IPO_REPEAT = 16
}
 

Protected Member Functions

void doInteractiveItemPlacement (INTERACTIVE_PLACER_BASE *aPlacer, const wxString &aCommitMessage, int aOptions=IPO_ROTATE|IPO_FLIP|IPO_REPEAT)
 Helper function for performing a common interactive idiom: wait for a left click, place an item there (perhaps with a dialog or other user interaction), then have it move with the mouse and respond to rotate/flip, etc. More...
 
KIGFX::PCB_VIEWview () const
 
KIGFX::VIEW_CONTROLScontrols () const
 
PCB_EDIT_FRAMEframe () const
 
BOARDboard () const
 
MODULEmodule () const
 
PCB_DISPLAY_OPTIONSdisplayOptions () const
 
PCB_DRAW_PANEL_GALcanvas () const
 
const SELECTIONselection () const
 
SELECTIONselection ()
 
const TOOL_EVENT evActivate (std::string aToolName="")
 functions below are not yet implemented - their interface may change More...
 
const TOOL_EVENT evCommand (int aCommandId=-1)
 
const TOOL_EVENT evCommand (std::string aCommandStr="")
 
const TOOL_EVENT evMotion ()
 
const TOOL_EVENT evClick (int aButton=BUT_ANY)
 
const TOOL_EVENT evDrag (int aButton=BUT_ANY)
 
const TOOL_EVENT evButtonUp (int aButton=BUT_ANY)
 
const TOOL_EVENT evButtonDown (int aButton=BUT_ANY)
 
void attachManager (TOOL_MANAGER *aManager)
 Function attachManager() More...
 
KIGFX::VIEWgetView () const
 Function getView() More...
 
KIGFX::VIEW_CONTROLSgetViewControls () const
 Function getViewControls() More...
 
template<typename T >
T * getEditFrame () const
 Function getEditFrame() More...
 
template<typename T >
T * getModel () const
 Function getModel() More...
 

Protected Attributes

bool m_editModules
 
TOOL_TYPE m_type
 

Stores the type of the tool.

More...
 
TOOL_ID m_toolId
 

Unique identifier for the tool, assigned by a TOOL_MANAGER instance.

More...
 
std::string m_toolName
 

Name of the tool.

More...
 
TOOL_MANAGERm_toolMgr
 
TOOL_SETTINGS m_toolSettings
 

Private Types

enum  ZONE_MODE { ZONE_MODE::ADD, ZONE_MODE::CUTOUT, ZONE_MODE::SIMILAR, ZONE_MODE::GRAPHIC_POLYGON }
 

Private Member Functions

void showContextMenu ()
 

Shows the context menu for the drawing tool This menu consists of normal UI functions (zoom, grid, etc) And any suitable global functions for the active drawing type.

More...
 
bool drawSegment (int aShape, DRAWSEGMENT *&aGraphic, OPT< VECTOR2D > aStartingPoint=NULLOPT)
 

Starts drawing a selected shape (i.e.

More...
 
bool drawArc (DRAWSEGMENT *&aGraphic)
 

Starts drawing an arc.

More...
 
int drawZone (bool aKeepout, ZONE_MODE aMode)
 Draws a polygon, that is added as a zone or a keepout area. More...
 
bool getSourceZoneForAction (ZONE_MODE aMode, ZONE_CONTAINER *&aZone)
 Function getSourceZoneForAction() More...
 
void runPolygonEventLoop (POLYGON_GEOM_MANAGER &aPolyGeomMgr)
 Run the event loop for polygon creation, sending user input on to the given POLYGON_GEOM_MANAGER for processing into a complete polygon. More...
 
void make45DegLine (DRAWSEGMENT *aSegment, DRAWSEGMENT *aHelper) const
 Function make45DegLine() Forces a DRAWSEGMENT to be drawn at multiple of 45 degrees. More...
 
int getSegmentWidth (unsigned int aLayer) const
 

Returns the appropriate width for a segment depending on the settings.

More...
 
PCB_LAYER_ID getDrawingLayer () const
 

Selects a non-copper layer for drawing

More...
 

Private Attributes

KIGFX::VIEWm_view
 
KIGFX::VIEW_CONTROLSm_controls
 
BOARDm_board
 
PCB_BASE_EDIT_FRAMEm_frame
 
MODE m_mode
 
unsigned int m_lineWidth
 Stores the current line width for multisegment drawing. More...
 
TOOL_MENU m_menu
 Menu model displayed by the tool. More...
 

Static Private Attributes

static const unsigned int WIDTH_STEP = 100000
 

Friends

class ZONE_CREATE_HELPER
 

Detailed Description

Class DRAWING_TOOL.

Tool responsible for drawing graphical elements like lines, arcs, circles, etc.

Definition at line 49 of file drawing_tool.h.

Member Enumeration Documentation

enum PCB_TOOL::INTERACTIVE_PLACEMENT_OPTIONS
protectedinherited
Enumerator
IPO_ROTATE 
IPO_FLIP 
IPO_PROPERTIES 
IPO_SINGLE_CLICK 
IPO_REPEAT 

Definition at line 104 of file pcb_tool.h.

enum DRAWING_TOOL::MODE
strong

The possible drawing modes of DRAWING_TOOL

Enumerator
NONE 
LINE 
CIRCLE 
ARC 
TEXT 
ANCHOR 
DXF 
DIMENSION 
KEEPOUT 
ZONE 
GRAPHIC_POLYGON 

Definition at line 68 of file drawing_tool.h.

69  {
70  NONE,
71  LINE,
72  CIRCLE,
73  ARC,
74  TEXT,
75  ANCHOR,
76  DXF,
77  DIMENSION,
78  KEEPOUT,
79  ZONE,
80  GRAPHIC_POLYGON
81  };
Class DIMENSION.
enum TOOL_BASE::RESET_REASON
inherited

Determines the reason of reset for a tool

Enumerator
RUN 

Tool is invoked after being inactive.

MODEL_RELOAD 

Model changes (required full reload)

GAL_SWITCH 

Rendering engine changes.

Definition at line 80 of file tool_base.h.

81  {
82  RUN,
83  MODEL_RELOAD,
84  GAL_SWITCH
85  };
Model changes (required full reload)
Definition: tool_base.h:83
Tool is invoked after being inactive.
Definition: tool_base.h:82
Rendering engine changes.
Definition: tool_base.h:84
enum DRAWING_TOOL::ZONE_MODE
strongprivate
Enumerator
ADD 

Add a new zone/keepout with fresh settings.

CUTOUT 

Make a cutout to an existing zone.

SIMILAR 

Add a new zone with the same settings as an existing one.

GRAPHIC_POLYGON 

Definition at line 186 of file drawing_tool.h.

187  {
188  ADD,
189  CUTOUT,
190  SIMILAR,
191  GRAPHIC_POLYGON
192  };

Constructor & Destructor Documentation

DRAWING_TOOL::DRAWING_TOOL ( )

Definition at line 149 of file drawing_tool.cpp.

149  :
150  PCB_TOOL( "pcbnew.InteractiveDrawing" ),
151  m_view( nullptr ), m_controls( nullptr ),
152  m_board( nullptr ), m_frame( nullptr ), m_mode( MODE::NONE ),
153  m_lineWidth( 1 ),
154  m_menu( *this )
155 {
156 }
BOARD * m_board
Definition: drawing_tool.h:269
KIGFX::VIEW * m_view
Definition: drawing_tool.h:267
PCB_TOOL(TOOL_ID aId, const std::string &aName)
Constructor.
Definition: pcb_tool.h:69
unsigned int m_lineWidth
Stores the current line width for multisegment drawing.
Definition: drawing_tool.h:274
KIGFX::VIEW_CONTROLS * m_controls
Definition: drawing_tool.h:268
PCB_BASE_EDIT_FRAME * m_frame
Definition: drawing_tool.h:270
TOOL_MENU m_menu
Menu model displayed by the tool.
Definition: drawing_tool.h:277
DRAWING_TOOL::~DRAWING_TOOL ( )

Definition at line 159 of file drawing_tool.cpp.

160 {
161 }

Member Function Documentation

void TOOL_INTERACTIVE::Activate ( )
inherited

Function Activate() Runs the tool.

After activation, the tool starts receiving events until it is finished.

Definition at line 49 of file tool_interactive.cpp.

References TOOL_MANAGER::InvokeTool(), TOOL_BASE::m_toolId, and TOOL_BASE::m_toolMgr.

Referenced by EDIT_TOOL::copyToClipboard(), PCBNEW_CONTROL::DeleteItemCursor(), PCB_TOOL::doInteractiveItemPlacement(), ROUTER_TOOL::DpDimensionsDialog(), drawArc(), DrawDimension(), MICROWAVE_TOOL::drawMicrowaveInductor(), drawSegment(), drawZone(), PCB_EDITOR_CONTROL::DrillOrigin(), MODULE_EDITOR_TOOLS::EnumeratePads(), PCBNEW_CONTROL::GridSetOrigin(), PCB_EDITOR_CONTROL::HighlightNetCursor(), ROUTER_TOOL::InlineDrag(), EDIT_TOOL::Main(), LENGTH_TUNER_TOOL::mainLoop(), ROUTER_TOOL::mainLoop(), GERBVIEW_SELECTION_TOOL::MeasureTool(), EDIT_TOOL::MeasureTool(), POINT_EDITOR::OnSelectionChange(), EDIT_TOOL::pickCopyReferencePoint(), PlaceDXF(), PCB_EDITOR_CONTROL::PlaceModule(), PCB_EDITOR_CONTROL::PlaceTarget(), PlaceText(), POSITION_RELATIVE_TOOL::SelectPositionRelativeItem(), SetAnchor(), ROUTER_TOOL::SettingsDialog(), and PCB_EDITOR_CONTROL::ShowLocalRatsnest().

50 {
52 }
TOOL_MANAGER * m_toolMgr
Definition: tool_base.h:215
TOOL_ID m_toolId
Unique identifier for the tool, assigned by a TOOL_MANAGER instance.
Definition: tool_base.h:210
bool InvokeTool(TOOL_ID aToolId)
Function InvokeTool() Calls a tool by sending a tool activation event to tool of given ID...
void TOOL_BASE::attachManager ( TOOL_MANAGER aManager)
protectedinherited

Function attachManager()

Sets the TOOL_MANAGER the tool will belong to. Called by TOOL_MANAGER::RegisterTool()

Definition at line 59 of file tool_base.cpp.

References TOOL_BASE::m_toolMgr, TOOL_BASE::m_toolSettings, and TOOL_BASE::TOOL_SETTINGS.

Referenced by TOOL_MANAGER::RegisterTool().

60 {
61  m_toolMgr = aManager;
62  m_toolSettings = TOOL_SETTINGS( this );
63 }
TOOL_MANAGER * m_toolMgr
Definition: tool_base.h:215
TOOL_SETTINGS m_toolSettings
Definition: tool_base.h:216
friend class TOOL_SETTINGS
Definition: tool_base.h:155
BOARD* PCB_TOOL::board ( ) const
inlineprotectedinherited

Definition at line 135 of file pcb_tool.h.

Referenced by PCBNEW_CONTROL::AppendBoard(), PCB_EDITOR_CONTROL::calculateSelectionRatsnest(), EDIT_TOOL::changeTrackWidthOnClick(), EDIT_TOOL::copyToClipboard(), MICROWAVE_TOOL::createInductorBetween(), MODULE_EDITOR_TOOLS::CreatePadFromShapes(), ROUTER_TOOL::CustomTrackWidthDialog(), PCB_TOOL::doInteractiveItemPlacement(), MODULE_EDITOR_TOOLS::EnumeratePads(), MODULE_EDITOR_TOOLS::ExplodePadToShapes(), SELECTION_TOOL::filterSelection(), POINT_EDITOR::finishItem(), SELECTION_TOOL::getCollectorsGuide(), ROUTER_TOOL::getNetclassDimensions(), PCBNEW_CONTROL::GridResetOrigin(), PAD_TOOL::haveFootprints(), PCBNEW_CONTROL::LayerNext(), PCBNEW_CONTROL::LayerPrev(), ROUTER_TOOL::mainLoop(), PCB_TOOL::module(), MODULE_EDITOR_TOOLS::ModuleEdgeOutlines(), MODULE_EDITOR_TOOLS::ModuleTextOutlines(), ROUTER_TOOL::onTrackViaSizeChanged(), ROUTER_TOOL::onViaCommand(), PCBNEW_CONTROL::PadDisplayMode(), PCBNEW_CONTROL::PasteItemsFromClipboard(), PCBNEW_CONTROL::placeBoardItems(), PCB_EDITOR_CONTROL::PlaceModule(), MODULE_EDITOR_TOOLS::PlacePad(), PCB_EDITOR_CONTROL::PlaceTarget(), ROUTER_TOOL::prepareInteractive(), PCBNEW_CONTROL::Reset(), PNS::TOOL_BASE::Reset(), SELECTION_TOOL::selectable(), SELECTION_TOOL::selectAllItemsConnectedToItem(), SELECTION_TOOL::selectAllItemsConnectedToTrack(), SELECTION_TOOL::selectAllItemsOnNet(), SELECTION_TOOL::selectAllItemsOnSheet(), SELECTION_TOOL::selectPoint(), PCBNEW_CONTROL::TrackDisplayMode(), PCB_EDITOR_CONTROL::TrackWidthDec(), PCB_EDITOR_CONTROL::TrackWidthInc(), PCBNEW_CONTROL::ViaDisplayMode(), PCB_EDITOR_CONTROL::ViaSizeDec(), PCB_EDITOR_CONTROL::ViaSizeInc(), PCBNEW_CONTROL::ZoneDisplayMode(), ZONE_FILLER_TOOL::ZoneFill(), ZONE_FILLER_TOOL::ZoneFillAll(), PCB_EDITOR_CONTROL::ZoneMerge(), and ZONE_FILLER_TOOL::ZoneUnfillAll().

135 { return getModel<BOARD>(); }
PCB_DRAW_PANEL_GAL * PCB_TOOL::canvas ( ) const
protectedinherited

Definition at line 213 of file pcb_tool.cpp.

References PCB_TOOL::frame(), and EDA_DRAW_FRAME::GetGalCanvas().

Referenced by PCBNEW_CONTROL::HighContrastMode(), PCBNEW_CONTROL::PadDisplayMode(), PCBNEW_CONTROL::TrackDisplayMode(), PCBNEW_CONTROL::ViaDisplayMode(), PCBNEW_CONTROL::ZoneDisplayMode(), and SELECTION_TOOL::zoomFitSelection().

214 {
215  return static_cast<PCB_DRAW_PANEL_GAL*>( frame()->GetGalCanvas() );
216 }
PCB_EDIT_FRAME * frame() const
Definition: pcb_tool.h:134
EDA_DRAW_PANEL_GAL * GetGalCanvas() const
Function GetGalCanvas returns a pointer to GAL-based canvas of given EDA draw frame.
Definition: draw_frame.h:864
PCB_DISPLAY_OPTIONS * PCB_TOOL::displayOptions ( ) const
protectedinherited

Definition at line 208 of file pcb_tool.cpp.

References PCB_TOOL::frame(), and PCB_BASE_FRAME::GetDisplayOptions().

Referenced by PCBNEW_CONTROL::HighContrastMode(), PCBNEW_CONTROL::PadDisplayMode(), PNS::TOOL_BASE::pickSingleItem(), PCBNEW_CONTROL::TrackDisplayMode(), PCBNEW_CONTROL::ViaDisplayMode(), and PCBNEW_CONTROL::ZoneDisplayMode().

209 {
210  return static_cast<PCB_DISPLAY_OPTIONS*>( frame()->GetDisplayOptions() );
211 }
void * GetDisplayOptions() override
Function GetDisplayOptions returns the display options current in use Display options are relative to...
Class PCB_DISPLAY_OPTIONS handles display options like enable/disable some optional drawings...
PCB_EDIT_FRAME * frame() const
Definition: pcb_tool.h:134
void PCB_TOOL::doInteractiveItemPlacement ( INTERACTIVE_PLACER_BASE aPlacer,
const wxString &  aCommitMessage,
int  aOptions = IPO_ROTATE | IPO_FLIP | IPO_REPEAT 
)
protectedinherited

Helper function for performing a common interactive idiom: wait for a left click, place an item there (perhaps with a dialog or other user interaction), then have it move with the mouse and respond to rotate/flip, etc.

More complex interactive processes are not supported here, you should implement a customised event loop for those.

Parameters
aItemCreatorthe callable that will attempt to create the item
aCommitMessagethe message used on a successful commit

Definition at line 39 of file pcb_tool.cpp.

References TOOL_INTERACTIVE::Activate(), KIGFX::PCB_VIEW::Add(), KIGFX::VIEW_GROUP::Add(), SELECTION::Add(), COMMIT::Add(), PCB_TOOL::board(), BUT_LEFT, KIGFX::VIEW_CONTROLS::CaptureCursor(), SELECTION::Clear(), PCB_TOOL::controls(), INTERACTIVE_PLACER_BASE::CreateItem(), dyn_cast(), PCB_ACTIONS::flip, PCB_TOOL::frame(), KIGFX::VIEW_CONTROLS::GetCursorPosition(), TOOL_EVT_UTILS::GetEventRotationAngle(), TOOL_BASE::GetManager(), PCB_TOOL::IPO_FLIP, PCB_TOOL::IPO_REPEAT, PCB_TOOL::IPO_ROTATE, PCB_TOOL::IPO_SINGLE_CLICK, TOOL_EVT_UTILS::IsCancelInteractive(), TOOL_EVT_UTILS::IsRotateToolEvt(), INTERACTIVE_PLACER_BASE::m_board, INTERACTIVE_PLACER_BASE::m_frame, PCB_TOOL::module(), PCB_MODULE_T, INTERACTIVE_PLACER_BASE::PlaceItem(), BOARD_COMMIT::Push(), KIGFX::PCB_VIEW::Remove(), KIGFX::VIEW_GROUP::Remove(), SELECTION::Remove(), TOOL_MANAGER::RunAction(), MODULE::RunOnChildren(), PCB_ACTIONS::selectionClear, KIGFX::VIEW_CONTROLS::SetAutoPan(), KIGFX::VIEW_CONTROLS::SetSnapping(), KIGFX::VIEW_CONTROLS::ShowCursor(), TC_COMMAND, KIGFX::PCB_VIEW::Update(), PCB_TOOL::view(), TOOL_INTERACTIVE::Wait(), VECTOR2< T >::x, and VECTOR2< T >::y.

Referenced by MICROWAVE_TOOL::addMicrowaveFootprint(), DrawVia(), and MODULE_EDITOR_TOOLS::PlacePad().

42 {
43  using namespace std::placeholders;
44  std::unique_ptr<BOARD_ITEM> newItem;
45 
46  Activate();
47 
48  BOARD_COMMIT commit( frame() );
49 
51 
52  // do not capture or auto-pan until we start placing an item
53  controls()->ShowCursor( true );
54  controls()->SetSnapping( true );
55 
56  // Add a VIEW_GROUP that serves as a preview for the new item
57  SELECTION preview;
58  view()->Add( &preview );
59 
60  aPlacer->m_board = board();
61  aPlacer->m_frame = frame();
62 
63  if( aOptions & IPO_SINGLE_CLICK )
64  {
65  VECTOR2I cursorPos = controls()->GetCursorPosition();
66 
67  newItem = aPlacer->CreateItem();
68  newItem->SetPosition( wxPoint( cursorPos.x, cursorPos.y ) );
69 
70  preview.Add( newItem.get() );
71  }
72 
73  // Main loop: keep receiving events
74  while( OPT_TOOL_EVENT evt = Wait() )
75  {
76  VECTOR2I cursorPos = controls()->GetCursorPosition();
77 
79  {
80  if( newItem )
81  {
82  // Delete the old item and have another try
83  newItem = nullptr;
84 
85  preview.Clear();
86 
87  if( aOptions & IPO_SINGLE_CLICK )
88  break;
89 
90  controls()->SetAutoPan( false );
91  controls()->CaptureCursor( false );
92  controls()->ShowCursor( true );
93  }
94  else
95  {
96  break;
97  }
98 
99  if( evt->IsActivate() ) // now finish unconditionally
100  break;
101  }
102 
103  else if( evt->IsClick( BUT_LEFT ) )
104  {
105  if( !newItem )
106  {
107  // create the item if possible
108  newItem = aPlacer->CreateItem();
109 
110  // no item created, so wait for another click
111  if( !newItem )
112  continue;
113 
114  controls()->CaptureCursor( true );
115  controls()->SetAutoPan( true );
116 
117  newItem->SetPosition( wxPoint( cursorPos.x, cursorPos.y ) );
118 
119  preview.Add( newItem.get() );
120 
121  if( newItem->Type() == PCB_MODULE_T )
122  {
123  auto module = dyn_cast<MODULE*>( newItem.get() );
124 
125  // modules have more drawable parts
126  module->RunOnChildren( std::bind( &KIGFX::VIEW_GROUP::Add, &preview, _1 ) );
127  }
128  }
129  else
130  {
131  newItem->ClearFlags();
132  preview.Remove( newItem.get() );
133 
134  aPlacer->PlaceItem( newItem.get() );
135 
136  if( newItem->Type() == PCB_MODULE_T )
137  {
138  auto module = dyn_cast<MODULE*>( newItem.get() );
139  module->RunOnChildren( std::bind( &KIGFX::VIEW_GROUP::Remove, &preview, _1 ) );
140  }
141 
142  commit.Add( newItem.release() );
143  commit.Push( aCommitMessage );
144 
145  controls()->CaptureCursor( false );
146  controls()->SetAutoPan( false );
147  controls()->ShowCursor( true );
148 
149  if( !( aOptions & IPO_REPEAT ) )
150  break;
151 
152  if( aOptions & IPO_SINGLE_CLICK )
153  {
155 
156  newItem = aPlacer->CreateItem();
157  newItem->SetPosition( wxPoint( pos.x, pos.y ) );
158 
159  preview.Add( newItem.get() );
160  }
161  }
162  }
163 
164  else if( newItem && evt->Category() == TC_COMMAND )
165  {
166  /*
167  * Handle any events that can affect the item as we move
168  * it around, eg rotate and flip
169  */
170 
171  if( TOOL_EVT_UTILS::IsRotateToolEvt( *evt ) && ( aOptions & IPO_ROTATE ) )
172  {
173  const auto rotationAngle = TOOL_EVT_UTILS::GetEventRotationAngle(
174  *frame(), *evt );
175  newItem->Rotate( newItem->GetPosition(), rotationAngle );
176  view()->Update( &preview );
177  }
178  else if( evt->IsAction( &PCB_ACTIONS::flip ) && ( aOptions & IPO_FLIP ) )
179  {
180  newItem->Flip( newItem->GetPosition() );
181  view()->Update( &preview );
182  }
183  }
184 
185  else if( newItem && evt->IsMotion() )
186  {
187  // track the cursor
188  newItem->SetPosition( wxPoint( cursorPos.x, cursorPos.y ) );
189 
190  // Show a preview of the item
191  view()->Update( &preview );
192  }
193  }
194 
195  view()->Remove( &preview );
196 }
static TOOL_ACTION selectionClear
Clears the current selection.
Definition: pcb_actions.h:53
virtual void ShowCursor(bool aEnabled)
Function ShowCursor() Enables or disables display of cursor.
void RunOnChildren(std::function< void(BOARD_ITEM *)> aFunction)
Function RunOnChildren.
virtual void Clear() override
Function Clear() Removes all the stored items from the group.
Definition: selection.h:81
virtual bool PlaceItem(BOARD_ITEM *aItem)
Definition: pcb_tool.h:55
virtual void Update(VIEW_ITEM *aItem, int aUpdateFlags) override
For dynamic VIEWs, informs the associated VIEW that the graphical representation of this item has cha...
Definition: pcb_view.cpp:81
virtual std::unique_ptr< BOARD_ITEM > CreateItem()=0
OPT_TOOL_EVENT Wait(const TOOL_EVENT_LIST &aEventList=TOOL_EVENT(TC_ANY, TA_ANY))
Function Wait()
virtual void SetSnapping(bool aEnabled)
Function SetSnapping() Enables/disables snapping cursor to grid.
bool RunAction(const std::string &aActionName, bool aNow=false, T aParam=NULL)
Function RunAction() Runs the specified action.
Definition: tool_manager.h:125
PCB_EDIT_FRAME * m_frame
Definition: pcb_tool.h:57
bool IsRotateToolEvt(const TOOL_EVENT &aEvt)
Function isRotateToolEvt()
Casted dyn_cast(From aObject)
Function dyn_cast()
Definition: typeinfo.h:61
virtual void Remove(VIEW_ITEM *aItem) override
Function Remove() Removes a VIEW_ITEM from the view.
Definition: pcb_view.cpp:64
virtual void Add(EDA_ITEM *aItem)
Definition: selection.h:71
KIGFX::VIEW_CONTROLS * controls() const
Definition: pcb_tool.h:133
class MODULE, a footprint
Definition: typeinfo.h:89
virtual void CaptureCursor(bool aEnabled)
Function CaptureCursor() Forces the cursor to stay within the drawing panel area. ...
VECTOR2D GetCursorPosition() const
Returns the current cursor position in world coordinates.
PCB_EDIT_FRAME * frame() const
Definition: pcb_tool.h:134
MODULE * module() const
Definition: pcb_tool.h:136
virtual void Remove(VIEW_ITEM *aItem)
Function Remove() Removes an item from the group.
Definition: view_group.cpp:61
bool IsCancelInteractive(const TOOL_EVENT &aEvt)
Function IsCancelInteractive()
virtual void Add(VIEW_ITEM *aItem)
Function Add() Adds an item to the group.
Definition: view_group.cpp:55
virtual void SetAutoPan(bool aEnabled)
Function SetAutoPan Turns on/off auto panning (this feature is used when there is a tool active (eg...
static TOOL_ACTION flip
Flipping of selected objects.
Definition: pcb_actions.h:99
KIGFX::PCB_VIEW * view() const
Definition: pcb_tool.h:132
TOOL_MANAGER * GetManager() const
Function GetManager() Returns the instance of TOOL_MANAGER that takes care of the tool...
Definition: tool_base.h:144
void Activate()
Function Activate() Runs the tool.
virtual void Add(VIEW_ITEM *aItem, int aDrawPriority=-1) override
Function Add() Adds a VIEW_ITEM to the view.
Definition: pcb_view.cpp:48
int GetEventRotationAngle(const PCB_BASE_EDIT_FRAME &aFrame, const TOOL_EVENT &aEvt)
Function getEventRotationAngle()
OPT< TOOL_EVENT > OPT_TOOL_EVENT
Definition: tool_event.h:460
BOARD * board() const
Definition: pcb_tool.h:135
virtual void Remove(EDA_ITEM *aItem)
Definition: selection.h:76
int DRAWING_TOOL::DrawArc ( const TOOL_EVENT aEvent)

Function DrawArc() Starts interactively drawing an arc.

After invoking the function it expects the user to first click on a point that is going to be used as the center of the arc. The second click determines the origin and radius, the third one - the angle.

Definition at line 282 of file drawing_tool.cpp.

References COMMIT::Add(), ARC, drawArc(), getDrawingLayer(), PCB_BASE_EDIT_FRAME::GetModel(), getSegmentWidth(), ID_MODEDIT_ARC_TOOL, ID_PCB_ARC_BUTT, PCB_TOOL::m_editModules, m_frame, m_lineWidth, m_mode, BOARD_COMMIT::Push(), EDA_DRAW_FRAME::SetNoToolSelected(), and PCB_BASE_FRAME::SetToolID().

Referenced by setTransitions().

283 {
285  DRAWSEGMENT* arc = m_editModules ? new EDGE_MODULE( (MODULE*) parent ) : new DRAWSEGMENT;
286  BOARD_COMMIT commit( m_frame );
287 
288  SCOPED_DRAW_MODE scopedDrawMode( m_mode, MODE::ARC );
289 
291  wxCURSOR_PENCIL, _( "Add graphic arc" ) );
293 
294  while( drawArc( arc ) )
295  {
296  if( arc )
297  {
298  commit.Add( arc );
299  commit.Push( _( "Draw an arc" ) );
300  }
301 
302  arc = m_editModules ? new EDGE_MODULE( (MODULE*) parent ) : new DRAWSEGMENT;
303  }
304 
306 
307  return 0;
308 }
virtual void SetToolID(int aId, int aCursor, const wxString &aToolMsg) override
Function SetToolID sets the tool command ID to aId and sets the cursor to aCursor.
int getSegmentWidth(unsigned int aLayer) const
Returns the appropriate width for a segment depending on the settings.
RAII class that sets an value at construction and resets it to the original value at destruction...
unsigned int m_lineWidth
Stores the current line width for multisegment drawing.
Definition: drawing_tool.h:274
PCB_BASE_EDIT_FRAME * m_frame
Definition: drawing_tool.h:270
bool m_editModules
Definition: pcb_tool.h:142
virtual void SetNoToolSelected()
Select the ID_NO_TOOL_SELECTED id tool (Idle tool)
Definition: draw_frame.cpp:571
PCB_LAYER_ID getDrawingLayer() const
Selects a non-copper layer for drawing
virtual BOARD_ITEM_CONTAINER * GetModel() const =0
Function GetModel()
Abstract interface for BOARD_ITEMs capable of storing other items inside.
bool drawArc(DRAWSEGMENT *&aGraphic)
Starts drawing an arc.
bool DRAWING_TOOL::drawArc ( DRAWSEGMENT *&  aGraphic)
private

Starts drawing an arc.

Parameters
aGraphicis an object that is going to be used by the tool for drawing. It has to be already created. The tool deletes the object if it is not added to a BOARD.
Returns
False if the tool was cancelled before the origin was set or origin and end are the same point.

Definition at line 1109 of file drawing_tool.cpp.

References TOOL_INTERACTIVE::Activate(), SELECTION::Add(), KIGFX::VIEW::Add(), KIGFX::PREVIEW::MULTISTEP_GEOM_MANAGER::AddPoint(), PCB_ACTIONS::arcPosture, BUT_LEFT, BUT_RIGHT, KIGFX::VIEW_CONTROLS::CaptureCursor(), SELECTION::Clear(), PCB_ACTIONS::decWidth, deleteLastPoint, KIGFX::VIEW_CONTROLS::GetCursorPosition(), getDrawingLayer(), KIGFX::PREVIEW::MULTISTEP_GEOM_MANAGER::HasGeometryChanged(), PCB_ACTIONS::incWidth, TOOL_EVT_UTILS::IsCancelInteractive(), KIGFX::PREVIEW::MULTISTEP_GEOM_MANAGER::IsComplete(), KIGFX::PREVIEW::MULTISTEP_GEOM_MANAGER::IsReset(), m_controls, m_lineWidth, m_menu, TOOL_BASE::m_toolMgr, m_view, MD_CTRL, SELECTION::Remove(), KIGFX::VIEW::Remove(), KIGFX::PREVIEW::MULTISTEP_GEOM_MANAGER::RemoveLastPoint(), TOOL_MANAGER::RunAction(), S_ARC, PCB_ACTIONS::selectionClear, KIGFX::PREVIEW::ARC_GEOM_MANAGER::SetAngleSnap(), KIGFX::VIEW_CONTROLS::SetAutoPan(), BOARD_ITEM::SetLayer(), DRAWSEGMENT::SetShape(), KIGFX::VIEW_CONTROLS::SetSnapping(), DRAWSEGMENT::SetWidth(), TOOL_MENU::ShowContextMenu(), KIGFX::VIEW_CONTROLS::ShowCursor(), KIGFX::PREVIEW::ARC_GEOM_MANAGER::ToggleClockwise(), KIGFX::VIEW::Update(), updateArcFromConstructionMgr(), TOOL_INTERACTIVE::Wait(), and WIDTH_STEP.

Referenced by DrawArc().

1110 {
1112 
1113  // Arc geometric construction manager
1115 
1116  // Arc drawing assistant overlay
1117  KIGFX::PREVIEW::ARC_ASSISTANT arcAsst( arcManager );
1118 
1119  // Add a VIEW_GROUP that serves as a preview for the new item
1120  SELECTION preview;
1121  m_view->Add( &preview );
1122  m_view->Add( &arcAsst );
1123 
1124  m_controls->ShowCursor( true );
1125  m_controls->SetSnapping( true );
1126 
1127  Activate();
1128 
1129  bool firstPoint = false;
1130 
1131  // Main loop: keep receiving events
1132  while( OPT_TOOL_EVENT evt = Wait() )
1133  {
1134  const VECTOR2I cursorPos = m_controls->GetCursorPosition();
1135 
1136  if( evt->IsClick( BUT_LEFT ) )
1137  {
1138  if( !firstPoint )
1139  {
1140  m_controls->SetAutoPan( true );
1141  m_controls->CaptureCursor( true );
1142 
1143  PCB_LAYER_ID layer = getDrawingLayer();
1144 
1145  // Init the new item attributes
1146  // (non-geometric, those are handled by the manager)
1147  aGraphic->SetShape( S_ARC );
1148  aGraphic->SetWidth( m_lineWidth );
1149  aGraphic->SetLayer( layer );
1150 
1151  preview.Add( aGraphic );
1152  firstPoint = true;
1153  }
1154 
1155  arcManager.AddPoint( cursorPos, true );
1156  }
1157  else if( evt->IsAction( &deleteLastPoint ) )
1158  {
1159  arcManager.RemoveLastPoint();
1160  }
1161  else if( evt->IsMotion() )
1162  {
1163  // set angle snap
1164  arcManager.SetAngleSnap( evt->Modifier( MD_CTRL ) );
1165 
1166  // update, but don't step the manager state
1167  arcManager.AddPoint( cursorPos, false );
1168  }
1169  else if( TOOL_EVT_UTILS::IsCancelInteractive( *evt ) )
1170  {
1171  preview.Clear();
1172  delete aGraphic;
1173  aGraphic = nullptr;
1174  break;
1175  }
1176  else if( evt->IsClick( BUT_RIGHT ) )
1177  {
1179  }
1180  else if( evt->IsAction( &PCB_ACTIONS::incWidth ) )
1181  {
1183  aGraphic->SetWidth( m_lineWidth );
1184  m_view->Update( &preview );
1185  }
1186  else if( evt->IsAction( &PCB_ACTIONS::decWidth ) && m_lineWidth > WIDTH_STEP )
1187  {
1189  aGraphic->SetWidth( m_lineWidth );
1190  m_view->Update( &preview );
1191  }
1192  else if( evt->IsAction( &PCB_ACTIONS::arcPosture ) )
1193  {
1194  arcManager.ToggleClockwise();
1195  }
1196 
1197  if( arcManager.IsComplete() )
1198  {
1199  break;
1200  }
1201  else if( arcManager.HasGeometryChanged() )
1202  {
1203  updateArcFromConstructionMgr( arcManager, *aGraphic );
1204  m_view->Update( &preview );
1205  m_view->Update( &arcAsst );
1206  }
1207  }
1208 
1209  preview.Remove( aGraphic );
1210  m_view->Remove( &arcAsst );
1211  m_view->Remove( &preview );
1212  m_controls->SetAutoPan( false );
1213  m_controls->CaptureCursor( false );
1214 
1215  return !arcManager.IsReset();
1216 }
static TOOL_ACTION selectionClear
Clears the current selection.
Definition: pcb_actions.h:53
virtual void ShowCursor(bool aEnabled)
Function ShowCursor() Enables or disables display of cursor.
Class ARC_GEOM_MANAGER.
void SetShape(STROKE_T aShape)
virtual void Clear() override
Function Clear() Removes all the stored items from the group.
Definition: selection.h:81
static TOOL_ACTION incWidth
Increase width of currently drawn line.
Definition: pcb_actions.h:178
virtual void SetLayer(PCB_LAYER_ID aLayer)
Function SetLayer sets the layer this item is on.
static TOOL_ACTION deleteLastPoint("pcbnew.InteractiveDrawing.deleteLastPoint", AS_CONTEXT, WXK_BACK, _("Delete Last Point"), _("Delete the last point added to the current item"), undo_xpm)
static const unsigned int WIDTH_STEP
Definition: drawing_tool.h:280
TOOL_MANAGER * m_toolMgr
Definition: tool_base.h:215
virtual void Remove(VIEW_ITEM *aItem)
Function Remove() Removes a VIEW_ITEM from the view.
Definition: view.cpp:342
OPT_TOOL_EVENT Wait(const TOOL_EVENT_LIST &aEventList=TOOL_EVENT(TC_ANY, TA_ANY))
Function Wait()
virtual void SetSnapping(bool aEnabled)
Function SetSnapping() Enables/disables snapping cursor to grid.
bool RunAction(const std::string &aActionName, bool aNow=false, T aParam=NULL)
Function RunAction() Runs the specified action.
Definition: tool_manager.h:125
void RemoveLastPoint()
Undo the last point, and move the manager back to the previous step.
static void updateArcFromConstructionMgr(const KIGFX::PREVIEW::ARC_GEOM_MANAGER &aMgr, DRAWSEGMENT &aArc)
Update an arc DRAWSEGMENT from the current state of an Arc Geometry Manager.
void AddPoint(const VECTOR2I &aPt, bool aLockIn)
Add a point to the construction manager.
static TOOL_ACTION decWidth
Decrease width of currently drawn line.
Definition: pcb_actions.h:181
virtual void Add(EDA_ITEM *aItem)
Definition: selection.h:71
KIGFX::VIEW * m_view
Definition: drawing_tool.h:267
PCB_LAYER_ID
A quick note on layer IDs:
virtual void CaptureCursor(bool aEnabled)
Function CaptureCursor() Forces the cursor to stay within the drawing panel area. ...
VECTOR2D GetCursorPosition() const
Returns the current cursor position in world coordinates.
Arcs (with rounded ends)
unsigned int m_lineWidth
Stores the current line width for multisegment drawing.
Definition: drawing_tool.h:274
KIGFX::VIEW_CONTROLS * m_controls
Definition: drawing_tool.h:268
bool IsCancelInteractive(const TOOL_EVENT &aEvt)
Function IsCancelInteractive()
virtual void Update(VIEW_ITEM *aItem, int aUpdateFlags)
For dynamic VIEWs, informs the associated VIEW that the graphical representation of this item has cha...
Definition: view.cpp:1385
virtual void SetAutoPan(bool aEnabled)
Function SetAutoPan Turns on/off auto panning (this feature is used when there is a tool active (eg...
PCB_LAYER_ID getDrawingLayer() const
Selects a non-copper layer for drawing
static TOOL_ACTION arcPosture
Switch posture when drawing arc.
Definition: pcb_actions.h:184
void ToggleClockwise()
Reverse the current are direction
Class SELECTION_AREA.
Definition: arc_assistant.h:38
void Activate()
Function Activate() Runs the tool.
void SetAngleSnap(bool aSnap)
Set angle snapping (for the next point)
virtual void Add(VIEW_ITEM *aItem, int aDrawPriority=-1)
Function Add() Adds a VIEW_ITEM to the view.
Definition: view.cpp:312
void ShowContextMenu(SELECTION &aSelection)
Function ShowContextMenu.
Definition: tool_menu.cpp:62
TOOL_MENU m_menu
Menu model displayed by the tool.
Definition: drawing_tool.h:277
OPT< TOOL_EVENT > OPT_TOOL_EVENT
Definition: tool_event.h:460
void SetWidth(int aWidth)
virtual void Remove(EDA_ITEM *aItem)
Definition: selection.h:76
int DRAWING_TOOL::DrawCircle ( const TOOL_EVENT aEvent)

Function DrawCircle() Starts interactively drawing a circle.

After invoking the function it expects the user to first click on a point that is going to be used as the center of the circle. The second click determines the circle radius.

Definition at line 253 of file drawing_tool.cpp.

References COMMIT::Add(), CIRCLE, drawSegment(), getDrawingLayer(), PCB_BASE_EDIT_FRAME::GetModel(), getSegmentWidth(), ID_MODEDIT_CIRCLE_TOOL, ID_PCB_CIRCLE_BUTT, PCB_TOOL::m_editModules, m_frame, m_lineWidth, m_mode, BOARD_COMMIT::Push(), S_CIRCLE, EDA_DRAW_FRAME::SetNoToolSelected(), and PCB_BASE_FRAME::SetToolID().

Referenced by setTransitions().

254 {
256  DRAWSEGMENT* circle = m_editModules ? new EDGE_MODULE( (MODULE*) parent ) : new DRAWSEGMENT;
257  BOARD_COMMIT commit( m_frame );
258 
259  SCOPED_DRAW_MODE scopedDrawMode( m_mode, MODE::CIRCLE );
260 
262  wxCURSOR_PENCIL, _( "Add graphic circle" ) );
264 
265  while( drawSegment( S_CIRCLE, circle ) )
266  {
267  if( circle )
268  {
269  commit.Add( circle );
270  commit.Push( _( "Draw a circle" ) );
271  }
272 
273  circle = m_editModules ? new EDGE_MODULE( (MODULE*) parent ) : new DRAWSEGMENT;
274  }
275 
277 
278  return 0;
279 }
virtual void SetToolID(int aId, int aCursor, const wxString &aToolMsg) override
Function SetToolID sets the tool command ID to aId and sets the cursor to aCursor.
bool drawSegment(int aShape, DRAWSEGMENT *&aGraphic, OPT< VECTOR2D > aStartingPoint=NULLOPT)
Starts drawing a selected shape (i.e.
int getSegmentWidth(unsigned int aLayer) const
Returns the appropriate width for a segment depending on the settings.
RAII class that sets an value at construction and resets it to the original value at destruction...
unsigned int m_lineWidth
Stores the current line width for multisegment drawing.
Definition: drawing_tool.h:274
PCB_BASE_EDIT_FRAME * m_frame
Definition: drawing_tool.h:270
bool m_editModules
Definition: pcb_tool.h:142
virtual void SetNoToolSelected()
Select the ID_NO_TOOL_SELECTED id tool (Idle tool)
Definition: draw_frame.cpp:571
PCB_LAYER_ID getDrawingLayer() const
Selects a non-copper layer for drawing
virtual BOARD_ITEM_CONTAINER * GetModel() const =0
Function GetModel()
Abstract interface for BOARD_ITEMs capable of storing other items inside.
int DRAWING_TOOL::DrawDimension ( const TOOL_EVENT aEvent)

Function DrawDimension() Starts interactively drawing a dimension.

After invoking the function it expects the user to first click on a point that is going to be used as the origin of the dimension. The second click determines the end and the third click modifies its height.

Definition at line 474 of file drawing_tool.cpp.

References TOOL_INTERACTIVE::Activate(), SELECTION::Add(), COMMIT::Add(), KIGFX::VIEW::Add(), DIMENSION::AdjustDimensionDetails(), PNS::angle(), BUT_LEFT, BUT_RIGHT, KIGFX::VIEW_CONTROLS::CaptureCursor(), Clamp_Text_PenSize(), SELECTION::Clear(), PCB_ACTIONS::decWidth, delta, DIMENSION, Dwgs_User, Edge_Cuts, DIMENSION::GetAngle(), KIGFX::VIEW_CONTROLS::GetCursorPosition(), BOARD::GetDesignSettings(), getDrawingLayer(), DIMENSION::GetEnd(), DIMENSION::GetOrigin(), DIMENSION::GetPosition(), getSegmentWidth(), EDA_TEXT::GetTextSize(), DIMENSION::GetWidth(), ID_PCB_DIMENSION_BUTT, PCB_ACTIONS::incWidth, TOOL_EVT_UTILS::IsCancelInteractive(), m_board, m_controls, DIMENSION::m_featureLineDO, m_frame, m_lineWidth, m_menu, m_mode, BOARD_DESIGN_SETTINGS::m_PcbTextSize, BOARD_DESIGN_SETTINGS::m_PcbTextWidth, TOOL_BASE::m_toolMgr, m_view, BOARD_COMMIT::Push(), SELECTION::Remove(), KIGFX::VIEW::Remove(), TOOL_MANAGER::RunAction(), PCB_ACTIONS::selectionClear, KIGFX::VIEW_CONTROLS::SetAutoPan(), DIMENSION::SetEnd(), DIMENSION::SetHeight(), DIMENSION::SetLayer(), EDA_DRAW_FRAME::SetNoToolSelected(), DIMENSION::SetOrigin(), KIGFX::VIEW_CONTROLS::SetSnapping(), EDA_TEXT::SetTextSize(), EDA_TEXT::SetThickness(), PCB_BASE_FRAME::SetToolID(), DIMENSION::SetWidth(), TOOL_MENU::ShowContextMenu(), KIGFX::VIEW_CONTROLS::ShowCursor(), DIMENSION::Text(), KIGFX::VIEW::Update(), TOOL_INTERACTIVE::Wait(), WIDTH_STEP, wxPoint::x, VECTOR2< T >::x, wxPoint::y, and VECTOR2< T >::y.

Referenced by setTransitions().

475 {
476  DIMENSION* dimension = NULL;
477  BOARD_COMMIT commit( m_frame );
478  int maxThickness;
479 
480  // Add a VIEW_GROUP that serves as a preview for the new item
481  SELECTION preview;
482 
483  m_view->Add( &preview );
484 
486  m_controls->ShowCursor( true );
487  m_controls->SetSnapping( true );
488 
489  SCOPED_DRAW_MODE scopedDrawMode( m_mode, MODE::DIMENSION );
490 
491  Activate();
492  m_frame->SetToolID( ID_PCB_DIMENSION_BUTT, wxCURSOR_PENCIL, _( "Add dimension" ) );
494 
495  enum DIMENSION_STEPS
496  {
497  SET_ORIGIN = 0,
498  SET_END,
499  SET_HEIGHT,
500  FINISHED
501  };
502  int step = SET_ORIGIN;
503 
504  // Main loop: keep receiving events
505  while( OPT_TOOL_EVENT evt = Wait() )
506  {
507  VECTOR2I cursorPos = m_controls->GetCursorPosition();
508 
510  {
511  if( step != SET_ORIGIN ) // start from the beginning
512  {
513  preview.Clear();
514 
515  delete dimension;
516  step = SET_ORIGIN;
517  }
518  else
519  break;
520 
521  if( evt->IsActivate() ) // now finish unconditionally
522  break;
523  }
524  else if( evt->IsAction( &PCB_ACTIONS::incWidth ) && step != SET_ORIGIN )
525  {
527  dimension->SetWidth( m_lineWidth );
528  m_view->Update( &preview );
529  }
530  else if( evt->IsAction( &PCB_ACTIONS::decWidth ) && step != SET_ORIGIN )
531  {
532  if( m_lineWidth > WIDTH_STEP )
533  {
535  dimension->SetWidth( m_lineWidth );
536  m_view->Update( &preview );
537  }
538  }
539  else if( evt->IsClick( BUT_RIGHT ) )
540  {
542  }
543  else if( evt->IsClick( BUT_LEFT ) )
544  {
545  switch( step )
546  {
547  case SET_ORIGIN:
548  {
549  PCB_LAYER_ID layer = getDrawingLayer();
550 
551  if( layer == Edge_Cuts ) // dimensions are not allowed on EdgeCuts
552  layer = Dwgs_User;
553 
554  // Init the new item attributes
555  dimension = new DIMENSION( m_board );
556  dimension->SetLayer( layer );
557  dimension->SetOrigin( wxPoint( cursorPos.x, cursorPos.y ) );
558  dimension->SetEnd( wxPoint( cursorPos.x, cursorPos.y ) );
560 
562  maxThickness = Clamp_Text_PenSize( width, dimension->Text().GetTextSize() );
563 
564  if( width > maxThickness )
565  width = maxThickness;
566 
567  dimension->Text().SetThickness( width );
568  dimension->SetWidth( width );
569  dimension->AdjustDimensionDetails();
570 
571  preview.Add( dimension );
572 
573  m_controls->SetAutoPan( true );
574  m_controls->CaptureCursor( true );
575  }
576  break;
577 
578  case SET_END:
579  dimension->SetEnd( wxPoint( cursorPos.x, cursorPos.y ) );
580 
581  // Dimensions that have origin and end in the same spot are not valid
582  if( dimension->GetOrigin() == dimension->GetEnd() )
583  --step;
584 
585  break;
586 
587  case SET_HEIGHT:
588  {
589  if( wxPoint( cursorPos.x, cursorPos.y ) != dimension->GetPosition() )
590  {
591  assert( dimension->GetOrigin() != dimension->GetEnd() );
592  assert( dimension->GetWidth() > 0 );
593 
594  preview.Remove( dimension );
595 
596  commit.Add( dimension );
597  commit.Push( _( "Draw a dimension" ) );
598  }
599  }
600  break;
601  }
602 
603  if( ++step == FINISHED )
604  {
605  step = SET_ORIGIN;
606  m_controls->SetAutoPan( false );
607  m_controls->CaptureCursor( false );
608  }
609  }
610  else if( evt->IsMotion() )
611  {
612  switch( step )
613  {
614  case SET_END:
615  dimension->SetEnd( wxPoint( cursorPos.x, cursorPos.y ) );
616  break;
617 
618  case SET_HEIGHT:
619  {
620  // Calculating the direction of travel perpendicular to the selected axis
621  double angle = dimension->GetAngle() + ( M_PI / 2 );
622 
623  wxPoint pos( cursorPos.x, cursorPos.y );
624  wxPoint delta( pos - dimension->m_featureLineDO );
625  double height = ( delta.x * cos( angle ) ) + ( delta.y * sin( angle ) );
626  dimension->SetHeight( height );
627  }
628  break;
629  }
630 
631  // Show a preview of the item
632  m_view->Update( &preview );
633  }
634  }
635 
636  if( step != SET_ORIGIN )
637  delete dimension;
638 
639  m_view->Remove( &preview );
641 
642  return 0;
643 }
static TOOL_ACTION selectionClear
Clears the current selection.
Definition: pcb_actions.h:53
virtual void ShowCursor(bool aEnabled)
Function ShowCursor() Enables or disables display of cursor.
virtual void Clear() override
Function Clear() Removes all the stored items from the group.
Definition: selection.h:81
virtual void SetToolID(int aId, int aCursor, const wxString &aToolMsg) override
Function SetToolID sets the tool command ID to aId and sets the cursor to aCursor.
BOARD * m_board
Definition: drawing_tool.h:269
static TOOL_ACTION incWidth
Increase width of currently drawn line.
Definition: pcb_actions.h:178
int m_PcbTextWidth
current Pcb (not module) Text width
int GetWidth() const
static const unsigned int WIDTH_STEP
Definition: drawing_tool.h:280
TOOL_MANAGER * m_toolMgr
Definition: tool_base.h:215
virtual void Remove(VIEW_ITEM *aItem)
Function Remove() Removes a VIEW_ITEM from the view.
Definition: view.cpp:342
OPT_TOOL_EVENT Wait(const TOOL_EVENT_LIST &aEventList=TOOL_EVENT(TC_ANY, TA_ANY))
Function Wait()
virtual void SetSnapping(bool aEnabled)
Function SetSnapping() Enables/disables snapping cursor to grid.
bool RunAction(const std::string &aActionName, bool aNow=false, T aParam=NULL)
Function RunAction() Runs the specified action.
Definition: tool_manager.h:125
void SetTextSize(const wxSize &aNewSize)
Definition: eda_text.h:214
double GetAngle() const
Function GetAngle Returns angle of the crossbar.
static const int delta[8][2]
Definition: solve.cpp:112
void SetLayer(PCB_LAYER_ID aLayer) override
Function SetLayer sets the layer this item is on.
static TOOL_ACTION decWidth
Decrease width of currently drawn line.
Definition: pcb_actions.h:181
virtual void Add(EDA_ITEM *aItem)
Definition: selection.h:71
KIGFX::VIEW * m_view
Definition: drawing_tool.h:267
int getSegmentWidth(unsigned int aLayer) const
Returns the appropriate width for a segment depending on the settings.
PCB_LAYER_ID
A quick note on layer IDs:
void SetOrigin(const wxPoint &aOrigin)
Function SetOrigin Sets a new origin of the crossbar line.
RAII class that sets an value at construction and resets it to the original value at destruction...
const wxPoint & GetEnd()
Function GetEnd.
virtual void CaptureCursor(bool aEnabled)
Function CaptureCursor() Forces the cursor to stay within the drawing panel area. ...
wxSize m_PcbTextSize
current Pcb (not module) Text size
const wxPoint & GetOrigin() const
Function GetOrigin.
void SetEnd(const wxPoint &aEnd)
Function SetEnd Sets a new end of the crossbar line.
VECTOR2D GetCursorPosition() const
Returns the current cursor position in world coordinates.
int Clamp_Text_PenSize(int aPenSize, int aSize, bool aBold)
Function Clamp_Text_PenSize As a rule, pen width should not be >1/4em, otherwise the character will b...
Definition: drawtxt.cpp:67
unsigned int m_lineWidth
Stores the current line width for multisegment drawing.
Definition: drawing_tool.h:274
BOARD_DESIGN_SETTINGS & GetDesignSettings() const
Function GetDesignSettings.
Definition: class_board.h:532
KIGFX::VIEW_CONTROLS * m_controls
Definition: drawing_tool.h:268
bool IsCancelInteractive(const TOOL_EVENT &aEvt)
Function IsCancelInteractive()
virtual void Update(VIEW_ITEM *aItem, int aUpdateFlags)
For dynamic VIEWs, informs the associated VIEW that the graphical representation of this item has cha...
Definition: view.cpp:1385
virtual void SetAutoPan(bool aEnabled)
Function SetAutoPan Turns on/off auto panning (this feature is used when there is a tool active (eg...
void AdjustDimensionDetails(bool aDoNotChangeText=false)
Function AdjustDimensionDetails Calculate coordinates of segments used to draw the dimension...
PCB_BASE_EDIT_FRAME * m_frame
Definition: drawing_tool.h:270
virtual void SetNoToolSelected()
Select the ID_NO_TOOL_SELECTED id tool (Idle tool)
Definition: draw_frame.cpp:571
PCB_LAYER_ID getDrawingLayer() const
Selects a non-copper layer for drawing
void SetHeight(int aHeight)
Function SetHeight Sets the length of feature lines.
static DIRECTION_45::AngleType angle(const VECTOR2I &a, const VECTOR2I &b)
TEXTE_PCB & Text()
void Activate()
Function Activate() Runs the tool.
virtual void Add(VIEW_ITEM *aItem, int aDrawPriority=-1)
Function Add() Adds a VIEW_ITEM to the view.
Definition: view.cpp:312
const wxSize & GetTextSize() const
Definition: eda_text.h:215
const wxPoint & GetPosition() const override
void SetWidth(int aWidth)
wxPoint m_featureLineDO
void ShowContextMenu(SELECTION &aSelection)
Function ShowContextMenu.
Definition: tool_menu.cpp:62
Class DIMENSION.
TOOL_MENU m_menu
Menu model displayed by the tool.
Definition: drawing_tool.h:277
void SetThickness(int aNewThickness)
Function SetThickness sets pen width.
Definition: eda_text.h:148
OPT< TOOL_EVENT > OPT_TOOL_EVENT
Definition: tool_event.h:460
virtual void Remove(EDA_ITEM *aItem)
Definition: selection.h:76
int DRAWING_TOOL::DrawGraphicPolygon ( const TOOL_EVENT aEvent)

Definition at line 675 of file drawing_tool.cpp.

References drawZone(), GRAPHIC_POLYGON, ID_PCB_ADD_POLYGON_BUTT, m_frame, m_mode, and PCB_BASE_FRAME::SetToolID().

Referenced by setTransitions().

676 {
677  SCOPED_DRAW_MODE scopedDrawMode( m_mode, MODE::GRAPHIC_POLYGON );
678 
679  m_frame->SetToolID( ID_PCB_ADD_POLYGON_BUTT, wxCURSOR_PENCIL, _( "Add graphic polygon" ) );
680 
681  return drawZone( false, ZONE_MODE::GRAPHIC_POLYGON );
682 }
virtual void SetToolID(int aId, int aCursor, const wxString &aToolMsg) override
Function SetToolID sets the tool command ID to aId and sets the cursor to aCursor.
int drawZone(bool aKeepout, ZONE_MODE aMode)
Draws a polygon, that is added as a zone or a keepout area.
RAII class that sets an value at construction and resets it to the original value at destruction...
PCB_BASE_EDIT_FRAME * m_frame
Definition: drawing_tool.h:270
int DRAWING_TOOL::DrawLine ( const TOOL_EVENT aEvent)

Function DrawLine() Starts interactively drawing a line.

After invoking the function it expects the user to click at least two times to determine the origin and the end for a line. If there are more clicks, the line is drawn as a continous polyline.

Definition at line 217 of file drawing_tool.cpp.

References COMMIT::Add(), drawSegment(), getDrawingLayer(), DRAWSEGMENT::GetEnd(), PCB_BASE_EDIT_FRAME::GetModel(), getSegmentWidth(), ID_MODEDIT_LINE_TOOL, ID_PCB_ADD_LINE_BUTT, LINE, PCB_TOOL::m_editModules, m_frame, m_lineWidth, m_mode, NULLOPT, BOARD_COMMIT::Push(), S_SEGMENT, EDA_DRAW_FRAME::SetNoToolSelected(), and PCB_BASE_FRAME::SetToolID().

Referenced by setTransitions().

218 {
220  DRAWSEGMENT* line = m_editModules ? new EDGE_MODULE( (MODULE*) parent ) : new DRAWSEGMENT;
221 
222  OPT<VECTOR2D> startingPoint;
223  BOARD_COMMIT commit( m_frame );
224 
225  SCOPED_DRAW_MODE scopedDrawMode( m_mode, MODE::LINE );
226 
228  wxCURSOR_PENCIL, _( "Add graphic line" ) );
230 
231  while( drawSegment( S_SEGMENT, line, startingPoint ) )
232  {
233  if( line )
234  {
235  commit.Add( line );
236  commit.Push( _( "Draw a line segment" ) );
237  startingPoint = VECTOR2D( line->GetEnd() );
238  }
239  else
240  {
241  startingPoint = NULLOPT;
242  }
243 
244  line = m_editModules ? new EDGE_MODULE( (MODULE*) parent ) : new DRAWSEGMENT;
245  }
246 
248 
249  return 0;
250 }
virtual void SetToolID(int aId, int aCursor, const wxString &aToolMsg) override
Function SetToolID sets the tool command ID to aId and sets the cursor to aCursor.
bool drawSegment(int aShape, DRAWSEGMENT *&aGraphic, OPT< VECTOR2D > aStartingPoint=NULLOPT)
Starts drawing a selected shape (i.e.
usual segment : line with rounded ends
int getSegmentWidth(unsigned int aLayer) const
Returns the appropriate width for a segment depending on the settings.
RAII class that sets an value at construction and resets it to the original value at destruction...
const wxPoint & GetEnd() const
Function GetEnd returns the ending point of the graphic.
const auto NULLOPT
Definition: optional.h:9
VECTOR2< double > VECTOR2D
Definition: vector2d.h:588
unsigned int m_lineWidth
Stores the current line width for multisegment drawing.
Definition: drawing_tool.h:274
PCB_BASE_EDIT_FRAME * m_frame
Definition: drawing_tool.h:270
bool m_editModules
Definition: pcb_tool.h:142
virtual void SetNoToolSelected()
Select the ID_NO_TOOL_SELECTED id tool (Idle tool)
Definition: draw_frame.cpp:571
PCB_LAYER_ID getDrawingLayer() const
Selects a non-copper layer for drawing
boost::optional< T > OPT
Definition: optional.h:7
virtual BOARD_ITEM_CONTAINER * GetModel() const =0
Function GetModel()
Abstract interface for BOARD_ITEMs capable of storing other items inside.
bool DRAWING_TOOL::drawSegment ( int  aShape,
DRAWSEGMENT *&  aGraphic,
OPT< VECTOR2D aStartingPoint = NULLOPT 
)
private

Starts drawing a selected shape (i.e.

DRAWSEGMENT).

Parameters
aShapeis the type of created shape (
See also
STROKE_T).
Parameters
aGraphicis an object that is going to be used by the tool for drawing. It has to be already created. The tool deletes the object if it is not added to a BOARD.
aStartingPointis a starting point for this new DRAWSEGMENT. If exists the new item has its start point set to aStartingPoint, and its settings (width, layer) set to the current default values.
Returns
False if the tool was cancelled before the origin was set or origin and end are the same point.

Definition at line 922 of file drawing_tool.cpp.

References TOOL_INTERACTIVE::Activate(), SELECTION::Add(), COMMIT::Add(), KIGFX::VIEW::Add(), BUT_LEFT, BUT_RIGHT, KIGFX::VIEW_CONTROLS::CaptureCursor(), SELECTION::Clear(), PCB_ACTIONS::decWidth, PCB_TOOL::frame(), KIGFX::VIEW_CONTROLS::GetCursorPosition(), getDrawingLayer(), DRAWSEGMENT::GetEnd(), PCB_BASE_EDIT_FRAME::GetModel(), DRAWSEGMENT::GetStart(), PCB_ACTIONS::incWidth, TOOL_EVT_UTILS::IsCancelInteractive(), PCB_ACTIONS::layerChanged, m_controls, PCB_TOOL::m_editModules, m_frame, m_lineWidth, m_menu, TOOL_BASE::m_toolMgr, PCB_GENERAL_SETTINGS::m_use45DegreeGraphicSegments, m_view, make45DegLine(), MD_CTRL, BOARD_COMMIT::Push(), SELECTION::Remove(), KIGFX::VIEW::Remove(), TOOL_MANAGER::RunAction(), S_CIRCLE, S_SEGMENT, PCB_ACTIONS::selectionClear, KIGFX::VIEW_CONTROLS::SetAutoPan(), DRAWSEGMENT::SetEnd(), BOARD_ITEM::SetLayer(), DRAWSEGMENT::SetShape(), KIGFX::VIEW_CONTROLS::SetSnapping(), DRAWSEGMENT::SetStart(), PCB_BASE_FRAME::Settings(), DRAWSEGMENT::SetWidth(), TOOL_MENU::ShowContextMenu(), KIGFX::VIEW_CONTROLS::ShowCursor(), KIGFX::VIEW::Update(), TOOL_INTERACTIVE::Wait(), WIDTH_STEP, VECTOR2< T >::x, and VECTOR2< T >::y.

Referenced by DrawCircle(), and DrawLine().

924 {
925  // Only two shapes are currently supported
926  assert( aShape == S_SEGMENT || aShape == S_CIRCLE );
927 
928  DRAWSEGMENT line45;
929 
930  // Add a VIEW_GROUP that serves as a preview for the new item
931  SELECTION preview;
932  m_view->Add( &preview );
933 
935  m_controls->ShowCursor( true );
936  m_controls->SetSnapping( true );
937 
938  Activate();
939 
940  bool direction45 = false; // 45 degrees only mode
941  bool started = false;
942  VECTOR2I cursorPos = m_controls->GetCursorPosition();
943 
944  if( aStartingPoint )
945  {
946  // Init the new item attributes
947  aGraphic->SetShape( (STROKE_T) aShape );
948  aGraphic->SetWidth( m_lineWidth );
949  aGraphic->SetStart( wxPoint( aStartingPoint->x, aStartingPoint->y ) );
950  aGraphic->SetEnd( wxPoint( cursorPos.x, cursorPos.y ) );
951  aGraphic->SetLayer( getDrawingLayer() );
952 
953  if( aShape == S_SEGMENT )
954  line45 = *aGraphic; // used only for direction 45 mode with lines
955 
956  preview.Add( aGraphic );
957  m_controls->SetAutoPan( true );
958  m_controls->CaptureCursor( true );
959 
960  started = true;
961  }
962 
963  // Main loop: keep receiving events
964  while( OPT_TOOL_EVENT evt = Wait() )
965  {
966  cursorPos = m_controls->GetCursorPosition();
967 
968  // 45 degree angle constraint enabled with an option and toggled with Ctrl
969  const bool limit45 = ( frame()->Settings().m_use45DegreeGraphicSegments != !!( evt->Modifier( MD_CTRL ) ) );
970 
971  if( direction45 != limit45 && started && aShape == S_SEGMENT )
972  {
973  direction45 = limit45;
974 
975  if( direction45 )
976  {
977  preview.Add( &line45 );
978  make45DegLine( aGraphic, &line45 );
979  }
980  else
981  {
982  preview.Remove( &line45 );
983  aGraphic->SetEnd( wxPoint( cursorPos.x, cursorPos.y ) );
984  }
985 
986  m_view->Update( &preview );
987  }
988 
990  {
991  preview.Clear();
992  m_view->Update( &preview );
993  delete aGraphic;
994  aGraphic = NULL;
995  break;
996  }
997  else if( evt->IsAction( &PCB_ACTIONS::layerChanged ) )
998  {
999  aGraphic->SetLayer( getDrawingLayer() );
1000  m_view->Update( &preview );
1001  }
1002  else if( evt->IsClick( BUT_RIGHT ) )
1003  {
1005  }
1006  else if( evt->IsClick( BUT_LEFT ) || evt->IsDblClick( BUT_LEFT ) )
1007  {
1008  if( !started )
1009  {
1010  // Init the new item attributes
1011  aGraphic->SetShape( (STROKE_T) aShape );
1012  aGraphic->SetWidth( m_lineWidth );
1013  aGraphic->SetStart( wxPoint( cursorPos.x, cursorPos.y ) );
1014  aGraphic->SetEnd( wxPoint( cursorPos.x, cursorPos.y ) );
1015  aGraphic->SetLayer( getDrawingLayer() );
1016 
1017  if( aShape == S_SEGMENT )
1018  line45 = *aGraphic; // used only for direction 45 mode with lines
1019 
1020  preview.Add( aGraphic );
1021  m_controls->SetAutoPan( true );
1022  m_controls->CaptureCursor( true );
1023 
1024  started = true;
1025  }
1026  else
1027  {
1028  if( aGraphic->GetEnd() == aGraphic->GetStart()
1029  || ( evt->IsDblClick( BUT_LEFT ) && aShape == S_SEGMENT ) )
1030  // User has clicked twice in the same spot
1031  {
1032  // a clear sign that the current drawing is finished
1033  // Now we have to add the helper line as well
1034  if( direction45 )
1035  {
1036  BOARD_ITEM_CONTAINER* parent = m_frame->GetModel();
1037  DRAWSEGMENT* l = m_editModules ? new EDGE_MODULE( (MODULE*) parent )
1038  : new DRAWSEGMENT;
1039 
1040  // Copy coordinates, layer, etc.
1041  *static_cast<DRAWSEGMENT*>( l ) = line45;
1042  l->SetEnd( aGraphic->GetStart() );
1043 
1044  BOARD_COMMIT commit( m_frame );
1045  commit.Add( l );
1046  commit.Push( _( "Draw a line" ) );
1047  }
1048 
1049  delete aGraphic;
1050  aGraphic = NULL;
1051  }
1052 
1053  preview.Clear();
1054  break;
1055  }
1056  }
1057  else if( evt->IsMotion() )
1058  {
1059  // 45 degree lines
1060  if( direction45 && aShape == S_SEGMENT )
1061  make45DegLine( aGraphic, &line45 );
1062  else
1063  aGraphic->SetEnd( wxPoint( cursorPos.x, cursorPos.y ) );
1064 
1065  m_view->Update( &preview );
1066  }
1067  else if( evt->IsAction( &PCB_ACTIONS::incWidth ) )
1068  {
1070  aGraphic->SetWidth( m_lineWidth );
1071  line45.SetWidth( m_lineWidth );
1072  m_view->Update( &preview );
1073  }
1074  else if( evt->IsAction( &PCB_ACTIONS::decWidth ) && ( m_lineWidth > WIDTH_STEP ) )
1075  {
1077  aGraphic->SetWidth( m_lineWidth );
1078  line45.SetWidth( m_lineWidth );
1079  m_view->Update( &preview );
1080  }
1081  }
1082 
1083  m_view->Remove( &preview );
1084  m_controls->SetAutoPan( false );
1085  m_controls->CaptureCursor( false );
1086 
1087  return started;
1088 }
static TOOL_ACTION selectionClear
Clears the current selection.
Definition: pcb_actions.h:53
virtual void ShowCursor(bool aEnabled)
Function ShowCursor() Enables or disables display of cursor.
void SetShape(STROKE_T aShape)
virtual void Clear() override
Function Clear() Removes all the stored items from the group.
Definition: selection.h:81
static TOOL_ACTION incWidth
Increase width of currently drawn line.
Definition: pcb_actions.h:178
virtual void SetLayer(PCB_LAYER_ID aLayer)
Function SetLayer sets the layer this item is on.
static const unsigned int WIDTH_STEP
Definition: drawing_tool.h:280
TOOL_MANAGER * m_toolMgr
Definition: tool_base.h:215
virtual void Remove(VIEW_ITEM *aItem)
Function Remove() Removes a VIEW_ITEM from the view.
Definition: view.cpp:342
OPT_TOOL_EVENT Wait(const TOOL_EVENT_LIST &aEventList=TOOL_EVENT(TC_ANY, TA_ANY))
Function Wait()
virtual void SetSnapping(bool aEnabled)
Function SetSnapping() Enables/disables snapping cursor to grid.
bool RunAction(const std::string &aActionName, bool aNow=false, T aParam=NULL)
Function RunAction() Runs the specified action.
Definition: tool_manager.h:125
usual segment : line with rounded ends
static TOOL_ACTION decWidth
Decrease width of currently drawn line.
Definition: pcb_actions.h:181
virtual void Add(EDA_ITEM *aItem)
Definition: selection.h:71
KIGFX::VIEW * m_view
Definition: drawing_tool.h:267
const wxPoint & GetEnd() const
Function GetEnd returns the ending point of the graphic.
virtual void CaptureCursor(bool aEnabled)
Function CaptureCursor() Forces the cursor to stay within the drawing panel area. ...
PCB_GENERAL_SETTINGS & Settings()
VECTOR2D GetCursorPosition() const
Returns the current cursor position in world coordinates.
PCB_EDIT_FRAME * frame() const
Definition: pcb_tool.h:134
unsigned int m_lineWidth
Stores the current line width for multisegment drawing.
Definition: drawing_tool.h:274
STROKE_T
Enum STROKE_T is the set of shapes for segments (graphic segments and tracks) which are often in the ...
KIGFX::VIEW_CONTROLS * m_controls
Definition: drawing_tool.h:268
bool IsCancelInteractive(const TOOL_EVENT &aEvt)
Function IsCancelInteractive()
virtual void Update(VIEW_ITEM *aItem, int aUpdateFlags)
For dynamic VIEWs, informs the associated VIEW that the graphical representation of this item has cha...
Definition: view.cpp:1385
virtual void SetAutoPan(bool aEnabled)
Function SetAutoPan Turns on/off auto panning (this feature is used when there is a tool active (eg...
void SetStart(const wxPoint &aStart)
PCB_BASE_EDIT_FRAME * m_frame
Definition: drawing_tool.h:270
bool m_editModules
Definition: pcb_tool.h:142
PCB_LAYER_ID getDrawingLayer() const
Selects a non-copper layer for drawing
static TOOL_ACTION layerChanged
Definition: pcb_actions.h:270
void SetEnd(const wxPoint &aEnd)
void Activate()
Function Activate() Runs the tool.
virtual BOARD_ITEM_CONTAINER * GetModel() const =0
Function GetModel()
virtual void Add(VIEW_ITEM *aItem, int aDrawPriority=-1)
Function Add() Adds a VIEW_ITEM to the view.
Definition: view.cpp:312
Abstract interface for BOARD_ITEMs capable of storing other items inside.
const wxPoint & GetStart() const
Function GetStart returns the starting point of the graphic.
void ShowContextMenu(SELECTION &aSelection)
Function ShowContextMenu.
Definition: tool_menu.cpp:62
TOOL_MENU m_menu
Menu model displayed by the tool.
Definition: drawing_tool.h:277
void make45DegLine(DRAWSEGMENT *aSegment, DRAWSEGMENT *aHelper) const
Function make45DegLine() Forces a DRAWSEGMENT to be drawn at multiple of 45 degrees.
OPT< TOOL_EVENT > OPT_TOOL_EVENT
Definition: tool_event.h:460
void SetWidth(int aWidth)
virtual void Remove(EDA_ITEM *aItem)
Definition: selection.h:76
int DRAWING_TOOL::DrawSimilarZone ( const TOOL_EVENT aEvent)

Function DrawSimilarZone() Starts interactively drawing a zone with same settings as an existing zone.

The normal zone interactive tool is used, but the zone settings dialog is not shown at the start.

Definition at line 685 of file drawing_tool.cpp.

References drawZone(), ID_PCB_ZONES_BUTT, m_frame, m_mode, PCB_BASE_FRAME::SetToolID(), SIMILAR, and ZONE.

Referenced by setTransitions().

686 {
687  SCOPED_DRAW_MODE scopedDrawMode( m_mode, MODE::ZONE );
688 
689  m_frame->SetToolID( ID_PCB_ZONES_BUTT, wxCURSOR_PENCIL, _( "Add similar zone" ) );
690 
691  return drawZone( false, ZONE_MODE::SIMILAR );
692 }
virtual void SetToolID(int aId, int aCursor, const wxString &aToolMsg) override
Function SetToolID sets the tool command ID to aId and sets the cursor to aCursor.
int drawZone(bool aKeepout, ZONE_MODE aMode)
Draws a polygon, that is added as a zone or a keepout area.
Add a new zone with the same settings as an existing one.
RAII class that sets an value at construction and resets it to the original value at destruction...
PCB_BASE_EDIT_FRAME * m_frame
Definition: drawing_tool.h:270
int DRAWING_TOOL::DrawVia ( const TOOL_EVENT aEvent)

Definition at line 1396 of file drawing_tool.cpp.

References B_Cu, PCB_TOOL::doInteractiveItemPlacement(), F_Cu, PCB_TOOL::frame(), PCB_BASE_FRAME::GetActiveLayer(), BOARD::GetCopperLayerCount(), BOARD::GetDesignSettings(), ZONE_CONTAINER::GetLayer(), VIA::GetLayerSet(), NETINFO_ITEM::GetMicroViaDrillSize(), NETINFO_ITEM::GetMicroViaSize(), BOARD_CONNECTED_ITEM::GetNet(), VIA::GetPosition(), PCB_BASE_FRAME::GetScreen(), VIA::GetViaType(), ID_NO_TOOL_SELECTED, ID_PCB_DRAW_VIA_BUTT, In1_Cu, PCB_TOOL::IPO_FLIP, PCB_TOOL::IPO_PROPERTIES, PCB_TOOL::IPO_REPEAT, PCB_TOOL::IPO_ROTATE, PCB_TOOL::IPO_SINGLE_CLICK, BOARD::IsLayerVisible(), m_board, m_frame, PCB_SCREEN::m_Route_Layer_BOTTOM, PCB_SCREEN::m_Route_Layer_TOP, mod, BOARD::Modules(), VIA::SetDrill(), VIA::SetLayerPair(), BOARD_CONNECTED_ITEM::SetNetCode(), PCB_BASE_FRAME::SetToolID(), VIA::SetViaType(), TRACK::SetWidth(), ToLAYER_ID(), BOARD::Tracks(), VIA, VIA_BLIND_BURIED, VIA_MICROVIA, and BOARD::Zones().

Referenced by setTransitions().

1397 {
1398  struct VIA_PLACER : public INTERACTIVE_PLACER_BASE
1399  {
1400  int findStitchedZoneNet( VIA* aVia )
1401  {
1402  const auto pos = aVia->GetPosition();
1403  const auto lset = aVia->GetLayerSet();
1404 
1405  for( auto tv : m_board->Tracks() ) // fixme: move to BOARD class?
1406  {
1407  if( tv->HitTest( pos ) && ( tv->GetLayerSet() & lset ).any() )
1408  return -1;
1409  }
1410 
1411  for( auto mod : m_board->Modules() )
1412  {
1413  for( auto pad : mod->Pads() )
1414  {
1415  if( pad->HitTest( pos ) && ( pad->GetLayerSet() & lset ).any() )
1416  return -1;
1417  }
1418  }
1419 
1420  std::vector<ZONE_CONTAINER*> foundZones;
1421 
1422  for( auto zone : m_board->Zones() )
1423  {
1424  if( zone->HitTestFilledArea( pos ) )
1425  {
1426  foundZones.push_back( zone );
1427  }
1428  }
1429 
1430  std::sort( foundZones.begin(), foundZones.end(),
1431  [] ( const ZONE_CONTAINER* a, const ZONE_CONTAINER* b ) {
1432  return a->GetLayer() < b->GetLayer();
1433  } );
1434 
1435  // first take the net of the active layer
1436  for( auto z : foundZones )
1437  {
1438  if( m_frame->GetActiveLayer() == z->GetLayer() )
1439  return z->GetNetCode();
1440  }
1441 
1442  // none? take the topmost visible layer
1443  for( auto z : foundZones )
1444  {
1445  if( m_board->IsLayerVisible( z->GetLayer() ) )
1446  return z->GetNetCode();
1447  }
1448 
1449  return -1;
1450  }
1451 
1452  bool PlaceItem( BOARD_ITEM* aItem ) override
1453  {
1454  auto via = static_cast<VIA*>( aItem );
1455  int newNet = findStitchedZoneNet( via );
1456 
1457  if( newNet > 0 )
1458  via->SetNetCode( newNet );
1459 
1460  return false;
1461  }
1462 
1463  std::unique_ptr<BOARD_ITEM> CreateItem() override
1464  {
1465  auto& ds = m_board->GetDesignSettings();
1466  VIA* via = new VIA( m_board );
1467 
1468  via->SetNetCode( 0 );
1469  via->SetViaType( ds.m_CurrentViaType );
1470 
1471  // for microvias, the size and hole will be changed later.
1472  via->SetWidth( ds.GetCurrentViaSize() );
1473  via->SetDrill( ds.GetCurrentViaDrill() );
1474 
1475  // Usual via is from copper to component.
1476  // layer pair is B_Cu and F_Cu.
1477  via->SetLayerPair( B_Cu, F_Cu );
1478 
1479  PCB_LAYER_ID first_layer = m_frame->GetActiveLayer();
1480  PCB_LAYER_ID last_layer;
1481 
1482  // prepare switch to new active layer:
1483  if( first_layer != m_frame->GetScreen()->m_Route_Layer_TOP )
1484  last_layer = m_frame->GetScreen()->m_Route_Layer_TOP;
1485  else
1486  last_layer = m_frame->GetScreen()->m_Route_Layer_BOTTOM;
1487 
1488  // Adjust the actual via layer pair
1489  switch( via->GetViaType() )
1490  {
1491  case VIA_BLIND_BURIED:
1492  via->SetLayerPair( first_layer, last_layer );
1493  break;
1494 
1495  case VIA_MICROVIA: // from external to the near neighbor inner layer
1496  {
1497  PCB_LAYER_ID last_inner_layer =
1498  ToLAYER_ID( ( m_board->GetCopperLayerCount() - 2 ) );
1499 
1500  if( first_layer == B_Cu )
1501  last_layer = last_inner_layer;
1502  else if( first_layer == F_Cu )
1503  last_layer = In1_Cu;
1504  else if( first_layer == last_inner_layer )
1505  last_layer = B_Cu;
1506  else if( first_layer == In1_Cu )
1507  last_layer = F_Cu;
1508 
1509  // else error: will be removed later
1510  via->SetLayerPair( first_layer, last_layer );
1511 
1512  // Update diameter and hole size, which where set previously
1513  // for normal vias
1514  NETINFO_ITEM* net = via->GetNet();
1515 
1516  if( net )
1517  {
1518  via->SetWidth( net->GetMicroViaSize() );
1519  via->SetDrill( net->GetMicroViaDrillSize() );
1520  }
1521  }
1522  break;
1523 
1524  default:
1525  break;
1526  }
1527 
1528  return std::unique_ptr<BOARD_ITEM>( via );
1529  }
1530  };
1531 
1532  VIA_PLACER placer;
1533 
1534  frame()->SetToolID( ID_PCB_DRAW_VIA_BUTT, wxCURSOR_PENCIL, _( "Add vias" ) );
1535 
1536  doInteractiveItemPlacement( &placer, _( "Place via" ),
1538 
1539  frame()->SetToolID( ID_NO_TOOL_SELECTED, wxCURSOR_DEFAULT, wxEmptyString );
1540 
1541  return 0;
1542 }
Class ZONE_CONTAINER handles a list of polygons defining a copper zone.
Definition: class_zone.h:60
virtual void SetToolID(int aId, int aCursor, const wxString &aToolMsg) override
Function SetToolID sets the tool command ID to aId and sets the cursor to aCursor.
virtual LSET GetLayerSet() const override
Function GetLayerSet returns a "layer mask", which is a bitmap of all layers on which the TRACK segme...
BOARD * m_board
Definition: drawing_tool.h:269
void SetViaType(VIATYPE_T aViaType)
Definition: class_track.h:444
Class BOARD_ITEM is a base class for any item which can be embedded within the BOARD container class...
int GetCopperLayerCount() const
Function GetCopperLayerCount.
virtual PCB_LAYER_ID GetLayer() const override
Function GetLayer returns the primary layer this item is on.
Definition: class_zone.cpp:178
void SetWidth(int aWidth)
Definition: class_track.h:116
PCB_LAYER_ID
A quick note on layer IDs:
DLIST_ITERATOR_WRAPPER< MODULE > Modules()
Definition: class_board.h:250
VIATYPE_T GetViaType() const
Definition: class_track.h:443
PCB_EDIT_FRAME * frame() const
Definition: pcb_tool.h:134
BOARD_DESIGN_SETTINGS & GetDesignSettings() const
Function GetDesignSettings.
Definition: class_board.h:532
PCB_LAYER_ID m_Route_Layer_BOTTOM
bool SetNetCode(int aNetCode, bool aNoAssert=false)
Function SetNetCode sets net using a net code.
void SetLayerPair(PCB_LAYER_ID aTopLayer, PCB_LAYER_ID aBottomLayer)
Function SetLayerPair For a via m_Layer contains the top layer, the other layer is in m_BottomLayer...
PCB_BASE_EDIT_FRAME * m_frame
Definition: drawing_tool.h:270
Class NETINFO_ITEM handles the data for a net.
Definition: class_netinfo.h:69
ZONE_CONTAINERS & Zones()
Definition: class_board.h:252
void SetDrill(int aDrill)
Function SetDrill sets the drill value for vias.
Definition: class_track.h:451
PCB_SCREEN * GetScreen() const override
Function GetScreen returns a pointer to a BASE_SCREEN or one of its derivatives.
const wxPoint & GetPosition() const override
Definition: class_track.h:415
int GetMicroViaDrillSize()
Function GetViaDrillSize returns the size of via drills used to route this net.
DLIST_ITERATOR_WRAPPER< TRACK > Tracks()
Definition: class_board.h:249
void doInteractiveItemPlacement(INTERACTIVE_PLACER_BASE *aPlacer, const wxString &aCommitMessage, int aOptions=IPO_ROTATE|IPO_FLIP|IPO_REPEAT)
Helper function for performing a common interactive idiom: wait for a left click, place an item there...
Definition: pcb_tool.cpp:39
int GetMicroViaSize()
Function GetMicroViaSize returns the size of vias used to route this net.
virtual PCB_LAYER_ID GetActiveLayer() const
Function GetActiveLayer returns the active layer.
PCB_LAYER_ID ToLAYER_ID(int aLayer)
Definition: lset.cpp:774
#define mod(a, n)
Definition: greymap.cpp:24
NETINFO_ITEM * GetNet() const
Function GetNet Returns NET_INFO object for a given item.
PCB_LAYER_ID m_Route_Layer_TOP
bool IsLayerVisible(PCB_LAYER_ID aLayer) const
Function IsLayerVisible is a proxy function that calls the correspondent function in m_BoardSettings ...
Definition: class_board.h:451
int DRAWING_TOOL::DrawZone ( const TOOL_EVENT aEvent)

Function DrawZone() Starts interactively drawing a zone.

After invoking the function a zone settings dialog is displayed. After confirmation it allows the user to set points that are going to be used as a boundary polygon of the zone. Double click or clicking on the origin of the boundary polyline finishes the drawing.

Definition at line 646 of file drawing_tool.cpp.

References ADD, drawZone(), ID_PCB_ZONES_BUTT, m_frame, m_mode, PCB_BASE_FRAME::SetToolID(), and ZONE.

Referenced by setTransitions().

647 {
648  SCOPED_DRAW_MODE scopedDrawMode( m_mode, MODE::ZONE );
649 
650  m_frame->SetToolID( ID_PCB_ZONES_BUTT, wxCURSOR_PENCIL, _( "Add zones" ) );
651 
652  return drawZone( false, ZONE_MODE::ADD );
653 }
virtual void SetToolID(int aId, int aCursor, const wxString &aToolMsg) override
Function SetToolID sets the tool command ID to aId and sets the cursor to aCursor.
int drawZone(bool aKeepout, ZONE_MODE aMode)
Draws a polygon, that is added as a zone or a keepout area.
RAII class that sets an value at construction and resets it to the original value at destruction...
PCB_BASE_EDIT_FRAME * m_frame
Definition: drawing_tool.h:270
Add a new zone/keepout with fresh settings.
int DRAWING_TOOL::drawZone ( bool  aKeepout,
ZONE_MODE  aMode 
)
private

Draws a polygon, that is added as a zone or a keepout area.

Parameters
aKeepoutdictates if the drawn polygon is a zone or a keepout area.
aModedictates the mode of the zone tool: ADD add a new zone/keepout with fresh settings CUTOUT add a cutout to an existing zone SIMILAR add a new zone with the same settings as an existing one

Definition at line 1335 of file drawing_tool.cpp.

References TOOL_INTERACTIVE::Activate(), PCB_TOOL::controls(), getSourceZoneForAction(), TOOL_BASE::getViewControls(), m_frame, ZONE_CREATE_HELPER::PARAMS::m_keepout, ZONE_CREATE_HELPER::PARAMS::m_mode, ZONE_CREATE_HELPER::PARAMS::m_sourceZone, TOOL_BASE::m_toolMgr, TOOL_MANAGER::RunAction(), runPolygonEventLoop(), PCB_ACTIONS::selectionClear, EDA_DRAW_FRAME::SetNoToolSelected(), KIGFX::VIEW_CONTROLS::SetSnapping(), and KIGFX::VIEW_CONTROLS::ShowCursor().

Referenced by DrawGraphicPolygon(), DrawSimilarZone(), DrawZone(), DrawZoneCutout(), and DrawZoneKeepout().

1336 {
1337  // get a source zone, if we need one. We need it for:
1338  // ZONE_MODE::CUTOUT (adding a hole to the source zone)
1339  // ZONE_MODE::SIMILAR (creating a new zone using settings of source zone
1340  ZONE_CONTAINER* sourceZone = nullptr;
1341 
1342  if( !getSourceZoneForAction( aMode, sourceZone ) )
1343  return 0;
1344 
1346 
1347  params.m_keepout = aKeepout;
1348  params.m_mode = aMode;
1349  params.m_sourceZone = sourceZone;
1350 
1351  ZONE_CREATE_HELPER zoneTool( *this, params );
1352 
1353  // the geometry manager which handles the zone geometry, and
1354  // hands the calculated points over to the zone creator tool
1355  POLYGON_GEOM_MANAGER polyGeomMgr( zoneTool );
1356 
1357  Activate(); // register for events
1358 
1359  auto& controls = *getViewControls();
1360 
1362 
1363  controls.ShowCursor( true );
1364  controls.SetSnapping( true );
1365 
1366  runPolygonEventLoop( polyGeomMgr );
1367 
1369 
1370  return 0;
1371 }
static TOOL_ACTION selectionClear
Clears the current selection.
Definition: pcb_actions.h:53
virtual void ShowCursor(bool aEnabled)
Function ShowCursor() Enables or disables display of cursor.
Class ZONE_CONTAINER handles a list of polygons defining a copper zone.
Definition: class_zone.h:60
TOOL_MANAGER * m_toolMgr
Definition: tool_base.h:215
virtual void SetSnapping(bool aEnabled)
Function SetSnapping() Enables/disables snapping cursor to grid.
bool RunAction(const std::string &aActionName, bool aNow=false, T aParam=NULL)
Function RunAction() Runs the specified action.
Definition: tool_manager.h:125
bool getSourceZoneForAction(ZONE_MODE aMode, ZONE_CONTAINER *&aZone)
Function getSourceZoneForAction()
Parameters used to fully describe a zone creation process.
KIGFX::VIEW_CONTROLS * controls() const
Definition: pcb_tool.h:133
ZONE_CONTAINER * m_sourceZone
Zone settings source (for similar and cutout zones)
KIGFX::VIEW_CONTROLS * getViewControls() const
Function getViewControls()
Definition: tool_base.cpp:41
DRAWING_TOOL::ZONE_MODE m_mode
The zone mode to operate in
PCB_BASE_EDIT_FRAME * m_frame
Definition: drawing_tool.h:270
virtual void SetNoToolSelected()
Select the ID_NO_TOOL_SELECTED id tool (Idle tool)
Definition: draw_frame.cpp:571
This class is an adjuct helper to the DRAWING_TOOL interactive tool, which handles incoming geometry ...
void Activate()
Function Activate() Runs the tool.
bool m_keepout
Should create a keepout zone?
void runPolygonEventLoop(POLYGON_GEOM_MANAGER &aPolyGeomMgr)
Run the event loop for polygon creation, sending user input on to the given POLYGON_GEOM_MANAGER for ...
Class that handles the drawing of a polygon, including management of last corner deletion and drawing...
int DRAWING_TOOL::DrawZoneCutout ( const TOOL_EVENT aEvent)

Function DrawZoneCutout() Starts interactively drawing a zone cutout area of an existing zone.

The normal zone interactive tool is used, but the zone settings dialog is not shown (since the cutout affects only shape of an existing zone).

Definition at line 666 of file drawing_tool.cpp.

References CUTOUT, drawZone(), ID_PCB_ZONES_BUTT, m_frame, m_mode, PCB_BASE_FRAME::SetToolID(), and ZONE.

Referenced by setTransitions().

667 {
668  SCOPED_DRAW_MODE scopedDrawMode( m_mode, MODE::ZONE );
669 
670  m_frame->SetToolID( ID_PCB_ZONES_BUTT, wxCURSOR_PENCIL, _( "Add zone cutout" ) );
671 
672  return drawZone( false, ZONE_MODE::CUTOUT );
673 }
virtual void SetToolID(int aId, int aCursor, const wxString &aToolMsg) override
Function SetToolID sets the tool command ID to aId and sets the cursor to aCursor.
int drawZone(bool aKeepout, ZONE_MODE aMode)
Draws a polygon, that is added as a zone or a keepout area.
RAII class that sets an value at construction and resets it to the original value at destruction...
PCB_BASE_EDIT_FRAME * m_frame
Definition: drawing_tool.h:270
Make a cutout to an existing zone.
int DRAWING_TOOL::DrawZoneKeepout ( const TOOL_EVENT aEvent)

Function DrawZoneKeepout() Starts interactively drawing a keepout area.

After invoking the function an area settings dialog is displayed. After confirmation it allows the user to set points that are going to be used as a boundary polygon of the area. Double click or clicking on the origin of the boundary polyline finishes the drawing.

Definition at line 656 of file drawing_tool.cpp.

References ADD, drawZone(), ID_PCB_KEEPOUT_AREA_BUTT, KEEPOUT, m_frame, m_mode, and PCB_BASE_FRAME::SetToolID().

Referenced by setTransitions().

657 {
658  SCOPED_DRAW_MODE scopedDrawMode( m_mode, MODE::KEEPOUT );
659 
660  m_frame->SetToolID( ID_PCB_KEEPOUT_AREA_BUTT, wxCURSOR_PENCIL, _( "Add keepout" ) );
661 
662  return drawZone( true, ZONE_MODE::ADD );
663 }
virtual void SetToolID(int aId, int aCursor, const wxString &aToolMsg) override
Function SetToolID sets the tool command ID to aId and sets the cursor to aCursor.
int drawZone(bool aKeepout, ZONE_MODE aMode)
Draws a polygon, that is added as a zone or a keepout area.
RAII class that sets an value at construction and resets it to the original value at destruction...
PCB_BASE_EDIT_FRAME * m_frame
Definition: drawing_tool.h:270
Add a new zone/keepout with fresh settings.
bool PCB_TOOL::EditingModules ( ) const
inlineinherited

Definition at line 97 of file pcb_tool.h.

References PCB_TOOL::m_editModules.

Referenced by BOARD_COMMIT::BOARD_COMMIT(), PAD_TOOL::Init(), and EDIT_TOOL::MeasureTool().

98  {
99  return m_editModules;
100  }
bool m_editModules
Definition: pcb_tool.h:142
const TOOL_EVENT TOOL_INTERACTIVE::evActivate ( std::string  aToolName = "")
protectedinherited

functions below are not yet implemented - their interface may change

const TOOL_EVENT TOOL_INTERACTIVE::evButtonDown ( int  aButton = BUT_ANY)
protectedinherited
const TOOL_EVENT TOOL_INTERACTIVE::evButtonUp ( int  aButton = BUT_ANY)
protectedinherited
const TOOL_EVENT TOOL_INTERACTIVE::evClick ( int  aButton = BUT_ANY)
protectedinherited
const TOOL_EVENT TOOL_INTERACTIVE::evCommand ( int  aCommandId = -1)
protectedinherited
const TOOL_EVENT TOOL_INTERACTIVE::evCommand ( std::string  aCommandStr = "")
protectedinherited
const TOOL_EVENT TOOL_INTERACTIVE::evDrag ( int  aButton = BUT_ANY)
protectedinherited
const TOOL_EVENT TOOL_INTERACTIVE::evMotion ( )
protectedinherited
PCB_EDIT_FRAME* PCB_TOOL::frame ( ) const
inlineprotectedinherited

Definition at line 134 of file pcb_tool.h.

Referenced by POINT_EDITOR::addCorner(), MICROWAVE_TOOL::addMicrowaveFootprint(), PAD_TOOL::applyPadSettings(), PCB_TOOL::canvas(), EDIT_TOOL::changeTrackWidthOnClick(), PNS::TOOL_BASE::checkSnap(), PAD_TOOL::copyPadSettings(), EDIT_TOOL::copyToClipboard(), MICROWAVE_TOOL::createInductorBetween(), MODULE_EDITOR_TOOLS::CreatePadFromShapes(), ROUTER_TOOL::CustomTrackWidthDialog(), PCB_TOOL::displayOptions(), PCB_TOOL::doInteractiveItemPlacement(), ROUTER_TOOL::DpDimensionsDialog(), MICROWAVE_TOOL::drawMicrowaveInductor(), drawSegment(), DrawVia(), MODULE_EDITOR_TOOLS::EnumeratePads(), EDIT_TOOL::ExchangeFootprints(), MODULE_EDITOR_TOOLS::ExplodePadToShapes(), ROUTER_TOOL::finishInteractive(), SELECTION_TOOL::Init(), ROUTER_TOOL::InlineDrag(), PICKER_TOOL::Main(), LENGTH_TUNER_TOOL::mainLoop(), ROUTER_TOOL::mainLoop(), LENGTH_TUNER_TOOL::meanderSettingsDialog(), EDIT_TOOL::MeasureTool(), MODULE_EDITOR_TOOLS::ModuleEdgeOutlines(), MODULE_EDITOR_TOOLS::ModuleTextOutlines(), ROUTER_TOOL::onViaCommand(), PCBNEW_CONTROL::PasteItemsFromClipboard(), ROUTER_TOOL::performDragging(), ROUTER_TOOL::performRouting(), LENGTH_TUNER_TOOL::performTuning(), MODULE_EDITOR_TOOLS::PlacePad(), ROUTER_TOOL::prepareInteractive(), PAD_TOOL::pushPadSettings(), POINT_EDITOR::removeCorner(), PNS::TOOL_BASE::Reset(), ROUTER_TOOL::RouteDiffPair(), ROUTER_TOOL::RouteSingleTrace(), ROUTER_TOOL::SettingsDialog(), ROUTER_TOOL::switchLayerOnViaPlacement(), LENGTH_TUNER_TOOL::TuneDiffPair(), LENGTH_TUNER_TOOL::TuneDiffPairSkew(), LENGTH_TUNER_TOOL::TuneSingleTrace(), ZONE_FILLER_TOOL::ZoneFill(), and ZONE_FILLER_TOOL::ZoneFillAll().

134 { return getEditFrame<PCB_EDIT_FRAME>(); }
PCB_LAYER_ID DRAWING_TOOL::getDrawingLayer ( ) const
private

Selects a non-copper layer for drawing

Definition at line 1576 of file drawing_tool.cpp.

References B_Cu, B_SilkS, Dwgs_User, F_Cu, F_SilkS, PCB_BASE_FRAME::GetActiveLayer(), IsCopperLayer(), m_frame, and PCB_BASE_FRAME::SetActiveLayer().

Referenced by DrawArc(), drawArc(), DrawCircle(), DrawDimension(), DrawLine(), and drawSegment().

1577 {
1578  PCB_LAYER_ID layer = m_frame->GetActiveLayer();
1579 
1580  if( IsCopperLayer( layer ) )
1581  {
1582  if( layer == F_Cu )
1583  layer = F_SilkS;
1584  else if( layer == B_Cu )
1585  layer = B_SilkS;
1586  else
1587  layer = Dwgs_User;
1588 
1589  m_frame->SetActiveLayer( layer );
1590  }
1591 
1592  return layer;
1593 }
PCB_LAYER_ID
A quick note on layer IDs:
virtual void SetActiveLayer(PCB_LAYER_ID aLayer)
Function SetActiveLayer will change the currently active layer to aLayer.
PCB_BASE_EDIT_FRAME * m_frame
Definition: drawing_tool.h:270
bool IsCopperLayer(LAYER_NUM aLayerId)
Function IsCopperLayer tests whether a layer is a copper layer.
virtual PCB_LAYER_ID GetActiveLayer() const
Function GetActiveLayer returns the active layer.
DRAWING_TOOL::MODE DRAWING_TOOL::GetDrawingMode ( ) const

Function GetDrawingMode.

Returns the current drawing mode of the DRAWING_TOOL, or MODE::NONE if not currently in any drawing mode

Definition at line 211 of file drawing_tool.cpp.

References m_mode.

Referenced by PCB_EDITOR_CONTROL::Init().

212 {
213  return m_mode;
214 }
template<typename T >
T* TOOL_BASE::getEditFrame ( ) const
inlineprotectedinherited

Function getEditFrame()

Returns the application window object, casted to requested user type.

Definition at line 188 of file tool_base.h.

References TOOL_BASE::getEditFrameInt().

Referenced by ZONE_CREATE_HELPER::commitZone(), ZONE_CREATE_HELPER::createNewZone(), and TOOL_SETTINGS::getConfigBase().

189  {
190  return static_cast<T*>( getEditFrameInt() );
191  }
T
enum T contains all this lexer's tokens.
wxWindow * getEditFrameInt() const
Definition: tool_base.cpp:47
TOOL_ID TOOL_BASE::GetId ( ) const
inlineinherited

Function GetId() Returns the unique identifier of the tool.

The identifier is set by an instance of TOOL_MANAGER.

Returns
Identifier of the tool.

Definition at line 122 of file tool_base.h.

References TOOL_BASE::m_toolId.

Referenced by TOOL_MANAGER::finishTool(), TOOL_MANAGER::InitTools(), TOOL_MANAGER::isActive(), TOOL_MANAGER::RegisterTool(), ACTION_MANAGER::RunHotKey(), and TOOL_MANAGER::runTool().

123  {
124  return m_toolId;
125  }
TOOL_ID m_toolId
Unique identifier for the tool, assigned by a TOOL_MANAGER instance.
Definition: tool_base.h:210
TOOL_MANAGER* TOOL_BASE::GetManager ( ) const
inlineinherited

Function GetManager() Returns the instance of TOOL_MANAGER that takes care of the tool.

Returns
Instance of the TOOL_MANAGER. If there is no TOOL_MANAGER associated, it returns NULL.

Definition at line 144 of file tool_base.h.

References TOOL_BASE::m_toolMgr.

Referenced by BOARD_COMMIT::BOARD_COMMIT(), PCB_TOOL::doInteractiveItemPlacement(), CONTEXT_MENU::getToolManager(), EDIT_TOOL::MeasureTool(), and CONTEXT_MENU::onMenuEvent().

145  {
146  return m_toolMgr;
147  }
TOOL_MANAGER * m_toolMgr
Definition: tool_base.h:215
template<typename T >
T* TOOL_BASE::getModel ( ) const
inlineprotectedinherited

Function getModel()

Returns the model object if it matches the requested type.

Definition at line 199 of file tool_base.h.

References TOOL_BASE::getModelInt().

Referenced by ZONE_CREATE_HELPER::commitZone(), ZONE_CREATE_HELPER::createNewZone(), ZONE_CREATE_HELPER::createZoneFromExisting(), and ZONE_CREATE_HELPER::performZoneCutout().

200  {
201  EDA_ITEM* m = getModelInt();
202 
203  return static_cast<T*>( m );
204  }
T
enum T contains all this lexer's tokens.
Class EDA_ITEM is a base class for most all the KiCad significant classes, used in schematics and boa...
Definition: base_struct.h:178
EDA_ITEM * getModelInt() const
Definition: tool_base.cpp:53
const std::string& TOOL_BASE::GetName ( void  ) const
inlineinherited

Function GetName() Returns the name of the tool.

Tool names are expected to obey the format: application.ToolName (eg. pcbnew.InteractiveSelection).

Returns
The name of the tool.

Definition at line 133 of file tool_base.h.

References TOOL_BASE::m_toolName.

Referenced by TOOL_SETTINGS::getKeyName(), TOOL_MANAGER::InitTools(), TOOL_MANAGER::invokeTool(), and TOOL_MANAGER::RegisterTool().

134  {
135  return m_toolName;
136  }
std::string m_toolName
Name of the tool.
Definition: tool_base.h:214
int DRAWING_TOOL::getSegmentWidth ( unsigned int  aLayer) const
private

Returns the appropriate width for a segment depending on the settings.

Definition at line 1563 of file drawing_tool.cpp.

References Edge_Cuts, BOARD::GetDesignSettings(), m_board, BOARD_DESIGN_SETTINGS::m_DrawSegmentWidth, BOARD_DESIGN_SETTINGS::m_EdgeSegmentWidth, PCB_TOOL::m_editModules, and BOARD_DESIGN_SETTINGS::m_ModuleSegmentWidth.

Referenced by DrawArc(), DrawCircle(), DrawDimension(), and DrawLine().

1564 {
1565  assert( m_board );
1566 
1567  if( aLayer == Edge_Cuts )
1569  else if( m_editModules )
1571  else
1573 }
BOARD * m_board
Definition: drawing_tool.h:269
int m_ModuleSegmentWidth
Default width for all graphic lines.
int m_DrawSegmentWidth
current graphic line width (not EDGE layer)
BOARD_DESIGN_SETTINGS & GetDesignSettings() const
Function GetDesignSettings.
Definition: class_board.h:532
bool m_editModules
Definition: pcb_tool.h:142
int m_EdgeSegmentWidth
current graphic line width (EDGE layer only)
TOOL_SETTINGS & TOOL_BASE::GetSettings ( )
inherited

Definition at line 77 of file tool_base.cpp.

References TOOL_BASE::m_toolSettings.

Referenced by GERBVIEW_CONTROL::HighlightControl(), ROUTER_TOOL::Init(), SELECTION_TOOL::selectable(), and ROUTER_TOOL::~ROUTER_TOOL().

78 {
79  return m_toolSettings;
80 }
TOOL_SETTINGS m_toolSettings
Definition: tool_base.h:216
bool DRAWING_TOOL::getSourceZoneForAction ( ZONE_MODE  aMode,
ZONE_CONTAINER *&  aZone 
)
private

Function getSourceZoneForAction()

Gets a source zone item for an action that takes an existing zone into account (for example a cutout of an existing zone). The source zone is taken from the current selection

Parameters
aModemode of the zone tool
aZoneupdated pointer to a suitable source zone, or nullptr if none found, or the action doesn't need a source
Returns
true if a suitable zone was found, or the action doesn't need a zone. False if the action needs a zone but none was found.

Definition at line 1219 of file drawing_tool.cpp.

References ADD, dyn_cast(), SELECTION_TOOL::GetSelection(), TOOL_MANAGER::GetTool(), GRAPHIC_POLYGON, TOOL_BASE::m_toolMgr, TOOL_MANAGER::RunAction(), PCB_TOOL::selection(), and PCB_ACTIONS::selectionCursor.

Referenced by drawZone().

1220 {
1221  aZone = nullptr;
1222 
1223  // not an action that needs a source zone
1224  if( aMode == ZONE_MODE::ADD || aMode == ZONE_MODE::GRAPHIC_POLYGON )
1225  return true;
1226 
1228  const SELECTION& selection = selTool->GetSelection();
1229 
1230  if( selection.Empty() )
1232 
1233  // we want a single zone
1234  if( selection.Size() != 1 )
1235  return false;
1236 
1237  aZone = dyn_cast<ZONE_CONTAINER*>( selection[0] );
1238 
1239  // expected a zone, but didn't get one
1240  if( !aZone )
1241  return false;
1242 
1243  return true;
1244 }
Class ZONE_CONTAINER handles a list of polygons defining a copper zone.
Definition: class_zone.h:60
Class SELECTION_TOOL.
TOOL_MANAGER * m_toolMgr
Definition: tool_base.h:215
bool RunAction(const std::string &aActionName, bool aNow=false, T aParam=NULL)
Function RunAction() Runs the specified action.
Definition: tool_manager.h:125
Casted dyn_cast(From aObject)
Function dyn_cast()
Definition: typeinfo.h:61
SELECTION & GetSelection()
Function GetSelection()
const SELECTION & selection() const
Definition: pcb_tool.cpp:218
Add a new zone/keepout with fresh settings.
static TOOL_ACTION selectionCursor
Select a single item under the cursor position.
Definition: pcb_actions.h:50
TOOL_MENU& DRAWING_TOOL::GetToolMenu ( )
inline

Get the DRAWING_TOOL top-level context menu

Definition at line 62 of file drawing_tool.h.

References m_menu.

Referenced by PCB_EDITOR_CONTROL::Init().

63  {
64  return m_menu;
65  }
TOOL_MENU m_menu
Menu model displayed by the tool.
Definition: drawing_tool.h:277
TOOL_TYPE TOOL_BASE::GetType ( ) const
inlineinherited

Function GetType() Returns the type of the tool.

Returns
The type of the tool.

Definition at line 111 of file tool_base.h.

References TOOL_BASE::m_type.

Referenced by TOOL_MANAGER::finishTool(), TOOL_MANAGER::InvokeTool(), TOOL_MANAGER::ResetTools(), and TOOL_MANAGER::runTool().

112  {
113  return m_type;
114  }
TOOL_TYPE m_type
Stores the type of the tool.
Definition: tool_base.h:207
KIGFX::VIEW * TOOL_BASE::getView ( ) const
protectedinherited

Function getView()

Returns the instance of VIEW object used in the application. It allows tools to draw.

Returns
The instance of VIEW.

Definition at line 35 of file tool_base.cpp.

References TOOL_MANAGER::GetView(), and TOOL_BASE::m_toolMgr.

Referenced by ALIGN_DISTRIBUTE_TOOL::AlignLeft(), ALIGN_DISTRIBUTE_TOOL::AlignRight(), PCB_EDITOR_CONTROL::CrossProbeSchToPcb(), PCBNEW_CONTROL::CursorControl(), GERBVIEW_SELECTION_TOOL::disambiguationMenu(), SELECTION_TOOL::disambiguationMenu(), MICROWAVE_TOOL::drawMicrowaveInductor(), PCB_EDITOR_CONTROL::DrillOrigin(), MODULE_EDITOR_TOOLS::EnumeratePads(), SELECTION_TOOL::findCallback(), ROUTER_TOOL::getStartLayer(), PCBNEW_CONTROL::GridSetOrigin(), SELECTION_TOOL::guessSelectionCandidates(), GERBVIEW_CONTROL::HighlightControl(), PNS::TOOL_BASE::highlightNet(), PCBNEW_CONTROL::LayerAlphaDec(), PCBNEW_CONTROL::LayerAlphaInc(), GERBVIEW_SELECTION_TOOL::MeasureTool(), EDIT_TOOL::MeasureTool(), MODULE_EDITOR_TOOLS::ModuleEdgeOutlines(), MODULE_EDITOR_TOOLS::ModuleTextOutlines(), EDIT_TOOL::MoveExact(), POINT_EDITOR::OnSelectionChange(), PCBNEW_CONTROL::PanControl(), PNS::TOOL_BASE::pickSingleItem(), PCB_EDITOR_CONTROL::PlaceModule(), PCB_EDITOR_CONTROL::PlaceTarget(), PCB_EDITOR_CONTROL::Reset(), PCBNEW_CONTROL::Reset(), PNS::TOOL_BASE::Reset(), Reset(), GERBVIEW_SELECTION_TOOL::Reset(), SELECTION_TOOL::Reset(), GERBVIEW_SELECTION_TOOL::select(), GERBVIEW_SELECTION_TOOL::selectable(), SELECTION_TOOL::selectable(), GERBVIEW_SELECTION_TOOL::selectionContains(), SELECTION_TOOL::selectionContains(), GERBVIEW_SELECTION_TOOL::selectMultiple(), SELECTION_TOOL::selectMultiple(), ZOOM_TOOL::selectRegion(), GERBVIEW_SELECTION_TOOL::selectVisually(), GERBVIEW_SELECTION_TOOL::unselect(), GERBVIEW_SELECTION_TOOL::unselectVisually(), POINT_EDITOR::updateEditedPoint(), COMMON_TOOLS::updateGrid(), PCBNEW_CONTROL::updateGrid(), POINT_EDITOR::updatePoints(), SELECTION_TOOL::updateSelection(), PNS::TOOL_BASE::updateStartItem(), PCB_TOOL::view(), COMMON_TOOLS::ZoomFitScreen(), GERBVIEW_SELECTION_TOOL::zoomFitSelection(), SELECTION_TOOL::zoomFitSelection(), COMMON_TOOLS::ZoomInOutCenter(), GERBVIEW_SELECTION_TOOL::~GERBVIEW_SELECTION_TOOL(), and SELECTION_TOOL::~SELECTION_TOOL().

36 {
37  return m_toolMgr->GetView();
38 }
TOOL_MANAGER * m_toolMgr
Definition: tool_base.h:215
KIGFX::VIEW * GetView() const
Definition: tool_manager.h:252
KIGFX::VIEW_CONTROLS * TOOL_BASE::getViewControls ( ) const
protectedinherited

Function getViewControls()

Returns the instance of VIEW_CONTROLS object used in the application. It allows tools to read & modify user input and its settings (eg. show cursor, enable snapping to grid, etc.)

Returns
The instance of VIEW_CONTROLS.

Definition at line 41 of file tool_base.cpp.

References TOOL_MANAGER::GetViewControls(), and TOOL_BASE::m_toolMgr.

Referenced by POINT_EDITOR::addCorner(), PCB_TOOL::controls(), PCBNEW_CONTROL::CursorControl(), MICROWAVE_TOOL::drawMicrowaveInductor(), drawZone(), MODULE_EDITOR_TOOLS::EnumeratePads(), SELECTION_TOOL::findMove(), PCB_EDITOR_CONTROL::HighlightNet(), PICKER_TOOL::Main(), EDIT_TOOL::Main(), GERBVIEW_SELECTION_TOOL::Main(), ROUTER_TOOL::mainLoop(), GERBVIEW_SELECTION_TOOL::MeasureTool(), EDIT_TOOL::MeasureTool(), POINT_EDITOR::OnSelectionChange(), ROUTER_TOOL::performDragging(), PCB_EDITOR_CONTROL::PlaceModule(), PCB_EDITOR_CONTROL::PlaceTarget(), Reset(), PCBNEW_CONTROL::ResetCoords(), runPolygonEventLoop(), GERBVIEW_SELECTION_TOOL::selectCursor(), SELECTION_TOOL::selectCursor(), GERBVIEW_SELECTION_TOOL::selectMultiple(), SELECTION_TOOL::selectMultiple(), ZOOM_TOOL::selectRegion(), PICKER_TOOL::setControls(), POINT_EDITOR::setEditedPoint(), EDIT_TOOL::updateModificationPoint(), COMMON_TOOLS::ZoomCenter(), and COMMON_TOOLS::ZoomInOut().

42 {
43  return m_toolMgr->GetViewControls();
44 }
TOOL_MANAGER * m_toolMgr
Definition: tool_base.h:215
KIGFX::VIEW_CONTROLS * GetViewControls() const
Definition: tool_manager.h:257
template<class T >
void TOOL_INTERACTIVE::Go ( int(T::*)(const TOOL_EVENT &)  aStateFunc,
const TOOL_EVENT_LIST aConditions = TOOL_EVENTTC_ANYTA_ANY ) 
)
inherited

Function Go()

Defines which state (aStateFunc) to go when a certain event arrives (aConditions). No conditions means any event.

Definition at line 135 of file tool_interactive.h.

References TOOL_INTERACTIVE::goInternal().

Referenced by ZOOM_TOOL::setTransitions(), LENGTH_TUNER_TOOL::setTransitions(), ROUTER_TOOL::setTransitions(), PAD_TOOL::setTransitions(), MICROWAVE_TOOL::setTransitions(), ZONE_FILLER_TOOL::setTransitions(), GERBVIEW_CONTROL::setTransitions(), POINT_EDITOR::setTransitions(), COMMON_TOOLS::setTransitions(), ALIGN_DISTRIBUTE_TOOL::setTransitions(), PCBNEW_CONTROL::setTransitions(), POSITION_RELATIVE_TOOL::setTransitions(), MODULE_EDITOR_TOOLS::setTransitions(), PICKER_TOOL::setTransitions(), PCB_EDITOR_CONTROL::setTransitions(), GERBVIEW_SELECTION_TOOL::setTransitions(), SELECTION_TOOL::setTransitions(), EDIT_TOOL::setTransitions(), and setTransitions().

137 {
138  TOOL_STATE_FUNC sptr = std::bind( aStateFunc, static_cast<T*>( this ), std::placeholders::_1 );
139 
140  goInternal( sptr, aConditions );
141 }
std::function< int(const TOOL_EVENT &)> TOOL_STATE_FUNC
Definition: tool_base.h:59
void goInternal(TOOL_STATE_FUNC &aState, const TOOL_EVENT_LIST &aConditions)
bool DRAWING_TOOL::Init ( )
overridevirtual

Function Init() Init() is called once upon a registration of the tool.

Returns
True if the initialization went fine, false - otherwise.

Reimplemented from TOOL_BASE.

Definition at line 164 of file drawing_tool.cpp.

References CONDITIONAL_MENU::AddItem(), TOOL_MENU::AddStandardSubMenus(), ARC, ACTIONS::cancelInteractive, closeZoneOutline, deleteLastPoint, TOOL_MENU::GetMenu(), m_menu, m_mode, NONE, and ZONE.

165 {
166  auto activeToolFunctor = [ this ] ( const SELECTION& aSel ) {
167  return m_mode != MODE::NONE;
168  };
169 
170  // some interactive drawing tools can undo the last point
171  auto canUndoPoint = [ this ] ( const SELECTION& aSel ) {
172  return m_mode == MODE::ARC || m_mode == MODE::ZONE;
173  };
174 
175  // functor for zone-only actions
176  auto zoneActiveFunctor = [this ] ( const SELECTION& aSel ) {
177  return m_mode == MODE::ZONE;
178  };
179 
180  auto& ctxMenu = m_menu.GetMenu();
181 
182  // cancel current toool goes in main context menu at the top if present
183  ctxMenu.AddItem( ACTIONS::cancelInteractive, activeToolFunctor, 1000 );
184 
185  // tool-specific actions
186  ctxMenu.AddItem( closeZoneOutline, zoneActiveFunctor, 1000 );
187  ctxMenu.AddItem( deleteLastPoint, canUndoPoint, 1000 );
188 
189  ctxMenu.AddSeparator( activeToolFunctor, 1000 );
190 
191  // Type-specific sub-menus will be added for us by other tools
192  // For example, zone fill/unfill is provided by the PCB control tool
193 
194  // Finally, add the standard zoom/grid items
195  m_menu.AddStandardSubMenus( *getEditFrame<PCB_BASE_FRAME>() );
196 
197  return true;
198 }
static TOOL_ACTION closeZoneOutline("pcbnew.InteractiveDrawing.closeZoneOutline", AS_CONTEXT, 0, _("Close Zone Outline"), _("Close the outline of a zone in progress"), checked_ok_xpm)
static TOOL_ACTION deleteLastPoint("pcbnew.InteractiveDrawing.deleteLastPoint", AS_CONTEXT, WXK_BACK, _("Delete Last Point"), _("Delete the last point added to the current item"), undo_xpm)
CONDITIONAL_MENU & GetMenu()
Function GetMenu.
Definition: tool_menu.cpp:49
static TOOL_ACTION cancelInteractive
Definition: actions.h:45
void AddStandardSubMenus(EDA_DRAW_FRAME &aFrame)
Function CreateBasicMenu.
Definition: tool_menu.cpp:95
void AddItem(const TOOL_ACTION &aAction, const SELECTION_CONDITION &aCondition=SELECTION_CONDITIONS::ShowAlways, int aOrder=ANY_ORDER)
Function AddItem()
TOOL_MENU m_menu
Menu model displayed by the tool.
Definition: drawing_tool.h:277
bool TOOL_BASE::IsToolActive ( ) const
inherited

Definition at line 30 of file tool_base.cpp.

References TOOL_MANAGER::IsToolActive(), TOOL_BASE::m_toolId, and TOOL_BASE::m_toolMgr.

31 {
32  return m_toolMgr->IsToolActive( m_toolId );
33 }
bool IsToolActive(TOOL_ID aId) const
Function IsToolActive() Returns true if a tool with given id is active (executing) ...
TOOL_MANAGER * m_toolMgr
Definition: tool_base.h:215
TOOL_ID m_toolId
Unique identifier for the tool, assigned by a TOOL_MANAGER instance.
Definition: tool_base.h:210
void DRAWING_TOOL::make45DegLine ( DRAWSEGMENT aSegment,
DRAWSEGMENT aHelper 
) const
private

Function make45DegLine() Forces a DRAWSEGMENT to be drawn at multiple of 45 degrees.

The origin stays the same, the end of the aSegment is modified according to the current cursor position.

Parameters
aSegmentis the segment that is currently drawn.
aHelperis a helper line that shows the next possible segment.

Definition at line 1374 of file drawing_tool.cpp.

References KIGFX::VIEW_CONTROLS::GetCursorPosition(), DRAWSEGMENT::GetStart(), m_controls, SHAPE_LINE_CHAIN::Point(), SHAPE_LINE_CHAIN::PointCount(), DRAWSEGMENT::SetEnd(), DRAWSEGMENT::SetStart(), VECTOR2< T >::x, and VECTOR2< T >::y.

Referenced by drawSegment().

1375 {
1376  VECTOR2I cursorPos = m_controls->GetCursorPosition();
1377  VECTOR2I origin( aSegment->GetStart() );
1378  DIRECTION_45 direction( origin - cursorPos );
1379  SHAPE_LINE_CHAIN newChain = direction.BuildInitialTrace( origin, cursorPos );
1380 
1381  if( newChain.PointCount() > 2 )
1382  {
1383  aSegment->SetEnd( wxPoint( newChain.Point( -2 ).x, newChain.Point( -2 ).y ) );
1384  aHelper->SetStart( wxPoint( newChain.Point( -2 ).x, newChain.Point( -2 ).y ) );
1385  aHelper->SetEnd( wxPoint( newChain.Point( -1 ).x, newChain.Point( -1 ).y ) );
1386  }
1387  else
1388  {
1389  aSegment->SetEnd( wxPoint( cursorPos.x, cursorPos.y ) );
1390  aHelper->SetStart( wxPoint( cursorPos.x, cursorPos.y ) );
1391  aHelper->SetEnd( wxPoint( cursorPos.x, cursorPos.y ) );
1392  }
1393 }
int PointCount() const
Function PointCount()
Class DIRECTION_45.
Definition: direction45.h:33
VECTOR2D GetCursorPosition() const
Returns the current cursor position in world coordinates.
KIGFX::VIEW_CONTROLS * m_controls
Definition: drawing_tool.h:268
void SetStart(const wxPoint &aStart)
Class SHAPE_LINE_CHAIN.
void SetEnd(const wxPoint &aEnd)
VECTOR2I & Point(int aIndex)
Function Point()
const wxPoint & GetStart() const
Function GetStart returns the starting point of the graphic.
int DRAWING_TOOL::PlaceDXF ( const TOOL_EVENT aEvent)

Function PlaceDXF() Places a drawing imported from a DXF file in module editor.

Definition at line 695 of file drawing_tool.cpp.

References TOOL_INTERACTIVE::Activate(), SELECTION::Add(), COMMIT::Add(), KIGFX::VIEW::Add(), BUT_LEFT, BUT_RIGHT, SELECTION::Clear(), delta, DXF, PCB_ACTIONS::flip, Flip(), KIGFX::VIEW_GROUP::FreeItems(), SELECTION::Front(), DRAWSEGMENT::GetAngle(), DRAWSEGMENT::GetBezControl1(), DRAWSEGMENT::GetBezControl2(), DRAWSEGMENT::GetBezierPoints(), KIGFX::VIEW_CONTROLS::GetCursorPosition(), DRAWSEGMENT::GetEnd(), TOOL_EVT_UTILS::GetEventRotationAngle(), EDA_TEXT::GetHorizJustify(), DIALOG_DXF_IMPORT::GetImportedItems(), GetLayer(), PCB_BASE_EDIT_FRAME::GetModel(), DRAWSEGMENT::GetPolyPoints(), BOARD_ITEM::GetPosition(), DRAWSEGMENT::GetShape(), DRAWSEGMENT::GetStart(), EDA_TEXT::GetText(), EDA_TEXT::GetTextAngle(), EDA_TEXT::GetTextPos(), EDA_TEXT::GetTextSize(), EDA_TEXT::GetThickness(), DRAWSEGMENT::GetType(), EDA_TEXT::GetVertJustify(), DRAWSEGMENT::GetWidth(), EDA_TEXT::IsBold(), TOOL_EVT_UTILS::IsCancelInteractive(), EDA_TEXT::IsItalic(), EDA_TEXT::IsMirrored(), EDA_TEXT::IsMultilineAllowed(), TOOL_EVT_UTILS::IsRotateToolEvt(), m_controls, PCB_TOOL::m_editModules, m_frame, m_menu, m_mode, TOOL_BASE::m_toolMgr, m_view, PCB_LINE_T, PCB_TEXT_T, BOARD_COMMIT::Push(), KIGFX::VIEW::Remove(), TOOL_MANAGER::RunAction(), PCB_ACTIONS::selectionClear, DRAWSEGMENT::SetAngle(), DRAWSEGMENT::SetBezControl1(), DRAWSEGMENT::SetBezControl2(), DRAWSEGMENT::SetBezierPoints(), EDA_TEXT::SetBold(), DRAWSEGMENT::SetEnd(), EDA_TEXT::SetHorizJustify(), EDA_TEXT::SetItalic(), BOARD_ITEM::SetLayer(), EDGE_MODULE::SetLocalCoord(), TEXTE_MODULE::SetLocalCoord(), EDA_TEXT::SetMirrored(), EDA_TEXT::SetMultilineAllowed(), DRAWSEGMENT::SetPolyPoints(), DRAWSEGMENT::SetShape(), KIGFX::VIEW_CONTROLS::SetSnapping(), DRAWSEGMENT::SetStart(), EDA_TEXT::SetText(), EDA_TEXT::SetTextPos(), EDA_TEXT::SetTextSize(), EDA_TEXT::SetThickness(), DRAWSEGMENT::SetType(), EDA_TEXT::SetVertJustify(), EDA_TEXT::SetVisible(), DRAWSEGMENT::SetWidth(), TOOL_MENU::ShowContextMenu(), KIGFX::VIEW_CONTROLS::ShowCursor(), TC_COMMAND, KIGFX::VIEW::Update(), TOOL_INTERACTIVE::Wait(), VECTOR2< T >::x, and VECTOR2< T >::y.

Referenced by setTransitions().

696 {
697  if( !m_frame->GetModel() )
698  return 0;
699 
700  DIALOG_DXF_IMPORT dlg( m_frame );
701  int dlgResult = dlg.ShowModal();
702 
703  const std::list<BOARD_ITEM*>& list = dlg.GetImportedItems();
704 
705  if( dlgResult != wxID_OK || list.empty() )
706  return 0;
707 
708  VECTOR2I cursorPos = m_controls->GetCursorPosition();
709  VECTOR2I delta = cursorPos - list.front()->GetPosition();
710 
711  // Add a VIEW_GROUP that serves as a preview for the new item
712  SELECTION preview;
713  BOARD_COMMIT commit( m_frame );
714 
715  // Build the undo list & add items to the current view
716  for( auto item : list )
717  {
718  assert( item->Type() == PCB_LINE_T || item->Type() == PCB_TEXT_T );
719  preview.Add( item );
720  }
721 
722  BOARD_ITEM* firstItem = static_cast<BOARD_ITEM*>( preview.Front() );
723  m_view->Add( &preview );
724 
726  m_controls->ShowCursor( true );
727  m_controls->SetSnapping( true );
728 
729  SCOPED_DRAW_MODE scopedDrawMode( m_mode, MODE::DXF );
730 
731  Activate();
732 
733  // Main loop: keep receiving events
734  while( OPT_TOOL_EVENT evt = Wait() )
735  {
736  cursorPos = m_controls->GetCursorPosition();
737 
738  if( evt->IsMotion() )
739  {
740  delta = cursorPos - firstItem->GetPosition();
741 
742  for( auto item : preview )
743  static_cast<BOARD_ITEM*>( item )->Move( wxPoint( delta.x, delta.y ) );
744 
745  m_view->Update( &preview );
746  }
747  else if( evt->Category() == TC_COMMAND )
748  {
749  // TODO it should be handled by EDIT_TOOL, so add items and select?
750  if( TOOL_EVT_UTILS::IsRotateToolEvt( *evt ) )
751  {
752  const auto rotationPoint = wxPoint( cursorPos.x, cursorPos.y );
753  const auto rotationAngle = TOOL_EVT_UTILS::GetEventRotationAngle(
754  *m_frame, *evt );
755 
756  for( auto item : preview )
757  {
758  static_cast<BOARD_ITEM*>( item )->Rotate( rotationPoint, rotationAngle );
759  }
760 
761  m_view->Update( &preview );
762  }
763  else if( evt->IsAction( &PCB_ACTIONS::flip ) )
764  {
765  for( auto item : preview )
766  static_cast<BOARD_ITEM*>( item )->Flip( wxPoint( cursorPos.x, cursorPos.y ) );
767 
768  m_view->Update( &preview );
769  }
770  else if( TOOL_EVT_UTILS::IsCancelInteractive( *evt ) )
771  {
772  preview.FreeItems();
773  break;
774  }
775  }
776  else if( evt->IsClick( BUT_RIGHT ) )
777  {
779  }
780  else if( evt->IsClick( BUT_LEFT ) )
781  {
782  // Place the drawing
784 
785  for( auto item : preview )
786  {
787  if( m_editModules )
788  {
789  // Modules use different types for the same things,
790  // so we need to convert imported items to appropriate classes.
791  BOARD_ITEM* converted = NULL;
792 
793  switch( item->Type() )
794  {
795  case PCB_TEXT_T:
796  {
797  TEXTE_PCB* text = static_cast<TEXTE_PCB*>( item );
798  TEXTE_MODULE* textMod = new TEXTE_MODULE( (MODULE*) parent );
799 
800  // Assignment operator also copies the item PCB_TEXT_T type,
801  // so it cannot be added to a module which handles PCB_MODULE_TEXT_T
802  textMod->SetText( text->GetText() );
803 #if 0
804  textMod->SetTextSize( text->GetTextSize() );
805  textMod->SetThickness( text->GetThickness() );
806  textMod->SetOrientation( text->GetTextAngle() );
807  textMod->SetTextPos( text->GetTextPos() );
808  textMod->SetTextSize( text->GetTextSize() );
809  textMod->SetVisible( text->GetVisible() );
810  textMod->SetMirrored( text->IsMirrored() );
811  textMod->SetItalic( text->IsItalic() );
812  textMod->SetBold( text->IsBold() );
813  textMod->SetHorizJustify( text->GetHorizJustify() );
814  textMod->SetVertJustify( text->GetVertJustify() );
815  textMod->SetMultilineAllowed( text->IsMultilineAllowed() );
816 #else
817  textMod->EDA_TEXT::SetEffects( *text );
818  textMod->SetLocalCoord(); // using changed SetTexPos() via SetEffects()
819 #endif
820  converted = textMod;
821  break;
822  }
823 
824  case PCB_LINE_T:
825  {
826  DRAWSEGMENT* seg = static_cast<DRAWSEGMENT*>( item );
827  EDGE_MODULE* modSeg = new EDGE_MODULE( (MODULE*) parent );
828 
829  // Assignment operator also copies the item PCB_LINE_T type,
830  // so it cannot be added to a module which handles PCB_MODULE_EDGE_T
831  modSeg->SetWidth( seg->GetWidth() );
832  modSeg->SetStart( seg->GetStart() );
833  modSeg->SetEnd( seg->GetEnd() );
834  modSeg->SetAngle( seg->GetAngle() );
835  modSeg->SetShape( seg->GetShape() );
836  modSeg->SetType( seg->GetType() );
837  modSeg->SetBezControl1( seg->GetBezControl1() );
838  modSeg->SetBezControl2( seg->GetBezControl2() );
839  modSeg->SetBezierPoints( seg->GetBezierPoints() );
840  modSeg->SetPolyPoints( seg->GetPolyPoints() );
841  modSeg->SetLocalCoord();
842  converted = modSeg;
843  break;
844  }
845 
846  default:
847  assert( false );
848  break;
849  }
850 
851  if( converted )
852  converted->SetLayer( static_cast<BOARD_ITEM*>( item )->GetLayer() );
853 
854  delete item;
855  item = converted;
856  }
857 
858  if( item )
859  commit.Add( item );
860  }
861 
862  commit.Push( _( "Place a DXF drawing" ) );
863  break;
864  }
865  }
866 
867  preview.Clear();
868  m_view->Remove( &preview );
869 
870  return 0;
871 }
void SetMirrored(bool isMirrored)
Definition: eda_text.h:178
static TOOL_ACTION selectionClear
Clears the current selection.
Definition: pcb_actions.h:53
virtual void ShowCursor(bool aEnabled)
Function ShowCursor() Enables or disables display of cursor.
void SetShape(STROKE_T aShape)
const wxPoint & GetBezControl2() const
bool IsMultilineAllowed() const
Definition: eda_text.h:188
void SetBezierPoints(const std::vector< wxPoint > &aPoints)
const wxPoint & GetTextPos() const
Definition: eda_text.h:224
bool IsItalic() const
Definition: eda_text.h:170
virtual void SetLayer(PCB_LAYER_ID aLayer)
Function SetLayer sets the layer this item is on.
Class BOARD_ITEM is a base class for any item which can be embedded within the BOARD container class...
void SetType(int aType)
void SetItalic(bool isItalic)
Definition: eda_text.h:169
EDA_ITEM * Front() const
Definition: selection.h:144
TOOL_MANAGER * m_toolMgr
Definition: tool_base.h:215
virtual void Remove(VIEW_ITEM *aItem)
Function Remove() Removes a VIEW_ITEM from the view.
Definition: view.cpp:342
void SetTextPos(const wxPoint &aPoint)
Definition: eda_text.h:223
void SetVisible(bool aVisible)
Definition: eda_text.h:175
OPT_TOOL_EVENT Wait(const TOOL_EVENT_LIST &aEventList=TOOL_EVENT(TC_ANY, TA_ANY))
Function Wait()
virtual const wxPoint & GetPosition() const =0
class TEXTE_PCB, text on a layer
Definition: typeinfo.h:92
virtual void SetSnapping(bool aEnabled)
Function SetSnapping() Enables/disables snapping cursor to grid.
bool RunAction(const std::string &aActionName, bool aNow=false, T aParam=NULL)
Function RunAction() Runs the specified action.
Definition: tool_manager.h:125
void SetTextSize(const wxSize &aNewSize)
Definition: eda_text.h:214
bool IsRotateToolEvt(const TOOL_EVENT &aEvt)
Function isRotateToolEvt()
const std::vector< wxPoint > GetPolyPoints() const
EDA_TEXT_HJUSTIFY_T GetHorizJustify() const
Definition: eda_text.h:190
void SetBezControl2(const wxPoint &aPoint)
static const int delta[8][2]
Definition: solve.cpp:112
bool IsBold() const
Definition: eda_text.h:173
double GetTextAngle() const
Definition: eda_text.h:164
int GetThickness() const
Function GetThickness returns pen width.
Definition: eda_text.h:154
virtual void Add(EDA_ITEM *aItem)
Definition: selection.h:71
KIGFX::VIEW * m_view
Definition: drawing_tool.h:267
STROKE_T GetShape() const
RAII class that sets an value at construction and resets it to the original value at destruction...
const wxPoint & GetEnd() const
Function GetEnd returns the ending point of the graphic.
const wxString & GetText() const
Function GetText returns the string associated with the text object.
Definition: eda_text.h:130
VECTOR2D GetCursorPosition() const
Returns the current cursor position in world coordinates.
void SetVertJustify(EDA_TEXT_VJUSTIFY_T aType)
Definition: eda_text.h:194
const wxPoint & GetBezControl1() const
KIGFX::VIEW_CONTROLS * m_controls
Definition: drawing_tool.h:268
int GetType() const
bool IsCancelInteractive(const TOOL_EVENT &aEvt)
Function IsCancelInteractive()
virtual void Update(VIEW_ITEM *aItem, int aUpdateFlags)
For dynamic VIEWs, informs the associated VIEW that the graphical representation of this item has cha...
Definition: view.cpp:1385
void SetMultilineAllowed(bool aAllow)
Function SetMultiLineAllowed.
Definition: eda_text.h:187
void SetStart(const wxPoint &aStart)
PCB_BASE_EDIT_FRAME * m_frame
Definition: drawing_tool.h:270
bool m_editModules
Definition: pcb_tool.h:142
void SetPolyPoints(const std::vector< wxPoint > &aPoints)
const std::vector< wxPoint > & GetBezierPoints() const
void SetLocalCoord()
Set relative coordinates from draw coordinates.
EDA_TEXT_VJUSTIFY_T GetVertJustify() const
Definition: eda_text.h:191
static TOOL_ACTION flip
Flipping of selected objects.
Definition: pcb_actions.h:99
void SetLocalCoord()
Set relative coordinates.
double GetAngle() const
void SetHorizJustify(EDA_TEXT_HJUSTIFY_T aType)
Definition: eda_text.h:193
bool IsMirrored() const
Definition: eda_text.h:179
int GetWidth() const
void SetEnd(const wxPoint &aEnd)
static bool GetLayer(MODEL_VRML &aModel, LAYER_NUM layer, VRML_LAYER **vlayer)
void SetAngle(double aAngle)
Function SetAngle sets the angle for arcs, and normalizes it within the range 0 - 360 degrees...
void Activate()
Function Activate() Runs the tool.
virtual BOARD_ITEM_CONTAINER * GetModel() const =0
Function GetModel()
virtual void Add(VIEW_ITEM *aItem, int aDrawPriority=-1)
Function Add() Adds a VIEW_ITEM to the view.
Definition: view.cpp:312
const wxSize & GetTextSize() const
Definition: eda_text.h:215
Abstract interface for BOARD_ITEMs capable of storing other items inside.
class DRAWSEGMENT, a segment not on copper layers
Definition: typeinfo.h:91
const wxPoint & GetStart() const
Function GetStart returns the starting point of the graphic.
int GetEventRotationAngle(const PCB_BASE_EDIT_FRAME &aFrame, const TOOL_EVENT &aEvt)
Function getEventRotationAngle()
void SetBold(bool aBold)
Definition: eda_text.h:172
void Flip(T &aValue)
void ShowContextMenu(SELECTION &aSelection)
Function ShowContextMenu.
Definition: tool_menu.cpp:62
TOOL_MENU m_menu
Menu model displayed by the tool.
Definition: drawing_tool.h:277
void SetThickness(int aNewThickness)
Function SetThickness sets pen width.
Definition: eda_text.h:148
OPT< TOOL_EVENT > OPT_TOOL_EVENT
Definition: tool_event.h:460
void SetBezControl1(const wxPoint &aPoint)
virtual void SetText(const wxString &aText)
Definition: eda_text.h:141
void SetWidth(int aWidth)
int DRAWING_TOOL::PlaceText ( const TOOL_EVENT aEvent)

Function PlaceText() Displays a dialog that allows to input text and its settings and then lets the user decide where to place the text in editor.

Definition at line 311 of file drawing_tool.cpp.

References TOOL_INTERACTIVE::Activate(), SELECTION::Add(), COMMIT::Add(), KIGFX::VIEW::Add(), BUT_LEFT, BUT_RIGHT, KIGFX::VIEW_CONTROLS::CaptureCursor(), SELECTION::Clear(), EDA_ITEM::ClearFlags(), PCB_ACTIONS::flip, BOARD_ITEM::Flip(), PCB_BASE_FRAME::GetActiveLayer(), KIGFX::VIEW_CONTROLS::GetCursorPosition(), PCB_BASE_FRAME::GetDesignSettings(), TOOL_EVT_UTILS::GetEventRotationAngle(), PCB_BASE_EDIT_FRAME::GetModel(), BOARD_ITEM::GetPosition(), EDA_TEXT::GetText(), ID_MODEDIT_TEXT_TOOL, ID_PCB_ADD_TEXT_BUTT, IS_NEW, IsBackLayer(), TOOL_EVT_UTILS::IsCancelInteractive(), TOOL_EVT_UTILS::IsRotateToolEvt(), m_controls, PCB_TOOL::m_editModules, m_frame, m_menu, m_mode, BOARD_DESIGN_SETTINGS::m_ModuleTextSize, BOARD_DESIGN_SETTINGS::m_ModuleTextWidth, BOARD_DESIGN_SETTINGS::m_PcbTextSize, BOARD_DESIGN_SETTINGS::m_PcbTextWidth, TOOL_BASE::m_toolMgr, m_view, BOARD_COMMIT::Push(), SELECTION::Remove(), KIGFX::VIEW::Remove(), BOARD_ITEM::Rotate(), TOOL_MANAGER::RunAction(), TOOL_INTERACTIVE::RunMainStack(), PCB_ACTIONS::selectionClear, KIGFX::VIEW_CONTROLS::SetAutoPan(), EDA_ITEM::SetFlags(), BOARD_ITEM::SetLayer(), EDA_TEXT::SetMirrored(), EDA_DRAW_FRAME::SetNoToolSelected(), BOARD_ITEM::SetPosition(), KIGFX::VIEW_CONTROLS::SetSnapping(), EDA_TEXT::SetTextPos(), EDA_TEXT::SetTextSize(), EDA_TEXT::SetThickness(), PCB_BASE_FRAME::SetToolID(), TOOL_MENU::ShowContextMenu(), KIGFX::VIEW_CONTROLS::ShowCursor(), TC_COMMAND, TEXT, KIGFX::VIEW::Update(), TOOL_INTERACTIVE::Wait(), VECTOR2< T >::x, and VECTOR2< T >::y.

Referenced by setTransitions().

312 {
313  BOARD_ITEM* text = NULL;
314  const BOARD_DESIGN_SETTINGS& dsnSettings = m_frame->GetDesignSettings();
315  BOARD_COMMIT commit( m_frame );
316 
317  // Add a VIEW_GROUP that serves as a preview for the new item
318  SELECTION preview;
319 
320  m_view->Add( &preview );
321 
323  m_controls->ShowCursor( true );
324  m_controls->SetSnapping( true );
325  // do not capture or auto-pan until we start placing some text
326 
327  SCOPED_DRAW_MODE scopedDrawMode( m_mode, MODE::TEXT );
328 
329  Activate();
331  wxCURSOR_PENCIL, _( "Add text" ) );
332 
333  // Main loop: keep receiving events
334  while( OPT_TOOL_EVENT evt = Wait() )
335  {
336  VECTOR2I cursorPos = m_controls->GetCursorPosition();
337 
339  {
340  if( text )
341  {
342  // Delete the old text and have another try
343  delete text;
344  text = NULL;
345 
346  preview.Clear();
347 
348  m_controls->SetAutoPan( false );
349  m_controls->CaptureCursor( false );
350  m_controls->ShowCursor( true );
351  }
352  else
353  break;
354 
355  if( evt->IsActivate() ) // now finish unconditionally
356  break;
357  }
358  else if( text && evt->Category() == TC_COMMAND )
359  {
360  if( TOOL_EVT_UTILS::IsRotateToolEvt( *evt ) )
361  {
362  const auto rotationAngle = TOOL_EVT_UTILS::GetEventRotationAngle(
363  *m_frame, *evt );
364 
365  text->Rotate( text->GetPosition(), rotationAngle );
366  m_view->Update( &preview );
367  }
368  else if( evt->IsAction( &PCB_ACTIONS::flip ) )
369  {
370  text->Flip( text->GetPosition() );
371  m_view->Update( &preview );
372  }
373  }
374  else if( evt->IsClick( BUT_RIGHT ) )
375  {
377  }
378  else if( evt->IsClick( BUT_LEFT ) )
379  {
380  if( !text )
381  {
382  // Init the new item attributes
383  if( m_editModules )
384  {
385  TEXTE_MODULE* textMod = new TEXTE_MODULE( (MODULE*) m_frame->GetModel() );
386 
387  textMod->SetLayer( m_frame->GetActiveLayer() );
388  textMod->SetTextSize( dsnSettings.m_ModuleTextSize );
389  textMod->SetThickness( dsnSettings.m_ModuleTextWidth );
390  textMod->SetTextPos( wxPoint( cursorPos.x, cursorPos.y ) );
391 
392  DialogEditModuleText textDialog( m_frame, textMod, NULL );
393  bool placing;
394 
395  RunMainStack([&]() {
396  placing = textDialog.ShowModal() && ( textMod->GetText().Length() > 0 );
397  } );
398 
399  if( placing )
400  text = textMod;
401  else
402  delete textMod;
403  }
404  else
405  {
406  TEXTE_PCB* textPcb = new TEXTE_PCB( m_frame->GetModel() );
407  // TODO we have to set IS_NEW, otherwise InstallTextPCB.. creates an undo entry :| LEGACY_CLEANUP
408  textPcb->SetFlags( IS_NEW );
409 
411  textPcb->SetLayer( layer );
412 
413  // Set the mirrored option for layers on the BACK side of the board
414  if( IsBackLayer( layer ) )
415  textPcb->SetMirrored( true );
416 
417  textPcb->SetTextSize( dsnSettings.m_PcbTextSize );
418  textPcb->SetThickness( dsnSettings.m_PcbTextWidth );
419  textPcb->SetTextPos( wxPoint( cursorPos.x, cursorPos.y ) );
420 
421  RunMainStack([&]() {
422  getEditFrame<PCB_EDIT_FRAME>()->InstallTextPCBOptionsFrame( textPcb, NULL );
423  } );
424 
425  if( textPcb->GetText().IsEmpty() )
426  delete textPcb;
427  else
428  text = textPcb;
429  }
430 
431  if( text == NULL )
432  continue;
433 
434  m_controls->CaptureCursor( true );
435  m_controls->SetAutoPan( true );
436  // m_controls->ShowCursor( false );
437 
438  preview.Add( text );
439  }
440  else
441  {
442  // assert( text->GetText().Length() > 0 );
443  // assert( text->GetTextSize().x > 0 && text->GetTextSize().y > 0 );
444 
445  text->ClearFlags();
446  preview.Remove( text );
447 
448  commit.Add( text );
449  commit.Push( _( "Place a text" ) );
450 
451  m_controls->CaptureCursor( false );
452  m_controls->SetAutoPan( false );
453  m_controls->ShowCursor( true );
454 
455  text = NULL;
456  }
457  }
458  else if( text && evt->IsMotion() )
459  {
460  text->SetPosition( wxPoint( cursorPos.x, cursorPos.y ) );
461 
462  // Show a preview of the item
463  m_view->Update( &preview );
464  }
465  }
466 
467  m_view->Remove( &preview );
469 
470  return 0;
471 }
void SetMirrored(bool isMirrored)
Definition: eda_text.h:178
static TOOL_ACTION selectionClear
Clears the current selection.
Definition: pcb_actions.h:53
virtual void ShowCursor(bool aEnabled)
Function ShowCursor() Enables or disables display of cursor.
virtual void Clear() override
Function Clear() Removes all the stored items from the group.
Definition: selection.h:81
virtual void SetToolID(int aId, int aCursor, const wxString &aToolMsg) override
Function SetToolID sets the tool command ID to aId and sets the cursor to aCursor.
virtual void SetPosition(const wxPoint &aPos)=0
virtual void SetLayer(PCB_LAYER_ID aLayer)
Function SetLayer sets the layer this item is on.
int m_ModuleTextWidth
Default footprint texts thickness.
Class BOARD_ITEM is a base class for any item which can be embedded within the BOARD container class...
int m_PcbTextWidth
current Pcb (not module) Text width
void RunMainStack(std::function< void()> aFunc)
Function RunMainStack()
bool IsBackLayer(PCB_LAYER_ID aLayerId)
Layer classification: check if it's a back layer.
TOOL_MANAGER * m_toolMgr
Definition: tool_base.h:215
virtual void Remove(VIEW_ITEM *aItem)
Function Remove() Removes a VIEW_ITEM from the view.
Definition: view.cpp:342
void SetTextPos(const wxPoint &aPoint)
Definition: eda_text.h:223
OPT_TOOL_EVENT Wait(const TOOL_EVENT_LIST &aEventList=TOOL_EVENT(TC_ANY, TA_ANY))
Function Wait()
virtual const wxPoint & GetPosition() const =0
virtual void SetSnapping(bool aEnabled)
Function SetSnapping() Enables/disables snapping cursor to grid.
bool RunAction(const std::string &aActionName, bool aNow=false, T aParam=NULL)
Function RunAction() Runs the specified action.
Definition: tool_manager.h:125
void SetTextSize(const wxSize &aNewSize)
Definition: eda_text.h:214
bool IsRotateToolEvt(const TOOL_EVENT &aEvt)
Function isRotateToolEvt()
wxSize m_ModuleTextSize
Default footprint texts size.
virtual void Add(EDA_ITEM *aItem)
Definition: selection.h:71
KIGFX::VIEW * m_view
Definition: drawing_tool.h:267
#define IS_NEW
New item, just created.
Definition: base_struct.h:127
PCB_LAYER_ID
A quick note on layer IDs:
RAII class that sets an value at construction and resets it to the original value at destruction...
void SetFlags(STATUS_FLAGS aMask)
Definition: base_struct.h:280
virtual void CaptureCursor(bool aEnabled)
Function CaptureCursor() Forces the cursor to stay within the drawing panel area. ...
wxSize m_PcbTextSize
current Pcb (not module) Text size
const wxString & GetText() const
Function GetText returns the string associated with the text object.
Definition: eda_text.h:130
VECTOR2D GetCursorPosition() const
Returns the current cursor position in world coordinates.
virtual BOARD_DESIGN_SETTINGS & GetDesignSettings() const
Function GetDesignSettings returns the BOARD_DESIGN_SETTINGS for the BOARD owned by this frame...
KIGFX::VIEW_CONTROLS * m_controls
Definition: drawing_tool.h:268
virtual void Rotate(const wxPoint &aRotCentre, double aAngle)
Function Rotate Rotate this object.
bool IsCancelInteractive(const TOOL_EVENT &aEvt)
Function IsCancelInteractive()
virtual void Update(VIEW_ITEM *aItem, int aUpdateFlags)
For dynamic VIEWs, informs the associated VIEW that the graphical representation of this item has cha...
Definition: view.cpp:1385
virtual void SetAutoPan(bool aEnabled)
Function SetAutoPan Turns on/off auto panning (this feature is used when there is a tool active (eg...
PCB_BASE_EDIT_FRAME * m_frame
Definition: drawing_tool.h:270
bool m_editModules
Definition: pcb_tool.h:142
virtual void Flip(const wxPoint &aCentre)
Function Flip Flip this object, i.e.
static TOOL_ACTION flip
Flipping of selected objects.
Definition: pcb_actions.h:99
virtual void SetNoToolSelected()
Select the ID_NO_TOOL_SELECTED id tool (Idle tool)
Definition: draw_frame.cpp:571
void ClearFlags(STATUS_FLAGS aMask=EDA_ITEM_ALL_FLAGS)
Definition: base_struct.h:281
void Activate()
Function Activate() Runs the tool.
virtual BOARD_ITEM_CONTAINER * GetModel() const =0
Function GetModel()
virtual void Add(VIEW_ITEM *aItem, int aDrawPriority=-1)
Function Add() Adds a VIEW_ITEM to the view.
Definition: view.cpp:312
int GetEventRotationAngle(const PCB_BASE_EDIT_FRAME &aFrame, const TOOL_EVENT &aEvt)
Function getEventRotationAngle()
void ShowContextMenu(SELECTION &aSelection)
Function ShowContextMenu.
Definition: tool_menu.cpp:62
virtual PCB_LAYER_ID GetActiveLayer() const
Function GetActiveLayer returns the active layer.
TOOL_MENU m_menu
Menu model displayed by the tool.
Definition: drawing_tool.h:277
void SetThickness(int aNewThickness)
Function SetThickness sets pen width.
Definition: eda_text.h:148
OPT< TOOL_EVENT > OPT_TOOL_EVENT
Definition: tool_event.h:460
Class BOARD_DESIGN_SETTINGS contains design settings for a BOARD object.
virtual void Remove(EDA_ITEM *aItem)
Definition: selection.h:76
void DRAWING_TOOL::Reset ( RESET_REASON  aReason)
overridevirtual

Function Reset() Brings the tool to a known, initial state.

If the tool claimed anything from the model or the view, it must release it when its reset.

Parameters
aReasoncontains information about the reason of tool reset.

Reimplemented from PCB_TOOL.

Definition at line 201 of file drawing_tool.cpp.

References TOOL_BASE::getView(), TOOL_BASE::getViewControls(), m_board, m_controls, m_frame, and m_view.

202 {
203  // Init variables used by every drawing tool
204  m_view = getView();
206  m_board = getModel<BOARD>();
207  m_frame = getEditFrame<PCB_BASE_EDIT_FRAME>();
208 }
BOARD * m_board
Definition: drawing_tool.h:269
KIGFX::VIEW * m_view
Definition: drawing_tool.h:267
KIGFX::VIEW_CONTROLS * m_controls
Definition: drawing_tool.h:268
KIGFX::VIEW_CONTROLS * getViewControls() const
Function getViewControls()
Definition: tool_base.cpp:41
PCB_BASE_EDIT_FRAME * m_frame
Definition: drawing_tool.h:270
KIGFX::VIEW * getView() const
Function getView()
Definition: tool_base.cpp:35
void TOOL_INTERACTIVE::RunMainStack ( std::function< void()>  aFunc)
inherited

Function RunMainStack()

Calls a function using the main stack.

Parameters
aFuncis the function to be calls.

Definition at line 85 of file tool_interactive.cpp.

References TOOL_BASE::m_toolMgr, and TOOL_MANAGER::RunMainStack().

Referenced by PlaceText().

86 {
87  m_toolMgr->RunMainStack( this, std::move( aFunc ) );
88 }
TOOL_MANAGER * m_toolMgr
Definition: tool_base.h:215
void RunMainStack(TOOL_BASE *aTool, std::function< void()> aFunc)
void DRAWING_TOOL::runPolygonEventLoop ( POLYGON_GEOM_MANAGER aPolyGeomMgr)
private

Run the event loop for polygon creation, sending user input on to the given POLYGON_GEOM_MANAGER for processing into a complete polygon.

Definition at line 1247 of file drawing_tool.cpp.

References POLYGON_GEOM_MANAGER::AddPoint(), BUT_LEFT, BUT_RIGHT, KIGFX::VIEW_CONTROLS::CaptureCursor(), closeZoneOutline, PCB_TOOL::controls(), POLYGON_GEOM_MANAGER::DEG45, POLYGON_GEOM_MANAGER::DeleteLastCorner(), deleteLastPoint, POLYGON_GEOM_MANAGER::DIRECT, KIGFX::VIEW_CONTROLS::GetCursorPosition(), TOOL_BASE::getViewControls(), TOOL_EVT_UTILS::IsCancelInteractive(), POLYGON_GEOM_MANAGER::IsPolygonInProgress(), m_menu, MD_CTRL, POLYGON_GEOM_MANAGER::NewPointClosesOutline(), POLYGON_GEOM_MANAGER::Reset(), KIGFX::VIEW_CONTROLS::SetAutoPan(), POLYGON_GEOM_MANAGER::SetCursorPosition(), POLYGON_GEOM_MANAGER::SetFinished(), POLYGON_GEOM_MANAGER::SetLeaderMode(), TOOL_MENU::ShowContextMenu(), and TOOL_INTERACTIVE::Wait().

Referenced by drawZone().

1248 {
1249  auto& controls = *getViewControls();
1250  bool started = false;
1251 
1252  while( OPT_TOOL_EVENT evt = Wait() )
1253  {
1254  VECTOR2I cursorPos = controls.GetCursorPosition();
1255 
1257  {
1258  // pre-empted by another tool, give up
1259  // cancelled without an inprogress polygon, give up
1260  if( !polyGeomMgr.IsPolygonInProgress() || evt->IsActivate() )
1261  {
1262  break;
1263  }
1264 
1265  polyGeomMgr.Reset();
1266  // start again
1267  started = false;
1268 
1269  controls.SetAutoPan( false );
1270  controls.CaptureCursor( false );
1271  }
1272  else if( evt->IsClick( BUT_RIGHT ) )
1273  {
1275  }
1276  // events that lock in nodes
1277  else if( evt->IsClick( BUT_LEFT )
1278  || evt->IsDblClick( BUT_LEFT )
1279  || evt->IsAction( &closeZoneOutline ) )
1280  {
1281  // Check if it is double click / closing line (so we have to finish the zone)
1282  const bool endPolygon = evt->IsDblClick( BUT_LEFT )
1283  || evt->IsAction( &closeZoneOutline )
1284  || polyGeomMgr.NewPointClosesOutline( cursorPos );
1285 
1286  if( endPolygon )
1287  {
1288  polyGeomMgr.SetFinished();
1289  polyGeomMgr.Reset();
1290 
1291  // ready to start again
1292  started = false;
1293  controls.SetAutoPan( false );
1294  controls.CaptureCursor( false );
1295  }
1296  else // adding a corner
1297  {
1298  polyGeomMgr.AddPoint( cursorPos );
1299 
1300  if( !started )
1301  {
1302  started = true;
1303  controls.SetAutoPan( true );
1304  controls.CaptureCursor( true );
1305  }
1306  }
1307  }
1308  else if( evt->IsAction( &deleteLastPoint ) )
1309  {
1310  polyGeomMgr.DeleteLastCorner();
1311 
1312  if( !polyGeomMgr.IsPolygonInProgress() )
1313  {
1314  // report finished as an empty shape
1315  polyGeomMgr.SetFinished();
1316 
1317  // start again
1318  started = false;
1319  controls.SetAutoPan( false );
1320  controls.CaptureCursor( false );
1321  }
1322  }
1323  else if( polyGeomMgr.IsPolygonInProgress()
1324  && ( evt->IsMotion() || evt->IsDrag( BUT_LEFT ) ) )
1325  {
1326  bool draw45 = evt->Modifier( MD_CTRL );
1327  polyGeomMgr.SetLeaderMode( draw45 ? POLYGON_GEOM_MANAGER::LEADER_MODE::DEG45
1329  polyGeomMgr.SetCursorPosition( cursorPos );
1330  }
1331  } // end while
1332 }
static TOOL_ACTION closeZoneOutline("pcbnew.InteractiveDrawing.closeZoneOutline", AS_CONTEXT, 0, _("Close Zone Outline"), _("Close the outline of a zone in progress"), checked_ok_xpm)
static TOOL_ACTION deleteLastPoint("pcbnew.InteractiveDrawing.deleteLastPoint", AS_CONTEXT, WXK_BACK, _("Delete Last Point"), _("Delete the last point added to the current item"), undo_xpm)
OPT_TOOL_EVENT Wait(const TOOL_EVENT_LIST &aEventList=TOOL_EVENT(TC_ANY, TA_ANY))
Function Wait()
KIGFX::VIEW_CONTROLS * controls() const
Definition: pcb_tool.h:133
Unconstrained point-to-point
virtual void CaptureCursor(bool aEnabled)
Function CaptureCursor() Forces the cursor to stay within the drawing panel area. ...
VECTOR2D GetCursorPosition() const
Returns the current cursor position in world coordinates.
bool IsCancelInteractive(const TOOL_EVENT &aEvt)
Function IsCancelInteractive()
virtual void SetAutoPan(bool aEnabled)
Function SetAutoPan Turns on/off auto panning (this feature is used when there is a tool active (eg...
KIGFX::VIEW_CONTROLS * getViewControls() const
Function getViewControls()
Definition: tool_base.cpp:41
void ShowContextMenu(SELECTION &aSelection)
Function ShowContextMenu.
Definition: tool_menu.cpp:62
TOOL_MENU m_menu
Menu model displayed by the tool.
Definition: drawing_tool.h:277
OPT< TOOL_EVENT > OPT_TOOL_EVENT
Definition: tool_event.h:460
const SELECTION & PCB_TOOL::selection ( ) const
protectedinherited

Definition at line 218 of file pcb_tool.cpp.

References TOOL_MANAGER::GetTool(), and TOOL_BASE::m_toolMgr.

Referenced by PAD_TOOL::applyPadSettings(), PCB_EDITOR_CONTROL::calculateSelectionRatsnest(), PAD_TOOL::copyPadSettings(), EDIT_TOOL::copyToClipboard(), EDIT_TOOL::CreateArray(), MODULE_EDITOR_TOOLS::CreatePadFromShapes(), PCB_EDITOR_CONTROL::CrossProbePcbToSch(), EDIT_TOOL::Duplicate(), EDIT_TOOL::editFootprintInFpEditor(), EDIT_TOOL::ExchangeFootprints(), MODULE_EDITOR_TOOLS::ExplodePadToShapes(), SELECTION_TOOL::filterSelection(), EDIT_TOOL::Flip(), getSourceZoneForAction(), ROUTER_TOOL::InlineDrag(), EDIT_TOOL::Main(), EDIT_TOOL::Mirror(), PCB_EDITOR_CONTROL::modifyLockSelected(), EDIT_TOOL::MoveExact(), POINT_EDITOR::OnSelectionChange(), PCBNEW_CONTROL::placeBoardItems(), POSITION_RELATIVE_TOOL::PositionRelative(), EDIT_TOOL::Properties(), PAD_TOOL::pushPadSettings(), EDIT_TOOL::Remove(), EDIT_TOOL::Rotate(), SELECTION_TOOL::selectConnection(), SELECTION_TOOL::selectCopper(), PCB_TOOL::selection(), SELECTION_TOOL::selectNet(), EDIT_TOOL::uniqueSelected(), PCB_EDITOR_CONTROL::UpdateSelectionRatsnest(), PCB_EDITOR_CONTROL::ZoneDuplicate(), ZONE_FILLER_TOOL::ZoneFill(), PCB_EDITOR_CONTROL::ZoneMerge(), and ZONE_FILLER_TOOL::ZoneUnfill().

219 {
220  auto selTool = m_toolMgr->GetTool<SELECTION_TOOL>();
221  const auto& selection = selTool->GetSelection();
222  return selection;
223 }
Class SELECTION_TOOL.
TOOL_MANAGER * m_toolMgr
Definition: tool_base.h:215
const SELECTION & selection() const
Definition: pcb_tool.cpp:218
SELECTION & PCB_TOOL::selection ( )
protectedinherited

Definition at line 225 of file pcb_tool.cpp.

References TOOL_MANAGER::GetTool(), TOOL_BASE::m_toolMgr, and PCB_TOOL::selection().

226 {
227  auto selTool = m_toolMgr->GetTool<SELECTION_TOOL>();
228  auto& selection = selTool->GetSelection();
229  return selection;
230 }
Class SELECTION_TOOL.
TOOL_MANAGER * m_toolMgr
Definition: tool_base.h:215
const SELECTION & selection() const
Definition: pcb_tool.cpp:218
int DRAWING_TOOL::SetAnchor ( const TOOL_EVENT aEvent)

Function SetAnchor() Places the footprint anchor (only in module editor).

Definition at line 874 of file drawing_tool.cpp.

References TOOL_INTERACTIVE::Activate(), ANCHOR, BUT_LEFT, BUT_RIGHT, KIGFX::VIEW_CONTROLS::CaptureCursor(), KIGFX::VIEW_CONTROLS::GetCursorPosition(), PCB_BASE_EDIT_FRAME::GetModel(), MODULE::GetPosition(), ID_MODEDIT_ANCHOR_TOOL, TOOL_EVT_UTILS::IsCancelInteractive(), m_controls, PCB_TOOL::m_editModules, m_frame, m_menu, m_mode, COMMIT::Modify(), PCB_TOOL::module(), MODULE::MoveAnchorPosition(), BOARD_COMMIT::Push(), KIGFX::VIEW_CONTROLS::SetAutoPan(), EDA_DRAW_FRAME::SetNoToolSelected(), KIGFX::VIEW_CONTROLS::SetSnapping(), PCB_BASE_FRAME::SetToolID(), TOOL_MENU::ShowContextMenu(), KIGFX::VIEW_CONTROLS::ShowCursor(), TOOL_INTERACTIVE::Wait(), VECTOR2< T >::x, and VECTOR2< T >::y.

Referenced by setTransitions().

875 {
876  assert( m_editModules );
877 
878  SCOPED_DRAW_MODE scopedDrawMode( m_mode, MODE::ANCHOR );
879 
880  Activate();
881  m_frame->SetToolID( ID_MODEDIT_ANCHOR_TOOL, wxCURSOR_PENCIL,
882  _( "Place the footprint anchor" ) );
883 
884  m_controls->ShowCursor( true );
885  m_controls->SetSnapping( true );
886  m_controls->SetAutoPan( true );
887  m_controls->CaptureCursor( false );
888 
889  while( OPT_TOOL_EVENT evt = Wait() )
890  {
891  if( evt->IsClick( BUT_LEFT ) )
892  {
894  BOARD_COMMIT commit( m_frame );
895  commit.Modify( module );
896 
897  // set the new relative internal local coordinates of footprint items
898  VECTOR2I cursorPos = m_controls->GetCursorPosition();
899  wxPoint moveVector = module->GetPosition() - wxPoint( cursorPos.x, cursorPos.y );
900  module->MoveAnchorPosition( moveVector );
901 
902  commit.Push( _( "Move the footprint reference anchor" ) );
903 
904  // Usually, we do not need to change twice the anchor position,
905  // so deselect the active tool
906  break;
907  }
908  else if( evt->IsClick( BUT_RIGHT ) )
909  {
911  }
912  else if( TOOL_EVT_UTILS::IsCancelInteractive( *evt ) )
913  break;
914  }
915 
917 
918  return 0;
919 }
virtual void ShowCursor(bool aEnabled)
Function ShowCursor() Enables or disables display of cursor.
virtual void SetToolID(int aId, int aCursor, const wxString &aToolMsg) override
Function SetToolID sets the tool command ID to aId and sets the cursor to aCursor.
const wxPoint & GetPosition() const override
Definition: class_module.h:175
OPT_TOOL_EVENT Wait(const TOOL_EVENT_LIST &aEventList=TOOL_EVENT(TC_ANY, TA_ANY))
Function Wait()
virtual void SetSnapping(bool aEnabled)
Function SetSnapping() Enables/disables snapping cursor to grid.
void MoveAnchorPosition(const wxPoint &aMoveVector)
Function MoveAnchorPosition Move the reference point of the footprint It looks like a move footprint:...
RAII class that sets an value at construction and resets it to the original value at destruction...
virtual void CaptureCursor(bool aEnabled)
Function CaptureCursor() Forces the cursor to stay within the drawing panel area. ...
VECTOR2D GetCursorPosition() const
Returns the current cursor position in world coordinates.
MODULE * module() const
Definition: pcb_tool.h:136
KIGFX::VIEW_CONTROLS * m_controls
Definition: drawing_tool.h:268
bool IsCancelInteractive(const TOOL_EVENT &aEvt)
Function IsCancelInteractive()
virtual void SetAutoPan(bool aEnabled)
Function SetAutoPan Turns on/off auto panning (this feature is used when there is a tool active (eg...
PCB_BASE_EDIT_FRAME * m_frame
Definition: drawing_tool.h:270
bool m_editModules
Definition: pcb_tool.h:142
virtual void SetNoToolSelected()
Select the ID_NO_TOOL_SELECTED id tool (Idle tool)
Definition: draw_frame.cpp:571
void Activate()
Function Activate() Runs the tool.
virtual BOARD_ITEM_CONTAINER * GetModel() const =0
Function GetModel()
void ShowContextMenu(SELECTION &aSelection)
Function ShowContextMenu.
Definition: tool_menu.cpp:62
TOOL_MENU m_menu
Menu model displayed by the tool.
Definition: drawing_tool.h:277
OPT< TOOL_EVENT > OPT_TOOL_EVENT
Definition: tool_event.h:460
void TOOL_INTERACTIVE::SetContextMenu ( CONTEXT_MENU aMenu,
CONTEXT_MENU_TRIGGER  aTrigger = CMENU_BUTTON 
)
inherited

Function SetContextMenu()

Assigns a context menu and tells when it should be activated.

Parameters
aMenuis the menu to be assigned.
aTriggerdetermines conditions upon which the context menu is activated.

Definition at line 74 of file tool_interactive.cpp.

References CMENU_OFF, TOOL_BASE::m_toolMgr, TOOL_MANAGER::ScheduleContextMenu(), and CONTEXT_MENU::SetTool().

Referenced by GERBVIEW_SELECTION_TOOL::disambiguationMenu(), SELECTION_TOOL::disambiguationMenu(), LENGTH_TUNER_TOOL::mainLoop(), ROUTER_TOOL::mainLoop(), and TOOL_MENU::ShowContextMenu().

75 {
76  if( aMenu )
77  aMenu->SetTool( this );
78  else
79  aTrigger = CMENU_OFF;
80 
81  m_toolMgr->ScheduleContextMenu( this, aMenu, aTrigger );
82 }
TOOL_MANAGER * m_toolMgr
Definition: tool_base.h:215
void ScheduleContextMenu(TOOL_BASE *aTool, CONTEXT_MENU *aMenu, CONTEXT_MENU_TRIGGER aTrigger)
Sets behaviour of the tool's context popup menu.
void SetTool(TOOL_INTERACTIVE *aTool)
Function SetTool() Sets a tool that is the creator of the menu.
void PCB_TOOL::SetEditModules ( bool  aEnabled)
inlineinherited

Function SetEditModules()

Toggles edit module mode. When enabled, one may select parts of modules individually (graphics, pads, etc.), so they can be modified.

Parameters
aEnableddecides if the mode should be enabled.

Definition at line 92 of file pcb_tool.h.

References PCB_TOOL::m_editModules.

93  {
94  m_editModules = aEnabled;
95  }
bool m_editModules
Definition: pcb_tool.h:142
void DRAWING_TOOL::setTransitions ( )
overridevirtual

Sets up handlers for various events.

Reimplemented from PCB_TOOL.

Definition at line 1545 of file drawing_tool.cpp.

References DrawArc(), PCB_ACTIONS::drawArc, DrawCircle(), PCB_ACTIONS::drawCircle, DrawDimension(), PCB_ACTIONS::drawDimension, PCB_ACTIONS::drawGraphicPolygon, DrawGraphicPolygon(), DrawLine(), PCB_ACTIONS::drawLine, PCB_ACTIONS::drawSimilarZone, DrawSimilarZone(), DrawVia(), PCB_ACTIONS::drawVia, DrawZone(), PCB_ACTIONS::drawZone, DrawZoneCutout(), PCB_ACTIONS::drawZoneCutout, DrawZoneKeepout(), PCB_ACTIONS::drawZoneKeepout, TOOL_INTERACTIVE::Go(), PCB_ACTIONS::placeDXF, PlaceDXF(), PlaceText(), PCB_ACTIONS::placeText, PCB_ACTIONS::setAnchor, and SetAnchor().

1546 {
1560 }
static TOOL_ACTION drawLine
Activation of the drawing tool (line)
Definition: pcb_actions.h:133
int DrawCircle(const TOOL_EVENT &aEvent)
Function DrawCircle() Starts interactively drawing a circle.
static TOOL_ACTION placeDXF
Activation of the drawing tool (placing a drawing from DXF file)
Definition: pcb_actions.h:172
int DrawVia(const TOOL_EVENT &aEvent)
int DrawZone(const TOOL_EVENT &aEvent)
Function DrawZone() Starts interactively drawing a zone.
static TOOL_ACTION drawSimilarZone
Activation of the drawing tool (drawing a similar ZONE to another one)
Definition: pcb_actions.h:163
static TOOL_ACTION drawArc
Activation of the drawing tool (arc)
Definition: pcb_actions.h:142
int DrawLine(const TOOL_EVENT &aEvent)
Function DrawLine() Starts interactively drawing a line.
static TOOL_ACTION drawZoneKeepout
Activation of the drawing tool (drawing a keepout area)
Definition: pcb_actions.h:157
static TOOL_ACTION setAnchor
Activation of the drawing tool (placing the footprint anchor)
Definition: pcb_actions.h:175
void Go(int(T::*aStateFunc)(const TOOL_EVENT &), const TOOL_EVENT_LIST &aConditions=TOOL_EVENT(TC_ANY, TA_ANY))
Function Go()
static TOOL_ACTION placeText
Activation of the drawing tool (text)
Definition: pcb_actions.h:145
static TOOL_ACTION drawGraphicPolygon
Definition: pcb_actions.h:136
int PlaceDXF(const TOOL_EVENT &aEvent)
Function PlaceDXF() Places a drawing imported from a DXF file in module editor.
int PlaceText(const TOOL_EVENT &aEvent)
Function PlaceText() Displays a dialog that allows to input text and its settings and then lets the u...
static TOOL_ACTION drawDimension
Activation of the drawing tool (dimension)
Definition: pcb_actions.h:148
int DrawZoneKeepout(const TOOL_EVENT &aEvent)
Function DrawZoneKeepout() Starts interactively drawing a keepout area.
static TOOL_ACTION drawVia
Activation of the drawing tool (drawing a VIA)
Definition: pcb_actions.h:154
static TOOL_ACTION drawZoneCutout
Activation of the drawing tool (drawing a ZONE cutout)
Definition: pcb_actions.h:160
int DrawZoneCutout(const TOOL_EVENT &aEvent)
Function DrawZoneCutout() Starts interactively drawing a zone cutout area of an existing zone...
static TOOL_ACTION drawCircle
Activation of the drawing tool (circle)
Definition: pcb_actions.h:139
int SetAnchor(const TOOL_EVENT &aEvent)
Function SetAnchor() Places the footprint anchor (only in module editor).
int DrawGraphicPolygon(const TOOL_EVENT &aEvent)
int DrawSimilarZone(const TOOL_EVENT &aEvent)
Function DrawSimilarZone() Starts interactively drawing a zone with same settings as an existing zone...
int DrawArc(const TOOL_EVENT &aEvent)
Function DrawArc() Starts interactively drawing an arc.
static TOOL_ACTION drawZone
Activation of the drawing tool (drawing a ZONE)
Definition: pcb_actions.h:151
int DrawDimension(const TOOL_EVENT &aEvent)
Function DrawDimension() Starts interactively drawing a dimension.
void DRAWING_TOOL::showContextMenu ( )
private

Shows the context menu for the drawing tool This menu consists of normal UI functions (zoom, grid, etc) And any suitable global functions for the active drawing type.

OPT_TOOL_EVENT TOOL_INTERACTIVE::Wait ( const TOOL_EVENT_LIST aEventList = TOOL_EVENTTC_ANYTA_ANY ))
inherited

Function Wait()

Suspends execution of the tool until an event specified in aEventList arrives. No parameters means waiting for any event.

Definition at line 55 of file tool_interactive.cpp.

References TOOL_BASE::m_toolMgr, and TOOL_MANAGER::ScheduleWait().

Referenced by PCBNEW_CONTROL::DeleteItemCursor(), GERBVIEW_SELECTION_TOOL::disambiguationMenu(), SELECTION_TOOL::disambiguationMenu(), PCB_TOOL::doInteractiveItemPlacement(), drawArc(), DrawDimension(), MICROWAVE_TOOL::drawMicrowaveInductor(), drawSegment(), PCB_EDITOR_CONTROL::DrillOrigin(), MODULE_EDITOR_TOOLS::EnumeratePads(), PCBNEW_CONTROL::GridSetOrigin(), PCB_EDITOR_CONTROL::HighlightNetCursor(), ROUTER_TOOL::InlineDrag(), ZOOM_TOOL::Main(), PICKER_TOOL::Main(), EDIT_TOOL::Main(), GERBVIEW_SELECTION_TOOL::Main(), SELECTION_TOOL::Main(), LENGTH_TUNER_TOOL::mainLoop(), ROUTER_TOOL::mainLoop(), GERBVIEW_SELECTION_TOOL::MeasureTool(), EDIT_TOOL::MeasureTool(), POINT_EDITOR::OnSelectionChange(), ROUTER_TOOL::performDragging(), ROUTER_TOOL::performRouting(), LENGTH_TUNER_TOOL::performTuning(), EDIT_TOOL::pickCopyReferencePoint(), PlaceDXF(), PCB_EDITOR_CONTROL::PlaceModule(), PCB_EDITOR_CONTROL::PlaceTarget(), PlaceText(), runPolygonEventLoop(), GERBVIEW_SELECTION_TOOL::selectMultiple(), SELECTION_TOOL::selectMultiple(), GERBVIEW_SELECTION_TOOL::selectPoint(), SELECTION_TOOL::selectPoint(), POSITION_RELATIVE_TOOL::SelectPositionRelativeItem(), ZOOM_TOOL::selectRegion(), SetAnchor(), and PCB_EDITOR_CONTROL::ShowLocalRatsnest().

56 {
57  return m_toolMgr->ScheduleWait( this, aEventList );
58 }
TOOL_MANAGER * m_toolMgr
Definition: tool_base.h:215
OPT< TOOL_EVENT > ScheduleWait(TOOL_BASE *aTool, const TOOL_EVENT_LIST &aConditions)
Pauses execution of a given tool until one or more events matching aConditions arrives.

Friends And Related Function Documentation

friend class ZONE_CREATE_HELPER
friend

Definition at line 284 of file drawing_tool.h.

Member Data Documentation

BOARD* DRAWING_TOOL::m_board
private

Definition at line 269 of file drawing_tool.h.

Referenced by DrawDimension(), DrawVia(), getSegmentWidth(), and Reset().

KIGFX::VIEW_CONTROLS* DRAWING_TOOL::m_controls
private
unsigned int DRAWING_TOOL::m_lineWidth
private

Stores the current line width for multisegment drawing.

Definition at line 274 of file drawing_tool.h.

Referenced by DrawArc(), drawArc(), DrawCircle(), DrawDimension(), DrawLine(), and drawSegment().

TOOL_MENU DRAWING_TOOL::m_menu
private

Menu model displayed by the tool.

Definition at line 277 of file drawing_tool.h.

Referenced by drawArc(), DrawDimension(), drawSegment(), GetToolMenu(), Init(), PlaceDXF(), PlaceText(), runPolygonEventLoop(), and SetAnchor().

TOOL_ID TOOL_BASE::m_toolId
protectedinherited

Unique identifier for the tool, assigned by a TOOL_MANAGER instance.

Definition at line 210 of file tool_base.h.

Referenced by TOOL_INTERACTIVE::Activate(), TOOL_BASE::GetId(), TOOL_BASE::IsToolActive(), and EDIT_TOOL::updateModificationPoint().

TOOL_MANAGER* TOOL_BASE::m_toolMgr
protectedinherited

Definition at line 215 of file tool_base.h.

Referenced by TOOL_INTERACTIVE::Activate(), PAD_TOOL::applyPadSettings(), TOOL_BASE::attachManager(), PCB_EDITOR_CONTROL::calculateSelectionRatsnest(), GERBVIEW_SELECTION_TOOL::clearSelection(), SELECTION_TOOL::clearSelection(), PAD_TOOL::copyPadSettings(), MODULE_EDITOR_TOOLS::CreatePadFromShapes(), PCB_EDITOR_CONTROL::CrossProbePcbToSch(), PCB_EDITOR_CONTROL::CrossProbeSchToPcb(), PCBNEW_CONTROL::CursorControl(), ROUTER_TOOL::CustomTrackWidthDialog(), PCBNEW_CONTROL::DeleteItemCursor(), drawArc(), DrawDimension(), drawSegment(), drawZone(), PCB_EDITOR_CONTROL::DrillOrigin(), EDIT_TOOL::Duplicate(), EDIT_TOOL::editFootprintInFpEditor(), MODULE_EDITOR_TOOLS::EnumeratePads(), EDIT_TOOL::ExchangeFootprints(), MODULE_EDITOR_TOOLS::ExplodePadToShapes(), SELECTION_TOOL::findCallback(), SELECTION_TOOL::findMove(), EDIT_TOOL::Flip(), TOOL_BASE::getEditFrameInt(), TOOL_BASE::GetManager(), TOOL_BASE::getModelInt(), getSourceZoneForAction(), TOOL_BASE::getView(), TOOL_BASE::getViewControls(), TOOL_INTERACTIVE::goInternal(), PCBNEW_CONTROL::GridSetOrigin(), GERBVIEW_CONTROL::HighlightControl(), PCB_EDITOR_CONTROL::HighlightNet(), PCB_EDITOR_CONTROL::HighlightNetCursor(), ALIGN_DISTRIBUTE_TOOL::Init(), PAD_TOOL::Init(), POINT_EDITOR::Init(), PCB_EDITOR_CONTROL::Init(), POSITION_RELATIVE_TOOL::Init(), EDIT_TOOL::Init(), ROUTER_TOOL::InlineDrag(), EDIT_TOOL::invokeInlineRouter(), EDIT_TOOL::isInteractiveDragEnabled(), TOOL_BASE::IsToolActive(), ZOOM_TOOL::Main(), PICKER_TOOL::Main(), EDIT_TOOL::Main(), SELECTION_TOOL::Main(), LENGTH_TUNER_TOOL::mainLoop(), ROUTER_TOOL::mainLoop(), EDIT_TOOL::Mirror(), PCB_EDITOR_CONTROL::modifyLockSelected(), EDIT_TOOL::MoveExact(), POINT_EDITOR::OnSelectionChange(), EDIT_TOOL::pickCopyReferencePoint(), PCBNEW_CONTROL::placeBoardItems(), PlaceDXF(), PCB_EDITOR_CONTROL::PlaceModule(), PCB_EDITOR_CONTROL::PlaceTarget(), PlaceText(), POSITION_RELATIVE_TOOL::PositionRelative(), EDIT_TOOL::Properties(), PAD_TOOL::pushPadSettings(), POSITION_RELATIVE_TOOL::RelativeItemSelectionMove(), EDIT_TOOL::Remove(), POINT_EDITOR::removeCorner(), GERBVIEW_SELECTION_TOOL::RequestSelection(), SELECTION_TOOL::RequestSelection(), TOOL_INTERACTIVE::resetTransitions(), EDIT_TOOL::Rotate(), TOOL_INTERACTIVE::RunMainStack(), SELECTION_TOOL::SanitizeSelection(), SELECTION_TOOL::selectConnection(), SELECTION_TOOL::selectCopper(), PCB_TOOL::selection(), GERBVIEW_SELECTION_TOOL::SelectItem(), SELECTION_TOOL::SelectItem(), GERBVIEW_SELECTION_TOOL::SelectItems(), SELECTION_TOOL::SelectItems(), GERBVIEW_SELECTION_TOOL::selectMultiple(), SELECTION_TOOL::selectMultiple(), SELECTION_TOOL::selectNet(), SELECTION_TOOL::selectOnSheetFromEeschema(), POSITION_RELATIVE_TOOL::SelectPositionRelativeItem(), SELECTION_TOOL::selectSameSheet(), TOOL_INTERACTIVE::SetContextMenu(), PCB_EDITOR_CONTROL::ShowLocalRatsnest(), GERBVIEW_SELECTION_TOOL::toggleSelection(), SELECTION_TOOL::toggleSelection(), PCB_EDITOR_CONTROL::TrackWidthDec(), PCB_EDITOR_CONTROL::TrackWidthInc(), GERBVIEW_SELECTION_TOOL::UnselectItem(), SELECTION_TOOL::UnselectItem(), GERBVIEW_SELECTION_TOOL::UnselectItems(), SELECTION_TOOL::UnselectItems(), EDIT_TOOL::updateModificationPoint(), PCB_EDITOR_CONTROL::UpdateSelectionRatsnest(), PCB_EDITOR_CONTROL::ViaSizeDec(), PCB_EDITOR_CONTROL::ViaSizeInc(), TOOL_INTERACTIVE::Wait(), PCB_EDITOR_CONTROL::ZoneDuplicate(), and PCB_EDITOR_CONTROL::ZoneMerge().

std::string TOOL_BASE::m_toolName
protectedinherited

Name of the tool.

Names are expected to obey the format application.ToolName

(eg. pcbnew.InteractiveSelection).

Definition at line 214 of file tool_base.h.

Referenced by TOOL_BASE::GetName().

TOOL_SETTINGS TOOL_BASE::m_toolSettings
protectedinherited

Definition at line 216 of file tool_base.h.

Referenced by TOOL_BASE::attachManager(), and TOOL_BASE::GetSettings().

TOOL_TYPE TOOL_BASE::m_type
protectedinherited

Stores the type of the tool.

Definition at line 207 of file tool_base.h.

Referenced by TOOL_BASE::GetType().

KIGFX::VIEW* DRAWING_TOOL::m_view
private

Definition at line 267 of file drawing_tool.h.

Referenced by drawArc(), DrawDimension(), drawSegment(), PlaceDXF(), PlaceText(), and Reset().

const unsigned int DRAWING_TOOL::WIDTH_STEP = 100000
staticprivate

Definition at line 280 of file drawing_tool.h.

Referenced by drawArc(), DrawDimension(), and drawSegment().


The documentation for this class was generated from the following files: