|
KiCad PCB EDA Suite
|
One editing session over a constraint cluster. More...
#include <board_constraint_adapter.h>
Public Member Functions | |
| 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 | |
| BOARD * | m_board = nullptr |
| std::unique_ptr< BOARD_CONSTRAINT_ADAPTER > | m_adapter |
| BOARD_CONSTRAINT_ADAPTER::SNAPSHOT | m_baseline |
| bool | m_baseConflict = false |
One editing session over a constraint cluster.
The session owns the cluster's adapter plus the baseline it rewinds to. Speculative solves always run from the baseline and restore it, so the board changes only when the caller applies a result. Subclasses differ in what they drag and how they judge a candidate; everything about owning and rewinding the cluster is here.
Definition at line 385 of file board_constraint_adapter.h.
|
staticprotected |
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().
|
protected |
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().
|
inline |
Definition at line 388 of file board_constraint_adapter.h.
References m_baseConflict.
|
protected |
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().
|
inlineprotected |
Rewind to the state the next speculative solve starts from.
Definition at line 406 of file board_constraint_adapter.h.
References m_adapter, and m_baseline.
Referenced by BOARD_CONSTRAINT_MOVE_SESSION::feasibleAt(), BOARD_CONSTRAINT_DRAG_SESSION::IsExactFeasible(), BOARD_CONSTRAINT_DRAG_SESSION::ResolveCandidates(), BOARD_CONSTRAINT_MOVE_SESSION::ResolveCandidates(), BOARD_CONSTRAINT_DRAG_SESSION::Solve(), and BOARD_CONSTRAINT_MOVE_SESSION::Solve().
|
protected |
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().
|
inlineprotected |
Definition at line 403 of file board_constraint_adapter.h.
References m_adapter, and m_baseConflict.
Referenced by BOARD_CONSTRAINT_MOVE_SESSION::feasibleAt(), BOARD_CONSTRAINT_DRAG_SESSION::IsExactFeasible(), and BOARD_CONSTRAINT_MOVE_SESSION::Solve().
|
protected |
Definition at line 421 of file board_constraint_adapter.h.
Referenced by buildCluster(), BOARD_CONSTRAINT_MOVE_SESSION::feasibleAt(), BOARD_CONSTRAINT_DRAG_SESSION::IsExactFeasible(), BOARD_CONSTRAINT_DRAG_SESSION::Matches(), reset(), BOARD_CONSTRAINT_DRAG_SESSION::ResolveCandidates(), BOARD_CONSTRAINT_MOVE_SESSION::ResolveCandidates(), rewind(), BOARD_CONSTRAINT_DRAG_SESSION::Solve(), BOARD_CONSTRAINT_MOVE_SESSION::Solve(), startResult(), and usable().
|
protected |
Definition at line 423 of file board_constraint_adapter.h.
Referenced by buildCluster(), HasBaseConflict(), reset(), BOARD_CONSTRAINT_DRAG_SESSION::Solve(), startResult(), and usable().
|
protected |
Definition at line 422 of file board_constraint_adapter.h.
Referenced by buildCluster(), reset(), rewind(), and BOARD_CONSTRAINT_DRAG_SESSION::Solve().
|
protected |
Definition at line 420 of file board_constraint_adapter.h.
Referenced by BOARD_CONSTRAINT_DRAG_SESSION::Build(), and buildCluster().