Many circuit designs can have repeated structures. Sadly, pcbnew doesn’t have any features to make the placement and routing any more productive.
Here is a demo of a script I wrote to help:
If you have X copies of the same sheet in eeschema, the script will allow you to place and route one of them and them apply that to the other sheets.
How’s it work?
If you call GetPath() on the modules in your design, you’ll get values like these (note the the path is only the /number/number part):
mod Q1 path /587DA765/58758821 mod Q2 path /5875D13C/58758821 mod Q3 path /5875D13D/58758821 mod Q4 path /5875D13E/58758821 mod R1 path /587DA765/5875882F mod R2 path /587DA765/5875883D mod R3 path /5875D13C/5875882F mod R4 path /5875D13C/5875883D
The first number tells you which sheet instance the module belongs to. The second is an identifier for the module. So from the information above we can tell that these are all in the same sheet:
mod Q1 path /587DA765/58758821 mod R1 path /587DA765/5875882F mod R2 path /587DA765/5875883D
Similarly, we know that these are the same transistor, just in different instances of the sheet:
mod Q1 path /587DA765/58758821 mod Q2 path /5875D13C/58758821 mod Q3 path /5875D13D/58758821 mod Q4 path /5875D13E/58758821
So if I have placed and routed sheet 587DA765, the script just needs to find all of the members of 5875D13C and simply adjust their positions by some constant increment.
The script can be found here in my github repository for kicad