Patch Detail
Show a patch.
GET /api/patches/19151/?format=api
{ "id": 19151, "url": "https://patchwork.libcamera.org/api/patches/19151/?format=api", "web_url": "https://patchwork.libcamera.org/patch/19151/", "project": { "id": 1, "url": "https://patchwork.libcamera.org/api/projects/1/?format=api", "name": "libcamera", "link_name": "libcamera", "list_id": "libcamera_core", "list_email": "libcamera-devel@lists.libcamera.org", "web_url": "", "scm_url": "", "webscm_url": "" }, "msgid": "<20231019140133.32090-4-jacopo.mondi@ideasonboard.com>", "date": "2023-10-19T14:01:24", "name": "[libcamera-devel,v6,03/12] Documentation: Add figures to document Orientation", "commit_ref": null, "pull_url": null, "state": "accepted", "archived": false, "hash": "ca9311b72eb8dfa38176913fac5a3492abdfdde4", "submitter": { "id": 143, "url": "https://patchwork.libcamera.org/api/people/143/?format=api", "name": "Jacopo Mondi", "email": "jacopo.mondi@ideasonboard.com" }, "delegate": null, "mbox": "https://patchwork.libcamera.org/patch/19151/mbox/", "series": [ { "id": 4053, "url": "https://patchwork.libcamera.org/api/series/4053/?format=api", "web_url": "https://patchwork.libcamera.org/project/libcamera/list/?series=4053", "date": "2023-10-19T14:01:21", "name": "libcamera: Replace CameraConfiguration::transform", "version": 6, "mbox": "https://patchwork.libcamera.org/series/4053/mbox/" } ], "comments": "https://patchwork.libcamera.org/api/patches/19151/comments/", "check": "pending", "checks": "https://patchwork.libcamera.org/api/patches/19151/checks/", "tags": {}, "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 52E88C3272\n\tfor <parsemail@patchwork.libcamera.org>;\n\tThu, 19 Oct 2023 14:01:55 +0000 (UTC)", "from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id 2CF2A6298A;\n\tThu, 19 Oct 2023 16:01:54 +0200 (CEST)", "from perceval.ideasonboard.com (perceval.ideasonboard.com\n\t[213.167.242.64])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id F10B362984\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tThu, 19 Oct 2023 16:01:50 +0200 (CEST)", "from uno.LocalDomain (93-61-96-190.ip145.fastwebnet.it\n\t[93.61.96.190])\n\tby perceval.ideasonboard.com (Postfix) with ESMTPSA id DB47110FF;\n\tThu, 19 Oct 2023 16:01:42 +0200 (CEST)" ], "DKIM-Signature": [ "v=1; a=rsa-sha256; c=relaxed/simple; d=libcamera.org;\n\ts=mail; t=1697724114;\n\tbh=vyVixfRAB1MoIguSxyUe4vvZ8DqCVVEBiQUjG4hWmss=;\n\th=To:Date:In-Reply-To:References:Subject:List-Id:List-Unsubscribe:\n\tList-Archive:List-Post:List-Help:List-Subscribe:From:Reply-To:Cc:\n\tFrom;\n\tb=AoDbRcERtShl6Ifj1GBWzxTcL3MYORnsB7tXPbaxC0Lt89/ZF5iF6i4MLU1eetDFB\n\tNnWa8fZgL+p57o/zPJUuV+c93qN/RTUgSk9RXNpdDUzSTs26p/uTCD5KNDow4crSkb\n\tKgmA0fQD8sagXrly3iPICrDcY9VAAbUJI6yyXrb4HH0v9JTWo4UG5mhFnEFb42n5WE\n\tTK/6VLyC9WwsiYI8HEZ40MwMZBlhxLgYRi9i1S7RtSYwov2URJvW4WupOVQG5Wk3iI\n\t1HHqxBrH7TGhZVz+QM/r9UqgG8/jT5Sqz2A7SsxBzPc/fHQBSmmETICtm5Bw8e1CkG\n\ttoVmKSx9RGVQA==", "v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com;\n\ts=mail; t=1697724103;\n\tbh=vyVixfRAB1MoIguSxyUe4vvZ8DqCVVEBiQUjG4hWmss=;\n\th=From:To:Cc:Subject:Date:In-Reply-To:References:From;\n\tb=Ei5HJ3L/trJk5AMx8ZKC91V0Fy7v1yFeme3pPlujvAH2Ltr/6tboloYs7rVQUy5OS\n\tzgYb2xsYSUiCc31JUOHtaYjHannULdwbuuCQMoDEhpQkTJ1Mnlc3M0z94tJEXuIvlD\n\tUwy9fNcJ4Qr3hM6Qr/RM84D1D18jTMudFxJwLKOg=" ], "Authentication-Results": "lancelot.ideasonboard.com; dkim=pass (1024-bit key; \n\tunprotected) header.d=ideasonboard.com\n\theader.i=@ideasonboard.com\n\theader.b=\"Ei5HJ3L/\"; dkim-atps=neutral", "To": "libcamera-devel@lists.libcamera.org", "Date": "Thu, 19 Oct 2023 16:01:24 +0200", "Message-ID": "<20231019140133.32090-4-jacopo.mondi@ideasonboard.com>", "X-Mailer": "git-send-email 2.42.0", "In-Reply-To": "<20231019140133.32090-1-jacopo.mondi@ideasonboard.com>", "References": "<20231019140133.32090-1-jacopo.mondi@ideasonboard.com>", "MIME-Version": "1.0", "Content-Transfer-Encoding": "8bit", "Subject": "[libcamera-devel] [PATCH v6 03/12] Documentation: Add figures to\n\tdocument 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": "Jacopo Mondi via libcamera-devel <libcamera-devel@lists.libcamera.org>", "Reply-To": "Jacopo Mondi <jacopo.mondi@ideasonboard.com>", "Cc": "Jacopo Mondi <jacopo.mondi@ideasonboard.com>", "Errors-To": "libcamera-devel-bounces@lists.libcamera.org", "Sender": "\"libcamera-devel\" <libcamera-devel-bounces@lists.libcamera.org>" }, "content": "Add figures in Documentation/rotation/ to document the plane\ntransformations defined by the Orientation enumeration.\n\nSigned-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", "diff": "diff --git a/Documentation/Doxyfile.in b/Documentation/Doxyfile.in\nindex 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+\n PREDEFINED = __DOXYGEN__ \\\n __cplusplus \\\n __attribute__(x)= \\\ndiff --git a/Documentation/rotation/rotate0.svg b/Documentation/rotation/rotate0.svg\nnew file mode 100644\nindex 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>\ndiff --git a/Documentation/rotation/rotate0Mirror.svg b/Documentation/rotation/rotate0Mirror.svg\nnew file mode 100644\nindex 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>\ndiff --git a/Documentation/rotation/rotate180.svg b/Documentation/rotation/rotate180.svg\nnew file mode 100644\nindex 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>\ndiff --git a/Documentation/rotation/rotate180Mirror.svg b/Documentation/rotation/rotate180Mirror.svg\nnew file mode 100644\nindex 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>\ndiff --git a/Documentation/rotation/rotate270.svg b/Documentation/rotation/rotate270.svg\nnew file mode 100644\nindex 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>\ndiff --git a/Documentation/rotation/rotate270Mirror.svg b/Documentation/rotation/rotate270Mirror.svg\nnew file mode 100644\nindex 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>\ndiff --git a/Documentation/rotation/rotate90.svg b/Documentation/rotation/rotate90.svg\nnew file mode 100644\nindex 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>\ndiff --git a/Documentation/rotation/rotate90Mirror.svg b/Documentation/rotation/rotate90Mirror.svg\nnew file mode 100644\nindex 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>\ndiff --git a/src/libcamera/orientation.cpp b/src/libcamera/orientation.cpp\nindex 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 /**\n", "prefixes": [ "libcamera-devel", "v6", "03/12" ] }