Difference between revisions of "Tiling tool"

From Inkscape Wiki
Jump to: navigation, search
(category)
(Another major overhaul)
Line 1: Line 1:
 
== Tiling tool ==  
 
== Tiling tool ==  
The current tiling interface is hard to use. The current Tiling Tool proposal attempts to resolve part of that issue through the use of on-canvas guides called “Tiles.” This feature also expands the tiling to radial tiling and line tiling (currently known as Pattern Along Path).  
+
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.
 +
 
 
{| class="wikitable"  
 
{| class="wikitable"  
 
|+  
 
|+  
Line 12: Line 25:
 
|  
 
|  
 
* This is for radial designs, and allows both angular clones and radial clones.  
 
* This is for radial designs, and allows both angular clones and radial clones.  
* For angular clones, users can choose between simple rotation or symmetry + rotation.
+
* For angular clones, users can choose between simple rotation or symmetry + rotation. (thus covering the Rosetta patterns as well)
 
* For radial clones, users can choose between same direction and alternating directions.
 
* For radial clones, users can choose between same direction and alternating directions.
 
|-
 
|-
Line 21: Line 34:
 
|}  
 
|}  
  
== Terminology ==
+
[[File:Tiling_Tool_Toolbar.png|UI Proposal for tiling tool]]
 +
<br clear="all"/>
  
* '''Tile:''' A tile is defined here a guide used to mark the boundaries of the base tiling, as well as define the tiling type. It defines the “unit” of the tiling. For example, it is a rectangle for a “P1: Simple translation” tiling. Tiles can be moved, rotated or scaled. In tile edit mode, the type of tile can be modified through the use of handles or from a drop-down list. When rendering a tiling, Inkscape automatically detects the type of tile being used to select the tiling type.
+
== Render modes ==
* '''Base pattern:''' Defined here as the pattern that needs to be repeated.
+
* '''Tiling tool:''' This tool. Used to render tilings.
+
* '''Render mode:''' The main mode of the tiling tool. From here you can create a new tile, and if you have a tile and based pattern selected, you can “render” the appropriate tiling.
+
* '''Tile edit mode:''' Double-clicking on a tile enters the tile edit mode. Double-clicking elsewhere leaves it. In tile edit mode, the toolbar changes to one appropriate for that tiling operation (wallpaper, radial or line tiling). Additional features proposed:
+
** '''Guides:''' In tiling mode, the user can add additional guides (points or lines) to help design their pattern. These additional guides are just visual references and don’t perform additional actions.
+
** '''Render frame:''' A render frame shows an outline of frames to render. Users can add or delete frames with the mouse. The whole frame can also be moved, rotated and resized.
+
* '''Tiling dialogue:''' A dialogue with additional options, behaving like an LPE dialogue. Users can also see the stacking of tilings from here.
+
  
== Tiling tool: Render mode ==
+
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.
  
The toolbar looks like this:
+
[[File:Tiling_cut_excess.png|Explanation of "Fuse" feature for tiling proposal]]
 
+
[[File:Tiling_Tool_Render_Mode.png|GUI proposal for the Render mode of the Tiling tool]]
+
<br clear="all"/>
+
 
+
The tile creation process:
+
# Create a base pattern.
+
# From the tiling mode, add a “Tile.”
+
#* Edit the tile as needed. Double-clicking a tile enters a tile edit mode. Double-click elsewhere to exit.
+
#* Make additional changes to the base pattern as needed.
+
# Select a base pattern and a tile. Switch to tiling tool again.
+
#* Before selecting the base pattern and tile, copy a target to render over if needed.
+
#* Choose tiling options.
+
# Click render.
+
 
+
== Tile edit mode ==
+
 
+
To enter Tile Edit mode, double-click on a tile. Exit by double-clicking elsewhere. The tile can be moved, resized and rotated using just the Transform (F1) tool, just like how rectangles and ellipses can be edited outside of their respective tools.
+
 
+
[[File:Tiling_Tool_Tile_Edit_Mode.png|GUI proposal for the tile Edit mode for the Tiling Tool]]
+
<br clear="all"/>
+
 
+
Advanced users can then change the type of the base tile (example: from P1 to P2) in tile edit mode through the use of handles or drop-downs. These handles are not visible nor editable outside the tile edit mode (to avoid getting in the way).
+
 
+
{| class="wikitable"
+
|+
+
! scope="col" width="180"| Type
+
! scope="col" width="500" | Description
+
|-
+
! scope="row" | Wallpaper tiling
+
| These guides corresponds to the different wallpaper categories
+
|-
+
! scope="row" | Radial tiling
+
| These are to create radial patterns. They're basically arc segments with a  direction.
+
|-
+
! scope="row" | Tiling along Path
+
| This is defined by a central axis, an attach point and 2 tile bounds. The central axis represents the path to which the tile will attach, basically a visual normal offset. The tile attaches to a specific node (say, the first node of the path) from the attach point, basically a visual tangential offset. The two bounds decide where the tile cuts off save for edge scenarios.
+
|}
+
 
+
Veronica made a nice list of tiles for wallpapers and corresponding output previews here:
+
 
+
[http://i.imgur.com/DMCvU.png Full list of wallpaper tiles and previews]
+
 
+
== Tiling modes ==
+
 
+
[[File:Tiling_Tool_modes.png|Render modes for the tiling tool proposal]]
+
 
<br clear="all"/>  
 
<br clear="all"/>  
There are 4 modes in the current proposal:
 
* Plain: this is a normal tiling
 
* Clip: through clipping, only the part within the tile is shown. This is to avoid overlapping.
 
* Fuse: a “join node” operation is then conducted on all the nodes in the output. If the user designed the tiles to be seamless, then the lines should join up to create a seamless output.
 
* Fuse cut: this is, in fact, a “cut” and “delete” operation followed by a “join nodes” operation. Inkscape will cut along certain lines and delete parts for “inner” tiles. This last mode allows the user to create seamless tiles with “edge” scenarios from a single base pattern:
 
 
== More explanations of the "fuse cut" mode ==
 
  
[[File:Tiling_cut_excess.png|Explanation of "Fuse cut" feature for tiling proposal]]
+
[[File:Tiling_interface_examples.png|More examples of the possible outputs for the “Fuse Cut” mode]]  
 
<br clear="all"/>  
 
<br clear="all"/>  
  
[[File:Tiling_interface_examples.png|More examples of the possible outputs for the “Fuse Cut” mode]]
+
== Render frame ==
<br clear="all"/>
+
  
== Dynamics ==
+
The render frame is made up of:
 +
* A central tile, which defines the location of the pattern to copy
 +
* A more general render grid
  
[[File:Tiling_Tool_Dynamics.png|GUI and presets for Dynamics presets for Tiling Tool proposal]]
+
[[File:Tiling_Tool_Render_Frame.png|UI Proposal for the Render frame of the Tiling tool proposal]]  
 
<br clear="all"/>  
 
<br clear="all"/>  
Simple dynamics presets could be accessible from the tiling tool. A separate “Dynamics” panel corresponding to the current tiling operation pops up when choosing the Edit option. Major differences are:
 
* Vertical listing
 
* Checkbox next to every transformation type, so users can easily remove all of them while retaining some values.
 
* Radial Clones use Polar coordinates.
 
* Tiling along Path use orthogonal coordinates (normal and orthogonal).
 
* Users can save and use presets. This includes a "No dynamics" option.
 
  
== Target ==
+
== On-canvas transformation handles ==
  
[[File:Tiling_Tool_Targets.png|Possible "target" types for tiling tool proposal]]
+
[[File:Tiling_Tool_Transformation_Handles.png|UI proposal for on-canvas handles for the tiling tool proposal]]  
 
<br clear="all"/>  
 
<br clear="all"/>  
"Target" determines where you render your tiling.
 
 
For wallpaper tiling:
 
* By numbers: A pop-up asks you to input the number of tiles to make (example: 3 x 5), or the size of a rectangular area to render over
 
* Render frame: See guide description. After adding a render frame, Inkscape will render tiles according to that frame.
 
* Over copied: If you have a copied object, Inkscape will render over the copy.
 
* Border to copy: easy page borders? Makes a border.
 
* Clip to copied: Same as above, except clipped to the target. Use for clothes etc.
 
* Pattern to copy: (if allowed by .svg standards) The tiling is converted to a pattern and applied to the copied object. This pattern can be manually adjusted with the Pattern edit tool.
 
* New pattern: (if allowed by .svg standards) A pop-asks asks you to name and save the new pattern for later use.
 
For radial tiling:
 
* By number: A pop-up asks you to input the number of radial and angular copies. You can choose to input by angle and by radial distance instead.
 
* Render frame: see render frame description.
 
* No "to copied" option, because I think people usually want to define a radial tile just where the base tile is, but I could be wrong.
 
For Tiling along path:
 
* On selected Path. Note: this can be a closed path. A pop-up allows you to choose additional options and values.
 
* As selected path's line pattern: takes the selected path and makes the Tiling along path its new pattern.
 
* As new line pattern: if clone patterns can somehow be saved somewhere.
 
Alternatively, the "target" field could be excluded from the toolbar, and appear as options in a pop-up when clicking "Render."
 
 
== Options ==
 
Opens a Tiling dialogue. From here you can see what options have been applied to an existing tiling, change them and toggle tile stacking.
 
 
[[File:Tiling_Tool_Dialogue.png|UI proposal for tiling tool dialogue]]
 
<br clear="all"/>
 
  
 
== Guide points and other guides ==
 
== Guide points and other guides ==
Line 141: Line 68:
 
<br clear="all"/>  
 
<br clear="all"/>  
  
These features are there to help you design your tile pattern. Specifically, they're there to help design seamless tiles.  
+
Guide points are there to serve as reference point when creating tile designs.  
* Guide points: When a guide point is created on one side of a guide, counterparts are automatically created on all other sides of the basic guide. All changes to the original will be reflected onto counterpart. To create seamless designs, just make sure that all lines going in and out of a tile are connected to guide points.
+
* When you add a guide point, "counterparts" are generated in all the other tiles
* Guide segment: clicking and dragging on a guide point creates a guide segment, which also shows on all of the guide point's counterparts. The idea is to place a node on a guide point, snap its handle to the end of the segment, then repeat with the guide point's counterparts. When a "fuse" operation is applied, the result will be a perfectly smooth transition from one tile to the next.
+
* Ctrl-drag to drag out a segment.  
See this [http://www.cgl.uwaterloo.ca/~csk/software/penrose/ javascript program] for an approximate idea of how it'd behave.
+
* 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.
Note: programming-wise, the guide points don't actually do anything, they're just visual references. When Inkscape creates a "Fuse path" tiling, it just joins the nearest nodes. This means you can introduce slight dynamics and still have lines link up, though Inkscape can't guarantee the results in this case.  
+
 
Depending on the guide type, other types of guides are available (parallel lines, arcs etc.)
+
 
== Render frame ==  
 
== Render frame ==  
 
[[File:Tiling_Tool_Render_Frame.png|Render frame feature for the tiling tool proposal]] <br clear="all"/>
 
[[File:Tiling_Tool_Render_Frame.png|Render frame feature for the tiling tool proposal]] <br clear="all"/>
  
 
A render frame is a tiling outline allowing the user to manually choose which frames to render. This is made up of a "central" tile and additional tiles (so when dynamics are applied, they start with the central tile). By default the frame is rendered over the original tile, but is a separate object that can be moved around, rotated and resized.  
 
A render frame is a tiling outline allowing the user to manually choose which frames to render. This is made up of a "central" tile and additional tiles (so when dynamics are applied, they start with the central tile). By default the frame is rendered over the original tile, but is a separate object that can be moved around, rotated and resized.  
 +
 +
== On-canvas dynamics editing ==
 +
 +
(in progress)
 +
 +
== Radial tiling ==
 +
 +
(to-do)
 +
 +
== Line tiling ==
 +
 +
(to-do)
  
 
== Tile stacking ==  
 
== Tile stacking ==  
  
You can easily stack different tilings!  
+
You can stack different tilings!  
  
 
[[File:Tiling stacking.png|Explanation of tile stacking feature for my tiling proposal]] <br clear="all"/>
 
[[File:Tiling stacking.png|Explanation of tile stacking feature for my tiling proposal]] <br clear="all"/>
Line 168: Line 106:
 
== Implementation ==
 
== Implementation ==
  
This proposal contains a lot of features, but it is also very modular, so features can be added separately.  
+
Proposed implementation steps:
* The base version of this tool would be a version only for wallpaper tiling, with only simple rectangular tile from which Inkscape will take coordinates. The base version could be a mere front-end to the old dialogue, with the difference being that the rectangular tile will be used to calculate coordinates.
+
 
* The different types of tiles and the Tile Edit Mode can be added separately. Users can first choose from a drop-down. Handles can also be programmed separately.
+
=== 0. Very desirable: Guide management ===
* In tile edit mode, additional "guides" (guide points etc.) can also be implemented separately.
+
 
* "Render frame" feature can also be implemented separately.
+
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.  
* All tiling modes can be implemented separately (clip, fuse and fuse cut). Note: the Fuse Cut operation requires the ability to perform Boolean operations (specifically “cut”) on a group of objects:
+
 
 +
=== Core features ===
 +
 
 +
'''1. The glorified clone and distribute tool '''
 +
 
 +
[[File:Tiling Tool Step1.png|UI Proposal for first step of tiling tool implementation]]
 +
<br clear="all"/>
 +
 
 +
*This step is a mere front-end to the current interface. It allows you to place a single guide tile for a given wallpaper group.
 +
*Select that tile, select your pattern, input some tile values, and render.
 +
*To add dynamics, you have to open the old Tiling dialogue.
 +
 +
What needs to be done:
 +
# The programer should guide tiles for all 17 wallpaper groups. Many can share tiles, so can be grouped into "Rectangle, P3, P4 etc."
 +
# The tiling interface is forced to take bound coordinates from this tile.  
 +
# Preview in the dialogue: Veronica has already done previews. They need to be added for users to be informed about what is being used.
 +
 +
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. But honestly, let's have some proper guides, 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. 
 +
 +
''' 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) around the base tile object.
 +
# It should be possible to add to this grid just by dragging on the edges. Shift-drag to increase in all directions.
 +
#* Additional features: add/remove tiles by Alt-clicking individual frames, by Alt-dragging (touch-create) and by Ctrl-Alt-dragging (lasso around an area to create or remove)(hold down shift for the last two to remove instead). 
 +
# Once this feature has been implemented, the "Rows, Columns" and "Width, Height" fields of the tiling dialogue can be removed completely.  
 +
 +
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:
 +
* Symmetry and render buttons could potentially be moved from the dialogue to the tool.  
 +
* 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.  
 +
 +
=== More advanced wallpaper tiling features ===
 +
 +
These can now be implemented separately.  
 +
 +
''' 1. Base tile 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.
 +
 +
Note: P1 tiles can be skewed, but certain handle transformations may snap it straight.
 +
 +
'''  II.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
 +
 
** [https://bugs.launchpad.net/inkscape/+bug/166302 Bug #166302: Cut Path looses some segments ]
 
** [https://bugs.launchpad.net/inkscape/+bug/166302 Bug #166302: Cut Path looses some segments ]
 
** [https://bugs.launchpad.net/inkscape/+bug/171379 Bug #171379: Boolean Operations on Groups ]
 
** [https://bugs.launchpad.net/inkscape/+bug/171379 Bug #171379: Boolean Operations on Groups ]
 
** [https://bugs.launchpad.net/inkscape/+bug/701819 Bug #701819: Copy/Cut a Part of a Grouped Object ] (scenario of above)
 
** [https://bugs.launchpad.net/inkscape/+bug/701819 Bug #701819: Copy/Cut a Part of a Grouped Object ] (scenario of above)
 
** [https://bugs.launchpad.net/inkscape/+bug/408551 Bug #408551: Cut Path with a grouped object does nothing ]
 
** [https://bugs.launchpad.net/inkscape/+bug/408551 Bug #408551: Cut Path with a grouped object does nothing ]
* Dynamics drop-down and presets for dynamics can be implemented separately. The dialogue for dynamics can also be re-arranged independently.
+
 
* Most “target” options can be implemented separately.
+
''' 3. Guide points '''
* The above describes the tiling tool for just wallpaper tiling. All features can be expanded to radial tiling and line tiling separately.
+
 +
Again, the tricky part is how to define guide points and implement them as a separate object (how does the code for object rotation centers work?). On the other hand, point object are useful for other tools and features (such as serving as guides for connectors, etc.) 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.
 +
 +
=== Super fancy wallpaper features ===
 +
 
 +
''' On-canvas dynamics editing '''
 +
 +
This may require reworking the dynamics mechanism. 
 +
* Two tiles 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.
 +
 +
In-progress: mechanism for adding and previewing jitters?
 +
 +
''' 2. Interpolation gradients? '''
 +
 
 +
This takes the previous a step further. You can now add multiple stops. The current internal mechanisms thus have to be reworked.
 +
 
 +
=== 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.
 +
IV.1. Radial tiling
 +
 
 +
IV.2. Line tiling
 +
 
 +
 
  
 
[[Category:Proposals]]
 
[[Category:Proposals]]

Revision as of 11:20, 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:

  1. Create a frame
  2. Select a pattern and a frame
  3. 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
  • This is for radial designs, and allows both angular clones and radial clones.
  • For angular clones, users can choose between simple rotation or symmetry + rotation. (thus covering the Rosetta patterns as well)
  • For radial clones, users can choose between same direction and alternating directions.
Path tiling
  • Clones are generated along a path. This can be used to create a string of decorations, for repeating frills, for page borders etc.
  • Users can choose from all 7 Frieze groups.

UI Proposal for tiling tool

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.

Explanation of "Fuse" feature for tiling proposal

More examples of the possible outputs for the “Fuse Cut” mode

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

UI Proposal for the Render frame of the Tiling tool proposal

On-canvas transformation handles

UI proposal for on-canvas handles for the tiling tool proposal

Guide points and other guides

UI proposal for guide points feature for Tiling Tool

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.

Render frame

Render frame feature for the tiling tool proposal

A render frame is a tiling outline allowing the user to manually choose which frames to render. This is made up of a "central" tile and additional tiles (so when dynamics are applied, they start with the central tile). By default the frame is rendered over the original tile, but is a separate object that can be moved around, rotated and resized.

On-canvas dynamics editing

(in progress)

Radial tiling

(to-do)

Line tiling

(to-do)

Tile stacking

You can stack different tilings!

Explanation of tile stacking feature for my tiling proposal

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?

UI proposal for line pattern choosing

Implementation

Proposed implementation steps:

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.

Core features

1. The glorified clone and distribute tool

UI Proposal for first step of tiling tool implementation

  • This step is a mere front-end to the current interface. It allows you to place a single guide tile for a given wallpaper group.
  • Select that tile, select your pattern, input some tile values, and render.
  • To add dynamics, you have to open the old Tiling dialogue.

What needs to be done:

  1. The programer should guide tiles for all 17 wallpaper groups. Many can share tiles, so can be grouped into "Rectangle, P3, P4 etc."
  2. The tiling interface is forced to take bound coordinates from this tile.
  3. Preview in the dialogue: Veronica has already done previews. They need to be added for users to be informed about what is being used.

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. But honestly, let's have some proper guides, 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.

2. The render frame - static

What needs to be done:

  1. 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) around the base tile object.
  2. It should be possible to add to this grid just by dragging on the edges. Shift-drag to increase in all directions.
    • Additional features: add/remove tiles by Alt-clicking individual frames, by Alt-dragging (touch-create) and by Ctrl-Alt-dragging (lasso around an area to create or remove)(hold down shift for the last two to remove instead).
  3. Once this feature has been implemented, the "Rows, Columns" and "Width, Height" fields of the tiling dialogue can be removed completely.

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:

  • Symmetry and render buttons could potentially be moved from the dialogue to the tool.
  • 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.

More advanced wallpaper tiling features

These can now be implemented separately.

1. Base tile handles

Handles are added to the base tiles, making it possible to switch from one tiling to another.

  1. Changing symmetries should be the priority.
  2. 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.
  3. 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.
  4. 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.

Note: P1 tiles can be skewed, but certain handle transformations may snap it straight.

II.2. Fuse mode

As noted, this is a cut + fuse operation. The programmer needs to implement the following features:

  1. Boolean operation (specifically cut) on groups
  2. This also means fixing the cut operation, which is currently rather buggy...
  3. The guides must be extended, and for each wallpaper group, the ways to "cut" the tiles must be defined
  4. The programmer must then find the way to define the zone to be delete
  5. "Fuse" uses the existing group node join operation however

3. Guide points

Again, the tricky part is how to define guide points and implement them as a separate object (how does the code for object rotation centers work?). On the other hand, point object are useful for other tools and features (such as serving as guides for connectors, etc.) The programmer must:

  1. Define/create guide points. This object can be snapped to objects and guides.
  2. 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.
  3. 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

On-canvas dynamics editing

This may require reworking the dynamics mechanism.

  • Two tiles 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:

  1. Change the static render frame into a dynamic one that updates dynamically by propating values across all tiles. Good luck.
  2. 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.

In-progress: mechanism for adding and previewing jitters?

2. Interpolation gradients?

This takes the previous a step further. You can now add multiple stops. The current internal mechanisms thus have to be reworked.

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. IV.1. Radial tiling

IV.2. Line tiling