Login| Sign Up| Help| Contact|

Patent Searching and Data


Title:
EFFICIENT PATTERNED FABRIC PRINTING
Document Type and Number:
WIPO Patent Application WO/2017/142718
Kind Code:
A1
Abstract:
A method, implemented at least in part by computer hardware and software, in combination, includes: (A) obtaining a pattern image; (B) determining a set of components for a product, each of the components having a corresponding component shape, wherein at least some parts of at least some of the components are adjacent each other in the product; (C) determining a desired pattern flow of the pattern image across the product; (D) determining a set of jigs corresponding to the set of components, wherein each particular jig corresponding to each particular component in the set of components; (E) determining a jigs image comprising the set of jigs; and (F) repeating at least part of the pattern image across the jigs in the jigs image in accordance with the desired pattern flow.

Inventors:
LEBOVITZ, Marc (14817 Hartsook St, Sherman Oaks, California, 91403-1410, US)
LITT, Kevin (12326 West Sunset Blvd, Los Angeles, California, 90049-3916, US)
Application Number:
US2017/016605
Publication Date:
August 24, 2017
Filing Date:
February 03, 2017
Export Citation:
Click for automatic bibliography generation   Help
Assignee:
ADORNABLY, INC. (14817 Hartsook St, Sherman Oaks, California, 91403-1410, US)
International Classes:
A41H3/08; B26D5/00; B41J2/01; B41J5/30; B41J11/66
Foreign References:
US6173211B12001-01-09
US6434444B22002-08-13
US3761675A1973-09-25
US20150325044A12015-11-12
EP0679759A11995-11-02
Attorney, Agent or Firm:
SIRITZKY, Brian (Siritzky Law, PLLC1765 Greensboro Station Place, Suite 90, McLean Virginia, 22102, US)
Download PDF:
Claims:
What is Claimed

We claim:

1. A method, implemented at least in part by computer hardware and software, in combination, the method comprising:

(A) obtaining a pattern image;

(B) determining a set of components for a product, each of said components having a corresponding component shape, wherein at least some parts of at least some of said components are adjacent each other in said product;

(C) determining a desired pattern flow of said pattern image across said product;

(D) determining a set of jigs corresponding to said set of components, wherein each particular jig corresponding to each particular component in said set of components;

(E) determining a jigs image comprising said set of jigs; and

(F) repeating at least part of said pattern image across said jigs in said jigs image in accordance with said desired pattern flow.

The method of claim 1 further compri printing the jigs image on a fabric.

3. The method of claim 2 further comprising:

(H) cutting the fabric into multiple fabric pieces corresponding to said jigs in said jigs image.

4. The method of claim 3 further comprising:

(I) forming the product using the multiple fabric pieces.

5. The method of claims 3 or 4 wherein the fabric is machine-cut using outlines associated with the shapes of jigs in the image as a cutting guide.

6. The method of any one of claims 1-4 wherein the jigs image is formed such that the pattern image only appears within the shapes of the jigs in the image.

7. The method of claim 6 wherein the pixels outside the shapes of the jigs in the jigs image are set so that no color is applied to the fabric in those locations during printing.

8. The method of any one of claims 1-4, wherein the pattern image is repeated within each jig shape separately, using a tiling starting point that is offset from an original overall starting point by a certain offset amount.

9. The method of claim 8 wherein said certain amount is determined to enable said desired pattern flow across fabric pieces once printed and sewn joined in said product.

10. The method of claim 8 wherein the certain offset amounts are determined by selecting pairs of tie points lying within separate jig shapes that represent points at which the pattern should flow.

1 1. The method of claim 10 wherein said offset amounts are determined to obtain a desired visual flow of said pattern image in said product.

12. The method of claim 1 1 wherein the selecting of pairs of tie points occurs once per set of jigs and the computerized computation of offsets occurs once per pattern to be printed.

13. The method of claim 10 wherein jig shapes are grouped into collections, wherein each collection has its own starting point, wherein each pair of tie points lie in separatejig regions within the same jig group, and wherein offset amounts are determined group-by-group.

14. The method of claim 1 wherein each of said jigs has a jig shape and wherein at least some of said jigs comprise a trim area adjacent at least a part of said jig shape.

15. The method of claim 14 further comprising:

(J) selecting and marking one or more orientation points within the trim area of one or more of said jig shapes, wherein said one or more orientation points are marked to be visibly or detectable when said jigs image is printed and not visible on the product.

16. The method of claim 15 wherein said one or more orientation points are used for folding and sewing during a product forming process to aid in orienting a fabric piece cut from the printed jigs image.

17. The method of claim 14 wherein additional information is overlaid on the jigs image, said additional information being located in the trim area of at least one jig region.

18. The method of claim 17 wherein said additional information comprises information to aid tracking of fabric pieces after the printed fabric is cut.

19. The method of any one of claims 1-4 wherein said repeating in (F) comprises flipping at least one instance of said pattern image in at least one of said jigs.

20. The method of any one of claims 1-4 wherein the product is selected from: upholstered furniture and apparel.

21. The method of any one of claims 2-4 wherein said forming the product in (I) comprises joining at least some of the multiple fabric pieces.

22. The method of claim 21 wherein, for at least some of said multiple fabric pieces, said joining comprises sewing.

23. A device comprising hardware, including a processor and a memory, the device being programmed to perform the computerized steps of the method of any one of claims 1-22.

24. A tangible non-transitory computer-readable storage medium comprising instructions for execution on a device, wherein the instructions, when executed, perform acts of a method on said device, wherein the method comprises the computerized steps of the method of any one of claims 1-22.

25. A tangible non-transitory computer-readable storage medium storing a jigs image formed according to the method of claim 1.

26. A system comprising: a fabric printer; and a device according to claim 23.

Description:
Efficient Patterned Fabric Printing

Copyright Statement

[0001] This patent document contains material subject to copyright protection. The copyright owner has no objection to the reproduction of this patent document or any related materials in the files of the United States Patent and Trademark Office, but otherwise reserves all copyrights whatsoever.

1.1 Related Applications

[0002] This application is related to and claims priority from United States

Provisional Patent application no. 62/296,033, filed February 16, 2016, the entire contents of which are fully incorporated herein by reference for all purposes.

1.2 Field of the Invention

[0003] This invention relates to fabric pattern creation, apparel manufacturing, and the furniture upholstery process.

1.3 Source Code Appendix

[0004] This application includes a source code appendix (Appendix A), which is considered part of the application for all purposes.

Background and Overview

[0005] Apparel products such as dresses, shirts, pants, sweaters, and the like are manufactured by sewing together pieces of fabric and other items such as buttons and zippers into a final product. The process of making a garment generally includes the following steps:

1. Obtain one or more bolts of fabric.

2. Obtain jigs corresponding to fabric pieces to be used in the garment.

3. Manually arrange the jigs on the bolt(s) of fabric.

4. Manually cut the fabric around the jigs.

5. Manually sew the pieces of fabric together and add buttons, etc.

[0006] Similarly, upholstered goods such as couches, chairs, ottomans, pillows, and the like, are manufactured by upholstering fabric onto a frame. The process of making an upholstered item similarly includes the following steps:

1. Obtain a frame and one or more bolts of fabric for upholstering. 2. Obtain jigs corresponding to fabric pieces to be used in upholstering the frame selected.

3. Manually arrange the jigs on the bolt(s) of fabric.

4. Manually cut the fabric around the jigs.

5. Manually apply the pieces of fabric onto the frame.

[0007] The third step in each of the processes above, manually arranging the jigs on the fabric bolt(s), involves careful alignment if the fabric, especially if the fabric contains any sort of repeating pattern. Manufacturers, especially of quality products, attempt to align patterns across seams, such as those between the front and back of a dress or the top and side of a cushion on a couch. Manufacturers may also seek to align fabric patterns at points other than along these seams, such as when alignment is desired between the bottom of a cushion and the top of the base of a couch, two areas that are not sewn together yet meet visually from the point of view of an observer to the final upholstered product (as depicted, e.g., in FIG. 1). As shown in FIG. 1, there is a relatively smooth-flowing pattern in the chair 100, from the perspective of an observer, at (i) a seam 102 where two pieces of fabric are sewn together; and (ii) an edge 104 where two separate pieces of fabric meet visually but are not sewn together.

[0008] Aligning a two-dimensional pattern perfectly seamlessly across all of these seams and edges is not always feasible, yet aligning the pattern as closely as possible is still a desired effect in both apparel and upholstered furniture. Manufacturers select certain points on the adjoining areas where close pattern alignment is most desired, and use these points to determine overall alignment.

[0009] In order to ensure that a pattern flows smoothly across sections of a completed product, the jigs must be placed on the fabric in positions and orientations that preserve the desired alignment. The larger the smallest repeat of the pattern is, the more fabric is wasted between jigs that are spaced for alignment. The resulting scraps (i.e., the pieces not under any jigs) are typically discarded, as they are typically no longer usable in the shapes into which they have been cut.

[00010] Fabric wastage can be especially significant in certain cases, affected by the orientation of the pattern on the fabric bolt, which may be driven, e.g., by the desired orientation of the grain of the fabric. If a pattern is particularly wide or tall, it may necessitate a certain orientation on the bolt (e.g., vertical or horizontal). This orientation may be different from the way the fabric must be sewn, however. For example, a striped pattern may be a horizontally laid out fabric that has the stripes flowing the entire length of the bolt, rather than along the shorter height dimension. For certain products, it can be manufactured to take advantage of the direction of the stripe flow and use fabric pieces that are as large as possible. For certain other products, however, it may have to be manufactured in the orthogonal orientation, requiring smaller fabric pieces that are sewn together at extra seams while attempting to preserve stripe alignment. The latter case incurs more fabric wastage and labor.

[00011] In addition to wasting fabric, the typical industry process described above involves a great deal of manual labor. Several steps of the process are necessarily performed by hand, by trained specialists, even if sometimes assisted by computers. Higher quality goods put special emphasis on the proper alignment of fabric patterns, and making the process exacting raises the cost and time involved, as well as requires employing specialists with more experience.

[00012] The largest component of time taken in the process is typically in obtaining the bolt of fabric for manufacturing. While a line of products may only comprise a small number of product shapes, it may often include a large number of fabric options. A large number of fabric options would be costly to hold in inventory since some may be only rarely ordered. As a result, retailers and manufacturers typically stock a small number of fabrics that represent their best sellers. When a customer selects a fabric outside of this set, the company must order it from the textile manufacturer before beginning the manufacturing process on the customer's goods. Processing and receiving such special-ordered fabric order can take weeks, delaying the delivery of the customer's order by weeks, as well.

[00013] The advent of digital printing onto fabrics opens up new possibilities for this manufacturing process. Stocking only white fabric in inventory and digitally printing colors and patterns on the fabric has the potential to eliminate the need to back-order fabric from a textile supplier. However, printing an entire bolt of fabric can be very costly, and even then, the rest of the industry's costly and time consuming manual process remains.

Brief Summary of Aspects of the Invention

[00014] A brief summary of some aspects of the invention is provided. This summary is not exclusive of other aspects of the invention, and those of ordinary skill in the art will realize and understand, upon reading this description, that other described features, systems, processes, and devices are within the scope of the invention. [00015] In some exemplary aspects, we provide a new manufacturing process, for example for apparel or furniture, that constructs a patterned image to be digitally printed onto fabric while preserving the flow of the pattern, as desired, across seams and visual boundaries of the final product.

[00016] In some exemplary aspects, a product is manufactured by selecting a group of jigs, representing them as binary masks, arranging them compactly in a jigs image, defining pattern constraints on the jigs image, constructing for each desired pattern a printing image using the jigs image and pattern constraints, printing the printing image onto a fabric, manually- or machine-cutting the fabric into pieces according to the edges of the jigs image, and assembling the fabric pieces onto the frame of the product in the correct orientation.

[00017] In some exemplary aspects, pattern constraints may include at one or more orientation points for each jig region to assist the sewer in orienting the associated fabric piece during final assembly, center points for each jig group to indicate starting points for pattern flow across the associated jig regions in the group, and tie point pairs for each jig group to indicate how the pattern flows from one jig region in the group to another in the image to be printed onto the fabric.

[00018] In some exemplary aspects, a computerized process is used to compute the image to be printed onto the fabric, taking into account the shapes and orientations of the jigs, the size of the trim, the pattern to be printed, the scale of the images, and the pattern constraints selected.

Brief Description of the Drawings

[00019] The file of this patent contains at least one drawing executed in color. Copies of this patent with color drawing(s) will be provided by the Patent and Trademark Office upon request and payment of the necessary fee.

[00020] Various other objects, features and attendant advantages of the present invention will become fully appreciated as the same becomes better understood when considered in conjunction with the accompanying drawings, in which like reference characters designate the same or similar parts throughout the several views, and wherein:

[00021] FIG. 1 shows an example of a chair upholstered with a patterned fabric;

[00022] FIGS. 2A-2B show examples of individual jigs and a jigs image, respectively;

[00023] FIG. 3 shows an exemplary jigs image showing the trim highlighted;

[00024] FIGS. 4A-4C show exemplary fabric patterns; [00025] FIG. 5 shows exemplary images of a printing image according to exemplary embodiments hereof;

[00026] FIG. 6 shows an exemplary jigs image with pairs of tie points indicated;

[00027] FIGS. 7A-7D depict aspects of exemplary images according to exemplary embodiments hereof;

[00028] FIG. 8 shows an exemplary cosine function with period r v ;

[00029] FIG. 9 is a flow diagram depicting a process according to exemplary embodiments hereof.

[00030] FIG. 10 shows an example binary mask for a circle-shaped jig;

[00031] FIG. 11 displays an exemplary jigs image with a potential set of jig groups and exemplary center points indicated;

[00032] FIGS. 12A-12B display exemplary images of a scaled image tile and an associated jig tiled image, respectively;

[00033] FIG. 13 shows exemplary images of a jig tiled image for a circle jig and a jig mask for the circle jig and a printing image;

[00034] FIGS. 14A-14C show an example of a fabric pattern suitable for flipping according to exemplary embodiments hereof;

[00035] FIGS. 15A-15D show a pattern image flipped in various ways;

[00036] FIG. 16 shows an exemplary graphical user interface (GUI) according to exemplary embodiments hereof; and

[00037] FIG. 17 describes aspects of computing according to embodiments hereof.

Detailed Description of the Presently Preferred Exemplary Embodiments Glossary and Abbreviations

[00038] As used herein, unless used otherwise, the following terms and abbreviations have the following meanings:

1. A mask means a digital image or area of pixels containing two distinct sets of pixel values, where the values in one set of pixel values are considered masked-in, and the values in the other set of pixel values are considered masked out.

2. A binary mask means a digital image or area of pixels containing only one of two pixel values, where one value is considered masked-in, and the other masked-out. A binary mask may be considered to be a mask in which each set of pixel values contains only one of two possible pixel values.

The grain of a fabric refers to the direction(s) of the yarns (e.g., straight and/or crosswise) making up a woven fabric.

Image space means the two-dimensional spatial area of an image, with a vector basis that includes horizontal and vertical axes (e.g., X for horizontal, and Y for vertical).

A jig means an arbitrary shaped device or digital (e.g., binary) mask, e.g., shaped as a silhouette. A jig may be used as a guide (e.g., for automatic tools) for cutting a portion of bolt of fabric into a particular shape, e.g., for upholstering or otherwise forming a section of a product. When a "jig" refers to a binary mask, that mask may digitally define the shape of a silhouette for an image to be printed onto a fabric.

A jig group means a set of one or more jigs. A jig group may define pieces of fabric across which a pattern is expected to flow (preferably as seamlessly as possible) at desired points. At these points, the same position in the pattern repeats (or repeats as close to it as possible, depending on user-defined constraints), is expected to be seen on either side of the fabric piece divide so that the pattern appears to flow across the upholstered goods at a sewn juncture or visual edges. See, e.g., the upholstered chair 100 in FIG. 1.

A jigs image space means the image space of a composite mask (e.g., a binary mask) that includes binary masks of all digital silhouettes of jigs.

A jig region means the region of fabric corresponding to the area that lies directly under a jig. In the case of a digital image to be printed onto fabric, a jig region is the collection of pixels corresponding to locations within masked-in values of a binary mask that includes a digital representation of the associated jig.

Masked-in, in the context of a binary mask, refers to areas of the mask that are of interest.

Masked-out, in the context of a binary mask, refers to areas of the mask that are not of interest.

Parametric space is equivalent to UV space (see below). 12. Pattern tile means a section of a two-dimensional pattern or design that is intended, potentially, to be repeated in all directions.

13. Pattern repeat is equivalent to pattern tile.

14. A printing image refers to an image formed, as described herein, that may be printed onto a fabric.

15. Selvage is equivalent to trim (see below).

16. Trim means the area along the edges of a cut piece of fabric that is used for

connecting (e.g., sewing) the fabric piece to one or more other fabric pieces (e.g., during an upholstery process). The trim is typically folded underneath so that it is not in view on the outside of the final product. The trim typically encircles the entire piece of fabric.

17. UV space means the two-dimensional space corresponding to the image space of a pattern to be repeated on a fabric. UV space has a vector basis that includes axes U (horizontal) and V (vertical).

18. A "mechanism" refers to any device(s), process(es), routine(s), service(s),

module(s), or combination thereof. A mechanism may be implemented in hardware, software, firmware, using a special-purpose device, or any combination thereof. A mechanism may be integrated into a single device or it may be distributed over multiple devices. The various components of a mechanism may be co-located or distributed. The mechanism may be formed from other mechanisms. In general, as used herein, the term "mechanism" may thus be considered shorthand for the term device(s) and/or process(es) and/or service(s).

1.4 Background

1.5 Jigs Image Mask

[00039] A jig, e.g., as typically used in the manufacturing process for apparel or upholstery, is a guide to cutting fabric from a bolt. A jig may be physical or digital. The jig is a silhouette of the desired shape of the fabric piece, based on the design of the product. Each product is typically associated with a collection of jigs that guide cutting of the pieces of fabric needed for its manufacture.

[00040] Exemplary processes and mechanism hereof use a digital representation of the collection of jigs for a product, referred to here as a jigs image. FIG. 2A shows examples of individual jigs 200, 202, 204, 206 (digital images corresponding to initial binary masks of single jigs). An example jigs image 206 is depicted in FIG. 2B. In the examples in

FIGS. 2A-2B, and in subsequent examples herein, for the sake of this description, black or cross-hatched regions in the drawings or pixels represent masked-in areas, and the white (or non-cross-hatched) regions or pixels represent masked-out areas.

[00041] The four particular jig shapes used in this description are used only as examples, and those of ordinary skill in the art will appreciate and understand, upon reading this description, that different and/or other jig shapes may be used. Furthermore, although the jigs image 206 in FIG. 2B shows only one use of each jig shape, those of ordinary skill in the art will appreciate and understand, upon reading this description, that a particular jigs image may use some jigs shapes multiple times and need not use all jig shapes for all jigs images.

[00042] Each jig may be represented in the jigs image as a binary mask, where, for example, white pixels may denote areas included in the jig, and black or cross-hatched pixels the area outside them. The jigs image is used, as described herein, as a digital guide to constructing a printing image (which may be the image that will be printed onto a piece of fabric for cutting and sewing into the final product). The jig masks, also referred to here as jigs for simplicity, are preferably arranged compactly within the jig image to reduce fabric wastage, since only white "masked-in" pixels will be used in the associated printing image once it is printed and cut. The pixel areas of the printing image that correspond to pixels within the digital jigs of the jigs image are referred to here as jig regions.

[00043] As noted above, a printing image refers to an image formed, as described herein, that may be printed onto a fabric. A printing image is preferably, though not necessarily, printed onto a white or monochromatic fabric, although this is not required.

1.6 Trim

[00044] Each jig leaves (or includes) some room along its outer edge, preferably all the way around, for fabric that will be folded and sewed during final assembly. This area is called trim or selvage and is preferably not visible on the surface of the final product. An operator may select how much trim should be left around the edges of the jigs. FIG. 3 shows an exemplary jigs image 206' showing the trim highlighted and a measure of trim size t d indicated (the trim size is t p in pixels, corresponding to t d in real-world measurement). [00045] Although FIG. 3 shows trim uniformly around all of the jig regions in the jigs image, it should be appreciated that the trim need not go around an entire jig region and the width of the trim may vary from jig to jig and for any particular jig.

1.7 Pattern Constraints

[00046] To aid in this description, FIGS. 4A - 4C show exemplary fabric patterns.

The pattern of FIG. 4A is used as an example pattern in the following descriptions.

[00047] FIG. 5 displays exemplary images of a printing image 500 with exemplary orientation point 502, jig region 502, transparent pixels (indicated as checkered areas, with tracking labels omitted), and seamless pattern flow called out based on tie points (overlaid in the image as numbered circles with "1" or "2" therein). The printing image 500 in FIG. 5 uses the pattern tile of FIG. 4A.

1.7.1 Jig Groups

[00048] An operator groups jigs into jig groups with defined constraint points so that the mechanism (e.g., software process) can properly calculate the fabric pattern layout across jig regions and produce a printing image. Each jig group includes jig regions that are related to each other in that the pattern is expected to flow as seamlessly as possible across jig region boundaries at certain desired points (so-called tie points, discussed in Section 1.7.2.3 below). Pattern layout computations for different jig groups are handled separately, whereas those for jig regions within a single jig group are handled together. The mechanism / software process computes fabric tile positioning for each jig region based on the jig group to which it belongs, the group's center point (see Section 1.7.2.2 below), and all tie points for the group. The operator sets up the constraints, preferably once per product design, which can then be used by the mechanism / software process to produce a printing image for any number of units of the product design and any fabric pattern desired.

[00049] An operator groups jigs into one or more jig groups by selecting jigs for each group. Each jig group must have at least one jig.

1.7.2 Constraint Points

[00050] Pattern constraint points constrain how the pattern is laid out across the jig regions by the software and include jig orientation points, jig group center points, and jig group tie points. 1.7.2.1 Orientation Point

[00051] Each jig may have one or more orientation points. Orientation points are used to preserve orientation information after printing and cutting, so that the manufacturer (e.g., an upholsterer or tailor or manufacturing mechanism) knows how to orient the fabric on the product. A mark is applied to the trim of the jig regions in the printing image at each orientation point, e.g., as orientation point 502 depicted in FIG. 5. The mark will be used by a manufacturer to orient the printed and cut fabric piece of the jig for sewing.

[00052] Note that an orientation point does not control the orientation of the pattern in the printing image. Rather, the orientation point is added to clearly assist the manufacturer in orienting each fabric piece during final assembly. An orientation point can be selected manually by an operator or automatically by a software algorithm. Alternatively, the mechanism / software process could be constructed so that the user indicates the direction of the pattern for the jig, and the orientation point could be selected manually or automatically.

1.7.2.2 Center Point

[00053] Each jig group should have one center point. Center points are used by the software as the starting point from which a fabric pattern should be repeated across a jig group. The mechanism / software process repeats the pattern across the jig group outward in all four directions from the center point.

1.7.2.3 Tie Points

[00054] When transitioning a fabric repeat from one jig in a jig group to another, the mechanism / software process uses tie points to determine how to pick up the repeat across a jig divide in a way that preserves the flow of the repeat as desired by the operator.

[00055] Tie points come in pairs, and each pair of tie points constrains the pattern so that the fabric is laid out in as close as possible to the same position in its repeat at each point of the pair given the collection of tie pairs. Those of ordinary skill in the art will appreciate and understand, upon reading this description, that the phrase "as close as possible" means as close as reasonably possible within constraints of the pattern and the physical, real-world components (e.g., the fabric, cutting devices, printers, etc.).

[00056] Tie point pairs must consist of points located in different jigs and are used to ensure an aesthetically pleasing pattern flow from one piece of fabric to another when upholstered onto a frame, as depicted, e.g., in FIG. 1. Every jig within a jig group must be connected, either directly or indirectly, to every other jig within the group through tie points, and each pair of jigs within a group can have multiple tie point pairs. Since there can be multiple tie point pairs for a pair of jigs within a group, a best-fit algorithm may be used to determine the best result for flowing the fabric repeat with the constraints defined (see the discussion on "Closed-Form Equation for Offset Computation" in Section 1.8.2 below).

[00057] FIG. 6 shows an exemplary jigs image 600 with pairs of tie points indicated.

1.8 Process for Computation of a Printing Image 1.8.1 Overview

[00058] Given the constraints, a mechanism (e.g., a software process) computes an image (the "printing image") for each pattern to be printed onto fabric for manufacture. The pattern repeat should appear at the appropriate scale in the printing image. The pattern repeat should begin at each jig group's center point and be repeated outward from there. For jigs that do not contain their group's center point, a parametric space offset from the jig group's center point in the jigs image is computed as a new starting point, given the locations of tie points within the group (exemplary pseudo-code for traversing jigs within a jig group to compute their parametric offsets is provided below, in the source code appendix hereto, in the section titled Calculating All Offsets for a Jig Group, Section 1.19). Although the exemplary source code is implemented recursively, it could be done iteratively as recursive pathways can also be defined as iterative pathways. Each offset is two-dimensional and provides X and Y directional components in image space; it is given in pixels and takes the form (X component, Y component). The offset for a jig containing its group's center point is taken to be (0, 0).

[00059] FIGS. 7A-7D depict aspects of exemplary images according to exemplary embodiments hereof and are used to aid the discussion. FIG. 7A shows an exemplary image tile 700 to be use as a patterned texture image. The image tile 700 has dimensions r u pixels by r v pixels. FIG. 7B shows exemplary jigs images (jigs image P 702 with fixed offset, and jigs image Q 704 with unfixed offset), with tie points between the two indicated (as circles.) FIGS. 7C and 7D show exemplary printing image examples after tiling, with the tie points overlaid (for clarity without orientation point marks or tracking tickets but with ties points indicated) with the image tiled seamlessly across tie points in FIG. 7C, and skewed alignment in FIG. 7D

[00060] For the example printing image in FIG. 7C, for all tie point pairs i, and for all integer values of x, Piu = qiu + * ru

Piv = qiv + * r v

[00061] For the example printing image in FIG. 7D, for all tie point pairs z, and for all integer values of x,

Piu = qiu + x * (ru / 2)

Piv = qi + x * r v

1.8.2 A Closed-Form Equation for Offset Computation

[00062] The offsets are computed by solving a closed-form equation that provides a best-fit of pattern seamlessness at tie points given the constraints. The equation takes advantage of the fact that a repeating pattern's alignment across a boundary can be described with a waveform. If one jig region's offset has been determined and fixed while a

neighboring jig region's offset has not, varying the offset of the second region shifts the pattern on that area. Since the pattern repeats, it moves closer to alignment with that of the neighboring jig region, then farther from alignment, and repeats the results in a cycle as the offset changes linearly.

[00063] We can construct a cosine function to describe the results of the pattern along either the U or V dimension of UV space. Assume, without loss of generality, that we are trying to align the fabric pattern of a jig region P to a jig region Q at tie points selected by a user. The regions P and Q often meet along a boundary seam at the inner edge of each region's trim when the jig regions are printed on fabric and joined (e.g., sewn) together. Sometimes, however, the neighboring jig regions are not sewn together, but rather visually juxtaposed, for example at the point where a cushion presses up again an upholstered frame in a piece of furniture (see, e.g., the chair 100 in FIG. 1). In either case, we will refer to the boundary as a seam boundary here for expediency.

[00064] The fabric patterns of the regions P and Q will appear seamless across the seam boundary at tie point pairs if and only if the pattern is applied such that it is at the same UV coordinates at each tie point of a pair and oriented in the same direction. For normalized parametric coordinates of a repeated pattern tile, the position on the pattern tile varies according to the fractional portion of the coordinate, with every integer change representing a full cycle that brings the position back to the same place on the pattern tile. Let v ( Ξ {U, V} be the dimension of interest in UV space. Let r v be the size of the pattern tile along dimension v in UV space. If p iv is the parametric position of the tie point from tie point pair i in region P along dimension v in UV space, and q iv is the parametric position of the matching tie point of tie point pair i in region Q, p w = q w would yield an exact alignment, r

while p jv = q lv + -^- would yield an alignment as skewed as possible along dimension v, as depicted in the example in FIG. 7D. However, alignment is cyclical, so there are actually an infinite number of solutions for q iv that would create a pattern alignment at the matching tie point of pair i with a fixed p iv . So, for all integer values of x, an exact match satisfies:

[00065] Let a result value of 1 denote perfect alignment between the patterns of the two jig regions along a single UV dimension at a single tie point pair, and a value of -1 denote the regions' patterns being as far from alignment as the pattern allows along a single UV dimension at a single tie point pair. Result values vary between -1 and 1 as the offset for the corresponding dimension of the UV coordinate varies for the neighboring region's matching tie point. The variation of the result values reflects a waveform with a period that equals the repeat size of the pattern tile along the corresponding axis in UV space, as depicted in FIG. 8 (which shows an exemplary cosine function with period r v ).

[00066] To achieve pattern alignment at a tie point pair along a single UV dimension, the offset s v is found which maximizes the following equation:

Equation 1

max{cos[(— ) * (p w - (q w + s )]} where:

i : the index of a tie point pair;

v ( Ξ {U, V} , one of the parametric dimensions of UV space; s v : the offset in UV space along dimension v for the UV coordinates of tie points of the region being aligned in UV space;

p w : the coordinate in UV space along dimension v for the tie point pair i's parametric pattern mapping coordinates that correspond to the neighboring region that already has a fixed UV mapping; q w : the coordinate in UV space along dimension v for tie point pair i matching tie point's parametric pattern mapping coordinates that correspond to the region being aligned in UV space;

r v : the size in UV space along dimension v of the pattern tile for a single repeat of the pattern.

[00067] The objective is to optimize pattern alignment across all tie points of the region being aligned with matching tie points in neighboring regions. To that end, the sum of Equation 1 across all tie point pairs i should be maximized, as shown in the following equation:

Equation 2 max{Ycos[(— ) * {p w - (q w + s )]}

.

[00068] First, a local maximum or minimum can be found by finding the derivative of

Equation 2 and setting it to zero, then solving for s v . (Note that in the case of a single tie point pair i between regions p and q, one maximizing solution to Equation 2 will be simply s v = p v - q v )

0 = (Y cos[(— ) * <j> lv - (q lv + s v ))D

0 = \V- sin[(— ) * (/>,„ - (<?,„ + *„))])

0 = (-sin[(— ) * (p w - q - (— ) * s )])

r„. r„.

Let: )

K.

Then

0 = -^(sin(a + b * s v ))

[sin(a) * cos(b * s v ) + cos(a) * sin(b * s v )] Let:

c = ^ [sin(a)] d = ^ [cos(a)]

Then

0 = c * cos(b * s v ) +d * sin(b * s v )

Solving for v

1 * ,- c

s =— * arctani— )

v b d

Substituting for a, b, c, and d:

Equation 3 s = -(

[00069] Since Equation 2 describes a cosine function, any local maximum is equivalent to the global maximum, and any local minimum is equivalent to a global minimum.

Therefore, any value of ^ that yields a local maximum is a valid solution. This makes sense since the pattern repeats and any two offsets ^ that are an integer number of repeats of length r v apart are equally optimal.

[00070] Since the current value of s v may be either a local maximum or a local minimum, which it is must be determined. If it happens to be a local minimum, it must be changed to a local maximum, which also serves as the global maximum. Since Equation 2 describes a cosine function, each local maximum is half a period apart from a local minimum, and vice versa, in either direction. Therefore, to determine whether s v is a local maximum or a local minimum, first the result x of the following, from Equation 2, is computed: x = V cos[(— ) * (p lv - (g lv + s v ))] r

Then, -^-is added to s v and the result y using Equation 2 is computed once more: y = Jcos[(—) * ^„ - (¾„ + (*„ + ¾))]

^ r 2

[00071] If (x > y), s v yields a local maximum, and therefore a global maximum.

v

Otherwise, if (y > x), s v + ~^ yields a local, and therefore global, maximum. The value that yields a global maximum is used as the offset in the vE:{U,V} dimension of UV space.

[00072] This process is followed to compute offsets in each of the U and V dimension in UV space for each jig region that does not contain its jig group's center point.

1.8.3 Relating Offsets in UV Space to Offsets in Jigs Image Space

[00073] We still, however, need to ensure that we can translate offsets in UV space to offsets in jigs image space to actually offset the jig group's center point for tiling the pattern for the member jig. We do so by making two adjustments. First, we scale the pattern tile image so that its measure of the ratio of pixel size to real world size (e.g. pixels per inch) equals the same measure for the jigs image. That means, in effect, that we can paste the pattern tile image inside the jigs image and it would represent the pattern at the correct scale in the jigs image since pixel sizes in each are equivalent. Second, we work with inputs to Equation 3 in units of pixels, including r v , p iv , and q iv . Then the resulting s v will be in pixels that apply to an offset in the jigs image space.

1.8.4 Constructing the Printing Image

[00074] Once the orientation points, center points, and offsets have been determined, the mechanism {e.g., the software process) moves on to construct the printing image, which is the image that will be printed onto the fabric. First, the pattern tile and the jigs image are adjusted to be at the same scale of pixels per real-world distance unit {e.g., inches), which should also reflect the level of resolution desired for printing onto fabric. Also, the printing image should represent the same real-world size as the fabric onto which the printing image will be printed. One approach is to scale the jigs image first, if necessary, so that its real- world size equals the real-world size of the fabric. Then, if necessary, scale the pattern tile so that it matches the jigs image pixels per inch scale.

[00075] For each jig region, a new jig region image is created of the same size as the jigs image but with four channels of data: blue color, green color, red color, and alpha (transparency) value. Note that this image and others could be represented in other color spaces (e.g. CMYKA) that would be equivalent. The pattern tile is repeated across the jig region image, cropped at the edges of the image where necessary. The starting point for the tiling repeat is the center point of the current jig's jig group plus the offset values computed for the jig, as described above (see Sections 1.8.1 and 1.8.3). The pattern tile is repeated from that point outward in all four directions to the edges of the image.

[00076] Once all jig region images have been completed, a new printing image is created of the same size as the jigs image and with four channels: blue, green, red, and alpha. The printing image is initialized so that all its pixels are transparent pixels. Each jig region image's pixel data is copied into the printing image, but using the binary mask M for the jig so that only pixels that are in the jig region are copied over. Marks may be overlaid in the trim of each jig region at the orientation points to identify their positions after printing and cutting.

[00077] Additional information may be overlaid on the printing image, e.g., in the trim of each jig region to record information such as work order number, purchase order number, fabric name or ID, fabric color, item number, etc., depending on manufacturing tracking needs. This additional information is referred to herein as the traveler ticket for the fabric pieces. This additional information may be used to ensure the fabric pieces are correctly tracked through the cutting and sewing steps. This additional information is preferably overlaid in the trim of each jig region so it can be referenced during manufacturing without being visible on the outside of the final product.

1.9 Printing the Fabric

[00078] The printing image may be printed with any appropriate printer for the intended / desired kind of fabric. The printing image format may need to be converted based on the needs of the printer to be used, for example to .ppl format. Once converted, printing image is ready to be printed onto the fabric since it represents the same real-world size as the fabric onto which it is being printed. Printing is performed using a digital printer, for example one that operates using the process of digital sublimation. Color is applied to the fabric in areas represented by opaque pixels in the printing image, while areas represented by transparent pixels are left uncolored. It should be appreciated that the system is not limited by the format of the printing image or by the type of printer or fabric used. [00079] The fabric printed on may be any fabric or material that can have an image formed (e.g., printed) thereon and that is suitable for the intended final product (e.g., apparel, furniture, etc.). The system is not limited by the type of fabric used.

1.10 Cutting the Fabric

[00080] The resulting printed fabric can be machine-cut using cutting-path information gleaned from the jigs image. Cuts should occur along the edges of each jig mask within the jigs image. The paths of these edges may be known already if working in a vector graphics format. If not, these edges can be detected using an edge-detection algorithm such as the Canny edge detector described in Canny, J., "A computational approach to edge detection." In IEEE Transaction on Pattern Analysis and Machine Intelligence 8, 1986, pages 679-714, the entire contents of which are fully incorporated herein by reference for all purposes.

Cutting edge information may need to be translated into a format used by the cutting machine selected. If desired, cutting could be performed manually, instead. As should be appreciated, the scope of the system is not limited by the manner in which the printed fabric is cut.

1.11 Sewing (joining) the Fabric

[00081] Sewing (or joining) the fabric is performed as normal, with the marked orientation point or points on each fabric piece serving as a guide to the sewer for the orientation of the piece of fabric. Although the terms "sew," "sewn," and "sewing" are used herein, any suitable form(s) of joining fabric may be used, including sewing, fusing, etc. As should be appreciated, the scope of the system is not limited by the manner in which the printed fabric is sewn or otherwise joined.

Operation of the System

[00082] Exemplary operation of the system is described here with reference to the flowchart in FIG. 9 that illustrates a process according to embodiments hereof. As shown in FIG. 9, the exemplary process includes the following: input images and sizing information (at 900); select pattern constraints (at 902); construct a printing image based on the input images, sizing information, and pattern constraints (at 904); print the printing image onto a fabric (at 906); cut fabric (as needed) around jig regions (at 908); and join the fabric pieces (at 910).

[00083] Those of ordinary skill in the art will appreciate and understand, upon reading this description, that a particular implementation may only implement parts of this process and that, in some cases, different parts may be implemented by different parties. For example, in some cases, a system may be provided with the images, sizing information, and pattern constraints, and construct the printing image (at 904). The printing image may then be provided (e.g., as a digital file or such) to other parties to print the constructed printing image onto a fabric (at 906). The printed fabric may then, in some cases, be provided to other parties to cut the fabric (as needed) (at 908). The cut fabric may then, in some cases, be provided to other parties, to join the fabric pieces (at 910).

1.12 Prepare / Determine Inputs

[00084] The user prepares input for computation through the following manual actions:

1. Acquire digital silhouettes of jigs as binary masks. Example jigs 200, 202, 204, 206 are depicted in FIG. 2A, with jigs masked-in with hatching (shading) and masked-out areas in white.

2. Lay out digital silhouettes of jigs (preferably as compactly as possible) in a

composite binary mask ("jigs image"). An example jigs image 208 is depicted in FIG. 2B. Jigs should be arranged with the expectation that the fabric pattern will be oriented like the mask image for repetition across jig regions; in other words, right-side-up within the image with the top-left of the pattern closest to the top-left of the image.

3. Set aside a binary mask, M, for each jig in the position it takes in the jigs image within an image of the same size. An example binary mask 1000 for a circle- shaped jig 1002 is depicted in FIG. 10.

4. Determine associated real-world size (width i w and height i h ), for example in

inches, of the jigs image as the size of the fabric bolt onto which the fabric pattern will be printed.

5. Determine real -world size of trim, for example in inches, as measured by the

distance t d from the outer edge of each binary jig mask to the inner edge of the trim, as depicted in FIG. 3. FIG. 3 shows an exemplary jigs image 208' showing the trim highlighted. As shown in FIG. 3, the hatched areas (pixels) represent masked-in areas, and white pixels represent masked-out areas.

6. Acquire one or more digital images of a pattern repeat to be printed on the fabric (e.g., for upholstering). For each pattern repeat, determine the associated real- world size, for example, in inches, of the pattern repeat in width k w and height k h . The image size in pixels is represented by d u and d v for the U and V parametric space dimensions, respectively. [00085] These acts (described above under the heading "Prepare / Determine Inputs") may correspond, at least in part, to act 900 in the flowchart of FIG. 9.

1.13 Determine pattern constraints

[00086] Pattern constraints include jig orientation points, jig group center points, and jig group tie points. While these can be defined in any order, for illustration, they are listed in the order just given. Pattern constraints constrain how the pattern is laid out across the jigs by the mechanism (e.g., the software). Orientation points are optional and are used to preserve orientation information after printing and cutting, so that a sewer knows how to orient the fabric. Center points are used by the mechanism (e.g., the software) as the starting points from which a fabric pattern should be repeated across a jig group. When transitioning a fabric repeat from one jig in a jig group to another, the mechanism uses tie points to determine how to pick up the repeat across a jig divide in a way that preserves the flow of the repeat as desired by the operator.

1. If desired, define at least one orientation point for each jig within the trim of the jig. A mark will be applied at this point in the jig's trim to the printing image, as depicted, e.g., orientation point 502 in FIG. 5. The mark will be used (e.g., by a sewer) to orient the printed fabric of the jig.

1.1. Computationally identify pixels within the jigs image that correspond to trim areas based on real-world size of trim t < j and the jigs image.

1.1.1. Determine the scale of the igs image, s, in pixels per some real-world distance unit (e.g. inch) as either m where j w and j h are the width and

height, respectively, or the jigs image in pixels. As long as the pixel ratio of width to height equals the real-world size ratio of width to height, the two calculations should result in the same answer to reasonably significant digits.

1.1.2. Determine the width of the trim in pixels, t p , as t p = t d * m

1.1.3. Copy the jigs image into a temporary image, referred to here as the eroded jigs image.

1.1.4. Shrink the jig silhouettes in the eroded jigs image uniformly along their edges by t p pixels using, for example, a morphological erode operation on the image.

1.1.5. Create a new image, the trim image, by taking the Boolean XOR of the jigs image with the eroded jigs image. The trim image will have masked-in pixels where the trim exists and masked-out pixels everywhere else, corresponding to the same pixel locations in the jigs image.

1.2. Orientation points may selected for each jig in the jig image, restricted to pixels

within the trim for the associated jig so that after marked on the final printed fabric, it will not be visible once assembled into the product. The orientation points can be selected manually by an operator or automatically by a software algorithm to reside in the trim on the top side of each jig, where the top of the jig is oriented toward the top of the jigs image in them method of this embodiment, but does not have to be if the pattern is allowed to be oriented differently.

Define a center point and tie points for each jig group. A center point constrains the pattern to begin repeating outward in all four directions from the center point across the jig group. Tie points come in pairs and each pair constrains the pattern so that the fabric is laid out in as close to the same position in its repeat at each point of the pair. Tie-point pairs must consist of points located in different jigs and are used to ensure an aesthetically pleasing pattern flow from one piece of fabric to another when sewn together, e.g., as depicted in FIG. 1. Every jig within a group must be connected either directly or indirectly to every other jig within the group through tie points, and each pair of jigs within a group can have multiple tie point pairs.

2.1. An operator group jigs into jig groups.

2.1.1. The operator groups jigs into one or more jig groups by selecting jigs for each group. FIG. 11 displays an exemplary jigs image 1100 with a potential set of jig groups and exemplary center points indicated (hatched pixels represent masked- in areas and white pixels represent masked-out areas, excluding center points). Each group must have at least one jig. The mechanism/software computes fabric repeat positioning for each jig based on the jig group to which it belongs, the group's center point, and all tie points for the group.

2.2. A center point is selected (e.g., by an operator) for each jig group. The center point must lie within a jig that is a member of the jig group. See, e.g., FIG. 11 in which jigs image 1100 includes two logical jig groups 1102, 1104, with center points 1106 and 1108, respectively.

2.3. Any desired tie point pairs are selected (e.g., by a operator) for each jig group. Pairs must consist of points that lie within different jigs of the same jig group. Tie points constrain a desired flow of a pattern across pieces of fabrics defined by different jigs. At tie point pairs, the same position in the pattern repeat (or as close as possible to it given the full distribution of tie points) is desired to be seen on either side of the fabric piece divide so that the pattern appears to flow across the product surface at the juncture. See, e.g., FIGS. 1 and 7A-7D.

[00087] These acts (described above under the heading "Determine Pattern

Constraints") may correspond, at least in part, to act 902 in the flowchart of FIG. 9.

1.14 Compute a Patterned Image to be Printed on Fabric

[00088] Given the constraints, a mechanism (e.g., a software process) computes an image (the "printing image") for each digital image of a pattern repeat to be printed onto fabric for assembly into a final product. The pattern should appear at the appropriate scale in the printing image. The pattern repeat should begin at each jig group's center point and be repeated outward from there. For jigs that do not contain their group's center point, an offset from the jig group's center point is computed as a new starting point, given the locations of tie points within the group. Related pseudo-code is provided in the source code appendix hereto.

1. For each jig, compute its offset as directed by Equation 3 and demonstrated in source code appendix.

2. Let the starting point, (u s , v s ), for the tiling of each jig be the corresponding jig group' s center point (u c , v c ) plus the jig's offset in each dimension:

2.1. u s = u c + s u

2.2. v s = v c + s v

3. For each jig, create a tiled image using the tiling starting point (u s , v s ), the image tile of pixel size width d u and height d v and real-world size width k w and height 1¾ the real-world size width i w and height ih of the printing image, and the scale ratio m of pixels per real-world distance unit (e.g. inches) for the printing image.

• Desired number of horizontal repeats of the image tile in texture image: ¾ = i w / k x

• Desired number of vertical repeats of the image tile in texture image: n v = ih /

• Desired width of printing image in pixels: z w = round( i w *m )

• Desired height of printing image in pixels: Zh = round( ih*m )

• Ratio of width to height in the image tile: f = d„ / d v

• Desired width of scaled tile image in pixels: r u = round( z w / ¾ ) • Desired height of scaled tile image in pixels: r v = round( Zh / n v )

The resulting r u and r v values may not be in the same aspect ratio as the image tile, which could lead to stretching in one dimension if the image tile is scaled according to these values. To avoid stretching, set the size using the smaller of r u and r v , and then compute the size of the other dimension using the ratio of the dimensions of the image, as in:

3.1. If (r u < r v ) r v = round(r u / f ); else r u = round (r v * f )

Create a scaled version T s of the image tile T that is r u pixels in width and r v pixels in height.

Create new blank image Ti of width (r u * ¾) and height (r v * n v ).

Repeatedly copy the scaled image tile T s into Ti starting at from (u s , v s ) in image space in Ti and moving outward in both the positive and negative directions of the X and Y axes, cropping the result to bounds of Ti (see FIGS. 12A and 12B, which display exemplary images of a scaled image tile T s 1200 and an associated jig tiled image Ti 1202, including annotations describing image sizes and locations of key points).

Create a blank printing image with black, transparent pixels (four-channel color image includes alpha values) of size pixel width z w and pixel height Zh

For each jig's tiled image Ti, copy pixels whose positions fall within the jig's binary mask M masked-in pixels into the printing image (see, e.g., FIG. 13 which shows exemplary images of a jig tiled image for the circle jig, a jig mask M 1302 for the circle jig, and a printing image 1304 based on jig tiled image (Ti 1300) and the circle jig, with orientation points and tracking labels excluded, and transparent pixels represented as checkered areas. In the example in FIG. 13, the hatched pixels are masked out, and transparent pixels are represented as checkered areas.).

Create a mark in the trim of each jig region in the printing image at the position of the jig's orientation point.

Overlay any additional information needed for manufacturing tracking of fabric pieces through the cutting and sewing steps. This information may include, for example, work order number, purchase order number, fabric name or ID, fabric color, item number, etc. It is overlaid in the trim of each jig region so it can be referenced during manufacturing without being visible on the outside of the final product. [00089] These acts (described above under the heading "Compute a Patterned Image to be Printed on Fabric") may correspond, at least in part, to act 904 (Construct Printing Image) in the flowchart of FIG. 9.

1.15 Produce the Fabric Pieces and Assemble into the Final Product

1. The format of the printing image (e.g., formed as described above) may need to be converted based on the needs of the digital printer to be used, for example to .ppl format.

2. Print the converted printing image onto fabric using appropriate process (e.g., digital sublimation).

3. Machine-cut the fabric along the edges of each jig mask within the jigs image.

These edges may already be known if working in vector image format, or can be detected using an edge-detection algorithm such as the Canny edge detector described in Canny edge detector described in Canny, J. (cited above, "A computational approach to edge detection." In IEEE Transaction on Pattern Analysis and Machine Intelligence 8, 1986, pages 679-714, the entire contents of which are fully incorporated herein by reference for all purposes). Cutting edge information may need to be translated into a format used by the cutting machine selected. If desired, cutting could be performed manually, instead.

4. Assemble the fabric (e.g., manually) with the marked orientation point on each fabric piece serving as a guide to the sewer for the orientation of the fabric piece. Traditional methods may be used in this step.

[00090] These acts (described above under the heading "Produce the Fabric Pieces and Assemble into the Final Product") may correspond, at least in part, to acts 906 (Print Printing Image onto Fabric), 908 (Cut Fabric Around Jig Regions), and 910 (Join Fabric Pieces) in the flowchart of FIG. 9.

Pattern Flipping

[00091] In some cases it may be desirable to enable a manufacturer of a fabric product (e.g., like apparel or upholstered furniture) to flip the pattern printed on the fabric in one or more pieces while still aligning the pattern across seams with an efficient printing image as described above. An example of when this would be desired is for apparel cut on a bias that has a striped pattern, e.g., as depicted in FIG. 14A. To aesthetically match the pattern across the seam, one piece's pattern is horizontally flipped with respect to the other piece, creating a "V" effect with the stripes along the seam (see FIGS. 14B-14C).

[00092] FIG. 14A shows an exemplary image of a striped fabric pattern, shown on a bias (diagonal). FIG. 14B shows two neighboring jig regions within the same jig group that make up the front of a dress, and FIG. 14C shows the jig regions of FIG. 14B with the striped fabric pattern on a bias applied to both, but flipped in X in jig 2.

[00093] An operator may designate the patterns on certain jigs to be flipped either horizontally (referred to below as an X flip), vertically (referred to below as a Y flip), both, or neither. The flips can also be designated to occur only in certain situations - for example in conjunction with a striped pattern but not a paisley.

[00094] To ensure proper pattern alignment across seams of the final product in the event of one or more pattern flips, the closed-form alignment solution (described above) is modified to take the flips into account. In addition, the image of the pattern itself is of course flipped as specified before being tiled across the relevant jigs for printing.

1.15.1 Adjustments to the Closed-Form Equation

1.15.1.1 Reference to Closed-Form Equation and Definitions

[00095] The closed-form solution given above and detailed in equations 1, 2, and 3 is updated to incorporate flips by potentially adjusting the value of input p iv .

[00096] Recall from above that:

i : the index of a tie point pair;

vE:{U,V}, one of the parametric dimensions of UV space; s v : the offset in UV space along dimension v for the UV coordinates of tie points of the region being aligned in UV space;

p iv : the coordinate in UV space along dimension v for the tie point pair z's parametric pattern mapping coordinates that correspond to the neighboring region within the same jig group that already has a fixed UV mapping;

q iv : the coordinate in UV space along dimension v for tie point pair i matching tie point's parametric pattern mapping coordinates that correspond to the region being aligned in UV space; and r v : the size in UV space along dimension υ of the pattern tile for a single repeat of the pattern.

1.15.1.2 Determining Whether p w Should be Modified

[00097] To compute shifts for alignment when there are tile flips, we test for whether the flip designations are different between the jig region being aligned and the fixed jig region neighbor within the same jig group to which it is being aligned, for the pattern used. If the tile flips of the two jig regions differ in either dimension (X or Y), we change the value p iv v& the associated parametric dimension (p m or p iV ). If tile flips of the two jig regions are the same, whether both jig regions are flipped or both are not flipped, no modification is made to p iv in the associated dimension.

[00098] For example, if fixed jig region P is designated to be flipped in X and unaligned region Q is not, /? i£/ is modified (as described below §1.1.1.6). If P is not designated to be flipped in Y but Q is, p iV is modified per §1.1.1.6. If P is designated to be flipped in X and Q is flipped in X, p aj is not modified. If P is not designated to be flipped in

Y and neither is Q, p iV not modified. Depending on the comparison of flip designations, we may modify both p aj and p iV , neither, or either one of the two.

1.15.1.3 Modifying p w

[00099] In the case when a modification to p iv should be made, only the fractional part of the value is of concern. Since the pattern alignment can be represented with a waveform, maximizing alignment occurs at regular whole number intervals of s v , so the integer part of the value of p iv does not affect alignment. The fractional part of the value does, however.

1.15.2 Equation 4

[000100] The fractional part of the value of p iv can be found as:

P Ivf = P iv °/°r v

where % is the modulo operator.

1.15.3 Equation 5

[000101] The whole part of the value of p iv can be found as: iyf

1.15.4 Equation 6

[000102] To adjust p iv , we update its value per the following equations, depending on the value of p mf :

If P > Q - Piv = Pivw + r v ~ Pivf If Pivf < §■ Piv = Pivw ~ r v ~ Pivf

[000103] The result is then plugged into the equations described above, normally.

1.15.5 Adjustments to the Pattern Image Tiling

[000104] As described in above., the pattern tile is repeated across the jig region image, cropped at the edges of the image where necessary. The starting point for the tiling repeat is the center point of the current jig's jig group plus the offset values computed for the jig, as described above. The pattern tile is repeated from that point outward in all four directions to the edges of the image.

[000105] In the case of a flip being designated for the current jig with the pattern in question, the pattern image tiling is modified by first inverting the pattern image tile appropriately. If the designed flip is horizontal, the pattern image tile is inverted horizontally. Similarly, if the designated flip is vertical, the pattern image tile is inverted vertically. See, e.g., FIGS. 15A-15D

[000106] FIG. 15A shows an image tile; FIG. 15B shows the image tile of FIG. 15A inverted horizontally in X; FIG. 15C shows the image tile of FIG. 15A inverted vertically in Y; and FIG. 15D shows the image tile of FIG. 15A inverted in both X and Y.

[000107] If no flip has been designated for the current jig and pattern, the pattern image tile is not modified.

[000108] Thus is provided a mechanism for modifying the procedure described above, to accommodate product designs that feature fabric patterns that are vertically or horizontally flipped in some pieces of fabric used to assemble the final product compared to other pieces of fabric. [000109] In some aspects, the UV parameterization coordinates of jig region tie points are altered when the fabric patterns on neighboring pieces within the same jig group are given different orientations; the image tile is altered to agree with the orientation for a jig region before tiling is performed.

1.16 Operation of the System

[000110] Exemplary operation of the system for pattern flip alignment is described here. The exemplary process includes the following:

1.16.1 Identify combinations of jig region and fabric pattern that should

include a flip

[000111] This process in this section should be performed prior to the steps described above.

1. Optionally, the operator may define and record fabric pattern groups and assign fabric patterns to these groups. To reduce workload, the operator may designate flips by jig region combinations with fabric pattern groups instead of their constituent fabric patterns.

2. For each combination of jig region and either fabric pattern or fabric pattern group, the operator determines whether the pattern should be flipped and, if so, whether the flip is in X (horizontal), in Y (vertical), or both. Preferences are recorded for reference later.

Modify parametric pattern mapping coordinates

[000112] This section should be performed as part of step 8.3.1 described above. When computing q jv for an unaligned region, first perform these steps.

1. Look up whether jig region P or Q has a flip designated for the fabric pattern being used or the group to which it belongs.

2. Compare flips designated for jig regions P and Q for the fabric pattern. If the designations of X flips differs for P and Q, mark P> u for modification. If the designations of Y flips differ for P and Q, mark P> v for modification.

3. If P' u is marked for modification, modify it per Equation 6. Similarly, if P> v is

marked for modification, modify it per Equation 6. Modify the pattern tile for tiling

[000113] This section should be performed before step 8.3.6 described above to either the image tile T before scaling or scaled image T s after scaling, referred to here as the image tile.

1. If the current jig region is designated to be flipped in X for the current fabric pattern being used or the group to which it belongs, invert the image tile horizontally.

2. If the current jig region is designated to be flipped in Y for the current fabric pattern being used or the group to which it belongs, invert the image tile vertically.

Examples of Use of the Invention

[000114] Two examples of contemplated use of the invention are producing an apparel garment, for example a dress, and upholstering a piece of furniture, for example a couch. Manufacturing both apparel and upholstered furniture typically involve aligning jigs on a bolt of fabric, ensuring the alignment results in a smooth-flowing pattern across pieces where appropriate, manually cutting the fabric around the jigs, and assembling the fabric pieces by sewing. The process described herein relies on a computerized process to create an image (the printing image) that is printed onto fabric using, for example, digital sublimation printing. The resulting fabric has printing confined to compactly arranged jig areas, and the process ensures the pattern is aligned across pieces. The pieces can then be cut (e.g., machine cut) and finally assembled into the final product. This process reduces cost and time by reducing fabric wastage and man-hours of labor, and also reduces time by eliminating the need for back-ordering specific fabric pattern bolts from textile suppliers. Additionally, it provides the ability to deliver any fabric pattern desired on demand, increasing customization options for customers. Furthermore, inventory, working capital, and mark-down costs are reduced by removing the need to stock different fabric patterns in inventory.

[000115] Another example of a contemplated use of the invention is in producing apparel with flipped patterns used on some component pieces of fabric. In cases, such as striped dresses cut on a bias, the pattern is often flipped on one side of the seam compared with the other to create the desired aesthetic effect. This addendum enhances the mechanisms described above so that they can compute printing images that produce this effect in the final product while taking advantage of the efficient manufacturing process described.

[000116] Embodiments hereof may be implemented using one or computer systems (e.g., as described in the section titled "Computing" below). Implementations hereof may provide a graphical user interface (GUI) to assist a user/operator (see, e.g., the GUI 1600 in FIG. 16 showing aspects of a user interface).

[000117] Those of ordinary skill in the art will appreciate and understand, upon reading this description, that the invention is not limited by the manner in which any aspect thereof it is implemented or by the kinds of computer systems used to implement any aspects thereof.

1.17 Discussion

[000118] In some aspects, exemplary embodiments describe a new manufacturing process for apparel and upholstery that leverages digital printing onto fabrics to reduce both production cost and time. First a computerized process is employed to generate a digital image to be printed on the fabric. This image contains color to be printed only in the areas of the jigs, and the printing image's pattern is computer-aligned across jig regions as desired. This eliminates both the cost for printing outside the jigs and the cost for taking the time to align jigs to a pattern. The image is printed on the fabric by computer, for example through digital sublimation. The resulting fabric is machine-cut with the cutting path pre-determined by the algorithm as the edges of the jigs in the printing image. The pieces are then assembled manually onto the frame.

[000119] There are several benefits to the processes described herein. First, by constructing a custom image to be printed that displays a pattern already aligned by jig, no large gaps are created between jigs for alignment. In other words, instead of a pattern being evenly repeated across a fabric to be cut, it stops and starts under each jig region at the desired point in the repeat, so the jig regions do not have to be spaced far apart for smooth repeats on the final product. And stopping and starting patterns at each jig region means no more misalignment of pattern direction on the bolt with sewing direction on the piece. For these reasons, the processes described herein reduce wastage of fabric and the associated fabric cost, especially as the repeat size of the pattern grows.

[000120] A further benefit is that some originally manual steps in the process are automated. In addition to reducing fabric wastage, constructing a custom image to be printed also eliminates the need to manually align jigs on fabric bolts, again reducing cost along with the labor time. There is an initial operator setup for the software portion of the process to ensure fabric alignment, but this takes place only once per frame design, regardless of the number of fabrics or units produced, making it far more efficient. Also, machine cutting the digitally printed fabric removes the typical manual process of guiding the cutting according to the manual jig layout, reducing labor costs even further. [000121] Inventory costs are reduced by allowing the company to stock only white fabric bolts, on which can be printed any fabric pattern. This is less costly than carrying various options in inventory, only some of which may be needed at any given time, reducing working capital needs. Additionally, under the current industry process, if a specific pattern is stocked but not ordered, it would normally languish in inventory, sometimes beyond the lifetime of the pattern stylistically in the market, causing it to be marked down in value. The mechanisms disclosed herein reduce those costs as well, since no pattern sits in inventory.

[000122] Delivery time is reduced by not having to back-order fabric patterns from textile suppliers. Regardless of the fabric pattern selected by the customer, the process of this invention can produce it on the stocked white fabric bolts. This can save weeks of back-order time that normally delays order fulfillment.

[000123] The mechanisms and processes of this invention also enable broad fabric pattern customization options that can be presented to the customer for selection. Since the image to be printed on the fabric is generated by a computerized process on demand, any pattern can be used without relying on the inventories and production capabilities of textile suppliers. Customers can even submit their own fabric patterns for upholstering.

Computing

[000124] The services, mechanisms, operations and acts shown and described above are implemented, at least in part, by software running on one or more computers or computer systems or user devices. It should be appreciated that each user device is, or comprises, a computer system.

[000125] Programs that implement such methods (as well as other types of data) may be stored and transmitted using a variety of media (e.g., computer readable media) in a number of manners. Hard-wired circuitry or custom hardware may be used in place of, or in combination with, some or all of the software instructions that can implement the processes of various embodiments. Thus, various combinations of hardware and software may be used instead of software only.

[000126] One of ordinary skill in the art will readily appreciate and understand, upon reading this description, that the various processes described herein may be implemented by, e.g., appropriately programmed general purpose computers, special purpose computers and computing devices. One or more such computers or computing devices may be referred to as a computer system. [000127] FIG. 17 is a schematic diagram of a computer system 1700 upon which embodiments of the present disclosure may be implemented and carried out.

[000128] According to the present example, the computer system 1700 includes a bus 1702 (i.e., interconnect), one or more processors 1704, a main memory 1706, read-only memory 1708, optional removable storage media 1710, a mass storage 1712, and one or more communications ports 1714. Communication port(s) 1714 may be connected to one or more networks (e.g. , computer networks, cellular networks, etc. - not shown) by way of which the computer system 1700 may receive and/or transmit data.

[000129] As used herein, a "processor" means one or more microprocessors, central processing units (CPUs), computing devices, microcontrollers, digital signal processors, or like devices or any combination thereof, regardless of their architecture. An apparatus that performs a process can include, e.g., a processor and those devices such as input devices and output devices that are appropriate to perform the process.

[000130] Processor(s) 1704 can be (or include) any known processor, such as, but not limited to, an Intel® Itanium® or Itanium 2® processor(s), AMD® Opteron® or Athlon MP® processor(s), or Motorola® lines of processors, and the like. Communications port(s) 1714 can be any of an RS-232 port for use with a modem based dial-up connection, a 10/100 Ethernet port, a Gigabit port using copper or fiber, or a USB port, and the like.

Communications port(s) 1714 may be chosen depending on a network such as a Local Area Network (LAN), a Wide Area Network (WAN), a Content Delivery Network (CDN), or any network to which the computer system 1700 connects. The computer system 1700 may be in communication with peripheral devices (e.g., display screen 1716, input device(s) 1718) via Input / Output (I/O) port 1720. Some or all of the peripheral devices may be integrated into the computer system 1700, and the input device(s) 1718 may be integrated into the display screen 1716 (e.g. , in the case of a touch screen).

[000131] Main memory 1706 can be Random Access Memory (RAM), or any other dynamic storage device(s) commonly known in the art. Read-only memory 1708 can be any static storage device(s) such as Programmable Read-Only Memory (PROM) chips for storing static information such as instructions for processor(s) 1704. Mass storage 1712 can be used to store information and instructions. For example, hard disks such as the Adaptec® family of Small Computer Serial Interface (SCSI) drives, an optical disc, an array of disks such as Redundant Array of Independent Disks (RAID), such as the Adaptec® family of RAID drives, or any other mass storage devices may be used. [000132] Bus 1702 communicatively couples processor(s) 1704 with the other memory, storage and communications blocks. Bus 1702 can be a PCI / PCI-X, SCSI, a Universal Serial Bus (USB) based system bus (or other) depending on the storage devices used, and the like. Removable storage media 1710 can be any kind of external hard-drives, floppy drives, Compact Disc - Read Only Memory (CD-ROM), Compact Disc - Re-Writable (CD-RW), Digital Versatile Disk - Read Only Memory (DVD-ROM), etc.

[000133] Embodiments herein may be provided as one or more computer program products, which may include a machine-readable medium having stored thereon instructions, which may be used to program a computer (or other electronic devices) to perform a process. As used herein, the term "machine-readable medium" refers to any medium, a plurality of the same, or a combination of different media, which participate in providing data (e.g., instructions, data structures) which may be read by a computer, a processor or a like device. Such a medium may take many forms, including but not limited to, non-volatile media, volatile media, and transmission media. Non-volatile media include, for example, optical or magnetic disks and other persistent memory. Volatile media include dynamic random access memory, which typically constitutes the main memory of the computer. Transmission media include coaxial cables, copper wire and fiber optics, including the wires that comprise a system bus coupled to the processor. Transmission media may include or convey acoustic waves, light waves and electromagnetic emissions, such as those generated during radio frequency (RF) and infrared (IR) data communications.

[000134] The machine-readable medium may include, but is not limited to, floppy diskettes, optical discs, CD-ROMs, magneto-optical disks, ROMs, RAMs, erasable programmable read-only memories (EPROMs), electrically erasable programmable read-only memories (EEPROMs), magnetic or optical cards, flash memory, or other type of

media/machine-readable medium suitable for storing electronic instructions. Moreover, embodiments herein may also be downloaded as a computer program product, wherein the program may be transferred from a remote computer to a requesting computer by way of data signals embodied in a carrier wave or other propagation medium via a communication link (e.g., modem or network connection).

[000135] Various forms of computer readable media may be involved in carrying data (e.g. sequences of instructions) to a processor. For example, data may be (i) delivered from RAM to a processor; (ii) carried over a wireless transmission medium; (iii) formatted and/or transmitted according to numerous formats, standards or protocols; and/or (iv) encrypted in any of a variety of ways well known in the art.

[000136] A computer-readable medium can store (in any appropriate format) those program elements that are appropriate to perform the methods.

[000137] As shown, main memory 1706 is encoded with application(s) 1722 that support(s) the functionality as discussed herein (an application 1722 may be an application that provides some or all of the functionality of one or more of the mechanisms described herein). Application(s) 1722 (and/or other resources as described herein) can be embodied as software code such as data and/or logic instructions (e.g., code stored in the memory or on another computer readable medium such as a disk) that supports processing functionality according to different embodiments described herein.

[000138] During operation of one embodiment, processor(s) 1704 accesses main memory 1706, e.g., via the use of bus 1702 in order to launch, run, execute, interpret or otherwise perform the logic instructions of the application(s) 1722. Execution of

application(s) 1722 produces processing functionality of the service(s) or mechanism(s) related to the application(s). In other words, the process(es) 1724 represents one or more portions of the application(s) 1722 performing within or upon the processor(s) 1704 in the computer system 1700.

[000139] It should be noted that, in addition to the process(es) 1724 that carries (carry) out operations as discussed herein, other embodiments herein include the application 1722 itself (i.e., the un-executed or non-performing logic instructions and/or data). The application 1722 may be stored on a computer readable medium (e.g., a repository) such as a disk or in an optical medium. According to other embodiments, the application 1722 can also be stored in a memory type system such as in firmware, read only memory (ROM), or, as in this example, as executable code within the main memory 1706 (e.g., within Random Access Memory or RAM). For example, application 1722 may also be stored in removable storage media 1710, read-only memory 1708, and/or mass storage device 1712.

[000140] Those skilled in the art will understand that the computer system 1200 can include other processes and/or software and hardware components, such as an operating system that controls allocation and use of hardware resources.

[000141] As discussed herein, embodiments of the present invention include various steps or operations. A variety of these steps may be performed by hardware components or may be embodied in machine-executable instructions, which may be used to cause a general- purpose or special-purpose processor programmed with the instructions to perform the operations. Alternatively, the steps may be performed by a combination of hardware, software, and/or firmware. The term "module" refers to a self-contained functional component, which can include hardware, software, firmware or any combination thereof.

[000142] One of ordinary skill in the art will readily appreciate and understand, upon reading this description, that embodiments of an apparatus may include a

computer/computing device operable to perform some (but not necessarily all) of the described process.

[000143] Embodiments of a computer-readable medium storing a program or data structure include a computer-readable medium storing a program that, when executed, can cause a processor to perform some (but not necessarily all) of the described process.

[000144] Where a process is described herein, those of ordinary skill in the art will appreciate that the process may operate without any user intervention. In another

embodiment, the process includes some human intervention (e.g., a step is performed by or with the assistance of a human).

[000145] As used in this description, the term "portion" means some or all. So, for example, "A portion of X" may include some of "X" or all of "X". In the context of a conversation, the term "portion" means some or all of the conversation.

[000146] As used herein, including in the claims, the phrase "at least some" means "one or more," and includes the case of only one. Thus, e.g., the phrase "at least some ABCs" means "one or more ABCs", and includes the case of only one ABC.

[000147] As used herein, including in the claims, the phrase "based on" means "based in part on" or "based, at least in part, on," and is not exclusive. Thus, e.g., the phrase "based on factor X" means "based in part on factor X" or "based, at least in part, on factor X." Unless specifically stated by use of the word "only", the phrase "based on X" does not mean "based only on X."

[000148] As used herein, including in the claims, the phrase "using" means "using at least," and is not exclusive. Thus, e.g., the phrase "using X" means "using at least X." Unless specifically stated by use of the word "only", the phrase "using X" does not mean "using only X."

[000149] In general, as used herein, including in the claims, unless the word "only" is specifically used in a phrase, it should not be read into that phrase. [000150] As used herein, including in the claims, the phrase "distinct" means "at least partially distinct." Unless specifically stated, distinct does not mean fully distinct. Thus, e.g., the phrase, "X is distinct from Y" means that "X is at least partially distinct from Y," and does not mean that "X is fully distinct from Y." Thus, as used herein, including in the claims, the phrase "X is distinct from Y" means that X differs from Y in at least some way.

[000151] As used herein, including in the claims, a list may include only one item, and, unless otherwise stated, a list of multiple items need not be ordered in any particular manner. A list may include duplicate items. For example, as used herein, the phrase "a list of XYZs" may include one or more "XYZs".

[000152] It should be appreciated that the words "first" and "second" in the description and claims are used to distinguish or identify, and not to show a serial or numerical limitation. Similarly, the use of letter or numerical labels (such as "(a)", "(b)", and the like) are used to help distinguish and / or identify, and not to show any serial or numerical limitation or ordering.

[000153] No ordering is implied by any of the labeled boxes in any of the flow diagrams unless specifically shown and stated. When disconnected boxes are shown in a diagram the activities associated with those boxes may be performed in any order, including fully or partially in parallel.

[000154] While the invention has been described in connection with what is presently considered to be the most practical and preferred embodiments, it is to be understood that the invention is not to be limited to the disclosed embodiment, but on the contrary, is intended to cover various modifications and equivalent arrangements included within the spirit and scope of the appended claims.

Appendix A (Source Code)

Note that in the following "//" denotes a comment line, and a semi-colon (";") denotes and end of line.

Computing Jig Region Offsets

1.18 Calculate Offset from Ties

Variables:

• pi: the value for pi, i.e. 3.14159...

• r u : the size in UV space along dimension U of the pattern tile for a single repeat of the pattern

• r v : the size in UV space along dimension V of the pattern tile for a single repeat of the pattern

• p: a jig neighboring jig q; jig p's offset has already been computed and is considered to be fixed

• s pu : offset in U dimension for UV coordinates of tie points of jig p

• s pv : offset in V dimension for UV coordinates of tie points of jig p

• q: the jig for which an offset is being computed

• s qu : offset in U dimension for UV coordinates of tie points of jig q

• s qv : offset in V dimension for UV coordinates of tie points of jig q

• tiesPQ: vector of tie pairs between jigs p and q, containing p iu , ρ, ν , q.u, and q iv for all tie pairs i

• p iu : the coordinate in UV space along dimension U for the tie point pair i's parametric pattern mapping coordinates that correspond to the neighboring region that already has a fixed UV mapping

• p iv : the coordinate in UV space along dimension V for the tie point pair i's parametric pattern mapping coordinates that correspond to the neighboring region that already has a fixed UV mapping

• q iu : the coordinate in UV space along dimension U for tie point pair i's

matching tie point's parametric pattern mapping coordinates that correspond to the region being aligned in UV space

• q iv : the coordinate in UV space along dimension V for tie point pair i's

matching tie point's parametric pattern mapping coordinates that correspond to the region being aligned in UV space • TwoD(): a function which takes two floating point variables and constructs a two-dimensional offset with members u and v

Function CalcOffset(ties , r u , r v , s pu , s pv )

{

b u = -1 * 2 * pi / r u ;

b v = -1 * 2 * pi / r v ;

Cu = 0;

Cv = 0;

d u = 0;

dv = 0. ;

for each tie pair i in tiesPQ:

{

a u = (2 * pi / r u ) * ((p iu - s pu ) - q iu );

a v = (2 * pi / r v ) * ((p iv - s pv ) - q iv );

c u += sin(a u );

d u += cos(a u );

c v += sin(a v );

d v += cos(a v );

}

// solution may be a max or min (which are just period-adjusted

// from each other), so must test which it is to find the max

s q ui = (1 / b u ) * atan2(-1 * c u , d u );

Sqvi = (1 / b v ) * atan2(-1 * c v , d v );

Squ2 = S qu i + (r u / 2)

Sqv2 = Sqv1 + (Γ ν / 2)

Xu = 0;

Xv = 0;

y u = 0;

y v = 0;

for each tie i in tiesPQ:

{

a u = (2 * pi / r u ) * ((p iu - s pu ) - q iu );

a v = (2 * pi / r v ) * ((p iv - s pv ) - q iv ); x u += cos(a u + b u * s qu1 );

y u += cos(a u + b u * s qu2 );

x v += cos(a v + b v * Sqvi );

y v += cos(a v + b v * s qv2 );

}

©IS© Squ— Squ2,

if (X v > y V ) Sq V = Sqvi;

©IS© Sqv— Sq V 2,

// atan2 solves only within range [-pi/2, pi/2], so must solve

// for original phase as closest to 0 result value

x u Best = x u ; // init result for current best s qu value considering phases examined

x v Best = x v ; // init result for current best s qv value considering phases examined

Sq u Best = s qu ; // init current best s qu value considering phases examined Sq v Best = s qv ; // init current best s qv value considering phases examined for (int phase = -100; phase < 100; phase++)

{

Xut = 0;

Xvt = 0;

for each tie i in tiesPQ:

{ x ut += a u - Squ - (phase * r u );

Xvt += a v - Sqv - (phase * r v );

}

if (abs(Xut) < abs(x u Best))

{

XuBest = x ut ;

SquBest = Squ + (phase * r u ); }

if (abs(Xvt) < abs(x v Best))

{

XvBest = Xvt;

s q vBest = s qv - (phase * r v );

}

}

// copy over best values and flip the signs

Sq U 1 SquBeSt,

Sqv— "1 SqvBest,

return TwoD(s qu , s qv );

}

1.19 Calculating All Offsets for a Jig Group

Variables:

• jid f : the unique ID of a jig that is a member of this jig group and for which an offset has been fixed and determined; it is considered the current starting point of the recursive computation, from which its jig neighbors by tie pairs will have their offsets calculated, if not already done; the initial call to this function should use the ID of the jig that contains the center point for the jig group

• r u : the size in UV space along dimension U of the pattern tile for a single

repeat of the pattern

• r v : the size in UV space along dimension V of the pattern tile for a single

repeat of the pattern

• N: a map of key-value pairs where keys are unique IDs of jigs and values are vector lists of unique jig IDs that are considered neighbors of the jig with ID equivalent to the key. Jig P and jig Q are considered neighbors in that they share at least one tie point pair

• ties: a data structure containing a mapping of key-value pairs where keys are unique IDs of jigs P and values are a second layer of map. The second layer of map is of key-value pairs with keys that are unique IDs of jigs Q and values are vector of tie pairs between jigs P and Q, containing p iu , ρ, ν , q.u, and q iv for all such tie pairs i • p iu : the coordinate in UV space along dimension U for the tie point pair i's parametric pattern mapping coordinates that correspond to the neighboring region that already has a fixed UV mapping

• p iv : the coordinate in UV space along dimension V for the tie point pair i's

parametric pattern mapping coordinates that correspond to the neighboring region that already has a fixed UV mapping

• q iu : the coordinate in UV space along dimension U for tie point pair i's

matching tie point's parametric pattern mapping coordinates that correspond to the region being aligned in UV space

• q iv : the coordinate in UV space along dimension V for tie point pair i's

matching tie point's parametric pattern mapping coordinates that correspond to the region being aligned in UV space

• offsets: a data structure containing a mapping of key to value where the keys are unique IDs of jigs within the current jig group and the values are two- dimensional offsets given as (s pu , s pv ); key-value pairs should only be present for jigs for which offsets have been computed and are considered "fixed" in the current calculation. The data in this data structure is updated by the function

Function RecursiveComputeJigGroupOffsets(jid f , r u , r v , N, ties, offsets)

{

if (jidf does not exist as a key in offsets) return; // only continue if the offset of jidf is fixed

for each neighbor jid n in N[jidf]:

{

if (jid n exists as a key in offsets) continue; // already determined jid n 's offsets

offsets[jid n ] = CalcOffset(ties, r u , r v , offsets[jidf].u, offsets[jidf].v);

}

for each neighbor jid n in N[jidf]:

{

if (jid n does not exist as a key in offsets) continue; // have not already determined jid n 's offsets

RecursiveComputeJigGroupOffsets(jidf, r u , r v , N, ties[jid f ][jidn], offsets)

} }

Generating a Printing Image

1.20 Generating the Final Printing Image

Variables:

• G: vector of jig groups where each group contains a member jid_center that holds the unique ID of the jig in the group that contains the center point, and a member jids that holds a vector of unique IDs of all jigs in the group

• r u : the size in pixels along dimension U of the pattern tile for a single repeat of the pattern

• r v : the size in pixels along dimension V of the pattern tile for a single repeat of the pattern

• N: a map of key-value pairs where keys are unique IDs of jigs and values are vector lists of unique jig IDs that are considered neighbors of the jig with ID equivalent to the key. Jig P and jig Q are considered neighbors in that they share at least one tie point pair

• ties: a data structure containing a mapping of key-value pairs where keys are unique IDs of jigs P and values are a second layer of map. The second layer of map is of key-value pairs with keys that are unique IDs of jigs Q and values are vector of tie pairs between jigs P and Q, containing p iu , ρ, ν , q.u, and q iv for all such tie pairs i

• p iu : the coordinate in pixels along dimension U for the tie point pair i's

parametric pattern mapping coordinates that correspond to the neighboring region that already has a fixed UV mapping

• p iv : the coordinate in pixels along dimension V for the tie point pair i's

parametric pattern mapping coordinates that correspond to the neighboring region that already has a fixed UV mapping

• q iu : the coordinate in pixels along dimension U for tie point pair i's matching tie point's parametric pattern mapping coordinates that correspond to the region being aligned in UV space • q iv : the coordinate in pixels along dimension V for tie point pair i's matching tie point's parametric pattern mapping coordinates that correspond to the region being aligned in UV space

• offsets: a data structure containing a mapping of key to value where the keys are unique IDs of jigs within the current jig group and the values are two- dimensional offsets given as (s pu , s pv ); key-value pairs should only be present for jigs for which offsets have been computed and are considered "fixed" in the current calculation

• opts: a data structure containing a mapping of key-value pairs where the keys are unique IDs of jigs and the values are coordinates of the associated orientation point within the jigs image

• maskJigs: a data structure containing a mapping of key-value pairs where the keys are unique IDs of jigs and the values are binary masks of the associated jigs within the jigs image

• imgEmpty: image of black, transparent pixels

Dependent on Functions

• MarkOrientation(img, orientation_point) : draws a mark at the orientation_point coordinates within image img

• CopyMasked(imgFrom, msk, imgTo) : copies pixels from image imgFrom to image imgTo only where the pixel is "masked-in" (full binary value) in mask image msk

• Tile(imgTile, sz, startPt) : as described in Section 1.14 (Compute a Patterned Image to be Printed on Fabric), tile an image imgTile across a new image of two-dimensional size sz, from starting point startPt, cropping along the edges of the image

Function Generatelmage(x, y, u 0 , v 0 , u-i, vi, t w , t h )

{

imgPrinting = imgEmpty; // initialize imgPrinting to blank, black, transparent pixels

for each jig group g in G:

{

offsets. initialize(); // initialize offsets to an empty map RecursiveComputeJigGroupOffsets(g.jid_center, r u , r v , N, ties, offsets); for each jig unique ID jid in g.jids:

{

imgJigRegion = Tile(imgTile, size, offsets[jid]);

MarkOrientation(imgJigRegion, opts[jid]);

// copy imgJigRegion's masked-in pixels only into imgPrinting CopyMasked(imgJigRegion, maskJigs id], imgPrinting);

}

}

}

Variables:

• r u : the size in UV space along dimension U of the pattern tile for a single

repeat of the pattern

• r v : the size in UV space along dimension V of the pattern tile for a single

repeat of the pattern

• p: a jig region neighboring jig q within the same jig group; jig p's offset has already been computed and is considered to be fixed

• q: the jig region for which an offset is being computed

• p iu : the coordinate in UV space along dimension U for the tie point pair i's parametric pattern mapping coordinates that correspond to the neighboring region within the same jig group that already has a fixed UV mapping.

Incorporated by reference with "&" in pseudo-code function arguments below so that its value can be modified by the function.

• p iv : the coordinate in UV space along dimension V for the tie point pair i's

parametric pattern mapping coordinates that correspond to the neighboring region within the same jig group that already has a fixed UV mapping.

Incorporated by reference with "&" in pseudo-code function arguments below so that its value can be modified by the function.

• f px : a boolean value denoting whether jig region p is designated to be flipped in X (horizontally) in the current fabric pattern case being computed

• f py : a boolean value denoting whether jig region p is designated to be flipped in Y (vertically) in the current fabric pattern case being computed • f qx : a boolean value denoting whether jig region q is designated to be flipped in X (horizontally) in the current fabric pattern case being computed

• f qy : a boolean value denoting whether jig region q is designated to be flipped in Y (vertically) in the current fabric pattern case being computed

• pi UW : the integer portion of the value of p iu

• piuf: the fractional portion of the value of p iu

• p ivw : the integer portion of the value of p iv

• pivf: the fractional portion of the value of p iv

Function MakeFlipModifications(r u , r v , f px , f py , f qx , f qy , &p iu , &p jv )

{

if (fpx != fqx):

{

Piuw- Piu Piuf,

if (Piuf > 0) piu = Piuw + r u - Piuf;

else if (p iuf < 0) p iu = p iuw - r u - p iuf ;

else pju— Piuw,

}

if (f py != f qy ):

{

Pivw- Piv Pivf,

if (pivf > 0) Piv = Pivw + r v - Pivf;

else if (p iV f < 0) p iv = p ivw - r v - p^;

else pjv Pi w,

}

}