I have updated the code and I think the geometry manipulation is now close. Please note the move multiple tracks key press that I have coded up is Alt-M, not Ctrl-M. Just need some help on adding tracks to a pcb so that the solution can be fully visualised. There are probably a few other corner cases that need handling yet, but its probably useable once the track adds are fixed.
Ta Stuart On Saturday, July 15, 2023 at 12:22:49 AM UTC+1 Stuart Tyler wrote: > Hi, > I have been busy extending pcbnew to include multiple track dragging > functionality. I have made some reasonable progress in getting to > understanding the problem and learning new stuff in c++ since I last used > it, and lots of KiCad internals, and fun geometry. > > Anyway my code is a mess, but my first objective was to understand the > geometry, which I have partly sorted out, and there are many corner cases > still to resolve. My major issue is that the > method EDIT_TOOL::doEndMoveTracksSelection() that does all the work needs > to make/break some track and push these back to the pcb. > > I have been through the code several times and a bit confused on how to do > this at all. I have looked at other pcb tools and get mixed up in various > methods at the low level LINE_PLACER, and then how to get this into the pcb > through BOARD. > > So in my fork of KiCad (https://gitlab.com/stuarttyler/kicad), branch > MultiTrackEndMove, I have modified edit_tool_move_fct.cpp and lines > 1244/1312/1332 the existing track is stolen to see an output. This should > not happen and new tracks should be formed. > > EDIT_TOOL::doEndMoveTracksSelection() started out as a copy of > EDIT_TOOL::doMoveSelection() > > This was good as it showed me how to handle multiple selections. But it > does not do any track additions, so I cannot seem to work that part out. > > Is this the best way to share my request? By posting a link to my fork and > point to my code? > > Currently I have added a new menu item and key press ctrl-M. When there > are multiple traces selected, the ends closest to the cursor all move in > the direction commanded. There are a few bugs still to resolve, but I think > Im about 60% there with the major 3 situations identified. There are a > number of fold back situations that need sorting out. > > First of all I need help on adding/breaking a trace inside > EDIT_TOOL::doEndMoveTracksSelection() > > In summary: > sel_items is a vector of BOARD_ITEM* > std::vector<BOARD_ITEM*> sel_items; > > item get picked out using a cpp for loop to EDA_ITEM* > for( EDA_ITEM* item : sel_items ) > > I have worked out how to modify the PCB_TRACK start and end locations > dynamic_cast<PCB_TRACK*>( item )->SetEnd( myNewEndLocation ); > > But I cannot work out how to break this track into 2, or add a new track > to the board. > > What I think I want to do is to make a new BOARD_ITEM or EDA_ITEM but I am > obviously missing something on PCB_TRACK manipulation and EDIT_TOOL. > > Please help. > > Thanks Stuart > > PS - I know my code is very messy and horrible. I am currently just > getting to terms with all the new geometry and method/functions/internals. > > PSS - I plan on having something more sensible/presentable in a few weeks. > -- You received this message because you are subscribed to the Google Groups "KiCad Developers" group. To unsubscribe from this group and stop receiving emails from it, send an email to devlist+unsubscr...@kicad.org. To view this discussion on the web visit https://groups.google.com/a/kicad.org/d/msgid/devlist/671e069f-7295-4d7b-b4bb-0a32d6abb86en%40kicad.org.