110 lines
3.9 KiB
Java
110 lines
3.9 KiB
Java
/*
|
|
* 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.
|
|
*
|
|
* Plane.java
|
|
*
|
|
* Created on 19. Mai 2004, 08:39
|
|
*/
|
|
|
|
package designformats.specctra;
|
|
|
|
|
|
|
|
/**
|
|
* Class for reading and writing plane scopes from dsn-files.
|
|
*
|
|
* @author alfons
|
|
*/
|
|
public class Plane extends ScopeKeyword
|
|
{
|
|
|
|
/** Creates a new instance of Plane */
|
|
public Plane()
|
|
{
|
|
super("plane");
|
|
}
|
|
|
|
public boolean read_scope(ReadScopeParameter p_par)
|
|
{
|
|
// read the net name
|
|
String net_name = null;
|
|
boolean skip_window_scopes = p_par.host_cad != null && p_par.host_cad.equalsIgnoreCase("allegro");
|
|
// Cadence Allegro cutouts the pins on power planes, which leads to performance problems
|
|
// when dividing a conduction area into convex pieces.
|
|
Shape.ReadAreaScopeResult conduction_area = null;
|
|
try
|
|
{
|
|
Object next_token = p_par.scanner.next_token();
|
|
if (!(next_token instanceof String))
|
|
{
|
|
System.out.println("Plane.read_scope: String expected");
|
|
return false;
|
|
}
|
|
net_name = (String) next_token;
|
|
conduction_area = Shape.read_area_scope(p_par.scanner, p_par.layer_structure, skip_window_scopes);
|
|
}
|
|
catch (java.io.IOException e)
|
|
{
|
|
System.out.println("Plane.read_scope: IO error scanning file");
|
|
System.out.println(e);
|
|
return false;
|
|
}
|
|
ReadScopeParameter.PlaneInfo plane_info = new ReadScopeParameter.PlaneInfo(conduction_area, net_name);
|
|
p_par.plane_list.add(plane_info);
|
|
return true;
|
|
}
|
|
|
|
public static void write_scope(WriteScopeParameter p_par, board.ConductionArea p_conduction) throws java.io.IOException
|
|
{
|
|
int net_count = p_conduction.net_count();
|
|
if (net_count <= 0 || net_count > 1)
|
|
{
|
|
System.out.println("Plane.write_scope: unexpected net count");
|
|
return;
|
|
}
|
|
String net_name = p_par.board.rules.nets.get(p_conduction.get_net_no(0)).name;
|
|
geometry.planar.Area curr_area = p_conduction.get_area();
|
|
int layer_no = p_conduction.get_layer();
|
|
board.Layer board_layer = p_par.board.layer_structure.arr[ layer_no];
|
|
Layer plane_layer = new Layer(board_layer.name, layer_no, board_layer.is_signal);
|
|
geometry.planar.Shape boundary_shape;
|
|
geometry.planar.Shape [] holes;
|
|
if (curr_area instanceof geometry.planar.Shape)
|
|
{
|
|
boundary_shape = (geometry.planar.Shape) curr_area;
|
|
holes = new geometry.planar.Shape [0];
|
|
}
|
|
else
|
|
{
|
|
boundary_shape = curr_area.get_border();
|
|
holes = curr_area.get_holes();
|
|
}
|
|
p_par.file.start_scope();
|
|
p_par.file.write("plane ");
|
|
p_par.identifier_type.write(net_name, p_par.file);
|
|
Shape dsn_shape = p_par.coordinate_transform.board_to_dsn(boundary_shape, plane_layer);
|
|
if (dsn_shape != null)
|
|
{
|
|
dsn_shape.write_scope(p_par.file, p_par.identifier_type);
|
|
}
|
|
for (int i = 0; i < holes.length; ++i)
|
|
{
|
|
Shape dsn_hole = p_par.coordinate_transform.board_to_dsn(holes[i], plane_layer);
|
|
dsn_hole.write_hole_scope(p_par.file, p_par.identifier_type);
|
|
}
|
|
p_par.file.end_scope();
|
|
}
|
|
}
|