U.S. patent application number 14/689189 was filed with the patent office on 2015-12-03 for arranging components in a two-dimensional area.
The applicant listed for this patent is International Business Machines Corporation. Invention is credited to Ian Robertson.
Application Number | 20150346922 14/689189 |
Document ID | / |
Family ID | 51214401 |
Filed Date | 2015-12-03 |
United States Patent
Application |
20150346922 |
Kind Code |
A1 |
Robertson; Ian |
December 3, 2015 |
ARRANGING COMPONENTS IN A TWO-DIMENSIONAL AREA
Abstract
A system for arranging components in a two-dimensional area
includes a component preparation module for providing a set of
components for arrangement, determining rectangular covers for each
component, and ordering components according to a predefined order
preference, and a core layout module for mapping components in
order to positions in the arrangement with a first width and in a
first direction, including: a row module for positioning components
in order in a first full row across the first direction of the
first width aligning one of the top or bottom sides of the covers
of adjacent components until the next component does not fit in the
first width, and a sub-row module for positioning components in any
available space within the height of the first full row to form one
or more sub-rows in the first direction and extending a distance
less than the first width.
Inventors: |
Robertson; Ian; (Cambridge,
GB) |
|
Applicant: |
Name |
City |
State |
Country |
Type |
International Business Machines Corporation |
Armonk |
NY |
US |
|
|
Family ID: |
51214401 |
Appl. No.: |
14/689189 |
Filed: |
April 17, 2015 |
Current U.S.
Class: |
715/765 |
Current CPC
Class: |
G06F 3/0482 20130101;
G06F 17/11 20130101; G06F 3/04842 20130101 |
International
Class: |
G06F 3/0482 20060101
G06F003/0482; G06F 3/0484 20060101 G06F003/0484 |
Foreign Application Data
Date |
Code |
Application Number |
May 29, 2014 |
GB |
1409535.0 |
Claims
1. A system for arranging components in a two-dimensional area,
comprising: a component preparation module for providing a set of
components for arrangement, determining rectangular covers for each
component, and ordering components according to a predefined order
preference; and a core layout module for mapping components in
order to positions in the arrangement with a first width and in a
first direction, comprising: a row module for positioning
components in order in a first full row across the first direction
of the first width aligning one of the top or bottom sides of the
covers of adjacent components until the next component does not fit
in the first width; and a sub-row module for, before starting a
next row, positioning components in any available space within the
height of the first full row to form one or more sub-rows in the
first direction and extending a distance less than the first width,
wherein if the top sides of the covers are aligned any sub-rows and
full rows are below a previous row, if the bottom sides of the
covers are aligned any sub-rows and full rows are above a previous
row.
2. The system as claimed in claim 1, wherein the core layout module
comprises: a first justifying module for justifying components
horizontally within a full row and within a sub-row.
3. The system as claimed in claim 1, wherein the core layout module
comprises: a second justifying module for justifying components
vertically within a sub-row.
4. The system as claimed in claim 1, further comprising: an
optimization module for, once all the components are positioned,
optimizing an arrangement quality by altering the height and width
of the area.
5. The system as claimed in claim 4, wherein the optimization
module comprises: a measure of arrangement quality determining
module for determining the measure of arrangement quality for the
first width and the resultant height; a width replacement module
for replacing the first width with a new width and repeating the
method of mapping the components; and an iteration module for
repeating the replacing of the width with a new width until an
optimization of the arrangement quality is obtained.
6. The system as claimed in claim 1, wherein the core layout module
comprises: a rotating module for rotating components so that they
align with the axes of the arrangement.
7. The system as claimed in claim 1, wherein the core layout module
comprises: a super-component module for: applying the method for
non-singleton components to display the non-singleton components in
a rectangular region to create a super-component; and applying the
method to the super-component and the excluded singleton components
to create a final arrangement.
8. A method for arranging components in a two-dimensional area,
comprising: providing a set of components for arrangement;
determining rectangular covers for each component; ordering
components according to a predefined order preference; and mapping
components in order to positions in the arrangement comprising:
defining a first width of the area and a first direction across the
width; positioning components in order in a first full row across
the first direction of the first width aligning one of the top or
bottom sides of the covers of adjacent components until the next
component does not fit in the first width; before starting a next
row, positioning components in any available space within the
height of the first full row to form one or more sub-rows in the
first direction and extending a distance less than the first width;
and repeating the steps of positioning components in a next full
row and one or more sub-rows, until all components are positioned,
wherein if the top sides of the covers are aligned any sub-rows and
full rows are below a previous row, if the bottom sides of the
covers are aligned any sub-rows and full rows are above a previous
row.
9. The method as claimed in claim 8, wherein the first direction is
left to right or right to left.
10. The method as claimed in claim 8, comprising: justifying
components horizontally within a full row and within a sub-row.
11. The method as claimed in claim 8, comprising: justifying
components vertically within a sub-row.
12. The method as claimed in claim 8, comprising: once all the
components are positioned, determining a measure of arrangement
quality, and determining an optimization of the arrangement
quality; replacing the first width with a new width and repeating
the method of mapping the components; determining the new measure
of arrangement quality; and repeating the replacing of the width
with a new width until an optimization of the arrangement quality
is obtained.
13. The method as claimed in claim 8, wherein the arrangement
quality is one of the group of: an aspect ratio of the area; a
packing efficiency of the area; a size of the area; any other
user-defined measure of arrangement quality.
14. The method as claimed in claim 8, wherein the predefined order
preference is one of the group of: decreasing order of vertex
count; decreasing order of component height; decreasing order of
the greater of component height or component width; decreasing
order of any user-defined component measure; alphabetically by
vertex label; by vertex type and label.
15. The method as claimed in claim 8, wherein positioning
components in any available space for one or more sub-rows
comprises: positioning components in a sub-row; and positioning
components in a subsequent sub-row in any available space within a
height of a previous sub-row.
16. The method as claimed in claim 8, including: rotating
components so that they align with the axes of the arrangement.
17. The method as claimed in claim 8, including: applying the
method for non-singleton components to display the non-singleton
components in a rectangular region to create a super-component; and
applying the method to the super-component and the excluded
singleton components to create a final arrangement.
18. The method as claimed in claim 8, wherein positioning
components in any available space within the height of the first
full row to form one or more sub-rows in the first direction and
extending a distance less than the first width comprises:
determining candidate insertion points within a row or sub-row;
smoothing the insertion list; and placing a next component in a
sub-row at a first insertion point in which the component's height
fits in the first direction.
19. The method as claimed in claim 18, comprising positioning
components in a subsequent sub-row comprising: updating the
insertion list; and placing a next component in a sub-row at a
first insertion point in which the component's height fits in the
first direction.
20. A method for arranging components in a two-dimensional area,
comprising: providing a set of components for arrangement;
determining rectangular covers for each component; ordering
components according to a predefined order preference; and mapping
components in order to positions in the arrangement comprising:
defining a first height of the area and a first direction along the
height; positioning components in order in a first full column
along the first direction of the first height aligning one of the
left or right sides of the covers of adjacent components until the
next component does not fit in the first height; before starting a
next column, positioning components in any available space within
the width of the first full column to form one or more sub-columns
in the first direction and extending a distance less than the first
height; and repeating the steps of positioning components in a next
full column and one or more sub-columns, until all components are
positioned, wherein if the left sides of the covers are aligned any
sub-columns and full columns are to the right of a previous column,
if the right sides of the covers are aligned any sub-columns and
full columns are to the left of a previous column.
Description
BACKGROUND
[0001] This invention relates to the field of arranging components
in a two-dimensional area. In particular, the invention relates to
arranging components in a two-dimensional area in which the
components are of varying size.
[0002] Graphs are frequently used to model systems of entities
(vertices) and the relationships between them (edges). Graph layout
algorithms may address the problem of producing aesthetically
pleasing drawings of such graphs. Most graph drawing algorithms
assume that the graph to be drawn consists of a single connected
component. In practice, real graphs are often disconnected, and
consists of several distinct connected components. The number of
such components may be very large (thousands or more), and each
component may be of any size--anything from a single vertex to a
giant component consisting of thousands or even millions of
vertices.
SUMMARY
[0003] According to a first aspect of the present invention there
is provided a system for arranging components in a two-dimensional
area, comprising: a component preparation module for providing a
set of components for arrangement, determining rectangular covers
for each component, and ordering components according to a
predefined order preference; a core layout module for mapping
components in order to positions in the arrangement with a first
width and in a first direction, including: a row module for
positioning components in order in a first full row across the
first direction of the first width aligning one of the top or
bottom sides of the covers of adjacent components until the next
component does not fit in the first width; a sub-row module for,
before starting a next row, positioning components in any available
space within the height of the first full row to form one or more
sub-rows in the first direction and extending a distance less than
the first width; wherein if the top sides of the covers are aligned
any sub-rows and full rows are below a previous row, if the bottom
sides of the covers are aligned any sub-rows and full rows are
above a previous row.
[0004] The core layout module may include: a first justifying
module for justifying components horizontally within a full row and
within a sub-row; and, optionally, a second justifying module for
justifying components vertically within a sub-row.
[0005] The system may include: an optimization module for, once all
the components are positioned, optimizing an arrangement quality by
altering the height and width of the area.
[0006] The optimization module may include: a measure of
arrangement quality determining module for determining the measure
of arrangement quality for the first width and the resultant
height; a width replacement module for replacing the first width
with a new width and repeating the method of mapping the
components; an iteration module for repeating the replacing of the
width with a new width until an optimization of the arrangement
quality is obtained.
[0007] The arrangement quality may be one of the group of: an
aspect ratio of the area; a packing efficiency of the area; a size
of the area; any user-defined measure of arrangement quality.
[0008] The component preparation module may include a predefined
order preference in the form of one of the group of: decreasing
order of vertex count; decreasing order of component height;
decreasing order of the greater of component height or component
width; decreasing order of any user-defined component measure;
alphabetically by vertex label; by vertex type and label.
[0009] The sub-row module may include positioning components in any
available space for one or more sub-rows including: positioning
components in a sub-row; positioning components in a subsequent
sub-row in any available space within a height of a previous
sub-row.
[0010] The core layout module may include: a rotating module for
rotating components so that they align with the axes of the
arrangement.
[0011] The core layout module may further include: a
super-component module for: applying the method for non-singleton
components to display the non-singleton components in a rectangular
region to create a super-component; and applying the method to the
super-component and the excluded singleton components to create a
final arrangement.
[0012] The sub-row module may include: determining candidate
insertion points within a row or sub-row; smoothing the insertion
list; placing a next component in a sub-row at a first insertion
point in which the component's height fits in the first
direction.
[0013] The sub-row module may further include a subsequent sub-row
module including: updating the insertion list; placing a next
component in a sub-row at a first insertion point in which the
component's height fits in the first direction.
[0014] According to a second aspect of the present invention there
is provided a system for arranging components in a two-dimensional
area, comprising: a component preparation module for providing a
set of components for arrangement, determining rectangular covers
for each component, and ordering components according to a
predefined order preference; a core layout module for mapping
components in order to positions in the arrangement with a first
height and in a first direction, including: a column module for
positioning components in order in a first full column along the
first direction of the first height aligning one of the left or
right sides of the covers of adjacent components until the next
component does not fit in the first height; a sub-column module
for, before starting a next column, positioning components in any
available space within the width of the first full column to form
one or more sub-columns in the first direction and extending a
distance less than the first height; wherein if the left sides of
the covers are aligned any sub-columns and full columns are to the
right of a previous column, if the right sides of the covers are
aligned any sub-columns and full columns are to the left of a
previous column.
[0015] The core layout module may include: a first justifying
module for justifying components vertically within a full column
and within a sub-column; and, optionally, a second justifying
module for justifying components horizontally within a
sub-column.
[0016] The system may include: an optimization module for, once all
the components are positioned, optimizing an arrangement quality by
altering the height and width of the area.
[0017] The optimization module may include: a measure of
arrangement quality determining module for determining the measure
of arrangement quality for the first height and the resultant
width; a height replacement module for replacing the first height
with a new height and repeating the method of mapping the
components; an iteration module for repeating the replacing of the
height with a new height until an optimization of the arrangement
quality is obtained.
[0018] The arrangement quality may be one of the group of: an
aspect ratio of the area; a packing efficiency of the area; a size
of the area; any user-defined measure of arrangement quality.
[0019] The component preparation module may include a predefined
order preference in the form of one of the group of: decreasing
order of vertex count; decreasing order of component width;
decreasing order of the greater of component height or component
width; decreasing order of any user-defined component measure;
alphabetically by vertex label; by vertex type and label.
[0020] The sub-column module may include positioning components in
any available space for one or more sub-columns including:
positioning components in a sub-column; positioning components in a
subsequent sub-column in any available space within a width of a
previous sub-column.
[0021] The core layout module may include: a rotating module for
rotating components so that they align with the axes of the
arrangement.
[0022] The core layout module may further include: a
super-component module for: applying the method for non-singleton
components to display the non-singleton components in a rectangular
region to create a super-component; and applying the method to the
super-component and the excluded singleton components to create a
final arrangement.
[0023] The sub-column module may include: determining candidate
insertion points within a row or sub-column; smoothing the
insertion list; placing a next component in a sub-column at a first
insertion point in which the component's width fits in the first
direction.
[0024] The sub-column module may further include a subsequent
sub-column module including: updating the insertion list; placing a
next component in a sub-column at a first insertion point in which
the component's width fits in the first direction.
[0025] According to a third aspect of the present invention there
is provided a method for arranging components in a two-dimensional
area, comprising: providing a set of components for arrangement;
determining rectangular covers for each component; ordering
components according to a predefined order preference; mapping
components in order to positions in the arrangement including:
defining a first width of the area and a first direction across the
width; positioning components in order in a first full row across
the first direction of the first width aligning one of the top or
bottom sides of the covers of adjacent components until the next
component does not fit in the first width; before starting a next
row, positioning components in any available space within the
height of the first full row to form one or more sub-rows in the
first direction and extending a distance less than the first width;
repeating the steps of positioning components in a next full row
and one or more sub-rows, until all components are positioned;
wherein if the top sides of the covers are aligned any sub-rows and
full rows are below a previous row, if the bottom sides of the
covers are aligned any sub-rows and full rows are above a previous
row.
[0026] The first direction may be left to right or right to left.
The method may also include justifying components horizontally
within a full row and within a sub-row and, optionally, justifying
components vertically within a sub-row.
[0027] The method may include the further steps of: once all the
components are positioned, determining a measure of arrangement
quality, and determining an optimization of the arrangement
quality; replacing the first width with a new width and repeating
the method of mapping the components; determining the new measure
of arrangement quality of the display; and repeating the replacing
of the width with a new width until an optimization of the
arrangement quality is obtained.
[0028] The arrangement quality may be one of the group of: an
aspect ratio of the area; a packing efficiency of the area; a size
of the area; any user-defined measure of arrangement quality.
[0029] The predefined order preference may be one of the group of:
decreasing order of vertex count; decreasing order of component
height; decreasing order of the greater of component height or
component width; decreasing order of any user-defined component
measure; alphabetically by vertex label; by vertex type and
label.
[0030] Positioning components in any available space for one or
more sub-rows may include: positioning components in a sub-row; and
positioning components in a subsequent sub-row in any available
space within a height of a previous sub-row. The method may also
include rotating components so that they align with the axes of the
arrangement.
[0031] The method may further include: applying the method for
non-singleton components to display the non-singleton components in
a rectangular region to create a super-component; and applying the
method to the super-component and the excluded singleton components
to create a final arrangement.
[0032] Positioning components in any available space within the
height of the first full row to form one or more sub-rows in the
first direction and extending a distance less than the first width
may include: determining candidate insertion points within a row or
sub-row; smoothing the insertion list; placing a next component in
a sub-row at a first insertion point in which the component's
height fits in the first direction.
[0033] Positioning components in a subsequent sub-row may include:
updating the insertion list; and placing a next component in a
sub-row at a first insertion point in which the component's height
fits in the first direction.
[0034] According to a fourth aspect of the present invention there
is provided a method for arranging components in a two-dimensional
area, comprising: providing a set of components for arrangement;
determining rectangular covers for each component; ordering
components according to a predefined order preference; mapping
components in order to positions in the arrangement including:
defining a first height of the area and a first direction along the
height; positioning components in order in a first full column
along the first direction of the first height aligning one of the
left or right sides of the covers of adjacent components until the
next component does not fit in the first height; before starting a
next column, positioning components in any available space within
the width of the first full column to form one or more sub-columns
in the first direction and extending a distance less than the first
height; repeating the steps of positioning components in a next
full column and one or more sub-columns, until all components are
positioned; wherein if the left sides of the covers are aligned any
sub-columns and full columns are to the right of a previous column,
if the right sides of the covers are aligned any sub-columns and
full columns are to the left of a previous column.
[0035] The first direction may be top to bottom or bottom to top.
The method may also include justifying components vertically within
a full column and within a sub-column and, optionally, justifying
components horizontally within a sub-column.
[0036] The method may include the further steps of: once all the
components are positioned, determining a measure of arrangement
quality, and determining an optimization of the arrangement
quality; replacing the first height with a new height and repeating
the method of mapping the components; determining the new measure
of arrangement quality of the display; and repeating the replacing
of the height with a new height until an optimization of the
arrangement quality is obtained.
[0037] The arrangement quality may be one of the group of: an
aspect ratio of the area; a packing efficiency of the area; a size
of the area; any user-defined measure of arrangement quality.
[0038] The predefined order preference may be one of the group of:
decreasing order of vertex count; decreasing order of component
width; decreasing order of the greater of component height or
component width; decreasing order of any user-defined component
measure; alphabetically by vertex label; by vertex type and
label.
[0039] Positioning components in any available space for one or
more sub-columns may include: positioning components in a
sub-column; and positioning components in a subsequent sub-column
in any available space within a width of a previous sub-column. The
method may also include rotating components so that they align with
the axes of the arrangement.
[0040] The method may further include: applying the method for
non-singleton components to display the non-singleton components in
a rectangular region to create a super-component; and applying the
method to the super-component and the excluded singleton components
to create a final arrangement.
[0041] Positioning components in any available space within the
width of the first full column to form one or more sub-columns in
the first direction and extending a distance less than the first
height may include: determining candidate insertion points within a
column or sub-column; smoothing the insertion list; placing a next
component in a sub-column at a first insertion point in which the
component's width fits in the first direction.
[0042] Positioning components in a subsequent sub-row may include:
updating the insertion list; and placing a next component in a
sub-column at a first insertion point in which the component's
width fits in the first direction.
[0043] According to a fifth aspect of the present invention there
is provided a computer program product for arranging components in
a two-dimensional area, the computer program product comprising a
computer-readable storage medium having computer-readable program
code embodied therewith, the computer-readable program code
configured to carry out the method of the third aspect of the
present invention.
[0044] According to a sixth aspect of the present invention there
is provided a computer program product for arranging components in
a two-dimensional area, the computer program product comprising a
computer-readable storage medium having computer-readable program
code embodied therewith, the computer-readable program code
configured to carry out the method of the fourth aspect of the
present invention.
[0045] According to a seventh aspect of the present invention there
is provided a computer program stored on a computer readable medium
and loadable into the internal memory of a digital computer,
comprising software code portions, when said program is run on a
computer, for performing the method steps of any of the features
listed above.
[0046] According to a eighth aspect of the present invention there
is provided a method substantially as described with reference to
the figures.
[0047] According to a ninth aspect of the present invention there
is provided a system substantially as described with reference to
the figures.
[0048] The described aspects of the invention provide the advantage
of providing a layout of components that runs quickly, respects a
user-defined ordering, and minimizes the amount of wasted
space.
BRIEF DESCRIPTION OF THE SEVERAL VIEWS OF THE DRAWINGS
[0049] The subject matter regarded as the invention is particularly
pointed out and distinctly claimed in the concluding portion of the
specification. The invention, both as to organization and method of
operation, together with objects, features, and advantages thereof,
may best be understood by reference to the following detailed
description when read with the accompanying drawings.
[0050] Preferred embodiments of the present invention will now be
described, by way of example only, with reference to the following
drawings in which:
[0051] FIGS. 1A to 1C are schematic diagrams showing the outcomes
of rectangular packing algorithms as known in the prior art;
[0052] FIG. 2 is a flow diagram of an example embodiment of a
method in accordance with the present invention;
[0053] FIG. 3 is a schematic diagram illustrating a problem of the
prior art;
[0054] FIG. 4 is a schematic diagram of an example display in
accordance with the present invention;
[0055] FIGS. 5A and 5B are flow diagrams of example embodiments of
aspects of a method in accordance with the present invention;
[0056] FIGS. 6A to 6C are schematic diagrams showing three stages
of a component placing using a method in accordance with the
present invention;
[0057] FIG. 7 is block diagram of an example embodiment of a system
in accordance with the present invention;
[0058] FIG. 8 is a block diagram of an embodiment of a computer
system in which the present invention may be implemented;
[0059] FIG. 9A is a schematic diagram showing an example layout of
a first example set of components using a method of the prior
art;
[0060] FIG. 9B is a schematic diagram showing an example layout of
the first example set of components using a method in accordance
with the present invention;
[0061] FIG. 10 is a schematic diagram showing an example layout of
a second example set of components using a method in accordance
with the present invention; and
[0062] FIG. 11 is a schematic diagram showing an aspect of a method
in accordance with the present invention.
[0063] It will be appreciated that for simplicity and clarity of
illustration, elements shown in the figures have not necessarily
been drawn to scale. For example, the dimensions of some of the
elements may be exaggerated relative to other elements for clarity.
Further, where considered appropriate, reference numbers may be
repeated among the figures to indicate corresponding or analogous
features.
DETAILED DESCRIPTION
[0064] In the following detailed description, numerous specific
details are set forth in order to provide a thorough understanding
of the invention. However, it will be understood by those skilled
in the art that the present invention may be practiced without
these specific details. In other instances, well-known methods,
procedures, and components have not been described in detail so as
not to obscure the present invention.
[0065] Existing approaches to component arrangement problems may
fall into two general categories--rectangle packing and polyomino
packing. The component arrangement problem also shares some
characteristics with the text processing task of breaking
paragraphs into lines of words for display in a fixed region of a
page.
[0066] With the rectangle packing approach, each component drawing
is enclosed within a bounding rectangle, and these rectangles are
then packed into a larger rectangular area with a rectangle packing
algorithm. Typically this would be some variation of a
shelf/strip/bin-packing algorithm, which would aim to pack the
rectangles into a fixed-width strip.
[0067] FIG. 1A shows a rectangular packing 100 with fixed width
strip packing algorithm in which blocks 101 are packed into fixed
width strips 102, 103, 104 in order. FIG. 1B shows a rectangular
packing 110 with fixed width strip packing with strip re-use.
Blocks 111 are packed in fixed width strips 112, 113, 114 but extra
space at the ends of strips is re-used when a smaller block becomes
available. Therefore, the blocks 111 are out of order.
[0068] Strip packing algorithms have been adapted to perform
packing into a region which approximates a specified aspect ratio
as shown in FIG. 1C. In FIG. 1C, a rectangular packing 120 is shown
with variable width row tiling of blocks 121. This is convenient
for displaying the final result in a rectangular region on a
computer screen or sheet of paper.
[0069] Similar methods are used in computer graphics for packing
large numbers of small images (jpeg files) into an enclosing
super-image, or sprite, which is more efficient to load in a
web-page.
[0070] However, all rectangle packers may typically generate
configurations that reflect the mechanics of their internal
workings, and no attempt is made to place items in an aesthetic
manner. The component numberings in FIGS. 1A, 1B, and 1C illustrate
this defect. As a result it can be difficult to locate items in the
final drawing, since smaller rectangles in particular may have been
hidden away in small interstitial gaps between the larger elements.
If the input rectangles were presented in a specific meaningful
order, this order will bear no relation to the positional mapping
in the final drawing.
[0071] The polyomino packing approach dispenses with the enclosing
rectangles, and covers each component with a set of square tiles,
forming what is known to mathematicians as a polyomino. The tiles
may be chosen to be smaller than the enclosing rectangle of any
component, so the polyomino boundary gives a much better
approximation to the shape of each underlying component drawing. A
polyomino packer then attempts to arrange the polyominos in a
non-intersecting configuration, using a greedy grid placement
method very similar to the children's game of battleships.
[0072] The methods described above may suffer from a number of
drawbacks, including for example: [0073] (a) There is no easy way
of pre-selecting a suitable width for the region for use in the
packing algorithm, so that layouts can appear either too tall and
narrow, or too wide and shallow. [0074] (b) There is no automatic
control over the amount of additional space wasted when a packed
layout is scaled into a user specified rectangular display region.
[0075] (c) The packing algorithms generally require the components
to be processed in order of decreasing height, whereas a user will
generally have in mind a pre-determined order in which the
components should be processed and arranged in the final layout.
[0076] (d) There is no simple relationship between the order in
which components are processed and their positions within the final
layout. The polyomino algorithm is particularly capricious in this
respect, but the strip packing and row tiling algorithms all have
their own idiosyncrasies. Component positioning is driven
exclusively by the desire to construct an efficient packing, even
if this comes at the expense of clarity and visual aesthetics.
[0077] (e) Component layout quality can often be improved by
rotating individual components so that they align cleanly with the
coordinate axes. [0078] (f) Layout speed is of primary importance,
since component layouts are often required in highly interactive
environments. Performance of the polyomino algorithm, in
particular, is critically dependent on the choice of the tile
size.
[0079] Therefore, to address the aforementioned problems, a method
and system are described for ordering components in a
two-dimensional rectangular area. A collection of components might
be generated by any of the many stock algorithms described in the
literature, and the described method may solve the problem of
arranging these components into a rectangular configuration that
may be understandable and aesthetically pleasing, and which may
make efficient use of the overall area into which the final layout
must fit. The components may not be modified in this process, only
translated (or possibly rotated) into a final position in the
completed arrangement.
[0080] The described method and system may be applied in various
implementations and applications in which components which
represent items or concepts and which can be covered or enclosed by
two-dimensional rectangles are arranged in a two-dimensional area.
The implementations and applications may include as examples: the
display of components in which the area is a display or drawing
area; the rectangular packing of components; modeling of problems
using rectangular packing of components; etc.
[0081] The proposed component layout algorithm attempts to produce
a layout which may run quickly, be visually pleasing, respect a
user-defined ordering of the components presented to it as input,
and which may minimize the amount of wasted space when the final
layout is scaled into a rectangular area. The rectangular area may
be optimized according to various specified criteria, for example,
with a specified aspect ratio, with efficiency of packing, with a
minimum area, etc.
[0082] In the display context of the component arrangement,
components to be arranged may be defined as connected components of
a network or graph. Each component may include a collection of
entities (vertices) mutually interconnected by links (edges). A
singleton component may include just one vertex, with no edges.
Singleton components are special in that they can inherit
properties from their single member in a way which would not be
meaningful in a multi-vertex component. For example, an entity
might have a representational type ("Male", "Female", etc.) and a
label ("Bill", "Georgina", etc.). Hence when discussing potential
orderings of graph components, special rules are available for the
singleton components: ordering by type, by label, by label within
type, etc. Graph components may be commonly ordered by some measure
of importance or "size", where size can mean physical drawing size
(width, height, area, etc.), or some graph-based measure, such as
number of vertices (vertex count), number of edges (edge count),
etc.
[0083] Components are assumed to be ordered in a way which is
meaningful to the user. There is no requirement to process
components in an order that is convenient for the algorithm.
[0084] A feature of the proposed algorithm includes a strict
mapping of the user supplied component order into a row-wise or
column-wise placement in the rectangular layout area. By
maintaining this correspondence, the user may always know roughly
where to look in order to find a component of interest. This is in
contrast to the behavior of the packing algorithms described above,
which may sacrifice component order and the user's mental map in
order to enhance the efficiency of the packing.
[0085] The proposed algorithm may be, in essence, a rectangle
packing algorithm, and could be applied in any rectangle packing
context, not simply those where packing order or aesthetic criteria
are just as important as the packing efficiency.
[0086] An example of an application of rectangular packing may be
sprite generation. Sprites may be used to speed up image loading
when loading a web page. Instead of loading all images on the web
page one by one, the images may be combined into a single larger
image--called a sprite--which is then loaded in a single operation.
Sprite generation may be modelled as a rectangle packing problem,
where each image is represented as a rectangle, and the sprite is
just a single enclosing rectangle into which the constituent images
are packed without overlap. It is desirable to pack the images in
the sprite in a way which may minimise the overall sprite size,
since smaller sprites require less download time and consume less
network bandwidth. Hence finding an optimal sprite amounts to
finding a minimum area enclosing rectangle.
[0087] Another example of an application of rectangular packing may
include task scheduling. Task scheduling may be modelled as a
rectangle packing problem. Each job is represented by a rectangle,
where the height is the number of workers needed, and the width is
the amount of time required. The total number of workers is the
height of an enclosing rectangle, and the length of time is the
width. All the job rectangles must be packed into the enclosing
rectangle without overlap. Minimising the total labour cost amounts
to finding a minimum area enclosing rectangle.
[0088] Referring to FIG. 2, a flow diagram 200 shows an example
embodiment of the described method.
[0089] A set of components may be selected or received 201 for
arrangement. The set of components may be any form of
two-dimensional representation of elements or combined elements for
arrangement in a two-dimensional rectangular area. The components
may be disconnected graph components, for example, provided by
entering a graph under consideration from a database. In another
example, the components may be rectangular representations of
amounts or entities.
[0090] Rectangular covers may be determined 202 for the components
if the components are not already provided in rectangular form. A
rectangular cover may be an object that represents the component
within a set of rectangular borders, usually using a minimum area
of rectangle to cover the component.
[0091] An order preference for the components may be determined
203, for example, as received from a user input, or preset for a
given arrangement.
[0092] The order preference may be, for example in the context of a
display of graph components, one of the orders listed below: [0093]
Decreasing order of vertex count. [0094] Decreasing order of
component height. [0095] Decreasing order of Max (component height,
component width). [0096] Decreasing order of any user-defined
measure of component interest or importance. [0097] Alphabetically
by vertex label--singleton components only. [0098] Ordering by
vertex type and label--singleton components only.
[0099] The relevant parameters for each of the components may be
analyzed to order 204 the components according to the order
preference.
[0100] In a first described embodiment, a width w may be selected
205, for example, in the form of the width of the widest component,
or the sum of all components widths.
[0101] The components may be mapped 206 in rows into an infinite
vertical strip of a specified width w, according to the order
preference placing the components in a first direction,
left-to-right or right-to-left. In the described embodiment, the
rows are filled from top to bottom and the top sides of the
bounding rectangular covers of the components aligned. This is the
arrangement described in detail. However, in an alternative
embodiment, the rows may be filled from bottom to top and the
bottom sides of the bounding rectangular covers of the component
are aligned. Components are added to each row until the end of a
row within the width w is reached due to the next component being
too wide to fit into the row within width w.
[0102] The first stage of the method arranges the components into
an infinite vertical strip with a specified width. Constraining the
layout to a fixed width may simplify the packing problem, and the
component placement can be carried out rapidly.
[0103] Before starting a new row beneath the current row, a check
is made 207 to see if there is sufficient space at the lower right
hand end of the current row to accommodate further components in
one or more "sub-rows", without increasing the height or width of
the row.
[0104] This step can reclaim significant amounts of otherwise
wasted space in situations where there is considerable variation in
component heights along a row. Sub-row placement still respects the
guiding direction of the positioning, i.e. left-to-right and
top-to-bottom placement strategy, in contrast to the space
reclamation techniques employed in other strip packing
algorithms.
[0105] In alternative embodiments, the placement strategy may be
from right-to-left, and/or may be with rows built from the bottom
upwards with bottom sides of the bounding rectangle covers of the
components aligned, and with any sub-rows placed above a current
row.
[0106] Alternatively, the roles of the width and height may be
transposed in which the resulting method would arrange components
in columns with corresponding sub-column placements. In such an
embodiment, the described features of sub-rows may be interpreted
to be sub-columns and the left-to-right or right-to-left placement
of components in rows and sub-rows may be interpreted as
top-to-bottom or bottom-to-top placement of components in columns
or sub-columns.
[0107] Once a row or sub-row is completed, the components may be
horizontally justified 208 to create a uniform spacing along the
row and an exact alignment on the left and right row borders. Any
sub-rows may be vertically justified 209 within the main row.
[0108] Once all the components have been placed, it may then be
determined 210 if the desired optimization of the arrangement has
been achieved, for example, a desired aspect ratio which may be set
by a user or pre-defined for a given display. If it has not been
achieved, the method may loop 211 to select a new width at step
205. If the optimization has been achieved, the method may end
212.
[0109] In the example of optimizing the aspect ratio this may be
carried out by calculating the height of the total layout with the
first width w and the aspect ratio. The method may be repeated with
different widths until a target aspect ratio is matched to a
suitable accuracy, or some other drawing quality measure is
optimized. Other optimizations of the arrangement are discussed
further below, but in each case iterations may be carried out of
varying the width w and resultant height of the arrangement to
reach the required optimization.
[0110] As the core placement method is straightforward, the process
runs rapidly, and requires only a small number of trial widths to
achieve convergence.
[0111] The result of the above method is a component layout of:
[0112] Left-to-right, top-to-bottom placement in the order defined
by the user. This preserves the user's mental map of where
components can be found.
[0113] The use of sub-row placement, when possible, to enhance
packing efficiency.
[0114] Horizontal justification along rows and sub-rows.
[0115] Vertical justification of sub-rows within rows.
[0116] Rapid packing to a fixed width to reduce algorithm
complexity and enhance performance.
[0117] Rapid iterative adjustment of the layout width to optimize a
packing or quality measure.
[0118] Some simple adjustments may be made to improve behavior in
common situations.
[0119] Automatic rotation of components may be carried out so that
they align cleanly with the coordinate axes. This may improve the
packing efficiency without changing the component layout itself
(beyond rotation). The rotation may be calculated by determining an
approximate minimum area bounding box enclosing the component. This
is illustrated further with respect to FIG. 11.
[0120] Special treatment may be given to singleton components
(components with just a single vertex). This may be particularly
valuable, since there are often large numbers of singletons in any
large network. In one approach, the proposed algorithm may be used
to pack the non-singleton components into a rectangular region with
a desired aspect ratio. This region is then treated as a single
"super-component", and the algorithm is run for a second time with
the singleton components and the super-component as input. The
final result may be a component layout with the required aspect
ratio, with the non-singleton components in the top left corner,
and the singleton components arranged in a border down the right
side and across the bottom edge of the layout. Alternatively, the
proposed algorithm may be used to pack groups of singleton
components into "super-components" which may then be packed with
the non-singleton components in a second pass through the
algorithm. Many variations on these approaches may be possible.
[0121] Nesting of sub-rows within sub-rows may also be used to
increase the packing efficiency of the component layout, while
still respecting the overall left-to-right and top-to-bottom
character of the packing strategy.
Aspect Ratio, Efficiency, Adjusted Efficiency and Aspect Ratio
Efficiency
[0122] In the context of a display of components, the following
measures of arrangement quality may be used. The individual
components comprising a component layout each have their own
bounding rectangles. In other contexts and applications, other
measures of arrangement quality may be defined and later
optimized.
[0123] Let A denote the total area of these individual bounding
rectangles. The efficiency (e) of a component layout with a
bounding rectangle of width w and height h is defined as e=A/(w*h).
The efficiency is the proportion of the component layout area that
is occupied by the bounding rectangles of its constituent
components. Generally speaking, layouts with high efficiency are to
be preferred, since less space may be wasted on the drawing
area.
[0124] The aspect ratio (R) of the component layout is defined as
R=w/h. If a component layout with aspect ratio R is scaled into a
drawing region with an aspect ratio D which differs substantially
from R, the efficiency of the rescaled drawing will be reduced. For
example, a square drawing will have broad empty side borders when
it is scaled into a landscape region, as shown in FIG. 3.
[0125] In FIG. 3, three components C1, C2, C3 301-303 are drawn in
an approximate square 310 and then scaled to a landscape display
region 320. The border 330 is wasted space and reduces the adjusted
efficiency.
[0126] The adjusted efficiency (e') of a component layout may
correct for this scaling effect, and may be given by the
formula:
e ' = { ( R / D ) e if D > R ( D / R ) e if D .ltoreq. R
##EQU00001##
[0127] Clearly e'.ltoreq.e in all cases. In situations where
matching a desired aspect ratio is more important than the overall
packing efficiency, it is convenient to work with the aspect ratio
efficiency (q), which may be defined as:
q = { ( R / D ) if D > R ( D / R ) if D .ltoreq. R
##EQU00002##
Component Layout Algorithm
[0128] The proposed component layout algorithm comprises two
principal modules:
[0129] Module-1: A core layout module which may arrange components
in a vertical strip of pre-determined width.
[0130] Module-2: An optimization module which may adjust the width
used in module-1 so as to optimize some measure of layout
quality--the adjusted efficiency or aspect ratio efficiency, for
example.
Module-1: Core Layout Module
[0131] This module may arrange the components in rows into an
infinite vertical strip (or horizontal strip if columns are used in
place of rows) with a specified width as described with reference
to FIG. 2. In a row embodiment, components may be placed
left-to-right in a single row, with the top sides of the bounding
rectangles aligned, until the end of the row is reached. Before
starting a new row beneath the current one, a check is made to see
if there is sufficient space at the lower right hand end of the
current row to accommodate further components in a sub-row
placement step, without further increasing the height (or width) of
the row. As each row or sub-row placement is completed, the
components may be justified horizontally to create a uniform
spacing along the row, and an exact alignment on the left and right
row borders. Any sub-rows placed within the main row may also be
justified vertically within the row. This phase of the component
layout is illustrated in FIG. 4.
[0132] In the layout of FIG. 4, twenty components C1-C20 (401-420)
are placed into an approximate square configuration 430. The
components C1-C20 (401-420) are labeled with a user-defined
placement order. The layout includes Row 1 440 which has two
sub-rows 441, 442.
[0133] Sub-row placement may be implemented through the use of an
insertion list. The sub-row placement method is described with
reference to the flow diagrams 500, 550 of FIGS. 5A and 5B. A
similar method may be used for sub-column placement.
[0134] FIG. 5A illustrates a method of determining the best sub-row
packing by examining each candidate insertion point in the main row
insertion list. FIG. 5B illustrates a method of fitting a
collection of sub-rows within a main row, starting at the head of
the insertion list.
[0135] Referring to FIG. 5A, the insertion list is built once a
main row has been constructed 501, and records 502 the candidate
locations from which sub-rows may be started within the free space
below the main row. The insertion points may be stored in a
top-right to bottom-left order, with each successive point being
below and to the left of its predecessor. The first point in the
insertion list is defined to be the top right corner of the main
row, and the last point is defined to be the bottom left corner of
the main row. The valid insertion points are then the interior
points of this list.
[0136] The construction process is illustrated in FIG. 6A described
further below.
[0137] The most visually pleasing sub-row placements may be
obtained when sub-rows are started as far to the left as possible,
provided that this does not generate too great a separation from
the row/sub-row immediately above. For this reason, the insertion
list may be smoothed 503 by merging candidate insertion points that
are very close together vertically. The smoothing process is
illustrated in FIG. 6B, where extra sub-row width may be gained at
little cost in vertical displacement by merging points.
[0138] Once the initial insertion list has been constructed 502 and
smoothed 503, the algorithm may calculate a series of sub-row
placements. A copy of the insertion list may be passed 504 to a
sub-row insertion method shown in FIG. 5B which may return a
sub-row packing.
[0139] It may be determined 505 if the returned sub-row packing is
the current best sub-row packing. If it is not the current best
sub-row packing, then the method may accept the current best
sub-row packing 509.
[0140] If it is the current best sub-row packing, then it may be
recorded 506 as the best sub-row packing and the insertion point
may be removed 507 from the start of the insertion list.
[0141] It may then be determined 508 if any points remain in the
insertion list. If points do remain in the insertion list then the
method may loop to step 504 of passing a copy of the insertion list
to the method of FIG. 5B, to return a sub-row packing.
[0142] If no points remain in the insertion list, the current best
sub-row packing may be accepted 509.
[0143] It should be noted that the sub-row fitting may be performed
on a copy of the initial insertion list, so that each invocation of
the method of FIG. 5B may be independent of the others.
[0144] Referring to FIG. 5B, a method of fitting a collection of
sub-rows within a main row is described starting at the head of the
insertion list.
[0145] A copy of the insertion list is received 551 and a new
sub-row may be started 552. It may be determined 553 if the next
component can fit in the sub-row at the head of the insertion list.
This test can fail if the component is too tall or if the component
is too wide. If it can fit, the component may be added 554 to the
sub-row and the insertion list may be updated 555 before looping to
the next component 553.
[0146] If the next component cannot fit, the sub-row may be
recorded 556 if it is not empty. It may then be determined 557 if
the next component is too tall. If it is too tall, the sub-row
packing may be complete 558 and the collection of all packed
sub-rows may be returned 559.
[0147] If the next component is not too tall (it was too wide), the
first point may be removed from the insertion list 560 and a new
sub-row may be started 552.
[0148] In this way a series of sub-row placements may be generated,
one from each point in the initial insertion list, starting at the
first insertion point (top right), and working backwards to the
last (bottom left). For each completed set of sub-row placements,
the number of components accommodated may be recorded. As long as
this is greater than the number accommodated by the previous set of
sub-row placements, the process may be continued. As soon as the
number decreases, the search may be terminated, and the set of
sub-row placements with the greatest number of accommodated
components may be accepted. In FIG. 6B, for example, the initial
(smoothed) insertion list may contain four insertion points--p1,
p2, p3 and p4. A sub-row placement from p1 may fail to accommodate
any components (by construction). So attention may move to the
insertion point p2 of FIG. 6B. A sub-row placement from this p2 may
accommodate three components (C8, C9, C10), all in a single
sub-row, as shown in FIG. 6C. This may improve on the p1-solution,
and may become the current best choice. Attention then may move to
the insertion point p3 of FIG. 6B (not FIG. 6C--that is a modified
p3). From this p3, no components can be placed, which is certainly
less than three, so the search may terminate here.
[0149] The algorithm described may place sub-rows directly within
each main row. In a generalization of the method, sub-rows may
themselves be placed within sub-rows in a nested manner. This can
improve packing efficiency whilst still respecting the general
left-to-right and top-to-bottom layout style.
[0150] Referring to FIGS. 6A to 6C, the sub-row placement method is
illustrated.
[0151] FIG. 6A illustrates a first full row 600 with placed
components C1-C7 601-607. There are five possible insertion points
p1-p5 621-625. The sub-row insertion list is (p1, p2, p3, p4, p5)
moving from top-right to bottom-left order. Component C3 603 may
occlude C2 602 causing a pruning of the insertion list at point p4
624.
[0152] FIG. 6B illustrates a next step in which a smoothing may
remove the previous insertion point p2 622 adjacent to components
C4 604 and C5 605. The remaining insertion points may be renumbered
p1-p4 631-634. Extra width may be gained at little cost in height.
The updated insertion list is (p1, p2, p3, p4).
[0153] FIG. 6C illustrates a sub-row 650 formed of three components
C8-C10 608-610 inserted at insertion point p2 632. An updated
insertion list (p1, p2, p3, p4) of points p1-p4 641-644 may be
generated following the addition of the sub-row 650.
Module-2: Optimization Module
[0154] Once all components have been placed, the height of the
total layout is known for the width w which has been used and the
resultant layout area may be optimized according to a required
optimization. For example the optimization may be the layout aspect
ratio, the layout efficiency or adjusted efficiency, the layout
area, etc. and these can be calculated.
[0155] The optimization module may seek to maximize the adjusted
efficiency, or the aspect ratio efficiency, or minimize the area of
the layout generated in the core layout module by suitable
selection of the layout width.
[0156] The width of any layout must lie somewhere between the width
of the widest component and the sum of the widths of all
components. Hence there is a bounded range of widths in which to
locate the optimal value, and any stable uni-variate interval
optimization algorithm may be used to find an approximation to the
optimal width. Suitable algorithms include bisection search,
Fibonacci search, and Brent search. These search algorithms may
require only a small number of calls to the fixed-width layout
module (typically no more than 10), and because of the simplicity
of the fixed width placement algorithm itself, the iterative width
adjustment process may run very quickly.
[0157] Referring to FIG. 7, a block diagram illustrates an
embodiment of the described system 700.
[0158] The system 700 may include or has access to a data store 710
for storing components 711 for representation in an arrangement,
which may be shown on a display 720.
[0159] An arrangement system 730 is described for arranging
components in a two-dimensional area. The arrangement system 730
may include three sub-modules a component preparation module 740, a
core layout module 750, and an optimization module 760. However,
functionality of these described modules may be provided in other
combinations of modules.
[0160] The arrangement system 730 may be provided on any data
processing system in which components are configured for
arrangement. The arrangement may be displayed on a hardware display
which may be provided remotely or locally to the arrangement system
730.
[0161] The component preparation module 740 may include a component
selector 741 for selecting or receiving a set of components to be
arranged. A cover module 742 may determine a rectangular cover for
each component. An ordering module 743 may define an order
preference for the arranged components by analyzing the relevant
parameters of each component.
[0162] The components of the arrangement system 730 are described
in terminology relating to a row and sub-row arrangement of
components. However, corresponding components may be provided for
column and sub-column arrangements of components.
[0163] The core layout module 750 may arrange components in a first
stage of the arrangement in a fixed width vertical strip. The core
layout module 750 may include a row module 751 for positioning
component in a full row and a sub-row module 752 for positioning
components in a sub-row. The sub-row module 752 may include
functionality to determine the placement of sub-rows in space under
or above a full row using insertion points as described in relation
to FIG. 5.
[0164] The core layout module 750 may also include a first
justifying module 753 for horizontal justification of components
within a row or a sub-row and a second justifying module 754 for
vertical justification of a sub-row vertically.
[0165] The core layout module 750 may also include a rotating
module 755 for rotating components to align with the axes of the
arrangement.
[0166] The core layout module 750 may also include a
super-component module 756 for arranging non-singleton
components.
[0167] The optimization module 760 may arrange components in a
second stage of the arrangement to optimize a factor of the
arrangement. For example, optimizing the aspect ratio, the packing
efficiency of the arrangement, or minimizing the resultant area of
the arrangement.
[0168] The optimization module 760 may include an arrangement
quality optimization module for optimizing a desired arrangement
quality. The arrangement quality optimization module may be a ratio
determining module 761 for determining an aspect ratio of an
arrangement during iterations. The arrangement quality optimization
module may additionally or alternatively include a packing
efficiency module 762 for determining a packing efficiency of an
arrangement during iterations. The arrangement quality optimization
module may further additionally or alternatively include an area
minimizing module 765 for determining a minimum area during
iterations.
[0169] The optimization module 760 may include a width replacement
module 763 for changing the width of the strip into which the
components are arranged and an iteration module 764 for iterating
the width change until a required aspect ratio or packing
efficiency may be reached.
[0170] Referring to FIG. 8, an exemplary system for implementing
aspects of the invention includes a data processing system 800
suitable for storing and/or executing program code including at
least one processor 801 coupled directly or indirectly to memory
elements through a bus system 803. The memory elements may include
local memory employed during actual execution of the program code,
bulk storage, and cache memories which provide temporary storage of
at least some program code in order to reduce the number of times
code must be retrieved from bulk storage during execution.
[0171] The memory elements may include system memory 802 in the
form of read only memory (ROM) 804 and random access memory (RAM)
805. A basic input/output system (BIOS) 806 may be stored in ROM
804. System software 807 may be stored in RAM 805 including
operating system software 808. Software applications 810 may also
be stored in RAM 805.
[0172] The system 800 may also include a primary storage means 811
such as a magnetic hard disk drive and secondary storage means 812
such as a magnetic disc drive and an optical disc drive. The drives
and their associated computer-readable media provide non-volatile
storage of computer-executable instructions, data structures,
program modules and other data for the system 800. Software
applications may be stored on the primary and secondary storage
means 811, 812 as well as the system memory 802.
[0173] The computing system 800 may operate in a networked
environment using logical connections to one or more remote
computers via a network adapter 816.
[0174] Input/output devices 813 may be coupled to the system either
directly or through intervening I/O controllers. A user may enter
commands and information into the system 800 through input devices
such as a keyboard, pointing device, or other input devices (for
example, microphone, joy stick, game pad, satellite dish, scanner,
or the like). Output devices may include speakers, printers, etc. A
display device 814 is also connected to system bus 803 via an
interface, such as video adapter 815.
[0175] Referring to FIGS. 9A and 9B, a first example set of
components is shown for arrangement in a display. The component
each have rectangular covers 901-921. The first component's
rectangular cover 901 shows the shape of the component 922 in the
form of a collection of vertices interconnected by edges.
[0176] In the displays 900, 950 of FIGS. 9A and 9B, the components
may be ordered.
[0177] In the display 900 of FIG. 9A, a method is used for
displaying the ordered components without sub-row packing. The
components may be displayed in full rows.
[0178] In the display 950 of FIG. 9B, the described method for
displaying the ordered components may be used including sub-row
packing. The resultant display 950 may include a first full row 951
having one sub-row 952, a second full row 953 having three sub-rows
954, 955, 956.
[0179] Referring to FIG. 10, a second example set of components is
shown in which the components 1001-1019 are shown without their
rectangular covers. The components may be in the form of some
multi-vertex components 1001-1004 and some singleton components
1005-1019. The components 1001-1019 may be ordered with the
multi-vertex components 1001-1004 first in order of size.
[0180] The resultant display 1000 may include a first full row 1021
formed of the two largest multi-vertex components 1001, 1002,
followed by a second full row 1022 formed of two multi-vertex
components 1003, 1004 and the first four of the singleton
components 1005-1008.
[0181] The second full row 1022 may have two sub-rows 1023, 1024 of
further singleton components 1009-1019.
[0182] Referring to FIG. 11, the aspect of automatic rotation of
components is illustrated. Rotation may be carried out so that a
component aligns cleanly with the coordinate axes. This may improve
the packing efficiency without changing the component layout itself
(beyond rotation). The rotation may be calculated by determining an
approximate minimum area bounding box enclosing the component.
[0183] In FIG. 11, a component 1100 comprises two vertices 1101,
1102 and an edge 1103. In its initial orientation, the component
1100 is diagonal to the coordinate axes of the display and
therefore its bounding rectangle 1110 is of a square form. If the
component 1100 is rotated to a vertical alignment 1121, its
bounding rectangle 1120 will be a minimum size, in this case tall
and narrow. If the component 1100 is rotated to a horizontal
alignment 1131, its bounding rectangle 1130 may also be reduced to
a minimum size, in this case it will be short and long.
[0184] The generated arrangement of components may have the
technical advantage of optimizing aspects of the arrangement of
components, such as the efficiency of the arrangement packing,
meeting a required aspect ratio within a required area, or
minimizing the resultant area, or whilst arranging the components
in an ordered manner.
[0185] The present invention may be a system, a method, and/or a
computer program product. The computer program product may include
a computer readable storage medium (or media) having computer
readable program instructions thereon for causing a processor to
carry out aspects of the present invention.
[0186] The computer readable storage medium can be a tangible
device that can retain and store instructions for use by an
instruction execution device. The computer readable storage medium
may be, for example, but is not limited to, an electronic storage
device, a magnetic storage device, an optical storage device, an
electromagnetic storage device, a semiconductor storage device, or
any suitable combination of the foregoing. A non-exhaustive list of
more specific examples of the computer readable storage medium
includes the following: a portable computer diskette, a hard disk,
a random access memory (RAM), a read-only memory (ROM), an erasable
programmable read-only memory (EPROM or Flash memory), a static
random access memory (SRAM), a portable compact disc read-only
memory (CD-ROM), a digital versatile disk (DVD), a memory stick, a
floppy disk, a mechanically encoded device such as punch-cards or
raised structures in a groove having instructions recorded thereon,
and any suitable combination of the foregoing. A computer readable
storage medium, as used herein, is not to be construed as being
transitory signals per se, such as radio waves or other freely
propagating electromagnetic waves, electromagnetic waves
propagating through a waveguide or other transmission media (e.g.,
light pulses passing through a fiber-optic cable), or electrical
signals transmitted through a wire.
[0187] Computer readable program instructions described herein can
be downloaded to respective computing/processing devices from a
computer readable storage medium or to an external computer or
external storage device via a network, for example, the Internet, a
local area network, a wide area network and/or a wireless network.
The network may comprise copper transmission cables, optical
transmission fibers, wireless transmission, routers, firewalls,
switches, gateway computers and/or edge servers. A network adapter
card or network interface in each computing/processing device
receives computer readable program instructions from the network
and forwards the computer readable program instructions for storage
in a computer readable storage medium within the respective
computing/processing device.
[0188] Computer readable program instructions for carrying out
operations of the present invention may be assembler instructions,
instruction-set-architecture (ISA) instructions, machine
instructions, machine dependent instructions, microcode, firmware
instructions, state-setting data, or either source code or object
code written in any combination of one or more programming
languages, including an object oriented programming language such
as Smalltalk, C++ or the like, and conventional procedural
programming languages, such as the "C" programming language or
similar programming languages. The computer readable program
instructions may execute entirely on the user's computer, partly on
the user's computer, as a stand-alone software package, partly on
the user's computer and partly on a remote computer or entirely on
the remote computer or server. In the latter scenario, the remote
computer may be connected to the user's computer through any type
of network, including a local area network (LAN) or a wide area
network (WAN), or the connection may be made to an external
computer (for example, through the Internet using an Internet
Service Provider). In some embodiments, electronic circuitry
including, for example, programmable logic circuitry,
field-programmable gate arrays (FPGA), or programmable logic arrays
(PLA) may execute the computer readable program instructions by
utilizing state information of the computer readable program
instructions to personalize the electronic circuitry, in order to
perform aspects of the present invention.
[0189] Aspects of the present invention are described herein with
reference to flowchart illustrations and/or block diagrams of
methods, apparatus (systems), and computer program products
according to embodiments of the invention. It will be understood
that each block of the flowchart illustrations and/or block
diagrams, and combinations of blocks in the flowchart illustrations
and/or block diagrams, can be implemented by computer readable
program instructions.
[0190] These computer readable program instructions may be provided
to a processor of a general purpose computer, special purpose
computer, or other programmable data processing apparatus to
produce a machine, such that the instructions, which execute via
the processor of the computer or other programmable data processing
apparatus, create means for implementing the functions/acts
specified in the flowchart and/or block diagram block or blocks.
These computer readable program instructions may also be stored in
a computer readable storage medium that can direct a computer, a
programmable data processing apparatus, and/or other devices to
function in a particular manner, such that the computer readable
storage medium having instructions stored therein comprises an
article of manufacture including instructions which implement
aspects of the function/act specified in the flowchart and/or block
diagram block or blocks.
[0191] The computer readable program instructions may also be
loaded onto a computer, other programmable data processing
apparatus, or other device to cause a series of operational steps
to be performed on the computer, other programmable apparatus or
other device to produce a computer implemented process, such that
the instructions which execute on the computer, other programmable
apparatus, or other device implement the functions/acts specified
in the flowchart and/or block diagram block or blocks.
[0192] The flowchart and block diagrams in the Figures illustrate
the architecture, functionality, and operation of possible
implementations of systems, methods, and computer program products
according to various embodiments of the present invention. In this
regard, each block in the flowchart or block diagrams may represent
a module, segment, or portion of instructions, which comprises one
or more executable instructions for implementing the specified
logical function(s). In some alternative implementations, the
functions noted in the block may occur out of the order noted in
the figures. For example, two blocks shown in succession may, in
fact, be executed substantially concurrently, or the blocks may
sometimes be executed in the reverse order, depending upon the
functionality involved. It will also be noted that each block of
the block diagrams and/or flowchart illustration, and combinations
of blocks in the block diagrams and/or flowchart illustration, can
be implemented by special purpose hardware-based systems that
perform the specified functions or acts or carry out combinations
of special purpose hardware and computer instructions.
[0193] Improvements and modifications can be made to the foregoing
without departing from the scope of the present invention.
* * * * *