II. 
New Blockpacking Formats
II.1. The .blocks format
The .blocks file specifies the name and other optional information
about each block/terminal node in the floorplan. Each line specifies a
single block/terminal node. After the standard header, the format specifies:
NumSoftRectangularBlocks : number of soft rectangular block nodes
NumHardRectilinearBlocks : number of hard rectilinear block nodes
NumTerminals : number of terminal (pad etc.) nodes
Then, one line for each soft rectangular block node with format as follows:
nodeName softrectangular area
minAspectRatio maxAspectRatio
[ : symmetry (default none)]
Then, one line (or more if the vertexlist is too long) for each hard
rectilinear block node with format as follows:
nodeName hardrectilinear vertexNumber
vertex1, vertex2, ..., vertexN
[ : symmetry (default none)]
(Note: this format can distribute over arbitrary number of lines, as
long as ``nodeName hardrectilinear vertexNumber''
stay on the first line and each individual vertex stays on a same line)
Then, one line for each terminal node with format as follows
(if NumTerminals is greater than 0):
nodeName [ nodeDimensions (default (0,0)]
[ : symmetry (default none)] terminal
 nodeName
 is an arbitrarylength alphanumeric string, which may include any
number of characters from: {(az), (AZ), (09), '_', '/', '\', '+'
and ''} node names are casesensitive.
 ``softrectangular''
 is a literal which declares that the node is a soft rectangular block.
 area, minAspectRatio and
maxAspectRatio
 are all doubles which specify the area, minAspectRatio, or max
aspect ratio of the soft rectangular block, respectively.
 ``hardrectilinear''
 is a literal which declares that the node is a hard rectilinear block.
 vertexNumber
 is the number of vertices of the hard rectilinear block.
 vertex1, vertex2, ..., vertexN
 is a list of all vertices of the hard rectilinear block in a
clockwise order, vertex1 != vertexN. Each vertex is a pair of
parentheses enclosed and comma separated doubles indicating the X,
then Y coordinate of the vertex, relative to the leftbottom corner
of the hard rectilinear block's bounding box.
 nodeDimensions
 is a pair of parentheses enclosed and comma separated doubles
indicating width, then height when in N orientation.
 symmetry
 specifies the axes about wihch the node may be flipped. Symmetry is
given as any combination (in any order) of 'X', 'Y' and 'R90'. R90
means the node may be rotated 90 degrees. If no symmetry is present,
the node is assumed to be not flippable.
 ``terminal''
 is a literal which indicates that the node is a terminal.
II.2. The .spatialconstr format
The .spatialconstr file specifies relative and absolute spatial
constraints for placed objects. After the standard header, the format
specifies:
First, the global layout constraints: layout region and snapping constraint
 layoutRegion vertex1, vertex2, ..., vertexN
 every placed object must lie entirely within the rectilinear region
defined by (in consecutive order)
vertex1, vertex2, ..., vertexN
(vertex1 != vertexN);
each vertex is specified by a pair of doubles separated by
a comma and enclosed by parentheses, e.g., (50.0 , 40.4)
 snappingConstraint
{ y1, y2, ..., yN }  startAt, step, num
 y1, ..., yN is an explicit list of allowed ycoordinates
at which all horizontal object edges must be located.
startAt, step, num give a shorthand notation for
defining the minimum allowed ycoordinate (startAt),
the interval between allowed ycoordinates (step), and
the total number of distinct allowed ycoordinates (num).
Next, the fixed/onedim/region/grouping location constraints:
 FixedConstraints
nodeName1 location orientation
nodeName2 location orientation
...
nodeNameN location orientation
EndFixedConstraints
 location is the location of the origin of the placed
object. it is a pair of parenthesis enclosed and whitespace separated
doubles indicating the X, Y coordinate of the block vertex.
for a rectangular block, the origin is its leftbottom vertex;
for a nonrectanglular block, the origin is its first vertex in
its vertexList
 OneDimConstraints
nodeName1 dim coordinate
nodeName2 dim coordinate
...
nodeNameN dim coordinate
EndOneDimConstraints
 dim is either H or V, coordinate is the
ycoord or xcoord, respectively, at which the origin of the object
must be placed.
 RegionConstraints
nodeName1 vertex1, vertex2, ..., vertexN1
nodeName2 vertex1, vertex2, ..., vertexN2
...
nodeNameN vertex1, vertex2, ..., vertexN3
EndRegionConstraints
 placed object must lie entirely within the rectilinear region defined
by (in consecutive order) vertex1, vertex2, ..., vertexN
(vertex1 != vertexN); each vertex is
specified by a pair of doubles separated by a comma and enclosed by
parentheses, e.g., (50.0 , 40.4)
 GroupingConstraints
GrConstraint1
xspan,yspan
nodeName1, nodeName2, ..., nodeNameN
GrConstraint2
xspan,yspan
nodeName1, nodeName2, ..., nodeNameN
...
GrConstraintM
xspan,yspan
nodeName1, nodeName2, ..., nodeNameN
EndGroupingConstraints
 each grouping constraint GrConstraint specifies that the entire
list of objects must be placed within some bounding box of width
xspan and height yspan within the
layout region.
Next, alignment/adjacency/pitchmatch constraints:
 AlignmentConstraints
nodeName11 nodeName12 dim
00  01  10  11
nodeName21 nodeName22 dim
00  01  10  11
...
nodeNameN1 nodeNameN2 dim
00  01  10  11
EndAlignmentConstraints
 If dim = H, then the two placed objects must have
horizontal edges of their bounding boxes aligned at the same ycoordinate:
case 00: both top edges;
case 01: top edge of object1 aligned with bottom edge of object2;
case 10: bottom edge of object1 aligned with top edge of object2;
case 11: both bottom edges;
If dim = V, then the two placed objects must have
vertical edges of their bounding boxes aligned at the same xcoordinate:
case 00: both left edges;
case 01: left edge of object1 aligned with right edge of object2;
case 10: right edge of object1 aligned with left edge of object2;
case 11: both right edges;
 AdjacencyConstraints
nodeName11 nodeName22 dim
minOverlap
nodeName21 nodeName22 dim
minOverlap
...
nodeNameN1 nodeNameN2 dim
minOverlap
EndAdjacencyConstraints
 If dim = H, then the boundaries of the bounding boxes of
the two placed objects must intersect in a horizontal segment
of length at least minOverlap;
If dim = V, then the boundaries of the bounding boxes of
the two placed objects must intersect in a vertical segment
of length at least minOverlap.
 PitchmatchConstraints
nodeName11 nodeName22 dim
nodeName21 nodeName22 dim
...
nodeNameN1 nodeNameN2 dim
EndPitchmatchConstraints
 If dim = H, then the horizontal boundaries of the
bounding boxes of the two placed objects must be of equal length;
If dim = V, then the vertical boundaries of the
bounding boxes of the two placed objects must be of equal length.
IN the above, ``layoutRegion'', ``snappingConstraint'', ``FixedConstraints'',
``EndFixedConstraints'', ``OneDimConstraints'', ``EndOneDimConstraints'',
``RegionConstraints'', ``EndRegionConstraints'', ``GroupingConstraints'',
``GrConstraintM'', ``EndGroupingConstraints'', ``AlignmentConstraints'',
``EndAlignmentConstraints'', ``AdjacencyConstraints'',
``EndAdjacencyConstraints'', ``PitchmatchConstraints'',
``EndPitchmatchConstraints'' are all literals, each indicating the beginning /
end of a spatial constraint.
