[{"id":28033,"web_url":"https://patchwork.libcamera.org/comment/28033/","msgid":"<20231023112559.GI3336@pendragon.ideasonboard.com>","date":"2023-10-23T11:25:59","subject":"Re: [libcamera-devel] [PATCH v6 03/12] Documentation: Add figures\n\tto document Orientation","submitter":{"id":2,"url":"https://patchwork.libcamera.org/api/people/2/","name":"Laurent Pinchart","email":"laurent.pinchart@ideasonboard.com"},"content":"Hi Jacopo,\n\nThank you for the patch.\n\nOn Thu, Oct 19, 2023 at 04:01:24PM +0200, Jacopo Mondi via libcamera-devel wrote:\n> Add figures in Documentation/rotation/ to document the plane\n> transformations defined by the Orientation enumeration.\n> \n> Signed-off-by: Jacopo Mondi <jacopo.mondi@ideasonboard.com>\n> ---\n>  Documentation/Doxyfile.in                  |   2 +\n>  Documentation/rotation/rotate0.svg         | 132 ++++++++++++++++++++\n>  Documentation/rotation/rotate0Mirror.svg   | 135 +++++++++++++++++++++\n>  Documentation/rotation/rotate180.svg       | 135 +++++++++++++++++++++\n>  Documentation/rotation/rotate180Mirror.svg | 135 +++++++++++++++++++++\n>  Documentation/rotation/rotate270.svg       | 135 +++++++++++++++++++++\n>  Documentation/rotation/rotate270Mirror.svg | 135 +++++++++++++++++++++\n>  Documentation/rotation/rotate90.svg        | 135 +++++++++++++++++++++\n>  Documentation/rotation/rotate90Mirror.svg  | 135 +++++++++++++++++++++\n>  src/libcamera/orientation.cpp              |  17 +++\n>  10 files changed, 1096 insertions(+)\n>  create mode 100644 Documentation/rotation/rotate0.svg\n>  create mode 100644 Documentation/rotation/rotate0Mirror.svg\n>  create mode 100644 Documentation/rotation/rotate180.svg\n>  create mode 100644 Documentation/rotation/rotate180Mirror.svg\n>  create mode 100644 Documentation/rotation/rotate270.svg\n>  create mode 100644 Documentation/rotation/rotate270Mirror.svg\n>  create mode 100644 Documentation/rotation/rotate90.svg\n>  create mode 100644 Documentation/rotation/rotate90Mirror.svg\n> \n> diff --git a/Documentation/Doxyfile.in b/Documentation/Doxyfile.in\n> index 697a14d1dfe2..67ee51afb6e3 100644\n> --- a/Documentation/Doxyfile.in\n> +++ b/Documentation/Doxyfile.in\n> @@ -78,6 +78,8 @@ EXPAND_ONLY_PREDEF     = YES\n>  INCLUDE_PATH           = \"@TOP_SRCDIR@/include/libcamera\"\n>  INCLUDE_FILE_PATTERNS  = *.h\n>  \n> +IMAGE_PATH             = \"@TOP_SRCDIR@/Documentation\"\n\nI'll move images to an images/ directory, in order to avoid clashes\nbetween Doxygen and Sphinx documentation.\n\nReviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>\n\n> +\n>  PREDEFINED             = __DOXYGEN__ \\\n>                           __cplusplus \\\n>                           __attribute__(x)= \\\n> diff --git a/Documentation/rotation/rotate0.svg b/Documentation/rotation/rotate0.svg\n> new file mode 100644\n> index 000000000000..13cde16ada51\n> --- /dev/null\n> +++ b/Documentation/rotation/rotate0.svg\n> @@ -0,0 +1,132 @@\n> +<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n> +<!-- Created with Inkscape (http://www.inkscape.org/) -->\n> +\n> +<svg\n> +   width=\"297mm\"\n> +   height=\"210mm\"\n> +   viewBox=\"0 0 297 210\"\n> +   version=\"1.1\"\n> +   id=\"svg1\"\n> +   inkscape:version=\"1.3 (0e150ed6c4, 2023-07-21)\"\n> +   sodipodi:docname=\"rotate0.svg\"\n> +   xmlns:inkscape=\"http://www.inkscape.org/namespaces/inkscape\"\n> +   xmlns:sodipodi=\"http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd\"\n> +   xmlns=\"http://www.w3.org/2000/svg\"\n> +   xmlns:svg=\"http://www.w3.org/2000/svg\">\n> +  <sodipodi:namedview\n> +     id=\"namedview1\"\n> +     pagecolor=\"#ffffff\"\n> +     bordercolor=\"#666666\"\n> +     borderopacity=\"1.0\"\n> +     inkscape:showpageshadow=\"2\"\n> +     inkscape:pageopacity=\"0.0\"\n> +     inkscape:pagecheckerboard=\"0\"\n> +     inkscape:deskcolor=\"#d1d1d1\"\n> +     inkscape:document-units=\"mm\"\n> +     showgrid=\"true\"\n> +     showguides=\"false\"\n> +     inkscape:zoom=\"1.4854147\"\n> +     inkscape:cx=\"666.48052\"\n> +     inkscape:cy=\"448.35962\"\n> +     inkscape:window-width=\"1916\"\n> +     inkscape:window-height=\"1040\"\n> +     inkscape:window-x=\"0\"\n> +     inkscape:window-y=\"38\"\n> +     inkscape:window-maximized=\"1\"\n> +     inkscape:current-layer=\"layer1\">\n> +    <inkscape:grid\n> +       id=\"grid1\"\n> +       units=\"px\"\n> +       originx=\"0\"\n> +       originy=\"0\"\n> +       spacingx=\"0.26458334\"\n> +       spacingy=\"0.26458333\"\n> +       empcolor=\"#0000ff\"\n> +       empopacity=\"0.25098039\"\n> +       color=\"#0000ff\"\n> +       opacity=\"0.1254902\"\n> +       empspacing=\"5\"\n> +       dotted=\"false\"\n> +       gridanglex=\"30\"\n> +       gridanglez=\"30\"\n> +       visible=\"true\" />\n> +  </sodipodi:namedview>\n> +  <defs\n> +     id=\"defs1\" />\n> +  <g\n> +     inkscape:label=\"Layer 1\"\n> +     inkscape:groupmode=\"layer\"\n> +     id=\"layer1\">\n> +    <rect\n> +       style=\"fill:none;stroke:#000000;stroke-width:1.5875;paint-order:markers stroke fill;stroke-dasharray:none\"\n> +       id=\"rect1\"\n> +       width=\"152.88184\"\n> +       height=\"119.41136\"\n> +       x=\"77.237244\"\n> +       y=\"81.982094\" />\n> +    <rect\n> +       style=\"fill:none;stroke:#000000;stroke-width:1.5875;paint-order:markers stroke fill;stroke-dasharray:none\"\n> +       id=\"rect2\"\n> +       width=\"49.755535\"\n> +       height=\"36.468258\"\n> +       x=\"92.612343\"\n> +       y=\"98.912964\" />\n> +    <rect\n> +       style=\"fill:none;stroke:#000000;stroke-width:1.5875;stroke-dasharray:none;paint-order:markers stroke fill\"\n> +       id=\"rect2-5\"\n> +       width=\"49.755535\"\n> +       height=\"36.468258\"\n> +       x=\"167.25099\"\n> +       y=\"98.912964\" />\n> +    <g\n> +       id=\"g4\"\n> +       transform=\"translate(-0.98582077)\"\n> +       style=\"stroke-width:1.5875;stroke-dasharray:none\">\n> +      <rect\n> +         style=\"fill:none;stroke:#000000;stroke-width:1.5875;stroke-dasharray:none;paint-order:markers stroke fill\"\n> +         id=\"rect3\"\n> +         width=\"40.994682\"\n> +         height=\"43.605846\"\n> +         x=\"134.16664\"\n> +         y=\"157.24184\" />\n> +      <ellipse\n> +         style=\"fill:none;stroke:#000000;stroke-width:1.5875;stroke-dasharray:none;paint-order:markers stroke fill\"\n> +         id=\"path3\"\n> +         cx=\"140.15703\"\n> +         cy=\"176.44627\"\n> +         rx=\"1.889045\"\n> +         ry=\"1.925626\" />\n> +    </g>\n> +    <path\n> +       style=\"fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.5875;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1\"\n> +       d=\"M 244.95942,81.765726 62.444825,81.97209 154.25639,28.65633 Z\"\n> +       id=\"path4\"\n> +       sodipodi:nodetypes=\"cccc\" />\n> +    <path\n> +       style=\"fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.5875;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;stroke-dasharray:none\"\n> +       d=\"m 199.76751,33.368887 0.0285,21.581353\"\n> +       id=\"path5\" />\n> +    <path\n> +       style=\"fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.5875;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;stroke-dasharray:none\"\n> +       d=\"m 215.59016,33.189206 0.0959,31.330304\"\n> +       id=\"path6\" />\n> +    <path\n> +       style=\"fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.5875;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1\"\n> +       d=\"m 194.42835,33.189356 25.2821,-0.220612\"\n> +       id=\"path7\" />\n> +    <path\n> +       style=\"fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.5875;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;stroke-dasharray:none\"\n> +       d=\"m 195.19248,33.096339 -0.0701,-5.375793 23.77787,-0.05613 0.0553,5.315811\"\n> +       id=\"path8\" />\n> +    <path\n> +       style=\"fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.5875;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1\"\n> +       d=\"m 194.20874,25.616264 25.25485,-0.02536\"\n> +       id=\"path7-5\"\n> +       sodipodi:nodetypes=\"cc\" />\n> +    <path\n> +       style=\"fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.5875;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1\"\n> +       d=\"m 195.03436,26.298566 -0.0455,-5.426692 23.77787,-0.05613 0.0553,5.315811\"\n> +       id=\"path8-9\"\n> +       sodipodi:nodetypes=\"cccc\" />\n> +  </g>\n> +</svg>\n> diff --git a/Documentation/rotation/rotate0Mirror.svg b/Documentation/rotation/rotate0Mirror.svg\n> new file mode 100644\n> index 000000000000..a7edda873bf5\n> --- /dev/null\n> +++ b/Documentation/rotation/rotate0Mirror.svg\n> @@ -0,0 +1,135 @@\n> +<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n> +<!-- Created with Inkscape (http://www.inkscape.org/) -->\n> +\n> +<svg\n> +   width=\"297mm\"\n> +   height=\"210mm\"\n> +   viewBox=\"0 0 297 210\"\n> +   version=\"1.1\"\n> +   id=\"svg1\"\n> +   inkscape:version=\"1.3 (0e150ed6c4, 2023-07-21)\"\n> +   sodipodi:docname=\"rotate0Mirror.svg\"\n> +   xmlns:inkscape=\"http://www.inkscape.org/namespaces/inkscape\"\n> +   xmlns:sodipodi=\"http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd\"\n> +   xmlns=\"http://www.w3.org/2000/svg\"\n> +   xmlns:svg=\"http://www.w3.org/2000/svg\">\n> +  <sodipodi:namedview\n> +     id=\"namedview1\"\n> +     pagecolor=\"#ffffff\"\n> +     bordercolor=\"#666666\"\n> +     borderopacity=\"1.0\"\n> +     inkscape:showpageshadow=\"2\"\n> +     inkscape:pageopacity=\"0.0\"\n> +     inkscape:pagecheckerboard=\"0\"\n> +     inkscape:deskcolor=\"#d1d1d1\"\n> +     inkscape:document-units=\"mm\"\n> +     showgrid=\"true\"\n> +     showguides=\"false\"\n> +     inkscape:zoom=\"0.82900578\"\n> +     inkscape:cx=\"599.51331\"\n> +     inkscape:cy=\"579.00682\"\n> +     inkscape:window-width=\"1916\"\n> +     inkscape:window-height=\"1040\"\n> +     inkscape:window-x=\"0\"\n> +     inkscape:window-y=\"38\"\n> +     inkscape:window-maximized=\"1\"\n> +     inkscape:current-layer=\"layer1\">\n> +    <inkscape:grid\n> +       id=\"grid1\"\n> +       units=\"px\"\n> +       originx=\"0\"\n> +       originy=\"0\"\n> +       spacingx=\"0.26458334\"\n> +       spacingy=\"0.26458333\"\n> +       empcolor=\"#0000ff\"\n> +       empopacity=\"0.25098039\"\n> +       color=\"#0000ff\"\n> +       opacity=\"0.1254902\"\n> +       empspacing=\"5\"\n> +       dotted=\"false\"\n> +       gridanglex=\"30\"\n> +       gridanglez=\"30\"\n> +       visible=\"true\" />\n> +  </sodipodi:namedview>\n> +  <defs\n> +     id=\"defs1\" />\n> +  <g\n> +     inkscape:label=\"Layer 1\"\n> +     inkscape:groupmode=\"layer\"\n> +     id=\"layer1\">\n> +    <rect\n> +       style=\"fill:none;stroke:#000000;stroke-width:1.5875;stroke-dasharray:none;paint-order:markers stroke fill\"\n> +       id=\"rect1\"\n> +       width=\"152.88184\"\n> +       height=\"119.41136\"\n> +       x=\"-230.13463\"\n> +       y=\"81.982094\"\n> +       transform=\"scale(-1,1)\" />\n> +    <rect\n> +       style=\"fill:none;stroke:#000000;stroke-width:1.5875;stroke-dasharray:none;paint-order:markers stroke fill\"\n> +       id=\"rect2\"\n> +       width=\"49.755535\"\n> +       height=\"36.468258\"\n> +       x=\"-214.75954\"\n> +       y=\"98.912964\"\n> +       transform=\"scale(-1,1)\" />\n> +    <rect\n> +       style=\"fill:none;stroke:#000000;stroke-width:1.5875;stroke-dasharray:none;paint-order:markers stroke fill\"\n> +       id=\"rect2-5\"\n> +       width=\"49.755535\"\n> +       height=\"36.468258\"\n> +       x=\"-140.12088\"\n> +       y=\"98.912964\"\n> +       transform=\"scale(-1,1)\" />\n> +    <g\n> +       id=\"g4\"\n> +       transform=\"matrix(-1,0,0,1,308.35769,0)\"\n> +       style=\"stroke-width:1.5875;stroke-dasharray:none\">\n> +      <rect\n> +         style=\"fill:none;stroke:#000000;stroke-width:1.5875;stroke-dasharray:none;paint-order:markers stroke fill\"\n> +         id=\"rect3\"\n> +         width=\"40.994682\"\n> +         height=\"43.605846\"\n> +         x=\"134.16664\"\n> +         y=\"157.24184\" />\n> +      <ellipse\n> +         style=\"fill:none;stroke:#000000;stroke-width:1.5875;stroke-dasharray:none;paint-order:markers stroke fill\"\n> +         id=\"path3\"\n> +         cx=\"140.15703\"\n> +         cy=\"176.44627\"\n> +         rx=\"1.889045\"\n> +         ry=\"1.925626\" />\n> +    </g>\n> +    <path\n> +       style=\"fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.5875;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1\"\n> +       d=\"M 62.412454,81.765726 244.92705,81.97209 153.11548,28.65633 Z\"\n> +       id=\"path4\"\n> +       sodipodi:nodetypes=\"cccc\" />\n> +    <path\n> +       style=\"fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.5875;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1\"\n> +       d=\"m 107.60436,33.368887 -0.0285,21.581353\"\n> +       id=\"path5\" />\n> +    <path\n> +       style=\"fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.5875;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1\"\n> +       d=\"m 91.781714,33.189206 -0.0959,31.330304\"\n> +       id=\"path6\" />\n> +    <path\n> +       style=\"fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.5875;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1\"\n> +       d=\"M 112.94352,33.189356 87.661424,32.968744\"\n> +       id=\"path7\" />\n> +    <path\n> +       style=\"fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.5875;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1\"\n> +       d=\"m 112.17939,33.096339 0.0701,-5.375793 -23.777866,-0.05613 -0.0553,5.315811\"\n> +       id=\"path8\" />\n> +    <path\n> +       style=\"fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.5875;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1\"\n> +       d=\"M 113.16313,25.616264 87.908284,25.590904\"\n> +       id=\"path7-5\"\n> +       sodipodi:nodetypes=\"cc\" />\n> +    <path\n> +       style=\"fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.5875;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1\"\n> +       d=\"m 112.33751,26.298566 0.0455,-5.426692 -23.777866,-0.05613 -0.0553,5.315811\"\n> +       id=\"path8-9\"\n> +       sodipodi:nodetypes=\"cccc\" />\n> +  </g>\n> +</svg>\n> diff --git a/Documentation/rotation/rotate180.svg b/Documentation/rotation/rotate180.svg\n> new file mode 100644\n> index 000000000000..d092a5322fb1\n> --- /dev/null\n> +++ b/Documentation/rotation/rotate180.svg\n> @@ -0,0 +1,135 @@\n> +<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n> +<!-- Created with Inkscape (http://www.inkscape.org/) -->\n> +\n> +<svg\n> +   width=\"297mm\"\n> +   height=\"210mm\"\n> +   viewBox=\"0 0 297 210\"\n> +   version=\"1.1\"\n> +   id=\"svg1\"\n> +   inkscape:version=\"1.3 (0e150ed6c4, 2023-07-21)\"\n> +   sodipodi:docname=\"rotate180.svg\"\n> +   xmlns:inkscape=\"http://www.inkscape.org/namespaces/inkscape\"\n> +   xmlns:sodipodi=\"http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd\"\n> +   xmlns=\"http://www.w3.org/2000/svg\"\n> +   xmlns:svg=\"http://www.w3.org/2000/svg\">\n> +  <sodipodi:namedview\n> +     id=\"namedview1\"\n> +     pagecolor=\"#ffffff\"\n> +     bordercolor=\"#666666\"\n> +     borderopacity=\"1.0\"\n> +     inkscape:showpageshadow=\"2\"\n> +     inkscape:pageopacity=\"0.0\"\n> +     inkscape:pagecheckerboard=\"0\"\n> +     inkscape:deskcolor=\"#d1d1d1\"\n> +     inkscape:document-units=\"mm\"\n> +     showgrid=\"true\"\n> +     showguides=\"false\"\n> +     inkscape:zoom=\"0.94272086\"\n> +     inkscape:cx=\"467.79489\"\n> +     inkscape:cy=\"423.24299\"\n> +     inkscape:window-width=\"1916\"\n> +     inkscape:window-height=\"1040\"\n> +     inkscape:window-x=\"0\"\n> +     inkscape:window-y=\"38\"\n> +     inkscape:window-maximized=\"1\"\n> +     inkscape:current-layer=\"layer1\">\n> +    <inkscape:grid\n> +       id=\"grid1\"\n> +       units=\"px\"\n> +       originx=\"0\"\n> +       originy=\"0\"\n> +       spacingx=\"0.26458334\"\n> +       spacingy=\"0.26458333\"\n> +       empcolor=\"#0000ff\"\n> +       empopacity=\"0.25098039\"\n> +       color=\"#0000ff\"\n> +       opacity=\"0.1254902\"\n> +       empspacing=\"5\"\n> +       dotted=\"false\"\n> +       gridanglex=\"30\"\n> +       gridanglez=\"30\"\n> +       visible=\"true\" />\n> +  </sodipodi:namedview>\n> +  <defs\n> +     id=\"defs1\" />\n> +  <g\n> +     inkscape:label=\"Layer 1\"\n> +     inkscape:groupmode=\"layer\"\n> +     id=\"layer1\">\n> +    <rect\n> +       style=\"fill:none;stroke:#000000;stroke-width:1.5875;stroke-dasharray:none;paint-order:markers stroke fill\"\n> +       id=\"rect1\"\n> +       width=\"152.88184\"\n> +       height=\"119.41136\"\n> +       x=\"-230.13461\"\n> +       y=\"-140.22527\"\n> +       transform=\"scale(-1)\" />\n> +    <rect\n> +       style=\"fill:none;stroke:#000000;stroke-width:1.5875;stroke-dasharray:none;paint-order:markers stroke fill\"\n> +       id=\"rect2\"\n> +       width=\"49.755535\"\n> +       height=\"36.468258\"\n> +       x=\"-214.75951\"\n> +       y=\"-123.2944\"\n> +       transform=\"scale(-1)\" />\n> +    <rect\n> +       style=\"fill:none;stroke:#000000;stroke-width:1.5875;stroke-dasharray:none;paint-order:markers stroke fill\"\n> +       id=\"rect2-5\"\n> +       width=\"49.755535\"\n> +       height=\"36.468258\"\n> +       x=\"-140.12086\"\n> +       y=\"-123.2944\"\n> +       transform=\"scale(-1)\" />\n> +    <g\n> +       id=\"g4\"\n> +       transform=\"rotate(180,154.17884,111.10368)\"\n> +       style=\"stroke-width:1.5875;stroke-dasharray:none\">\n> +      <rect\n> +         style=\"fill:none;stroke:#000000;stroke-width:1.5875;stroke-dasharray:none;paint-order:markers stroke fill\"\n> +         id=\"rect3\"\n> +         width=\"40.994682\"\n> +         height=\"43.605846\"\n> +         x=\"134.16664\"\n> +         y=\"157.24184\" />\n> +      <ellipse\n> +         style=\"fill:none;stroke:#000000;stroke-width:1.5875;stroke-dasharray:none;paint-order:markers stroke fill\"\n> +         id=\"path3\"\n> +         cx=\"140.15703\"\n> +         cy=\"176.44627\"\n> +         rx=\"1.889045\"\n> +         ry=\"1.925626\" />\n> +    </g>\n> +    <path\n> +       style=\"fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.5875;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1\"\n> +       d=\"m 62.412437,140.44163 182.514593,-0.20636 -91.81156,53.31576 z\"\n> +       id=\"path4\"\n> +       sodipodi:nodetypes=\"cccc\" />\n> +    <path\n> +       style=\"fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.5875;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1\"\n> +       d=\"m 107.60435,188.83847 -0.0285,-21.58135\"\n> +       id=\"path5\" />\n> +    <path\n> +       style=\"fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.5875;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1\"\n> +       d=\"m 91.781697,189.01815 -0.0959,-31.3303\"\n> +       id=\"path6\" />\n> +    <path\n> +       style=\"fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.5875;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1\"\n> +       d=\"m 112.94351,189.018 -25.282103,0.22061\"\n> +       id=\"path7\" />\n> +    <path\n> +       style=\"fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.5875;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1\"\n> +       d=\"m 112.17938,189.11102 0.0701,5.37579 -23.777873,0.0561 -0.0553,-5.31581\"\n> +       id=\"path8\" />\n> +    <path\n> +       style=\"fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.5875;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1\"\n> +       d=\"m 113.16312,196.59109 -25.254853,0.0254\"\n> +       id=\"path7-5\"\n> +       sodipodi:nodetypes=\"cc\" />\n> +    <path\n> +       style=\"fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.5875;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1\"\n> +       d=\"m 112.3375,195.90879 0.0455,5.42669 -23.777873,0.0561 -0.0553,-5.31581\"\n> +       id=\"path8-9\"\n> +       sodipodi:nodetypes=\"cccc\" />\n> +  </g>\n> +</svg>\n> diff --git a/Documentation/rotation/rotate180Mirror.svg b/Documentation/rotation/rotate180Mirror.svg\n> new file mode 100644\n> index 000000000000..d4a77d500d94\n> --- /dev/null\n> +++ b/Documentation/rotation/rotate180Mirror.svg\n> @@ -0,0 +1,135 @@\n> +<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n> +<!-- Created with Inkscape (http://www.inkscape.org/) -->\n> +\n> +<svg\n> +   width=\"297mm\"\n> +   height=\"210mm\"\n> +   viewBox=\"0 0 297 210\"\n> +   version=\"1.1\"\n> +   id=\"svg1\"\n> +   inkscape:version=\"1.3 (0e150ed6c4, 2023-07-21)\"\n> +   sodipodi:docname=\"rotate180Mirror.svg\"\n> +   xmlns:inkscape=\"http://www.inkscape.org/namespaces/inkscape\"\n> +   xmlns:sodipodi=\"http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd\"\n> +   xmlns=\"http://www.w3.org/2000/svg\"\n> +   xmlns:svg=\"http://www.w3.org/2000/svg\">\n> +  <sodipodi:namedview\n> +     id=\"namedview1\"\n> +     pagecolor=\"#ffffff\"\n> +     bordercolor=\"#666666\"\n> +     borderopacity=\"1.0\"\n> +     inkscape:showpageshadow=\"2\"\n> +     inkscape:pageopacity=\"0.0\"\n> +     inkscape:pagecheckerboard=\"0\"\n> +     inkscape:deskcolor=\"#d1d1d1\"\n> +     inkscape:document-units=\"mm\"\n> +     showgrid=\"true\"\n> +     showguides=\"false\"\n> +     inkscape:zoom=\"0.94272086\"\n> +     inkscape:cx=\"467.79489\"\n> +     inkscape:cy=\"423.24299\"\n> +     inkscape:window-width=\"1916\"\n> +     inkscape:window-height=\"1040\"\n> +     inkscape:window-x=\"0\"\n> +     inkscape:window-y=\"38\"\n> +     inkscape:window-maximized=\"1\"\n> +     inkscape:current-layer=\"layer1\">\n> +    <inkscape:grid\n> +       id=\"grid1\"\n> +       units=\"px\"\n> +       originx=\"0\"\n> +       originy=\"0\"\n> +       spacingx=\"0.26458334\"\n> +       spacingy=\"0.26458333\"\n> +       empcolor=\"#0000ff\"\n> +       empopacity=\"0.25098039\"\n> +       color=\"#0000ff\"\n> +       opacity=\"0.1254902\"\n> +       empspacing=\"5\"\n> +       dotted=\"false\"\n> +       gridanglex=\"30\"\n> +       gridanglez=\"30\"\n> +       visible=\"true\" />\n> +  </sodipodi:namedview>\n> +  <defs\n> +     id=\"defs1\" />\n> +  <g\n> +     inkscape:label=\"Layer 1\"\n> +     inkscape:groupmode=\"layer\"\n> +     id=\"layer1\">\n> +    <rect\n> +       style=\"fill:none;stroke:#000000;stroke-width:1.5875;stroke-dasharray:none;paint-order:markers stroke fill\"\n> +       id=\"rect1\"\n> +       width=\"152.88184\"\n> +       height=\"119.41136\"\n> +       x=\"77.237228\"\n> +       y=\"-140.22527\"\n> +       transform=\"scale(1,-1)\" />\n> +    <rect\n> +       style=\"fill:none;stroke:#000000;stroke-width:1.5875;stroke-dasharray:none;paint-order:markers stroke fill\"\n> +       id=\"rect2\"\n> +       width=\"49.755535\"\n> +       height=\"36.468258\"\n> +       x=\"92.612335\"\n> +       y=\"-123.2944\"\n> +       transform=\"scale(1,-1)\" />\n> +    <rect\n> +       style=\"fill:none;stroke:#000000;stroke-width:1.5875;stroke-dasharray:none;paint-order:markers stroke fill\"\n> +       id=\"rect2-5\"\n> +       width=\"49.755535\"\n> +       height=\"36.468258\"\n> +       x=\"167.25098\"\n> +       y=\"-123.2944\"\n> +       transform=\"scale(1,-1)\" />\n> +    <g\n> +       id=\"g4\"\n> +       transform=\"matrix(1,0,0,-1,-0.98584226,222.20736)\"\n> +       style=\"stroke-width:1.5875;stroke-dasharray:none\">\n> +      <rect\n> +         style=\"fill:none;stroke:#000000;stroke-width:1.5875;stroke-dasharray:none;paint-order:markers stroke fill\"\n> +         id=\"rect3\"\n> +         width=\"40.994682\"\n> +         height=\"43.605846\"\n> +         x=\"134.16664\"\n> +         y=\"157.24184\" />\n> +      <ellipse\n> +         style=\"fill:none;stroke:#000000;stroke-width:1.5875;stroke-dasharray:none;paint-order:markers stroke fill\"\n> +         id=\"path3\"\n> +         cx=\"140.15703\"\n> +         cy=\"176.44627\"\n> +         rx=\"1.889045\"\n> +         ry=\"1.925626\" />\n> +    </g>\n> +    <path\n> +       style=\"fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.5875;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1\"\n> +       d=\"M 244.9594,140.44163 62.444808,140.23527 154.25637,193.55103 Z\"\n> +       id=\"path4\"\n> +       sodipodi:nodetypes=\"cccc\" />\n> +    <path\n> +       style=\"fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.5875;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1\"\n> +       d=\"m 199.76749,188.83847 0.0285,-21.58135\"\n> +       id=\"path5\" />\n> +    <path\n> +       style=\"fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.5875;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1\"\n> +       d=\"m 215.59014,189.01815 0.0959,-31.3303\"\n> +       id=\"path6\" />\n> +    <path\n> +       style=\"fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.5875;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1\"\n> +       d=\"m 194.42833,189.018 25.2821,0.22061\"\n> +       id=\"path7\" />\n> +    <path\n> +       style=\"fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.5875;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1\"\n> +       d=\"m 195.19246,189.11102 -0.0701,5.37579 23.77787,0.0561 0.0553,-5.31581\"\n> +       id=\"path8\" />\n> +    <path\n> +       style=\"fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.5875;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1\"\n> +       d=\"m 194.20872,196.59109 25.25485,0.0254\"\n> +       id=\"path7-5\"\n> +       sodipodi:nodetypes=\"cc\" />\n> +    <path\n> +       style=\"fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.5875;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1\"\n> +       d=\"m 195.03434,195.90879 -0.0455,5.42669 23.77787,0.0561 0.0553,-5.31581\"\n> +       id=\"path8-9\"\n> +       sodipodi:nodetypes=\"cccc\" />\n> +  </g>\n> +</svg>\n> diff --git a/Documentation/rotation/rotate270.svg b/Documentation/rotation/rotate270.svg\n> new file mode 100644\n> index 000000000000..13ea1e5df918\n> --- /dev/null\n> +++ b/Documentation/rotation/rotate270.svg\n> @@ -0,0 +1,135 @@\n> +<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n> +<!-- Created with Inkscape (http://www.inkscape.org/) -->\n> +\n> +<svg\n> +   width=\"297mm\"\n> +   height=\"210mm\"\n> +   viewBox=\"0 0 297 210\"\n> +   version=\"1.1\"\n> +   id=\"svg1\"\n> +   inkscape:version=\"1.3 (0e150ed6c4, 2023-07-21)\"\n> +   sodipodi:docname=\"rotate270.svg\"\n> +   xmlns:inkscape=\"http://www.inkscape.org/namespaces/inkscape\"\n> +   xmlns:sodipodi=\"http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd\"\n> +   xmlns=\"http://www.w3.org/2000/svg\"\n> +   xmlns:svg=\"http://www.w3.org/2000/svg\">\n> +  <sodipodi:namedview\n> +     id=\"namedview1\"\n> +     pagecolor=\"#ffffff\"\n> +     bordercolor=\"#666666\"\n> +     borderopacity=\"1.0\"\n> +     inkscape:showpageshadow=\"2\"\n> +     inkscape:pageopacity=\"0.0\"\n> +     inkscape:pagecheckerboard=\"0\"\n> +     inkscape:deskcolor=\"#d1d1d1\"\n> +     inkscape:document-units=\"mm\"\n> +     showgrid=\"true\"\n> +     showguides=\"false\"\n> +     inkscape:zoom=\"0.94272086\"\n> +     inkscape:cx=\"467.26451\"\n> +     inkscape:cy=\"423.24299\"\n> +     inkscape:window-width=\"1916\"\n> +     inkscape:window-height=\"1040\"\n> +     inkscape:window-x=\"0\"\n> +     inkscape:window-y=\"38\"\n> +     inkscape:window-maximized=\"1\"\n> +     inkscape:current-layer=\"layer1\">\n> +    <inkscape:grid\n> +       id=\"grid1\"\n> +       units=\"px\"\n> +       originx=\"0\"\n> +       originy=\"0\"\n> +       spacingx=\"0.26458334\"\n> +       spacingy=\"0.26458333\"\n> +       empcolor=\"#0000ff\"\n> +       empopacity=\"0.25098039\"\n> +       color=\"#0000ff\"\n> +       opacity=\"0.1254902\"\n> +       empspacing=\"5\"\n> +       dotted=\"false\"\n> +       gridanglex=\"30\"\n> +       gridanglez=\"30\"\n> +       visible=\"true\" />\n> +  </sodipodi:namedview>\n> +  <defs\n> +     id=\"defs1\" />\n> +  <g\n> +     inkscape:label=\"Layer 1\"\n> +     inkscape:groupmode=\"layer\"\n> +     id=\"layer1\">\n> +    <rect\n> +       style=\"fill:none;stroke:#000000;stroke-width:1.5875;stroke-dasharray:none;paint-order:markers stroke fill\"\n> +       id=\"rect1\"\n> +       width=\"152.88184\"\n> +       height=\"119.41136\"\n> +       x=\"-187.55237\"\n> +       y=\"124.56432\"\n> +       transform=\"rotate(-90)\" />\n> +    <rect\n> +       style=\"fill:none;stroke:#000000;stroke-width:1.5875;stroke-dasharray:none;paint-order:markers stroke fill\"\n> +       id=\"rect2\"\n> +       width=\"49.755535\"\n> +       height=\"36.468258\"\n> +       x=\"-172.17726\"\n> +       y=\"141.49518\"\n> +       transform=\"rotate(-90)\" />\n> +    <rect\n> +       style=\"fill:none;stroke:#000000;stroke-width:1.5875;stroke-dasharray:none;paint-order:markers stroke fill\"\n> +       id=\"rect2-5\"\n> +       width=\"49.755535\"\n> +       height=\"36.468258\"\n> +       x=\"-97.538612\"\n> +       y=\"141.49518\"\n> +       transform=\"rotate(-90)\" />\n> +    <g\n> +       id=\"g4\"\n> +       transform=\"rotate(-90,154.17883,111.5966)\"\n> +       style=\"stroke-width:1.5875;stroke-dasharray:none\">\n> +      <rect\n> +         style=\"fill:none;stroke:#000000;stroke-width:1.5875;stroke-dasharray:none;paint-order:markers stroke fill\"\n> +         id=\"rect3\"\n> +         width=\"40.994682\"\n> +         height=\"43.605846\"\n> +         x=\"134.16664\"\n> +         y=\"157.24184\" />\n> +      <ellipse\n> +         style=\"fill:none;stroke:#000000;stroke-width:1.5875;stroke-dasharray:none;paint-order:markers stroke fill\"\n> +         id=\"path3\"\n> +         cx=\"140.15703\"\n> +         cy=\"176.44627\"\n> +         rx=\"1.889045\"\n> +         ry=\"1.925626\" />\n> +    </g>\n> +    <path\n> +       style=\"fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.5875;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1\"\n> +       d=\"M 124.34796,19.830188 124.55432,202.34478 71.238559,110.53322 Z\"\n> +       id=\"path4\"\n> +       sodipodi:nodetypes=\"cccc\" />\n> +    <path\n> +       style=\"fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.5875;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1\"\n> +       d=\"m 75.951119,65.022101 21.58135,-0.0285\"\n> +       id=\"path5\" />\n> +    <path\n> +       style=\"fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.5875;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1\"\n> +       d=\"m 75.771439,49.199448 31.330301,-0.0959\"\n> +       id=\"path6\" />\n> +    <path\n> +       style=\"fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.5875;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1\"\n> +       d=\"M 75.771589,70.361261 75.550979,45.079158\"\n> +       id=\"path7\" />\n> +    <path\n> +       style=\"fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.5875;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1\"\n> +       d=\"m 75.678569,69.597131 -5.37579,0.0701 -0.0561,-23.777873 5.31581,-0.0553\"\n> +       id=\"path8\" />\n> +    <path\n> +       style=\"fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.5875;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1\"\n> +       d=\"m 68.198499,70.580871 -0.0254,-25.254853\"\n> +       id=\"path7-5\"\n> +       sodipodi:nodetypes=\"cc\" />\n> +    <path\n> +       style=\"fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.5875;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1\"\n> +       d=\"m 68.880799,69.755251 -5.42669,0.0455 -0.0561,-23.777873 5.31581,-0.0553\"\n> +       id=\"path8-9\"\n> +       sodipodi:nodetypes=\"cccc\" />\n> +  </g>\n> +</svg>\n> diff --git a/Documentation/rotation/rotate270Mirror.svg b/Documentation/rotation/rotate270Mirror.svg\n> new file mode 100644\n> index 000000000000..6116f50aa96e\n> --- /dev/null\n> +++ b/Documentation/rotation/rotate270Mirror.svg\n> @@ -0,0 +1,135 @@\n> +<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n> +<!-- Created with Inkscape (http://www.inkscape.org/) -->\n> +\n> +<svg\n> +   width=\"297mm\"\n> +   height=\"210mm\"\n> +   viewBox=\"0 0 297 210\"\n> +   version=\"1.1\"\n> +   id=\"svg1\"\n> +   inkscape:version=\"1.3 (0e150ed6c4, 2023-07-21)\"\n> +   sodipodi:docname=\"rotate270Mirror.svg\"\n> +   xmlns:inkscape=\"http://www.inkscape.org/namespaces/inkscape\"\n> +   xmlns:sodipodi=\"http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd\"\n> +   xmlns=\"http://www.w3.org/2000/svg\"\n> +   xmlns:svg=\"http://www.w3.org/2000/svg\">\n> +  <sodipodi:namedview\n> +     id=\"namedview1\"\n> +     pagecolor=\"#ffffff\"\n> +     bordercolor=\"#666666\"\n> +     borderopacity=\"1.0\"\n> +     inkscape:showpageshadow=\"2\"\n> +     inkscape:pageopacity=\"0.0\"\n> +     inkscape:pagecheckerboard=\"0\"\n> +     inkscape:deskcolor=\"#d1d1d1\"\n> +     inkscape:document-units=\"mm\"\n> +     showgrid=\"true\"\n> +     showguides=\"false\"\n> +     inkscape:zoom=\"0.94272086\"\n> +     inkscape:cx=\"467.79489\"\n> +     inkscape:cy=\"423.24299\"\n> +     inkscape:window-width=\"1916\"\n> +     inkscape:window-height=\"1040\"\n> +     inkscape:window-x=\"0\"\n> +     inkscape:window-y=\"38\"\n> +     inkscape:window-maximized=\"1\"\n> +     inkscape:current-layer=\"layer1\">\n> +    <inkscape:grid\n> +       id=\"grid1\"\n> +       units=\"px\"\n> +       originx=\"0\"\n> +       originy=\"0\"\n> +       spacingx=\"0.26458334\"\n> +       spacingy=\"0.26458333\"\n> +       empcolor=\"#0000ff\"\n> +       empopacity=\"0.25098039\"\n> +       color=\"#0000ff\"\n> +       opacity=\"0.1254902\"\n> +       empspacing=\"5\"\n> +       dotted=\"false\"\n> +       gridanglex=\"30\"\n> +       gridanglez=\"30\"\n> +       visible=\"true\" />\n> +  </sodipodi:namedview>\n> +  <defs\n> +     id=\"defs1\" />\n> +  <g\n> +     inkscape:label=\"Layer 1\"\n> +     inkscape:groupmode=\"layer\"\n> +     id=\"layer1\">\n> +    <rect\n> +       style=\"fill:none;stroke:#000000;stroke-width:1.5875;stroke-dasharray:none;paint-order:markers stroke fill\"\n> +       id=\"rect1\"\n> +       width=\"152.88184\"\n> +       height=\"119.41136\"\n> +       x=\"-187.55237\"\n> +       y=\"-182.80751\"\n> +       transform=\"matrix(0,-1,-1,0,0,0)\" />\n> +    <rect\n> +       style=\"fill:none;stroke:#000000;stroke-width:1.5875;stroke-dasharray:none;paint-order:markers stroke fill\"\n> +       id=\"rect2\"\n> +       width=\"49.755535\"\n> +       height=\"36.468258\"\n> +       x=\"-172.17726\"\n> +       y=\"-165.87666\"\n> +       transform=\"matrix(0,-1,-1,0,0,0)\" />\n> +    <rect\n> +       style=\"fill:none;stroke:#000000;stroke-width:1.5875;stroke-dasharray:none;paint-order:markers stroke fill\"\n> +       id=\"rect2-5\"\n> +       width=\"49.755535\"\n> +       height=\"36.468258\"\n> +       x=\"-97.538612\"\n> +       y=\"-165.87666\"\n> +       transform=\"matrix(0,-1,-1,0,0,0)\" />\n> +    <g\n> +       id=\"g4\"\n> +       transform=\"matrix(0,-1,-1,0,264.78961,265.77543)\"\n> +       style=\"stroke-width:1.5875;stroke-dasharray:none\">\n> +      <rect\n> +         style=\"fill:none;stroke:#000000;stroke-width:1.5875;stroke-dasharray:none;paint-order:markers stroke fill\"\n> +         id=\"rect3\"\n> +         width=\"40.994682\"\n> +         height=\"43.605846\"\n> +         x=\"134.16664\"\n> +         y=\"157.24184\" />\n> +      <ellipse\n> +         style=\"fill:none;stroke:#000000;stroke-width:1.5875;stroke-dasharray:none;paint-order:markers stroke fill\"\n> +         id=\"path3\"\n> +         cx=\"140.15703\"\n> +         cy=\"176.44627\"\n> +         rx=\"1.889045\"\n> +         ry=\"1.925626\" />\n> +    </g>\n> +    <path\n> +       style=\"fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.5875;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1\"\n> +       d=\"m 183.02388,19.830188 -0.20636,182.514592 53.31576,-91.81156 z\"\n> +       id=\"path4\"\n> +       sodipodi:nodetypes=\"cccc\" />\n> +    <path\n> +       style=\"fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.5875;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1\"\n> +       d=\"m 231.42072,65.022101 -21.58135,-0.0285\"\n> +       id=\"path5\" />\n> +    <path\n> +       style=\"fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.5875;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1\"\n> +       d=\"m 231.6004,49.199448 -31.3303,-0.0959\"\n> +       id=\"path6\" />\n> +    <path\n> +       style=\"fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.5875;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1\"\n> +       d=\"m 231.60025,70.361261 0.22061,-25.282103\"\n> +       id=\"path7\" />\n> +    <path\n> +       style=\"fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.5875;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1\"\n> +       d=\"m 231.69327,69.597131 5.37579,0.0701 0.0561,-23.777873 -5.31581,-0.0553\"\n> +       id=\"path8\" />\n> +    <path\n> +       style=\"fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.5875;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1\"\n> +       d=\"m 239.17334,70.580871 0.0254,-25.254853\"\n> +       id=\"path7-5\"\n> +       sodipodi:nodetypes=\"cc\" />\n> +    <path\n> +       style=\"fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.5875;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1\"\n> +       d=\"m 238.49104,69.755251 5.42669,0.0455 0.0561,-23.777873 -5.31581,-0.0553\"\n> +       id=\"path8-9\"\n> +       sodipodi:nodetypes=\"cccc\" />\n> +  </g>\n> +</svg>\n> diff --git a/Documentation/rotation/rotate90.svg b/Documentation/rotation/rotate90.svg\n> new file mode 100644\n> index 000000000000..af6276383c79\n> --- /dev/null\n> +++ b/Documentation/rotation/rotate90.svg\n> @@ -0,0 +1,135 @@\n> +<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n> +<!-- Created with Inkscape (http://www.inkscape.org/) -->\n> +\n> +<svg\n> +   width=\"297mm\"\n> +   height=\"210mm\"\n> +   viewBox=\"0 0 297 210\"\n> +   version=\"1.1\"\n> +   id=\"svg1\"\n> +   inkscape:version=\"1.3 (0e150ed6c4, 2023-07-21)\"\n> +   sodipodi:docname=\"rotate90.svg\"\n> +   xmlns:inkscape=\"http://www.inkscape.org/namespaces/inkscape\"\n> +   xmlns:sodipodi=\"http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd\"\n> +   xmlns=\"http://www.w3.org/2000/svg\"\n> +   xmlns:svg=\"http://www.w3.org/2000/svg\">\n> +  <sodipodi:namedview\n> +     id=\"namedview1\"\n> +     pagecolor=\"#ffffff\"\n> +     bordercolor=\"#666666\"\n> +     borderopacity=\"1.0\"\n> +     inkscape:showpageshadow=\"2\"\n> +     inkscape:pageopacity=\"0.0\"\n> +     inkscape:pagecheckerboard=\"0\"\n> +     inkscape:deskcolor=\"#d1d1d1\"\n> +     inkscape:document-units=\"mm\"\n> +     showgrid=\"true\"\n> +     showguides=\"false\"\n> +     inkscape:zoom=\"0.94272086\"\n> +     inkscape:cx=\"467.26451\"\n> +     inkscape:cy=\"423.24299\"\n> +     inkscape:window-width=\"1916\"\n> +     inkscape:window-height=\"1040\"\n> +     inkscape:window-x=\"0\"\n> +     inkscape:window-y=\"38\"\n> +     inkscape:window-maximized=\"1\"\n> +     inkscape:current-layer=\"layer1\">\n> +    <inkscape:grid\n> +       id=\"grid1\"\n> +       units=\"px\"\n> +       originx=\"0\"\n> +       originy=\"0\"\n> +       spacingx=\"0.26458334\"\n> +       spacingy=\"0.26458333\"\n> +       empcolor=\"#0000ff\"\n> +       empopacity=\"0.25098039\"\n> +       color=\"#0000ff\"\n> +       opacity=\"0.1254902\"\n> +       empspacing=\"5\"\n> +       dotted=\"false\"\n> +       gridanglex=\"30\"\n> +       gridanglez=\"30\"\n> +       visible=\"true\" />\n> +  </sodipodi:namedview>\n> +  <defs\n> +     id=\"defs1\" />\n> +  <g\n> +     inkscape:label=\"Layer 1\"\n> +     inkscape:groupmode=\"layer\"\n> +     id=\"layer1\">\n> +    <rect\n> +       style=\"fill:none;stroke:#000000;stroke-width:1.5875;stroke-dasharray:none;paint-order:markers stroke fill\"\n> +       id=\"rect1\"\n> +       width=\"152.88184\"\n> +       height=\"119.41136\"\n> +       x=\"34.65498\"\n> +       y=\"-182.80751\"\n> +       transform=\"rotate(90)\" />\n> +    <rect\n> +       style=\"fill:none;stroke:#000000;stroke-width:1.5875;stroke-dasharray:none;paint-order:markers stroke fill\"\n> +       id=\"rect2\"\n> +       width=\"49.755535\"\n> +       height=\"36.468258\"\n> +       x=\"50.030079\"\n> +       y=\"-165.87665\"\n> +       transform=\"rotate(90)\" />\n> +    <rect\n> +       style=\"fill:none;stroke:#000000;stroke-width:1.5875;stroke-dasharray:none;paint-order:markers stroke fill\"\n> +       id=\"rect2-5\"\n> +       width=\"49.755535\"\n> +       height=\"36.468258\"\n> +       x=\"124.66872\"\n> +       y=\"-165.87665\"\n> +       transform=\"rotate(90)\" />\n> +    <g\n> +       id=\"g4\"\n> +       transform=\"rotate(90,154.17885,110.61076)\"\n> +       style=\"stroke-width:1.5875;stroke-dasharray:none\">\n> +      <rect\n> +         style=\"fill:none;stroke:#000000;stroke-width:1.5875;stroke-dasharray:none;paint-order:markers stroke fill\"\n> +         id=\"rect3\"\n> +         width=\"40.994682\"\n> +         height=\"43.605846\"\n> +         x=\"134.16664\"\n> +         y=\"157.24184\" />\n> +      <ellipse\n> +         style=\"fill:none;stroke:#000000;stroke-width:1.5875;stroke-dasharray:none;paint-order:markers stroke fill\"\n> +         id=\"path3\"\n> +         cx=\"140.15703\"\n> +         cy=\"176.44627\"\n> +         rx=\"1.889045\"\n> +         ry=\"1.925626\" />\n> +    </g>\n> +    <path\n> +       style=\"fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.5875;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1\"\n> +       d=\"m 183.02388,202.37715 -0.20636,-182.51459 53.31576,91.81156 z\"\n> +       id=\"path4\"\n> +       sodipodi:nodetypes=\"cccc\" />\n> +    <path\n> +       style=\"fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.5875;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1\"\n> +       d=\"m 231.42072,157.18524 -21.58135,0.0285\"\n> +       id=\"path5\" />\n> +    <path\n> +       style=\"fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.5875;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1\"\n> +       d=\"m 231.6004,173.00789 -31.3303,0.0959\"\n> +       id=\"path6\" />\n> +    <path\n> +       style=\"fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.5875;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1\"\n> +       d=\"m 231.60025,151.84608 0.22061,25.2821\"\n> +       id=\"path7\" />\n> +    <path\n> +       style=\"fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.5875;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1\"\n> +       d=\"m 231.69327,152.61021 5.37579,-0.0701 0.0561,23.77787 -5.31581,0.0553\"\n> +       id=\"path8\" />\n> +    <path\n> +       style=\"fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.5875;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1\"\n> +       d=\"m 239.17334,151.62647 0.0254,25.25485\"\n> +       id=\"path7-5\"\n> +       sodipodi:nodetypes=\"cc\" />\n> +    <path\n> +       style=\"fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.5875;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1\"\n> +       d=\"m 238.49104,152.45209 5.42669,-0.0455 0.0561,23.77787 -5.31581,0.0553\"\n> +       id=\"path8-9\"\n> +       sodipodi:nodetypes=\"cccc\" />\n> +  </g>\n> +</svg>\n> diff --git a/Documentation/rotation/rotate90Mirror.svg b/Documentation/rotation/rotate90Mirror.svg\n> new file mode 100644\n> index 000000000000..1760c46226ab\n> --- /dev/null\n> +++ b/Documentation/rotation/rotate90Mirror.svg\n> @@ -0,0 +1,135 @@\n> +<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n> +<!-- Created with Inkscape (http://www.inkscape.org/) -->\n> +\n> +<svg\n> +   width=\"297mm\"\n> +   height=\"210mm\"\n> +   viewBox=\"0 0 297 210\"\n> +   version=\"1.1\"\n> +   id=\"svg1\"\n> +   inkscape:version=\"1.3 (0e150ed6c4, 2023-07-21)\"\n> +   sodipodi:docname=\"rotate90Mirror.svg\"\n> +   xmlns:inkscape=\"http://www.inkscape.org/namespaces/inkscape\"\n> +   xmlns:sodipodi=\"http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd\"\n> +   xmlns=\"http://www.w3.org/2000/svg\"\n> +   xmlns:svg=\"http://www.w3.org/2000/svg\">\n> +  <sodipodi:namedview\n> +     id=\"namedview1\"\n> +     pagecolor=\"#ffffff\"\n> +     bordercolor=\"#666666\"\n> +     borderopacity=\"1.0\"\n> +     inkscape:showpageshadow=\"2\"\n> +     inkscape:pageopacity=\"0.0\"\n> +     inkscape:pagecheckerboard=\"0\"\n> +     inkscape:deskcolor=\"#d1d1d1\"\n> +     inkscape:document-units=\"mm\"\n> +     showgrid=\"true\"\n> +     showguides=\"false\"\n> +     inkscape:zoom=\"0.94272086\"\n> +     inkscape:cx=\"467.79489\"\n> +     inkscape:cy=\"423.24299\"\n> +     inkscape:window-width=\"1916\"\n> +     inkscape:window-height=\"1040\"\n> +     inkscape:window-x=\"0\"\n> +     inkscape:window-y=\"38\"\n> +     inkscape:window-maximized=\"1\"\n> +     inkscape:current-layer=\"layer1\">\n> +    <inkscape:grid\n> +       id=\"grid1\"\n> +       units=\"px\"\n> +       originx=\"0\"\n> +       originy=\"0\"\n> +       spacingx=\"0.26458334\"\n> +       spacingy=\"0.26458333\"\n> +       empcolor=\"#0000ff\"\n> +       empopacity=\"0.25098039\"\n> +       color=\"#0000ff\"\n> +       opacity=\"0.1254902\"\n> +       empspacing=\"5\"\n> +       dotted=\"false\"\n> +       gridanglex=\"30\"\n> +       gridanglez=\"30\"\n> +       visible=\"true\" />\n> +  </sodipodi:namedview>\n> +  <defs\n> +     id=\"defs1\" />\n> +  <g\n> +     inkscape:label=\"Layer 1\"\n> +     inkscape:groupmode=\"layer\"\n> +     id=\"layer1\">\n> +    <rect\n> +       style=\"fill:none;stroke:#000000;stroke-width:1.5875;stroke-dasharray:none;paint-order:markers stroke fill\"\n> +       id=\"rect1\"\n> +       width=\"152.88184\"\n> +       height=\"119.41136\"\n> +       x=\"34.65498\"\n> +       y=\"124.56432\"\n> +       transform=\"matrix(0,1,1,0,0,0)\" />\n> +    <rect\n> +       style=\"fill:none;stroke:#000000;stroke-width:1.5875;stroke-dasharray:none;paint-order:markers stroke fill\"\n> +       id=\"rect2\"\n> +       width=\"49.755535\"\n> +       height=\"36.468258\"\n> +       x=\"50.030079\"\n> +       y=\"141.49519\"\n> +       transform=\"matrix(0,1,1,0,0,0)\" />\n> +    <rect\n> +       style=\"fill:none;stroke:#000000;stroke-width:1.5875;stroke-dasharray:none;paint-order:markers stroke fill\"\n> +       id=\"rect2-5\"\n> +       width=\"49.755535\"\n> +       height=\"36.468258\"\n> +       x=\"124.66872\"\n> +       y=\"141.49519\"\n> +       transform=\"matrix(0,1,1,0,0,0)\" />\n> +    <g\n> +       id=\"g4\"\n> +       transform=\"matrix(0,1,1,0,42.582224,-43.56809)\"\n> +       style=\"stroke-width:1.5875;stroke-dasharray:none\">\n> +      <rect\n> +         style=\"fill:none;stroke:#000000;stroke-width:1.5875;stroke-dasharray:none;paint-order:markers stroke fill\"\n> +         id=\"rect3\"\n> +         width=\"40.994682\"\n> +         height=\"43.605846\"\n> +         x=\"134.16664\"\n> +         y=\"157.24184\" />\n> +      <ellipse\n> +         style=\"fill:none;stroke:#000000;stroke-width:1.5875;stroke-dasharray:none;paint-order:markers stroke fill\"\n> +         id=\"path3\"\n> +         cx=\"140.15703\"\n> +         cy=\"176.44627\"\n> +         rx=\"1.889045\"\n> +         ry=\"1.925626\" />\n> +    </g>\n> +    <path\n> +       style=\"fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.5875;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1\"\n> +       d=\"M 124.34795,202.37715 124.55431,19.86256 71.238554,111.67412 Z\"\n> +       id=\"path4\"\n> +       sodipodi:nodetypes=\"cccc\" />\n> +    <path\n> +       style=\"fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.5875;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1\"\n> +       d=\"m 75.951114,157.18524 21.58135,0.0285\"\n> +       id=\"path5\" />\n> +    <path\n> +       style=\"fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.5875;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1\"\n> +       d=\"m 75.771434,173.00789 31.330296,0.0959\"\n> +       id=\"path6\" />\n> +    <path\n> +       style=\"fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.5875;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1\"\n> +       d=\"m 75.771584,151.84608 -0.22061,25.2821\"\n> +       id=\"path7\" />\n> +    <path\n> +       style=\"fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.5875;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1\"\n> +       d=\"m 75.678564,152.61021 -5.37579,-0.0701 -0.0561,23.77787 5.31581,0.0553\"\n> +       id=\"path8\" />\n> +    <path\n> +       style=\"fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.5875;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1\"\n> +       d=\"m 68.198494,151.62647 -0.0254,25.25485\"\n> +       id=\"path7-5\"\n> +       sodipodi:nodetypes=\"cc\" />\n> +    <path\n> +       style=\"fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.5875;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1\"\n> +       d=\"m 68.880794,152.45209 -5.42669,-0.0455 -0.0561,23.77787 5.31581,0.0553\"\n> +       id=\"path8-9\"\n> +       sodipodi:nodetypes=\"cccc\" />\n> +  </g>\n> +</svg>\n> diff --git a/src/libcamera/orientation.cpp b/src/libcamera/orientation.cpp\n> index 61f26cfda31b..5caf76f73865 100644\n> --- a/src/libcamera/orientation.cpp\n> +++ b/src/libcamera/orientation.cpp\n> @@ -37,6 +37,23 @@ namespace libcamera {\n>   * In example Orientation::Rotate90Mirror describes the image transformation\n>   * obtained by rotating 90 degrees clockwise first and then applying an\n>   * horizontal mirroring.\n> + *\n> + * \\var CameraConfiguration::Rotate0\n> + * \\image html rotation/rotate0.svg\n> + * \\var CameraConfiguration::Rotate0Mirror\n> + * \\image html rotation/rotate0Mirror.svg\n> + * \\var CameraConfiguration::Rotate180\n> + * \\image html rotation/rotate180.svg\n> + * \\var CameraConfiguration::Rotate180Mirror\n> + * \\image html rotation/rotate180Mirror.svg\n> + * \\var CameraConfiguration::Rotate90Mirror\n> + * \\image html rotation/rotate90Mirror.svg\n> + * \\var CameraConfiguration::Rotate270\n> + * \\image html rotation/rotate270.svg\n> + * \\var CameraConfiguration::Rotate270Mirror\n> + * \\image html rotation/rotate270Mirror.svg\n> + * \\var CameraConfiguration::Rotate90\n> + * \\image html rotation/rotate90.svg\n>   */\n>  \n>  /**","headers":{"Return-Path":"<libcamera-devel-bounces@lists.libcamera.org>","X-Original-To":"parsemail@patchwork.libcamera.org","Delivered-To":"parsemail@patchwork.libcamera.org","Received":["from lancelot.ideasonboard.com (lancelot.ideasonboard.com\n\t[92.243.16.209])\n\tby patchwork.libcamera.org (Postfix) with ESMTPS id 84636BDCBD\n\tfor <parsemail@patchwork.libcamera.org>;\n\tMon, 23 Oct 2023 11:25:53 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id 094216297C;\n\tMon, 23 Oct 2023 13:25:53 +0200 (CEST)","from perceval.ideasonboard.com (perceval.ideasonboard.com\n\t[IPv6:2001:4b98:dc2:55:216:3eff:fef7:d647])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id ABBD461DCE\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tMon, 23 Oct 2023 13:25:51 +0200 (CEST)","from pendragon.ideasonboard.com (213-243-189-158.bb.dnainternet.fi\n\t[213.243.189.158])\n\tby perceval.ideasonboard.com (Postfix) with ESMTPSA id A4C8A2B6;\n\tMon, 23 Oct 2023 13:25:40 +0200 (CEST)"],"DKIM-Signature":["v=1; a=rsa-sha256; c=relaxed/simple; d=libcamera.org;\n\ts=mail; t=1698060353;\n\tbh=KIQ8cRo349Bjk+usxFoY61T4l8Qx1EdmmeIb8mg0htc=;\n\th=Date:To:References:In-Reply-To:Subject:List-Id:List-Unsubscribe:\n\tList-Archive:List-Post:List-Help:List-Subscribe:From:Reply-To:Cc:\n\tFrom;\n\tb=TMhXDoyvCZlZcDd8t21LVbRK9WXjMqhOSUgsNGU5hD6qeIM+jS0hi8hEPmT9+syWA\n\tneeZexi42PXX2ZSSxFk+hpytzu0Jgd8G1pZZ2ZXmLHzpIW8RA8MUNruH/lAM2+8eb7\n\t9AgqUY5PhIiVmq1vHS7ey7+Z7BMxoWPnIN6/q2rIn5lD6i4DW11WOhH5eq27X564Jb\n\tTxOESSxtnrC0cFshXsr9aYhklJE9G+0cyAxaWvgqK6zpt0GYyqDRy0XUFZgBb+03CG\n\t3qQKkldeanuF/gO/658GPaiakksDHgTzAnZsAX3GW3VDZwN1L8+qNZtxcY/FcKWsgj\n\tMaQX0QD6H65Xg==","v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com;\n\ts=mail; t=1698060341;\n\tbh=KIQ8cRo349Bjk+usxFoY61T4l8Qx1EdmmeIb8mg0htc=;\n\th=Date:From:To:Cc:Subject:References:In-Reply-To:From;\n\tb=ahC8QCDQPaDCxiu4RquX5ZlEYrVsfiGud+TTc6cq+/JD1SqTjJdYvAxnAlGFBacq+\n\tSqGGDzh+SBXvw28GcESXx8Jhm/l8qKHMovCaLU5dlFDAPQPetMM6jiB8Ud1CSDEyHV\n\tjgAtmwxv5Ks0js3SK05gymnWR45KKoJzlys8+b7M="],"Authentication-Results":"lancelot.ideasonboard.com; dkim=pass (1024-bit key; \n\tunprotected) header.d=ideasonboard.com\n\theader.i=@ideasonboard.com\n\theader.b=\"ahC8QCDQ\"; dkim-atps=neutral","Date":"Mon, 23 Oct 2023 14:25:59 +0300","To":"Jacopo Mondi <jacopo.mondi@ideasonboard.com>","Message-ID":"<20231023112559.GI3336@pendragon.ideasonboard.com>","References":"<20231019140133.32090-1-jacopo.mondi@ideasonboard.com>\n\t<20231019140133.32090-4-jacopo.mondi@ideasonboard.com>","MIME-Version":"1.0","Content-Type":"text/plain; charset=utf-8","Content-Disposition":"inline","In-Reply-To":"<20231019140133.32090-4-jacopo.mondi@ideasonboard.com>","Subject":"Re: [libcamera-devel] [PATCH v6 03/12] Documentation: Add figures\n\tto document Orientation","X-BeenThere":"libcamera-devel@lists.libcamera.org","X-Mailman-Version":"2.1.29","Precedence":"list","List-Id":"<libcamera-devel.lists.libcamera.org>","List-Unsubscribe":"<https://lists.libcamera.org/options/libcamera-devel>,\n\t<mailto:libcamera-devel-request@lists.libcamera.org?subject=unsubscribe>","List-Archive":"<https://lists.libcamera.org/pipermail/libcamera-devel/>","List-Post":"<mailto:libcamera-devel@lists.libcamera.org>","List-Help":"<mailto:libcamera-devel-request@lists.libcamera.org?subject=help>","List-Subscribe":"<https://lists.libcamera.org/listinfo/libcamera-devel>,\n\t<mailto:libcamera-devel-request@lists.libcamera.org?subject=subscribe>","From":"Laurent Pinchart via libcamera-devel\n\t<libcamera-devel@lists.libcamera.org>","Reply-To":"Laurent Pinchart <laurent.pinchart@ideasonboard.com>","Cc":"libcamera-devel@lists.libcamera.org","Errors-To":"libcamera-devel-bounces@lists.libcamera.org","Sender":"\"libcamera-devel\" <libcamera-devel-bounces@lists.libcamera.org>"}}]