Teardrops create wrong geometry on arc tracks, off-center-tracks, multiple segment tracks, etc.

Description

KiCad teardrops only work for simple cases with mild geometry, and break on e.g. arcs starting at the pad, straight lines starting off-center to the pad, spanning 2 segments at an angle etc.

This issue is not cosmetic, as teardrops help with:

  • lower chance of ripped pads when doing rework
  • less reflections with high frequencies
  • less current concentration in sharp corners on high amperage tracks
  • lower QC reject rate for IPC class III boards

image.pngimage.png

There is also this extreme example from another user, so I am not sure how to reproduce this specific case:

image.png

Steps to reproduce

  1. Create a pad
  2. Add an Arc track starting at the pad center, or a straight track off-center to the pad
  3. turn on teardrop connections in the pad settings
  4. observe

Mitigation

While working on a plugin I implemented robust, arbitrary length teardrops using the following algorithm:

  1. At the intersect of a track and the pad: model a straight line tangential to the track at the intersection point, up to the intersection of the normal to said line that passes through the track center.
  2. Define a frenet coordinate system using this intersection of the normal and the tangent ("Lotfusspunkt", does not have an English equivalent afaik) as (0,0), with the pad center located at (0, signed distance to Lotfusspunkt) and the pad rotated by the angle difference between the pad and the tangent
  3. create some form of teardrop between the pad and a straight track extending horizontally in frenet space (I used tangents to the middle of the length of the track, then fillet them maximally)
  4. Discretise the teardrop and transform coordinates to world coordinates

Results as compared to KiCad default behaviour can be seen:

image.pngimage.pngimage.png

KiCad Version

Application: KiCad x86_64 on x86_64

Version: 10.0.0-rc1.1-577-ge536f808a7, release build

Libraries:
	wxWidgets 3.2.8 
	FreeType 2.14.1
	HarfBuzz 12.3.2
	FontConfig 2.17.1
	libcurl/8.7.1 (SecureTransport) LibreSSL/3.3.6 zlib/1.2.12 nghttp2/1.68.0

Platform: macOS Version 26.3 (Build 25D125), 64 bit, Little endian, wxMac
OpenGL: ATI Technologies Inc., AMD Radeon Pro 5300M OpenGL Engine, 2.1 ATI-7.1.6

Build Info:
	Date: Mar  1 2026 00:18:33
	wxWidgets: 3.2.8 (wchar_t,wx containers)
	Boost: 1.90.0
	OCC: 7.9.3
	Curl: 8.7.1
	ngspice: 45.2
	Compiler: Clang 17.0.0 with C++ ABI 1002
	KICAD_IPC_API=ON
	KICAD_USE_PCH=OFF