OnCanvasSymmetryTool

From Inkscape Wiki
Revision as of 21:30, 6 June 2012 by Veronika (talk | contribs)
Jump to navigation Jump to search

The On-Canvas Support for Creating and Modifying Wallpaper Symmetry Groups is based on the functionality currently available in the "Create Tiled Clones ..." dialog.

Description

Redesign parts of the Cloned Tiles User Interface. In particular, this project will focus on on-canvas control of the size, position, orientation and skew of the boundary of the base tile as well as on-canvas control of the number and “placement” of cloned tiles (placement refers to the attributes currently specified either by the row/column or the width/height fields in the current Create Cloned Tiles dialog).


Related Blueprints

- Tiling Tool for Wallpaper, Radial and Line tiling

- Symmetrical Drawing

Use Cases

UC 1) User has created one or more objects which they want to replicate using a group of symmetry relationships (rotation, reflection, translation or glide). The user must choose a symmetry group or create their own set of transformation rules.

Transformation base tiles for wallpaper groups

In order to choose the symmetry relationships that will produce the desired effect, the user must understand how clones of the base tile will be transformed. For example, if the user selects a symmetry type of CMM, they will want to know at a general level that the tile will be reflected in two orthogonal directions and rotated 180 degrees in a diagonal direction. At a more specific level, they will want to know across what lines the pattern will be reflected and what is the pivot point for the rotation.

An on-canvas visualization of the base tile and of the tiling pattern is proposed.

  • Draw the outline of the base tile using different line styles and markings to indicate the transformation operations.
  • Draw a grid showing how the base tile will be transformed to cover the plane. Cloned tiles will appear in the cells of the grid.

The following picture shows what this might look like:

CmmExample.png

UC 2) The user has created several tiled clones from a base object and now wishes to modify the way the cloned objects are positioned. For example, they want to have more space between the copies.

On-canvas transformation of the base tile outline is proposed. The existing transformation tool will be used and applied to the bounding box of the base tile.

The following picture shows what this might look like:

TransformExample.png


Implementation Considerations

For each proposed feature, three things must be considered:

  1. The user interaction
  2. How the SVG markup is affected
  3. The mathematics of the operation and coding implications

UC 1) Grid for symmetry groups

  • User interaction
    • User enables grid display through menu or keyboard accelerator
    • Grid displayed changes depending on which base tile or cloned tile is selected. If the user selects an object that is a clone (svg:use that references a base tile) or the selected object or one of its parents is a base tile (navigate up the hierarchy until a base tile is found or reach the top of the document), then the tiling pattern will be displayed.
    • If multiple objects are selected and they map to more than one base tile, no grid outline will be shown.
  • SVG markup
    • Requires the base tile markup to have the following information:
      • inkscape:tile-x0, inkscape:tile-y0, inkscape:tile-w, inkscape:tile-h (These items are already added to the SVG markup as part of the Create Tiled Clones... dialog.)
      • inkscape:tile-type (This attribute is new for this feature. It stores the wallpaper symmetry group type - P1, P2, CMM etc)
  • Math and Code
    • For each symmetry group type, determine the shape, size and position of the base tile.
    • This information is documented in the code. See symmetry-tool.cpp. It is based on the algorithm currently used in the Create Tiled Clones... dialog.

UC 2) Transformation of Base Tile

  • User interaction
    • Select a clone and navigate to the base tile object (Select Original)
    • Go to the Select and Transform objects tool (could also use the Transform dialog)
    • The selection boundary displayed on canvas for the base tile object is not the bounding box of the child elements. Instead it is the bounding box of the base tile. The usual transformation handles are displayed.
  • SVG markup
  • Math and Code
    • Currently, if a group object is selected, the bounding box displayed is the bounding box that contains all children. In the case where the group is a base tile (indicated by the presence of the inkscape:tile-type attribute) this behaviour will be changed to show the bounding box of the base tile.
    • Transformations made will be applied to the base tile (inkscape:tile-w, inkscape:tile-h attributes etc) not to the group transform attribute.