Попалась в руки интересная библиотека компонентов для KiCAD эдак под 500 файлов. 3D-модели делал другой человек, причем, по всей видимости, не обремененный пряморукостью, в следствие чего центры моделей и футпринтов сильно в разных местах, так еще и под прямым углом. Ну не беда, поправим kicad_mod фалы, подумал я. Угол-то поменять фигня вопрос, всемогущий sed прожевал полтонны файлов за долю секунды и угол поправил. А вот как переякорить центр футпринта возник вопрос. Дело в том, что это делается путем задания координат падов относительно условно принятого центра. В файлах библиотеки условный ноль приходится на первый пад, а надо чтобы пады были симметрично расположены относительно X и Y. Для простоты примера можно взять футпринт под стандартную двухрядную PLD-полоску например. Нужно переместить условный ноль с первого пада в центр симметрии футпринта. Ясно что perl и sed мне в помощь, но как пересчитать координаты падов для произвольного числа падов и количества рядов? Для понимания вопроса, возьмем в качестве примера этот файлик,
(module Pin_Socket_Straight_2x02_Pitch2.00mm (layer F.Cu) (tedit 59E18A98)
(descr "Through hole pin stricke, 2x02, 2.00mm pitch, double row")
(tags "pin stricke double row")
(fp_text reference REF** (at -0.9906 -6.016) (layer F.SilkS)
(effects (font (size 1 1) (thickness 0.15)))
)
(fp_text value Pin_Socket_Straight_2x02_Pitch2.00mm (at -0.9906 -4.016) (layer F.Fab)
(effects (font (size 1 1) (thickness 0.15)))
)
(fp_line (start -1.9906 -0.016) (end 0.0094 -0.016) (layer F.SilkS) (width 0.15))
(fp_line (start 0.0094 -0.016) (end 0.0094 -2.016) (layer F.SilkS) (width 0.15))
(fp_line (start 0.0094 -2.016) (end 2.0094 -2.016) (layer F.SilkS) (width 0.15))
(fp_line (start 2.0094 -2.016) (end 2.0094 -0.016) (layer F.SilkS) (width 0.15))
(fp_line (start 2.0094 -0.016) (end 2.0094 1.984) (layer F.SilkS) (width 0.15))
(fp_line (start 2.0094 1.984) (end -1.9906 1.984) (layer F.SilkS) (width 0.15))
(fp_line (start -1.9906 1.984) (end -1.9906 -0.016) (layer F.SilkS) (width 0.15))
(fp_line (start -2.5906 -2.616) (end 2.6094 -2.616) (layer F.CrtYd) (width 0.05))
(fp_line (start 2.6094 -2.616) (end 2.6094 2.584) (layer F.CrtYd) (width 0.05))
(fp_line (start 2.6094 2.584) (end -2.5906 2.584) (layer F.CrtYd) (width 0.05))
(fp_line (start -2.5906 2.584) (end -2.5906 -2.616) (layer F.CrtYd) (width 0.05))
(fp_line (start -2.4906 -1.016) (end -2.4906 -2.516) (layer F.SilkS) (width 0.15))
(fp_line (start -2.4906 -2.516) (end -0.9906 -2.516) (layer F.SilkS) (width 0.15))
(pad 1 thru_hole rect (at -0.9906 -1.016) (size 1.4 1.4) (drill 0.7) (layers *.Cu *.Mask))
(pad 3 thru_hole circle (at -0.9906 0.984) (size 1.4 1.4) (drill 0.7) (layers *.Cu *.Mask))
(pad 2 thru_hole circle (at 1.0094 -1.016) (size 1.4 1.4) (drill 0.7) (layers *.Cu *.Mask))
(pad 4 thru_hole circle (at 1.0094 0.984) (size 1.4 1.4) (drill 0.7) (layers *.Cu *.Mask))
(model Pin_Sockets.3dshapes/Pin_Socket_Straight_2x02_Pitch2.00mm.wrl
(at (xyz 0 0 0))
(scale (xyz 1 1 1))
(rotate (xyz 0 0 90))
)
)