Hi Tom, 

Was a great catch up with the developers in Spain.

Thanks for prompting me about the below email and branch. I will get this and 
look at it during this week and attempt to add the algorithm there.

Talk soon.

Regards
Stuart



⁣Get BlueMail for Android ​

On 24 July 2023, 4:40 pm, at 4:40 pm, Tomasz Wlostowski 
<tomasz.wlostow...@cern.ch> wrote:
>On 18/07/2023 20:06, Stuart Tyler wrote:
>> Hi Jon,
>> 
>> Thanks for the feedback. Yes, I agree with all your points. I started
>
>> off copying drag track but backed out of this as I got stuck
>accessing 
>> the multiple selections, but totally agree with your points.
>> 
>> I have not looked through the component dragger as yet and will visit
>
>> that over the next couple of days. I think your comparison is correct
>- 
>> I will attempt to follow its track movement and addition style - I
>now 
>> understand the algorithm and what is needed at least.
>> 
>> Appreciate the pointer to looking at component dragger.
>> 
>Hi Stuart,
>
>I encourage you to have a look at this branch: 
>https://gitlab.com/twlostow/kicad/-/commits/tom-multidrag-demo-clean
>
>It contains a very shitty multi-drag algorithm - but my intention there
>
>was not to develop one, but to show how I would see it integrated in
>the 
>router & tool stack of pcbnew. I hope you can build a decent
>multi-trace 
>dragger on top of this code.
>
>I'll be happy to answer any questions you might have, but be prepared 
>for some delay with responses.
>
>Regards,
>Tom
>
>
>
>> Regards
>> Stuart Tyler
>> 
>> 
>> 
>> Jon Evans wrote:
>> 
>> 
>>> Hi Stuart,
>>>
>>> Some general comments on this project:
>>>
>>> 1) This functionality should be built into the router, not into the 
>>> edit routines outside the router IMO.  So this should be implemented
>
>>> as part of DRAGGER probably.  If you look at how the rest of the 
>>> router works, you should be able to re-use all its functionality for
>
>>> creating and modifying items in the board.
>>>
>>> 2) The functionality you're looking for is at some level similar to 
>>> the work that is done by the PNS component dragger (since it has to
>be 
>>> able to reroute multiple different tracks), so you might get some 
>>> additional hints from that class.
>>>
>>> 3) There is no need for a new action / hotkey.  The existing actions
>
>>> should be able to handle single-track vs multi-track dragging based
>on 
>>> what the selection contains.
>>>
>>> Best,
>>> Jon
>>>
>>> On Tue, Jul 18, 2023 at 1:44 PM Stuart Tyler
><stuart.h.ty...@gmail.com 
>>> <mailto:stuart.h.ty...@gmail.com>> wrote:
>>>
>>>     Hi, I have tried to add a track, but its not appearing on the
>board.
>>>     Here is my code in my code that does the track add. Is in
>>>     edit_tool_move_fct.cpp (1259)
>>>
>>>
>>>                             printf( "*** Adding new track to board
>>>     ***\r\n" );
>>>                             std::vector<BOARD_ITEM*> bulkAddedItems;
>>>                             PCB_TRACK*  pcbTrackOfItem =
>>>     dynamic_cast<PCB_TRACK*>( item );
>>>                             auto        newTrack = new PCB_TRACK(
>>>     pcbTrackOfItem );
>>>                             BOARD_ITEM* newBoardItem =
>>>     dynamic_cast<BOARD_ITEM*>( newTrack );
>>>                             newBoardItem->SetPosition(
>>>     nearestEndLocation[itemCount] );
>>>                             dynamic_cast<PCB_TRACK*>( newBoardItem
>>>     )->SetEnd( furtherestEndLocation[itemCount] );
>>>                             board->Add( newBoardItem,
>>>     ADD_MODE::BULK_INSERT, false );
>>>                             bulkAddedItems.push_back( newBoardItem
>);
>>>                             board->FinalizeBulkAdd( bulkAddedItems
>);
>>>     .. and later
>>>                             newBoardItem->SetModified();
>>>
>>>     Can anyone spot the issue with my code and why I would not get a
>>>     track showing up?
>>>
>>>     Ta
>>>     Stuart
>>>
>>>     On Saturday, July 15, 2023 at 1:29:04 PM UTC+1 Stuart Tyler
>wrote:
>>>
>>>         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
>>>             <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
>>>     <mailto:devlist+unsubscr...@kicad.org>.
>>>     To view this discussion on the web visit
>>>    
>https://groups.google.com/a/kicad.org/d/msgid/devlist/64d0d1d5-6a24-41c4-8231-a4a721f267c7n%40kicad.org
><https://groups.google.com/a/kicad.org/d/msgid/devlist/64d0d1d5-6a24-41c4-8231-a4a721f267c7n%40kicad.org?utm_medium=email&utm_source=footer>.
>> 
>> -- 
>> 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 
>> <mailto:devlist+unsubscr...@kicad.org>.
>> To view this discussion on the web visit 
>>
>https://groups.google.com/a/kicad.org/d/msgid/devlist/4b954b95c8997.e6c27fd20fe7b%40gmail.com
><https://groups.google.com/a/kicad.org/d/msgid/devlist/4b954b95c8997.e6c27fd20fe7b%40gmail.com?utm_medium=email&utm_source=footer>.

-- 
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/00ffc215-e0ea-4312-b9e9-c327f96694e6%40gmail.com.

Reply via email to