Eeschema: hover start from wire end should copy wire properties
Fixes: https://gitlab.com/kicad/code/kicad/-/issues/10128
This commit is contained in:
parent
01f0aad7c0
commit
ecb32b1fb0
|
@ -717,14 +717,14 @@ TOOL_ACTION EE_ACTIONS::addNeededJunctions( "eeschema.InteractiveDrawingLineWire
|
||||||
BITMAPS::INVALID_BITMAP, AF_ACTIVATE );
|
BITMAPS::INVALID_BITMAP, AF_ACTIVATE );
|
||||||
|
|
||||||
|
|
||||||
const DRAW_SEGMENT_EVENT_PARAMS drawWireActionParam = { LAYER_WIRE, false };
|
const DRAW_SEGMENT_EVENT_PARAMS drawWireActionParam = { LAYER_WIRE, false, nullptr };
|
||||||
TOOL_ACTION EE_ACTIONS::drawWire( "eeschema.InteractiveDrawingLineWireBus.drawWires",
|
TOOL_ACTION EE_ACTIONS::drawWire( "eeschema.InteractiveDrawingLineWireBus.drawWires",
|
||||||
AS_GLOBAL,
|
AS_GLOBAL,
|
||||||
'W', LEGACY_HK_NAME( "Begin Wire" ),
|
'W', LEGACY_HK_NAME( "Begin Wire" ),
|
||||||
_( "Add Wire" ), _( "Add a wire" ),
|
_( "Add Wire" ), _( "Add a wire" ),
|
||||||
BITMAPS::add_line, AF_ACTIVATE, (void*) &drawWireActionParam );
|
BITMAPS::add_line, AF_ACTIVATE, (void*) &drawWireActionParam );
|
||||||
|
|
||||||
const DRAW_SEGMENT_EVENT_PARAMS drawBusActionParam = { LAYER_BUS, false };
|
const DRAW_SEGMENT_EVENT_PARAMS drawBusActionParam = { LAYER_BUS, false, nullptr };
|
||||||
TOOL_ACTION EE_ACTIONS::drawBus( "eeschema.InteractiveDrawingLineWireBus.drawBuses",
|
TOOL_ACTION EE_ACTIONS::drawBus( "eeschema.InteractiveDrawingLineWireBus.drawBuses",
|
||||||
AS_GLOBAL,
|
AS_GLOBAL,
|
||||||
'B', LEGACY_HK_NAME( "Begin Bus" ),
|
'B', LEGACY_HK_NAME( "Begin Bus" ),
|
||||||
|
@ -737,7 +737,7 @@ TOOL_ACTION EE_ACTIONS::unfoldBus( "eeschema.InteractiveDrawingLineWireBus.unfol
|
||||||
_( "Unfold from Bus" ), _( "Break a wire out of a bus" ),
|
_( "Unfold from Bus" ), _( "Break a wire out of a bus" ),
|
||||||
BITMAPS::INVALID_BITMAP, AF_ACTIVATE );
|
BITMAPS::INVALID_BITMAP, AF_ACTIVATE );
|
||||||
|
|
||||||
const DRAW_SEGMENT_EVENT_PARAMS drawLinesActionParam = { LAYER_NOTES, false };
|
const DRAW_SEGMENT_EVENT_PARAMS drawLinesActionParam = { LAYER_NOTES, false, nullptr };
|
||||||
TOOL_ACTION EE_ACTIONS::drawLines( "eeschema.InteractiveDrawingLineWireBus.drawLines",
|
TOOL_ACTION EE_ACTIONS::drawLines( "eeschema.InteractiveDrawingLineWireBus.drawLines",
|
||||||
AS_GLOBAL,
|
AS_GLOBAL,
|
||||||
'I', LEGACY_HK_NAME( "Add Graphic PolyLine" ),
|
'I', LEGACY_HK_NAME( "Add Graphic PolyLine" ),
|
||||||
|
|
|
@ -420,6 +420,10 @@ int EE_SELECTION_TOOL::Main( const TOOL_EVENT& aEvent )
|
||||||
newParams->quitOnDraw = true;
|
newParams->quitOnDraw = true;
|
||||||
newEvt->SetParameter( newParams );
|
newEvt->SetParameter( newParams );
|
||||||
|
|
||||||
|
// Make it so we can copy the parameters of the line we are extending
|
||||||
|
if( collector[0]->Type() == SCH_LINE_T )
|
||||||
|
newParams->sourceSegment = static_cast<SCH_LINE*>( collector[0] );
|
||||||
|
|
||||||
getViewControls()->ForceCursorPosition( true, snappedCursorPos );
|
getViewControls()->ForceCursorPosition( true, snappedCursorPos );
|
||||||
newEvt->SetMousePosition( snappedCursorPos );
|
newEvt->SetMousePosition( snappedCursorPos );
|
||||||
newEvt->SetHasPosition( true );
|
newEvt->SetHasPosition( true );
|
||||||
|
|
|
@ -292,7 +292,7 @@ int SCH_LINE_WIRE_BUS_TOOL::DrawSegments( const TOOL_EVENT& aEvent )
|
||||||
grid.SetUseGrid( getView()->GetGAL()->GetGridSnapping() && !aEvent.DisableGridSnapping() );
|
grid.SetUseGrid( getView()->GetGAL()->GetGridSnapping() && !aEvent.DisableGridSnapping() );
|
||||||
|
|
||||||
VECTOR2D cursorPos = grid.BestSnapAnchor( aEvent.Position(), LAYER_CONNECTABLE, nullptr );
|
VECTOR2D cursorPos = grid.BestSnapAnchor( aEvent.Position(), LAYER_CONNECTABLE, nullptr );
|
||||||
startSegments( params->layer, cursorPos );
|
startSegments( params->layer, cursorPos, params->sourceSegment );
|
||||||
}
|
}
|
||||||
|
|
||||||
return doDrawSegments( tool, params->layer, params->quitOnDraw );
|
return doDrawSegments( tool, params->layer, params->quitOnDraw );
|
||||||
|
@ -792,36 +792,46 @@ int SCH_LINE_WIRE_BUS_TOOL::doDrawSegments( const std::string& aTool, int aType,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
SCH_LINE* SCH_LINE_WIRE_BUS_TOOL::startSegments( int aType, const VECTOR2D& aPos )
|
SCH_LINE* SCH_LINE_WIRE_BUS_TOOL::startSegments( int aType, const VECTOR2D& aPos,
|
||||||
|
SCH_LINE* aSegment )
|
||||||
|
{
|
||||||
|
// If a segment isn't provided to copy properties from, we need to create one
|
||||||
|
if( aSegment == nullptr )
|
||||||
{
|
{
|
||||||
SCH_LINE* segment = nullptr;
|
|
||||||
|
|
||||||
switch( aType )
|
switch( aType )
|
||||||
{
|
{
|
||||||
default: segment = new SCH_LINE( aPos, LAYER_NOTES ); break;
|
default: aSegment = new SCH_LINE( aPos, LAYER_NOTES ); break;
|
||||||
case LAYER_WIRE: segment = new SCH_LINE( aPos, LAYER_WIRE ); break;
|
case LAYER_WIRE: aSegment = new SCH_LINE( aPos, LAYER_WIRE ); break;
|
||||||
case LAYER_BUS: segment = new SCH_LINE( aPos, LAYER_BUS ); break;
|
case LAYER_BUS: aSegment = new SCH_LINE( aPos, LAYER_BUS ); break;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Give segments a parent so they find the default line/wire/bus widths
|
// Give segments a parent so they find the default line/wire/bus widths
|
||||||
segment->SetParent( &m_frame->Schematic() );
|
aSegment->SetParent( &m_frame->Schematic() );
|
||||||
segment->SetFlags( IS_NEW | IS_MOVING );
|
}
|
||||||
m_wires.push_back( segment );
|
else
|
||||||
|
{
|
||||||
|
aSegment = static_cast<SCH_LINE*>( aSegment->Duplicate() );
|
||||||
|
aSegment->SetStartPoint( (wxPoint) aPos );
|
||||||
|
}
|
||||||
|
|
||||||
m_selectionTool->AddItemToSel( segment, true /*quiet mode*/ );
|
|
||||||
|
aSegment->SetFlags( IS_NEW | IS_MOVING );
|
||||||
|
m_wires.push_back( aSegment );
|
||||||
|
|
||||||
|
m_selectionTool->AddItemToSel( aSegment, true /*quiet mode*/ );
|
||||||
|
|
||||||
// We need 2 segments to go from a given start pin to an end point when the
|
// We need 2 segments to go from a given start pin to an end point when the
|
||||||
// horizontal and vertical lines only switch is on.
|
// horizontal and vertical lines only switch is on.
|
||||||
if( m_frame->eeconfig()->m_Drawing.hv_lines_only )
|
if( m_frame->eeconfig()->m_Drawing.hv_lines_only )
|
||||||
{
|
{
|
||||||
segment = static_cast<SCH_LINE*>( segment->Duplicate() );
|
aSegment = static_cast<SCH_LINE*>( aSegment->Duplicate() );
|
||||||
segment->SetFlags( IS_NEW | IS_MOVING );
|
aSegment->SetFlags( IS_NEW | IS_MOVING );
|
||||||
m_wires.push_back( segment );
|
m_wires.push_back( aSegment );
|
||||||
|
|
||||||
m_selectionTool->AddItemToSel( segment, true /*quiet mode*/ );
|
m_selectionTool->AddItemToSel( aSegment, true /*quiet mode*/ );
|
||||||
}
|
}
|
||||||
|
|
||||||
return segment;
|
return aSegment;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -64,6 +64,7 @@ struct DRAW_SEGMENT_EVENT_PARAMS
|
||||||
{
|
{
|
||||||
SCH_LAYER_ID layer;
|
SCH_LAYER_ID layer;
|
||||||
bool quitOnDraw;
|
bool quitOnDraw;
|
||||||
|
SCH_LINE* sourceSegment;
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -95,7 +96,7 @@ public:
|
||||||
|
|
||||||
private:
|
private:
|
||||||
int doDrawSegments( const std::string& aTool, int aType, bool aQuitOnDraw );
|
int doDrawSegments( const std::string& aTool, int aType, bool aQuitOnDraw );
|
||||||
SCH_LINE* startSegments( int aType, const VECTOR2D& aPos );
|
SCH_LINE* startSegments( int aType, const VECTOR2D& aPos, SCH_LINE* aSegment = nullptr );
|
||||||
SCH_LINE* doUnfoldBus( const wxString& aNet, const VECTOR2I& aPos = VECTOR2I( 0, 0 ) );
|
SCH_LINE* doUnfoldBus( const wxString& aNet, const VECTOR2I& aPos = VECTOR2I( 0, 0 ) );
|
||||||
void finishSegments();
|
void finishSegments();
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue