KiCad PCB EDA Suite
edit_tool.cpp File Reference
#include <advanced_config.h>
#include <limits>
#include <board.h>
#include <board_design_settings.h>
#include <footprint.h>
#include <fp_shape.h>
#include <fp_textbox.h>
#include <pcb_group.h>
#include <pcb_target.h>
#include <pcb_text.h>
#include <pcb_textbox.h>
#include <collectors.h>
#include <pcb_edit_frame.h>
#include <drawing_sheet/ds_proxy_view_item.h>
#include <kiway.h>
#include <array_creator.h>
#include <status_popup.h>
#include <tool/selection_conditions.h>
#include <tool/tool_manager.h>
#include <tools/pcb_actions.h>
#include <tools/pcb_selection_tool.h>
#include <tools/edit_tool.h>
#include <tools/pcb_picker_tool.h>
#include <tools/tool_event_utils.h>
#include <tools/pcb_grid_helper.h>
#include <tools/pad_tool.h>
#include <view/view_controls.h>
#include <connectivity/connectivity_algo.h>
#include <connectivity/connectivity_items.h>
#include <core/kicad_algo.h>
#include <bitmaps.h>
#include <cassert>
#include <functional>
#include "kicad_clipboard.h"
#include <wx/hyperlink.h>
#include <router/router_tool.h>
#include <dialogs/dialog_move_exact.h>
#include <dialogs/dialog_track_via_properties.h>
#include <dialogs/dialog_unit_entry.h>
#include <board_commit.h>
#include <zone_filler.h>
#include <pcb_bitmap.h>

Go to the source code of this file.

Functions

static VECTOR2I mirrorPointX (const VECTOR2I &aPoint, const VECTOR2I &aMirrorPoint)
 Mirror a point about the vertical axis passing through another point. More...
 
static VECTOR2I mirrorPointY (const VECTOR2I &aPoint, const VECTOR2I &aMirrorPoint)
 Mirror a point about the vertical axis passing through another point. More...
 
static void mirrorPadX (PAD &aPad, const VECTOR2I &aMirrorPoint)
 Mirror a pad in the vertical axis passing through a point (mirror left to right). More...
 
static void mirrorPadY (PAD &aPad, const VECTOR2I &aMirrorPoint)
 Mirror a pad in the vertical axis passing through a point (mirror left to right). More...
 

Function Documentation

◆ mirrorPadX()

static void mirrorPadX ( PAD aPad,
const VECTOR2I aMirrorPoint 
)
static

Mirror a pad in the vertical axis passing through a point (mirror left to right).

Definition at line 1555 of file edit_tool.cpp.

1556{
1557 if( aPad.GetShape() == PAD_SHAPE::CUSTOM )
1558 aPad.FlipPrimitives( true ); // mirror primitives left to right
1559
1560 VECTOR2I tmpPt = mirrorPointX( aPad.GetPosition(), aMirrorPoint );
1561 aPad.SetPosition( tmpPt );
1562
1563 aPad.SetX0( aPad.GetPosition().x );
1564
1565 tmpPt = aPad.GetOffset();
1566 tmpPt.x = -tmpPt.x;
1567 aPad.SetOffset( tmpPt );
1568
1569 auto tmpz = aPad.GetDelta();
1570 tmpz.x = -tmpz.x;
1571 aPad.SetDelta( tmpz );
1572
1573 aPad.SetOrientation( -aPad.GetOrientation() );
1574}
void SetX0(int x)
Definition: pad.h:255
void FlipPrimitives(bool aFlipLeftRight)
Flip (mirror) the primitives left to right or top to bottom, around the anchor position in custom pad...
Definition: pad.cpp:761
VECTOR2I GetPosition() const override
Definition: pad.h:203
void SetOffset(const VECTOR2I &aOffset)
Definition: pad.h:274
const VECTOR2I & GetOffset() const
Definition: pad.h:275
void SetDelta(const VECTOR2I &aSize)
Definition: pad.h:264
void SetPosition(const VECTOR2I &aPos) override
Definition: pad.h:197
const VECTOR2I & GetDelta() const
Definition: pad.h:265
PAD_SHAPE GetShape() const
Definition: pad.h:195
EDA_ANGLE GetOrientation() const
Return the rotation angle of the pad.
Definition: pad.h:371
void SetOrientation(const EDA_ANGLE &aAngle)
Set the rotation angle of the pad.
Definition: pad.cpp:694
static VECTOR2I mirrorPointX(const VECTOR2I &aPoint, const VECTOR2I &aMirrorPoint)
Mirror a point about the vertical axis passing through another point.
Definition: edit_tool.cpp:1525

References CUSTOM, PAD::FlipPrimitives(), PAD::GetDelta(), PAD::GetOffset(), PAD::GetOrientation(), PAD::GetPosition(), PAD::GetShape(), mirrorPointX(), PAD::SetDelta(), PAD::SetOffset(), PAD::SetOrientation(), PAD::SetPosition(), PAD::SetX0(), and VECTOR2< T >::x.

Referenced by EDIT_TOOL::Mirror().

◆ mirrorPadY()

static void mirrorPadY ( PAD aPad,
const VECTOR2I aMirrorPoint 
)
static

Mirror a pad in the vertical axis passing through a point (mirror left to right).

Definition at line 1580 of file edit_tool.cpp.

1581{
1582 if( aPad.GetShape() == PAD_SHAPE::CUSTOM )
1583 aPad.FlipPrimitives( false ); // mirror primitives top to bottom
1584
1585 VECTOR2I tmpPt = mirrorPointY( aPad.GetPosition(), aMirrorPoint );
1586 aPad.SetPosition( tmpPt );
1587
1588 aPad.SetY0( aPad.GetPosition().y );
1589
1590 tmpPt = aPad.GetOffset();
1591 tmpPt.y = -tmpPt.y;
1592 aPad.SetOffset( tmpPt );
1593
1594 auto tmpz = aPad.GetDelta();
1595 tmpz.y = -tmpz.y;
1596 aPad.SetDelta( tmpz );
1597
1598 aPad.SetOrientation( -aPad.GetOrientation() );
1599}
void SetY0(int y)
Definition: pad.h:254
static VECTOR2I mirrorPointY(const VECTOR2I &aPoint, const VECTOR2I &aMirrorPoint)
Mirror a point about the vertical axis passing through another point.
Definition: edit_tool.cpp:1540

References CUSTOM, PAD::FlipPrimitives(), PAD::GetDelta(), PAD::GetOffset(), PAD::GetOrientation(), PAD::GetPosition(), PAD::GetShape(), mirrorPointY(), PAD::SetDelta(), PAD::SetOffset(), PAD::SetOrientation(), PAD::SetPosition(), PAD::SetY0(), and VECTOR2< T >::y.

Referenced by EDIT_TOOL::Mirror().

◆ mirrorPointX()

static VECTOR2I mirrorPointX ( const VECTOR2I aPoint,
const VECTOR2I aMirrorPoint 
)
static

Mirror a point about the vertical axis passing through another point.

Definition at line 1525 of file edit_tool.cpp.

1526{
1527 VECTOR2I mirrored = aPoint;
1528
1529 mirrored.x -= aMirrorPoint.x;
1530 mirrored.x = -mirrored.x;
1531 mirrored.x += aMirrorPoint.x;
1532
1533 return mirrored;
1534}

References VECTOR2< T >::x.

Referenced by mirrorPadX().

◆ mirrorPointY()

static VECTOR2I mirrorPointY ( const VECTOR2I aPoint,
const VECTOR2I aMirrorPoint 
)
static

Mirror a point about the vertical axis passing through another point.

Definition at line 1540 of file edit_tool.cpp.

1541{
1542 VECTOR2I mirrored = aPoint;
1543
1544 mirrored.y -= aMirrorPoint.y;
1545 mirrored.y = -mirrored.y;
1546 mirrored.y += aMirrorPoint.y;
1547
1548 return mirrored;
1549}

References VECTOR2< T >::y.

Referenced by mirrorPadY().