switch track posture not always work

Bug #1518694 reported by michalstec on 2015-11-22
44
This bug affects 8 people
Affects Status Importance Assigned to Milestone
KiCad
Medium
Tomasz Wlostowski

Bug Description

The track posture can't be changed with '/' when track is between via and pad. I attach a video that shows the problem - After I place the via I'm hitting '/' but I can change the track posture only when track is not over the target pad.
The issue exists in opengl, not in legacy.

Application: kicad
Version: 0.201511192131+6326~38~ubuntu14.04.1-stable release build
wxWidgets: Version 3.0.2 (debug,wchar_t,compiler with C++ ABI 1002,GCC 4.8.4,wx containers,compatible with 2.8)
Platform: Linux 3.19.0-33-generic x86_64, 64 bit, Little endian, wxGTK
Boost version: 1.54.0
         USE_WX_GRAPHICS_CONTEXT=OFF
         USE_WX_OVERLAY=OFF
         KICAD_SCRIPTING=ON
         KICAD_SCRIPTING_MODULES=ON
         KICAD_SCRIPTING_WXPYTHON=ON
         USE_FP_LIB_TABLE=HARD_CODED_ON
         BUILD_GITHUB_PLUGIN=ON

michalstec (nnn4000) wrote :
Nick Østergaard (nickoe) wrote :

I just tried to replicate this, but I don't think it is the via that makes it happen. I can't switch posture when I am on an end pad.

tags: added: cern pns
Matthew Arceri (striker121) wrote :

Still an issue in 4.0.5. It seems to be an issue with walk-around and shove mode that causes the posture setting to be ignored when connected a track to a pad. Definitely makes layout a pain to keep clean since I get all sorts of bad angles from it.

Chris Pavlina (pavlina-chris) wrote :

Still an issue with master too.

Changed in kicad:
status: New → Confirmed
Jeff Young (jeyjey) on 2018-02-17
Changed in kicad:
importance: Undecided → Medium
John Beard (john-j-beard) wrote :

Looking at the trace (export WXTRACE="PNS") from the PNS, there is a difference in what you see when "flipping" with a "free" head not on a pad, and on a pad.

The first two trace lines, are in my build only, at each end of LINE_PLACER::FlipPosture().

# Ending at pad

15:05:55: Trace: (PNS) Flipping direction: INIT_DIR north-east, DIR south-west
15:05:55: Trace: (PNS) Flipped direction: INIT_DIR east, DIR west
15:05:55: Trace: (PNS) solid, layer : 0, tl: 0
15:05:55: Trace: (PNS) solid, layer : 0
15:05:55: Trace: (PNS) NODE::delete 0x5624df24fa00
15:05:55: Trace: (PNS) INIT-DIR: east head: 1, tail: 1 segs
15:05:55: Trace: (PNS) Merge failed: not enough head segs.
15:05:55: Trace: (PNS) NODE::create 0x5624df24eb50
15:05:55: Trace: (PNS) NODE::branch 0x5624df24eb50 (parent 0x5624df0a22d0)
15:05:55: Trace: (PNS) 0 items, 0 joints, 0 overrides
15:05:55: Trace: (PNS) total segs removed: 0/1
15:05:55: Trace: (PNS) total segs removed: 0/1
15:05:55: Trace: (PNS) NODE::create 0x5624df24e2a0
15:05:55: Trace: (PNS) NODE::branch 0x5624df24e2a0 (parent 0x5624df24eb50)
15:05:55: Trace: (PNS) 0 items, 3 joints, 0 overrides
15:05:55: Trace: (PNS) NODE::delete 0x5624df24e2a0
15:05:55: Trace: (PNS) DisplayItem 0x5624dea88498

# No ending at pad

15:05:04: Trace: (PNS) Flipping direction: INIT_DIR west, DIR west
15:05:04: Trace: (PNS) Flipped direction: INIT_DIR north-west, DIR north-west
15:05:04: Trace: (PNS) NODE::delete 0x5624df09ee00
15:05:04: Trace: (PNS) INIT-DIR: north-west head: 2, tail: 0 segs
15:05:04: Trace: (PNS) Merge failed: not enough head segs.
15:05:04: Trace: (PNS) NODE::create 0x5624df09ee00
15:05:04: Trace: (PNS) NODE::branch 0x5624df09ee00 (parent 0x5624df244eb0)
15:05:04: Trace: (PNS) 0 items, 0 joints, 0 overrides
15:05:04: Trace: (PNS) NODE::create 0x5624df244cc0
15:05:04: Trace: (PNS) NODE::branch 0x5624df244cc0 (parent 0x5624df09ee00)
15:05:04: Trace: (PNS) 0 items, 0 joints, 0 overrides
15:05:04: Trace: (PNS) NODE::delete 0x5624df244cc0
15:05:04: Trace: (PNS) DisplayItem 0x5624dea88498

I assume the primary difference here is the difference between these two lines:

15:05:55: Trace: (PNS) INIT-DIR: east head: 1, tail: 1 segs
15:05:04: Trace: (PNS) INIT-DIR: north-west head: 2, tail: 0 segs

John Beard (john-j-beard) wrote :

To expand on the last comment, the problem is that when there's an end item, it looks like the line placer has 1 "head" segment and 1 tail segment. This means the posture can't do anything as it can't move the head.

When routing "freely" (i.e. not to a pad) there are 0 head segments and 2 tail segments and the posture can effect a change in the tail.

John Beard (john-j-beard) wrote :

The "fixing" of the head segment when routing to a pad actually causes another defect: when you retreat from the pad, the fixed segment is retained and you can get a kink in the trace when you would otherwise expect to a straighter routing.

For example the attached video.

John Beard (john-j-beard) wrote :

MB: in the last comments, head and tail are reversed: in LINE_PLACER, the tail is the "fixed" part of the route and the "head" is the free part. Sorry to confuse!

Changed in kicad:
milestone: none → 5.0.0-rc3
Maciej Suminski (orsonmmz) wrote :

Tom he said fixing this issue most likely means significant changes in the optimizer, hence postponed to v6.

Changed in kicad:
milestone: 5.0.0-rc3 → 6.0.0-rc1
Changed in kicad:
assignee: nobody → Tomasz Wlostowski (twlostow)
status: Confirmed → Triaged
John Beard (john-j-beard) wrote :

Note: this can be worked around: when the "optimise pad connection" option is off, the "/" hotkey starts working again.

To post a comment you must log in.
This report contains Public information  Edit
Everyone can see this information.

Other bug subscribers