Thanks Jon,
Yes, that worked. My original code math is now working. Thanks.
for( ITEM* item : aPrimitives.Items() )
{
++count;
BOARD_ITEM* boardItem = dynamic_cast<BOARD_ITEM*>( item->Parent() );
// FOOTPRINT* footprint = dynamic_cast<FOOTPRINT*>( item->Parent() );
PCB_TRACK* trackItem = dynamic_cast<PCB_TRACK*>( item->Parent() );
Regards
Stuart Tyler
Jon Evans wrote:
Hi Stuart,
The PNS router uses a proxy model of the board, and ITEM is the base class for 
these proxy representations. See pns_item.h
You can get back to the BOARD_ITEM using Parent(), but you may not need to; the 
geometry of tracks will be represented inside the proxy ITEMs.-Jon
On Mon, Sep 18, 2023 at 4:40 PM Stuart Tyler <stuart.h.ty...@gmail.com 
<mailto:stuart.h.ty...@gmail.com> > wrote:
My first sticking point on understanding how to transport my code:
I originally interfaced to the selected parts through selection which was 
loopable as an EDA_ITEM and could dynamic_cast to PCB_TRACK and access the 
track detail.
*** start of code snip ***
for( EDA_ITEM* item : selection )
{
++count;
BOARD_ITEM* boardItem = dynamic_cast<BOARD_ITEM*>( item );
FOOTPRINT* footprint = dynamic_cast<FOOTPRINT*>( item );
PCB_TRACK* trackItem = dynamic_cast<PCB_TRACK*>( item );
if (trackItem)
{
printf( "Item %d was able to be cast to a track start %d , %d end %d , 
%d.\r\n", count,
*** end of code snip ***
But are now passed in as class ITEM.
*** start of new code snip ***
for( ITEM* item : aPrimitives.Items() )
{
*** end of new code snip ***
I am not too sure on how to get to the PCB_TRACK class when given the ITEM 
class.
Getting to the PCB_TRACK class is important to access all the track end point 
data for the algorithm computations. Help appreciated.
Regards
Stuart Tyler
Stuart Tyler wrote:
Ok, I have spent some time looking at the branch, getting it to compile and 
understanding the multi-drag extension code. As you say this is not an 
implementation, but a demo of the integration.
I have an algorithm implementation that I want to try out.
What I think I next need to do is to port my code into the branch that you have 
provided. Are you expecting me to commit my edits into your Gitlab repo? I am 
happy to do that, just checking you want me to do that.
My main issue is my poor C++ reading and coding skills. My methods are very 
hacky and I think I have succeeded in proving the algorithm is correct, but I 
am not comfortable in implementing it correctly. I am happy for others 
proficient in C++ to correct my code.
What I spend much time on is 'How do I ....' issues - like, how do I go through 
the list of currently selected track and find the closest one to the aP? I know 
what I want to do to the selected list of tracks, just how to code that in C++ 
is tricky. What I would like to know is: Is there a C++ coder in the team that 
would like to spend some time assisting me? I am currently in Europe and happy 
to do a few evenings on knocking this over?
If there is, I am happy to work on this as a team. I use Slack or MSTeams or 
any other platform that would assist in implementing this together. If there is 
no-one available then I will continue to work away slowly on this.
My repo with edit_tools_move_fct.cpp has the core algorithm in it. I am going 
to head off and see if I can transport this code into Toms Github example code, 
and do local commits until I am told I can commit to Toms GitHub. Hopefully 
someone with decent C++ skills can help me out and assist in closing this out.
I understand that 8.00 release is near, so I will continue working local until 
I hear something from the team, and I understand if this is not soon. I will 
shout out if I work it out on my own.
Regards
Stuart Tyler
Stuart Tyler wrote:
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, at 4:40 pm, Tomasz Wlostowski <tomasz.wlostow...@cern.ch 
<mailto: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 
<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>
<mailto: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>
<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%2bunsubscr...@kicad.org>
<mailto:devlist+unsubscr...@kicad.org <mailto:devlist%2bunsubscr...@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>
 
<https://groups.google.com/a/kicad.org/d/msgid/devlist/64d0d1d5-6a24-41c4-8231-a4a721f267c7n%40kicad.org?utm_medium=email&utm_source=footer
 
<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%2bunsubscr...@kicad.org>
<mailto:devlist+unsubscr...@kicad.org <mailto:devlist%2bunsubscr...@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>
 
<https://groups.google.com/a/kicad.org/d/msgid/devlist/4b954b95c8997.e6c27fd20fe7b%40gmail.com?utm_medium=email&utm_source=footer
 
<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/cd03ceaa5b9a6.a5fc401e137db%40gmail.com.

Reply via email to