163 lines
		
	
	
		
			5.0 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			163 lines
		
	
	
		
			5.0 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
| <?php
 | |
| 
 | |
| // pattern
 | |
| // ================================================================================================
 | |
| function patternGetStyle($pcb, $pattern, $ind)
 | |
| {
 | |
| 	for ($i=0; $i < sizeof($pcb->PATTERN_STYLE); $i++)
 | |
| 	{
 | |
| 		$style = $pcb->PATTERN_STYLE[$i];
 | |
| 
 | |
| 		// 1. name
 | |
| 		$pattern_name_bool = strtoupper($style['pattern']) == strtoupper($pattern['pattern']);
 | |
| 
 | |
| 		// 2. pads count
 | |
| 		if ($pattern_name_bool)
 | |
| 		{
 | |
| 			$pads_count_bool = $style['pads_count'] == $pattern['pads_count'];
 | |
| 			if (!$pads_count_bool) 
 | |
| 				return false;
 | |
| 
 | |
| 			// 3. pad styles
 | |
| 			for ($j=1; $j<=$pattern['pads_count']; $j++)
 | |
| 			{
 | |
| 				$pad_style_bool = $style['pad'.$j.'_style'] == $pattern['pad'.$j.'_style'];
 | |
| 				if (!$pad_style_bool) 
 | |
| 					break;
 | |
| 			}
 | |
| 
 | |
| 			if (!$pad_style_bool) 
 | |
| 				continue;
 | |
| 
 | |
| 			return $style;
 | |
| 		}
 | |
| 	}
 | |
| 
 | |
| 	return false;
 | |
| }
 | |
| function patternCheckName($pcb, $name)
 | |
| {
 | |
| 	for ($i=0; $i < sizeof($pcb->PATTERN_STYLE); $i++)
 | |
| 	{
 | |
| 		$style = $pcb->PATTERN_STYLE[$i];
 | |
| 		if ($style['name'] == $name)
 | |
| 			return $name."_".$i;
 | |
| 	}
 | |
| 	return $name;
 | |
| }
 | |
| function patternAddStyle($pcb, $pattern, $ind)
 | |
| {
 | |
| 	$st = patternGetStyle($pcb, $pattern, $ind);
 | |
| 	if ($st['name'])
 | |
| 		return false;
 | |
| 
 | |
| 	$i = sizeof($pcb->PATTERN_STYLE);
 | |
| 	$pcb->PATTERN_STYLE[$i] = $pattern;                               
 | |
| 	$pcb->PATTERN_STYLE[$i]['name'] = patternCheckName($pcb, strtoupper($pattern['pattern']));
 | |
| //	$pcb->PATTERN_STYLE[$i]['rotate'] = strtoupper($pattern['rotate']);
 | |
| 
 | |
| 	return $pcb->PATTERN_STYLE[$i]['name'];
 | |
| }
 | |
| 
 | |
| echo"<br>";
 | |
| echo"generate patterns...<br>";
 | |
| for($i=1; $i<=$pcb->HDR['comp_count_real']['v']; $i++)
 | |
| {
 | |
| 	$C = $pcb->COMP[$i];
 | |
| 
 | |
| 	$pattern = array();
 | |
| 	$pattern['pattern'] = $C['pattern']['v'];
 | |
| 	$pattern['rotate'] = $C['rotate']['v'];
 | |
| 	$pattern['pads_count'] = $C['pads_count']['v'];
 | |
| 
 | |
| 	for ($j=1; $j<=$pattern['pads_count']; $j++)
 | |
| 	{
 | |
| 		$pattern['pad'.$j.'_num'] = $j;
 | |
| 		$pattern['pad'.$j.'_style'] = $C['pad'.$j.'_style']['v'];
 | |
| 		$pattern['pad'.$j.'_rotate'] = $C['pad'.$j.'_rotate']['v'];
 | |
| 		$pattern['pad'.$j.'_pos_x'] = $C['pos_x']['v'] - $C['pad'.$j.'_pos_x']['v'];
 | |
| 		$pattern['pad'.$j.'_pos_y'] = $C['pos_y']['v'] - $C['pad'.$j.'_pos_y']['v'];
 | |
| 		$pattern['pad'.$j.'_des'] = $C['pad'.$j.'_des']['v'];
 | |
| 	}
 | |
| 
 | |
| 	$pattern['lines_count'] = $C['lines_count']['v'];
 | |
| 	for ($j=1; $j<=$pattern['lines_count']; $j++)
 | |
| 	{
 | |
| 		$pattern['line'.$j.'_pos_x'] = $C['pos_x']['v'] - $C['line'.$j.'_pos_x']['v'];
 | |
| 		$pattern['line'.$j.'_pos_y'] = $C['pos_y']['v'] - $C['line'.$j.'_pos_y']['v'];
 | |
| 		$pattern['line'.$j.'_size'] = "8.0";               
 | |
| 		$pattern['line'.$j.'_flags'] = $C['line'.$j.'_flags']['v'];
 | |
| 	}
 | |
| 
 | |
| 	if ($pattern_style = patternAddStyle($pcb, $pattern, $i))
 | |
| 	{
 | |
| 		echo"comp [$i], added NEW pattern {";
 | |
| 		echo"name=".$pattern['pattern']."";
 | |
| 		echo", pads=".$pattern['pads_count']."";
 | |
| 		echo", lines=".$pattern['lines_count']."";
 | |
| 		echo", style_rotate=".$pattern['rotate']."";
 | |
| 		echo"}, style=[$pattern_style]<br>";
 | |
| 	}
 | |
| 
 | |
| 	// save pattern style to component
 | |
| 	$st = patternGetStyle($pcb, $pattern, $i);
 | |
| 	$pcb->COMP[$i]['style']['v'] = $st['name'];
 | |
| 	$pcb->COMP[$i]['style_rotate']['v'] = $st['rotate'];
 | |
| }
 | |
| 
 | |
| echo"save patterns: ".sizeof($pcb->PATTERN_STYLE)."<br>";
 | |
| $pcad_lib  = "";
 | |
| for($i=0; $i<sizeof($pcb->PATTERN_STYLE); $i++)
 | |
| {
 | |
| 	$PTR = $pcb->PATTERN_STYLE[$i];
 | |
| 
 | |
| 	// begin library pattern
 | |
| 	$pcad_lib .= "  (patternDefExtended \"".$PTR['name']."_1\"\r\n";
 | |
| 	$pcad_lib .= "  (originalName \"".$PTR['name']."\")\r\n";
 | |
| 	$pcad_lib .= "    (patternGraphicsNameRef \"Primary\")\r\n";
 | |
| 	$pcad_lib .= "    (patternGraphicsDef \r\n";
 | |
| 	$pcad_lib .= "      (patternGraphicsNameDef \"Primary\")\r\n";
 | |
| 
 | |
| 	// multilayer, pads
 | |
| 	$pcad_lib .= "      (multiLayer \r\n";
 | |
| 	for ($j=1; $j<=$PTR['pads_count']; $j++)
 | |
| 	{
 | |
| 		$rot = ($PTR['pad'.$j.'_rotate'] * 90);
 | |
| 		$x = $PTR['pad'.$j.'_pos_x'];
 | |
| 		$y = $PTR['pad'.$j.'_pos_y'];
 | |
| 
 | |
| 		$pcad_lib .= "        (pad (padNum $j) (padStyleRef \"".$PTR['pad'.$j.'_style']."\") (pt $y $x) (rotation $rot) (defaultPinDes \"".$PTR['pad'.$j.'_des']."\") )\r\n";
 | |
| 	}
 | |
| 	$pcad_lib .= "      )\r\n";
 | |
| 
 | |
| 	// layer 6 - top silk
 | |
| 	$pcad_lib .= "      (layerContents  (layerNumRef  6)\r\n";
 | |
| 	for ($j=1; $j<$PTR['lines_count']; $j++)
 | |
| 	{
 | |
| 		$flags2 = $PTR['line'.($j+1).'_flags'];
 | |
| 		if (!$flags2) continue; // next point flags = 0, begin other line
 | |
| 
 | |
| 		$x1 = $PTR['line'.$j.'_pos_x'];
 | |
| 		$y1 = $PTR['line'.$j.'_pos_y'];
 | |
| 
 | |
| 		$x2 = $PTR['line'.($j+1).'_pos_x'];
 | |
| 		$y2 = $PTR['line'.($j+1).'_pos_y'];
 | |
| 
 | |
| 		$w = $PTR['line'.$j.'_size'];
 | |
| 
 | |
| if ( ($x1 == $x2) and ($y1 == $y2) ) {} else // HACK !!!
 | |
| 		$pcad_lib .= "        (line (pt $y2 $x2) (pt $y1 $x1) (width $w) )\r\n";
 | |
| 	}
 | |
| //	$rot = ($PTR['pad'.$j.'_rotate'] * 90);     //(rotation $rot) 
 | |
| 	$pcad_lib .= "        (attr \"RefDes\" \"\" (isVisible False) (justify Center) (textStyleRef \"(DefaultTTF)\") )\r\n";
 | |
| 	$pcad_lib .= "        (attr \"Type\" \"\" (isVisible False) (justify Center) (textStyleRef \"(DefaultTTF)\") )\r\n";
 | |
| 	$pcad_lib .= "        (attr \"Value\" \"\" (isVisible False) (justify Center) (textStyleRef \"(DefaultTTF)\") )\r\n";
 | |
| 	$pcad_lib .= "      )\r\n";
 | |
| 
 | |
| 	// end
 | |
| 	$pcad_lib .= "    )\r\n"; // patternGraphicsDef
 | |
| 	$pcad_lib .= "  )\r\n"; // patternDefExtended
 | |
| 
 | |
| }
 | |
| file_put_contents($out_file, $pcad_lib, FILE_APPEND | LOCK_EX);
 |