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

#include <board_constraint_adapter.h>

Inheritance diagram for BOARD_CONSTRAINT_DRAG_SESSION:
BOARD_CONSTRAINT_SESSION

Public Member Functions

bool Build (BOARD *aBoard, const CONSTRAINT_MEMBER &aDragged)
 
bool Matches (const CONSTRAINT_MEMBER &aDragged) const
 
bool IsExactFeasible (const VECTOR2I &aTarget)
 
SNAP_RESULT ResolveCandidates (const SNAP_SOURCE_CONTEXT &aContext, const std::vector< SNAP_CANDIDATE > &aCandidates)
 
CONSTRAINT_DIAGNOSIS Solve (const VECTOR2I &aCursor, std::vector< PCB_SHAPE * > *aModified, const std::function< void(BOARD_ITEM *)> &aBeforeModify, bool aIncludeDragged, bool aStabilize, const std::set< KIID > &aEdited={}, const std::optional< std::pair< CONSTRAINT_MEMBER, VECTOR2I > > &aCoDragged=std::nullopt)
 
bool HasBaseConflict () const
 

Protected Member Functions

bool buildCluster (BOARD *aBoard, const std::unordered_set< KIID > &aClusterShapes, const std::vector< PCB_CONSTRAINT * > &aConstraints)
 Assemble the adapter for one cluster and record its baseline.
 
void reset ()
 Drop the built cluster, leaving the session unusable until the next successful build.
 
bool usable () const
 
bool rewind ()
 Rewind to the state the next speculative solve starts from.
 
SNAP_RESULT startResult (const SNAP_SOURCE_CONTEXT &aContext) const
 Seed a snap result at the cursor, rejecting a cluster that was already broken.
 

Static Protected Member Functions

static void accept (SNAP_RESULT &aResult, const SNAP_CANDIDATE &aCandidate, double aResidual)
 Record one candidate the session honoured.
 

Protected Attributes

BOARDm_board = nullptr
 
std::unique_ptr< BOARD_CONSTRAINT_ADAPTERm_adapter
 
BOARD_CONSTRAINT_ADAPTER::SNAPSHOT m_baseline
 
bool m_baseConflict = false
 

Private Attributes

CONSTRAINT_MEMBER m_dragged
 
PCB_SHAPEm_draggedShape = nullptr
 

Detailed Description

Definition at line 427 of file board_constraint_adapter.h.

Member Function Documentation

◆ accept()

void BOARD_CONSTRAINT_SESSION::accept ( SNAP_RESULT & aResult,
const SNAP_CANDIDATE & aCandidate,
double aResidual )
staticprotectedinherited

Record one candidate the session honoured.

Only the residual and the freedom consumed belong here. SNAP_RESOLVER appends the id and the guides to whatever a feasibility callback returns, so reporting them again would draw every guide twice and enter the id in the sticky set twice.

Definition at line 2806 of file board_constraint_adapter.cpp.

References SNAP_CANDIDATE::consumedDof, SNAP_RESULT::quantizedResiduals, and SNAP_RESULT::remainingDof.

Referenced by BOARD_CONSTRAINT_DRAG_SESSION::ResolveCandidates(), and BOARD_CONSTRAINT_MOVE_SESSION::ResolveCandidates().

◆ Build()

◆ buildCluster()

bool BOARD_CONSTRAINT_SESSION::buildCluster ( BOARD * aBoard,
const std::unordered_set< KIID > & aClusterShapes,
const std::vector< PCB_CONSTRAINT * > & aConstraints )
protectedinherited

Assemble the adapter for one cluster and record its baseline.

Sets the base-conflict flag when the cluster's relations were already unsatisfied, which every solve then refuses rather than trying to repair an edit the user did not make.

Definition at line 2767 of file board_constraint_adapter.cpp.

References m_adapter, m_baseConflict, m_baseline, m_board, reset(), resolveClusterDimensions(), and resolveClusterShapes().

Referenced by BOARD_CONSTRAINT_DRAG_SESSION::Build(), and BOARD_CONSTRAINT_MOVE_SESSION::Build().

◆ HasBaseConflict()

bool BOARD_CONSTRAINT_SESSION::HasBaseConflict ( ) const
inlineinherited

Definition at line 388 of file board_constraint_adapter.h.

References m_baseConflict.

◆ IsExactFeasible()

bool BOARD_CONSTRAINT_DRAG_SESSION::IsExactFeasible ( const VECTOR2I & aTarget)

◆ Matches()

bool BOARD_CONSTRAINT_DRAG_SESSION::Matches ( const CONSTRAINT_MEMBER & aDragged) const

◆ reset()

void BOARD_CONSTRAINT_SESSION::reset ( )
protectedinherited

Drop the built cluster, leaving the session unusable until the next successful build.

Definition at line 2759 of file board_constraint_adapter.cpp.

References m_adapter, m_baseConflict, and m_baseline.

Referenced by BOARD_CONSTRAINT_DRAG_SESSION::Build(), BOARD_CONSTRAINT_MOVE_SESSION::Build(), and buildCluster().

◆ ResolveCandidates()

◆ rewind()

◆ Solve()

CONSTRAINT_DIAGNOSIS BOARD_CONSTRAINT_DRAG_SESSION::Solve ( const VECTOR2I & aCursor,
std::vector< PCB_SHAPE * > * aModified,
const std::function< void(BOARD_ITEM *)> & aBeforeModify,
bool aIncludeDragged,
bool aStabilize,
const std::set< KIID > & aEdited = {},
const std::optional< std::pair< CONSTRAINT_MEMBER, VECTOR2I > > & aCoDragged = std::nullopt )

◆ startResult()

SNAP_RESULT BOARD_CONSTRAINT_SESSION::startResult ( const SNAP_SOURCE_CONTEXT & aContext) const
protectedinherited

Seed a snap result at the cursor, rejecting a cluster that was already broken.

Definition at line 2792 of file board_constraint_adapter.cpp.

References BASE_CONFLICT, INCOMPATIBLE, m_adapter, m_baseConflict, result, and SNAP_SOURCE_CONTEXT::sourcePoint.

Referenced by BOARD_CONSTRAINT_DRAG_SESSION::ResolveCandidates(), and BOARD_CONSTRAINT_MOVE_SESSION::ResolveCandidates().

◆ usable()

bool BOARD_CONSTRAINT_SESSION::usable ( ) const
inlineprotectedinherited

Member Data Documentation

◆ m_adapter

◆ m_baseConflict

bool BOARD_CONSTRAINT_SESSION::m_baseConflict = false
protectedinherited

◆ m_baseline

BOARD_CONSTRAINT_ADAPTER::SNAPSHOT BOARD_CONSTRAINT_SESSION::m_baseline
protectedinherited

◆ m_board

BOARD* BOARD_CONSTRAINT_SESSION::m_board = nullptr
protectedinherited

◆ m_dragged

CONSTRAINT_MEMBER BOARD_CONSTRAINT_DRAG_SESSION::m_dragged
private

Definition at line 443 of file board_constraint_adapter.h.

Referenced by Build(), IsExactFeasible(), Matches(), ResolveCandidates(), and Solve().

◆ m_draggedShape

PCB_SHAPE* BOARD_CONSTRAINT_DRAG_SESSION::m_draggedShape = nullptr
private

Definition at line 444 of file board_constraint_adapter.h.

Referenced by Build(), and Solve().


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