When you press a key on the Canon P170-DH keypad, it presses a conductive rubber "pill" against a pattern of exposed tracks on the PC board, shorting the tracks together. Here's a link to a good description of how this works. This is what that looks like on the original Canon PCB:
At first I thought I'd duplicate the original pattern, but didn't have a clue how to do that with KiCad. Several forum members offered their help, making use of various tools to turn the photograph I'd posted into usable footprints. Unfortunately it's reported that KiCad v5 gets upset if you try to put unusual things on copper layers. In the end I decided to go with the more common interleaved copper tracks model.
KiCad has Python scripting support, which makes it very powerful (if you know how to use it). In one of the forum discussions a commenter offered a script that automatically generated such footprints constructed of a series of SMD pads. It took a bit of editing to get the script to run under v5 (it was written for v4), but it produced what looked like a good footprint. However, the result was 80 individual pads that the DRC reported as unconnected even though they overlapped. Multiply that by 37 keys and that's a lot of warnings to ignore, or a lot of extra hand routing.
Fortunately KiCad v5 has a new feature that allows arbitrarily-shaped pads. After spending a few hours figuring out how to use it, I wrote a short C program to calculate and print the coordinates needed to enter the custom pad
shape by hand. After creating the custom pad I placed one at (-3,0) mm, the 9 o'clock position. I then placed a second at
(+3,0) mm, the 3 o'clock position, rotating it 180 degrees so it meshed
with the first. Here's the result:
Of course this whole process should be automated. I'm in the process of updating my C program so it calculates both haves in preparation for turning it into a Python plug-in for KiCad v5. There are only really two problems with this: I've never worked in Python, and I haven't found any documentation on the KiCad plug-in interface. That'll add a few days to the process.