162 lines
4.7 KiB
PHP
162 lines
4.7 KiB
PHP
<?php
|
|
|
|
// generate lines
|
|
// ================================================================================================
|
|
for ($i=0; $i<20; $i++)
|
|
$LAYER[$i] = array();
|
|
|
|
for($i=1; $i<$pcb->HDR['net_points_count']['v']; $i++)
|
|
{
|
|
$flags1 = hex($pcb->NETPOI[$i]['flags']['v']);
|
|
$flags1_layer = substr($flags1, 0, 1); // 0-bot, 1-top
|
|
$flags1_head = substr($flags1, 1, 1); // 0-start line, 1-continue, 6,7 via
|
|
$net1 = $pcb->NETPOI[$i]['net_id']['v'];
|
|
$x1 = $pcb->NETPOI[$i]['pos_x']['v'];
|
|
$y1 = $pcb->NETPOI[$i]['pos_y']['v'];
|
|
$size = $pcb->NETPOI[$i]['size']['v'];
|
|
|
|
|
|
$flags2 = hex($pcb->NETPOI[($i+1)]['flags']['v']);
|
|
$flags2_layer = substr($flags2, 0, 1); // 0-bot, 1-top
|
|
$flags2_head = substr($flags2, 1, 1); // 0-start line, 1-continue, 6,7 via
|
|
$net2 = $pcb->NETPOI[($i+1)]['net_id']['v'];
|
|
$x2 = $pcb->NETPOI[($i+1)]['pos_x']['v'];
|
|
$y2 = $pcb->NETPOI[($i+1)]['pos_y']['v'];
|
|
|
|
if ($net1 != $net2) continue; // next point is from other net
|
|
if ($flags2_head == 0) continue; // next point is start
|
|
if ($flags2_head == 8) continue; // next point is start
|
|
if ($flags2_layer != $flags1_layer) continue; // next point at another layer, via is here
|
|
if (($flags1_layer == $flags2_layer) and ($flags2_head == 6)) continue;
|
|
|
|
|
|
|
|
//if ($net1 != 16521) continue; // ISA RES
|
|
//if ($net1 != 78) continue; // GND
|
|
//if ($net1 != 90) continue; // VCC
|
|
//if ($net1 != 66) continue; // VCC
|
|
|
|
|
|
|
|
$line['id1'] = $i;
|
|
$line['x1'] = $x1;
|
|
$line['y1'] = $y1;
|
|
$line['id2'] = $i+1;
|
|
$line['x2'] = $x2;
|
|
$line['y2'] = $y2;
|
|
$line['net'] = getNetByPadOfs($pcb, $net1);
|
|
$line['size'] = $size;
|
|
|
|
$LAYER[$flags1_layer][] = $line;
|
|
}
|
|
|
|
for($i=1; $i<$pcb->HDR['brd_points_count']['v']; $i++)
|
|
{
|
|
$flags1 = hex($pcb->BRDPOI[$i]['flags']['v']);
|
|
$flags1_head = substr($flags1, 1, 1); // 0-start line, 1-continue, 6,7 via
|
|
$x1 = $pcb->BRDPOI[$i]['pos_x']['v'];
|
|
$y1 = $pcb->BRDPOI[$i]['pos_y']['v'];
|
|
|
|
$flags2 = hex($pcb->BRDPOI[($i+1)]['flags']['v']);
|
|
$flags2_head = substr($flags2, 1, 1); // 0-start line, 1-continue, 6,7 via
|
|
$x2 = $pcb->BRDPOI[($i+1)]['pos_x']['v'];
|
|
$y2 = $pcb->BRDPOI[($i+1)]['pos_y']['v'];
|
|
|
|
if ($flags2_head == 0) continue; // next point is start
|
|
|
|
$line['x1'] = $x1;
|
|
$line['y1'] = $y1;
|
|
$line['x2'] = $x2;
|
|
$line['y2'] = $y2;
|
|
$line['size'] = "8";
|
|
|
|
$LAYER[3][] = $line;
|
|
}
|
|
|
|
function createLayerContent($pcb, $LAYER, $orcad_layer)
|
|
{
|
|
$pcad_pcb = "";
|
|
for($i=1; $i<sizeof($LAYER[$orcad_layer]); $i++) // 1 - orcad top
|
|
{
|
|
$line = $LAYER[$orcad_layer][$i];
|
|
$x1 = $line['x1'];
|
|
$y1 = $line['y1'];
|
|
$x2 = $line['x2'];
|
|
$y2 = $line['y2'];
|
|
$size = $line['size'];
|
|
|
|
$net = $line['net'];
|
|
$netref = "";
|
|
if ($net)
|
|
$netref="(netNameRef \"$net\") ";
|
|
|
|
$pcad_pcb .= " (line (pt $y1 $x1) (pt $y2 $x2) (width $size) $netref)";
|
|
// $pcad_pcb .= " ;; [".$line['id1']."]-[".$line['id2']."]";
|
|
$pcad_pcb .= "\r\n";
|
|
}
|
|
|
|
for($i=1; $i<=$pcb->HDR['texts_count']['v']; $i++)
|
|
{
|
|
$T = $pcb->TXT[$i];
|
|
if ($T['layer']['v'] != $orcad_layer) continue; // 0-bot, 1-top
|
|
|
|
$style = "(DefaultTTF)";
|
|
$style = $T['style']['v'];
|
|
$x = $T['pos_x']['v'];
|
|
$y = $T['pos_y']['v'];
|
|
$s = $T['str']['v'];
|
|
$r = ($T['rotate']['v']);
|
|
// $r = $r - 1; // rotate -90
|
|
if ($r<0) $r = 4 + $r;
|
|
if ($orcad_layer == 1) // HACK FOR TOP LAYER ONLY !!!
|
|
{
|
|
if ($r==3) $r = 1;
|
|
}
|
|
$r = $r * 90;
|
|
|
|
$flip = "";
|
|
$flags = hex($T['flags']['v']);
|
|
$mirrored = substr($flags, 0, 1); // 1 - not mirrored, 0 - mirrored (why ???)
|
|
$visible = substr($flags, 1, 1); // 1 - visible, 0 - not visible
|
|
if ($mirrored == "0") $flip = "(isFlipped True) ";
|
|
$pcad_pcb .= " (text (pt $y $x) \"$s\" (textStyleRef \"$style\") (rotation $r) $flip(justify Center) $ext)\r\n";
|
|
}
|
|
|
|
return $pcad_pcb;
|
|
}
|
|
|
|
|
|
// layer1, pcad top
|
|
// ================================================================================================
|
|
$pcad_pcb = " (layerContents (layerNumRef 1)\r\n";
|
|
$pcad_pcb .= createLayerContent($pcb, $LAYER, 1);
|
|
$pcad_pcb .= " )\r\n";
|
|
file_put_contents($out_file, $pcad_pcb, FILE_APPEND | LOCK_EX);
|
|
|
|
// layer2, pcad bottom
|
|
// ================================================================================================
|
|
$pcad_pcb = " (layerContents (layerNumRef 2)\r\n";
|
|
$pcad_pcb .= createLayerContent($pcb, $LAYER, 0);
|
|
$pcad_pcb .= " )\r\n";
|
|
file_put_contents($out_file, $pcad_pcb, FILE_APPEND | LOCK_EX);
|
|
|
|
// board
|
|
// ================================================================================================
|
|
$pcad_pcb = " (layerContents (layerNumRef 3)\r\n";
|
|
// - lines
|
|
for($i=1; $i<sizeof($LAYER[3]); $i++)
|
|
{
|
|
$line = $LAYER[3][$i];
|
|
$x1 = $line['x1'];
|
|
$y1 = $line['y1'];
|
|
$x2 = $line['x2'];
|
|
$y2 = $line['y2'];
|
|
$net = $line['net'];
|
|
$size = $line['size'];
|
|
|
|
$pcad_pcb .= " (line (pt $y1 $x1) (pt $y2 $x2) (width $size) )\r\n";
|
|
}
|
|
$pcad_pcb .= " )\r\n";
|
|
file_put_contents($out_file, $pcad_pcb, FILE_APPEND | LOCK_EX);
|
|
|