AU771813B2 - Converting path with non-zero winding fill rule or odd-even winding fill rule to a simple outline path - Google Patents
Converting path with non-zero winding fill rule or odd-even winding fill rule to a simple outline path Download PDFInfo
- Publication number
- AU771813B2 AU771813B2 AU34408/02A AU3440802A AU771813B2 AU 771813 B2 AU771813 B2 AU 771813B2 AU 34408/02 A AU34408/02 A AU 34408/02A AU 3440802 A AU3440802 A AU 3440802A AU 771813 B2 AU771813 B2 AU 771813B2
- Authority
- AU
- Australia
- Prior art keywords
- segments
- segment
- original
- band
- path
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Ceased
Links
Landscapes
- Image Analysis (AREA)
Description
S&FRef: 592977
AUSTRALIA
PATENTS ACT 1990 COMPLETE SPECIFICATION FOR A STANDARD PATENT
ORIGINAL
Name and Address of Applicant: Actual Inventor(s): Address for Service: Invention Title: Canon Kabushiki Kaisha 30-2, Shimomaruko 3-chome, Ohta-ku Tokyo 146 Japan Sim Thong Yap Spruson Ferguson St Martins Tower,Level 31 Market Street Sydney NSW 2000 (CCN 3710000177) Converting Path with Non-zero Winding Fill Rule or Odd-even Winding Fill Rule to a Simple Outline Path ASSOCIATED PROVISIONAL APPLICATION DETAILS [33] Country [31] Applic. No(s) AU PR4479 [32] Application Date 19 Apr 2001 The following statement is a full description of this invention, including the best method of performing it known to me/us:- 5815c -1- CONVERTING PATH WITH NON-ZERO WINDING FILL RULE OR ODD- EVEN WINDING FILL RULE TO A SIMPLE OUTLINE PATH Technical Field of the Invention The present invention relates generally to computer graphics and, in particular, to a method and apparatus for converting a path configured in accordance with the non-zero winding fill rule or the odd-even winding fill rule, to a representation of the path. The invention also relates to a computer program product including a computer readable medium having recorded thereon a computer program for converting a path configured in accordance with the non-zero winding fill rule or the odd-even winding fill rule to a representation of the path.
Background In the context of raster-based graphical systems, a polygon is typically defined by a number of points or vertices, where the vertices are interconnected by a plurality of segments forming the polygon. The segments can be curved lines or splines. A path consists of a plurality of edges, where an edge comprises at least two segments with three vertices. Therefore, a path is substantially a general polygon set. Each path has an associated fill rule, which determines how the edges of the path are filled when rendered.
Fill rules are generally based on a winding count for a path. The fill rule generally has an associated winding count which is a value that counts, in some fashion, the number of line segments crossed as a straight line is projected through the path.
The non-zero winding fill rule and the odd-even winding fill rule are two commonly used fill rules for filling a path or determining the interior of a path during the creation or rendering of polygons for computer graphics. The odd-even fill rule states that a given point is inside a polygon if a ray traced from the given point to infinity crosses an odd number of the polygon's line segments. In contrast, the non-zero winding fill rule states that a given point is inside a polygon if a ray traced from the point to 592977.doc -2infinity crosses an unequal number of upward and downward orientated line segments.
The non-zero winding fill rule therefore requires for each line segment to have an associated direction.
Both the non-zero winding fill rule and the odd-even winding fill rule have specific advantages and can be used in different circumstances during the creation or rendering of computer graphics. However, generally both of these fill rules are required to be used in a graphics system to enable a convenient and accurate description of a path.
As a result, all processing applied to a corresponding path has to be able to accommodate both of the above mentioned fill rules. This is not only cumbersome but results in longer development times, more source code and more error prone end products.
One known method for converting a path configured in accordance with the nonzero winding fill rule to a path configured in accordance with the odd-even winding fill rule, utilises a process whereby only input paths configured with the non-zero winding fill rule are accepted and an equivalent output path that can only be interpreted correctly with the odd-even winding fill rule is produced. Thus, in the accordance with this known method it is assumed that all subsequent processing of the output path is performed by interpreting the interior of the output path based on the odd-even winding fill rule.
Although this assumption reduces the variation of fill rules amongst the output paths, this assumption inherently introduces a restriction on all subsequent path processing and descriptions.
The known method mentioned above performs conversion of a path configured in accordance with the non-zero winding fill rule to a path configured in accordance with the odd-even winding fill rule, by calculating all intersections amongst the edges of a path and then tracing through all of the edges separately to detect visible segments. One resulting disadvantage of this method is that it requires more data structures to store all edge intersection points of a path. Further, since edges are traced separately, redundant 592977.doc -3tracing can occur and at every intersection point of two segments the intersecting segments have to be tested to determine if either of the segments are outside or inside a particular polygon described by the path.
In addition, many existing path processing methods, such as "scan conversion", "clipping" and the "intersection test", suffer from constraints in path complexity and fill rule. A majority of these known methods are only able to handle paths with specific fill rules and are generally not able to handle paths with arbitrary complexity. Further, most of these known path processing methods can only achieve optimum processing speed when input paths are relatively simple. Still further, any processing speed gains resulting from the use any of the above existing path processing methods are generally a direct result of using hardware to perform particular simple and repetitive task. Such hardware is generally not able to perform complex calculation and thus handle complex paths.
Summary It is an object of the present invention to substantially overcome, or at least ameliorate, one or more disadvantages of existing arrangements.
According to one aspect of the present invention there is provided a method of converting a path into a representation of said path, said representation comprising at least one edge, each of said edges comprising a plurality of original segments or parts thereof, said method comprising the steps of: dividing a space in which said path is defined into a plurality of bands such that each of said original segments, or parts thereof, have at least one corresponding band; examining each said original segment, or parts thereof, contained within each of said bands and classifying each of said original segments or parts thereof, depending on the position and/or direction of said original segment within a corresponding band; creating further segments within each of said bands depending on the position of each original segment contained within a corresponding band; 592977.doc -4assigning at least one of said original segments or parts thereof, and/or said further segments to be border segments, depending on the position and classification of each of said original segments or parts thereof, and/or said further segments contained within a corresponding band; and combining at least one of said border segments to form at least one edge to produce said representation.
According to another aspect of the present invention there is provided a method of converting a path into a representation of said path, said representation comprising at least one edge, each of said edges comprising a plurality of original segments or parts thereof, said method comprising the steps of: dividing a space in which said path is defined into a plurality of bands, each of said bands being defined by band lines, such that each said band line intersects at least one vertex of at least one edge defined by said path; examining each of said original segments or parts thereof, contained within each of said bands and classifying each of said original segments or parts thereof, depending on the position and/or direction of said original segment within a corresponding band; creating further segments within each of said bands depending on the position of each of said original segments contained within a corresponding band; assigning at least one of said original segments or parts thereof, and/or said further segments, as a border segment depending on the position and classification of each of said original segments or parts thereof, and/or said further segments contained within a corresponding band; and combining at least one of said border segments to form at least one edge to produce said representation.
According to still another aspect of the present invention there is provided a method of converting a path into a representation of said path, said representation 592977.doc comprising at least one edge, each of said edges comprising a plurality of original segments or parts thereof, said method comprising the steps of: dividing a space in which said paths are defined into a plurality of bands, each of said bands being defined by a plurality of band lines, such that each said band line intersects at least one vertex of at least one edge defined by said path; processing each of said bands independently with respect to said plurality of band lines, said processing comprising the following steps for each band: examining each original segment or parts thereof, contained within said band and classifying each original segment or parts thereof, depending on the position and/or direction of said original segment within said band; creating further segments within said band depending on the position of each of said original segments contained within said band; assigning at least one of said original segments or parts thereof, and/or said further segments, as border segments depending on the position and classification of said at least one original segment or parts thereof, and/or said further segment; and combining at least one of said border segments to form at least one edge to produce said representation.
According to still another aspect of the present invention there is provided a method of converting a path into a representation of said path, said representation comprising at least one edge, each of said edges comprising a plurality of original segments or parts thereof, said method comprising the steps of: dividing a space in which said path is defined into a plurality of bands, each of said bands being defined by a plurality of band lines, such that each said band line intersects at least one vertex of at least one edge defined by said path; 592977.doc -6storing a reference associated with each of said original segments according to bands within which a particular original segment or part thereof are contained; processing each of said bands independently with respect to said plurality of band lines, utilising said stored references, said processing comprising the following steps for each band: accessing each original segment or part thereof contained in said band; examining each accessed original segment or part thereof contained in said band and classifying each original segment or parts thereof depending on the position and/or direction of said original segment within said band; creating further segments within said band depending on the position of each accessed original segment; assigning at least one of said original segments or parts thereof and/or said further segments, as a border segment depending on the position and classification of said at least one original segment or said further segment and depending on any intersection of said accessed original segment or part thereof; and combining at least one suitable border segment to form said at least one edge to produce said representation.
According to still another aspect of the present invention there is provided an apparatus for converting a path into a representation of said path, said representation comprising at least one edge, each of said edges comprising a plurality of original segments or parts thereof, said apparatus comprising: division means for dividing a space in which said path is defined into a plurality of bands such that each of said original segments, or parts thereof, have at least one corresponding band; 592977.doc -7examination means for examining each said original segment, or parts thereof, contained within each of said bands and classifying each of said original segments or parts thereof, depending on the position and/or direction of said original segment within a corresponding band; processor means for creating further segments within each of said bands depending on the position of each original segment contained within a corresponding band; assigning means for assigning at least one of said original segments or parts thereof, and/or said further segments to be border segments, depending on the position and classification of each of said original segments or parts thereof, and/or said further segments contained within a corresponding band; and combining means for combining at least one of said border segments to form at least one edge to produce said representation.
According to still another aspect of the present invention there is provided an apparatus for converting a path into a representation of said path, said representation comprising at least one edge, each of said edges comprising a plurality of original segments or parts thereof, said apparatus comprising: division means for dividing a space in which said path is defined into a plurality of bands, each of said bands being defined by band lines, such that each said band line intersects at least one vertex of at least one edge defined by said path; examination means for examining each of said original segments or parts thereof, contained within each of said bands and classifying each of said original segments or parts thereof, depending on the position and/or direction of said original segment within a corresponding band; 592977.doc -8creation means for creating further segments within each of said bands depending on the position of each of said original segments contained within a corresponding band; assigning means for assigning at least one of said original segments or parts thereof, and/or said further segments, as a border segment depending on the position and classification of each of said original segments or parts thereof, and/or said further segments contained within a corresponding band; and combining means for combining at least one of said border segments to form at least one edge to produce said representation.
According to still another aspect of the present invention there is provided a computer readable medium, having a program recorded thereon, where the program is configured to convert a path into a representation of said path, said representation comprising at least one edge, each of said edges comprising a plurality of original segments or parts thereof, said program comprising: code for dividing a space in which said path is defined into a plurality of bands such that each of said original segments, or parts thereof, have at least one corresponding band; code for examining each said original segment, or parts thereof, contained within each of said bands and classifying each of said original segments or parts thereof, depending on the position and/or direction of said original segment within a corresponding band; code for creating further segments within each of said bands depending on the position of each original segment contained within a corresponding band; code for assigning at least one of said original segments or parts thereof, and/or said further segments to be border segments, depending on the position and classification 592977.doc -9of each of said original segments or parts thereof, and/or said further segments contained within a corresponding band; and code for combining at least one of said border segments to form at least one edge to produce said representation.
According to still another aspect of the present invention there is provided a computer readable medium, having a program.recorded thereon, where the program is configured to convert a path into a representation of said path, said representation comprising at least one edge, each of said edges comprising a plurality of original segments or parts thereof, said program comprising: code for dividing a space in which said path is defined into a plurality of bands, each of said bands being defined by band lines, such that each said band line intersects at least one vertex of at least one edge defined by said path; code for examining each of said original segments or parts thereof, contained within each of said bands and classifying each of said original segments or parts thereof, depending on the position and/or direction of said original segment within a corresponding band; code for creating further segments within each of said bands depending on the position of each of said original segments contained within a corresponding band; code for assigning at least one of said original segments or parts thereof, and/or said further segments, as a border segment depending on the position and classification of each of said original segments or parts thereof, and/or said further segments contained within a corresponding band; and code for combining at least one of said border segments to form at least one edge to produce said representation.
According to still another aspect of the present invention there is provided a program stored in a memory medium, where the program is configured to convert a path 592977.doc into a representation of said path, said representation comprising at least one edge, each of said edges comprising a plurality of original segments or parts thereof, said program comprising: code for dividing a space in which said path is defined into a plurality of bands such that each of said original segments, or parts thereof, have at least one corresponding band; code for examining each said original segment, or parts thereof, contained within each of said bands and classifying each of said original segments or parts thereof, depending on the position and/or direction of said original segment within a corresponding band; code for creating further segments within each of said bands depending on the position of each original segment contained within a corresponding band; code for assigning at least one of said original segments or parts thereof, and/or said further segments to be border segments, depending on the position and classification of each of said original segments or parts thereof, and/or said further segments contained within a corresponding band; and code for combining at least one of said border segments to form at least one edge to produce said representation.
According to still another aspect of the present invention there is provided a program stored in a memory medium, where the program is configured to convert a path into a representation of said path, said representation comprising at least one edge, each of said edges comprising a plurality of original segments or parts thereof, said program comprising: code for dividing a space in which said path is defined into a plurality of bands, each of said bands being defined by band lines, such that each said band line intersects at least one vertex of at least one edge defined by said path; 592977.doc -11code for examining each of said original segments or parts thereof, contained within each of said bands and classifying each of said original segments or parts thereof, depending on the position and/or direction of said original segment within a corresponding band; code for creating further segments within each of said bands depending on the position of each of said original segments contained within a corresponding band; code for assigning at least one of said original segments or parts thereof, and/or said further segments, as a border segment depending on the position and classification of each of said original segments or parts thereof, and/or said further segments contained within a corresponding band; and code for combining at least one of said border segments to form at least one edge to produce said representation.
Brief Description of the Drawings One or more embodiments of the present invention will now be described with reference to the drawings, in which: Fig. 1 shows an example of a tree structure, which can be used to define the components of a path; Fig. 1(b) shows an example path; Fig. 2 shows four different segments illustrating a preferred definition of upward and downward segments; Fig. 3(a) is a flow chart showing a method of converting a path configured in accordance with the odd-even winding fill rule or the non-zero winding rule to a simple outline path; Fig. 3(b) shows the definition of the symbols used throughout the following description; 592977.doc -12- Fig. 4 shows six segments (ie. Segments A to F) used to illustrate a lefiness comparison; Fig. 5 is the flow chart showing a method of constructing a segment table for a particular input path; Fig. 6 is a flow chart showing a method of updating an Active Segment Table; Fig. 7 is a flow chart showing a Splitting Detection process for determining if segments on a particular point need to be split; Fig. 8 is a flow chart showing a Split Segment process for separating the ending and starting segments on a particular point; Fig. 9 shows an example of the splitting of segments for a band line; Fig. 10 is a flow chart showing a Split Fill Active Segment Table process; Fig. 11 is a flow chart showing a Fill Active Segment Table process; Figs. 12(a) to 12(d) show a flow chart showing a Horizontal Splitting process for determining the points where a horizontal segment needs to be split; Fig. 13 is a flow chart showing a Split Horizontal Segments process for the splitting of horizontal segments; Fig. 14 shows an example of the Horizontal Splitting process of Figs. 12(a) to (d) being performed on segments of a band line; Fig. 15 is a flow chart showing a Segment Assignment and Edge Creation process for creating edges that form the simple outline path for an input path configured with the non-zero winding fill rule; Figs. 16(a) and show a flow chart showing a Local Minimum Point process for processing an input path configured with the non-zero winding fill rule; Fig. 17 shows the requirements for classifying a segment as a left or right border segment; 592977.doc -13- Fig. 18 is a flow chart showing a Combo Point process for processing an input path configured with the non-zero winding fill rule; Figs. 19(a) and show a flow chart showing a Segment Connection and Edge Creation process for creating edges that form a simple outline path for an input path; Fig. 20 is a flow chart showing a Segment Assignment and Edge Creation process for creating edges that form a simple outline path for an input path configured with the odd-even winding fill rule; Fig. 21 is a flow chart showing a Local Minimum Point process for processing an input path configured with the odd-even winding fill rule; Fig. 22 is a flow chart showing a Combo Point process for processing an input path configured with the odd-even winding fill rule; Fig. 23 is a flow chart showing a Connecting Segment and Edge Creation process for creating edges; Figs. 24(a) and show a flow chart showing a Select Starting Border Segment process for classifying any segment starting from a point after a last ending segment; Figs. 25(a) and show a flow chart showing an Intersection Detection process for detecting intersecting segments; Figs. 26(a) and show a flow chart showing an Intersection Processing process for input paths configured using the non-zero winding fill rule; Fig. 27 is a flow chart showing an Intersection Processing process for input paths configured using the odd-even winding fill rule; Fig. 28(a) shows an example path made up of seven edges; Fig. 28(b) is a conceptual block diagram showing all of the vertices of the path of Fig. 28(a) labelled; Fig. 29 is a flow chart showing a Merging Edges process for merging all open edges to form a simple outline path; 592977.doc -14- Fig. 30 is a schematic block diagram of a general purpose computer upon which arrangements described can be practiced; Fig. 31 is a flow chart showing a Connecting Segment process for connecting border segments; Fig. 32 is a flow chart showing an Update Counter process for updating global and horizontal flags; Fig. 33 is a flow chart showing an Edge Creation process for creating edges at a point; Figs. 34(a) and show a flow chart showing a Select Border Segment process for determining whether a segment is marked as a left or right segment; Fig. 35 is a flow chart showing a method of converting a path into a representation of the path, in accordance with the methods and processes described herein; Fig. 36 is a flow chart showing a further Intersection Processing process for input paths configured using the non-zero winding fill rule; Fig. 37 is a flow chart showing a Split Assign Segment process performed during the process of Fig. 36; Fig. 38 is flow chart showing a Segment Splitting process performed during the process of Fig. 36; Fig. 39 is flow chart showing a Segment Connecting process performed during the process of Fig. 36; Fig. 40 is flow chart showing an Edge Creation process performed during the process of Fig. 36; Fig. 41 is a flow chart showing a further Intersection Processing process for input paths configured using the odd-even winding fill rule; 592977.doc Fig. 42 is flow chart showing a Split Assign Segment process performed during the process of Fig. 41; and Fig. 43 is flow chart showing an Edge Creation process performed during the process of Fig. 41.
Detailed Description including Best Mode Where reference is made in any one or more of the accompanying drawings to steps and/or features, which have the same reference numerals, those steps and/or features have for the purposes of this description the same functions or operations, unless the contrary intention appears.
Some portions of the description that follows are explicitly or implicitly presented in terms of algorithms and symbolic representations of operations on data within a computer memory. These algorithmic descriptions and representations are the means used by those skilled in the data processing arts to most effectively convey the substance of their work to others skilled in the art. An algorithm is here, and generally, conceived to be a self-consistent sequence of steps leading to a desired result. The steps are those requiring physical manipulations of physical quantities. Usually, though not necessarily, these quantities take the form of electrical or magnetic signals capable of being stored, transferred, combined, compared, and otherwise manipulated. It has proven convenient at times, principally for reasons of common usage, to refer to these signals as bits, values, elements, symbols, characters, terms, numbers, or the like.
It should be borne in mind, however, that the above and similar terms are to be associated with the appropriate physical quantities and are merely convenient labels applied to these quantities. Unless specifically stated otherwise, and as apparent from the following, it will be appreciated that throughout the present specification, discussions utilising terms such as "scanning", "calculating", "determining", "replacing", 592977.doc 16- "generating" "initialising", "outputting", or the like, refer to the action and processes of a computer system, or similar electronic device, that manipulates and transforms data represented as physical (electronic) quantities within the registers and memories of the computer system into other data similarly represented as physical quantities within the computer system memories or registers or other such information storage, transmission or display devices.
For ease of explanation, the steps of the methods described below are described with reference to the non-zero winding rule and the odd-even winding rule. However, it is not intended that the present invention be limited to the described methods. For example, the invention may have application to any other fill rule such as the "Winding Counting" fill rule or the "Zero Winding" fill rule. Further, the handling of boundary cases is not specified in the following description for ease of explanation. However, the methods described below can be performed with boundary cases.
A method 3500 of converting an input path configured in accordance with either the odd-even winding fill rule or the non-zero winding rule, into "a simple outline path" which represents the input path, is described below with reference to Figs. 1 to 29 and 31 to 43, and with particular reference to Fig. 35. A simple outline path is herein defined as a path with the following characteristics: the outline path consists of only border segments, where border segments are segments that bound the interior of an input path defined in accordance with the original fill rule of the input path; (ii) the interior of the outline path can be interpreted correctly using either the odd-even winding fill rule or the non-zero winding fill rule; and (iii) the outline path has uniform orientation (ie. clockwise or anti-clockwise) when interpreted with the non-zero winding fill rule (ie. the interior of all edges defined by the outline path, can be either on the left side only or the right side only of all 592977.doc -17segments of an edges when traversing the edge in accordance with the direction of the edges of the path).
Further, for all edges of a simple outline path, no pair of non-consecutive segments within an edge share a vertex and each pair of consecutive segments share exactly one vertex. In the event that two non-consecutive segments within an edge share a vertex, the resulting effect is preferably not similar to an intersection effect. An instance of such a segment is a segment edge an edge describing a line) that contains only two segments two distinct vertices).
A path with the above characteristics is extremely flexible and allows the most advantageous characteristics of both the non-zero winding fill rule and the odd-even fill rule to be exploited.
The input path to be converted in accordance with the methods and processes described herein can be any general path where the edges of the path can define any type of polygon. Each polygon can be of arbitrary complexity and there is no restriction on the location of each polygon relative to one another within a space in which the path is defined.
The method of converting an input path configured using the odd-even winding fill rule or the non-zero winding rule to a simple outline path is preferably practiced using a general-purpose computer system 3000, such as that shown in Fig. 30 wherein the methods and processes of Figs. 1 to 29 and 31 to 43 may be implemented as software, such as an application program executing within the computer system 3000. In particular, the steps of method of converting an input path configured using the odd-even winding fill rule or the non-zero winding rule to a simple outline path are effected by instructions in the software that are carried out by the computer. The software may be divided into two separate parts; one part for carrying out the described methods; and another part to manage the user interface between the latter and the user. The software may be stored in 592977.doc -18a computer readable medium, including the storage devices described below, for example.
The software is loaded into the computer from the computer readable medium, and then executed by the computer. A computer readable medium having such software or computer program recorded on it is a computer program product. The use of the computer program product in the computer preferably effects an advantageous apparatus for converting an input path configured using the odd-even winding fill rule or the nonzero winding rule to a simple outline path.
The computer system 3000 comprises a computer module 3001, input devices such as a keyboard 3002 and mouse 3003, output devices including a printer 3015 and a display device 3014. A Modulator-Demodulator (Modem) transceiver device 3016 is used by the computer module 3001 for communicating to and from a communications network 3020, for example connectable via a telephone line 3021 or other functional medium. The modem 3016 can be used to obtain access to the Internet, and other network systems, such as a Local Area Network (LAN) or a Wide Area Network (WAN).
The computer module 3001 typically includes at least one processor unit 3005, a memory unit 3006, for example formed from semiconductor random access memory (RAM) and read only memory (ROM), input/output (10) interfaces including a video interface 3007, and an I/O interface 3013 for the keyboard 3002 and mouse 3003 and optionally a joystick (not illustrated), and an interface 3008 for the modem 3016. A storage device 3009 is provided and typically includes a hard disk drive 3010 and a floppy disk drive 3011. A magnetic tape drive (not illustrated) may also be used. A CD- ROM drive 3012 is typically provided as a non-volatile source of data. The components 3005 to 3013 of the computer module 3001, typically communicate via an interconnected bus 3004 and in a manner which results in a conventional mode of operation of the computer system 3000 known to those in the relevant art. Examples of 592977.doc -19computers on which the described arrangements can be practised include IBM-PC's and compatibles, Sun Sparcstations or alike computer systems evolved therefrom.
Typically, the application program is resident on the hard disk drive 3010 and read and controlled in its execution by the processor 3005. Intermediate storage of the program and any data fetched from the network 3020 may be accomplished using the semiconductor memory 3006, possibly in concert with the hard disk drive 3010. In some instances, the application program may be supplied to the user encoded on a CD-ROM or floppy disk and read via the corresponding drive 3012 or 3011, or alternatively may be read by the user from the network 3020 via the modem device 3016. Still further, the software can also be loaded into the computer system 3000 from other computer readable medium including magnetic tape, a ROM or integrated circuit, a magneto-optical disk, a radio or infra-red transmission channel between the computer module 3001 and another device, a computer readable card such as a PCMCIA card, and the Internet and Intranets including email transmissions and information recorded on websites and the like. The foregoing is merely exemplary of relevant computer readable mediums. Other computer readable media may alternately be used.
Fig. 35 is a flow chart showing a method 3500 of converting a path into a representation of the path. The representation comprises at least one edge, where each of the edges comprises a plurality of original segments or parts thereof. The steps of the method 3500 are preferably implemented as software resident on the hard disk drive 3010 and being read and controlled in their execution by the processor 3005. The method 3500 begins at step 3501, where a space in which the path is defined is divided into a plurality of bands such that each of the original segments, or parts thereof, have at least one corresponding band. At the next step 3503, each of the original segments or parts thereof, contained within each of the bands, are examined and classified depending on the position and/or direction of the original segment within a corresponding band. The method 3500 592977.doc continues at the next step 3505, where further segments are created within each of the bands depending on the position of each original segment contained within a corresponding band. Then at the next step 3507, at least one of the original segments or parts thereof and/or the further segments, are assigned to be border segments, depending on the position and classification of each of the original segments or parts thereof, and/or the further segments, contained within a corresponding band. The method 3500 concludes at the next step 3509, where the border segments are combined to form at least one edge to produce the representation.
The method 3500 of converting a path into a representation of the path will now be described in further detail.
Fig. 1 shows an example of a tree structure 100 that can be used to define the components of a path. Fig. l(b) shows an example path 102 comprising four edges as seen in Fig. A path is herein defined as comprising one or more edges edge 1) while an edge comprises at least two segments segment 1, segment 2) with three vertices, since an edge with one segment is essentially a dot. The various arrangements described herein can be practiced using edges comprising any number of segments.
All edges of a path are closed (ie. form a closed contour) and all segments are configured with a starting and an ending vertex V 1
V
2
V
3 etc). For example, as seen in Fig. 1 Edge 3 forms a closed contour which starts and ends at the vertex 106. Each vertex is defined by the x and y coordinates of the vertex. There is no limitation on the type of polygon, the complexity of each polygon and the location of each polygon relative to each other in a path. Advantageously, a path can include degenerate cases such as different segments that start and end on the same segment and/or co-linear segments, all of which are highlighted and labelled in Fig. l(b) for the path 102.
592977.doc -21- The fill rule associated with a path is effective for the entire path and determines how the interior of the path as a whole is defined and thus how the path is filled when rendered.
The methods and processes described herein utilise a natural coordinate space where the positive x-axis runs from left to right and the positive y-axis runs from bottom to top. Fig. 2 shows four different segments 200, 201, 202 and 203 configured in accordance with the natural coordinate space. The segment 200 runs upward in the positive y direction whilst the segment 202 runs downward in the negative y direction.
The segment 201 runs in the positive x direction and the segment 203 runs in the negative x direction. A segment runs upward if and only if Y2 Yl OR y4 y3 and x 3 x 4 Similarly, a segment runs downward if y2 yl OR y4 y3 and x 4 x 3 In the method 3500 of converting an input path described herein, the space in which an input path is defined is divided into bands. A band is herein defined as the area that falls between two band lines. These band lines are drawn across each vertex (ie.
starting vertex and ending vertex) of segments of a path with repeated band lines being discarded to avoid redundancy. Configuring the band lines in this manner ensures that all portions of the segments, which span across each band, are straight lines. The bands are preferably processed independently in a bottom up manner. The bands can alternatively be processed in a top down manner with appropriate changes being made to the described methods using different control flows.
Segments at each lower bandline are examined and border segments are assigned to existing or newly created edges. Segments can also be swapped of their edges or be assigned to a newly created edge when segments intersect each other within a band.
Edges can be closed completed) at a lower bandline previously an upper bandline) or when the segments of an edge intersect. Subsequently when all the bands of 592977.doc -22the space in which a path is defined have been processed, some edges will remain unclosed. These unclosed edges can be merged to form closed edges. A resulting simple outline path is formed by each of these edges.
Fig. 3(a) is a flow chart showing a method 300 of converting an input path configured in accordance with the odd-even winding fill rule or the non-zero winding rule to a simple outline path, whereby the simple outline path represents the input path. Fig.
3(b) shows the definition of symbols that are used throughout the description. The steps of the method 300 are preferably implemented as software resident on the hard disk drive 3010 and being read and controlled in their execution by the processor 3005. The method 300 begins at step 301, where a Segment Table (ST) is constructed. The ST contains the definition of each of the bands of the space in which a path is defined. The Segment Table is a global table containing all segments and is preferably sorted into two levels. In the first level, "buckets" containing the distinct y-positions of the starting and ending vertex of each segment, are created and sorted in an increasing manner. Alternatively, if top down processing is utilised then buckets are sorted in a decreasing order. The buckets contain all of the band lines of the space. Within each bucket, segments are then sorted according to the "leftness" of each segment. Graphically, a segment is herein classified as having more leftness (ie. being situated more to the left) than other segments if the segment is located literally more left compared to the other segments, in the space in which the segments are defined. Numerically, a segment with a smaller vertex xcoordinate is considered to be more left than another segment with a larger vertex xcoordinate.
If the starting vertex x-coordinate for two segments is equivalent, the segment with a smaller angle measured from the bandline to the segment, in a clockwise orientation, is considered to have more leftness. Each bucket contains only segments that have a starting vertex with.the y-coordinate that matches the y-coordinate of the bucket 592977.doc -23- (ie. starting at that bandline). The starting vertex of a segment is always the "smaller" vertex. That is, all segments (including horizontal segments) preferably have a default upward direction regardless of the original direction of a particular segment. Due to the direction sensitive nature of the non-zero winding fill rule, the original direction of all segments from a path configured according to the non-zero winding fill rule are stored.
In the method 300 of converting an input path, a leftness comparison is performed to determine the leftness of segments. The leftness comparison is effectively a two level comparison. Firstly, the starting points of each of the segments are compared.
Secondly, within each starting point the angle of each segment starting point from that particular starting point is compared. For example, Fig. 4 shows six segments (ie.
Segments A to Segments A and F are considered to have the most leftness of the Segments A to F, since xl x 3 At the point defined by the coordinates (xl, yl) segment A is considered as having more leftness than segment F since A' F. Further, at point (x 3 segment B has more leftness than segment C since B 0 segment C has more leftness than segment D since C 0 Do, and segment D has more leftness than segment E since D' E'.
Fig. 5 is a flow chart showing a method 500 of constructing the Segment Table (ie. ST) for a particular input path as performed at step 301. Similarly to the method 300, the steps of the method 3500 are preferably implemented as software resident on the hard disk drive 3010 and being read and controlled in their execution by the processor 3005.The method 500 begins at the first step 501, where an edge of the path is selected.
At the next step 503, a segment of the selected edge is selected. The method 500 continues at the next step 505, where if buckets with values of ymax,, and/or Ymin of the segment selected at step 503 do not exist, then buckets are created for ymax and/or Y.in, at the next step 507. Otherwise, the method 500 proceeds to the next step 509, where the 592977.doc -24segment selected at step 503 is inserted into the bucket with value Yinj in the order of decreasing leftness. Then at the next step 511, if there are more segments in the edge, the method 500 returns to step 503. Otherwise the method 500 proceeds to step 513, where if there are more edges in the path, the method 500 returns to step 501. Thus steps 501 to 513 are repeated for every segment of every edge of the path. If two segments are equally as left, the segments are then ordered according to the occurrence of the segment in time (ie. the second segment is inserted after the first segment). The method 500 concludes if there are no more edges in the path at step 513.
Returning to the method 300 of Fig. At step 303, a bucket is selected from the segment table in order from the bottom most bucket to the top most bucket upward for the space in which the path is defined. The method 300 continues at the next step 305, where an Active Segment Table (AST) is created and updated. The AST stores all active segments. A segment is considered active when the segment exists within the current band that is being processed. Thus, the AST allows each bucket to be processed independently. The method 600 of updating the AST, at step 305, will now be described in detail below with reference to the flow chart of Fig. 6.
The steps of the method 600 are preferably implemented as software resident on the hard disk drive 3010 and being read and controlled in their execution by the processor 3005. The method 600 begins at step 601, where a Splitting Detection process is performed. For every point in the AST, the Splitting Detection process tests to determine if segments on the particular point need to be split. A segment on a point needs to be split if the point contains more than one segment incident on the point and the segment under consideration does not end at that particular point (ie. the segment passes through the point). A Splitting Detection process 700 as performed at step 601 will be explained in more detail below with reference to Fig. 7. Similarly to the method 600, the steps of the method 700 are preferably implemented as software resident on the hard disk drive 3010 592977.doc and being read and controlled in their execution by the processor 3005. After the Splitting Detection process 700, the AST is ready to be inserted with new segments from the ST (ie. segments that start from the current bandline). During the insertion, it is possible that new points will be introduced into the AST and if there is more than one new segment starting from the new point, these new segments are sorted in a decreasing leftness order (ie. inheriting their order in the ST). If segments are being inserted amongst existing segments starting from an existing point in the AST, these new segments are inserted after all of the ending segments at that point and the new segments are sorted in a decreasing leftness order amongst segments starting at that point.
In addition, if there are new segments to be inserted into an existing point with only one segment and the segment does not end on that particular point, the existing segment is split before any new segments can be inserted on that particular point. As before all new segments must be inserted after the ending segment and be sorted in a decreasing leftness order. The splitting of existing segments is performed by a Split Fill Active Segment Table process 1000 which will be explained below with reference to Fig.
At the next step 603 of the method 600, a segment is selected from the ST in order from the left most segment to the right most segment of the current bucket. The segment selected at step 603 is preferably assigned the label ST_segment. The method 600 continues at step 605, where a segment is selected from the AST in order from the left most active segment to the right most active segment, and the x-coordinate of the segment selected from the AST is set as the current point. A currentpoint label is preferably assigned to the current point. Then at the next step 607, a test is performed to determine if the x-coordinate of the segment selected from the ST at step 603 is less than the current point value (ie. the value represented by the label currentpoint).
592977.doc -26- If the result of step 607 is true then the method 600 proceeds to step 609, where a test is performed to.determine if the current segment selected from the ST at step 603 is a horizontal segment. Horizontal segments are segments that span across one or more points. Horizontal segments are split at each of these points and these points include points that may or may not be distinct from both the AST and ST. In the methods and processes described herein a Horizontal Splitting process 1200 determines the points where a horizontal segment needs to be split and will be explained in more detail later in this document with reference to the flow chart of Figs. 12 to The actual splitting of horizontal segments is performed by a Split Horizontal Segment process 1300 which will be explained in further detail with reference to the flow chart of Fig. 13. If the result of step 609 is false, then the method 600 proceeds to step 611, where the current segment is inserted into the AST. If the result of step 609 is true, then the method 600 proceeds to step 613, where the Horizontal Splitting process 1200 is performed to split the horizontal segment at each of the points which the segment spans.
The method 600 continues at the next step 615, where if there are any more segments in the current bucket of the segment table then the method 600 proceeds to step 617. Otherwise, the update of the ST segment table) is completed and the method 600 concludes and returns to step 307 of method 300. At step 617, another segment is selected from the segment table in decreasing leftness order and the method 600 returns to step 607. If the result of step 607 is false, then the method 600 proceeds to step 619, where a test is performed to determine whether the x-coordinate of the segment selected from the ST at step 617 is equal to the current point value (ie. currentpoint). If the result of step 619 is false then the method 600 proceeds to step 621. At step 621, if there are more points in the AST then the method 600 returns to step 605.
If the result of step 619 is true, then the method 600 proceeds to step 623 where the Split Fill Active Segment Table process 1000 is performed for the current point. As 592977.doc -27discussed above, the Split Fill Active Segment Table process 1000 will be explained in more detail below with reference to the flow chart 1000 of Fig. Further, as discussed above, if there are new segments to be inserted into an existing point with only one segment and the segment does not end on that particular point, the existing segment is split before any new segment can be inserted on that particular point. Therefore, all existing points in the AST must be tested. However, if there are no more points left in the AST, this test can be omitted and the AST can be filled directly. The filling of the AST is performed by a Fill Active Segment Table process 1100 which will explained in further detail later in this document with reference to the flow chart of Fig. 11. In this connection, the method 600 of Fig. 6 continues at the next step 625, where a test is performed to determine if there are any more points in the AST. A buffer labelled Aflag is preferably used to indicate whether there are any more points in the AST.
If the result of step 625 is true then the method 600 proceeds to step 627 where the Fill Active Segment Table process 1100 is performed and the method 600 concludes and proceeds to step 307 of method 300. The Fill Active Segment Table process 1100 has a self-contained horizontal segment splitting point determination process since there are no more points in the AST. Alternatively, if the result of step 625 is false then the method 600 proceeds to step 629 where a test is performed to determine if there are any more segments in the current bucket of the ST. A buffer labelled S_flag is preferably used to indicate if there are any more segments in the current bucket of the ST. If the result of the test at step 629 is false then the method 600 returns to step 607. Otherwise, the method 600 concludes and proceeds to step 307 of method 300.
Fig. 7 is a flow chart showing the steps of the Splitting Detection process 700 for determining if segments on a particular point need to be split. The process 700 begins at step 701, where a segment is selected from the AST in order from the left most active 592977.doc -28segment to the right most active segment. At the next step 703, a test is performed to determine if the x-coordinate of the next segment on the current bandline is equal to the x-coordinate of the current segment on the current bandline. If the result of the test at step 703 is false then the process 700 proceeds to step 705. Then at step 705, if there are more segments in the AST, then the process 700 returns to step 701. If the x coordinate of the next segment on the current bandline is equal to the x coordinate of the current segment on the current bandline, at step 703, the process 700 proceeds to step 707. At step 707, the current point label (ie. currentpoint) is set to the x-coordinate of the current segment on the current bandline. The process 700 continues at step 709, where a test is performed to determine if the segment selected at step 701 ends at the y-coordinate of the current bucket being processed. If the result of the test at step 709 is false then the process 700 proceeds to step 711, where the selected segment at the current point is split using a Split Segment process 800 as will be explained below with reference to Fig. 8.
The steps of the process 800 are preferably implemented as software resident on the hard disk drive 3010 and being read and controlled in their execution by the processor 3005.
The Split Segment process 800 separates the ending and starting segments on a particular point by creating a new segment after terminating the existing segment on that particular point. The new segment starts from that particular point and ends at the original ending vertex of the terminated segment. The new segment must be inserted after all of the ending segments in a decreasing leftness order. For example, Fig. 9 shows an example of the insertion of new segments 904, 905 and 906 after all of the ending segments 901, 902 and 903 of a current band line 900. As shown in Fig. 9, after the Split Segment process 800 (represented by the arrow of Fig. 9) has been performed, the three segments 901 to 903 are terminated at the point A and new segments 904 to 906 are inserted. The Split Segment process 800 will be explained in more detail below with reference to the flow chart of Fig. 8.
592977.doc -29- If the segment selected at step 701 ends at the y-coordinate of the current bucket being processed, at step 709, then the process 700 proceeds to step 713. At step 713, if there are more segments in the AST then the process 700 proceeds to step 715.
Otherwise, the Splitting Detection process 700 concludes and proceeds to step 603 of the method 600. At step 715, the next segment is selected from the AST. The process 700 continues at step 717, where a test is performed to determine if the x-coordinate at the current bandline of the segment selected at step 715, is equal to the current point. If the result of step 717 is true then the process 700 returns to step 709. Otherwise, the process 700 proceeds to step 719, where if there are more segments in the AST then the process 700 returns to step 703. If there are no more segments in the AST at step 719, then the Splitting Detection process 700 concludes and proceeds to step 603 of the method 600.
Fig. 8 is a flow chart showing the steps of the Split Segment process 800 for splitting segments at a particular point. The Split Segment process 800 creates a new segment after terminating an existing segment on a particular point. The process 800 begins at step 801, where a new segment is created starting at the point defined by coordinates (Xcur, Ybucket) and terminating at the end point of the current segment. At the next step 803, the current segment is terminated at the point defined by the coordinates (Xcur, Ybucket). The process 800 concludes at step 805, where a new segment is inserted after all of the ending segments, at the current point on the current bandline, in a decreasing leftness order, and the process 800 concludes and proceeds to step 713 of process 700.
Fig. 10 is a flow chart showing the steps of the Split Fill Active Segment Table process 1000. The Split Fill Active Segment Table process 1000 is performed if there are new segments to be inserted into an existing point. The steps of the process 1000 are preferably implemented as software resident on the hard disk drive 3010 and being read and controlled in their execution by the processor 3005. The process 1000 begins at step 592977.doc 1001, where both the S_flag and the A flag are set to FALSE indicating that the current bucket of the ST is not empty and that there is at least one more point in the AST. At the next step 1003, a test is performed to determine if the first segment of the current point ends at Ybucket. If the result of step 1003 is false then the process 1000 proceeds to step 1005 where the Split Segment process 800 is performed on the first segment of the current bandline. The process 1000 continues at the next step 1007, where a test is performed to determine if the current segment of the segment table ST_segment) is a horizontal segment. If the result of step 1007 is true then the process 1000 proceeds to step 1009, where the Horizontal Splitting process 1200 is performed as described above.
Otherwise, the process 1000 proceeds to step 1011, where the current segment is inserted into the AST after all ending segments of the current bandline, in order of decreasing leftness of the starting segments.
The process 1000 continues at the next step 1013, where a test is performed to determine if there are any more segments in the current bucket of the ST. If the result of step 1013 is false then the process 1000 proceeds to step 1015 where the S_flag is set to TRUE. Otherwise, the process 1000 proceeds to step 1017, where a next segment is selected from the current bucket of the ST in order from the left-most segment to rightmost segment of the current bucket. The process 1000 continues at the next step 1019, where a test is performed to determine if the x-coordinate on the current bandline for the current segment is equal to the current point value (ie. currentpoint). If the result of step 1019 is true then the process 1000 returns to step 1007. Otherwise, the process 1000 proceeds to step 1021, where a test is performed to determine if there are any more segments in the AST. If the result of step 1021 is false then the process 1000 proceeds to step 1023 where the Aflag is set to TRUE. Otherwise, the process 1000 proceeds to step 1025 where the currentpoint value is set to the next point in the AST, the Split Fill 592977.doc -31 Active Segment Table process 1000 concludes and proceeds to step 625 of the method 600.
Fig. 11 is a flow chart showing the steps of the Fill Active Segment Table process 1100 for filling the AST. The steps of the process 1100 are preferably implemented as software resident on the hard disk drive 3010 and being read and controlled in their execution by the processor 3005. The process 1100 begins at step 1101, where a test is performed to determine if the current segment selected from the ST (ie. ST_segment) is a horizontal segment. If the result of step 1101 is true then the process 1100 proceeds to step 1103, where the point following the point where the current segment starts from in the ST, is selected and is assigned the x-coordinate of the point.
The point where the current segment starts from in the ST point is preferably assigned the label ST_splitpoint. The process 1100 continues at the next step 1104, where a test is performed to determine if STsplitpoint is less than the x-coordinate of the ending vertex for the current segment. If the result of step 1104 is true then the process 1100 continues to step 1105, where the Split Horizontal Segment process 1300 is performed on the current segment. Otherwise, the process 1.100 proceeds to step 1107, where the current segment STsegment) is inserted into the Active Segment Table. Then at the next step 1106, if there are any more points in the ST then the process 1100 returns to step 1103. Otherwise, the process 1100 proceeds to step 1107.
If the result of step 1101 is false, the current segment is inserted into the AST at step 1107 and the process 1100 proceeds directly to step 1109. At step 1109, a test is performed to determine if there are any more segments in the current bucket of the ST. If there are more points in the ST at step 1109, then the process 1100 proceeds to step 1108, where a next segment is selected from the current bucket of the ST and is assigned as the current segment (ie. ST_segment). After step 1108, the process 1100 returns to step 1101.
592977.doc -32- The process 1100 concludes at step 1109 when there are no more segments in the current bucket of the ST, and proceeds to step 307 of the method 300.
Figs. 12(a) to show a flow chart showing the steps of the Horizontal Splitting process 1200 for determining the points where a horizontal segment needs to be split. The steps of the process 1200 are preferably implemented as software resident on the hard disk drive 3010 and being read and controlled in their execution by the processor 3005.
The process 1200 begins at step 1201, where a test is performed to determine if the current point is equal to the x-coordinate on the current bandline for the current segment ST_segment). If the result of step 1201 is false, then the process 1200 proceeds to step 1202 where the current point is selected as the Active Segment Table Split Point (preferably assigned as AST_splitpoint). The process 1200 continues at step 1203, where a test is performed to determine if there are any more segments in the ST. If the result of step 1203 is true, then the process 1200 proceeds to step 1204 where the point, following the point where the current segment starts from in the ST, is selected and this point is assigned the x-coordinate of the point (ie. ST_splitpoint). Otherwise, the process 1200 proceeds to step 1206 where the ST splitpoint is set to contain the xcoordinate of the ending vertex for the current segment (ie. Xmax,,). At the next step 1205, a test is performed to determine if the ST splitpoint is less than the AST_splitpoint. If the result of step 1205 is true then the process 1200 proceeds to step 1209. At step 1209, if the ST_splitpoint is greater than or equal to the x-coordinate of the ending vertex for the current segment (ie. then the process 1200 proceeds to step 1230. At step 1230, the segment selected at step 603 or 617 of the method 600 is inserted into the AST. After step 1230, the process 1200 concludes and proceeds to step 615 of the method 600.
Otherwise, the process 1200 proceeds to step 1212, where the Split Horizontal Segment process 1300 is performed on the current segment.
592977.doc -33- Then at the next step 1214 of the process 1200, if the AST_split_point is greater than or equal to the x-coordinate (ie. Xmax) of the ending vertex for the current segment, ST segment, then the process 1200 proceeds to step 1208. Otherwise, the process 1200 proceeds to step 1215, where the Split Horizontal Segment process 1300 is performed on the current segment ST_segment). At the next step 1217, if there are any more points in the AST then the process 1200 proceeds to step 1216 where the next point in the AST is selected as the AST_split_point. Otherwise, the process 1200 proceeds to step 1218 where the AST_split_point is set to contain the x-coordinate (ie. Xmax) of the ending vertex for the current segment. The process 1200 continues at the next step 1208, where if there are no more points in the ST then the process 1200 returns to step 1206.
Otherwise, the process 1200 proceeds to step 1207 where the next point in the ST is selected as the ST_split_point and the process 1200 returns to step 1205.
If the result of step 1201 is true then the process 1200 proceeds to step 1225, where if there are any more points in the AST then the point after the current_point is selected as the AST_split_point at the next step 1224. Otherwise, the process 1200 proceeds to step 1226, where the AST_splitpoint is set to contain the x-coordinate (ie.
xmax) of the ending vertex for the current segment.
If the result of step 1205 is false, then the process 1200 proceeds to step 1210.
At step 1210, if the ST_split_point is equal to the ASTsplit_point then the process 1200 proceeds to step 1232. At step 1232, if the ST_split_point is less than the x-coordinate of the ending vertex for the current segment (ie. xmax), then the process 1200 proceeds to step 1214. At step 1214, the Split Horizontal Segment process 1300 is performed on the current segment. If the ST_splitpoint is more than the x-coordinate of the ending vertex for the current segment (ie. xmax) at step 1232 then the process 1200 proceeds to step 1230. At step 1230, the segment selected at step 603 (or 1017) of the method 600 is 592977.doc -34inserted into the AST. After step 1230, the process 1200 concludes and proceeds to step 615 of the method 600.
If the ST_split_point is not equal to the AST_split_point at step 1210, then the process 1200 proceeds to step 1211. At step 1211, if the ASTsplit_point is less than the x-coordinate of the ending vertex for the current segment (ie. Xmax), then the process 1200 proceeds to step 1234. Otherwise, the process 1200 proceeds to step 1230. At step 1234, the Split Horizontal Segment process 1300 is performed on the current segment. Then at the next step 1213, if the ST_split_point is less than the x-coordinate of the ending vertex for the current segment (ie. Xmax), then the process 1200 proceeds to step 1214.
Otherwise, the process 1200 proceeds to step 1221.
After step 1214 has been performed on the current segment, the process 1200 continues at the next step 1219 where if there are any more segments in the ST then the process 1200 proceeds to step 1220. At step 1220, the next point in the ST is selected as the ST_split_point and the process 1200 proceeds to step 1221. If the result of step 1219 is false, then the ST_split_point is set to contain the x-coordinate of the ending vertex for the current segment (ie. Xmax). At step 1221, if there are any more points in the AST, then the next point in the AST is selected as the AST_split_point at step 1222 and the process 1200 returns to step 1205. Otherwise, the process 1200 proceeds to step 1223, where ASTsplit_point is set to contain the x-coordinate of the ending vertex for the current segment (ie. Xmax) and the process 1200 proceeds to step 1205.
Fig. 13 is a flow chart showing the steps of the Split Horizontal Segments process 1300 for splitting horizontal segments. The steps of the process 1300 are preferably implemented as software resident on the hard disk drive 3010 and being read and controlled in their execution by the processor 3005. The process 1300 begins at step 1301, where a new segment is created starting at the point defined by the coordinates (split_point, y bucket) and ending at the ending vertex of the current. segment (ie 592977.doc ST segment). In the methods and processes described herein the point defined by the label splitpoint takes the value of either AST_splitpoint or ST_splitpoint depending on where it was in the Horizontal Splitting process 1200. At the next step 1303 of the process 1300, the current segment (ie ST_segment) is terminated at the point defined by the coordinates (splitpoint, y bucket). The process 1300 continues at the next step 1305 where the terminated segment is inserted into the AST after all ending segments at their respective starting points. The process 1300 concludes at step 1307 where the new segment is set as ST_segment.
Fig. 14 shows an example of the Horizontal Splitting process being performed on the segment 1401 for the bandline 1400. As shown in Fig. 14, after the Horizontal Splitting process (represented by the arrow) has been performed on the segment 1401, the new segments 1403, 1405 and 1407 are created where the segment 1403 starts at point A and ends at the point defined by the coordinates (splitpoint, y bucket).
Returning to the method 300 of Fig. after the AST has been updated and all of the active segments of the current bucket processed, at step 305, the process 300 proceeds to step 307. At step 307 a Segment Assignment and Edge Creation process 1500 is performed where the edges that form the simple outline path are created and border segments are assigned to the created edges. The Segment Assignment and Edge Creation process 1500 differs for input paths configured with the odd-even winding fill rule and input paths configured with the non-zero winding fill rule.
Fig. 15 is a flow chart showing the Segment Assignment and Edge Creation process 1500 for creating the edges that form the simple outline path for an input path configured with the non-zero winding fill rule. The steps of the process 1500 are preferably implemented as software resident on the hard disk drive 3010 and being read and controlled in their execution by the processor 3005. The process 1500 begins at the first step 1501, where a global counter (preferably labelled g_counter) is reset to zero.
592977.doc -36- The global counter (ie g_counter) is used to identify new border segments and is updated constantly based on the non-zero winding fill rule to reflect the correct counter value for a segment at any time. Also at step 1501, a horizontal counter (preferably labelled h_counter) is reset to INACTIVE indicating that no horizontal segments have been encountered in the current bucket. The horizontal counter (h_counter) is set to ACTIVE when horizontal segments are encountered at a point and is reset (ie. to INACTIVE) at the next point pending any horizontal segments. Then at the next step 1503, a point is selected from the AST and the point is assigned as the current point as currentpoint). The AST is processed point by point from left to right in an increasing xcoordinate order. The process 1500 continues at step 1505, where for every point, the first segment of the current point is examined in order to classify the point as a "combo point" or a "local minimum point". A combo point is a point having a first segment ending on the point. A local minimum point is a point having a first segment starting from the point. Horizontal segments that start from the immediately previous point and end at the current point must also be taken into account. A single segment that passes through the current point is ignored. If the point selected at step 1503 is a combo point or the previous point has any horizontal segment that ends on the selected point, at step 1505, then the process 1500 proceeds to step 1507. At step 1507, the point selected at step 1503 is processed by the Combo Point process 1800 for an input path configured with the nonzero winding fill rule, which will now be explained with reference to the flow chart of Fig. 18.
Steps 1801 to 1807 of the flow chart of Fig. 18, identify the first border segment that ends at the current point (ie. the point selected at step 1503 and assigned the label currentpoint). This involves a search, which must include any border horizontal segments starting from the immediate previous point and ending at the current point.
Steps 1801 to 1807 also identify the last border segment that ends at the current point.
592977.doc -37- Steps 1809 and 1811 of the process 1800 create new vertices for all edges of the border segments. Further, closed edges, indicated by the edge's right and left segment ending on the current point, together with all non-border ending segments are removed from the current point. The steps of the process 1900 are preferably implemented as software resident on the hard disk drive 3010 and being read and controlled in their execution by the processor 3005. The process 1800 begins at step 1801 where a test is performed to determine if the previous point has horizontal segments, as defined above, starting from it. If the result of step 1801 is true, then the process 1800 proceeds to step 1803 where the first ending segment buffer (preferably assigned the label first_ending_segment) is set to contain the first border horizontal segment, if such a horizontal segment exists.
Otherwise, the first_ ending_segment buffer is set to contain the first ending segment of the current point. If the result of step 1801 is false, the firstending_segment buffer is set to contain the first_ ending_border segment at the current point. At the next step 1807, the last ending segment buffer (preferably assigned the label last_ending_segment) is set to contain the last ending border segment of the point selected at step 1503 of the process 1500. The process 1800 continues at step 1809, where for all of the ending border segments between and including the segments pointed to by the first_ending_segment and the last_ending_segment buffers, a node with a vertex defined by the point (xcur,y bucket) is inserted into the left/right wing of the first and last ending segment's respective edges depending on whether the segments have been classified as a "left" or "right" border segment. The requirements for classifying a segment as a left or right border segment are shown in Fig. 17. In this connection, the methods and processes described herein utilise a counter which is assigned to each segment. A segment is classified as a left border segment if the segment is an upward segment, as discussed above, and the counter associated with the particular segment has a value of zero or the segment is a downward segment and the counter associated with the segment has a value of zero. Alternatively, a 592977.doc -38segment is classified as a right border segment if the segment is a downward segment and the counter associated with the segment has a value of one or the segment is an upward segment and the associated counter has a value of negative one.
The process 1800 continues at step 1811, where all ending border segments belonging to the same edge and all non-border ending segments on the current point are removed from the AST. At steps 1813 to 1817 of the process 1800, segments starting from the current point are processed by a Segment Connection and Edge Creation process 1900, as shown in Figs. 19(a) and whereby for each border segment starting from the current point, new edges are created. The Segment Connection and Edge Creation process 1900 will be explained below with reference to the flow chart of Figs. 19(a) and If there is a border segment remaining at step 1815, the remaining segment is connected to the first ending segment by a Connecting Segment process 3100 which will be explained below with reference to the flow chart of Fig. 31.
At step 1813 of the process 1800, a test is performed to determine if there is any segment starting at the current point. If the result of step 1813 is false, then all remaining ending segments on the current point are removed from the AST, at step 1817.
Otherwise, the process 1800 proceeds to step 1815 where the Segment Connection and Edge Creation process 1900 is performed.
The process 1900 begins at step 1901 with the selection of a segment starting at the current point (hereinafter referred to as the selected segments). The segments are selected in order of decreasing leftness, as discussed above, for the current bandline.
Then at the next step 1903, the process 1900 proceeds to step 1903 where an Update Counter process 3200, as seen in Fig. 32, is performed for the segment selected at step 1901. The Update Counter process 3200 assigns the value of the global counter (i.e.
g_counter) to the current segment selected at step 1901, and updates the global counter based on the direction of the segment. The horizontal flag (ie. hflag) is set to contain the 592977.doc -39value of the g_counter if the segment selected at step 1901 is a horizontal segment. The Update Counter process 3200 will now be explained below with reference to the flow chart of Fig 32.
The Update Counter process 3200 updates the global and horizontal flags during the process 1900. The steps of the process 3200 are preferably implemented as software resident on the hard disk drive 3010 and being read and controlled in their execution by the processor 3005. The process 3200 begins at step 3201 where a test is performed to determine if the current segment, selected at step 1901, is a horizontal segment. If the current segment, selected at step 1901, is not a horizontal segment step 3201, then the process 3200 proceeds to step 3203 where the counter associated with the segment is set to the value of the g_counter. The value of the g counter is updated based on the direction of the segment selected at step 1901. The process 3200 concludes when the g_counter has been updated.
If the current segment selected at step 1901 is a horizontal segment at step 3201, then the process 3200 proceeds to step 3207. At step 3207, if the h_flag is set to INACTIVE, as discussed above, then the process 3200 proceeds to step 3209 where the hflag is set to the value of the g_counter. If the hflag is not set to INACTIVE at step 3207, then the process 3200 proceeds directly to the next step 3211, where the counter associated with the segment selected at step 1901 is set to contain the hflag. At the next step 3213, the value of the hflag is updated based on the direction of the segment selected at step 1901, and the process 3200 concludes.
Returning to the process 1900 of Figs. 19(a) and at the next step 1905, a counter associated with the segment selected at step 1901 is tested to determine if the current segment selected at step 1901 is a left border segment, as discussed above with reference to Fig. 17. If the result of step 1905 is true then the process 1900 proceeds to step 1907. At step 1907, if a leftsegment buffer is empty then the process 1900 proceeds 592977.doc to step 1909 where the left_segment buffer is set point to the segment selected at step 1901 and the selected segment is marked as a left segment. The process 1900 continues at step 1911, where if there are more segments at the current point then the process 1900 returns to step 1901.
If the result of step 1905 is false then the process 1900 proceeds to step 1913, where the counter associated with the segment is tested to determine if the current segment selected at step 1901 is a right border segment, as discussed above with reference to Fig. 17. If the result of step 1913 is true then the process 1900 proceeds to step 1915.
At step 1915, if a rightsegment buffer is empty then the process 1900 proceeds to step 1917 where a right_segment buffer is set to contain the segment selected at step 1901 and thle selected segment is marked as a right segment. After step 1917, the process 1900 continues at step 1911, where if there are more segments at the current point then the process 1900 returns to step 1901.
If the result of step 1907 is false then the process 1900 proceeds directly to step 1919 where a next_leftsegment buffer is set to contain the segment selected at step 1901 and the selected segment is marked as a left segment. At the next step 1921, a lastsegment pointer is set to point to the nextleftsegment buffer. Similarly, if the result of step 1915 is false then the process 1900 proceeds directly to step 1923 where a next rightsegment buffer is set to contain the segment selected at step 1901 and the selected segment is marked as a right segment. Then at the next step 1925, a lastsegment pointer is set to point to the next_right_ segment buffer.
The process 1900 continues at the next step 1927, as shown in Figs. 19(a) and where if both the next rightsegment and the next left segment buffers are not empty then the process 1900 proceeds to step 1911. Otherwise the process 1900 proceeds to step 1929, where an Edge Creation process 3300, as seen in Fig. 33, is performed on the buffered segments to create a new edge. Four border segments (ie. two left and two 592977.doc -41right border segments) are preferably buffered before the Edge Creation process 3300 is performed. The Edge Creation process 3300 will now be described with reference to the flow chart of Fig. 33.
When creating new edges, priority is given to segments that are on top of each other (ie. co-linear segments). New edges that have been created are marked as starting from the current point and the two segments that form each particular edge are assigned as owned by the edge, which the two segments form. The steps of the process 3300 are preferably implemented as software resident on the hard disk drive 3010 and being read and controlled in their execution by the processor 3005. The process 3300 begins at step 3301 where if the last_segment pointer points to the next_left_segment buffer then the process 3300 proceeds to step 3303. At step 3303, if the segments contained in the next_right_segment buffer and the left_segment buffer are co-linear then the process 3300 proceeds to step 3305, where a new edge is created with the segments pointed to by the nextright_segment and left_segment buffers. At the next step 3307, the left_segment buffer is set to the next_left_segment buffer and the process 3300 concludes.
If the segments pointed to by the nextright_segment buffer and the left_segment buffer are not co-linear at step 3303, then the process 3300 proceeds to step 3309, where a new edge is created with the segments contained in the right_segment and the left_segment buffers. Then at the next step 3311, the left_segment buffer is set to point to the next_left_segment buffer, the right_segment buffer is set to the nextright_segment buffer, and the process 3300 concludes.
If the last_segment pointer is not pointing to the next_left_segment buffer at step 3301 then the process 3300 proceeds to step 3313. At step 3313, if the next_leftsegment buffer and the right_segment buffer are co-linear then the process 3300 proceeds to step 3315. Otherwise the process 3300 proceeds to step 3309. At step 3315, a new edge is created with the segments pointed to by the next_left_segment and the right_segment 592977.doc -42buffers. The process 3300 concludes at the next step 3317 where the nextightsegment buffer is set to the rightsegment buffer.
Returning to the process 1900, if there are no more segments at the current point at step 1911, then the process 1900 proceeds to step 1931 where the Connecting Segment process 3100 is performed for the current point. As discussed above, the process 3100 connects any left-over border segments to the first ending segment. The process 1900 concludes at the next step 1933 where the h_flag is set to INACTIVE. The Connecting Segment process 3100 will now be explained. The steps of the process 3100 are preferably implemented as software resident on the hard disk drive 3010 and being read and controlled in their execution by the processor 3005.
The process 3100 begins at step 3101, where if both the leftsegment and the rightsegment buffers are not empty then the process 3100 proceeds to step 3103. At step 3103, if either the next_left_segment or the next_ right_segment buffers are not empty then the process 3100 proceeds to step 3105. At step 3105, a test is performed to determine if the lastsegment pointer points to the next_leftsegment buffer. If the result of step 3105 is true then the process 3100 proceeds to step 3107, where the lastsegment pointer is set to point to the next rightsegment buffer. If the result of step 3105 is false then the process 3100 proceeds to step 3109, where the lastsegment pointer is set to point to the next_leftsegment buffer. The process 3100 continues at the next step 3111, where the Edge Creation process 3300 is performed for the left over segment. Then at the next step 3113, the left over segment is assigned to the edge of the first ending segment (preferably labelled as first_ending_segment). Also at step 3113, the left over segment is marked as left or right depending on the first ending segment.
If the result of step 3101 is false, then the process 3100 proceeds to step 3117.
At step 3117, if either the leftsegment or the rightsegment buffers are not empty then the process 3100 proceeds to step 3113. Otherwise, the process 3100 proceeds directly to 592977.doc -43step 3119. If the result of step 3103 is false, then the process 3100 proceeds to step 3119.
At step 3119, a new edge is created with the left (ie. left-segment) and the right (ie.
rightsegment) segments. The process 3100 concludes after step 3119.
Returning to the process 1500 of Fig. 15, if the first point is not a Combo Point, then the process 1500 proceeds to step 1509. At step 1509, if the first segment from the current point selected at step 1503), does not start at the current bandline then the process 1500 proceeds to step 1515. At step 1515, the g_counter is updated based on the direction of the segment that passes through the current point currentpoint). At the next step 1513, if there are any more points left in the AST then the process 1500 returns to step 1503. Otherwise, the process 1500 concludes and proceeds to step 309 of the method 300. Alternatively, if the first segment of the current point, selected at step 1503, starts at the current bandline, at step 1509, then the point is classified as a Local Minimum Point and the point is processed by a Local Minimum Point process 1600, as seen in Figs. 16(a) and for an input path configured with the non-zero winding fill, at the next step 1511 before proceeding to step 1513. The Local Minimum Point process 1600 for an input path configured with the non-zero winding fill rule will now be explained with reference to the flow chart of Figs. 16(a) and In accordance with the Local Minimum Point process 1600, segments are processed one at a time in the order that the segments are arranged (ie. in order of decreasing leftness). For a local minimum point, all segments are new (ie. all segments start at the current bandline). Therefore, the global counter (ie. g_counter) value is assigned to each of the segments and then updated based on the direction of each of the segments at the local minimum point, utilising the Update Counter process 3200 of Fig.
32.
The Local Minimum Point process 1600 begins at steps 1601 where a segment from the current point selected at step 1503) is selected in order of decreasing 592977.doc -44leftness. Then at the next step 1603, the process 1600 proceeded to step 1603 where the Update Counter process 3200 is performed for the segment selected at step 1601. As discussed above, the Update Counter process 3200 assigns the value of the counter associated with the current segment selected at step 1601, and updates the counter based on the direction of the segment.
At the next step 1605 of the process 1600, a counter associated with the segment selected at step 1601 is tested together with the direction of the segment in order to determine if the segment selected at step 1601 is a left border segment (ie. the counter and direction associated with the segment selected at step 1601, indicates if the segment is a Left or Right border segment. For example, if the counter associated with the segment has a value of zero and the segment is an upward segment then the segment is classified as an upward left border segment). If the result of step 1605 is true then the process 1600 proceeds to step 1607. At step 1607, if the left_segment buffer is empty then the process 1600 proceeds to step 1609 where the leftsegment buffer is set to contain the segment selected at step 1601 and the selected segment is marked as a left segment. The process 1600 continues at step 1611, where if there are more segments at the current point then the process 1600 returns to step 1601.
If the result of step 1605 is false then the process 1600 proceeds to step 1613, where the counter associated with the current segment and the direction of the current segment is tested and the direction of the segment is determined in order to test if the segment selected at step 1601 is a right border segment, as discussed above with reference to Fig. 17. If the result of step 1613 is true then the process 1600 proceeds to step 1615.
At step 1615, if the rightsegment buffer is empty then the process 1600 proceeds to step 1617 where the rightsegment buffer is set to contain the segment selected at step 1601 and the selected segment is marked as a right segment. After step 1617, the process 1600 592977.doc continues at step 1611, where if there are more segments at the current point then the process 1600 returns to step 1601.
If the result of step 1607 is false then the process 1600 proceeds directly to step 1619 where a nextleftsegment buffer is set to contain the segment selected at step 1601 and the selected segment is marked as a left segment. Then at the next step 1621, the lastsegment pointer is set to point to the next_left_segment buffer. Similarly, if the result of step 1615 is false then the process 1600 proceeds directly to step 1623 where the nextrightsegment buffer is set to contain the segment selected at step 1601 and the selected segment is marked as a right segment. At the next step 1625, the lastsegment pointer is set to point to the next rightsegment buffer.
As discussed above, when creating new edges, priority is given to co-linear segments. New edges that have been created are marked as starting from the current point and the two segments that form each particular edge are assigned as owned by the edge, which the two segments form. In order to establish priority for co-linear segments, two left segments and two right segments are buffered prior to creating the new edge, as discussed above. As soon as the left and right segments have been buffered, a new edge can be created and marked as starting from the current point. The left and right segments of the new edge are marked as left and right respectively and are assigned as owned by the newly created edge. Those skilled in the relevant art will appreciate that the number of border segments at a local minimum point is always even and that there will always be an equal number of left and right segments. Therefore, the process 1600 continues at the next step 1627, as shown in Figs. 16(a) and where if both the next rightsegment and the next_leftsegment buffers are empty then the process 1600 proceeds to step 1611.
Otherwise the process 1600 proceeds to step 1629, where the Edge Creation process 3300 of Fig. 33 is performed for the buffered segments.
592977.doc -46- After the process 3300 has been performed at step 1629, the process 1600 proceeds to step 1611. If there are no more segments left at the current point at step 1611, then the process 1600 proceeds to step 1631 where if both the leftsegment and the right_segment buffers are not empty then the process 1600 proceeds to step 1633. At step 1633, a new edge is created with the segments pointed to by the left_segment and rightsegment buffers. After step 1633, the process 1600 proceeds to step 1635 where the horizontal counter hcounter) is set to INACTIVE. If both the left_segment and the rightsegment buffers are empty at step 1631, then the process 1600 proceeds directly to step 1635, the process 1600 concludes and proceeds to step 1513 of the process 1500 as seen in Fig. 15. The steps of the process 1600 are preferably implemented as software resident on the hard disk drive 3010 and being read and controlled in their execution by the processor 3005.
Fig. 20 is a flow chart showing a Segment Assignment and Edge Creation process 2000 for creating the edges that form a simple outline path for an input path configured with the odd-even winding fill rule. In contrast to the Segment Assignment and Edge Creation process 1500 for paths configured with the non-zero winding rule, every segment of the paths configured with the odd-even winding rule are border segments. Further, a global flag (preferably labelled g_flag) is used in the process 2000 compared to a global counter (ie. g_counter) used in the process 1500. The global flag is used to classify border segments into left/right segments of an edge and is initialised to
RIGHT.
The steps of the process 2000 are preferably implemented as software resident on the hard disk drive 3010 and being read and controlled in their execution by the processor 3005. The process 2000 begins at step 2001 where a buffer labelled as g_flag is initialised to RIGHT. At the next step 2003, a point is selected from the AST. The AST is processed point by point from left to right in increasing x-coordinate order. The process 592977.doc 47- 2000 continues at step 2004, where for every point, the first segment at that point is examined in order to classify the point as a "combo point" or a "local minimum point".
The point selected at step 2003 is classified as a combo point if the first segment from the point ends at the current bandline or if the previous point has any horizontal segment that ends on the point selected at step 2003. Again, a single segment that passes through a point is ignored. Then at the next step 2007, if the first segment from the point selected at step 2003 starts at the current bandline, then the point is classified as a Local Minimum Point and the point is processed by a Local Minimum Point process 2100, as seen in Fig.
21, for an input path configured with the odd-even winding fill rule at the next step 2009 before proceeding to step 2011. Otherwise, the process 2000 proceeds to step 2013, where if the g_flag is set to RIGHT then the process 2000 proceeds to step 2017. At step 2017, the g_flag is set to LEFT. If the g_flag is not set to RIGHT at step 2013, then the process 2000 proceeds to step 2015, where the g flag is set to RIGHT before the process 2000 proceeds to step 2011. The Local Minimum Point process 2100 for an input path configured with the odd-even winding fill rule will now be explained with reference to the flow chart of Fig 21.
For a local minimum point, all segments are new (ie. all segments start at the current bandline). The global flag (ie. g_flag) is used to determine whether the first segment is marked as a left or right segment. Subsequent segments are marked by alternating the left/right markings. Each pair of left and right segments for a current point will form an edge in the simple outline path resulting from the methods and processes described herein. The process 2100 begins at step 2101, where a segment is selected from the current point (ie. the point selected at step 2003), in order of decreasing leftness. At the next step 2103, a Select Border Segment process 3400, as seen in Figs. 34(a) and is performed for the current point in order to determine whether the first segment is marked as a left or right segment and for marking subsequent segments by alternating the 592977.doc -48left/right markings. The steps of the process 2100 are preferably implemented as software resident on the hard disk drive 3010 and being read and controlled in their execution by the processor 3005. The Select Border Segment process 3400 will now be explained with reference to the flow chart of Figs. 34(a) and The steps of the process 3400 are preferably implemented as software resident on the hard disk drive 3010 and being read and controlled in their execution by the processor 3005.
The process 3400 begins at step 3401, where a test is performed to determine if the g_flag is set to RIGHT. If the result of step 3401 is true then the process 3400 proceeds to step 3402, where a test is performed to determine if the left_segment buffer is empty. If the result of step 3402 is true, then the process 3400 proceeds to step 3405 where the left_segment buffer is set to contain the segment selected at step 2101 and the selected segment is marked as a left segment. Then at the next step 3407, the next segment from the current point (ie. the point selected at step 2003) is selected in order of decreasing leftness. The process 3400 continues at the next step 3409, where the right_segment buffer is set to contain the segment selected at step 3407, the segment selected at step 3407 is marked as a right segment and the process 3400 concludes and proceeds to step 2105 of the process 2100.
If the result of step 3402 is false then the process 3400, of Figs. 34(a) and proceeds to step 3411, where the nextleftsegment buffer is set to contain the segment selected at point 2101 and the selected segment is marked as a left segment. At the next step 3413, the next segment from the current point (ie. the point selected at step 2003) is selected in order of decreasing leftness. The process continues at the next step 3415, where the next right_segment buffer is set to contain the segment selected at step 3413, and the segment selected at step 3413 is marked as a right segment. Then at the next step 3417, the lastsegment pointer is set to point to the next rightsegment buffer and the process 3400 concludes and proceeds to step 2105 of the process 2100.
592977.doc -49- If the result of step 3401 is false then the process 3400 proceeds to step 3419, where a test is performed to determine if the rightsegment buffer is empty. If the result of step 3419 is true, then the process 3400 proceeds to step 3421 where the rightsegment buffer is set to contain the segment selected at step 2101 and the selected segment is marked as a right segment. At the next step 3423, the next segment from the current point (ie. the point selected at step 2003) is selected in order of decreasing leftness. The process 3400 continues at the next step 3425, where the leftsegment buffer is set to contain the segment selected at step 3423, the segment at step 3423 is marked as a right segment, and the process 3400 concludes and proceeds to step 2105 of the process 2100.
If the result of step 3419 is false then the process 3400 proceeds to step 3427, where the next rightsegment buffer is set to contain the segment selected at step 2101 and the selected segment is marked as a right segment. Then at the next step 3429, the next segment from the current point (ie. the selected at step 2003) is selected in order of decreasing leftness. The process 3400 continues at the next step 3431, where the next_left_segment buffer is set to contain the segment selected at step 3429, and the segment selected at step 3429 is marked as a left segment. At the next step 3433, the lastsegment pointer is set to point to the next_leftsegment buffer, and the process 3400 concludes and proceeds to step 2105 of the process 2100.
Returning to the process 2100, of Fig. 21, after the process 3400 has been performed for the current point currentpoint) at step 2103, the process 2100 proceeds to step 2105. At step 2105, if both the next rightsegment and the next_left_segment buffers are not empty, then the process 2100 proceeds to step 2107. If the result of step 2105 is false then the process 2100 proceeds directly to step 2109, where a test is performed to determine if there are any more segments at the current point. At step 2107, the Edge Creation process 3300 is performed for the current point and the process proceeds to step 2109. As with paths configured in accordance with the non-zero 592977.doc winding rule, four border segments (ie. two left and two right segments) are preferably buffered before the process 3400 is performed at step 2107. The process 2100 continues at the next step 2109, where if there are more segments at the current point then the process 2100 returns to step 2101. Otherwise the process 2100 proceeds to step 2111, where a test is performed to determine if the leftsegment and the rightsegment are both not empty. If the result of step 2111 is true, then the process 2100 proceeds to step 2113, where a new edge is created with the leftsegment and the right_segment. Otherwise, the process 2100 concludes and proceeds to step 2011 of the process 2000.
Returning to the process 2000, of Fig. 20, if the first segment from the point selected at step 2003, ends at the current bandline or if the previous point has any horizontal segment that ends on the current point at step 2004, then the current point (i.e.
currentpoint) is classified as a combo point and the process 2000 proceeds to step 2005.
At step 2005, the combo point process 2200, as seen in Fig. 22, for an input path configured with the odd-even winding fill rule is performed on the point selected at step 2003. The combo point process 2200 for an input path configured with the odd-even winding fill rule will be explained in the following paragraph with reference to the flow chart of Fig. 22. The process 2000 continues at step 2011, where if there are any more points left in the AST then the process 2000 returns to step 2003. Otherwise, the process 2000 concludes and proceeds to step 309 of the method 300 of Fig. 3(a).
In the Combo Point process 2200 for an input path configured with the odd-even winding fill rule of Fig. 22, the first ending segment (labelled as first_ending segment) and the last ending segment (labelled as last_ending_segment) of the current point are first identified. The first_ending segment buffer contains the first horizontal segment that starts from the immediate previous point and ends on the current point if a horizontal segment exists. New vertices are inserted into each respective edge of each segment between and including the first_ending_segment and the last_ending_segment, closed 592977.doc -51edges (ie. symbolised by the right and left segment of the edge ending on the current point) are identified and the segments of the closed edges are removed from the current point. The steps of the process 2200 are preferably implemented as software resident on the hard disk drive 3010 and being read and controlled in their execution by the processor 3005. The process 2200 begins at step 2201, where a test is performed to determine if the previous point has a horizontal segment starting from it. If the result of step 2201 is true, then the process 2200 proceeds to step 2202, where the firstending_segment buffer is set to contain the first horizontal segment starting from the previous point and the process 2200 proceeds to step 2205. Otherwise, the process 2200 proceeds to step 2203 where the first_endingsegment buffer is set to contain the first ending segment of the current point.
The process 2200 continues at step 2205 where the last_ending_segment buffer is set to contain the last ending segment of the point selected at step 2003. Then at the next step 2207, for all of the segments between and including the segments of the first_endingsegment and the last_ending_segment buffers, a node with a vertex defined by the point (Xcur,Ybucket) is inserted into the left/right wing of the edges for all segments between the first and the last segment depending on whether the respective segment is marked as left or right. The process 2200 continues at step 2209 where each pair of ending segments which belong to the same edge are removed.
At the next step 2211 of the process 2200, a test is performed to determine if any segment starts at the current point after the lastending segment. If the result of step 2211 is false, then the process 2200 proceeds directly to step 2213 where all remaining ending segments are removed from the current point, and the process 2200 concludes and proceeds to step 2011 of the process 2000. Otherwise, the process 2200 proceeds to step 2215 where a Segment Connection and Edge Creation process 2300, as seen in Fig. 23, is performed on the current segment and the process 2200 then proceeds to step 2213. The 592977.doc -52- Connecting Segment and Edge Creation process 2300 is performed on any segment starting from the current point after the last_ending_segment.
Fig. 23 is a flow chart showing the Segment Connection and Edge Creation process 2300. The process 2300 begins at step 2315, where a segment starting at the current point currentpoint) is selected. At the next step 2301, a Select Starting Border Segment process is performed on the segment selected at step 2315. The Select Starting Border Segment process 2400, as seen in Figs. 24(a) and processes any segment starting from the current point after the last_ending_segment and classifies these segments into left or right border segments. The Select Starting Border Segment process 2400 will be explained in further detail in the following paragraph with reference to the flow chart of Figs. 24(a) and Then at the next step 2303 of the process 2300, if both the next_right_segment and the next_leftsegment buffers are not empty, then the process 2300 proceeds to step 2307. If the result of step 2303 is false then the process 2300 proceeds directly to step 2309, where a test is performed to determine if there are any more segments at the current point. At step 2307, the Edge Creation process 3300 is performed for the current point and the process 2300 proceeds to step 2309.
As with paths configured in accordance with the non-zero winding rule, four border segments (ie. two left and two right segments) are preferably buffered before the process 3400 is performed at step 2307. The process 2300 continues at the step 2309, where if there are more segments at the current point then the process 2300 returns to step 2301. Otherwise the process 2300 proceeds to step 2311, where the Connecting Segment process 3100 is performed for the current point to connect any left over segments to the first_ending_segment, similar to the process 1900 of Figs. 19(a) and At the next step 2313, the hflag is set to INACTIVE and the process 2300 concludes. The steps of the process 2300 are preferably implemented as software resident on the hard disk drive 3010 and being read and controlled in their execution by the processor 3005.
592977.doc -53- Figs. 24(a) and show a flow chart showing the Select Starting Border Segment process 2400 which processes any segment starting from the current point after the last ending segment and classifies these segments into left or right border segments.
The steps of the process 2400 are preferably implemented as software resident on the hard disk drive 3010 and being read and controlled in their execution by the processor 3005.
The process 2400 begins at step 2401, where if the current segment selected at step 1901 is a horizontal segment, then the process 2400 proceeds to step 2402. At step 2402, if the horizontal flag hflag) is set to INACTIVE then the process 2400 proceeds to step 2403, where the h_flag is set to be equal to the g flag. If the horizontal flag is ACTIVE at l0 step 2402, then the process 2400 proceeds to step 2405. At step 2405, if the hflag is set to RIGHT, then the process 2400 proceeds to step 2407 where the current segment is marked as a left segment. Then at the next step 2409, the h_flag is set to RIGHT.
Alternatively, if the hflag is not set to RIGHT at step 2405, then the process 2400 proceeds to step 2411 where the selected segment is marked as a right segment. At the next step 2413, the hflag is set to RIGHT.
After step 2413, the process 2400 proceeds to step 2415. At step 2415 if the rightsegment buffer is empty, then the process 2400 proceeds to 2417 where the rightsegment buffer is set to contain the current segment the segment selected at step 1901). Alternatively, if the rightsegment buffer is not empty, then the process 2400 proceeds to 2419 where the nextrightsegment buffer is set to contain the selected segment. Then at the next step 2421, the last segment pointer is set to point to the next rightsegment buffer. After step 2421, the process 2400 concludes and proceeds to step 2303 of the process 2300.
If the current segment selected at step 2301 is not a horizontal segment at step 2401, then the process 2400 proceeds to step 2423. At step 2423, if the global flag (i.e.
g_flag) is set to RIGHT then the process 2400 proceeds to step 2425, where the current 592977.doc -54segment is marked as a left segment. At the next step 2427, the g_counter is set to LEFT.
If the global flag is not set to RIGHT at step 2423, then the process 2400 proceeds to step 2429, where the current segment is marked as a right segment. Then at the next step 2431, the g_counter is set to RIGHT and the process 2400 proceeds to step 2415.
After step 2427, the process 2400 proceeds to step 2433, where if the leftsegment buffer is empty, then the leftsegment buffer is set to contain the current segment at the next step 2435. After step 2435, the process 2400 concludes and proceeds to step 2303 of the process 2300 of Fig. 23. If the leftsegment buffer is not empty at step 2433, then the nextleftsegment buffer is set to contain the current segment at the next step 2437. At the next step 2439, the last_segment pointer is set to point to the next_left_segment buffer. After step 2439, the process 2400 concludes and proceeds to step 2303 of the process 2300.
Returning to the method 300 of Fig. after the Segment Assignment and Edge Creation process has been performed on the current bucket at step 307, the method 300 proceeds to step 309. At step 309, an Intersection Detection process 2500, as seen in Figs. 25(a) and is performed for the current bucket. In this regard, intersection of two or more segments can only occur in the area between the upper and lower bandline of a current bucket. All intersection points are a result of two segments crossing each other.
Intersection points where more than two segments cross each other are regarded as a plurality of intersection points one on top of each other (ie. coincident intersection points).
Intersection points are processed in the order of their occurrence in time. An intersection occurs earlier than another intersection if: the y-position of the earlier intersection point is smaller (ie. closer to the first bandline of the space in which the path is defined) and/or 592977.doc (ii) the intersection point is detected first (ie. if the intersection point is exactly the same).
Figs. 25(a) and show a flow chart showing the Intersection Detection process 2500 for detecting intersecting segments. The steps of the process 2500 are preferably implemented as software resident on the hard disk drive 3010 and being read and controlled in their execution by the processor 3005. The process 2500 begins at step 2501, where a buffer configured similarly to the AST is initialised with the first segment from the AST. In the following steps 2503 to 2525 of the process 2500, the remaining segments are removed from the AST one at a time to perform a comparison of the xcoordinate at the upper bandline with those of the segments in the buffer. The comparison starts from the right most (ie. last) segment of the buffer. The segment removed from the AST intersects the segment in the buffer if the x-coordinate of removed segment at the upper bandline is smaller than the x-coordinate of the segment in the buffer. The comparison finishes when a segment removed from the AST no longer intersects the segment in the buffer and the removed segment is inserted to the right of (ie.
after) the segment in the buffer that it did not intersect.
At step 2505 of the process 2500, a segment is removed from the AST and inserted into the buffer. The process 2500 continues at the next step 2505, where the next segment is removed from the AST in order of decreasing leftness and is preferably assigned the label AST-segment. Then at the next step 2507, the right most (ie. last) entry segment of the buffer is selected and is preferably assigned the label buffersegment. The process 2500 continues at step 2509, where if the x-coordinate of the AST-segment at the upper bandline is less than the x-coordinate of the buffersegment at the upper bandline, then the process 2500 proceeds to step 2515.
Otherwise, the process 2500 proceeds to step 2511 where the AST_segment is inserted into the right of (ie. after) the buffersegment. At the next step 2513, if there are any 592977.doc -56more segments in the AST then the process 2500 returns to step 2505. Otherwise, the process 2500 proceeds to step 2525.
At step 2515, the intersection point of the segments contained in the ASTsegment buffer and the buffersegment buffer is calculated by using any calculation method known to those in the relevant art. The process 2500 continues at the next step 2517, where the intersection point and a reference to both of the AST-segment buffer and the buffer-segment buffer are inserted into an Intersection Table The intersection point and the reference in the IT must be sorted due to the requirement to process intersection points in the manner described above. The AST_segment and buffersegment must be ordered in the IT such that the segment removed from the AST comes first (ie. the left most segment after the intersection point comes first). Then at the next step 2519, if there are more segments in the buffer, then the process 2500 proceeds to step 2521 where the next left entry segment in the buffer is selected and assigned as the buffersegment. Otherwise, the process 2500 proceeds to step 2523 where the ASTsegment is inserted as the left most entry of the buffer. The process 2500 then returns to step 2513. At step 2525, the buffer is assigned as the AST (ie. the buffer replaces the AST).
Returning to the method 300 of Fig. after the Intersection Detection process has been performed on the current bucket at step 309, the process 300 proceeds to step 311. At step 311, an Intersection Processing process is performed on the segments of the current bucket whereby segments that belong to edges are swapped or new edges are created. In the Intersection Processing process of flow chart 300, intersections for paths configured using the odd-even winding fill rule and paths configured using the non-zero winding rule, are processed differently.
Figs. 26(a) and show a flow chart showing an Intersection Processing process 2600 for input paths configured using the non-zero winding fill rule. Intersections are 592977.doc 57 processed one at a time. The steps of the process 2600 are preferably implemented as software resident on the hard disk drive 3010 and being read and controlled in their execution by the processor 3005. The process 2600 begins at step 2601, where intersection details for the current band are removed from the IT in the order that the intersection details were sorted in the IT. As discussed above, the intersection details include the intersection point and a reference to the segments that intersect at the intersection point. At the next step 2603, the counter values associated with the intersecting segments are updated whereby the first intersecting segment (ie. the left most segment after the intersection point) inherits the counter value of the counter associated with the second intersecting segment. Thus, the value of the counter associated with the second intersecting segment is assigned to the first intersecting segment. Further, the counter associated with the second intersecting segment is updated according to the direction of the first segment.
At steps 2613 to 2625 of the process 2600, if both the intersecting segments belong to edges, then new vertices are created for both of the respective edges. Further, if both of the intersecting segments belong to the same edge then the assignment of the segments to the edge is removed and a new edge is created out of the intersecting segments. Otherwise, the corresponding edges of the intersecting segments and their left/right assignments are interchanged if the first intersecting segment is a border segment while both of the intersecting segments are unassigned from their respective edges if the first intersecting segment is a non-border segment.
The process 2600 continues at step 2605, where if both of the first and second segments belong to edges, then the process 2600 proceeds to step 2613. At step 2613, a node with the intersection point is inserted into the left/right wing of both of the edges associated with the intersecting segment depending on whether the segments are marked as left or right. Then at the next step 2615, if the first and second intersecting segments 592977.doc -58belong to the same edge then the process 2600 proceeds to step 2617. At step 2617, both the first and second intersecting segments are unassigned from the respective edge. The process 2600 continues at step 2619, where a new edge starting from the intersection point is created if there is a left and a right border segment. Further, the left and right segments are assigned to the newly created edge, and the process 2600 proceeds to step 2627.
If the first and second intersecting segments do not belong to the same edge at step 2615, then the process 2600 proceeds to step 2621, where a test is performed to determine if the first segment is a border segment. As discussed above with reference to Fig 17, the first segment is a border segment depending on both the direction of the segment and the value of the counter associated with the segment. If the first segment is a border segment at step 2621, then the process 2600 proceeds to step 2623 where the edges associated with each of the first and second segments are interchanged along with the left/right assignments of the segments. Otherwise, the process 2600 proceeds to step 2625 where both the first and second segments are unassigned from their respective edges. The process 2600 then proceeds to step 2627, where if there are any more intersection details in the IT then the process 2600 returns to step 2601.
If both of the first and second intersecting segments do not belong to edges at step 2605, then the process 2600 proceeds to step 2607. At step 2607, if neither of the intersecting segments belong to an edge then the process proceeds directly to step 2619, where a new edge is created out of the intersecting segments depending upon whether the intersecting segments are border segments. If at least one of the segments belongs to an edge at step 2607, the process 2600 proceeds to steps 2609 and 2611 as shown in Fig 26.
At steps 2609 and 2611, the edge assignments and the left/right assignments of the particular intersecting segment belonging to an edge, are assigned to the intersecting segment that does not belong to an edge. Also, at step 2609, a new vertex is inserted in 592977.doc -59the edge. The new vertex takes the value of the intersection point. The process 2600 concludes at step 2627 when there are no more intersection details in the IT (ie.
Intersection Table), and proceeds to step 313 of the method 300 of Fig. 3(a).
Fig. 36 is a flow chart showing a further Intersection Processing process 3600 for input paths configured using the non-zero winding fill rule.. The main difference of the process 3600 from the process 2600 described above is the manner in which intersection points involving more than two segments are handled. In the process 3600, all segments that cross an intersection point where more than two segments intersect are first split.
Then all starting border segments are connected to ending border segments whenever possible. For those segments that are left over starting border segments which are not connected to any ending border segments), new edges are created. Prior to splitting, all segments are assumed to be held in a suitable buffer in their existing order.
The process 3600 treats an intersection point involving more than two segments as a combo point. However, priority is given to connecting any left over border segments to the first ending border segment before attempting to create new edges out of starting border segments. The steps of the process 3600 are preferably implemented as software resident on the hard disk drive 3010 and being read and controlled in their execution by the processor 3005.
The process 3600 begins at step 3601, where intersection details for the current band are removed from the IT in the order that the intersection details were sorted in the IT, and are preferably assigned the label currentintersection_details. As discussed above, the intersection details include the intersection point and a reference to the segments which intersect at the intersection point. At the next step 3603, if the intersection details have the same intersection point then the process 3600 proceeds to step .3625. At step 3625, a Split Assign Segment process 3700, as seen in Fig. 37, is performed for the current intersection point. The Split Assign Segment process 3700 will 592977.doc.
be explained in more detail below with reference to the flow chart of Fig. 37. If there are any more intersection details in the IT at step 3623, then the process 3600 returns to step 3601. Otherwise, there are no more intersection details in the IT (ie. Intersection Table), and the process 3600 proceeds to step 313 of the method 300. Then at the next step 3605, the counter values associated with the intersecting segments are updated whereby the first intersecting segment (ie. the left most segment after the intersection point) inherits the counter value of the counter associated with the second intersecting segment. Thus, the value of the counter associated with the second intersecting segment is assigned to the first intersecting segment. Further, the counter associated with the second intersecting segment is updated according to the direction of the first segment. The process 3600 continues at step 3607 where if both of the first and second intersecting segments belong to edges, then the process 3600 proceeds to step 3627. Otherwise, the process 3600 proceeds to step 3611. At step 3627, a node with the intersection point is inserted into the left/right wing of both of the edges associated with the intersecting segments depending on whether the segments are marked as left or right. At the next step 3609, if the first and second intersecting segments belong to the same edge then the process 3600 proceeds to step 3613. At step 3613, both the first and second intersecting segments are unassigned from their respective edges. The process continues at step 3617, where a new edge starting from the intersection point is created if there is a left and a right border segment.
Further, the left and right segments are assigned to the newly created edge, and the process 3600 proceeds to step 3621.
If the first and second intersecting segments do not belong to the same edge at step 3609, then the process 3600 proceeds to step 3629, where a test is performed to determine if the first segment is a border segment. As discussed above with reference to Fig. 17, the first segment is a border segment depending on both the direction of the segment and the value of the counter associated with the segment. If the first segment is a 592977.doc -61border segment at step 3629, then the process 3600 proceeds to step 3631 where the edges associated with each of the first and second segments are interchanged along with the left/right assignments of the segments. Otherwise, the process 3600 proceeds to step 3633 where both the first and second segments are unassigned from their respective edges. The process 3600 then proceeds to step 3621, where if there are any more intersection details in the IT then the process 3600 returns to step 3601.
If both of the first and second intersecting segments do not belong to edges at step 3607, then the process 3600 proceeds to step 3611. At step 3611, if neither of the intersecting segments belong to an edge then the process 3600 proceeds directly to step 3617, where a new edge is created out of the intersecting segments depending upon whether the intersecting segments are border segments. If at least one of the segments belongs to an edge at step 3611, the process 3600 proceeds to steps 3615 and 3619 as shown in Fig 36. At steps 3615 and 3619, the edge assignments and the left/right assignments of the particular intersecting segment belonging to an edge, are assigned to the intersecting segment that does not belong to an edge. Also, at step 3615, a new vertex is inserted in the edge. The new vertex takes the value of the intersection point. The process 3600 concludes at step 3621 if there are no more intersection details in the IT (ie.
Intersection Table), and the process 3600 proceeds to step 313 of the method 300.
The steps of the process 3700 are preferably implemented as software resident on the hard disk drive 3010 and being read and controlled in their execution by the processor 3005. The process 3700 begins at step 3701 where intersection details for the intersecting segments having an intersection point similar to the one represented by the label current_intersection_details are removed from the IT. Then at the next step 3703, a node with the intersection point is inserted into the left/right wing of both of the edges associated with the first and second intersecting segments depending on whether the segments are marked as left or right. At the next step 3705, a Segment Splitting process 592977.doc -62- 3800, as seen in Fig. 38, is performed for the current point to separate the ending and starting segments on the intersection point. The Segment Splitting process 3800 will be explained below with reference to the flow chart of Fig. 38. Similarly to the processes described above, the steps of the process 3800 are preferably implemented as software resident on the hard disk drive 3010 and being read and controlled in their execution by the processor 3005. At the next 3707 of the process 3700, a buffer ending_segment is initialised to the first ending segment represented by the intersection details. The process 3700 continues the next step 3709 where a buffer starting_segment is initialised to the first starting segment represented by the intersection details. Then at the next step 3711 a counter associated with the starting_segment is set to the value of a counter associated with the ending_segment. The process 3700 continues at the next 3713, where all border segments belonging to the same edge and all non-border segments are removed. At the next step 3715, if there are any more unprocessed ending segments at the current intersection point then the process 3700 proceeds to 3717 where a Segment Connecting process 3900 is performed for the current point whereby for each border segment starting from the current point, new edges are created. The Segment Connecting process 3900 will be explained below with reference to the flow chart of Fig. 39. The steps of the process 3900 are preferably implemented as software resident on the hard disk drive 3010 and being read and controlled in their execution by the processor 3005.
If. there are no more unprocessed ending segments at the current point at step 3715, then the process 3700 proceeds to 3719 where an Edge Creation process 4000 is performed for the current intersection point whereby for each border segment starting from the current intersection point, new edges are created. The Edge Creation process 4000 will be explained in further detail below with reference to Fig. 40. The steps of the process 4000 are preferably implemented as software resident on the hard disk drive 3010 and being read and controlled in their execution by the processor 3005.
592977.doc -63 The process 3800 begins at step 3801, where a first border segment is selected as the currentsegment. Then at the next step 3803, a new segment that duplicates the segment in the currentsegment buffer but which ends at the current intersection point, is created. The process 3800 continues at the next step 3805, where the current_segment buffer is updated to start at the current intersection point. At the next step 3807, the segment indicated by the current_segment buffer is replaced with the newly created segment and the currentsegment is reinserted after all ending segments, in order. If there are any more border segments represented by the intersection details, at the next step 3809, then the process 3800 returns to step 3801. Otherwise, the process 3800 concludes and proceeds to step 3707 of the process 3700.
The process 3900 begins at step 3901 where if the segment indicated by the buffer starting_segment is a border segment then the process 3900 proceeds to step 3903.
Otherwise, the process 3900 proceeds to step 3911. At step 3903, the edge of the segment indicated by the buffer ending_segment is assigned to the starting segment represented by the buffer starting_segment. Also at step 3903, the starting segment is marked as left or right depending on the ending segment. Then at the next step 3905, if there are any more segments at the current intersection point then the process 3900 proceeds to step 3915.
Otherwise the process 3900 proceeds directly to step 3623 of the process 3600.
At step 3915 of the process 3900, the buffer starting_segment is set equal to the next starting segment at the current intersection point and the counter associated with the next starting segment is updated based on the counter and direction of the current starting segment, as described above. At the next step 3913, if there are any more ending segments at the current intersection point then the process 3900 returns to step 3901.
Otherwise, the process 3900 proceeds to step 3907 where the Edge Creation process 4000 of Fig. 40 is performed for the current point.
592977.doc -64- At step 3911, if there are any more starting segments at the current intersection point, then the process 3900 proceeds to step 3909. Otherwise the process 3900 proceeds directly to step 3623 of the process 3600. At step 3909, the process 3900 proceeds to step 3909 where the starting_segment buffer is set equal to the next starting segment at the current intersection point and the counter associated with the next starting segment is updated based on the counter and direction of the current starting segment. The process 3900 returns to step 3901 after step 3909.
The process 4000 begins at step 4001 where if the segment indicated by the buffer starting_segment is a border segment then the process 4000 proceeds to step 4003.
Otherwise, the process 4000 proceeds directly to step 4009. At step 4003, the next starting segment at the current intersection point is selected and the counter associated with the next starting segment is updated based on the counter and direction of the current starting segment. The process 4000 continues at the next step 4005, where if the selected segment is a border segment then the process 4000 proceeds to step 4007. Otherwise, the process 4000 proceeds to step 4011 before returning to step 4005.
At step 4011 of the process 4000, the next starting segment at the current point is selected and the counter associated with the next starting segment is updated based on the counter and direction of the current starting segment. The process 4000 continues at the next step 4007, where a new edge starting from the current intersection point is created from the starting_segment and the segment selected at step 4003. Further, the segments of the newly created edge are assigned as left and right segments based on the criteria given in Fig. 17, and the process 4000 proceeds to step 4009. If there are any more starting segments at the current intersection point, at step 4009, then the process 4000 proceeds to step 4013. Otherwise the process 4000 proceeds to step 3623 of the process 3600.
592977.doc 65 At the next step 4013 of the process 4000 the starting_segment buffer is set equal to the next starting segment at the current intersection point and the counter associated with the next starting segment is updated based on the counter and direction of the current starting segment.
Fig. 27 is a flow chart showing an Intersection Processing process 2700 for input paths configured using the odd-even winding fill rule. The steps of the process 2700 are preferably implemented as software resident on the hard disk drive 3010 and being read and controlled in their execution by the processor 3005. As with the process 2600, intersections are processed one at a time. At steps 2701 to 2711 of the process 2700, new vertices are inserted into both edges for the intersecting segments at the. intersection point.
If the intersecting segments belong to the same edge, a new edge is created out of the intersecting edges. Otherwise, the corresponding edges of the intersecting segments and the corresponding left/right assignments are interchanged. The process 2700 begins at step 2701 where intersection details for the intersecting segments are removed from the IT. Then at the next step 2703, a node with the intersection point is inserted into the left/right wing of both of the edges associated with the intersecting segments depending on whether the segments are marked as left or right. The process continues at step 2705, where if both of the intersecting segments belong to the same edge, then a new edge is created at the intersection point with the intersecting segments. Further, the left and right intersecting segments are assigned to the newly created edge such that the segment that was previously left is now right while the segment that was previously right is now the left segment. At the next step 2711, if there are any more intersection details in the IT, then the process 2700 returns to step 2701.
If both of the intersecting segments do not belong to the same edge at step 2705, then the edges associated with each of the first and second intersecting segments are interchanged along with the left/right assignments of the segments. The process 2700 592977.doc 66concludes at step 2711, if there are no more intersection details in the IT, and proceeds to step 313 of the method 300.
Fig. 41 is a flow chart showing a further Intersection Processing process 4100 for input paths configured using the odd-even winding fill rule. The main difference of the process 4100 from the process 2700 described above is the manner in which intersection points involving more than two segments are handled. Similalry to the process 2700 described herein, the steps of the process 4100 are preferably implemented as software resident on the hard disk drive 3010 and being read and controlled in their execution by the processor 3005. In the process 4100, all segments that cross an intersection point where more than two segments intersect are first split. Then all starting border segments are connected to ending border segments wherever possible. For those segments that are left over, new edges are created for starting border segments which are not connected to any ending border segments. Prior to splitting, all segments are assumed to be held in a suitable buffer in their existing order.
The process 4100 begins at step 4101 where intersection details for the intersecting segments are removed from the IT in order, and are preferably assigned the label currentintersectiondetails. Then at the next step 4103, if the intersection details have the same intersection point then the process 4100 proceeds to step 4115. Otherwise the process 4100 proceeds to step 4105. At step 4115, a Split Assign Segment process 4200, as seen in Fig. 42, is performed for the current intersection point and the process 4100 proceeds to step 4113. The Split Assign Segment process 4200 will be explained below with reference to Fig. 42. At step 4105, a node with the intersection point is inserted into the left/right wing of both of the edges associated with the intersecting segments depending on whether the segments are marked as left or right. At the next step 4107, if the two intersecting segments belong to the same edge then the process 4100 proceeds to step 4109. Otherwise, the process 4100 proceeds to step 4111 where the 592977.doc 67 edges and the left and right assignments associated with the segments are interchanged.
At step 4109, a new edge starting from the current intersection point is created from the intersecting segments. Further, the left and right intersecting segments are assigned to the newly created edge, and the process 4100 proceeds to step 4113. The previous left segment will now be the right segment while the previous right segment will now be the left segment. If there are any more segments in the IT at step 4113, then the process 4100 returns to step 4101. Otherwise, the process proceeds to step 313 of the method 300.
The steps of the process 4200 are preferably implemented as software resident on the hard disk drive 3010 and being read and controlled in their execution by the processor 3005. The process 4200 begins at step 4201, where intersection details for the intersecting segments having an intersection point similar to the one represented by the label current_intersection_details, are removed from the IT. Then at the next step 4203, a node having a vertex being the coordinate of the current intersection point is inserted into the left/right wing of both of the edges associated with the intersecting segments depending on whether the segments are marked as left or right. At the next step 4205, the Segment Splitting process 3800 is performed for the current intersection point to separate the ending and starting segments on the point. At the next 4207, an ending_segment buffer is initialised to the first ending segment represented by the intersection details. The process 4200 continues the next step 4209 where a starting_segment buffer is initialised to the first starting segment represented by the intersection details. Then at the next step 4211, the left and right segments of the first starting segment are marked as the ending segment and all pairs of ending segments belonging to the same edge are removed from the IT.
If there are any more ending segments, at the next step 4213, then the process 4200 proceeds to step 4215. Otherwise the process 4200 proceeds to step 4229. At step 4215, the edge of the segment indicated by the buffer, ending_segment, is assigned to the 592977.doc -68starting segment represented by the buffer, starting_segment. Also at step 4215, the starting segment is marked as left or right depending on the counter associated with the ending segment. If there are any more ending segments, at the next step 4221, then the process proceeds to step 4219. Otherwise the process 4200 proceeds to step 4223. At step 4219, the starting_segment buffer is set to the next starting segment at the current point. Then at step 4117, the ending_segment buffer is set to the next ending segment at the current point and the process 4200 returns to step 4215.
At the next step 4223 of the process 4200, if the segment represented by the buffer, starting_segent, is a left segment then the process 4200 proceeds to step 4225, where the next starting segment is marked as a right segment. Otherwise the process 4200 proceeds to step 4233 where the next starting segment is marked as a left segment.
The process 4200 continues at the next segment 4227, where the starting_segment buffer is set to the next starting segment at the current intersection point.
At step 4229 an Edge Creation process 4300, as seen in Fig. 43, is performed for the current point whereby for each border segment starting from the current point, new edges are created. The Edge Creation process 4300 will be explained in further detail below with reference to Fig. 43. The steps of the process 4300 are preferably implemented as software resident on the hard disk drive 3010 and being read and controlled in their execution by the processor 3005. The process 4200 concludes at the next step 4213, where all ending segments are removed from the IT and the process 4200 proceeds to step 4113.
The process 4300 begins at step 4301, where if the segment represented by the starting_segment buffer is a left segment, then the process 4300 proceeds to step 4303.
Otherwise the process 4300 proceeds to step 4305, where the next starting segment is marked as a left segment. At step 4303, the next starting segment is marked as a right segment. Then at step 4307, a new edge starting from the current intersection point is 592977.doc -69created from the starting segment and the next starting segment, and the process 4300 4300 proceeds to step 4309. At step 4309, the starting_segment buffer is set to the next starting segment.
If there are any more starting segments at the current point, at the next step 4311, then the process 4300 proceeds to step 4313. Otherwise the process 4300 proceeds to step 4213 of the process 4200. At step 4313, if the segment in the buffer, starting_segment, is a left segment then process 4300 proceeds to step 4319. Otherwise the process 4300 proceeds to step 4317, where the next starting segment at the current intersection point is marked as a left segment. At step 4319, the next starting segment is marked as a right segment. Then at the next step 4315, the starting_segment buffer is set equal to the next starting segment and the process 4300 returns to step 4301.
Returning to the method 300 of Fig. after the Intersection Processing process has been performed on the intersecting segments for the current bucket at step 311, the method 300 proceeds to step 313. At step 313, if there are any buckets left in the ST then the method 300 returns to step 303. Otherwise, the method 300 proceeds to step 315 where any open edges, resulting from the processes of steps 301 to 313, are merged by a Merging Edges process 2900, as seen in Fig. 29, to form closed edges which will constitute the simple outline path. An edge is considered open if its last left vertex is not equal to its last right vertex. Edges are merged by joining different sets of vertices, where the vertices of a left assigned edge are joined with the vertices of a right assigned edge.
In the methods and processes described herein, only left vertices can be joined with right vertices and vice versa.
Fig. 29 is a flow chart showing the Merging Edges process 2900 for merging all open edges to form a simple outline path. The steps of the process 2900 are preferably implemented as software resident on the hard disk drive 3010 and being read and controlled in their execution by the processor 3005. The process 2900 begins at step 592977.doc 2901 where a first open edge is selected. The open edge is preferably assigned the label oedge. The process 2900 continues at steps 2903 to 2907 where a suitable edge is selected for merging with the edge (ie. o_edge), by comparing the coordinates of the vertices for each of the edges resulting from steps 301 to 313. As discussed above, only left edge vertices can be joined with right edge vertices and vice versa. Therefore, the process 2900 continues at step 2903, where a test is performed to determine if there is any open edge having a last left vertex which is equal to the last right vertex of the edge, oedge, by comparing the coordinates of the vertices for each of the edges. If the result of step 2903 is false, then the process 2900 proceeds to step 2911, where a search is performed to select an open edge having a last right vertex which is equal to the last left vertex of the edge, o_edge. The edge resulting from the search of step 2911 is logically joined to the edge, o_edge, resulting in a single edge such that the left vertice of o_edge becomes the right vertice of the edge selected at step 2911 and the last right vertex of o_edge becomes the last right vertex of the selected edge.
The repeated last left vertex is discarded and the label o_edge is assigned to the resulting edge. Otherwise, if the result of step 2903 is true, then the process 2900 proceeds to step 2905, where the edge found at step 2903 is joined to the edge, o_edge, resulting in a single unified edge. Again, the repeated last left vertex resulting from the joining of the edges is discarded and the label o_edge is assigned to the resulting edge.
The process 2900 continues at step 2907, where if the last left vertex ofo_edge is equal to the last right vertex of o_edge, then the process 2900 proceeds to step 2909.
Otherwise, the process 2900 returns to step 2903. At step 2909 if there are any more open edges, then the process 2900 returns to step 2901. The process 2900 concludes when all open edges resulting from steps 301 to 313 of flow chart 300 are joined to form the simple outline path, in accordance with the method of converting an input path as described herein, and therefore the method 300 concludes.
592977.doc -71- Edges are preferably traversed in a single direction during the edge merging process 2900 at step 315. For example, Fig. 28(a) shows a path 2800 made up of seven edges (eg. 2801). The right and left vertices are indicated as shown by the arrows referenced as "Left Vertices" and "Right Vertices". The vertices of the right edges are referenced with an R and the vertices of the left edges are referenced with an L, as shown in Fig. 28(a). Fig. 28(b) shows a conceptual block diagram with all of the vertices (eg.
La) of the path 2800. As shown in Fig. 28(b) the edges of the path 2800 are preferably traversed from the edges' left wing to the edges' right wing in the direction indicated by the arrows (eg. 2803). This establishes a convention where the interior of an edge is always on the left hand side, if the edge is traversed according to the direction of the edge, and results in uniform edge orientation.
The described methods and processes perform the conversion of a path configured in accordance with the odd-even winding fill rule or the non-zero winding rule to a simple outline path with minimal memory usage, since information regarding the relationship of segments and edges of the original path does not need to be retained.
Further, edge intersections are calculated on the fly and thus allow recycling of data structure. Still further, the position of each segment is exploited to avoid an interior/exterior test at every intersection point.
The simple outline paths created in accordance with the methods and processes described herein allow more flexibility in re-using many existing path processing methods, while simplifying the logic required in developing new methods, and allowing the interior of paths to be interpreted with the most convenient fill rule for a particular process. Still further, as discussed in the Background section of this specification, any processing speed gains resulting from the use of existing path processing methods are generally a direct result of using hardware to perform some simple and repetitive task.
Such hardware is unlikely to be able to perform complex calculation and thus handle 592977.doc 72 complex paths. Simple outline paths enable specialised proprietary hardware to process the outline path with minimal effort required to gain significant speed advantage.
The aforementioned methods and processes comprise a particular control flow.
There are many other variants of the described methods, which use different control flows without departing the spirit or scope of the invention. Furthermore one or more of the steps of the described methods may be performed in parallel rather sequentially.
The method of converting an input path configured using the odd-even winding fill rule or the non-zero winding rule to a simple outline path may alternatively be implemented in dedicated hardware such as one or more integrated circuits performing the functions or sub functions of Figs. 1 to 29 and Figs. 31 to 43. Such dedicated hardware may include graphic processors, digital signal processors, or one or more microprocessors and associated memories.
The embodiments herein before described provide an accurate representation of an input path since the methods do not result in the movement of any vertex when processing degenerate paths (ie. all vertices are processed in their original position).
Further, the embodiments detect and process intersections on the fly and thus consume less memory through the recycling of data structures. The above described embodiments are able to process horizontal segments and the original relationship between input segments are not required to be stored.
Other advantages of the embodiments herein before described, include the fact that the position of each input segment is utilised so that an exterior/interior test at every intersection point is not required. In addition, memory usage is further minimised through the division of the space in which an input path is defined into bands, whereby the conversion of the input path is performed in a band by band manner.
The foregoing describes only some embodiments of the present invention, and modifications and/or changes can be made thereto without departing from the scope and 592977.doc 73 spirit of the invention, the embodiments being illustrative and not restrictive. For example, the above-described methods and processes can be performed with spline segments if the spline segments have previously been vectorised.
In the context of this specification, the word "comprising" means "including principally but not necessarily solely" or "having" or "including" and not "consisting only of'. Variations of the word comprising, such as "comprise" and "comprises" have corresponding meanings.
592977.doc
Claims (9)
1. A method of converting a path into a representation of said path, said representation comprising at least one edge, each of said edges comprising a plurality of S original segments or parts thereof, said method comprising the steps of: dividing a space in which said path is defined into a plurality of bands such that each of said original segments, or parts thereof, have at least one corresponding band; examining each said original segment, or parts thereof, contained within each of said bands and classifying each of said original segments or parts thereof, depending on the position and/or direction of said original segment within a corresponding band; creating further segments within each of said bands depending on the position of each original segment contained within a corresponding band; assigning at least one of said original segments or parts thereof, and/or said further segments to be border segments, depending on the position and classification of each of said original segments or parts thereof, and/or said further segments contained within a corresponding band; and combining at least one of said border segments to form at least one edge to produce said representation.
2. The method according to claim 1, wherein said path is configured in accordance with at least one of a plurality of fill rules, and said representation is configured in accordance with each of said plurality of fill rules
3. The method according to claim 1, wherein each of said bands is processed independently.
592977.doc
4. The method according to claim 3, wherein each of said original and said further segments contained within a band is processed in order of decreasing leftness as herein before defined.
5. The method according to claim 4, further including the step of storing original segments, or parts thereof, which exist within a band currently being processed.
6. The method according to claim 1, wherein each of said bands is defined by a plurality of band lines, such that each of said band lines intersects at least one vertex of at least one edge defined by said path. *o• o
7. The method according to claim 6, wherein repeated band lines are discarded.
8. The method according to claim 1, wherein the assignment of said original segments and/or said further segments as border segments, is dependent on any oo intersection of said original segments and/or said further segments contained within a o band.
9. The method according to claim 1, wherein the assignment of an original segment and/or further segment as a border segment, is dependent on the direction of a particular original segment and/or further segment. The method according to claim 6, wherein each of said original segments remain stationary with respect to said bandlines. 592977.doc i 1 -76- 11. The method according to claim 1, wherein said classification includes horizontal and vertical segments. 12. The method according to claim 1, wherein classification of a particular original or further segment is dependent upon points in said particular original or further segment. 13. The method according to claim 12, wherein said points are classified as a Combo point or a Local Minimum point, as herein before defined, depending on the position of a point relative to at least one of said band lines. 14. The method according to claim 1, further comprising the step of splitting said •original segments if more than one original segment is incident on a particular point. The method according to claim 14, further comprising the step of splitting at least one original segment at a point on a band line at which at least one further segment starts or ends. 16. The method according to claim 1, further comprising the step of detecting intersecting original segments, or parts thereof, within a band. 17. The method according to claim 2, wherein said fill rules include at least the odd- even winding fill rule and the non-zero winding fill rule. 18. The method according to claim 17, wherein said representation has uniform orientation when interpreted with the non-zero winding rule. 592977.doc 77 19. A method of converting a path into a representation of said path, said representation comprising at least one edge, each of said edges comprising a plurality of original segments or parts thereof, said method comprising the steps of: dividing a space in which said path is defined into a plurality of bands, each of said bands being defined by band lines, such that each said band line intersects at least one vertex of at least one edge defined by said path; examining each of said original segments or parts thereof, contained within each of said bands and classifying each of said original segments or parts thereof, depending on the position and/or direction of said original segment within a corresponding band; creating further segments within each of said bands depending on the position of each of said original segments contained within a corresponding band; assigning at least one of said original segments or parts thereof, and/or said further segments, as a border segment depending on the position and classification of each of said original segments or parts thereof, and/or said further segments contained within a corresponding band; and combining at least one of said border segments to form at least one edge to produce said representation. The method according to claim 19, wherein said path is configured in accordance with at least one of a plurality of fill rules, and said representation is configured in accordance with each of said plurality of fill rules 21. The method according to claim 19, wherein each of said bands is processed independently. 592977.doc -78- 22. The method according to claim 21, wherein each original segment or parts thereof, contained within a band is processed in order of decreasing leftness as herein before defined. 23. The method according to claim 22, further including the step of storing said original segments or parts thereof, which exist within a band currently being processed. 24. The method according to claim 19, wherein each of said bands is defined by a plurality of band lines, such that each of said band lines intersects at least one vertex of at least one edge defined by said path. The method according to claim 21, wherein repeated band lines are discarded. 26. The method according to claim 19, wherein the assignment of said border segments is dependent on any intersection of said original segments or parts thereof, and/or said further segments contained within a band. 27. The method according to claim 19, wherein the assignment of said original and/or further segments as border segments, is dependent on the direction of a particular original and/or further segment. 28. The method according to claim 19, wherein each of said original segments remain stationary with respect to said bandlines. 29. The method according to claim 19, wherein said classification includes horizontal and vertical segments. 592977.doc -79- The method according to claim 19, wherein classification of a particular original segment is dependent upon points in said particular original segment. 31. The method according to claim 30, wherein said points are classified as a Combo point or a Local Minimum point, as herein before defined, depending on the position of a point relative to at least one of said band lines. 32. The method according to claim 19, further comprising the step of splitting said original segments if more than one original segment is incident on a particular point. o• 33. The method according to claim 32, further comprising the step of splitting at least one original segment at a point on a band line at which at least one further segment starts or ends. 34. The method according to claim 19, further comprising the step of detecting o0** oo" intersecting original segments or parts thereof within a band. The method according to claim 20, wherein said fill rules include at least the Sodd-even winding fill rule and the non-zero winding fill rule. 36. The method according to claim 35, wherein said representation has uniform orientation when interpreted with the non-zero winding rule. 37. A method of converting a path into a representation of said path, said representation comprising at least one edge, each of said edges comprising a plurality of original segments or parts thereof, said method comprising the steps of: 592977.doc 80 dividing a space in which said paths are defined into a plurality of bands, each of said bands being defined by a plurality of band lines, such that each said band line intersects at least one vertex of at least one edge defined by said path; processing each of said bands independently with respect to said plurality of band lines, said processing comprising the following steps for each band: examining each original segment or parts thereof, contained within said band and classifying each original segment or parts thereof, depending on the position and/or direction of said original segment within said band; creating further segments within said band depending on the position of each of said original segments contained within said band; assigning at least one of said original segments or parts thereof, and/or said further segments, as border segments depending on the position and classification of said at least one original segment or parts thereof, and/or said further segment; and combining at least one of said border segments to form at least one edge to produce said representation. 38. The method according to claim 37, wherein said path is configured in accordance with at least one of a plurality of fill rules and said representation is configured in accordance with each of said plurality of fill rules. 39. A method of converting a path into a representation of said path, said representation comprising at least one edge, each of said edges comprising a plurality of original segments or parts thereof, said method comprising the steps of: 592977.doc -81 dividing a space in which said path is defined into a plurality of bands, each of said bands being defined by a plurality of band lines, such that each said band line intersects at least one vertex of at least one edge defined by said path; storing a reference associated with each of said original segments according to bands within which a particular original segment or part thereof are contained; processing each of said bands independently with respect to said plurality of band lines, utilising said stored references, said processing comprising the following steps for each band: accessing each original segment or part thereof contained in said band; examining each accessed original segment or part thereof contained in said band and classifying each original segment or parts thereof depending on the position and/or direction of said original segment within said band; creating further segments within said band depending on the position of each accessed original segment; assigning at least one of said original segments or parts thereof and/or said further segments, as a border segment depending on the position and classification of said at least one original segment or said further segment and depending on any intersection of said accessed original segment or part thereof; and combining at least one suitable border segment to form said at least one edge to produce said representation. An apparatus for converting a path into a representation of said path, said representation comprising at least one edge, each of said edges comprising a plurality of original segments or parts thereof, said apparatus comprising: 592977.doc -82- division means for dividing a space in which said path is defined into a plurality of bands such that each of said original segments, or parts thereof, have at least one corresponding band; examination means for examining each said original segment, or parts thereof, contained within each of said bands and classifying each of said original segments or parts thereof, depending on the position and/or direction of said original segment within a corresponding band; processor means for creating further segments within each of said bands depending on the position of each original segment contained within a corresponding band; assigning means for assigning at least one of said original segments or parts thereof, and/or said further segments to be border segments, depending on the position and classification of each of said original segments or parts thereof, and/or said further segments contained within a corresponding band; and combining means for combining at least one of said border segments to form at least one edge to produce said representation. 41. The apparatus according to claim 40, wherein said path is configured in accordance with at least one of a plurality of fill rules, and said representation is configured in accordance with each of said plurality of fill rules 42. The apparatus according to claim 40, wherein each of said bands is processed independently. 592977.doc -83- 43. The apparatus according to claim 42, wherein each of said original and said further segments contained within a band is processed in order of decreasing leftness as herein before defined. 44. The apparatus according to claim 43, further including storage means for storing original segments, or parts thereof, which exist within a band currently being processed. The apparatus according to claim 40, wherein each of said bands is defined by a plurality of band lines, such that each of said band lines intersects at least one vertex of at least one edge defined by said path. oo .oooo 46. The apparatus according to claim 45, wherein repeated band lines are discarded. 47. The apparatus according to claim 40, wherein the assignment of said original segments and/or said further segments as border segments, is dependent on any intersection of said original segments and/or said further segments contained within a :band. 48. The apparatus according to claim 40, wherein the assignment of an original segment and/or further segment as a border segment, is dependent on the direction of a particular original segment and/or further segment. 49. The apparatus according to claim 45, wherein each of said original segments remain stationary with respect to said band lines. 592977.doc 84- The apparatus according to claim 40, wherein said classification includes horizontal and vertical segments. 51. The apparatus according to claim 40, wherein classification of a particular original or further segment is dependent upon points in said particular original or further segment. 52. The apparatus according to claim 51, wherein said points are classified as a Combo point or a Local Minimum point, as herein before defined, depending on the position of a point relative to at least one of said band lines. 53. The apparatus according to claim 40, further comprising splitting means for .o .oo:o splitting said original segments if more than one original segment is incident on a 0%o0 •particular point. *o*o 54. The apparatus according to claim 53, further comprising the step of splitting at least one original segment at a point on a band line at which at least one further segment Sstarts or ends. 0o 0oo0 20 55. The apparatus according to claim 40, further comprising detection means for ooooo0 detecting intersecting original segments, or parts thereof, within a band. 56. The apparatus according to claim 41, wherein said fill rules include at least the odd-even winding fill rule and the non-zero winding fill rule. 57. The apparatus according to claim 56, wherein said representation has uniform orientation when interpreted with the non-zero winding rule. 592977.doc 85 58. An apparatus for converting a path into a representation of said path, said representation comprising at least one edge, each of said edges comprising a plurality of original segments or parts thereof, said apparatus comprising: division means for dividing a space in which said path is defined into a plurality of bands, each of said bands being defined by band lines, such that each said band line intersects at least one vertex of at least one edge defined by said path; examination means for examining each of said original segments or parts thereof, contained within each of said bands and classifying each of said original segments or parts thereof, depending on the position and/or direction of said original segment within a corresponding band; creation means for creating further segments within each of said bands depending on the position of each of said original segments contained within a corresponding band; assigning means for assigning at least one of said original segments or parts thereof, and/or said further segments, as a border segment depending on the position and classification of each of said original segments or parts thereof, and/or said further segments contained within a corresponding band; and combining means for combining at least one of said border segments to form at least one edge to produce said representation. 59. The apparatus according to claim 58, wherein said path is configured in accordance with at least one of a plurality of fill rules, and said representation is configured in accordance with each of said plurality of fill rules 592977.doc -86- The apparatus according to claim 58, wherein each of said bands is processed independently. 61. The apparatus according to claim 60, wherein each original segment or parts thereof, contained within a band is processed in order of decreasing leftness as herein before defined. 62. The apparatus according to claim 61, further including storage means for storing said original segments or parts thereof, which exist within a band currently being processed. 63. The apparatus according to claim 58, wherein each of said bands is defined by a plurality of band lines, such that each of said band lines intersects at least one vertex of at least one edge defined by said path. 64. The apparatus according to claim 60, wherein repeated band lines are discarded. The apparatus according to claim 58, wherein the assignment of said border segments is dependent on any intersection of said original segments or parts thereof, and/or said further segments contained within a band. 66. The apparatus according to claim 58, wherein the assignment of said original and/or further segments as border segments, is dependent on the direction of a particular original and/or further segment. 592977.doc -87- 67. The apparatus according to claim 58, wherein each of said original segments remain stationary with respect to said band lines. 68. The apparatus according to claim 58, wherein said classification includes horizontal and vertical segments. 69. The apparatus according to claim 58, wherein classification of a particular original segment is dependent upon points in said particular original segment. 70. The apparatus according to claim 69, wherein said points are classified as a Combo point or a Local Minimum point, as herein before defined, depending on the position of a point relative to at least one of said band lines. 0: 71. The apparatus according to claim 58, further comprising splitting means for splitting said original segments if more than one original segment is incident on a particular point. •000 o. 000* 000 72. The apparatus according to claim 71, further comprising the step of splitting at least one original segment at a point on a band line at which at least one further segment starts or ends. 73. The apparatus according to claim 58, further comprising detecting means for detecting intersecting original segments or parts thereof within a band. 74. The apparatus according to claim 59, wherein said fill rules include at least the odd-even winding fill rule and the non-zero winding fill rule. 592977.doc -88 The apparatus according to claim 74, wherein said representation has uniform orientation when interpreted with the non-zero winding rule. 76. A computer readable medium, having a program recorded thereon, where the program is configured to convert a path into a representation of said path, said representation comprising at least one edge, each of said edges comprising a plurality of original segments or parts thereof, said program comprising: code for dividing a space in which said path is defined into a plurality of bands such that each of said original segments, or parts thereof, have at least one corresponding band; code for examining each said original segment, or parts thereof, contained within each of said bands and classifying each of said original segments or parts thereof, depending on the position and/or direction of said original segment within a corresponding band; code for creating further segments within each of said bands depending on the position of each original segment contained within a corresponding band; code for assigning at least one of said original segments or parts thereof, and/or said further segments to be border segments, depending on the position and classification of each of said original segments or parts thereof, and/or said further segments contained within a corresponding band; and code for combining at least one of said border segments to form at least one edge to produce said representation. 77. A computer readable medium, having a program recorded thereon, where the program is configured to convert a path into a representation of said path, said 592977.doc 89- representation comprising at least one edge, each of said edges comprising a plurality of original segments or parts thereof, said program comprising: code for dividing a space in which said path is defined into a plurality of bands, each of said bands being defined by band lines, such that each said band line intersects at least one vertex of at least one edge defined by said path; code for examining each of said original segments or parts thereof, contained within each of said bands and classifying each of said original segments or parts thereof, depending on the position and/or direction of said original segment within a corresponding band; code for creating further segments within each of said bands depending on the position of each of said original segments contained within a corresponding band; code for assigning at least one of said original segments or parts thereof, and/or said further segments, as a border segment depending on the position and classification of each of said original segments or parts thereof, and/or said further segments contained within a corresponding band; and code for combining at least one of said border segments to form at least one edge to produce said representation. 78. A program stored in a memory medium, where the program is configured to convert a path into a representation of said path, said representation comprising at least one edge, each of said edges comprising a plurality of original segments or parts thereof, said program comprising: code for dividing a space in which said path is defined into a plurality of bands such that each of said original segments, or parts thereof, have at least one corresponding band; 592977.doc code for examining each said original segment, or parts thereof, contained within each of said bands and classifying each of said original segments or parts thereof, depending on the position and/or direction of said original segment within a corresponding band; code for creating further segments within each of said bands depending on the position of each original segment contained within a corresponding band; code for assigning at least one of said original segments or parts thereof, and/or said further segments to be border segments, depending on the position and classification of each of said original segments or parts thereof, and/or said further segments contained within a corresponding band; and code for combining at least one of said border segments to form at least one edge to produce said representation. 79. A program stored in a memory medium, where the program is configured to convert a path into a representation of said path, said representation comprising at least one edge, each of said edges comprising a plurality of original segments or parts thereof, said program comprising: code for dividing a space in which said path is defined into a plurality of bands, each of said bands being defined by band lines, such that each said band line intersects at least one vertex of at least one edge defined by said path; code for examining each of said original segments or parts thereof, contained within each of said bands and classifying each of said original segments or parts thereof, depending on the position and/or direction of said original segment within a corresponding band; code for creating further segments within each of said bands depending on the position of each of said original segments contained within a corresponding band; 592977.doc -91- code for assigning at least one of said original segments or parts thereof, and/or said further segments, as a border segment depending on the position and classification of each of said original segments or parts thereof, and/or said further segments contained within a corresponding band; and code for combining at least one of said border segments to form at least one edge to produce said representation. A method of converting a path into a representation of said path, said representation comprising at least one edge, each of said edges comprising a plurality of original segments or parts thereof, said method being substantially as herein before described with reference any one of the embodiments as illustrated in the accompanying drawings. 81. An apparatus for converting a path into a representation of said path, said representation comprising at least one edge, each of said edges comprising a plurality of original segments or parts thereof, said apparatus being substantially as herein before described with reference any one of the embodiments as illustrated in the accompanying drawings. DATED this sixteenth Day of April, 2002 Canon Kabushiki Kaisha Patent Attorneys for the Applicant SPRUSON&FERGUS ON 592977.doc
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
AU34408/02A AU771813B2 (en) | 2001-04-19 | 2002-04-18 | Converting path with non-zero winding fill rule or odd-even winding fill rule to a simple outline path |
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
AUPR4479A AUPR447901A0 (en) | 2001-04-19 | 2001-04-19 | Converting path with non-zero winding fill rule or odd-even winding fill rule to a simple outline path |
AUPR4479 | 2001-04-19 | ||
AU34408/02A AU771813B2 (en) | 2001-04-19 | 2002-04-18 | Converting path with non-zero winding fill rule or odd-even winding fill rule to a simple outline path |
Publications (2)
Publication Number | Publication Date |
---|---|
AU3440802A AU3440802A (en) | 2002-10-24 |
AU771813B2 true AU771813B2 (en) | 2004-04-01 |
Family
ID=25622874
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
AU34408/02A Ceased AU771813B2 (en) | 2001-04-19 | 2002-04-18 | Converting path with non-zero winding fill rule or odd-even winding fill rule to a simple outline path |
Country Status (1)
Country | Link |
---|---|
AU (1) | AU771813B2 (en) |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
AU2002318793B2 (en) * | 2001-12-21 | 2005-02-17 | Canon Kabushiki Kaisha | A Method for Performing Set Operations on Two or More Arbitrary Paths to Produce a Simple Outline Path |
GB2400780B (en) * | 2003-04-17 | 2006-07-12 | Research In Motion Ltd | System and method of converting edge record based graphics to polygon based graphics |
US7321373B2 (en) | 2001-12-21 | 2008-01-22 | Canon Kabushiki Kaisha | Method for performing set operations on two or more arbitrary paths to produce a simple outline path |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5471568A (en) * | 1993-06-30 | 1995-11-28 | Taligent, Inc. | Object-oriented apparatus and method for scan line conversion of graphic edges |
US5818460A (en) * | 1997-05-08 | 1998-10-06 | Autodesk, Inc. | Method for performing polygon set operations on polygonal regions |
US6111587A (en) * | 1997-05-08 | 2000-08-29 | Autodesk, Inc. | Method for converting non-zero winding to even-odd fill polygons |
-
2002
- 2002-04-18 AU AU34408/02A patent/AU771813B2/en not_active Ceased
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5471568A (en) * | 1993-06-30 | 1995-11-28 | Taligent, Inc. | Object-oriented apparatus and method for scan line conversion of graphic edges |
US5818460A (en) * | 1997-05-08 | 1998-10-06 | Autodesk, Inc. | Method for performing polygon set operations on polygonal regions |
US6111587A (en) * | 1997-05-08 | 2000-08-29 | Autodesk, Inc. | Method for converting non-zero winding to even-odd fill polygons |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
AU2002318793B2 (en) * | 2001-12-21 | 2005-02-17 | Canon Kabushiki Kaisha | A Method for Performing Set Operations on Two or More Arbitrary Paths to Produce a Simple Outline Path |
US7321373B2 (en) | 2001-12-21 | 2008-01-22 | Canon Kabushiki Kaisha | Method for performing set operations on two or more arbitrary paths to produce a simple outline path |
GB2400780B (en) * | 2003-04-17 | 2006-07-12 | Research In Motion Ltd | System and method of converting edge record based graphics to polygon based graphics |
Also Published As
Publication number | Publication date |
---|---|
AU3440802A (en) | 2002-10-24 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP4756937B2 (en) | How to draw graphic objects | |
JP4366387B2 (en) | Image processing apparatus and method | |
CN109564695B (en) | Apparatus and method for efficient 3D graphics pipeline | |
US6049339A (en) | Blending with planar maps | |
CN101604454B (en) | Graphic system | |
US6348921B1 (en) | System and method for displaying different portions of an object in different levels of detail | |
US7139003B1 (en) | Methods of processing graphics data including reading and writing buffers | |
US20020070942A1 (en) | Image processing device and system using the same | |
US20100110084A1 (en) | Parallel pipeline graphics system | |
US20030128224A1 (en) | Method of determining active priorities | |
EP1104918B1 (en) | Processing illustration artwork | |
JP4630482B2 (en) | Apparatus for generating representation tree and apparatus for rendering raster pixel image | |
US20030179200A1 (en) | Activating a filling of a graphical object | |
JP2000137825A (en) | Fast rendering method for image using raster type graphic object | |
US20090295828A1 (en) | Scan converting a set of vector edges to a set of pixel aligned edges | |
US7321373B2 (en) | Method for performing set operations on two or more arbitrary paths to produce a simple outline path | |
AU771813B2 (en) | Converting path with non-zero winding fill rule or odd-even winding fill rule to a simple outline path | |
AU2002318793B2 (en) | A Method for Performing Set Operations on Two or More Arbitrary Paths to Produce a Simple Outline Path | |
US20030122821A1 (en) | Overlapping triangle meshes | |
JP2625612B2 (en) | Image processing method and image processing apparatus | |
AU744091B2 (en) | Processing graphic objects for fast rasterised rendering | |
CN109598669A (en) | A kind of triangle rasterization Scan Architecture towards GPU | |
JP3251744B2 (en) | Image generation method by intersection tracking method | |
AU743218B2 (en) | Fast renering techniques for rasterised graphic object based images | |
JP3843794B2 (en) | Graphic processing device |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
DA3 | Amendments made section 104 |
Free format text: THE NATURE OF THE AMENDMENT IS: SUBSTITUTE PATENT REQUEST REGARDING ASSOCIATED DETAILS |
|
FGA | Letters patent sealed or granted (standard patent) |