Generating candidate mirror snap points using determined axes of symmetry

In implementations of systems for generating candidate mirror snap points using determined axes of symmetry, a computing device implements a symmetry system to receive vector object data describing a set of points of a vector object. The symmetry system generates convex polygons that enclose the set of points and identifies a particular convex polygon that has a smallest area. A side of the particular convex polygon is determined as an axis of symmetry for the vector object. The symmetry system generates an indication for display in a user interface of a candidate snap point based on the axis of symmetry and a point of the set of points of the vector object.

BACKGROUND

In the context of creating and editing digital content, mirror snapping systems identify and suggest candidate snap points for creating new path segments by reflecting points of existing path segments relative to axes of symmetry. For example, a user interacts with an input device such as a mouse or stylus using an application for creating and editing digital content to draw the existing path segments on one side of an axis of symmetry in a user interface. A mirror snapping system renders indications of candidate snap points on the other side of the axis of symmetry in the user interface. These candidate snap points are symmetric to the points of the existing path segments relative to the axis of symmetry. The user interacts with the input device to connect the points of the existing path segments to the candidate snap points to create a symmetric vector object.

However, conventional mirror snapping systems are limited to pre-defined axes of symmetry such as a horizontal axis and/or a vertical axis. Due to this limitation, conventional systems are of minimal value in scenarios in which the existing path segments define a vector object that is oriented at an angle or which is partially asymmetric. For example, if the vector object is oriented at an angle relative to the pre-defined axis of symmetry, then the object must first be manually reoriented to align with the horizontal or vertical axis. The reoriented vector object is modified using the candidate snap points, and then manually reoriented again to align with the angle which is error prone and inefficient.

SUMMARY

Techniques and systems are described for generating candidate mirror snap points using determined axes of symmetry. In an example, a computing device implements a symmetry system to receive vector object data describing a set of points of a vector object. The symmetry system generates convex polygons that enclose the set of points. In one example, the convex polygons are rectangles. The symmetry system identifies a particular convex polygon that has the smallest area, for example, each of the convex polygons has an area and the particular convex polygon has the smallest area.

The symmetry system determines an axis of symmetry for the vector object as a side of the particular convex polygon. For example, the side is a longest side of the particular convex polygon, the side is a closest side of the particular convex polygon to the most recent indication of a user interaction, etc. The symmetry system generates an indication of a candidate snap point for display in a user interface based on the determined axis of symmetry and a point of the set of points of the vector object. In an example, the indication of the candidate snap point is generated by reflecting the point about the determined axis of symmetry.

DETAILED DESCRIPTION

Overview

Conventional mirror snapping systems are limited to identifying and suggesting candidate snap points based on pre-defined axes of symmetry such as a horizontal axis and/or a vertical axis. Because of this limitation, conventional systems are of limited value for editing vector objects which are partially asymmetric or oriented at an angle. In these scenarios, a vector object must be manually repositioned and/or reoriented multiple times to modify the vector object using the candidate snap points which is inefficient and prone to error. In order to overcome the limitations of conventional systems, techniques and systems are described for generating candidate mirror snap points using determined axes of symmetry.

In one example, a computing device implements a symmetry system to receive vector object data describing a set of points of a vector object. The symmetry system generates convex polygons (e.g., rectangles) that enclose the set of points. Each of the convex polygons has an area and the symmetry system identifies a particular convex polygon that has a smallest area. In this example, the particular convex polygon is a convex hull of the set of points of the vector object.

The symmetry system determines an axis of symmetry for the vector object as a side of the particular convex polygon. For example, the side is a longest side of the particular convex polygon. In one example, the side is a nearest side of the particular convex polygon to a most recent indication of a user interaction. In an example in which the particular convex polygon is a rectangle, the symmetry system determines the axis of symmetry as one of the two longest sides of the rectangle.

The symmetry system uses the axis of symmetry and the points of the vector object to generate reflected points. For example, each of the points is an anchor point and includes corresponding control points. In this example, the symmetry system reflects each of the points and corresponding control points about the axis of symmetry. To do so, the symmetry system generates an affine transformation matrix based on a y-axis intercept of the axis of symmetry and an angle between the axis of symmetry and an x-axis.

The symmetry system applies the affine transformation matrix on each of the points and corresponding control points to generate the reflected points and reflected control points. In one example, instead of reflecting the points and corresponding control points independently, the symmetry system reflects Bezier segments including the points and corresponding control points. For example, symmetry system tracks associations of points and control points and associations of reflected points and reflected control points using metadata associated with the vector object.

Consider an example in which the symmetry system leverages the reflected points to generate indications of candidate mirror snap points for editing the vector object. In this example, the symmetry system generates an indication of a candidate snap point for each of the reflected points. In one example, the symmetry system renders the indications of the candidate snap points relative to the vector object in a user interface of a display device.

A user interacts with an input device (e.g., a mouse, a stylus, a microphone, a keyboard, etc.) relative to the user interface to generate input data that describes these interactions. For example, the user interacts with the input device to select an indication of a candidate snap point and the symmetry system receives input data describing the selected indication. Responsive to receiving the input data, the symmetry system accesses the metadata associated with the vector object and uses the metadata to render indications of reflected control points corresponding to the candidate snap point in the user interface.

In one example, the user interacts with the input device to modify the candidate snap point by interacting with the indications of the reflected control points. In another example, the user interacts with the input device to connect a Bezier segment to the candidate snap point. For example, the Bezier segment is added as part of a symmetric or asymmetric portion of the vector object. In this example, the Bezier segment is part of a symmetric portion of the vector object and the symmetry system receives input data describing this interaction and renders the symmetric portion of the vector object in the user interface.

After connecting the Bezier segment to the candidate snap point, the user interacts with the input device to interact with an indication of an additional candidate snap point. For example, there are sequential indications of candidate snap points disposed between the additional candidate snap point and the candidate snap point. The symmetry system receives input data describing a selection of the additional candidate snap point and the candidate snap points disposed between the additional candidate snap point and the candidate snap point. In response to receiving this input data, the symmetry system autocompletes another symmetric portion of the vector object using the candidate snap points that are disposed between the additional candidate snap point and the candidate snap point.

Unlike conventional systems which are limited to pre-defined horizontal and vertical axes of symmetry, the described systems are capable of automatically determining an axis of symmetry based on the set of points of the vector object. The described systems are even capable of determining different axes of symmetry as the user interacts with the input device to modify the vector object. The described systems improve mirror snapping technology further by autocompleting symmetric portions of the vector object which increases efficiency of digital content creation relative to the conventional systems which are prone to error and inefficient.

Term Examples

As used herein, the term “convex polygon” refers to a polygon having interior angles which are all less than 180 degrees. By way of example, vertices of a convex polygon point outward or away from a center of the convex polygon.

As used herein, the term “snap point” refers to a point defined in a user interface which relocates a cursor or a portion of a digital object that is within a threshold proximity of the point to collocate the cursor or the portion of the digital object with the point.

In the following discussion, an example environment is first described that employs examples of techniques described herein. Example procedures are also described which are performable in the example environment and other environments. Consequently, performance of the example procedures is not limited to the example environment and the example environment is not limited to performance of the example procedures.

Example Environment

FIG. 1is an illustration of an environment100in an example implementation that is operable to employ digital systems and techniques as described herein. The illustrated environment100includes a computing device102connected to a network104. The computing device102is configurable as a desktop computer, a laptop computer, a mobile device (e.g., assuming a handheld configuration such as a tablet or mobile phone), and so forth. Thus, the computing device102is capable of ranging from a full resource device with substantial memory and processor resources (e.g., personal computers, game consoles) to a low-resource device with limited memory and/or processing resources (e.g., mobile devices). In some examples, the computing device102is representative of a plurality of different devices such as multiple servers utilized to perform operations “over the cloud.”

The illustrated environment100also includes a display device106that is communicatively coupled to the computing device102via a wired or a wireless connection. A variety of device configurations are usable to implement the computing device102and/or the display device106. The computing device102includes a storage device108and symmetry module110. The storage device108is illustrated to include digital content112.

The symmetry module110is shown as having, receiving, and/or transmitting vector object data114. For example, the vector object data114describes sets of points of vector objects. In the illustrated example, the vector object data114describes a vector object116which includes a set of points118-124. In an example, the points118-124are anchor points of the vector object116.

The symmetry module110is also illustrated as having, receiving, and/or transmitting input data126. In one example, the input data126describes user inputs. In this example, a user interacts with an input device (e.g., a mouse, a keyboard, a stylus, a microphone, etc.) and the input device communicates the input data126to the computing device102, for example, via the network104. The input data126describes the user's interactions with the input device.

In an example, the user interacts with the input device and an application for creating and/or editing digital content to create and/or edit the vector object116. For example, the user interacts with the input device to modify control points of the points118-124. The symmetry module110receives the input data126describing the modification of the control points of the points118-124and processes the input data126to render the vector object116.

In another example, the symmetry module110processes the vector object data114to generate candidate mirror snap points128which are displayed in a user interface130of the display device106. To do so in one example, the symmetry module110generates convex polygons that enclose the points118-124. The symmetry module110then identifies a particular convex polygon that has a smallest area of the convex polygons. Accordingly, the convex polygons each have an area and the particular convex polygon has the smallest area. In an example, the particular convex polygon is a convex hull of the points118-124.

Once the particular convex polygon is identified, the symmetry module110selects a side of the particular convex polygon and determines an axis of symmetry132as the side of the particular convex polygon. For example, the symmetry module110selects the side as being a longest side of the particular convex polygon. In this example, the longest side of the particular convex polygon corresponds to a directional flow of a visual appearance of the vector object116. In another example, the symmetry module110selects the side as being a nearest side of the particular convex polygon to a most recent indication of a user interaction as described by the input data126.

As shown, the vector object116includes three curve segments such that no portion of the vector object116aligns well with a horizontal axis (e.g., an x-axis) or a vertical axis (e.g., a y-axis). The axis of symmetry132is not parallel to the horizontal axis or the vertical axis in this example. Rather, the axis of symmetry132intercepts the horizontal axis and the vertical axis such that the axis of symmetry132appears to follow a direction of a shape of the vector object116.

The symmetry module110leverages the axis of symmetry132and the points118-124to generate indications134-140of candidate snap points. For example, the symmetry module110generates indication134by reflecting point118about the axis of symmetry132. This includes applying an affine transformation on coordinates of the point118based on y-axis intercept of the axis of symmetry132and an angle between the axis of symmetry132and an x-axis in one example.

As shown, the symmetry module110generates indication136by reflecting point120about the axis of symmetry132; the symmetry module110generates indication138by reflecting point122about the axis of symmetry132; and the symmetry module110generates indication140by reflecting point124about the axis of symmetry132. For example, the user interacts with the input device to generate input data126that describes interactions with the indications134-140. In this example, the indications134-140are usable to produce a mirror of the vector object116such that the mirror and the vector object116are a single vector object that is symmetric about the axis of symmetry132. In another example, the indications134-140are usable to produce a partial mirror of the vector object116such that the partial mirror and the vector object116are a single vector object which is not symmetric about the axis of symmetry132.

For example, the user interacts with the input device to interact with the indication138and modifies a position of the indication138to produce a non-symmetric portion of a single vector object. In another example, the user interacts with the input device to select the indication138and the symmetry module110receives input data126describing the selection of the indication138. For example, the symmetry module110processes the input data to generate indications of control points of the indication138. In one example, the symmetry module110generates the indications of the control points of the indication138by reflecting control points of the point122about the axis of symmetry132.

Continuing the example in which the user selects the indication138, the user then interacts with the input device to generate input data126describing an interaction with the indication140. In this example, the input data126does not describe an interaction with indications134,136. For example, the indications134,136are sequential indications disposed between the indication138and the indication140. The symmetry module110receives the input data126and processes the input data126to autocomplete a symmetric portion of the single vector object. For example, the symmetry module110autocompletes the symmetric portion using the indication136and the indication134.

FIG. 2depicts a system200in an example implementation showing operation of a symmetry module110. The symmetry module110is illustrated to include a convex hull module202, an axis module204, a snap point module206, and a display module208. In the illustrated example, the symmetry module110receives the vector object data114and the input data126as inputs. In other examples, the symmetry module110receives the input data126as an input and generates the vector object data114based on the input data126. For example, the convex hull module202receives the vector object data114and processes the vector object data114to generate polygon data210.

FIGS. 3A, 3B, 3C, 3D, and 3Eillustrate an example of generating candidate mirror snap points using determined axes of symmetry.FIG. 3Aillustrates a representation300of determining an axis of symmetry for a vector object.FIG. 3Billustrates a representation302of generating indications of candidate snap points.FIG. 3Cillustrates a representation304of generating indications of control points for candidate snap points.FIG. 3Dillustrates a representation306of producing an asymmetric portion of a single vector object.FIG. 3Eillustrates a representation308of autocompleting a symmetric portion of the single vector object.

As shown inFIGS. 2 and 3A, the convex hull module202receives the vector object data114that describes a set of points of a vector object310. In this example, the set of points P1-P10define the vector object310. The convex hull module202processes the vector object data114and determines convex polygons that enclose the points P1-P10. In one example, the convex hull module202determines rectangles that enclose the points P1-P10. To do so in an example, the convex hull module202identifies all edges of the vector object310. In this example, the vector object310includes five edges which are defined by points (P10, P9); (P9, P7); (P7, P4); (P4, P3); and (P3, P10).

The convex hull module202defines a variable theta as an angle between each edge of the vector object310and an x-axis. For example, the convex hull module202computes theta as an angle between an edge defined by points (P10, P9) and the x-axis. As shown in representation312A, the convex hull module202begins with the edge defined by points (P10, P9) and determines a smallest rectangle that encloses points P1-P10and which has one side orientated at angle theta. The convex hull module202determines an area of this rectangle which the convex hull module202and/or the axis module204uses to identify a convex polygon that encloses points P1-P10and has a smallest area. The convex hull module202then rotates the rectangle by theta which is depicted in representation312B.

As illustrated in the representation312B, the convex hull module202calculates an updated theta based on an edge of the vector object310defined by points (P9, P7). The convex hull module202then determines a smallest rectangle that encloses points P1-P10and has one side oriented at the updated angle theta. For example, the convex hull module202determines an area of this rectangle and then rotates the rectangle by the updated angle theta.

Representation312C illustrates the rotated rectangle. As shown, the convex hull module202calculates an updated theta based on an edge of the vector object310defined by points (P7, P4). For example, the convex hull module202determines a smallest rectangle that encloses points P1-P10and has one side oriented at the updated angle theta. In this example, the convex hull module202computes an area of this rectangle and then rotates the rectangle by the updated angle theta.

As depicted in representation312D, the convex hull module202determines an updated theta based on an edge of the vector object310defined by points (P4, P3). The convex hull module202determines a smallest rectangle that encloses points P1-P10and has one side oriented at the updated angle theta. For example, the convex hull module202determines an area of this rectangle and then rotates the rectangle by the updated angle theta which is illustrated in representation312E. As shown, the convex hull module202computes an updated theta based on an edge of the vector object310defined by points (P3, P10). The convex hull module202determines a smallest rectangle that encloses points P1-P10and has one side oriented at the updated angle theta. The convex hull module202calculates an area of this rectangle.

The convex hull module202compares the areas of the rectangles illustrated in the representations312A-312E and determines that the rectangle illustrated in the representation312C has the smallest area. For example, the rectangle shown in the representation312C has an area that is smaller than the areas of the rectangles depicted in the representations312A,312B,312D, and312E. Accordingly, the rectangle illustrated in the representation312C is a convex hull of points P1-P10. The convex hull module202generates the polygon data210as describing the rectangle illustrated in the representation312C. The axis module204receives the polygon data210and the vector object data114and processes the polygon data210and/or the vector object data114to generate axis data212.

As shown in representation314, the axis module204selects a side of a particular convex polygon (e.g., a side of the rectangle illustrated in the representation312C) to define as an axis of symmetry for the vector object310. In one example, the axis module204determines axis318as the axis of symmetry for the vector object310. In this example, the axis module202selects a side of the rectangle that is closest to a most recent indication of a user interaction to be the axis of symmetry.

In another example, the axis module204determines axis320as the axis of symmetry for the vector object310. In this example, the axis module204selects a side of the rectangle that is a longest side of the rectangle to be the axis of symmetry. For example, the axis module204selects a side of the rectangle that is longer than at least one additional side of the rectangle to be the axis of symmetry. In other examples, the axis module204selects a side of the rectangle which follows a direction of flow of a shape of the vector object310to be the axis of symmetry. The axis module204generates the axis data212as describing the selected side of the rectangle.

The snap point module206receives the axis data212and the vector object data114and processes the axis data212and/or the vector object data114to generate candidate data214. As illustrated inFIG. 3B, the representation302includes a vector object322and an axis of symmetry324. As shown, the vector object322is half of a heart shape which includes a straight portion that does not align with a horizontal axis (e.g., an x-axis) or a vertical axis (e.g., a y-axis). The axis of symmetry324is illustrated as following the straight portion of the vector object322. For example, the vector object data114describes the vector object322and the axis data212describes the axis of symmetry324. In one example, the axis data212describes a side of a convex polygon and the snap point module206generates the axis of symmetry324based on the side of the convex polygon.

The vector object322is defined by a set of points and this set of points is represented by point328. For example, the snap point module206uses the point328and the axis of symmetry324to generate an indication330of a candidate snap point. To do so, the snap point module206represents the axis of symmetry324as a linear equation and determines a y-axis intercept for the axis of symmetry324. The snap point module206also determines an angle between the axis of symmetry324and an x-axis which is defined as a theta angle. The snap point module206generates an identity matrix which the snap point module206uses to reflect the point328about the axis of symmetry324to generate the indication330.

For example, the snap point module206generates a translated matrix by translating or shifting the identity matrix by an amount equal to a positive y-axis intercept of the axis of symmetry324. The snap point module206then generates a transformed matrix by multiplying the identity matrix by the translated matrix. In one example, the snap point module206generates a rotated matrix by rotating the identity matrix by an amount equal to a negative theta for the axis of symmetry324. In this example, the snap point module206updates the transformed matrix by multiplying the transformed matrix by the rotated matrix.

The snap point module206initializes a y-inverted matrix and updates the transformed matrix by multiplying the updated transformed matrix by the y-inverted matrix. For example, the snap point module206generates an additional rotated matrix by rotating the identity matrix by an amount equal to a positive theta for the axis of symmetry324. The snap point module206updates the transformed matrix by multiplying the additional rotated matrix by the updated transformed matrix. In some examples, the snap point module206generates an additional translated matrix by translating or shifting the identity matrix by an amount equal to a negative y-intercept of the axis of symmetry324. Finally, the snap point module206generates an affine transform matrix by multiplying the updated transformed matrix by the additional translated matrix.

For example, the snap point module206applies the affine transform matrix on coordinates of the point328to generate the indication330of the candidate snap point. In one example, the snap point module206also applies the affine transform matrix on coordinates of control points of the point328. As shown, the user interacts with the input device via cursor332to interact with the indication330of the candidate snap point. For example, the indication330is a translucent hint and the user interacts with the input device to bring the cursor332within a threshold proximity of the indication330. In the illustrated example, the symmetry module110snaps the cursor332to the indication330in response to receiving the input data126describing the cursor332within the threshold proximity of the indication330.

In some examples, instead of reflecting the point328and its control points about the axis of symmetry324as independent entities, the snap point module206reflects the point328and its control points as a whole Bezier segment. For example, the snap point module206reflects all of the points of the vector object322as whole Bezier segments and generates the candidate data214as describing the reflected points of the vector object322represented by the point328and the reflected control points of the points of the vector object322. In one example, the snap point module206writes data describing the reflected points of the vector object322and reflected control points of the points of the vector object322to metadata associated with the vector object322. For example, the snap point module206writes data describing the indication330and its control points to the metadata associated with the vector object322. The display module208receives the candidate data214, the vector object data114, and the input data126and processes the candidate data214, the vector object data114, and/or the input data126to render digital content112. An example of this is illustrated inFIG. 3C.

As shown, the representation304includes a vector object334which has a point336. The point336is included in a Bezier segment which is reflected from an additional Bezier segment of the vector object334. For example, the display module208processes the candidate data214and the vector object data114to render the vector object334. In one example, the display module208also generates indications338,340of control points of the point336. The indications338,340indicate control points of the Bezier segment that includes the point336and the indications338,340correspond to reflected control points of the additional Bezier segment of the vector object334. In another example, the display module208does not render the indications338,340of the control points until the user interacts with the input device to interact with the point336.

For example, the user interacts with the input device to bring the cursor332within a threshold proximity of the point336. The input data126describes coordinates of the point336and coordinates of the cursor332and the display module208computes a distance between the cursor332and the point336based on the coordinates. This computed distance is compared to a threshold distance to determine whether the user has interacted with the input device to bring the cursor332within the threshold proximity of the point336. Responsive to receiving input data126describing the interaction with the point336, the display module206renders the indications338,340of the control points of the point336. In this example, as the user interacts with the input device to bring the cursor332within the threshold proximity of the point336, the display module208snaps to the point336and renders the indications338,340of the control points of the point336. The indications338,340of the control points are usable to modify a curvature of a portion of the vector object334.

As shown inFIG. 3D, the display module208receives the vector object data114, the candidate data214, and the input data126and processes the object data114, the candidate data214, and/or the input data126to render representation342. The representation342includes a vector object344defined by a set of points and the user interacts with the input device to manipulate a cursor346in a user interface. For example, the user interacts with the input device and generates input data126describing a request for candidate mirror snap points for the vector object344. The display module208receives the input data126and processes the input data126to render representation348.

The representation348includes an axis of symmetry350and indications of candidate snap points. In an example, the symmetry module110generates convex polygons that enclose the set of points of the vector object344. The symmetry module110determines a particular convex polygon that encloses the set of points and has a smallest area. In this example, the particular convex polygon is a convex hull of the set of points of the vector object344. The symmetry module determines the axis of symmetry350as a side of the particular convex polygon.

For example, the display module208renders the indications of the candidate snap points based on the candidate data214. The user interacts with the input device to generate input data126describing a non-symmetric addition to the vector object344. In an example, the input data126describes a manipulation of an indication of a candidate snap point as part of an asymmetric portion added to or removed from the vector object344. The display module208renders representation352as the user interacts with the input device to manipulate the cursor346to add the non-symmetric addition and the display module208renders representation354which includes a portion of the non-symmetric addition. For example, the representation354depicts the vector object344which is asymmetric about the axis of symmetry350after the non-symmetric addition.

With respect toFIG. 3E, the user interacts with the input device and manipulates the cursor346to complete the non-symmetric addition to the vector object344as shown in representation356. The vector object344resembles a leaf and the non-symmetric addition is an asymmetric tip of the leaf. After completing the non-symmetric addition to the vector object344, the user further interacts with the input device to generate input data126describing a manipulation of the cursor346in the user interface. For example, the display module208receives input data126describing an interaction with an indication of a candidate snap point which is located just below the non-symmetric addition. The display module208renders representation358in response to receiving and processing the input data126. As illustrated, the user has added a symmetric portion to the vector object344.

The user then interacts with the input device and causes the cursor346to interact with an additional indication of a candidate snap point which is located near a stem of the leaf depicted as the vector object344. In this example, the user does not interact with indications of candidate snap points disposed between the additional indication and the indication which is located just below the non-symmetric addition. This generates input data126and the display module208receives the input data126and renders representation360before the cursor346interacts with the additional indication of the candidate snap point. The display module208renders representation362after the user interacts with the additional indication of the candidate snap point.

As illustrated in the representation362, the display module208renders an autocompleted symmetric portion for the vector object344which is now included as part of the vector object344. In an example, the display module208renders the autocompleted symmetric portion for the vector object automatically and without user interaction. For example, by not interacting with the indications of the candidate snap points disposed between the additional indication and the indication, the user generated input data126describing a request to autocomplete the symmetric portion defined by the candidate snap points between the additional indication and the indication. Although in this example there are multiple indications of candidate snap points disposed between the additional indication and the indication, not interacting with a single indication of a candidate snap point disposed between the additional indication and the indication generates input data126describing a request to autocomplete a symmetric portion defined by the single indication of the candidate snap point in other examples.

In general, functionality, features, and concepts described in relation to the examples above and below are employed in the context of the example procedures described in this section. Further, functionality, features, and concepts described in relation to different figures and examples in this document are interchangeable among one another and are not limited to implementation in the context of a particular figure or procedure. Moreover, blocks associated with different representative procedures and corresponding figures herein are applicable individually, together, and/or combined in different ways. Thus, individual functionality, features, and concepts described in relation to different example environments, devices, components, figures, and procedures herein are usable in any suitable combinations and are not limited to the particular combinations represented by the enumerated examples in this description.

Example Procedures

The following discussion describes techniques which are implementable utilizing the previously described systems and devices. Aspects of each of the procedures are implementable in hardware, firmware, software, or a combination thereof. The procedures are shown as a set of blocks that specify operations performed by one or more devices and are not necessarily limited to the orders shown for performing the operations by the respective blocks. In portions of the following discussion, reference is made toFIGS. 1-3.FIG. 4is a flow diagram depicting a procedure400in an example implementation in which vector object data describing a set of points of a vector object is received and an indication of a candidate snap point is generated based on an axis of symmetry determined for the vector object.

Vector object data describing a set of points of a vector object is received (block402). The computing device102implements the symmetry module110to receive the vector object data in one example. Rectangles are generated that enclose the set of points (block404). For example, the symmetry module110generates the rectangles that enclose the set of points. A particular rectangle of the rectangles that has a smallest area is identified (block406). In one example, the symmetry module110identifies the particular rectangle.

An axis of symmetry for the vector object is determined as a side of the particular rectangle (block408). For example, the computing device102implements the symmetry module110to determine the axis of symmetry for the vector object. An indication of a candidate snap point is generated for display in a user interface based on the axis of symmetry and a point of the set of points of the vector object (block410). In an example, the symmetry module110generates the indication of the candidate snap point.

FIG. 5illustrates a representation500of example asymmetrical objects generated using candidate mirror snap points. The representation500includes a first vector object502which resembles a capital “T” oriented at an angle and includes an artifact extending from its base. For example, the user interacts with the input device to modify the first vector object502using an axis of symmetry and indications of candidate snap points. This is illustrated as a first asymmetrical vector object504. For example, the first asymmetrical vector object504does not include a portion of the first vector object502on one side of the axis of symmetry but is otherwise symmetric.

The representation500also includes a second vector object506which is a continuous open series of line and curve segments. In one example, the user interacts with the input device to modify the second vector object506using an axis of symmetry and indications of candidate snap points. In this example, a second asymmetrical vector object508is produced. Unlike the previous example in which the first asymmetrical vector object504does not include a portion of the first vector object502on the one side of the axis of symmetry, the second asymmetrical vector object508includes an added portion on one side of the axis of symmetry. As shown, the second asymmetrical vector object508resembles a decorative bowl or vase and the added portion appears to be a tool for manipulating or stirring something disposed in the bowl or vase. The second asymmetrical vector object508is symmetric except for the added portion.

FIG. 6illustrates a representation600of digital content generated using candidate mirror snap points. The representation600includes an example of digital content602which is a sports academy association poster. A vector object604is modified using an axis of symmetry and indications of candidate snap points. For example, the user interacts with the input device to produce an asymmetric vector object606which is an outline of a person with one hand raised and the other hand extending outward from its waist. An additional vector object608is also modified using an axis of symmetry and indications of candidate snap points. In one example, the user interacts with the input device to produce an additional asymmetric vector object610which is an outline of a person flexing a biceps muscle of one arm and having the other arm near its torso. In the illustrated example, the user further interacts with the input device to produce a complete vector object612by adding a barbell to a hand of the arm near the torso of the additional asymmetric vector object610. As shown, the asymmetric vector object606and the complete vector object612are arranged around text to complete the digital content602.

Example System and Device

FIG. 7illustrates an example system700that includes an example computing device that is representative of one or more computing systems and/or devices that are usable to implement the various techniques described herein. This is illustrated through inclusion of the symmetry module110. The computing device702includes, for example, a server of a service provider, a device associated with a client (e.g., a client device), an on-chip system, and/or any other suitable computing device or computing system.

The example computing device702as illustrated includes a processing system704, one or more computer-readable media706, and one or more I/O interfaces708that are communicatively coupled, one to another. Although not shown, the computing device702further includes a system bus or other data and command transfer system that couples the various components, one to another. For example, a system bus includes any one or combination of different bus structures, such as a memory bus or memory controller, a peripheral bus, a universal serial bus, and/or a processor or local bus that utilizes any of a variety of bus architectures. A variety of other examples are also contemplated, such as control and data lines.

The processing system704is representative of functionality to perform one or more operations using hardware. Accordingly, the processing system704is illustrated as including hardware elements710that are configured as processors, functional blocks, and so forth. This includes example implementations in hardware as an application specific integrated circuit or other logic device formed using one or more semiconductors. The hardware elements710are not limited by the materials from which they are formed or the processing mechanisms employed therein. For example, processors are comprised of semiconductor(s) and/or transistors (e.g., electronic integrated circuits (ICs)). In such a context, processor-executable instructions are, for example, electronically-executable instructions.

The computer-readable media706is illustrated as including memory/storage712. The memory/storage712represents memory/storage capacity associated with one or more computer-readable media. In one example, the memory/storage712includes volatile media (such as random access memory (RAM)) and/or nonvolatile media (such as read only memory (ROM), Flash memory, optical disks, magnetic disks, and so forth). In another example, the memory/storage712includes fixed media (e.g., RAM, ROM, a fixed hard drive, and so on) as well as removable media (e.g., Flash memory, a removable hard drive, an optical disc, and so forth). The computer-readable media706is configurable in a variety of other ways as further described below.

Implementations of the described modules and techniques are storable on or transmitted across some form of computer-readable media. For example, the computer-readable media includes a variety of media that is accessible to the computing device702. By way of example, and not limitation, computer-readable media includes “computer-readable storage media” and “computer-readable signal media.”

Combinations of the foregoing are also employable to implement various techniques described herein. Accordingly, software, hardware, or executable modules are implementable as one or more instructions and/or logic embodied on some form of computer-readable storage media and/or by one or more hardware elements710. For example, the computing device702is configured to implement particular instructions and/or functions corresponding to the software and/or hardware modules. Accordingly, implementation of a module that is executable by the computing device702as software is achieved at least partially in hardware, e.g., through use of computer-readable storage media and/or hardware elements710of the processing system704. The instructions and/or functions are executable/operable by one or more articles of manufacture (for example, one or more computing devices702and/or processing systems704) to implement techniques, modules, and examples described herein.

The techniques described herein are supportable by various configurations of the computing device702and are not limited to the specific examples of the techniques described herein. This functionality is also implementable entirely or partially through use of a distributed system, such as over a “cloud”714as described below.

The cloud714includes and/or is representative of a platform716for resources718. The platform716abstracts underlying functionality of hardware (e.g., servers) and software resources of the cloud714. For example, the resources718include applications and/or data that are utilized while computer processing is executed on servers that are remote from the computing device702. In some examples, the resources718also include services provided over the Internet and/or through a subscriber network, such as a cellular or Wi-Fi network.

The platform716abstracts the resources718and functions to connect the computing device702with other computing devices. In some examples, the platform716also serves to abstract scaling of resources to provide a corresponding level of scale to encountered demand for the resources that are implemented via the platform. Accordingly, in an interconnected device embodiment, implementation of functionality described herein is distributable throughout the system700. For example, the functionality is implementable in part on the computing device702as well as via the platform716that abstracts the functionality of the cloud714.

CONCLUSION

Although implementations of systems for generating candidate mirror snap points using determined axes of symmetry have been described in language specific to structural features and/or methods, it is to be understood that the appended claims are not necessarily limited to the specific features or methods described. Rather, the specific features and methods are disclosed as example implementations of systems for generating mirror snap points using determined axes of symmetry, and other equivalent features and methods are intended to be within the scope of the appended claims. Further, various different examples are described and it is to be appreciated that each described example is implementable independently or in connection with one or more other described examples.