summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJacopo Mondi <jacopo.mondi@ideasonboard.com>2023-10-19 16:01:24 +0200
committerLaurent Pinchart <laurent.pinchart@ideasonboard.com>2023-10-23 16:05:54 +0300
commit891720ae8c7c616660a8400855cf8a9f408902cc (patch)
treeedeee67b6b841e1d02f4daaf718aa535ad32ab2b
parentcc65629b68d49d5f2a4d61537584c56ba510a335 (diff)
Documentation: Add figures to document Orientation
Add figures in Documentation/rotation/ to document the plane transformations defined by the Orientation enumeration. Signed-off-by: Jacopo Mondi <jacopo.mondi@ideasonboard.com> Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com> Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
-rw-r--r--Documentation/Doxyfile.in2
-rw-r--r--Documentation/images/rotation/rotate0.svg132
-rw-r--r--Documentation/images/rotation/rotate0Mirror.svg135
-rw-r--r--Documentation/images/rotation/rotate180.svg135
-rw-r--r--Documentation/images/rotation/rotate180Mirror.svg135
-rw-r--r--Documentation/images/rotation/rotate270.svg135
-rw-r--r--Documentation/images/rotation/rotate270Mirror.svg135
-rw-r--r--Documentation/images/rotation/rotate90.svg135
-rw-r--r--Documentation/images/rotation/rotate90Mirror.svg135
-rw-r--r--src/libcamera/orientation.cpp17
10 files changed, 1096 insertions, 0 deletions
diff --git a/Documentation/Doxyfile.in b/Documentation/Doxyfile.in
index 697a14d1..a86ea6c1 100644
--- a/Documentation/Doxyfile.in
+++ b/Documentation/Doxyfile.in
@@ -78,6 +78,8 @@ EXPAND_ONLY_PREDEF = YES
INCLUDE_PATH = "@TOP_SRCDIR@/include/libcamera"
INCLUDE_FILE_PATTERNS = *.h
+IMAGE_PATH = "@TOP_SRCDIR@/Documentation/images"
+
PREDEFINED = __DOXYGEN__ \
__cplusplus \
__attribute__(x)= \
diff --git a/Documentation/images/rotation/rotate0.svg b/Documentation/images/rotation/rotate0.svg
new file mode 100644
index 00000000..13cde16a
--- /dev/null
+++ b/Documentation/images/rotation/rotate0.svg
@@ -0,0 +1,132 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ width="297mm"
+ height="210mm"
+ viewBox="0 0 297 210"
+ version="1.1"
+ id="svg1"
+ inkscape:version="1.3 (0e150ed6c4, 2023-07-21)"
+ sodipodi:docname="rotate0.svg"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:svg="http://www.w3.org/2000/svg">
+ <sodipodi:namedview
+ id="namedview1"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:showpageshadow="2"
+ inkscape:pageopacity="0.0"
+ inkscape:pagecheckerboard="0"
+ inkscape:deskcolor="#d1d1d1"
+ inkscape:document-units="mm"
+ showgrid="true"
+ showguides="false"
+ inkscape:zoom="1.4854147"
+ inkscape:cx="666.48052"
+ inkscape:cy="448.35962"
+ inkscape:window-width="1916"
+ inkscape:window-height="1040"
+ inkscape:window-x="0"
+ inkscape:window-y="38"
+ inkscape:window-maximized="1"
+ inkscape:current-layer="layer1">
+ <inkscape:grid
+ id="grid1"
+ units="px"
+ originx="0"
+ originy="0"
+ spacingx="0.26458334"
+ spacingy="0.26458333"
+ empcolor="#0000ff"
+ empopacity="0.25098039"
+ color="#0000ff"
+ opacity="0.1254902"
+ empspacing="5"
+ dotted="false"
+ gridanglex="30"
+ gridanglez="30"
+ visible="true" />
+ </sodipodi:namedview>
+ <defs
+ id="defs1" />
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1">
+ <rect
+ style="fill:none;stroke:#000000;stroke-width:1.5875;paint-order:markers stroke fill;stroke-dasharray:none"
+ id="rect1"
+ width="152.88184"
+ height="119.41136"
+ x="77.237244"
+ y="81.982094" />
+ <rect
+ style="fill:none;stroke:#000000;stroke-width:1.5875;paint-order:markers stroke fill;stroke-dasharray:none"
+ id="rect2"
+ width="49.755535"
+ height="36.468258"
+ x="92.612343"
+ y="98.912964" />
+ <rect
+ style="fill:none;stroke:#000000;stroke-width:1.5875;stroke-dasharray:none;paint-order:markers stroke fill"
+ id="rect2-5"
+ width="49.755535"
+ height="36.468258"
+ x="167.25099"
+ y="98.912964" />
+ <g
+ id="g4"
+ transform="translate(-0.98582077)"
+ style="stroke-width:1.5875;stroke-dasharray:none">
+ <rect
+ style="fill:none;stroke:#000000;stroke-width:1.5875;stroke-dasharray:none;paint-order:markers stroke fill"
+ id="rect3"
+ width="40.994682"
+ height="43.605846"
+ x="134.16664"
+ y="157.24184" />
+ <ellipse
+ style="fill:none;stroke:#000000;stroke-width:1.5875;stroke-dasharray:none;paint-order:markers stroke fill"
+ id="path3"
+ cx="140.15703"
+ cy="176.44627"
+ rx="1.889045"
+ ry="1.925626" />
+ </g>
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.5875;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1"
+ d="M 244.95942,81.765726 62.444825,81.97209 154.25639,28.65633 Z"
+ id="path4"
+ sodipodi:nodetypes="cccc" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.5875;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;stroke-dasharray:none"
+ d="m 199.76751,33.368887 0.0285,21.581353"
+ id="path5" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.5875;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;stroke-dasharray:none"
+ d="m 215.59016,33.189206 0.0959,31.330304"
+ id="path6" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.5875;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1"
+ d="m 194.42835,33.189356 25.2821,-0.220612"
+ id="path7" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.5875;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;stroke-dasharray:none"
+ d="m 195.19248,33.096339 -0.0701,-5.375793 23.77787,-0.05613 0.0553,5.315811"
+ id="path8" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.5875;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1"
+ d="m 194.20874,25.616264 25.25485,-0.02536"
+ id="path7-5"
+ sodipodi:nodetypes="cc" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.5875;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1"
+ d="m 195.03436,26.298566 -0.0455,-5.426692 23.77787,-0.05613 0.0553,5.315811"
+ id="path8-9"
+ sodipodi:nodetypes="cccc" />
+ </g>
+</svg>
diff --git a/Documentation/images/rotation/rotate0Mirror.svg b/Documentation/images/rotation/rotate0Mirror.svg
new file mode 100644
index 00000000..a7edda87
--- /dev/null
+++ b/Documentation/images/rotation/rotate0Mirror.svg
@@ -0,0 +1,135 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ width="297mm"
+ height="210mm"
+ viewBox="0 0 297 210"
+ version="1.1"
+ id="svg1"
+ inkscape:version="1.3 (0e150ed6c4, 2023-07-21)"
+ sodipodi:docname="rotate0Mirror.svg"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:svg="http://www.w3.org/2000/svg">
+ <sodipodi:namedview
+ id="namedview1"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:showpageshadow="2"
+ inkscape:pageopacity="0.0"
+ inkscape:pagecheckerboard="0"
+ inkscape:deskcolor="#d1d1d1"
+ inkscape:document-units="mm"
+ showgrid="true"
+ showguides="false"
+ inkscape:zoom="0.82900578"
+ inkscape:cx="599.51331"
+ inkscape:cy="579.00682"
+ inkscape:window-width="1916"
+ inkscape:window-height="1040"
+ inkscape:window-x="0"
+ inkscape:window-y="38"
+ inkscape:window-maximized="1"
+ inkscape:current-layer="layer1">
+ <inkscape:grid
+ id="grid1"
+ units="px"
+ originx="0"
+ originy="0"
+ spacingx="0.26458334"
+ spacingy="0.26458333"
+ empcolor="#0000ff"
+ empopacity="0.25098039"
+ color="#0000ff"
+ opacity="0.1254902"
+ empspacing="5"
+ dotted="false"
+ gridanglex="30"
+ gridanglez="30"
+ visible="true" />
+ </sodipodi:namedview>
+ <defs
+ id="defs1" />
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1">
+ <rect
+ style="fill:none;stroke:#000000;stroke-width:1.5875;stroke-dasharray:none;paint-order:markers stroke fill"
+ id="rect1"
+ width="152.88184"
+ height="119.41136"
+ x="-230.13463"
+ y="81.982094"
+ transform="scale(-1,1)" />
+ <rect
+ style="fill:none;stroke:#000000;stroke-width:1.5875;stroke-dasharray:none;paint-order:markers stroke fill"
+ id="rect2"
+ width="49.755535"
+ height="36.468258"
+ x="-214.75954"
+ y="98.912964"
+ transform="scale(-1,1)" />
+ <rect
+ style="fill:none;stroke:#000000;stroke-width:1.5875;stroke-dasharray:none;paint-order:markers stroke fill"
+ id="rect2-5"
+ width="49.755535"
+ height="36.468258"
+ x="-140.12088"
+ y="98.912964"
+ transform="scale(-1,1)" />
+ <g
+ id="g4"
+ transform="matrix(-1,0,0,1,308.35769,0)"
+ style="stroke-width:1.5875;stroke-dasharray:none">
+ <rect
+ style="fill:none;stroke:#000000;stroke-width:1.5875;stroke-dasharray:none;paint-order:markers stroke fill"
+ id="rect3"
+ width="40.994682"
+ height="43.605846"
+ x="134.16664"
+ y="157.24184" />
+ <ellipse
+ style="fill:none;stroke:#000000;stroke-width:1.5875;stroke-dasharray:none;paint-order:markers stroke fill"
+ id="path3"
+ cx="140.15703"
+ cy="176.44627"
+ rx="1.889045"
+ ry="1.925626" />
+ </g>
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.5875;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1"
+ d="M 62.412454,81.765726 244.92705,81.97209 153.11548,28.65633 Z"
+ id="path4"
+ sodipodi:nodetypes="cccc" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.5875;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1"
+ d="m 107.60436,33.368887 -0.0285,21.581353"
+ id="path5" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.5875;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1"
+ d="m 91.781714,33.189206 -0.0959,31.330304"
+ id="path6" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.5875;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1"
+ d="M 112.94352,33.189356 87.661424,32.968744"
+ id="path7" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.5875;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1"
+ d="m 112.17939,33.096339 0.0701,-5.375793 -23.777866,-0.05613 -0.0553,5.315811"
+ id="path8" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.5875;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1"
+ d="M 113.16313,25.616264 87.908284,25.590904"
+ id="path7-5"
+ sodipodi:nodetypes="cc" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.5875;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1"
+ d="m 112.33751,26.298566 0.0455,-5.426692 -23.777866,-0.05613 -0.0553,5.315811"
+ id="path8-9"
+ sodipodi:nodetypes="cccc" />
+ </g>
+</svg>
diff --git a/Documentation/images/rotation/rotate180.svg b/Documentation/images/rotation/rotate180.svg
new file mode 100644
index 00000000..d092a532
--- /dev/null
+++ b/Documentation/images/rotation/rotate180.svg
@@ -0,0 +1,135 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ width="297mm"
+ height="210mm"
+ viewBox="0 0 297 210"
+ version="1.1"
+ id="svg1"
+ inkscape:version="1.3 (0e150ed6c4, 2023-07-21)"
+ sodipodi:docname="rotate180.svg"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:svg="http://www.w3.org/2000/svg">
+ <sodipodi:namedview
+ id="namedview1"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:showpageshadow="2"
+ inkscape:pageopacity="0.0"
+ inkscape:pagecheckerboard="0"
+ inkscape:deskcolor="#d1d1d1"
+ inkscape:document-units="mm"
+ showgrid="true"
+ showguides="false"
+ inkscape:zoom="0.94272086"
+ inkscape:cx="467.79489"
+ inkscape:cy="423.24299"
+ inkscape:window-width="1916"
+ inkscape:window-height="1040"
+ inkscape:window-x="0"
+ inkscape:window-y="38"
+ inkscape:window-maximized="1"
+ inkscape:current-layer="layer1">
+ <inkscape:grid
+ id="grid1"
+ units="px"
+ originx="0"
+ originy="0"
+ spacingx="0.26458334"
+ spacingy="0.26458333"
+ empcolor="#0000ff"
+ empopacity="0.25098039"
+ color="#0000ff"
+ opacity="0.1254902"
+ empspacing="5"
+ dotted="false"
+ gridanglex="30"
+ gridanglez="30"
+ visible="true" />
+ </sodipodi:namedview>
+ <defs
+ id="defs1" />
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1">
+ <rect
+ style="fill:none;stroke:#000000;stroke-width:1.5875;stroke-dasharray:none;paint-order:markers stroke fill"
+ id="rect1"
+ width="152.88184"
+ height="119.41136"
+ x="-230.13461"
+ y="-140.22527"
+ transform="scale(-1)" />
+ <rect
+ style="fill:none;stroke:#000000;stroke-width:1.5875;stroke-dasharray:none;paint-order:markers stroke fill"
+ id="rect2"
+ width="49.755535"
+ height="36.468258"
+ x="-214.75951"
+ y="-123.2944"
+ transform="scale(-1)" />
+ <rect
+ style="fill:none;stroke:#000000;stroke-width:1.5875;stroke-dasharray:none;paint-order:markers stroke fill"
+ id="rect2-5"
+ width="49.755535"
+ height="36.468258"
+ x="-140.12086"
+ y="-123.2944"
+ transform="scale(-1)" />
+ <g
+ id="g4"
+ transform="rotate(180,154.17884,111.10368)"
+ style="stroke-width:1.5875;stroke-dasharray:none">
+ <rect
+ style="fill:none;stroke:#000000;stroke-width:1.5875;stroke-dasharray:none;paint-order:markers stroke fill"
+ id="rect3"
+ width="40.994682"
+ height="43.605846"
+ x="134.16664"
+ y="157.24184" />
+ <ellipse
+ style="fill:none;stroke:#000000;stroke-width:1.5875;stroke-dasharray:none;paint-order:markers stroke fill"
+ id="path3"
+ cx="140.15703"
+ cy="176.44627"
+ rx="1.889045"
+ ry="1.925626" />
+ </g>
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.5875;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1"
+ d="m 62.412437,140.44163 182.514593,-0.20636 -91.81156,53.31576 z"
+ id="path4"
+ sodipodi:nodetypes="cccc" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.5875;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1"
+ d="m 107.60435,188.83847 -0.0285,-21.58135"
+ id="path5" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.5875;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1"
+ d="m 91.781697,189.01815 -0.0959,-31.3303"
+ id="path6" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.5875;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1"
+ d="m 112.94351,189.018 -25.282103,0.22061"
+ id="path7" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.5875;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1"
+ d="m 112.17938,189.11102 0.0701,5.37579 -23.777873,0.0561 -0.0553,-5.31581"
+ id="path8" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.5875;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1"
+ d="m 113.16312,196.59109 -25.254853,0.0254"
+ id="path7-5"
+ sodipodi:nodetypes="cc" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.5875;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1"
+ d="m 112.3375,195.90879 0.0455,5.42669 -23.777873,0.0561 -0.0553,-5.31581"
+ id="path8-9"
+ sodipodi:nodetypes="cccc" />
+ </g>
+</svg>
diff --git a/Documentation/images/rotation/rotate180Mirror.svg b/Documentation/images/rotation/rotate180Mirror.svg
new file mode 100644
index 00000000..d4a77d50
--- /dev/null
+++ b/Documentation/images/rotation/rotate180Mirror.svg
@@ -0,0 +1,135 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ width="297mm"
+ height="210mm"
+ viewBox="0 0 297 210"
+ version="1.1"
+ id="svg1"
+ inkscape:version="1.3 (0e150ed6c4, 2023-07-21)"
+ sodipodi:docname="rotate180Mirror.svg"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:svg="http://www.w3.org/2000/svg">
+ <sodipodi:namedview
+ id="namedview1"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:showpageshadow="2"
+ inkscape:pageopacity="0.0"
+ inkscape:pagecheckerboard="0"
+ inkscape:deskcolor="#d1d1d1"
+ inkscape:document-units="mm"
+ showgrid="true"
+ showguides="false"
+ inkscape:zoom="0.94272086"
+ inkscape:cx="467.79489"
+ inkscape:cy="423.24299"
+ inkscape:window-width="1916"
+ inkscape:window-height="1040"
+ inkscape:window-x="0"
+ inkscape:window-y="38"
+ inkscape:window-maximized="1"
+ inkscape:current-layer="layer1">
+ <inkscape:grid
+ id="grid1"
+ units="px"
+ originx="0"
+ originy="0"
+ spacingx="0.26458334"
+ spacingy="0.26458333"
+ empcolor="#0000ff"
+ empopacity="0.25098039"
+ color="#0000ff"
+ opacity="0.1254902"
+ empspacing="5"
+ dotted="false"
+ gridanglex="30"
+ gridanglez="30"
+ visible="true" />
+ </sodipodi:namedview>
+ <defs
+ id="defs1" />
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1">
+ <rect
+ style="fill:none;stroke:#000000;stroke-width:1.5875;stroke-dasharray:none;paint-order:markers stroke fill"
+ id="rect1"
+ width="152.88184"
+ height="119.41136"
+ x="77.237228"
+ y="-140.22527"
+ transform="scale(1,-1)" />
+ <rect
+ style="fill:none;stroke:#000000;stroke-width:1.5875;stroke-dasharray:none;paint-order:markers stroke fill"
+ id="rect2"
+ width="49.755535"
+ height="36.468258"
+ x="92.612335"
+ y="-123.2944"
+ transform="scale(1,-1)" />
+ <rect
+ style="fill:none;stroke:#000000;stroke-width:1.5875;stroke-dasharray:none;paint-order:markers stroke fill"
+ id="rect2-5"
+ width="49.755535"
+ height="36.468258"
+ x="167.25098"
+ y="-123.2944"
+ transform="scale(1,-1)" />
+ <g
+ id="g4"
+ transform="matrix(1,0,0,-1,-0.98584226,222.20736)"
+ style="stroke-width:1.5875;stroke-dasharray:none">
+ <rect
+ style="fill:none;stroke:#000000;stroke-width:1.5875;stroke-dasharray:none;paint-order:markers stroke fill"
+ id="rect3"
+ width="40.994682"
+ height="43.605846"
+ x="134.16664"
+ y="157.24184" />
+ <ellipse
+ style="fill:none;stroke:#000000;stroke-width:1.5875;stroke-dasharray:none;paint-order:markers stroke fill"
+ id="path3"
+ cx="140.15703"
+ cy="176.44627"
+ rx="1.889045"
+ ry="1.925626" />
+ </g>
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.5875;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1"
+ d="M 244.9594,140.44163 62.444808,140.23527 154.25637,193.55103 Z"
+ id="path4"
+ sodipodi:nodetypes="cccc" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.5875;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1"
+ d="m 199.76749,188.83847 0.0285,-21.58135"
+ id="path5" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.5875;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1"
+ d="m 215.59014,189.01815 0.0959,-31.3303"
+ id="path6" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.5875;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1"
+ d="m 194.42833,189.018 25.2821,0.22061"
+ id="path7" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.5875;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1"
+ d="m 195.19246,189.11102 -0.0701,5.37579 23.77787,0.0561 0.0553,-5.31581"
+ id="path8" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.5875;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1"
+ d="m 194.20872,196.59109 25.25485,0.0254"
+ id="path7-5"
+ sodipodi:nodetypes="cc" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.5875;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1"
+ d="m 195.03434,195.90879 -0.0455,5.42669 23.77787,0.0561 0.0553,-5.31581"
+ id="path8-9"
+ sodipodi:nodetypes="cccc" />
+ </g>
+</svg>
diff --git a/Documentation/images/rotation/rotate270.svg b/Documentation/images/rotation/rotate270.svg
new file mode 100644
index 00000000..13ea1e5d
--- /dev/null
+++ b/Documentation/images/rotation/rotate270.svg
@@ -0,0 +1,135 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ width="297mm"
+ height="210mm"
+ viewBox="0 0 297 210"
+ version="1.1"
+ id="svg1"
+ inkscape:version="1.3 (0e150ed6c4, 2023-07-21)"
+ sodipodi:docname="rotate270.svg"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:svg="http://www.w3.org/2000/svg">
+ <sodipodi:namedview
+ id="namedview1"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:showpageshadow="2"
+ inkscape:pageopacity="0.0"
+ inkscape:pagecheckerboard="0"
+ inkscape:deskcolor="#d1d1d1"
+ inkscape:document-units="mm"
+ showgrid="true"
+ showguides="false"
+ inkscape:zoom="0.94272086"
+ inkscape:cx="467.26451"
+ inkscape:cy="423.24299"
+ inkscape:window-width="1916"
+ inkscape:window-height="1040"
+ inkscape:window-x="0"
+ inkscape:window-y="38"
+ inkscape:window-maximized="1"
+ inkscape:current-layer="layer1">
+ <inkscape:grid
+ id="grid1"
+ units="px"
+ originx="0"
+ originy="0"
+ spacingx="0.26458334"
+ spacingy="0.26458333"
+ empcolor="#0000ff"
+ empopacity="0.25098039"
+ color="#0000ff"
+ opacity="0.1254902"
+ empspacing="5"
+ dotted="false"
+ gridanglex="30"
+ gridanglez="30"
+ visible="true" />
+ </sodipodi:namedview>
+ <defs
+ id="defs1" />
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1">
+ <rect
+ style="fill:none;stroke:#000000;stroke-width:1.5875;stroke-dasharray:none;paint-order:markers stroke fill"
+ id="rect1"
+ width="152.88184"
+ height="119.41136"
+ x="-187.55237"
+ y="124.56432"
+ transform="rotate(-90)" />
+ <rect
+ style="fill:none;stroke:#000000;stroke-width:1.5875;stroke-dasharray:none;paint-order:markers stroke fill"
+ id="rect2"
+ width="49.755535"
+ height="36.468258"
+ x="-172.17726"
+ y="141.49518"
+ transform="rotate(-90)" />
+ <rect
+ style="fill:none;stroke:#000000;stroke-width:1.5875;stroke-dasharray:none;paint-order:markers stroke fill"
+ id="rect2-5"
+ width="49.755535"
+ height="36.468258"
+ x="-97.538612"
+ y="141.49518"
+ transform="rotate(-90)" />
+ <g
+ id="g4"
+ transform="rotate(-90,154.17883,111.5966)"
+ style="stroke-width:1.5875;stroke-dasharray:none">
+ <rect
+ style="fill:none;stroke:#000000;stroke-width:1.5875;stroke-dasharray:none;paint-order:markers stroke fill"
+ id="rect3"
+ width="40.994682"
+ height="43.605846"
+ x="134.16664"
+ y="157.24184" />
+ <ellipse
+ style="fill:none;stroke:#000000;stroke-width:1.5875;stroke-dasharray:none;paint-order:markers stroke fill"
+ id="path3"
+ cx="140.15703"
+ cy="176.44627"
+ rx="1.889045"
+ ry="1.925626" />
+ </g>
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.5875;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1"
+ d="M 124.34796,19.830188 124.55432,202.34478 71.238559,110.53322 Z"
+ id="path4"
+ sodipodi:nodetypes="cccc" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.5875;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1"
+ d="m 75.951119,65.022101 21.58135,-0.0285"
+ id="path5" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.5875;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1"
+ d="m 75.771439,49.199448 31.330301,-0.0959"
+ id="path6" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.5875;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1"
+ d="M 75.771589,70.361261 75.550979,45.079158"
+ id="path7" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.5875;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1"
+ d="m 75.678569,69.597131 -5.37579,0.0701 -0.0561,-23.777873 5.31581,-0.0553"
+ id="path8" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.5875;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1"
+ d="m 68.198499,70.580871 -0.0254,-25.254853"
+ id="path7-5"
+ sodipodi:nodetypes="cc" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.5875;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1"
+ d="m 68.880799,69.755251 -5.42669,0.0455 -0.0561,-23.777873 5.31581,-0.0553"
+ id="path8-9"
+ sodipodi:nodetypes="cccc" />
+ </g>
+</svg>
diff --git a/Documentation/images/rotation/rotate270Mirror.svg b/Documentation/images/rotation/rotate270Mirror.svg
new file mode 100644
index 00000000..6116f50a
--- /dev/null
+++ b/Documentation/images/rotation/rotate270Mirror.svg
@@ -0,0 +1,135 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ width="297mm"
+ height="210mm"
+ viewBox="0 0 297 210"
+ version="1.1"
+ id="svg1"
+ inkscape:version="1.3 (0e150ed6c4, 2023-07-21)"
+ sodipodi:docname="rotate270Mirror.svg"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:svg="http://www.w3.org/2000/svg">
+ <sodipodi:namedview
+ id="namedview1"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:showpageshadow="2"
+ inkscape:pageopacity="0.0"
+ inkscape:pagecheckerboard="0"
+ inkscape:deskcolor="#d1d1d1"
+ inkscape:document-units="mm"
+ showgrid="true"
+ showguides="false"
+ inkscape:zoom="0.94272086"
+ inkscape:cx="467.79489"
+ inkscape:cy="423.24299"
+ inkscape:window-width="1916"
+ inkscape:window-height="1040"
+ inkscape:window-x="0"
+ inkscape:window-y="38"
+ inkscape:window-maximized="1"
+ inkscape:current-layer="layer1">
+ <inkscape:grid
+ id="grid1"
+ units="px"
+ originx="0"
+ originy="0"
+ spacingx="0.26458334"
+ spacingy="0.26458333"
+ empcolor="#0000ff"
+ empopacity="0.25098039"
+ color="#0000ff"
+ opacity="0.1254902"
+ empspacing="5"
+ dotted="false"
+ gridanglex="30"
+ gridanglez="30"
+ visible="true" />
+ </sodipodi:namedview>
+ <defs
+ id="defs1" />
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1">
+ <rect
+ style="fill:none;stroke:#000000;stroke-width:1.5875;stroke-dasharray:none;paint-order:markers stroke fill"
+ id="rect1"
+ width="152.88184"
+ height="119.41136"
+ x="-187.55237"
+ y="-182.80751"
+ transform="matrix(0,-1,-1,0,0,0)" />
+ <rect
+ style="fill:none;stroke:#000000;stroke-width:1.5875;stroke-dasharray:none;paint-order:markers stroke fill"
+ id="rect2"
+ width="49.755535"
+ height="36.468258"
+ x="-172.17726"
+ y="-165.87666"
+ transform="matrix(0,-1,-1,0,0,0)" />
+ <rect
+ style="fill:none;stroke:#000000;stroke-width:1.5875;stroke-dasharray:none;paint-order:markers stroke fill"
+ id="rect2-5"
+ width="49.755535"
+ height="36.468258"
+ x="-97.538612"
+ y="-165.87666"
+ transform="matrix(0,-1,-1,0,0,0)" />
+ <g
+ id="g4"
+ transform="matrix(0,-1,-1,0,264.78961,265.77543)"
+ style="stroke-width:1.5875;stroke-dasharray:none">
+ <rect
+ style="fill:none;stroke:#000000;stroke-width:1.5875;stroke-dasharray:none;paint-order:markers stroke fill"
+ id="rect3"
+ width="40.994682"
+ height="43.605846"
+ x="134.16664"
+ y="157.24184" />
+ <ellipse
+ style="fill:none;stroke:#000000;stroke-width:1.5875;stroke-dasharray:none;paint-order:markers stroke fill"
+ id="path3"
+ cx="140.15703"
+ cy="176.44627"
+ rx="1.889045"
+ ry="1.925626" />
+ </g>
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.5875;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1"
+ d="m 183.02388,19.830188 -0.20636,182.514592 53.31576,-91.81156 z"
+ id="path4"
+ sodipodi:nodetypes="cccc" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.5875;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1"
+ d="m 231.42072,65.022101 -21.58135,-0.0285"
+ id="path5" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.5875;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1"
+ d="m 231.6004,49.199448 -31.3303,-0.0959"
+ id="path6" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.5875;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1"
+ d="m 231.60025,70.361261 0.22061,-25.282103"
+ id="path7" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.5875;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1"
+ d="m 231.69327,69.597131 5.37579,0.0701 0.0561,-23.777873 -5.31581,-0.0553"
+ id="path8" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.5875;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1"
+ d="m 239.17334,70.580871 0.0254,-25.254853"
+ id="path7-5"
+ sodipodi:nodetypes="cc" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.5875;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1"
+ d="m 238.49104,69.755251 5.42669,0.0455 0.0561,-23.777873 -5.31581,-0.0553"
+ id="path8-9"
+ sodipodi:nodetypes="cccc" />
+ </g>
+</svg>
diff --git a/Documentation/images/rotation/rotate90.svg b/Documentation/images/rotation/rotate90.svg
new file mode 100644
index 00000000..af627638
--- /dev/null
+++ b/Documentation/images/rotation/rotate90.svg
@@ -0,0 +1,135 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ width="297mm"
+ height="210mm"
+ viewBox="0 0 297 210"
+ version="1.1"
+ id="svg1"
+ inkscape:version="1.3 (0e150ed6c4, 2023-07-21)"
+ sodipodi:docname="rotate90.svg"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:svg="http://www.w3.org/2000/svg">
+ <sodipodi:namedview
+ id="namedview1"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:showpageshadow="2"
+ inkscape:pageopacity="0.0"
+ inkscape:pagecheckerboard="0"
+ inkscape:deskcolor="#d1d1d1"
+ inkscape:document-units="mm"
+ showgrid="true"
+ showguides="false"
+ inkscape:zoom="0.94272086"
+ inkscape:cx="467.26451"
+ inkscape:cy="423.24299"
+ inkscape:window-width="1916"
+ inkscape:window-height="1040"
+ inkscape:window-x="0"
+ inkscape:window-y="38"
+ inkscape:window-maximized="1"
+ inkscape:current-layer="layer1">
+ <inkscape:grid
+ id="grid1"
+ units="px"
+ originx="0"
+ originy="0"
+ spacingx="0.26458334"
+ spacingy="0.26458333"
+ empcolor="#0000ff"
+ empopacity="0.25098039"
+ color="#0000ff"
+ opacity="0.1254902"
+ empspacing="5"
+ dotted="false"
+ gridanglex="30"
+ gridanglez="30"
+ visible="true" />
+ </sodipodi:namedview>
+ <defs
+ id="defs1" />
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1">
+ <rect
+ style="fill:none;stroke:#000000;stroke-width:1.5875;stroke-dasharray:none;paint-order:markers stroke fill"
+ id="rect1"
+ width="152.88184"
+ height="119.41136"
+ x="34.65498"
+ y="-182.80751"
+ transform="rotate(90)" />
+ <rect
+ style="fill:none;stroke:#000000;stroke-width:1.5875;stroke-dasharray:none;paint-order:markers stroke fill"
+ id="rect2"
+ width="49.755535"
+ height="36.468258"
+ x="50.030079"
+ y="-165.87665"
+ transform="rotate(90)" />
+ <rect
+ style="fill:none;stroke:#000000;stroke-width:1.5875;stroke-dasharray:none;paint-order:markers stroke fill"
+ id="rect2-5"
+ width="49.755535"
+ height="36.468258"
+ x="124.66872"
+ y="-165.87665"
+ transform="rotate(90)" />
+ <g
+ id="g4"
+ transform="rotate(90,154.17885,110.61076)"
+ style="stroke-width:1.5875;stroke-dasharray:none">
+ <rect
+ style="fill:none;stroke:#000000;stroke-width:1.5875;stroke-dasharray:none;paint-order:markers stroke fill"
+ id="rect3"
+ width="40.994682"
+ height="43.605846"
+ x="134.16664"
+ y="157.24184" />
+ <ellipse
+ style="fill:none;stroke:#000000;stroke-width:1.5875;stroke-dasharray:none;paint-order:markers stroke fill"
+ id="path3"
+ cx="140.15703"
+ cy="176.44627"
+ rx="1.889045"
+ ry="1.925626" />
+ </g>
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.5875;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1"
+ d="m 183.02388,202.37715 -0.20636,-182.51459 53.31576,91.81156 z"
+ id="path4"
+ sodipodi:nodetypes="cccc" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.5875;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1"
+ d="m 231.42072,157.18524 -21.58135,0.0285"
+ id="path5" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.5875;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1"
+ d="m 231.6004,173.00789 -31.3303,0.0959"
+ id="path6" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.5875;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1"
+ d="m 231.60025,151.84608 0.22061,25.2821"
+ id="path7" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.5875;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1"
+ d="m 231.69327,152.61021 5.37579,-0.0701 0.0561,23.77787 -5.31581,0.0553"
+ id="path8" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.5875;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1"
+ d="m 239.17334,151.62647 0.0254,25.25485"
+ id="path7-5"
+ sodipodi:nodetypes="cc" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.5875;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1"
+ d="m 238.49104,152.45209 5.42669,-0.0455 0.0561,23.77787 -5.31581,0.0553"
+ id="path8-9"
+ sodipodi:nodetypes="cccc" />
+ </g>
+</svg>
diff --git a/Documentation/images/rotation/rotate90Mirror.svg b/Documentation/images/rotation/rotate90Mirror.svg
new file mode 100644
index 00000000..1760c462
--- /dev/null
+++ b/Documentation/images/rotation/rotate90Mirror.svg
@@ -0,0 +1,135 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ width="297mm"
+ height="210mm"
+ viewBox="0 0 297 210"
+ version="1.1"
+ id="svg1"
+ inkscape:version="1.3 (0e150ed6c4, 2023-07-21)"
+ sodipodi:docname="rotate90Mirror.svg"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:svg="http://www.w3.org/2000/svg">
+ <sodipodi:namedview
+ id="namedview1"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:showpageshadow="2"
+ inkscape:pageopacity="0.0"
+ inkscape:pagecheckerboard="0"
+ inkscape:deskcolor="#d1d1d1"
+ inkscape:document-units="mm"
+ showgrid="true"
+ showguides="false"
+ inkscape:zoom="0.94272086"
+ inkscape:cx="467.79489"
+ inkscape:cy="423.24299"
+ inkscape:window-width="1916"
+ inkscape:window-height="1040"
+ inkscape:window-x="0"
+ inkscape:window-y="38"
+ inkscape:window-maximized="1"
+ inkscape:current-layer="layer1">
+ <inkscape:grid
+ id="grid1"
+ units="px"
+ originx="0"
+ originy="0"
+ spacingx="0.26458334"
+ spacingy="0.26458333"
+ empcolor="#0000ff"
+ empopacity="0.25098039"
+ color="#0000ff"
+ opacity="0.1254902"
+ empspacing="5"
+ dotted="false"
+ gridanglex="30"
+ gridanglez="30"
+ visible="true" />
+ </sodipodi:namedview>
+ <defs
+ id="defs1" />
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1">
+ <rect
+ style="fill:none;stroke:#000000;stroke-width:1.5875;stroke-dasharray:none;paint-order:markers stroke fill"
+ id="rect1"
+ width="152.88184"
+ height="119.41136"
+ x="34.65498"
+ y="124.56432"
+ transform="matrix(0,1,1,0,0,0)" />
+ <rect
+ style="fill:none;stroke:#000000;stroke-width:1.5875;stroke-dasharray:none;paint-order:markers stroke fill"
+ id="rect2"
+ width="49.755535"
+ height="36.468258"
+ x="50.030079"
+ y="141.49519"
+ transform="matrix(0,1,1,0,0,0)" />
+ <rect
+ style="fill:none;stroke:#000000;stroke-width:1.5875;stroke-dasharray:none;paint-order:markers stroke fill"
+ id="rect2-5"
+ width="49.755535"
+ height="36.468258"
+ x="124.66872"
+ y="141.49519"
+ transform="matrix(0,1,1,0,0,0)" />
+ <g
+ id="g4"
+ transform="matrix(0,1,1,0,42.582224,-43.56809)"
+ style="stroke-width:1.5875;stroke-dasharray:none">
+ <rect
+ style="fill:none;stroke:#000000;stroke-width:1.5875;stroke-dasharray:none;paint-order:markers stroke fill"
+ id="rect3"
+ width="40.994682"
+ height="43.605846"
+ x="134.16664"
+ y="157.24184" />
+ <ellipse
+ style="fill:none;stroke:#000000;stroke-width:1.5875;stroke-dasharray:none;paint-order:markers stroke fill"
+ id="path3"
+ cx="140.15703"
+ cy="176.44627"
+ rx="1.889045"
+ ry="1.925626" />
+ </g>
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.5875;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1"
+ d="M 124.34795,202.37715 124.55431,19.86256 71.238554,111.67412 Z"
+ id="path4"
+ sodipodi:nodetypes="cccc" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.5875;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1"
+ d="m 75.951114,157.18524 21.58135,0.0285"
+ id="path5" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.5875;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1"
+ d="m 75.771434,173.00789 31.330296,0.0959"
+ id="path6" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.5875;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1"
+ d="m 75.771584,151.84608 -0.22061,25.2821"
+ id="path7" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.5875;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1"
+ d="m 75.678564,152.61021 -5.37579,-0.0701 -0.0561,23.77787 5.31581,0.0553"
+ id="path8" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.5875;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1"
+ d="m 68.198494,151.62647 -0.0254,25.25485"
+ id="path7-5"
+ sodipodi:nodetypes="cc" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.5875;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1"
+ d="m 68.880794,152.45209 -5.42669,-0.0455 -0.0561,23.77787 5.31581,0.0553"
+ id="path8-9"
+ sodipodi:nodetypes="cccc" />
+ </g>
+</svg>
diff --git a/src/libcamera/orientation.cpp b/src/libcamera/orientation.cpp
index a3465383..965f5a8b 100644
--- a/src/libcamera/orientation.cpp
+++ b/src/libcamera/orientation.cpp
@@ -37,6 +37,23 @@ namespace libcamera {
* For example, Orientation::Rotate90Mirror describes the orientation obtained
* by rotating the image 90 degrees clockwise first and then applying a
* horizontal mirroring.
+ *
+ * \var CameraConfiguration::Rotate0
+ * \image html rotation/rotate0.svg
+ * \var CameraConfiguration::Rotate0Mirror
+ * \image html rotation/rotate0Mirror.svg
+ * \var CameraConfiguration::Rotate180
+ * \image html rotation/rotate180.svg
+ * \var CameraConfiguration::Rotate180Mirror
+ * \image html rotation/rotate180Mirror.svg
+ * \var CameraConfiguration::Rotate90Mirror
+ * \image html rotation/rotate90Mirror.svg
+ * \var CameraConfiguration::Rotate270
+ * \image html rotation/rotate270.svg
+ * \var CameraConfiguration::Rotate270Mirror
+ * \image html rotation/rotate270Mirror.svg
+ * \var CameraConfiguration::Rotate90
+ * \image html rotation/rotate90.svg
*/
/**