In general, computer-based drawing applications enable a user to generate structures, graphics or illustrations as static objects which then are output to a display. In some cases, those structures, graphics or illustrations can be animated by generating copies of the original objects, applying geometric transformations (such as translating, rotating and scaling, among others) to the copied objects, and displaying the transformed objects sequentially in time.
This specification describes technologies relating to hierarchical representations of time. In general, one aspect of the subject matter described in this specification can be embodied in a method performed by a data processing apparatus, in which the method includes selecting an object in which the object represents an input defining a drawing that includes location coordinates and temporal coordinates, in which each location coordinate is associated with a respective temporal coordinate; associating the object with a respective clock in a hierarchy of clocks, each clock in the hierarchy having a respective rate of progression that is coupled to rate of progression of one or more parent clocks in the hierarchy; and generating an animation by drawing the location coordinates according to the rate of progression of the clock associated with the object. Other embodiments of this aspect include corresponding computing platforms and computer program products.
These and other embodiments can optionally include one or more of the following features. In some embodiments, the parent clocks include a global clock and the rate of each clock in the hierarchy is determined relative to the rate of the global clock. In certain embodiments, the rate of each clock is a function of the rate of each parent clock in the hierarchy.
In some embodiments, the method can include selecting a second object in which the second object represents input defining a second drawing, the second drawing including a second location coordinates and second temporal coordinates, in which each second location coordinate is associated with a respective second temporal coordinate; associating the second object with a second clock in the hierarchy of clocks, in which the second clock has a rate that is determined relative to the one or more parent clocks in the hierarchy; and generating an animation by drawing the second location coordinates according to the respective rate of the second clock. The method can further include selecting a third object, in which the third object comprises the first object and the second object; and associating the third object with a third clock in the hierarchy of clocks, in which the third clock has a rate that is determined relative to the one or more parent clocks in the hierarchy and in which the rate of the first clock and the rate of the second clock are each determined relative to the rate of the third clock.
Particular embodiments of the subject matter described in this specification can be implemented so as to realize one or more of the following advantages. For example, the application allows, in some cases, a user to associate a local clock with each animated object and/or group of animated objects. Modifying the rate of one or more of the clocks can change the rate at which each object and/or group of objects is animated without causing a discontinuity in the appearance of the object and/or group of objects. That is, each object has a local sense of how time advances that is independent of a change in the rate of the local clock time. Moreover, by associating a local clock with each object, it is possible to modify the rate of animation of each object within the drawing application and, at the same time, maintain the relative rate differences in which each object is animated.
The details of one or more embodiments of the subject matter described in this specification are set forth in the accompanying drawings and the description below. Other features, aspects, and advantages of the implementations will become apparent from the description, the drawings, and the claims.
In general, computer-generated animations are produced by applying the geometric transformations off-line, i.e., the intended client or audience does not observe the production of the animated feature. Nor does the act of producing of the animation typically correspond to the finalized end product that will be viewed by an audience.
In some implementations, a user or artist may be interested in producing a visual performance in which the temporal aspects of the objects, such as frequency, periodicity or phase, are altered as the objects are created. In addition, the user or artist may be interested in synchronizing such animations with a particular tempo, rhythm, soundtrack or music as part of the visual performance.
As object 10 is output to drawing space 8, the drawing application captures the geometric coordinates of object 10 on drawing space 8 as well as temporal coordinates that correspond to the time at which the respective geometric coordinates are captured. The rate at which the temporal and geometric coordinates are captured can be synchronized with a particular tempo/rhythm established by user 2, extracted from a file, or extracted from another software application, such as a video player or audio player. In the present implementation, the captured geometric and temporal coordinates of object 10 are stored in computer-readable memory as a dataset.
The user then can direct the drawing application to apply various transformations, such as scaling, translating and rotating, to the geometric and/or temporal coordinates of the stored dataset. Alternatively, the application can apply the transformations automatically. The transformed dataset then can be re-drawn, one or more times, by the drawing application as a new object 12. For example,
In the implementation of
As shown in the example of
Once the geometric and temporal coordinates of object 10 are captured, the application automatically re-draws an animated version of object 10 as new object 12 on drawing space 8 in time, as shown in
In the implementation shown in
During a first time period t0-t2, as shown in
In some implementations, the drawing application repeatedly renders object 10 as shown in
Referring to
The time-based drawing application 106 can be an image processing application or a portion thereof. As used herein, an application refers to a computer program that the user perceives as a distinct computer tool used for a defined purpose. An application can be built entirely into the OS of the data processing apparatus 104, or an application can have different components located in different locations (e.g., one portion in the OS and one portion in a remote server connected to the platform 100), and an application can be built on a runtime library serving as a software platform of the data processing apparatus 104. The time-based drawing application 106 can include image editing software, digital publishing software, video editing software, presentation and learning software, and graphical/text editing software (e.g., Adobe® Photoshop® software, Adobe® InDesign® software, Adobe® Captivate® software, Adobe® AfterEffects® software, Adobe® Premiere®, Adobe® Flash Pro® and Adobe® Illustrator® software, available from Adobe Systems Incorporated of San Jose, Calif.). The user input device(s) 102 can include, for example, keyboard(s) and a pointing device, such as a mouse, trackball, stylus, or any combination thereof. The display device(s) 114 can include a display monitor capable of producing color or gray scale pixels on a display screen. For example, the display device(s) can include a cathode ray tube (CRT) or liquid crystal display (LCD) monitor for displaying information to the user. The computer platform 100, the input device 102 and the display device 114 can together be included in a single system or device, such as a personal computer, a mobile telephone, a personal digital assistant (PDA), a mobile audio player, to name just a few.
As shown in
As object 10 is drawn, geometric coordinate module 107 receives (301) position coordinates (i.e., image location coordinates) from the input device 102 based on a position indicated by user input device 102. For each position coordinate, temporal coordinate module 108 determines (303) a respective time coordinate, representing the time at which the position coordinate is received. The application may also receive (305) an input which defines an animation period. The input may be entered from user input device 102 or extracted from a file by the drawing application. Coordinate transformation module 110 then applies (307) one or more transformations to the temporal coordinates to provide a transformed temporal coordinates respectively corresponding to the position coordinates. The type of transformation applied to the position and/or temporal coordinates of the first dataset can be determined by the user. Such transformations include, but are not limited to, for example, rotation, translation and scaling of coordinates as well as affine transformations such as skew or perspective transformations. Alternatively, or in addition, such transformations can be automatically applied by time-based drawing application 106. The position coordinates then are sent to the image generation module 112 which periodically generates, based on the received animation period, an animation by drawing the position coordinates according to the respective transformed temporal coordinates. When displaying lines, paths or other shapes that are displayed without a discontinuity, the time-based drawing application can interpolate portions of the object that are displayed between the position coordinates.
The style, color, and visibility of the image output to display device 114 depend on the object properties available within time-based drawing application 106 as selected by the user. For example, the user may direct time-based drawing application 106 to alter the color, size and/or visibility of all or part of the output image as it is animated on the display. The user may select the image display properties from a legend made visible on the display by the time-based application or through the use of commands entered from a keyboard.
The total number of position coordinates captured by the time-based drawing application depends on the final size of the object drawn by the user as well as the rate at which the drawing application captures each position coordinate. For example, in some implementations, a user may utilize input device 102, such as a mouse, to indicate the beginning of a curved path on a drawing space by holding down the left-click button of the mouse. While the left-click button is depressed, the time-based drawing application periodically records the position coordinate as indicated by the position of the mouse. Once the user releases the left-click button, the time-based drawing application ceases to record the position coordinates.
Employing user input device 102, the user can set the rate at which time-based drawing application 106 captures and assigns temporal coordinates to the position coordinates of the drawing. In some implementations, animations produced by time-based drawing application 106 can be rendered in a repeated (i.e., periodic) manner. For the purposes of this disclosure, the period of repetition will be referred to as a measure. Thus, employing user input device 102, the user also can set the length of a measure. For example, the user may enter the rate and/or length of a measure as a numeric value measured in micro-seconds, milliseconds, seconds or minutes. Other units of time-based measurement may be used as well. In some cases, time-based drawing application 106 may extract a rate/length of a measure from a rhythm established by the user. For example, a user may establish a tempo by tapping a key on a keyboard of input device 4 in a periodic manner. The rate at which the key is tapped establishes the tempo and is recorded by the time-based drawing application. In some cases, the tempo and/or length of a measure can be extracted from another software application. For example, the time-based drawing application can extract a tempo and/or length of a measure from an audio player, such as a musical instrument digital interface (MIDI) sequencer, that plays a selected audio file. Alternatively, or in addition, the time-based drawing application can extract a tempo and/or length of a measure from a video player in which periodic behavior or motion is recognized and captured in a video. In some implementations, the user identifies a source file from which time-based drawing application 106 extracts a tempo and/or length of a measure. For example, the user can select, through time-based drawing application 106, an electronic file, such as an audio file, from memory or from a computer-readable storage device. The audio file can include music or other sound organized in a periodic manner from which a tempo and/or length of a measure can be extracted. Such audio files can include, for example, WAV, AIFF, AU, WMA, MP3 and AAC files, among others.
The animations produced by time-based drawing application 106 also can be rendered in a repeated (i.e., periodic) manner. For the purposes of this disclosure, the period of repetition will be referred to as a measure. The measure can be specified by the user. For example, the user can enter the period as a numeric value measured in micro-seconds, milliseconds, seconds or minutes. Other units of time-based measurement may be used as well. In some cases, the period can be extracted by the time-based drawing application 106 from a separate file or another software application. For example, in some cases, the application 106 defines a measure by analyzing an associated audio file to determine the length of the measure at a specified tempo.
Drawing space 8, on which objects are formed, can be a blank image space produced on display 9 by time-based drawing application 106. A user can select various drawing tools, such as a line tool, brush tool, or shape tool, among others to draw objects in drawing space 8. In some implementations, drawing space 8 does not display any persistent tools, such as a pointer or cursor, or palettes from which a user may select, given that such images can detract from a viewer's attention from artwork or other objects being produced in the application. Instead, a user can change drawing tools using keyboard commands. In some implementations, a pointer icon remains visible to a user on the drawing space and can indicate which tool is in current use. For example, the icon can include images representative of tools such as a line drawing tool, a brush drawing tool, a shape drawing tool, among others. The pointer icon can also exhibit a color that is representative of the color to be used by the drawing tool. The pointer icon could exhibit a periodic motion or effects, such as rotating, throbbing, swinging similar to a pendulum, to indicate the current tempo associated with the animation or the period in which an object will be replicated. Other drawing effects also can be represented by the pointer icon appearance. In some cases, the pointer icon presages the type of object to be displayed. For example, the pointer icon may be in the form of a circle, triangle or square indicative of the object shape to be drawn. In some implementations, the icon can be representative of the one or more symmetry operations that will be applied to an animation. For example, if the transformation will produce multiple copies of an object, all of which are animated so that they rotate around a single point (i.e., radial symmetry), the icon can represent the radial symmetry transformation by displaying a specified number of line segments equally arranged about and radiating from a single point. The total number of line segments displayed could be representative of the number of objects rotating around the single point. Other icon shapes may be used as well.
As explained above, images can be re-drawn in which transformations are applied to the temporal coordinates and/or geometric coordinates of the original image. In some implementations the transformation includes rotating the coordinates.
As shown in
A user can direct the application to re-draw a version of stroke 40 in reverse from the final position coordinate p6 to the first position coordinate p0. That is, the drawing application transforms the temporal coordinates of the first dataset so they are reversed with respect to the geometric coordinates. The transformed temporal coordinates and geometric coordinates are stored in a second dataset. Beginning in the next measure, the second dataset is displayed over time as stroke 42, as shown in
During a first part of the measure (e.g., t0-t2), as shown in
In the present implementation, a counter-clockwise rotation is applied to the geometric and temporal coordinates with respect to the vertical axis y located to the left of objects 50, 52. For example, to rotate objects 50, 52 counter-clockwise with respect to axis y, the x and t coordinates of objects 50, 52 can be matrix multiplied using the following rotation matrix:
R=[cos (θ)−sin (θ)|sin (θ) cos (θ)]
where θ is the angle of rotation. Thus, transformed objects will be located respectively at new positions x1′ and x2′ and have new time coordinates t1′ and t2′ where [x1′, t1′]=R*[x1,t1] and [x2′,t2′]=R*[x2,t2]. That is, the position and temporal coordinates of objects 52, 54 are given by:
x
1
′=x
1*cos (θ)−t1 sin (θ)
t
1
′=x
1*sin (θ)+t1 cos (θ)
x
2
′=x
2*cos (θ)−t2 sin (θ)
t
2
′=x
2*sin (θ)+t2 cos (θ)
As a result, the transformation rotates objects 50, 52 along an imaginary plane that extends into the page and affects the horizontal spacing of objects 50, 52 but not their respective heights. Furthermore, the rotation will add an offset to the time at which the objects are rendered. For example, as shown in
In some implementations, the rotation can be clockwise, instead of counter-clockwise. In some cases, the rotation transformation also is applied to the y-coordinates.
In some implementations, the temporal and/or geometric coordinates of an object can be scaled to be greater than or less than their original value. For example,
In some implementations, scaling increases the value of the temporal coordinates, such that position coordinates of the object take longer to be rendered to the drawing space. For example,
In some implementations, the transformation applied to geometric and/or temporal coordinates can be a translation. For example,
If the translation amount Δt corresponds to a positive shift of the temporal coordinates, the initial position coordinate of stroke 82, p0, will begin to appear later in the second measure corresponding to the shift amount, as shown in
If the translation amount Δt corresponds to a negative shift of the temporal coordinates, stroke 82 will appear earlier in the second measure corresponding to the shift amount, as shown in
Although the foregoing transformations are described in relation to temporal coordinates, similar transformations can be applied concurrently to the geometric coordinates of each object. In addition, two or more of the foregoing transformations can applied in combination to achieve additional effects. For example, in some implementations, temporal and/or position coordinates of an object may be rotated and translated. Alternatively, or in addition, temporal and/or position coordinates of an object may be rotated and scaled. Alternatively, or in addition, temporal and/or position coordinates of an object may be translated or scaled. The transformations need not be affine transformations. Instead, any generalized transformation can be applied. For example, the transformation may entail translating every third coordinate in an array of temporal or geometric coordinate by a fixed amount. Additional combinations of coordinate transformations also are possible. Thus, using the foregoing transformations, it is possible for a user to alter the temporal aspects of a drawing or object as desired.
Such transformations also allow a user, in some cases, to adjust the time evolution of a drawing so that it synchronizes with an associated musical soundtrack. For example, the phase of one or more objects can be adjusted to synchronize the initial position of those objects with a semantically meaningful moment in the associated soundtrack, such as the downbeat of a measure. In some cases, a user can modify or refine the evolution of drawings or objects by changing their specific rate, position or appearance relative to the evolution of other objects being displayed within the application. A user can add additional objects to build up a collection of objects that are displayed and evolve in time in the application.
Hierarchical Representation of Time
In some implementations, the drawing application utilizes a global clock for displaying animations in the drawing space. The global clock corresponds to a master clock against which one or more animations proceed and is distinct from the time coordinates associated with each animated object. The global clock determines how the time coordinates of each object are interpreted. As a result, a change in the rate of the global clock changes simultaneously the rate of change of the appearance of every animating object within the drawing application.
In some cases, the rate established by the global clock also corresponds to the rate at which the application captures position coordinates of an object that is drawn by a user. As explained above in reference to
In addition, however, each object and/or group of objects rendered by the time-based drawing application also can be associated with a local clock that provides a local representation of time tl. Local clock tl determines a temporal state of the object and/or a group of objects in relation to the global clock tg. That is, the rate of local clock tl is coupled to the rate of global clock tg. Local clock tl does not, however, correspond to a mere multiplication of the global time coordinates by a scaling factor. Instead, local clock tl is determined by modifying its instantaneous rate of change relative to global clock tg. By associating a local clock with each object and/or group of objects, the rate at which each object and/or group of objects is animated, or is evolving, can be changed without causing a discontinuity in the appearance of the object and/or group of objects. That is, each object has a local sense of current time that advances incrementally according to the rate of the local clock. Moreover, by associating a local clock with each object, it is possible to modify the rate of animation of each object within the drawing application and, at the same time, maintain the relative rate differences in which each object is animated.
t
A0
=t
g0
; t
A1
=t
g0
+r
A
*Δt; t
A2
=t
A1
+r
A
*Δt; . . . t
A5
=t
A4
+r
A
*Δt,
in which rA represents how fast the local clock tA proceeds relative to the global clock tg and Δt represents the time difference between each temporal coordinate as determined by the global clock. For example, if local clock tA advances at a rate equal to global clock tg, then rA=1 and the time coordinates of the local clock can be given as: tA0=tg0; tA1=tg0+Δt=tg1; tA2=tg1+Δt=tg2; . . . tA5=tg4+Δt=tg5. Accordingly, there is no change in the rate at which object A is rendered in drawing space 8. In some implementations, multiple instances of object A are rendered in drawing space 8, in which the rendering of each instance begins at the start of a new measure. For example, the time-based drawing application may render another copy of object A at the start of measure M2. Given that the rate of progression of local clock tA is equal to the global clock tg, each instance will take a full measure to be completely rendered. Table 1 represents the values (in seconds) of the global clock tg and local clock tA, corresponding to the respective position coordinates of object A, in which the local clock tA proceeds at a rate equal to the global clock tg, i.e., rA=1, and a time difference Δt=1.
In contrast, by employing a local clock having a rate that is different from the global clock, it is possible, in some implementations, to change the rate at which an object is rendered in the drawing space 8 without inducing a discontinuity in the animation.
t
B0
=t
offset
; t
B1
=t
B0+(2)*Δt; tB2=tB1+(2)*Δt; . . . tB5=tB4+(2)*Δt,
in which toffset is equal to tg5, i.e., the end of measure M1 according to the global clock tg. Accordingly, object B is rendered in half the time that it takes to render object A, i.e., half a measure. In some implementations, multiple instances of object B are periodically rendered in drawing space 8. Given that the rate of progression of local clock tB is twice the rate of the global clock tg, however, rendering of the next successive instance of object B would begin halfway through the first measure. A third instance would begin to be rendered at the start of the second measure M2 whereas a fourth instance would begin to be rendered midway through the second measure M2 and so forth. Table 2 represents the values of the global clock tg and local clock tB, corresponding to the respective position coordinates of object B, in which the local clock tB proceeds at a rate that is twice that of the global clock tg, i.e., rB=2.
In some implementations, the rate of progression of the local clock relative to the global clock can be decreased. In those cases, rendering of the object occurs over longer periods of time. For example, the rate of progression of local clock tB, for an object B taking twice as long to render as object A, is rB=1/2. In this case, rendering of object B may occur over 2 or more measures. As before, multiple instances of object B can be periodically rendered in drawing space 8. Given that the rate of progression of local clock tB is half the rate of the global clock tg in the present implementation, however, rendering of the next successive instance of object B would begin at the start of the third measure M3. A third instance would begin to be rendered at the start of the fifth measure M5 and so forth.
In some implementations, objects can be nested within other objects. For example, one or more objects (i.e., children objects) can be nested within a parent object, in which each child object has its own local clock that advances at a rate relative to a local clock associated with the parent object. In some cases, the parent object, itself, can be nested as a child object within a second parent object, in which the local clock associated with the child object advances at a rate relative to a local clock associated with the second parent object. Accordingly, each object can be represented as part of a hierarchy of objects and each clock can be represented as part of a hierarchy of clocks, in which the rate at which each clock proceeds is coupled to the rate of a respective parent clock. Ultimately, each local clock in the hierarchy advances at a rate that is relative to its parent, and hence, relative to the global clock of the time-based drawing application. The number of objects, and thus clocks, that can be nested within a hierarchy is limited only by the memory components of the computer system on which the time-based drawing application runs.
In some implementations, two or more objects can be incorporated into a group such that the group of objects is associated with its own local group clock. In addition, the local clocks associated with each object within the group continue to advance relative to the group clock. Furthermore, the group may be combined with one or more different objects or groups into an even larger second group that also is associated with a respective local group clock.
The rate at which each clock advances, for a single object or for a group of objects, is relative to the progression of time set by its parent, and hence, the global clock. Accordingly, in the case that objects are nested (e.g., an object A is the child of parent object B which, in turn, is the child of parent object C), the effective rate at which a local clock progresses for a particular object or group, in terms of the global clock, is determined by aggregating the rates of each clock in the lineage. For example, the effective rate associated with object A above is reff=rA*rB*rC. On the other hand, the effective rate for object B is reff=rB*rC. Thus, the notion of time in the drawing application is hierarchical.
Both objects A and B are grouped such that they can be translated, scaled and/or rotated across the drawing space 8 as a single object C. Object C is associated with its own local clock tC. The local clock for object C advances at a rate rC relative to the global clock tg. Each of the objects A and B within object C remains associated with their respective local clocks tA and tB which proceed according to the respective rates rA and rB. Thus, the effective rate at which object A is animated, in terms of the global clock, is given by reff=rA*rC. Similarly, the effective rate at which object B is animated, in terms of the global clock, is given by reff=rB*rC. If for example, the rate rC is equal to one, then the rotation of objects A and B is unaffected, i.e., they continue to rotate at their same respective rates.
However, if the rate associated with the local clock tC is modified, then the animation of objects A and B can be adjusted. For example, if a user employs a user input device to double the rate rC of local clock tC, then the effective rate of the local clocks for objects A and B also will double. However, the relative rates at which local clocks tA and tB advance will remain the same. That is, even though the rotation of objects A and B increases due to the change in the rate of local clock tC, object A will still appear to rotate twice as fast as object B.
Embodiments of the subject matter and the operations described in this specification can be implemented in digital electronic circuitry, or in computer software, firmware, or hardware, including the structures disclosed in this specification and their structural equivalents, or in combinations of one or more of them. Embodiments of the subject matter described in this specification can be implemented as one or more computer programs, i.e., one or more modules of computer program instructions, encoded on a computer storage medium for execution by, or to control the operation of, data processing apparatus. The computer storage medium can be, or be included in, a computer-readable storage device, a computer-readable storage substrate, a random or serial access memory array or device, or a combination of one or more of them. The computer storage medium can also be, or be included in, one or more separate physical components or media (e.g., multiple CDs, disks, or other storage devices).
The operations described in this specification can be implemented as operations performed by a data processing apparatus on data stored on one or more computer-readable storage devices or received from other sources.
The term “data processing apparatus” encompasses all kinds of apparatus, devices, and machines for processing data, including by way of example a programmable processor, a computer, a system on a chip, or multiple ones, or combinations, of the foregoing The apparatus can include special purpose logic circuitry, e.g., an FPGA (field programmable gate array) or an ASIC (application-specific integrated circuit). The apparatus can also include, in addition to hardware, code that creates an execution environment for the computer program in question, e.g., code that constitutes processor firmware, a protocol stack, a database management system, an operating system, a cross-platform runtime environment, a virtual machine, or a combination of one or more of them. The apparatus and execution environment can realize various different computing model infrastructures, such as web services, distributed computing and grid computing infrastructures.
A computer program (also known as a program, software, software application, script, or code) can be written in any form of programming language, including compiled or interpreted languages, declarative or procedural languages, and it can be deployed in any form, including as a stand-alone program or as a module, component, subroutine, object, or other unit suitable for use in a computing environment. A computer program may, but need not, correspond to a file in a file system. A program can be stored in a portion of a file that holds other programs or data (e.g., one or more scripts stored in a markup language document), in a single file dedicated to the program in question, or in multiple coordinated files (e.g., files that store one or more modules, sub-programs, or portions of code). A computer program can be deployed to be executed on one computer or on multiple computers that are located at one site or distributed across multiple sites and interconnected by a communication network.
The processes and logic flows described in this specification can be performed by one or more programmable processors executing one or more computer programs to perform functions by operating on input data and generating output. The processes and logic flows can also be performed by, and apparatus can also be implemented as, special purpose logic circuitry, e.g., an FPGA (field programmable gate array) or an ASIC (application-specific integrated circuit).
Processors suitable for the execution of a computer program include, by way of example, both general and special purpose microprocessors, and any one or more processors of any kind of digital computer. Generally, a processor will receive instructions and data from a read-only memory or a random access memory or both. The essential elements of a computer are a processor for performing actions in accordance with instructions and one or more memory devices for storing instructions and data. Generally, a computer will also include, or be operatively coupled to receive data from or transfer data to, or both, one or more mass storage devices for storing data, e.g., magnetic, magneto-optical disks, or optical disks. However, a computer need not have such devices. Moreover, a computer can be embedded in another device, e.g., a mobile telephone, a personal digital assistant (PDA), a mobile audio or video player, a game console, a Global Positioning System (GPS) receiver, or a portable storage device (e.g., a universal serial bus (USB) flash drive), to name just a few. Devices suitable for storing computer program instructions and data include all forms of non-volatile memory, media and memory devices, including by way of example semiconductor memory devices, e.g., EPROM, EEPROM, and flash memory devices; magnetic disks, e.g., internal hard disks or removable disks; magneto-optical disks; and CD-ROM and DVD-ROM disks. The processor and the memory can be supplemented by, or incorporated in, special purpose logic circuitry.
To provide for interaction with a user, embodiments of the subject matter described in this specification can be implemented on a computer having a display device, e.g., a CRT (cathode ray tube) or LCD (liquid crystal display) monitor, for displaying information to the user and a keyboard and a pointing device, e.g., a mouse or a trackball, by which the user can provide input to the computer. Other kinds of devices can be used to provide for interaction with a user as well; for example, feedback provided to the user can be any form of sensory feedback, e.g., visual feedback, auditory feedback, or tactile feedback; and input from the user can be received in any form, including acoustic, speech, or tactile input. In addition, a computer can interact with a user by sending documents to and receiving documents from a device that is used by the user; for example, by sending web pages to a web browser on a user's client device in response to requests received from the web browser.
Embodiments of the subject matter described in this specification can be implemented in a computing system that includes a back-end component, e.g., as a data server, or that includes a middleware component, e.g., an application server, or that includes a front-end component, e.g., a client computer having a graphical user interface or a Web browser through which a user can interact with an implementation of the subject matter described in this specification, or any combination of one or more such back-end, middleware, or front-end components. The components of the system can be interconnected by any form or medium of digital data communication, e.g., a communication network. Examples of communication networks include a local area network (“LAN”) and a wide area network (“WAN”), an inter-network (e.g., the Internet), and peer-to-peer networks (e.g., ad hoc peer-to-peer networks).
The computing system can include clients and servers. A client and server are generally remote from each other and typically interact through a communication network. The relationship of client and server arises by virtue of computer programs running on the respective computers and having a client-server relationship to each other. In some embodiments, a server transmits data (e.g., an HTML page) to a client device (e.g., for purposes of displaying data to and receiving user input from a user interacting with the client device). Data generated at the client device (e.g., a result of the user interaction) can be received from the client device at the server.
While this specification contains many specific implementation details, these should not be construed as limitations on the scope of what may be claimed, but rather as descriptions of features specific to particular embodiments. Certain features that are described in this specification in the context of separate embodiments can also be implemented in combination in a single embodiment. Conversely, various features that are described in the context of a single embodiment can also be implemented in multiple embodiments separately or in any suitable subcombination. Moreover, although features may be described above as acting in certain combinations and even initially claimed as such, one or more features from a claimed combination can in some cases be excised from the combination, and the claimed combination may be directed to a subcombination or variation of a subcombination.
Similarly, while operations are depicted in the drawings in a particular order, this should not be understood as requiring that such operations be performed in the particular order shown or in sequential order, or that all illustrated operations be performed, to achieve desirable results. In certain circumstances, multitasking and parallel processing may be advantageous. Moreover, the separation of various system components in the embodiments described above should not be understood as requiring such separation in all embodiments, and it should be understood that the described program components and systems can generally be integrated together in a single software product or packaged into multiple software products.
Thus, particular embodiments have been described. Other embodiments are within the scope of the following claims. For example, multiple users could interact with the application at the same time. In some cases, multiple users could collaborate to modify animations and transform time-based drawings in a shared drawing space. Each user could employ a separate input device represented in the drawing space with a particular pointer icon. Alternatively, in some cases, multiple users may interact with the drawing application in separate drawing spaces that are simultaneously visible on a display. The users could interact with the drawing application in the same location or interact remotely with the drawing application over a network from separate areas. If each user is located in a different area, the animations generated by each user can be synchronized in the drawing spaced according to a single global clock or separate global clocks corresponding to each user. In some cases, the actions recited in the claims can be performed in a different order and still achieve desirable results. In addition, the processes depicted in the accompanying figures do not necessarily require the particular order shown, or sequential order, to achieve desirable results. In certain implementations, multitasking and parallel processing may be advantageous.