/* * Copyright (C) 2014 Alfons Wirtz * website www.freerouting.net * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License at <http://www.gnu.org/licenses/> * for more details. * * Padstacks.java * * Created on 3. Juni 2004, 09:42 */ package library; import java.util.Iterator; import java.util.Vector; import geometry.planar.ConvexShape; /** * Describes a library of padstacks for pins or vias. * * @author alfons */ public class Padstacks implements java.io.Serializable { /** Creates a new instance of Padstacks */ public Padstacks(board.LayerStructure p_layer_structure) { board_layer_structure = p_layer_structure; padstack_arr = new Vector<Padstack>(); } /** * Returns the padstack with the input name or null, * if no such padstack exists. */ public Padstack get(String p_name) { Iterator<Padstack> it = padstack_arr.iterator(); while(it.hasNext()) { Padstack curr_padstack = it.next(); if (curr_padstack != null && curr_padstack.name.compareToIgnoreCase(p_name) == 0) { return curr_padstack; } } return null; } /** * Returns the count of Padstacks in this object. */ public int count() { return padstack_arr.size(); } /** * Returns the padstack with index p_padstack_no for 1 <= p_padstack_no <= padstack_count */ public Padstack get(int p_padstack_no) { if (p_padstack_no <= 0 || p_padstack_no > padstack_arr.size()) { Integer padstack_count = padstack_arr.size(); System.out.println("Padstacks.get: 1 <= p_padstack_no <= " + padstack_count.toString() + " expected"); return null; } Padstack result = padstack_arr.elementAt(p_padstack_no - 1); if (result != null && result.no != p_padstack_no) { System.out.println("Padstacks.get: inconsistent padstack number"); } return result; } /** * Appends a new padstack with the input shapes to this padstacks. * p_shapes is an array of dimension board layer_count. * p_drill_allowed indicates, if vias of the own net are allowed to overlap with this padstack * If p_placed_absolute is false, the layers of the padstack are mirrored, if it is placed on the back side. */ public Padstack add(String p_name, ConvexShape [] p_shapes, boolean p_drill_allowed, boolean p_placed_absolute) { Padstack new_padstack = new Padstack(p_name, padstack_arr.size() + 1, p_shapes, p_drill_allowed, p_placed_absolute, this); padstack_arr.add(new_padstack); return new_padstack; } /** * Appends a new padstack with the input shapes to this padstacks. * p_shapes is an array of dimension board layer_count. * The padatack name is generated internally. */ public Padstack add(ConvexShape [] p_shapes) { String new_name = "padstack#" + (new Integer(padstack_arr.size() + 1).toString()); return add(new_name, p_shapes, false, false); } /** * Appends a new padstack withe the input shape from p_from_layer to p_to_layer * and null on the other layers. * The padatack name is generated internally. */ public Padstack add(ConvexShape p_shape, int p_from_layer, int p_to_layer) { ConvexShape[] shape_arr = new ConvexShape[board_layer_structure.arr.length]; int from_layer = Math.max(p_from_layer, 0); int to_layer = Math.min(p_to_layer, board_layer_structure.arr.length - 1); for (int i = from_layer; i <= to_layer; ++i) { shape_arr[i] = p_shape; } return add(shape_arr); } /** The array of Padstacks in this object */ private Vector<Padstack> padstack_arr; /** The layer structure of each padstack. */ public final board.LayerStructure board_layer_structure; }