Difference between revisions of "Tiling tool"
(→Implementation: Some edits) |
|||
Line 105: | Line 105: | ||
=== 0. Very desirable: Guide management === | === 0. Very desirable: Guide management === | ||
See blueprint. Rather, what is needed here is not a full guide management system, but rather how to "define" a guide, as the guides here have properties very different from "normal" objects. | See [https://blueprints.launchpad.net/inkscape/+spec/guides-improvement Existing blueprint]. Rather, what is needed here is not a full guide management system, but rather how to "define" a guide, as the guides here have properties very different from "normal" objects. | ||
=== Core features === | === I. Core features === | ||
'''1. The glorified clone and distribute tool ''' | '''1. The glorified clone and distribute tool ''' | ||
Line 114: | Line 114: | ||
<br clear="all"/> | <br clear="all"/> | ||
This step is a mere front-end to the current interface. This is the minimum interface that would allow users to make basic tiling without opening the current tiling dialogue. Sequence: | |||
* | * Clicking the + button "adds" a tile guide of the chosen type. However, you can render without adding a guide first (Inkscape will then use the object's own bounds) | ||
* | * Choose the pattern to tile and the guide and click "create." | ||
What needs to be done: | What needs to be done: | ||
# The programer should | # The programer should program guides for all 17 wallpaper groups. Actually, they're mostly just rectangles and triangles. Since guides don't do much at this point, users can drop a P1 guide and use it for say... P2 without too much problem (since they're both just rectangles). | ||
# The tiling interface is forced to take bound coordinates from | # The tiling interface is forced to take bound coordinates from these guides | ||
# | # The render buttons and the Rows, Columns fields (or the Width, Height field) must be moved from the dialogue to the toolbar. This is to guarantee a minimum interface that doesn't require opening the full dialogue (which will then just be used for dynamics). The other option may have to be removed then, or also stuffed in the toolbar. | ||
# The "remove" button could be removed. Instead, the "create" button stays pushed in when the rendering is done. By choosing the output with the tiling tool again, you can just click again to uncreate. | |||
If guide management isn't available yet, the interface could drop a normal object of the right shape. By default, Inkscape will then use the top object's bounds to render the tile. | |||
If guide management isn't available yet, the interface could drop a normal object of the right shape. By default, Inkscape will then use the top object's bounds to render the tile. Proper guides will be nice though, they'll be needed for the other features. | |||
Why it's an improvement over the past interface: | Why it's an improvement over the past interface: | ||
Line 129: | Line 130: | ||
* And they run away as soon as they do find it. I know I did. | * And they run away as soon as they do find it. I know I did. | ||
* Make a rectangle. Apply a P3 transformation. Any idea what happened? Me neither. At least with tiles, users will know what the heck is being transformed, so they can actually create proper patterns. | * Make a rectangle. Apply a P3 transformation. Any idea what happened? Me neither. At least with tiles, users will know what the heck is being transformed, so they can actually create proper patterns. | ||
* Also, users don't need to resort to the trick of grouping the pattern they want with a rectangle first, and deleting that rectangle afterwards. | * Also, users don't need to resort to the trick of grouping the pattern they want with a rectangle first, and deleting that rectangle afterwards (which I only found out myself recently). | ||
''' 2. The render frame - static ''' | ''' 2. The render frame - static ''' | ||
What needs to be done: | What needs to be done: | ||
# The user needs to be able to implement a grid object ("render frame") for all 17 wallpaper groups (again, many wallpaper groups use the same types of render frames) | # The user needs to be able to implement a grid object ("render frame") for all 17 wallpaper groups (again, many wallpaper groups use the same types of render frames). One tile in this render frame will be indicated as the base tile. | ||
# It should be possible to add | # It should be possible to add and remove frames to this frame (see render frame description). | ||
Once I.1. and I.2. are implemented, we'll have a decent tiling tool. I propose also re-arranging the dialogue to make it easier to use: | Once I.1. and I.2. are implemented, we'll have a decent tiling tool. I propose also re-arranging the dialogue to make it easier to use: | ||
* Presets for dynamics | * Presets for dynamics | ||
* Dynamics get listed vertically, with checkboxes, so Inkscape can have default usable values that users can access by just checking the box. | * Dynamics get listed vertically, with checkboxes, so Inkscape can have default usable values that users can access by just checking the box. | ||
=== More advanced wallpaper tiling features === | [[File:Tiling Tool Temp Dynamics panel.png|Temp UI rework for the Dynamics panel of the tiling tool]] | ||
<br clear="all"/> | |||
=== II. More advanced wallpaper tiling features === | |||
These can now be implemented separately. | These can now be implemented separately. | ||
''' 1. | ''' 1. Tiling handles ''' | ||
Handles are added to the base tiles, making it possible to switch from one tiling to another. | Handles are added to the base tiles, making it possible to switch from one tiling to another. | ||
Line 154: | Line 155: | ||
# Eventually controls for angles could be added too, though this is lower priority, as not many users absolutely need to change from one tile shape to another. | # Eventually controls for angles could be added too, though this is lower priority, as not many users absolutely need to change from one tile shape to another. | ||
# Before, tiles and tiling type are treated separately, since the same rectangle tile for example can be used for several different type of transformations. Now that the tiling can be visualized and edited on-canvas, the tiling type should now be linked directly to the guide tile, so the tiling type drop-down can be removed. | # Before, tiles and tiling type are treated separately, since the same rectangle tile for example can be used for several different type of transformations. Now that the tiling can be visualized and edited on-canvas, the tiling type should now be linked directly to the guide tile, so the tiling type drop-down can be removed. | ||
# Users are now offered to create a "Wallpaper" tile by default. Other transformation types are accessed via a pop-up when choosing "others." All previews are moved to this pop-up. | # Users are now offered to create a "Wallpaper" tile by default. Other transformation types are accessed via a pop-up when choosing "others." All previews are moved to this pop-up. | ||
''' 2. Fuse mode ''' | |||
''' | |||
As noted, this is a cut + fuse operation. The programmer needs to implement the following features: | As noted, this is a cut + fuse operation. The programmer needs to implement the following features: | ||
Line 174: | Line 173: | ||
''' 3. Guide points ''' | ''' 3. Guide points ''' | ||
The programmer must: | |||
# Define/create guide points. This object can be snapped to objects and guides. | # Define/create guide points. This object can be snapped to objects and guides. | ||
# Program it so that iterations of it appear and are rendered correctly in each tile of the render frame according to the chosen transformation mode. If the transformation type is changed, they must also update automatically. | # Program it so that iterations of it appear and are rendered correctly in each tile of the render frame according to the chosen transformation mode. If the transformation type is changed, they must also update automatically. | ||
# Additional feature: Ctrl-drag to create a segment from the point: this helps make transformations in each tile more obvious, and helps for handle-snapping. | # Additional feature: Ctrl-drag to create a segment from the point: this helps make transformations in each tile more obvious, and helps for handle-snapping. | ||
=== Super fancy wallpaper features === | === III. Super fancy wallpaper features === | ||
''' On-canvas dynamics editing ''' | ''' On-canvas dynamics editing ''' | ||
This may require | This may require use the existing dynamics mechanism, and instead serve as a front-end for inputing values. | ||
* Two tiles are chosen as reference frames, for row and column respectively. | * Two tiles or some other handles are chosen as reference frames, for row and column respectively. | ||
* Deformations are propagated live along the other types. | * Deformations are propagated live along the other types. | ||
* Colors can be added to the reference tile for HSL interpolation. | * Colors can be added to the reference tile for HSL interpolation. | ||
Line 192: | Line 191: | ||
# The old dynamics dialogue can probably be replaced with a leaner interface restricted to row for one, and columns for the other. The core mechanism is still more or less the same. | # The old dynamics dialogue can probably be replaced with a leaner interface restricted to row for one, and columns for the other. The core mechanism is still more or less the same. | ||
Under discussion: Visual representation of the mechanism? | |||
''' 2. Interpolation gradients? ''' | ''' 2. Interpolation gradients? ''' | ||
This takes the previous a step further. You can now add multiple stops. The current internal mechanisms | This takes the previous a step further. You can now add multiple stops. The current internal mechanisms may have to be reworked. | ||
=== IV. Other tiling types === | |||
Two other desirable tilings are Radial and Line tiling. Implementation can probably start once the features in I. Core features are implemented. | |||
''' 1. Radial tiling ''' | |||
To-do. | |||
''' 2. Line tiling ''' | |||
To-do. | |||
[[Category:Proposals]] | [[Category:Proposals]] |
Revision as of 13:04, 31 March 2012
Tiling tool
The current tiling interface is hard to use. The current interface attempts to make the process more user friendly through the use of a tool that creates a "render frame", which consists of two parts:
- A base tile, where the pattern is supposed to be
- A more general render frame, showing the location of the output
- Both can be edited on-canvas
The tiling process is simply:
- Create a frame
- Select a pattern and a frame
- Click "Render" from the tiling tool
- By default the frame becomes invisible after a render, and becomes "implied" in the generated output (a bit like clipping?).
- Undoing the render makes the frame appear again.
- The user can choose to drop a copy of the frame after a render for re-use however, or make a copy before applying.
Type | Description |
---|---|
Wallpaper tiling | Allows users to use the 17 wallpaper types. |
Radial tiling |
|
Path tiling |
|
Render modes
There are two modes:
- Create clones: This is the current rendering mode
- Fuse: This mode first cuts excess for "inner" sides, then performs a "fuse" operation on the whole output.
Render frame
The render frame is made up of:
- A central tile, which defines the location of the pattern to copy
- A more general render grid
On-canvas transformation handles
Guide points
Guide points are there to serve as reference point when creating tile designs.
- When you add a guide point, "counterparts" are generated in all the other tiles
- Ctrl-drag to drag out a segment.
- The idea is that users can snap guide points along tile edges, snap a node of the pattern to that guide and snap the node handle to the end of the guide segment, then repeat with the guide point's counterparts. This should help easily create seamless transitions.
On-canvas dynamics editing
(in progress)
Radial tiling
(to-do)
Line tiling
(to-do)
Tile stacking
You can stack different tilings!
Inkscape will likely have an Effects stacking mechanism in the future. Whatever it is, tiling would also fit right into it.
Line patterns
And why not "line patterns" while we're at it?
Implementation
Proposed implementation steps:
0. Very desirable: Guide management
See Existing blueprint. Rather, what is needed here is not a full guide management system, but rather how to "define" a guide, as the guides here have properties very different from "normal" objects.
I. Core features
1. The glorified clone and distribute tool
This step is a mere front-end to the current interface. This is the minimum interface that would allow users to make basic tiling without opening the current tiling dialogue. Sequence:
- Clicking the + button "adds" a tile guide of the chosen type. However, you can render without adding a guide first (Inkscape will then use the object's own bounds)
- Choose the pattern to tile and the guide and click "create."
What needs to be done:
- The programer should program guides for all 17 wallpaper groups. Actually, they're mostly just rectangles and triangles. Since guides don't do much at this point, users can drop a P1 guide and use it for say... P2 without too much problem (since they're both just rectangles).
- The tiling interface is forced to take bound coordinates from these guides
- The render buttons and the Rows, Columns fields (or the Width, Height field) must be moved from the dialogue to the toolbar. This is to guarantee a minimum interface that doesn't require opening the full dialogue (which will then just be used for dynamics). The other option may have to be removed then, or also stuffed in the toolbar.
- The "remove" button could be removed. Instead, the "create" button stays pushed in when the rendering is done. By choosing the output with the tiling tool again, you can just click again to uncreate.
If guide management isn't available yet, the interface could drop a normal object of the right shape. By default, Inkscape will then use the top object's bounds to render the tile. Proper guides will be nice though, they'll be needed for the other features.
Why it's an improvement over the past interface:
- Better visibility. Many users likely don't know the tiling dialogue exists.
- And they run away as soon as they do find it. I know I did.
- Make a rectangle. Apply a P3 transformation. Any idea what happened? Me neither. At least with tiles, users will know what the heck is being transformed, so they can actually create proper patterns.
- Also, users don't need to resort to the trick of grouping the pattern they want with a rectangle first, and deleting that rectangle afterwards (which I only found out myself recently).
2. The render frame - static
What needs to be done:
- The user needs to be able to implement a grid object ("render frame") for all 17 wallpaper groups (again, many wallpaper groups use the same types of render frames). One tile in this render frame will be indicated as the base tile.
- It should be possible to add and remove frames to this frame (see render frame description).
Once I.1. and I.2. are implemented, we'll have a decent tiling tool. I propose also re-arranging the dialogue to make it easier to use:
- Presets for dynamics
- Dynamics get listed vertically, with checkboxes, so Inkscape can have default usable values that users can access by just checking the box.
II. More advanced wallpaper tiling features
These can now be implemented separately.
1. Tiling handles
Handles are added to the base tiles, making it possible to switch from one tiling to another.
- Changing symmetries should be the priority.
- Eventually controls for angles could be added too, though this is lower priority, as not many users absolutely need to change from one tile shape to another.
- Before, tiles and tiling type are treated separately, since the same rectangle tile for example can be used for several different type of transformations. Now that the tiling can be visualized and edited on-canvas, the tiling type should now be linked directly to the guide tile, so the tiling type drop-down can be removed.
- Users are now offered to create a "Wallpaper" tile by default. Other transformation types are accessed via a pop-up when choosing "others." All previews are moved to this pop-up.
2. Fuse mode
As noted, this is a cut + fuse operation. The programmer needs to implement the following features:
- Boolean operation (specifically cut) on groups
- This also means fixing the cut operation, which is currently rather buggy...
- The guides must be extended, and for each wallpaper group, the ways to "cut" the tiles must be defined
- The programmer must then find the way to define the zone to be delete
- "Fuse" uses the existing group node join operation however
3. Guide points
The programmer must:
- Define/create guide points. This object can be snapped to objects and guides.
- Program it so that iterations of it appear and are rendered correctly in each tile of the render frame according to the chosen transformation mode. If the transformation type is changed, they must also update automatically.
- Additional feature: Ctrl-drag to create a segment from the point: this helps make transformations in each tile more obvious, and helps for handle-snapping.
III. Super fancy wallpaper features
On-canvas dynamics editing
This may require use the existing dynamics mechanism, and instead serve as a front-end for inputing values.
- Two tiles or some other handles are chosen as reference frames, for row and column respectively.
- Deformations are propagated live along the other types.
- Colors can be added to the reference tile for HSL interpolation.
The programmer must basically:
- Change the static render frame into a dynamic one that updates dynamically by propating values across all tiles. Good luck.
- The old dynamics dialogue can probably be replaced with a leaner interface restricted to row for one, and columns for the other. The core mechanism is still more or less the same.
Under discussion: Visual representation of the mechanism?
2. Interpolation gradients?
This takes the previous a step further. You can now add multiple stops. The current internal mechanisms may have to be reworked.
IV. Other tiling types
Two other desirable tilings are Radial and Line tiling. Implementation can probably start once the features in I. Core features are implemented.
1. Radial tiling
To-do.
2. Line tiling
To-do.