kicad-module-editor_s

Eagleのパーツ・ライブラリーをKiCad用に変換するスクリプトeagle2kicad-0.9b.ulpには、スルーホールの一番ピンが四角いパッドの場合、正しく変換されないというバグがある。(大きなイメージ、右側が正しく変換されたもの。赤い枠は編集で加えている。)

取りあえずの対策として、pad conversionルーティンにパッチ(赤色の一行)を当てると正しく変換されるようになる。(作者に報告済み。)

表示でインデントが無視されているのはご愛嬌。

//------------------------------------------------------
// pad conversion
//------------------------------------------------------

void write_kikad_mod_pad(UL_PACKAGE PAC)
{
char shp = 'R';
string signal, type = "STD";
int dx, dy, drill, layset;

PAC.contacts(CN)
{
// write PAD start tag
printf("$PAD\n");

signal = CN.signal;

if(CN.smd)
{
type = "SMD";

if(CN.smd.roundness > 40)
{
if(CN.smd.dx == CN.smd.dy)
shp = 'C';
else
shp = 'O';
}
dx = CN.smd.dx;
dy = CN.smd.dy;
layset = CN.smd.layer;
}

if(CN.pad)
{
dy = CN.pad.diameter[LAYER_TOP];
type = "STD";
if(CN.pad.shape[LAYER_TOP] == PAD_SHAPE_ROUND )
{
shp = 'C';
dy = CN.pad.diameter[LAYER_TOP];
}

if(CN.pad.shape[LAYER_TOP] == PAD_SHAPE_OCTAGON)
{
shp = 'C';
dy = CN.pad.diameter[LAYER_TOP] * 2;
}

if(CN.pad.shape[LAYER_TOP] == PAD_SHAPE_LONG )
{
shp = 'O';
dy = CN.pad.diameter[LAYER_TOP] * 2;
}

dx = CN.pad.diameter[LAYER_TOP];
drill = CN.pad.drill;
layset = LAYER_PADS ;
}

// pad shape
printf("Sh \"%s\" %c %d %d %d %d %d\n",
CN.name, shp, egl2ki(dx), egl2ki(dy), 0, 0, 0);

printf("Dr %d %d %d \n", egl2ki(drill), 0, 0);

printf("At %s N %08X\n", type, pad_lut[layset]);

printf("Ne 0 \"%s\"\n", signal);

printf("Po %d %d \n", egl2ki(CN.x), -egl2ki(CN.y));

// write PAD end tag
printf("$EndPAD\n");
}

}