Patent Description:
It is with respect to these and other general considerations that embodiments have been described. Also, although relatively specific problems have been discussed, it should be understood that the embodiments should not be limited to solving the specific problems identified in the background. Reference is made to Bernard Desruisseaux: "Random Dynamic Fonts", which describes a method for storing, representing and reproducing fonts in which each letterform differs with each use. Reference is also made to <CIT>, which describes a system and method for subdividing a quadratic Bezier curve. Reference is also made to <NPL>", which describes several methods for creating random printed handwriting font using controlled random perturbation of Bezier control points. Reference is also made to <NPL>", which describes parametrised character level perturbations that allow for varying levels of handwritten word complexity.

Embodiments disclosed herein provide methods and systems for determining parameters associated with a shape effect and applying the effect to one or more shapes. The effect produces wavy shapes, where the lines and curves that form the wavy shape are uneven (e.g., having a form that curves in and/or out) and can appear hand drawn or scribbled. Embodiments can produce different effects on lines and Bezier curves including, but not limited to, one or more curves, one or more loops, a single arc, one or more spikes, and/or regular and irregular waviness.

A method for producing a wavy shape is defined according to independent claim <NUM> and a system is defined according to independent claim <NUM>.

Non-limiting and non-exhaustive examples are described with reference to the following Figures. Identical reference numerals have been used, where possible, to designate identical features that are common to the figures.

In the following detailed description, references are made to the accompanying drawings that form a part hereof, and in which are shown by way of illustrations specific embodiments or examples. These aspects may be combined, other aspects may be utilized, and structural changes may be made without departing from the present disclosure. Embodiments may be practiced as methods, systems or devices. Accordingly, embodiments may take the form of a hardware implementation, an entirely software implementation, or an implementation combining software and hardware aspects. The following detailed description is therefore not to be taken in a limiting sense, and the scope of the present disclosure is defined by the appended claims.

Further, spatially relative terms, such as "beneath," "below," "lower," "above," "upper", "over", "around", and the like, may be used herein for ease of description to describe one element or feature's relationship to another element(s) or feature(s) as illustrated in the figures. The spatially relative terms are intended to encompass different orientations of a feature in use or operation in addition to the orientation depicted in the figures. The features may be otherwise oriented (rotated <NUM> degrees or at other orientations) and the spatially relative descriptors used herein may likewise be interpreted accordingly.

Disclosed herein are techniques for determining parameters associated with a wavy shape effect and applying the wavy effect to one or more shapes. The wavy effect transforms a distinct or sharply defined original shape into a wavy shape, where the lines and/or curves of the original shape are changed to wavy lines and/or wavy curves that have a form that curves in and/or out. For example, an original smooth line is transformed into a wavy line. In some instances, a wavy shape can appear hand drawn or scribbled.

Embodiments provide an application, such as a diagramming application, with one or more additional effects. The additional effect(s) enhance the user experience with the application and allow the user to create higher quality, more interesting, and/or more diverse documents.

<FIG> illustrates an example shape that can be transformed into a wavy shape. The shape <NUM> is a cross or plus (+) shape. The horizontal lines <NUM> and the vertical lines <NUM> that form the shape <NUM> are straight, even, and smooth.

<FIG> depicts the example shape shown in <FIG> transformed into a wavy shape. The horizontal lines <NUM> and the vertical lines <NUM> that form the wavy shape <NUM> are uneven (e.g., undulating), curvy and appear hand drawn. The term "wavy shape" relates to shapes where the original lines and/or the original curves (e.g., straight line(s) or even and smooth curve(s)) that form the shape have been transformed into wavy or curvy lines and/or wavy or curvy curves. In one non-limiting example, the original lines and the original Bezier curves are modified to create an uneven or wobbly effect reminiscent of hand-drawn lines and curves.

In graphics applications, presentation applications, and other diagramming applications, shapes are typically defined by a series of "moves" between coordinate values. A shape is typically constructed with one or more lines and/or one or more Bezier curves. In many shapes, the line(s) and/or the Bezier curve(s) are linked together and form a path. To draw the shape, a drawing operation is performed between a current point and a specified endpoint as the path is traversed.

<FIG> illustrates another example shape. The shape <NUM> is similar to the capital letter "D" and is constructed with both lines <NUM> and Bezier curves <NUM>. The lines <NUM> and the Bezier curves <NUM> are linked together to form the shape <NUM>. In the distinct shape <NUM>, the lines <NUM> are straight and smooth line(s) and the Bezier curves <NUM> are smooth curve(s)).

The path of the shape <NUM> is described in conjunction with <FIG>. The path of the shape <NUM> can be defined as shown in Table <NUM>:.

As shown in <FIG>, the path of the shape begins at (<NUM>, <NUM>), moves to (<NUM>, <NUM>), moves to (<NUM>, <NUM>), moves to (<NUM>, <NUM>), moves to (<NUM>, <NUM>), and ends at (<NUM>, <NUM>). The first endpoint <NUM> of the line <NUM> is at (<NUM>, <NUM>) and the second endpoint <NUM> is at (<NUM>, <NUM>). The first endpoint <NUM> of the line <NUM> is at (<NUM>, <NUM>) and the second endpoint <NUM> is at (<NUM>, <NUM>). The first control point <NUM> (represented by an arrow) of the Bezier curve <NUM> is at (<NUM>, <NUM>), the second control point <NUM> (represented by an arrow) is at (<NUM>, <NUM>), and the endpoint <NUM> is at (<NUM>, <NUM>). The first control point <NUM> (represented by an arrow) of the Bezier curve <NUM> is at (<NUM>, <NUM>), the second control point <NUM> (represented by an arrow) is at (<NUM>, <NUM>), and the endpoint <NUM> is at (<NUM>, <NUM>). The first endpoint <NUM> of the line <NUM> is at (<NUM>, <NUM>) and the second endpoint <NUM> is at (<NUM>, <NUM>). As will be described in more detail later, the shape <NUM> is divided or separated into individual lines and/or Bezier curves when the shape <NUM> is transformed into a wavy shape.

<FIG> is a flowchart of an example method of producing a wavy shape. Initially, as shown at block <NUM>, a shape is received. The shape is separated into individual straight even line(s) (an "original line") and/or individual Bezier curve(s) (an "original Bezier curve") at block <NUM>. In one aspect, the original straight line(s) and/or original Bezier curve(s) are determined based on the path of the shape. Based on the path, the original line(s) and/or original Bezier curve(s) are separated into individual original line(s) and/or original Bezier curve(s).

An original line or an original Bezier curve is then received at block <NUM> and a determination is made as to whether an original line or an original Bezier curve was received (block <NUM>). In some instances, the determination can be based on how an original line or an original Bezier curve is defined or specified when it is received. In one embodiment, an original line is defined as a line between two endpoint values and an original Bezier curve is defined as a line to a specified endpoint value with two control points.

When it is determined at block <NUM> that an original line is received, the process continues at block <NUM> where the original line is perturbed to produce an wavy line. The original line is transformed into an uneven or curvy line (e.g., a wavy line). One technique for producing a wavy line is described in conjunction with <FIG>.

When a determination at block <NUM> is that an original Bezier curve is received, the method passes to block <NUM> where one or both control points of the original Bezier curve are adjusted to produce a wavy Bezier curve. The original Bezier curve is transformed into a distorted curve. After block <NUM> or block <NUM>, the process continues at block <NUM> where a determination is made as to whether another original line or another original Bezier curve is to be received. If so, the method returns to block <NUM> and repeats until all of the individual original lines and/or individual original Bezier curves of the shape have been transformed into wavy lines and/or wavy Bezier curves.

When it is determined at block <NUM> that another original line or original Bezier curve will not be received, the process passes to optional block <NUM>. Block <NUM> is performed when the interior area of a wavy shape is filled with a fill (e.g., a color, a gradient, a pattern). When one path defines both the fill and the shape, the path is changed to two separate paths that are processed separately. For example, the path of the shape can be processed at a first time and the path of the fill is processed at a different second time. In one embodiment, the path of the shape and the path of the fill are processed using the techniques shown in <FIG>.

In some instances, the path of the shape and the path of the fill will not line up exactly with each other due at least in part to the random perturbations of the control points of existing Bezier curves and the differences in the divisions of the lines into one or more line segments (referred to herein as wavelets). The path used by the shape and the path used by the fill can be slightly different. In some situations, processing the path of the fill separately from the path of the shape can generate slightly different results, creating areas where the fill does not quite reach an interior edge of the shape (creating a gap where the background is visible) or where the fill extends beyond the interior edge of the shape.

Other embodiments can add blocks, omit blocks, modify blocks, or rearrange the blocks shown in <FIG>. For example, in some embodiments, block <NUM> may be omitted. Additionally, although <FIG> is described as processing each original line and/or original Bezier curve iteratively, the method can be modified to process multiple original lines and/or original Bezier curves in parallel.

<FIG> is a flowchart of an example method of transforming a line into a wavy line. <FIG> will be described in conjunction with <FIG>. Initially, as shown in optional block <NUM>, a wavy type for a shape may be determined. A wavy type is associated with the effect to be achieved. Any suitable wavy type can be used. For example, a wavy type can be freehand, where a shape (e.g., an original line) is transformed into a wavy shape that appears to be drawn by hand.

Another wavy type may be curved, where a shape is transformed into a curved shape. With the curve wavy type, the entire length of a shape (e.g., an original line) becomes a Bezier curve. In another example, a wavy type can be scribble, where a shape (e.g., an original line) appears as if it has been scribbled (e.g., drawn carelessly or hurriedly).

In some embodiments, a wavy type for an original line can be defined with a constant value that can be used to determine the number of wavelets to separate the original line into, the bounding region for one endpoint, and the bounding region for the second endpoint of the line. Other constraints for placement of a control point associated with an endpoint can be added, such as an optional Boolean FSmooth. The Boolean FSmooth ensures the first control point is placed exactly opposite about the endpoint from the previous segment's second control point, causing the resulting wavy line to look smoother. Block <NUM> can be omitted in other embodiments.

Next, as shown in block <NUM>, the original line is divided into one or more wavelets. A wavelet can have a length that is only a portion of the entire length of the original line or the length of the wavelet may be the entire length of the line (e.g., a wavelet is the original line). In one embodiment, the number of wavelets is based on the length of the original line. In another example, the number of wavelets is a factor of the line length and a constant value associated with the wavy type (e.g., a part of the definition of the wavy type). In one embodiment, the constant value is used as a divisor when determining the number of wavelets. In such embodiments, the number of wavelets can be determined by dividing the line length by the constant value.

The wavelets can have the same length or the length of at least one wavelet may differ from the length of another wavelet (e.g., +/- a percentage). The lengths of the wavelets can vary randomly along a line when the wavelets have different lengths. In some instances, a more natural looking wavy shape can be produced when the lengths of the wavelets vary.

In one aspect, the number of wavelets may also be based on the wavy type. For example, the wavy type can define a maximum percentage that a wavelet length can vary from another wavelet length. In some implementations, predetermined numbers of wavelets for different line lengths and wavy types may be created and stored in a memory (e.g., in a database or a lookup table).

<FIG> shows an original line <NUM> divided into wavelets <NUM>, <NUM>, <NUM>, <NUM>, <NUM>. The points <NUM>, <NUM>, <NUM>, <NUM>, <NUM>, <NUM> represent the endpoints of the wavelets. The wavelet <NUM> has a first endpoint <NUM> and a second endpoint <NUM>. The wavelet <NUM> has a first endpoint <NUM> and a second endpoint <NUM>. The wavelet <NUM> has a first endpoint <NUM> and a second endpoint <NUM>. The wavelet <NUM> has a first endpoint <NUM> and a second endpoint <NUM>. The wavelet <NUM> has a first endpoint <NUM> and a second endpoint <NUM>.

One or more wavelets <NUM>, <NUM>, <NUM>, <NUM>, <NUM> is then transformed into a wavy wavelet at block <NUM>. In one aspect, each wavelet becomes a Bezier curve. In one embodiment, each wavelet <NUM>, <NUM>, <NUM>, <NUM>, <NUM> is transformed into a wavy wavelet that has one or more curves. This example process can be performed for each individual original line in a shape.

Other embodiments can add blocks, omit blocks, modify blocks, or rearrange the blocks shown in <FIG>. For example, in some embodiments, block <NUM> may be omitted. Additionally or alternatively, instead of processing each original line and/or original Bezier curve iteratively, the method can be modified to process two or more original lines and/or original Bezier curves in parallel.

<FIG> and <FIG> depict an example technique for changing a wavelet into a wavy wavelet. In one embodiment, each wavelet is processed as a horizontal line. Thus, when a wavelet in a document is not horizontal (e.g., is vertical or is at an angle), the wavelet is transformed into a separate coordinate space and processed as a horizontal line in the separate coordinate space. As shown in <FIG>, two perpendicular lines <NUM>, <NUM> in the separate coordinate space are used to determine the orientation and position of a bounding region in the separate coordinate space. For example, the endpoint <NUM> for the wavelet <NUM> is treated as the origin of the perpendicular lines <NUM>, <NUM>. In the illustrated embodiment, the endpoint <NUM> is positioned at point (<NUM>, <NUM>). The remaining endpoints <NUM>, <NUM>, <NUM>, <NUM>, <NUM> are positioned at different points. For example, when the length of each wavelet <NUM>, <NUM>, <NUM>, <NUM>, <NUM> is <NUM>, the endpoint <NUM> is positioned at (<NUM>, <NUM>) in the separate coordinate space.

For purposes of this description, the line <NUM> is referred to as the x'-axis and the line <NUM> as the y'-axis, where the apostrophe represents the separate coordinate space. The size, shape, and/or position of a first bounding region <NUM> (see <FIG>) for the endpoint <NUM> is determined based on the two perpendicular lines <NUM>, <NUM>. For example, in one embodiment, the first bounding region <NUM> is determined as a percentage of the length of the wavelet <NUM>. For example, measuring from the origin (e.g., the endpoint <NUM>), the width of the first bounding region <NUM> can be between <NUM>% and <NUM>% of the wavelet length with respect to the x'-axis, and the height of the first bounding region <NUM> can be between -<NUM>% and <NUM>% of the wavelet length with respect to the y'-axis. The four values [<NUM>, <NUM>], [-<NUM>, <NUM>] define the location of the first bounding region <NUM> in the separate coordinate space. The same process is used with each endpoint <NUM>, <NUM>, <NUM>, <NUM>, <NUM>, with the same width and height values (e.g., four values) that are used for the first bounding region <NUM> or with at least one different value (e.g., width or height).

When the bounding regions are determined for the endpoints <NUM>, <NUM>, <NUM>, <NUM>, <NUM>, <NUM>, each control point associated with the endpoints <NUM>, <NUM>, <NUM>, <NUM>, <NUM>, <NUM> is positioned within a respective bounding region. When generating a wavy line, one or more control points are moved and positioned within a respective bounding region. In one embodiment, the control points are positioned randomly with the bounding regions. For each bounding region, a reference point (x', y') in the separate coordinate space is determined by the position of a control point within the bounding region. The reference point (x', y') can have a positive or negative x' value and a positive or negative y' value. The reference point (x', y') in the separate coordinate space is then transformed into an actual point in the original coordinate space (the space associated with the shape in the document).

In a non-limiting example, the reference point (x', y') is converted into an actual point in the original coordinate space using vectors. For example, the endpoints of the original wavelet (e.g., wavelet <NUM>) are subtracted from each other to produce a first vector. The first vector is normalized to be a single unit length first vector. The normal of the single unit length first vector is computed to produce a single unit length second vector that is perpendicular to the single unit length first vector. The single unit length first and second vectors are used to represent the reference point (x', y') in the original coordinate space. The single unit length first vector is multiplied by the x' and the single unit second vector is multiplied by the point y' to produce a final vector that points to the actual point in the original coordinate space. The final vector is added to the origin (e.g., the endpoint <NUM>) to obtain the actual point in the original coordinate space.

In a non-limiting example, for a horizontal line having an endpoint at (<NUM>, <NUM>) and a length of <NUM> units, and using the bounding region of [<NUM>% to <NUM>%], [-<NUM>% to <NUM>%], the x' minimum is <NUM>, the x' maximum is <NUM>, the y' minimum is -<NUM>, and the y' maximum is <NUM>. For the endpoint (<NUM>, <NUM>) and a bounding region of [-<NUM>% to <NUM>%], [-<NUM>% to <NUM>%], the x' minimum is <NUM>, the x' maximum is <NUM>, the y' minimum is -<NUM>, and the y' maximum is <NUM>.

Thus, in this example embodiment, the bounding regions and the reference points are determined in the separate coordinate space and only the reference points are converted into the original coordinate space to produce the positions of the actual points in the original coordinate space. Defining each bounding region as a percentage of the length of the respective wavelet transforms the line (or the wavelet) and the coordinate endpoint <NUM> into the minimum and maximum x' and y' coordinate values for the resulting random point.

<FIG> depicts example first and second bounding regions for the endpoints <NUM>, <NUM>, respectively. The first bounding region <NUM> and a second bounding region <NUM> are positioned (e.g., over, under, or around) with respect to each endpoint <NUM>, <NUM> of the wavelet <NUM>. Each of the first and the second bounding regions <NUM>, <NUM> can have any given size, shape and/or position with respect to the wavelet <NUM>. For example, in <FIG>, the first and the second bounding regions <NUM>, <NUM> have the same sized rectangular shape and are positioned on a first side <NUM> of the wavelet <NUM> (e.g., above or over the wavelet <NUM>). Although each bounding region <NUM>, <NUM> is shown as a rectangle having one size, other embodiments are not limited to this shape and size. The first and the second bounding regions <NUM>, <NUM> can have any shape, such as a circle, and any size. The first and the second bounding regions <NUM>, <NUM> can both have the same shape or different shapes, and the bounding regions <NUM>, <NUM> can both have the same size or different sizes.

As shown in <FIG>, the wavelet <NUM> has two control points <NUM>, <NUM> that are associated with the endpoints <NUM>, <NUM> of the wavelet <NUM>. The control points <NUM>, <NUM> are implemented as arrows in <FIG>, although other embodiments are not limited to the use of arrows. The wavelet <NUM> is perturbed by moving one or both control points <NUM>, <NUM> (e.g., arrows) randomly within a respective bounding region <NUM>, <NUM> to produce one or more curves in the wavelet <NUM>. The first and the second bounding regions <NUM>, <NUM> constrain the movement of the control points <NUM>, <NUM> in that the movement of each control point <NUM>, <NUM> is limited to the area within the first or second bounding region <NUM>, <NUM>. For example, as shown in <FIG>, the first control point <NUM> (e.g., arrow) can be moved to any position within the first bounding region <NUM> and the second control point <NUM> can be moved to any position within the second bounding region <NUM>. How much the wavelet <NUM> curves or distorts is based on the position of the control point <NUM> within the first bounding region <NUM> and the position of the control point <NUM> in the second bounding region <NUM>. Curves in the wavelets <NUM>, <NUM>, <NUM>, <NUM> are created using the same process of moving one or more control points of each wavelet within a respective bounding region.

<FIG> illustrates the original line <NUM> and the positions of the control points (e.g., arrows) of each wavelet <NUM>, <NUM>, <NUM>, <NUM>, <NUM>. In <FIG>, the first control points of the bounding regions associated with the left endpoints of the wavelets <NUM>, <NUM>, <NUM>, <NUM>, <NUM> have a dash pattern (similar to the dash pattern of the first bounding region <NUM>), and the second control points of the bounding regions associated with the right endpoints of the wavelets <NUM>, <NUM>, <NUM>, <NUM>, <NUM> are non-dashed arrows (similar to the non-dashed lines of the second bounding region <NUM>). The positioning of the control points produces the wavy line <NUM> in <FIG>. Because the bounding regions are positioned on one side <NUM> of the original line <NUM> (in the separate coordinate space), the wavy line <NUM> has a scalloped look. In general, the "look" or waviness of an wavy line is based on the length of the original line, the number of wavelets, the positions of the bounding regions with respect to the endpoints of each wavelet, the sizes and/or shapes of the bounding regions, and the random positions of the control points within the bounding regions. In some embodiments, the waviness can also be based on the wavy type of the shape, which can influence or determine the number of wavelets and/or the positions, shapes, and/or sizes of the bounding regions.

<FIG> depict an example second method of producing a wavy line. In the illustrated embodiment, the entire line <NUM> is treated as a wavelet. In the original coordinate space, the wavelet <NUM> is a non-horizontal line that is positioned at an angle. The wavelet <NUM> has endpoints <NUM>, <NUM>.

In <FIG>, the wavelet <NUM> is transformed into a separate coordinate space to allow the wavelet <NUM> to be processed as a horizontal line. A first bounding region <NUM> has a first size and is positioned at a first location with respect to the endpoint <NUM>. The second bounding region <NUM> has a larger second size and is positioned at a different second location with respect to the endpoint <NUM>. The control points <NUM>, <NUM> are positioned randomly within the first and the second bounding regions <NUM>, <NUM>, respectively. As discussed in more detail in conjunction with <FIG>, the position of each control point <NUM>, <NUM> produces a reference point (x', y') in the separate coordinate space. The reference points are transformed into the actual points in the original coordinate space to determine the locations of the actual points in the original coordinate space.

<FIG> shows the wavelet <NUM> transformed into a wavy wavelet <NUM> (e.g., a wavy line since the entire line is treated as a wavelet) based on the positions of the first and the second bounding regions <NUM>, <NUM> and the positions of the control points <NUM>, <NUM> within the first and second bound regions <NUM>, <NUM>. Because the first and the second bounding regions <NUM>, <NUM> are positioned on both sides <NUM>, <NUM> of the wavelet <NUM> (see <FIG>), the wavy wavelet <NUM> has an undulating look or form.

<FIG> is a flowchart of an example method of adjusting the control points of a Bezier curve to produce a wavy Bezier curve. Initially, as shown in block <NUM>, an wavy type for the shape may be determined. Block <NUM> is optional and can be omitted in other embodiments.

An original Bezier curve is received and a shape and a size (e.g., area) of a bounding region for each endpoint (e.g., arrow) of the Bezier curve is determined (blocks <NUM>, <NUM>). In an example embodiment, the bounding regions are circular bounding regions and a minimum (MIN) and a maximum (MAX) radius for each control point (e.g., arrow) associated with the endpoints are determined. Essentially, the area between the MIN and MAX radii form a bounding region for the control point. In other embodiments, the bounding regions can have the same shape or different shapes, and/or the bounding regions can have the same size or different sizes.

Each control point (e.g., arrow) is then moved randomly within the bounding region associated with a respective endpoint (bock <NUM>). This example process can be performed for each individual original Bezier curve in a shape.

<FIG> illustrate the method of adjusting the control points of a Bezier curve. A Bezier curve <NUM> is shown in <FIG>. In the illustrated embodiment, the first control point <NUM> and the second control point <NUM> are implemented with arrows. As shown in <FIG>, a MIN radius <NUM> and a MAX radius <NUM> are determined for the first control point <NUM> associated with the endpoint <NUM>. The MIN and MAX radii <NUM>, <NUM> form a bounding region for the control point <NUM>. A MIN radius <NUM> and a MAX radius <NUM> are also determined for the second control point <NUM> associated with the endpoint <NUM>. The MIN and MAX radii <NUM>, <NUM> form a bounding region for the control point <NUM>. The MIN and MAX radii for each control point <NUM>, <NUM> can have the same lengths or at least one of the lengths can differ from the other lengths. The bounding regions for the first and the second control points <NUM>, <NUM> (e.g., arrows) can have the same size (e.g., area) or different sizes.

As shown in <FIG>, the control points <NUM>, <NUM> are not initially positioned within the bounding regions (before the control points <NUM>, <NUM> are moved). In other embodiments, one or both control points <NUM>, <NUM> can be initially positioned within a respective boundary region. One or both of the first and the second control points <NUM>, <NUM> (e.g. arrows) are moved randomly within a respective bounding region to produce a wavy Bezier curve. In <FIG>, the first control point <NUM> is moved randomly within the bounding region formed by the MIN radius <NUM> and the MAX radius <NUM>, and the second control point <NUM> is moved randomly within the bounding region formed by the MIN radius <NUM> and the MAX radius <NUM>. The random placements of the first control point <NUM> and the second control point <NUM> within their respective bounding regions produce the example wavy Bezier curve <NUM> shown in <FIG>. Compared to the original Bezier curve <NUM> in <FIG>, the form of the wavy Bezier curve <NUM> is distorted.

In some instances, the endpoints of a Bezier curve can be turned into one of three types; corner, straight, and smooth. Corner means there are no rules that constrain where the control points on either side of the endpoint are, relative to each other. Straight means the two control points will form a straight line through the endpoints. Smooth means the two endpoints will make a straight line through the endpoints and be equal distance from the endpoints.

Different wavy Bezier curves can be created in other embodiments. In general, the waviness of a wavy Bezier curve is based on the size of the bounding regions (e.g., the lengths of the MIN radii and the lengths of the MAX radii) and the random positions of the first and the second control points within their respective bounding regions. In some instances, the waviness of a wavy type may also be based on a wavy type associated with the shape because the wavy type can influence or determine the size of the bounding regions (e.g., the length(s) of the MIN and MAX radii). For example, a wavy type for a Bezier curve can be defined with the MIN and MAX values for perturbing the control points of the original Bezier curve.

<FIG> depicts example wavy wavelets and example wavy Bezier curves for the example shape shown in <FIG>. The original line <NUM> has been divided into three wavelets and the control points associated with the endpoints of each wavelet have been moved randomly to produce wavy wavelets <NUM>, <NUM>, <NUM>. The original line <NUM> has been divided into two wavelets and the control points associated with the endpoints of each wavelet have been positioned randomly to produce wavy wavelets <NUM>, <NUM>. The control points associated with the endpoints of the original Bezier curve <NUM> have been moved randomly to produce a wavy Bezier curve <NUM>. The control points associated with the endpoints of the original Bezier curve <NUM> have been adjusted randomly to produce a wavy Bezier curve <NUM>. The original line <NUM> has been divided into two wavelets and the control points associated with the endpoints of each wavelet have been positioned randomly to produce wavy wavelets <NUM>, <NUM>. Collectively, the wavy wavelets <NUM>, <NUM>, <NUM>, <NUM>, <NUM>, <NUM>, <NUM> and the wavy Bezier curves <NUM>, <NUM> produce the wavy shape <NUM> shown in <FIG>. Comparing the wavy shape <NUM> with the original shape <NUM> shown in <FIG>, the wavy shape <NUM> appears more rough, uneven, and hand drawn.

One advantage of using bounding regions when creating wavy shapes is increased flexibility. The bounding regions generalize and parametrize the software of a diagramming application or other application (e.g., the programming code). For example, the same code can be used to create a variety of different effects by adding new wavy types or wavy type parameters. Additionally or alternatively, transforming a wavelet or Bezier curve into a separate coordinate space and processing the wavelet or Bezier curve as if the wavelet or Bezier curve are horizontal allows the wavelet(s) and/or Bezier curve(s) in the shape to look consistent. Moreover, the form of an original line or Bezier curve can be disrupted or modified to include one or more curves, one or more loops, a single arc, one or more spikes, and/or regular or irregular waviness.

<FIG> is a flowchart of a method of selecting a waviness level for a wavy shape. Initially, as shown in block <NUM>, a user is presented with multiple waviness options. Each waviness option can be associated with a level or degree of waviness. Additionally or alternatively, a user may want the shape to include one or more loops, a single arc, and/or one or more spikes. In a non-limiting embodiment, sliders, dialog boxes, and/or buttons can be displayed in a user interface and used to select a particular waviness option.

Next, as shown in block <NUM>, a selection of a particular waviness option is received. For example, the user can position a slider at a location that corresponds to a particular level of waviness, or the user may enter or select the width and/or height values of one or more bounding regions (e.g., [x1 to x2], [y1 to y2]). The shape is then transformed into a wavy shape, where the waviness of the wavy shape corresponds to the selected waviness option (block <NUM>).

<FIG> and the associated descriptions provide a discussion of a variety of operating environments in which aspects of the disclosure may be practiced. However, the devices and systems illustrated and discussed with respect to <FIG> are for purposes of example and illustration and are not limiting of a vast number of electronic device configurations that may be utilized for practicing aspects of the disclosure, as described herein.

<FIG> is a block diagram illustrating physical components (e.g., hardware) of an electronic device <NUM> with which aspects of the disclosure may be practiced. In a basic configuration, the electronic device <NUM> may include at least one processing device <NUM> and a system memory <NUM>. Any suitable processing device <NUM> can be used. For example, the processing device <NUM> may be a central processing unit, a microprocessor, an application specific integrated circuit, a field programmable gate array, a graphics processing unit, or combinations thereof.

Depending on the configuration and type of the electronic device <NUM>, the system memory <NUM> may comprise, but is not limited to, volatile storage (e.g., random access memory), non-volatile storage (e.g., read-only memory), flash memory, or any combination of such memories. The system memory <NUM> may include a number of program modules and data files, such as an operating system <NUM>, one or more program modules <NUM> suitable for parsing received input, determining subject matter of received input, determining actions associated with the input and so on, and a diagramming application <NUM>. While executing on the processing device <NUM>, the diagramming application <NUM> may perform and/or cause to be performed processes including, but not limited to, the aspects as described herein.

The operating system <NUM>, for example, may be suitable for controlling the operation of the electronic device <NUM>. Furthermore, embodiments of the disclosure may be practiced in conjunction with a graphics library, other operating systems, or any other application program and is not limited to any particular application or system. This basic configuration is illustrated in <FIG> by those components within a dashed line <NUM>.

The electronic device <NUM> may have additional features or functionality. For example, the electronic device <NUM> may also include additional data storage devices (removable and/or non-removable) such as, for example, magnetic disks, optical disks, or tape. Such additional storage is illustrated in <FIG> by a removable storage device <NUM> and a non-removable storage device <NUM>.

The electronic device <NUM> may also have one or more input device(s) <NUM> such as a keyboard, a trackpad, a mouse, a pen, a sound or voice input device, a touch, force and/or swipe input device, etc. The output device(s) <NUM> such as a display, speakers, a printer, etc. may also be included. The aforementioned devices are examples and others may be used. The electronic device <NUM> may include one or more communication devices <NUM> allowing communications with other electronic devices <NUM>. Examples of suitable communication devices <NUM> include, but are not limited to, radio frequency (RF) transmitter, receiver, and/or transceiver circuitry; universal serial bus (USB), parallel, and/or serial ports.

The term computer-readable media as used herein may include computer storage media.

The system memory <NUM>, the removable storage device <NUM>, and the non-removable storage device <NUM> are all computer storage media examples (e.g., memory storage or storage device). Computer storage media may include RAM, ROM, electrically erasable read-only memory (EEPROM), flash memory or other memory technology, CD-ROM, digital versatile disks (DVD) or other optical storage, magnetic cassettes, magnetic tape, magnetic disk storage or other magnetic storage devices, or any other article of manufacture which can be used to store information and which can be accessed by the electronic device <NUM>. Any such computer storage media may be part of the electronic device <NUM>.

For example, embodiments of the disclosure may be practiced via a system-on-a-chip (SOC) where each or many of the components illustrated in <FIG> may be integrated onto a single integrated circuit. Such an SOC device may include one or more processing devices, graphics units, communications units, system virtualization units and various application functionality all of which are integrated (or "burned") onto the chip substrate as a single integrated circuit.

When operating via an SOC, the functionality, described herein, with respect to the capability of client to switch protocols may be operated via application-specific logic integrated with other components of the electronic device <NUM> on the single integrated circuit (chip). Embodiments of the disclosure may also be practiced using other technologies capable of performing logical operations such as, for example, AND, OR, and NOT, including but not limited to mechanical, optical, fluidic, and quantum technologies.

<FIG> and <FIG> illustrate a mobile electronic device <NUM>, for example, a mobile telephone, a smart phone, wearable computer (such as a smart watch), a tablet computer, a laptop computer, and the like, with which embodiments of the disclosure may be practiced. With reference to <FIG>, one aspect of a mobile electronic device <NUM> for implementing the aspects is illustrated.

In a basic configuration, the mobile electronic device <NUM> is a handheld computer having both input elements and output elements. The mobile electronic device <NUM> typically includes a display <NUM> and one or more input buttons <NUM> that allow the user to enter information into the mobile electronic device <NUM>. The display <NUM> of the mobile electronic device <NUM> may also function as an input device (e.g., a display that accepts touch and/or force input).

If included, an optional side input element <NUM> allows further user input. The side input element <NUM> may be a rotary switch, a button, or any other type of manual input element. In alternative aspects, mobile electronic device <NUM> may incorporate more or less input elements. For example, the display <NUM> may not be a touch screen in some embodiments. In yet another alternative embodiment, the mobile electronic device <NUM> is a portable phone system, such as a cellular phone. The mobile electronic device <NUM> may also include an optional keypad <NUM>. Optional keypad <NUM> may be a physical keypad or a "soft" keypad generated on the touch screen display.

In various embodiments, the output elements include the display <NUM> for showing a graphical user interface (GUI) of a diagramming program, a visual indicator <NUM> (e.g., a light emitting diode), and/or an audio transducer <NUM> (e.g., a speaker). In some aspects, the mobile electronic device <NUM> incorporates a vibration transducer for providing the user with tactile feedback. In yet another aspect, the mobile electronic device <NUM> incorporates input and/or output ports, such as an audio input (e.g., a microphone jack), an audio output (e.g., a headphone jack), and a video output (e.g., a HDMI port) for sending signals to or receiving signals from an external device.

<FIG> is a block diagram illustrating the architecture of one aspect of a mobile electronic device <NUM>. That is, the mobile electronic device <NUM> can incorporate a system (e.g., an architecture) <NUM> to implement some aspects. In one embodiment, the system <NUM> is implemented as a "smart phone" capable of running one or more applications (e.g., browser, e-mail, calendaring, contact managers, messaging clients, games, media clients/players, diagramming applications, and sharing applications and so on). In some aspects, the system <NUM> is integrated as an electronic device, such as an integrated personal digital assistant (PDA) and wireless phone.

One or more application programs <NUM> may be loaded into the memory <NUM> and run on or in association with the operating system <NUM>. Examples of the application programs include phone dialer programs, e-mail programs, diagramming programs, personal information management (PIM) programs, word processing programs, spreadsheet programs, Internet browser programs, messaging programs, and so forth.

The system <NUM> also includes a non-volatile storage area <NUM> within the memory <NUM>. The non-volatile storage area <NUM> may be used to store persistent information that should not be lost when the system <NUM> is powered down.

The application programs <NUM> may use and store information in the non-volatile storage area <NUM>, such as diagrams or presentations used by a diagramming application, and the like. A synchronization application (not shown) also resides on the system <NUM> and is programmed to interact with a corresponding synchronization application resident on a host computer to keep the information stored in the non-volatile storage area <NUM> synchronized with corresponding information stored at the host computer.

The power supply <NUM> may further include an external power source, such as an AC adapter or a powered docking cradle that supplements or recharges the batteries.

The visual indicator <NUM> may be used to provide visual notifications, and/or an audio interface <NUM> may be used for producing audible notifications via an audio transducer (e.g., audio transducer <NUM> illustrated in <FIG>). In the illustrated embodiment, the visual indicator <NUM> is a light emitting diode (LED) and the audio transducer <NUM> may be a speaker. These devices may be directly coupled to the power supply <NUM> so that when activated, they remain on for a duration dictated by the notification mechanism even though the processor <NUM> and other components might shut down for conserving battery power. The LED may be programmed to remain on indefinitely until the user takes action to indicate the powered-on status of the device.

The audio interface <NUM> is used to provide audible signals to and receive audible signals from the user (e.g., voice input such as described above). For example, in addition to being coupled to the audio transducer <NUM>, the audio interface <NUM> may also be coupled to a microphone to receive audible input, such as to facilitate a telephone conversation. In accordance with embodiments of the present disclosure, the microphone may also serve as an audio sensor to facilitate control of notifications, as will be described below.

The system <NUM> may further include a video interface <NUM> that enables an operation of peripheral device <NUM> (e.g., on-board camera) to record still images, video stream, and the like.

A mobile electronic device <NUM> implementing the system <NUM> may have additional features or functionality. For example, the mobile electronic device <NUM> may also include additional data storage devices (removable and/or non-removable) such as, magnetic disks, optical disks, or tape.

Data/information generated or captured by the mobile electronic device <NUM> and stored via the system <NUM> may be stored locally on the mobile electronic device <NUM>, as described above, or the data may be stored on any number of storage media that may be accessed by the mobile electronic device <NUM> via the radio interface layer <NUM> or via a wired connection between the mobile electronic device <NUM> and a separate electronic device associated with the mobile electronic device <NUM>, for example, a server-computing device in a distributed computing network, such as the Internet (e.g., server computing device <NUM> in <FIG>). As should be appreciated such data/information may be accessed via the mobile electronic device <NUM> via the radio interface layer <NUM> or via a distributed computing network. Similarly, such data/information may be readily transferred between electronic devices for storage and use according to well-known data/information transfer and storage means, including electronic mail and collaborative data/information sharing systems.

As should be appreciated, <FIG> and <FIG> are described for purposes of illustrating the present methods and systems and is not intended to limit the disclosure to a particular sequence of steps or a particular combination of hardware or software components.

<FIG> is a block diagram illustrating a distributed system in which aspects of the disclosure may be practiced. The system <NUM> allows a user to produce drawings, presentations, or other diagrams using a diagramming program <NUM> in a general computing device <NUM> (e.g., a desktop computer), a tablet computing device <NUM>, and/or a mobile computing device <NUM>. The general computing device <NUM>, the tablet computing device <NUM>, and the mobile computing device <NUM> can each include the components, or be connected to the components, that are shown associated with the electronic device <NUM> in <FIG> or the mobile electronic device <NUM> in <FIG> and <FIG>.

The general computing device <NUM>, the tablet computing device <NUM>, and the mobile computing device <NUM> are each configured to access one or more networks (represented by network <NUM>) to interact with a diagramming application <NUM> stored in one or more storage devices (represented by storage device <NUM>) and executed on one or more server computing devices (represented by server computing device <NUM>). In some aspects, the server computing device <NUM> can access and/or receive various types of services, communications, documents and information transmitted from other sources, such as a web portal <NUM>, an electronic communications services <NUM>, directory services <NUM>, instant messaging and/or text services <NUM>, and/or social networking services <NUM>. In some instances, these sources may provide robust reporting, analytics, data compilation and/or storage service, etc., whereas other services may provide search engines or other access to data and information, images, graphics, videos, document processing and the like.

As should be appreciated, <FIG> is described for purposes of illustrating the present methods and systems and is not intended to limit the disclosure to a particular sequence of steps or a particular combination of hardware or software components.

Claim 1:
A computer-implemented method of producing a wavy shape (<NUM>), comprising:
separating a shape (<NUM>) into at least one individual original line (<NUM>) and at least one individual original Bezier curve (<NUM>), wherein the at least one original line (<NUM>) is a straight non-horizontal line and the at least one original Bezier curve (<NUM>) is a smooth Bezier curve;
for each individual original line (<NUM>):
dividing the individual original line (<NUM>) into one or more wavelet (<NUM>) and transforming the original line (<NUM>) into a wavy line (<NUM>) using a first bounding region (<NUM>) associated with a first endpoint (<NUM>) of each wavelet (<NUM>) and a second bounding region (<NUM>) associated with a second endpoint (<NUM>) of each wavelet (<NUM>) to constrain an amount of waviness produced in the original line (<NUM>), wherein transforming the original line (<NUM>) into a wavy line (<NUM>) includes for each of the one or more wavelet (<NUM>):
transforming the wavelet (<NUM>) from an original coordinate space into a separate coordinate space to process the one or more wavelet (<NUM>) as a horizontal line;
moving a first control point (<NUM>) of the first endpoint (<NUM>) of the horizontal wavelet (<NUM>) from a first initial point to a first position within the first bounding region (<NUM>);
moving a second control point (<NUM>) of the second endpoint (<NUM>) of the horizontal wavelet (<NUM>) from a second initial point to a second position within the second bounding region (<NUM>); and
transforming the one or more horizontal wavelets (<NUM>) from the separate coordinate space back into the original coordinate space;
for each original Bezier curve (<NUM>):
transforming the original Bezier curve (<NUM>) into a wavy Bezier curve (<NUM>) using a third bounding region associated with a third endpoint (<NUM>) of the original Bezier curve (<NUM>) and a fourth bounding region associated with a fourth endpoint (<NUM>) of the original Bezier curve (<NUM>) to constrain an amount of waviness produced in the original Bezier curve (<NUM>); and
presenting the wavy shape (<NUM>) in a user interface of a diagramming application (<NUM>).