freerouting/src/main/java/eu/mihosoft/freerouting/autoroute/ItemAutorouteInfo.java

148 lines
4.3 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.
*
* ItemAutorouteInfo.java
*
* Created on 22. Februar 2004, 12:09
*/
package eu.mihosoft.freerouting.autoroute;
import eu.mihosoft.freerouting.board.ShapeSearchTree;
import eu.mihosoft.freerouting.board.Item;
/**
* Temporary data stored in eu.mihosoft.freerouting.board Items used in the eu.mihosoft.freerouting.autoroute algorithm
*
* @author Alfons Wirtz
*/
public class ItemAutorouteInfo
{
public ItemAutorouteInfo(Item p_item)
{
this.item = p_item;
}
/**
* Looks, if the corresponding item belongs to the start or destination set of the eu.mihosoft.freerouting.autoroute algorithm.
* Only used, if the item belongs to the net, which will be currently routed.
*/
public boolean is_start_info()
{
return start_info;
}
/**
* Sets, if the corresponding item belongs to the start or destination set of the eu.mihosoft.freerouting.autoroute algorithm.
* Only used, if the item belongs to the net, which will be currently routed.
*/
public void set_start_info(boolean p_value)
{
start_info = p_value;
}
/**
* Returns the precalculated connection of this item
* or null, if it is not yet precalculated.
*/
public Connection get_precalculated_connection()
{
return this.precalculated_connnection;
}
/**
* Sets the precalculated connnection of this item.
*/
public void set_precalculated_connection(Connection p_connection)
{
this.precalculated_connnection = p_connection;
}
/**
* Gets the ExpansionRoom of of index p_index.
* Creates it, if it is not yet existing.
*/
public ObstacleExpansionRoom get_expansion_room(int p_index, ShapeSearchTree p_autoroute_tree)
{
if (expansion_room_arr == null)
{
expansion_room_arr = new ObstacleExpansionRoom[this.item.tree_shape_count(p_autoroute_tree)];
}
if (p_index < 0 || p_index >= expansion_room_arr.length)
{
System.out.println("ItemAutorouteInfo.get_expansion_room: p_index out of range");
return null;
}
if (expansion_room_arr[p_index] == null)
{
expansion_room_arr[p_index] = new ObstacleExpansionRoom(this.item, p_index, p_autoroute_tree);
}
return expansion_room_arr[p_index];
}
/**
* Resets the expansion rooms for autorouting the next connnection.
*/
public void reset_doors()
{
if (expansion_room_arr != null)
{
for (ObstacleExpansionRoom curr_room: expansion_room_arr)
{
if (curr_room != null)
{
curr_room.reset_doors();
}
}
}
}
/**
* Draws the shapes of the expansion rooms of this info for testing purposes.
*/
public void draw(java.awt.Graphics p_graphics, eu.mihosoft.freerouting.boardgraphics.GraphicsContext p_graphics_context, double p_intensity)
{
if (expansion_room_arr == null)
{
return;
}
for (ObstacleExpansionRoom curr_room : expansion_room_arr)
{
if (curr_room != null)
{
curr_room.draw(p_graphics, p_graphics_context, p_intensity);
}
}
}
/**
* Defines, if this item belongs to the start or destination set of
* the maze search algorithm
*/
private boolean start_info;
private final Item item;
private Connection precalculated_connnection = null;
/**
* ExpansionRoom for pushing or ripping the this object for each tree shape.
*/
private ObstacleExpansionRoom[] expansion_room_arr;
}