KiCad PCB EDA Suite
Loading...
Searching...
No Matches
EC_CONVERGING Class Reference

EDIT_CONSTRAINT for polygon line dragging. More...

#include <edit_constraints.h>

Inheritance diagram for EC_CONVERGING:
EDIT_CONSTRAINT< EDIT_LINE >

Public Member Functions

 EC_CONVERGING (EDIT_LINE &aLine, EDIT_POINTS &aPoints, POLYGON_LINE_MODE aMode=POLYGON_LINE_MODE::CONVERGING)
 
virtual ~EC_CONVERGING ()
 
virtual void Apply (EDIT_LINE &aHandle, const GRID_HELPER &aGrid) override
 Correct coordinates of the constrained edit handle.
 
POLYGON_LINE_MODE GetMode () const
 Get the current constraint mode.
 
void SetMode (POLYGON_LINE_MODE aMode)
 Set the constraint mode (allows switching between converging and fixed-length)
 
const VECTOR2IGetOriginalCenter () const
 Original center of the dragged line, captured at drag start.
 
const VECTOR2IGetPerpVector () const
 Perpendicular direction of motion for the dragged line, captured at drag start.
 
void Apply (const GRID_HELPER &aGrid)
 Correct coordinates of the constrained edit handle.
 

Protected Attributes

EDIT_LINEm_constrained
 Point that is constrained by rules implemented by Apply().
 

Private Member Functions

void applyConverging (EDIT_LINE &aHandle)
 Apply converging mode: find intersections with adjacent lines.
 
void applyFixedLength (EDIT_LINE &aHandle)
 Apply fixed-length mode: maintain line length, adjust adjacent line angles.
 

Private Attributes

POLYGON_LINE_MODE m_mode
 Constraint mode.
 
std::unique_ptr< EDIT_CONSTRAINT< EDIT_POINT > > m_originSideConstraint
 Constraint for origin side segment.
 
std::unique_ptr< EDIT_CONSTRAINT< EDIT_POINT > > m_endSideConstraint
 Constraint for end side segment.
 
EDIT_CONSTRAINT< EDIT_POINT > * m_colinearConstraint
 Additional constraint, applied when at least two points are collinear.
 
EDIT_POINTSm_editPoints
 EDIT_POINTS instance that stores currently modified lines.
 
VECTOR2I m_draggedVector
 Vector that represents the initial direction of the dragged segment.
 
VECTOR2I m_originalCenter
 Original center position of the line.
 
VECTOR2I m_perpVector
 Perpendicular direction to the dragged segment (for constraining movement)
 
double m_halfLength
 Original half-length of the line (for fixed-length mode)
 
bool m_originCollinear
 Flags to indicate when dragged and neighbouring lines are (almost) collinear.
 
bool m_endCollinear
 
EDIT_POINTm_prevOrigin
 Previous and next points to keep drag endpoints fixed.
 
EDIT_POINTm_nextEnd
 
VECTOR2I m_convergencePoint
 Original convergence point of adjacent segments.
 
VECTOR2I m_midVector
 Vector from the convergence point to the mid-line point.
 

Detailed Description

EDIT_CONSTRAINT for polygon line dragging.

The line center moves perpendicular to the line itself. Two modes control what happens to the line length:

  • CONVERGING: Adjacent lines maintain angles, dragged line length changes
  • FIXED_LENGTH: Dragged line maintains length, adjacent lines adjust angles

Definition at line 252 of file edit_constraints.h.

Constructor & Destructor Documentation

◆ EC_CONVERGING()

◆ ~EC_CONVERGING()

EC_CONVERGING::~EC_CONVERGING ( )
virtual

Definition at line 198 of file edit_constraints.cpp.

Member Function Documentation

◆ Apply() [1/2]

void EC_CONVERGING::Apply ( EDIT_LINE & aHandle,
const GRID_HELPER & aGrid )
overridevirtual

◆ Apply() [2/2]

void EDIT_CONSTRAINT< EDIT_LINE >::Apply ( const GRID_HELPER & aGrid)
inlineinherited

Correct coordinates of the constrained edit handle.

Definition at line 93 of file edit_constraints.h.

◆ applyConverging()

◆ applyFixedLength()

void EC_CONVERGING::applyFixedLength ( EDIT_LINE & aHandle)
private

Apply fixed-length mode: maintain line length, adjust adjacent line angles.

Definition at line 303 of file edit_constraints.cpp.

References end, VECTOR2< T >::EuclideanNorm(), EDIT_LINE::GetEnd(), EDIT_LINE::GetOrigin(), EDIT_LINE::GetPosition(), KiROUND(), m_draggedVector, m_halfLength, and EDIT_POINT::SetPosition().

Referenced by Apply().

◆ GetMode()

POLYGON_LINE_MODE EC_CONVERGING::GetMode ( ) const
inline

Get the current constraint mode.

Definition at line 264 of file edit_constraints.h.

References m_mode.

Referenced by PCB_POINT_EDITOR::OnSelectionChange().

◆ GetOriginalCenter()

const VECTOR2I & EC_CONVERGING::GetOriginalCenter ( ) const
inline

Original center of the dragged line, captured at drag start.

Definition at line 270 of file edit_constraints.h.

References m_originalCenter.

Referenced by PCB_POINT_EDITOR::OnSelectionChange().

◆ GetPerpVector()

const VECTOR2I & EC_CONVERGING::GetPerpVector ( ) const
inline

Perpendicular direction of motion for the dragged line, captured at drag start.

Length matches the original dragged segment vector.

Definition at line 274 of file edit_constraints.h.

References m_perpVector.

Referenced by PCB_POINT_EDITOR::OnSelectionChange().

◆ SetMode()

void EC_CONVERGING::SetMode ( POLYGON_LINE_MODE aMode)
inline

Set the constraint mode (allows switching between converging and fixed-length)

Definition at line 267 of file edit_constraints.h.

References m_mode.

Referenced by PCB_POINT_EDITOR::OnSelectionChange(), and PCB_POINT_EDITOR::setAltConstraint().

Member Data Documentation

◆ m_colinearConstraint

EDIT_CONSTRAINT<EDIT_POINT>* EC_CONVERGING::m_colinearConstraint
private

Additional constraint, applied when at least two points are collinear.

It is a pointer to m_[origin/end]SideConstraint, so it should not be freed.

Definition at line 294 of file edit_constraints.h.

Referenced by applyConverging(), and EC_CONVERGING().

◆ m_constrained

EDIT_LINE& EDIT_CONSTRAINT< EDIT_LINE >::m_constrained
protectedinherited

Point that is constrained by rules implemented by Apply().

Definition at line 99 of file edit_constraints.h.

◆ m_convergencePoint

VECTOR2I EC_CONVERGING::m_convergencePoint
private

Original convergence point of adjacent segments.

Definition at line 320 of file edit_constraints.h.

Referenced by Apply(), and EC_CONVERGING().

◆ m_draggedVector

VECTOR2I EC_CONVERGING::m_draggedVector
private

Vector that represents the initial direction of the dragged segment.

Definition at line 300 of file edit_constraints.h.

Referenced by Apply(), applyConverging(), applyFixedLength(), and EC_CONVERGING().

◆ m_editPoints

EDIT_POINTS& EC_CONVERGING::m_editPoints
private

EDIT_POINTS instance that stores currently modified lines.

Definition at line 297 of file edit_constraints.h.

Referenced by applyConverging(), and EC_CONVERGING().

◆ m_endCollinear

bool EC_CONVERGING::m_endCollinear
private

Definition at line 313 of file edit_constraints.h.

Referenced by applyConverging(), and EC_CONVERGING().

◆ m_endSideConstraint

std::unique_ptr<EDIT_CONSTRAINT<EDIT_POINT> > EC_CONVERGING::m_endSideConstraint
private

Constraint for end side segment.

Definition at line 290 of file edit_constraints.h.

Referenced by applyConverging(), and EC_CONVERGING().

◆ m_halfLength

double EC_CONVERGING::m_halfLength
private

Original half-length of the line (for fixed-length mode)

Definition at line 309 of file edit_constraints.h.

Referenced by applyFixedLength(), and EC_CONVERGING().

◆ m_midVector

VECTOR2I EC_CONVERGING::m_midVector
private

Vector from the convergence point to the mid-line point.

Definition at line 323 of file edit_constraints.h.

Referenced by EC_CONVERGING().

◆ m_mode

POLYGON_LINE_MODE EC_CONVERGING::m_mode
private

Constraint mode.

Definition at line 284 of file edit_constraints.h.

Referenced by Apply(), EC_CONVERGING(), GetMode(), and SetMode().

◆ m_nextEnd

EDIT_POINT* EC_CONVERGING::m_nextEnd
private

Definition at line 317 of file edit_constraints.h.

Referenced by applyConverging(), and EC_CONVERGING().

◆ m_originalCenter

VECTOR2I EC_CONVERGING::m_originalCenter
private

Original center position of the line.

Definition at line 303 of file edit_constraints.h.

Referenced by Apply(), EC_CONVERGING(), and GetOriginalCenter().

◆ m_originCollinear

bool EC_CONVERGING::m_originCollinear
private

Flags to indicate when dragged and neighbouring lines are (almost) collinear.

Definition at line 312 of file edit_constraints.h.

Referenced by applyConverging(), and EC_CONVERGING().

◆ m_originSideConstraint

std::unique_ptr<EDIT_CONSTRAINT<EDIT_POINT> > EC_CONVERGING::m_originSideConstraint
private

Constraint for origin side segment.

Definition at line 287 of file edit_constraints.h.

Referenced by applyConverging(), and EC_CONVERGING().

◆ m_perpVector

VECTOR2I EC_CONVERGING::m_perpVector
private

Perpendicular direction to the dragged segment (for constraining movement)

Definition at line 306 of file edit_constraints.h.

Referenced by Apply(), EC_CONVERGING(), and GetPerpVector().

◆ m_prevOrigin

EDIT_POINT* EC_CONVERGING::m_prevOrigin
private

Previous and next points to keep drag endpoints fixed.

Definition at line 316 of file edit_constraints.h.

Referenced by applyConverging(), and EC_CONVERGING().


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