Move PX4 Guide source into /docs (#24490)

* Add vitepress tree

* Update existing workflows so they dont trigger on changes in the docs path

* Add nojekyll, package.json, LICENCE etc

* Add crowdin docs upload/download scripts

* Add docs flaw checker workflows

* Used docs prefix for docs workflows

* Crowdin obvious fixes

* ci: docs move to self hosted runner

runs on a beefy server for faster builds

Signed-off-by: Ramon Roche <mrpollo@gmail.com>

* ci: don't run build action for docs or ci changes

Signed-off-by: Ramon Roche <mrpollo@gmail.com>

* ci: update runners

Signed-off-by: Ramon Roche <mrpollo@gmail.com>

* Add docs/en

* Add docs assets and scripts

* Fix up editlinks to point to PX4 sources

* Download just the translations that are supported

* Add translation sources for zh, uk, ko

* Update latest tranlsation and uorb graphs

* update vitepress to latest

---------

Signed-off-by: Ramon Roche <mrpollo@gmail.com>
Co-authored-by: Ramon Roche <mrpollo@gmail.com>
This commit is contained in:
Hamish Willee
2025-03-13 16:08:27 +11:00
committed by GitHub
co-authored by Ramon Roche
parent 8e6d2ebe4a
commit 88d623bedb
5176 changed files with 558771 additions and 2 deletions
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
Binary file not shown.
File diff suppressed because one or more lines are too long
Binary file not shown.

After

Width:  |  Height:  |  Size: 83 KiB

File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
+31
View File
@@ -0,0 +1,31 @@
<!DOCTYPE html>
<html lang="en-us">
<head>
<meta charset="utf-8" />
<link href="data:;base64,iVBORw0KGgo=" rel="icon" />
<meta content="text/html; charset=utf-8" http-equiv="Content-Type" />
<title>FUN AND GAMES</title>
<style></style>
</head>
<body>
Search: <input id="search" type="text" /> Preset:
<select id="select-graph" name="select-graph">
<option value="graph_full_no_mavlink.json">
All Modules (w/o mavlink)
</option>
<option value="graph_full.json">All Modules</option>
<option value="graph_px4_sitl.json">SITL Modules</option>
<option value="graph_px4_fmu-v5.json">FMUv5 Modules</option>
<option value="graph_px4_fmu-v4.json">FMUv4 Modules</option>
<option value="graph_px4_fmu-v2.json">FMUv2 Modules</option>
</select>
<br />
<svg id="svg-graph" width="1200" height="1400"></svg>
<script
type="application/javascript"
src="https://d3js.org/d3.v4.min.js"
asysc
></script>
<script type="application/javascript" src="uorb_graph.js" asysc></script>
</body>
</html>
+483
View File
@@ -0,0 +1,483 @@
// the d3.js script might not yet be loaded (because it's not in <head>), so we
// wrap everything in a function and retry until d3 is available
function initializeGraph() {
if (typeof d3 === 'undefined') {
// try again later
setTimeout(initializeGraph, 500);
return;
}
var graph_option = document.getElementById("select-graph");
var default_json_file = graph_option.value;
var minOpacity = 0.1; // opacity when a node/link is faded
/* search field: highlight all matching nodes on text change */
var g_filterText = "";
function searchTextChanged() {
var textField = document.getElementById("search");
var searchText = textField.value;
var opacity = minOpacity;
if (searchText == "" || document.activeElement != textField) {
opacity = 1;
g_filterText = "";
} else {
g_filterText = searchText;
}
/* change opacity */
// TODO: call fade() instead?
node.style("stroke-opacity", function(o) {
thisOpacity = o.name.includes(searchText) ? 1 : opacity;
this.setAttribute('fill-opacity', thisOpacity);
return thisOpacity;
});
text.style("stroke-opacity", function(o) {
thisOpacity = o.name.includes(searchText) ? 1 : opacity;
this.setAttribute('fill-opacity', thisOpacity);
return thisOpacity;
});
link.style("stroke-opacity", function(o) {
return opacity;
});
}
document.getElementById("search").addEventListener("keyup", searchTextChanged);
document.getElementById("search").addEventListener("focusout", searchTextChanged);
document.getElementById("search").addEventListener("focusin", searchTextChanged);
document.getElementById("select-graph").addEventListener("change", reloadSimulation);
var svg = d3.select("#svg-graph"),
width = +svg.attr("width"),
height = +svg.attr("height");
var collisionForce = rectCollide()
.size(function (d) { return [d.width+10, d.height+6]; });
var boxForce = boundedBox()
.bounds([[0, 0], [width, height]])
.size(function (d) { return [d.width, d.height]; });
var simulation = d3.forceSimulation()
.velocityDecay(0.3) // default: 0.4
// alpha: initially 1, then reduced at each step, reducing the forces, so
// that the simulation comes to a stop eventually
.alphaMin(0.0001) // default: 0.001
.alphaDecay(0.0428) // default: 0.0228
//.alphaTarget(1) // enabling this will make sure the simulation never comes
// to a stop (and the nodes will either keep fighting for their position, or
// find an equilibrium)
.force("link", d3.forceLink().id(function(d) { return d.id; })
.distance(100)//.strength(0.02) // default: 30, 1 / Math.min(count(link.source), count(link.target));
// distance: desired link distance
// .iterations(1) // default: 1, greater = increased rigidity
)
.force("charge", d3.forceManyBody().strength(-250)) // decrease to make the
// graph spread more (distance has a similar effect, but affects the
// leaf nodes more)
.force('box', boxForce) // keep the nodes inside the visible area
.force('collision', collisionForce)
.force("center", d3.forceCenter(width / 2, height / 2));
// SVG elements
var node = null;
var text = null;
var link = null;
function loadSimulation(json_file_name) {
d3.json(json_file_name, function(error, graph) {
if (error) throw error;
// module filtering (does not remove 'orphaned' topics)
/*
var ignored_modules = ["mavlink", "commander"];
for (var i = 0; i < ignored_modules.length; ++i) {
var module_id = "m_"+ignored_modules[i];
// links
for (var j = 0; j < graph.links.length; ++j) {
if (graph.links[j].source == module_id ||
graph.links[j].target == module_id) {
graph.links.splice(j, 1);
--j;
}
}
// nodes
for (var j = 0; j < graph.nodes.length; ++j) {
if (graph.nodes[j].id == module_id) {
graph.nodes.splice(j, 1);
--j;
}
}
}
*/
// change style for bidirectional edges
const edgeMap = new Map();
var i = 0;
while(i<graph.links.length) {
var curr_source = graph.links[i].source;
var curr_target = graph.links[i].target;
if (edgeMap.has(curr_target + curr_source) == true) {
graph.links.splice(i,1);
graph.links[edgeMap.get(curr_target + curr_source)].style = "dot-dashed";
}
else
edgeMap.set(curr_source + curr_target, i++);
}
// explanation for the following syntax: https://bost.ocks.org/mike/join/
link = svg.append("g")
.attr("class", "links")
.selectAll("line")
.data(graph.links)
.enter().append("line")
.attr("stroke-opacity", 0.7)
.attr("stroke", function(d) { return d.color; })
.style("stroke-dasharray", function(d) {
if (d.style == "dashed") return "3, 3";
if (d.style == "dot-dashed") return "3, 3, 9, 3";
return "1, 0";
});
var g = svg.append("g").selectAll("g").data(graph.nodes).enter().append("g");
node = g.append("rect")
// rounded corners (somewhat more expensive to render)
.attr("rx", function(d) { return d.type == "module" ? 8 : 0; });
text = g.append("text")
.attr("class", "labels")
.style("font-size", "12px")
.attr("fill", function(d) { return "#fff"; })
.attr("dy", ".35em")
.attr("text-anchor", "middle")
.text(function(d) { return d.name; })
.on("mouseover", fadeAnimated(minOpacity))
.on("mouseout", fadeAnimated(1))
.on("dblclick", openLink);
var paddingLeftRight = 18; // adjust the padding values depending on font and font size
var paddingTopBottom = 5;
svg.selectAll("text").each(function(d, i) {
var curPaddingLeftRight = paddingLeftRight;
var curPaddingTopBottom = paddingTopBottom;
if (graph.nodes[i].type == "module") {
curPaddingLeftRight *= 1.5;
curPaddingTopBottom *= 1.5;
}
// get bounding box of text field and store it
graph.nodes[i].width = this.getBBox().width+curPaddingLeftRight;
graph.nodes[i].height = this.getBBox().height+curPaddingTopBottom;
graph.nodes[i].vx = 0;
graph.nodes[i].vy = 0;
});
simulation
.nodes(graph.nodes)
.on("tick", ticked);
simulation.force("link")
.links(graph.links);
function ticked() {
link
.attr("x1", function(d) { return d.source.x; })
.attr("y1", function(d) { return d.source.y; })
.attr("x2", function(d) { return d.target.x; })
.attr("y2", function(d) { return d.target.y; });
text
.attr("x", function(d) { return d.x; })
.attr("y", function(d) { return d.y; });
svg.selectAll("rect")
.attr("x", function(d) { return d.x - d.width/2; })
.attr("y", function(d) { return d.y - d.height/2; })
.attr("width", function(d) { return d.width; })
.attr("height", function(d) { return d.height; })
.attr("fill", function(d) { return d.color; });
}
// open the 'node.url' attribute in a new tab, if it exists
function openLink(n) {
if (typeof n.url !== 'undefined') {
window.open(n.url, '_blank');
}
}
// smooth fade in/out
var animationTimer = null;
var currentOpacity = 1;
var destOpacity = 1;
function fadeAnimated(opacity) {
return function(d) {
if (animationTimer != null)
animationTimer.stop();
destOpacity = opacity;
animationTimer = d3.interval(function(elapsed) {
var newOpacity = currentOpacity + (destOpacity-currentOpacity) * elapsed/300;
// check if we overshot the destination opacity
if ((currentOpacity - destOpacity) * (newOpacity - destOpacity) < 0) {
currentOpacity = destOpacity;
} else {
currentOpacity = newOpacity;
}
fade(currentOpacity)(d);
if (Math.abs(currentOpacity - destOpacity) < 0.005) {
animationTimer.stop();
animationTimer = null;
}
}, 30);
}
}
// mouse over functionality: fade the rest of the graph
var linkedByIndex = {};
graph.links.forEach(function(d) {
linkedByIndex[d.source.index + "," + d.target.index] = 1;
});
function isConnected(a, b) {
return linkedByIndex[a.index + "," + b.index] || linkedByIndex[b.index + "," + a.index] || a.index == b.index;
}
function fade(opacity) {
return function(d) {
/* The graph opacity is using the following behavior:
* - no filtering (g_filterText == ""):
* - mouse hovers over a node: the node and it's connected
* nodes are visible, the rest is faded
* - else: all nodes and links are visible
* - filtering:
* - all nodes matching the filter are always visible
* - mouse hovers over a node: the connected nodes are visible
* - no hovering: rest of the non-matching nodes are faded
* (and all the links too)
*/
var invertedOpacity = (1+minOpacity) - opacity;
if (g_filterText != "") {
// in case of filtering, the default is to fade non-matching
// nodes
opacity = minOpacity;
}
function nodeOpacity(o) {
if (g_filterText != "" && o.name.includes(g_filterText)) {
thisOpacity = 1; // always visible if filter matches
} else if (isConnected(d, o)) {
if (g_filterText == "") {
thisOpacity = 1; // connected w/o filtering -> show it
} else if (d.name.includes(g_filterText)) {
thisOpacity = invertedOpacity;
} else {
thisOpacity = opacity;
}
} else {
thisOpacity = opacity;
}
this.setAttribute('fill-opacity', thisOpacity);
return thisOpacity;
}
node.style("stroke-opacity", nodeOpacity);
text.style("stroke-opacity", nodeOpacity);
var linkOpacity = opacity;
var linkOpacityConnected = 1;
if (g_filterText != "") {
if (d.name.includes(g_filterText)) {
linkOpacityConnected = invertedOpacity;
} else {
linkOpacityConnected = minOpacity;
}
linkOpacity = minOpacity;
}
link.style("stroke-opacity", function(o) {
return o.source === d || o.target === d ?
linkOpacityConnected : linkOpacity;
});
};
}
});
}
function reloadSimulation(e) {
json_file_name = e.target.value;
console.log(json_file_name);
d3.selectAll("svg > *").remove();
loadSimulation(json_file_name);
simulation.alpha(1).restart();
}
/* initial graph */
loadSimulation(default_json_file);
function rectCollide() {
var nodes, sizes, masses;
var size = constant([0, 0]);
var strength = 0.3;
var iterations = 20;
function force() {
var node, size, mass, xi, yi;
var i = -1;
while (++i < iterations) { iterate(); }
function iterate() {
var j = -1;
var tree = d3.quadtree(nodes, xCenter, yCenter).visitAfter(prepare);
while (++j < nodes.length) {
node = nodes[j];
size = sizes[j];
mass = masses[j];
xi = xCenter(node);
yi = yCenter(node);
tree.visit(apply);
}
}
function apply(quad, x0, y0, x1, y1) {
var data = quad.data;
var xSize = (size[0] + quad.size[0]) / 2;
var ySize = (size[1] + quad.size[1]) / 2;
if (data) {
if (data.index <= node.index) { return; }
var x = xi - xCenter(data);
var y = yi - yCenter(data);
var xd = Math.abs(x) - xSize;
var yd = Math.abs(y) - ySize;
if (xd < 0 && yd < 0) {
var l = Math.sqrt(x * x + y * y);
var m = masses[data.index] / (mass + masses[data.index]);
if (l > 0.000001) {
if (xd > yd) {
node.vx -= (x *= xd / l * strength) * m;
data.vx += x * (1 - m);
} else {
node.vy -= (y *= yd / l * strength) * m;
data.vy += y * (1 - m);
}
}
}
}
return x0 > xi + xSize || y0 > yi + ySize ||
x1 < xi - xSize || y1 < yi - ySize;
}
function prepare(quad) {
if (quad.data) {
quad.size = sizes[quad.data.index];
} else {
quad.size = [0, 0];
var i = -1;
while (++i < 4) {
if (quad[i] && quad[i].size) {
quad.size[0] = Math.max(quad.size[0], quad[i].size[0]);
quad.size[1] = Math.max(quad.size[1], quad[i].size[1]);
}
}
}
}
}
function xCenter(d) { return d.x + d.vx; }
function yCenter(d) { return d.y + d.vy; }
force.initialize = function (_) {
sizes = (nodes = _).map(size);
masses = sizes.map(function (d) { return d[0] * d[1] });
}
force.size = function (_) {
return (arguments.length
? (size = typeof _ === 'function' ? _ : constant(_), force)
: size);
}
force.strength = function (_) {
return (arguments.length ? (strength = +_, force) : strength);
}
force.iterations = function (_) {
return (arguments.length ? (iterations = +_, force) : iterations);
}
return force;
}
function boundedBox() {
var nodes, sizes;
var bounds;
var size = constant([0, 0]);
function force() {
var node, size;
var xi, x0, x1, yi, y0, y1;
var i = -1;
while (++i < nodes.length) {
node = nodes[i];
size = sizes[i];
xi = node.x + node.vx;
x0 = bounds[0][0] - (xi - size[0]/2);
x1 = bounds[1][0] - (xi + size[0]/2);
yi = node.y + node.vy;
y0 = bounds[0][1] - (yi - size[1]/2);
y1 = bounds[1][1] - (yi + size[1]/2);
if (x0 > 0 || x1 < 0) {
node.x += node.vx;
node.vx = -node.vx;
if (node.vx < x0) { node.x += x0 - node.vx; }
if (node.vx > x1) { node.x += x1 - node.vx; }
}
if (y0 > 0 || y1 < 0) {
node.y += node.vy;
node.vy = -node.vy;
if (node.vy < y0) { node.vy += y0 - node.vy; }
if (node.vy > y1) { node.vy += y1 - node.vy; }
}
}
}
force.initialize = function (_) {
sizes = (nodes = _).map(size);
}
force.bounds = function (_) {
return (arguments.length ? (bounds = _, force) : bounds);
}
force.size = function (_) {
return (arguments.length
? (size = typeof _ === 'function' ? _ : constant(_), force)
: size);
}
return force;
}
function constant(_) {
return function () { return _; }
}
} // initializeGraph()
initializeGraph();
+158
View File
@@ -0,0 +1,158 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="122.00738"
height="57.984631"
id="svg2"
version="1.1"
inkscape:version="0.91 r13725"
sodipodi:docname="px4-logo.svg">
<defs
id="defs4" />
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="5.33"
inkscape:cx="14.508175"
inkscape:cy="22.446763"
inkscape:document-units="px"
inkscape:current-layer="layer1"
showgrid="false"
inkscape:window-width="1031"
inkscape:window-height="699"
inkscape:window-x="82"
inkscape:window-y="0"
inkscape:window-maximized="0"
showguides="true"
inkscape:guide-bbox="true"
fit-margin-top="0"
fit-margin-left="0"
fit-margin-right="0"
fit-margin-bottom="0" />
<metadata
id="metadata7">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title />
</cc:Work>
</rdf:RDF>
</metadata>
<g
inkscape:label="Ebene 1"
inkscape:groupmode="layer"
id="layer1"
transform="translate(-78.834349,-138.41571)">
<flowRoot
xml:space="preserve"
id="flowRoot2993"
style="font-size:40px;font-style:italic;font-variant:normal;font-weight:bold;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Airbus Special;-inkscape-font-specification:Airbus Special Bold Italic"><flowRegion
id="flowRegion2995"><rect
id="rect2997"
width="456.43564"
height="208.91089"
x="650.49506"
y="332.56021" /></flowRegion><flowPara
id="flowPara2999" /></flowRoot> <text
xml:space="preserve"
style="font-size:24px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans;-inkscape-font-specification:Helvetica"
x="39.796597"
y="57.447254"
id="text3974"
sodipodi:linespacing="125%"><tspan
sodipodi:role="line"
id="tspan3976"
x="39.796597"
y="57.447254" /></text>
<path
d="m 99.82687,138.41571 c 3.82294,0 92.11887,0 92.11887,0 6.3084,0 10.06031,5.25714 8.5701,11.387 l -9.00015,37.0215 c -1.49021,6.12986 -5.0786,9.57613 -11.387,9.57613 l -92.38814,0 c -6.3084,0 -10.09192,-5.2649 -8.5701,-11.387 l 9.20198,-37.0185 c 1.52182,-6.1221 5.14604,-9.57913 11.45444,-9.57913 z"
id="rect4161"
inkscape:connector-curvature="0"
sodipodi:nodetypes="sssssssss" />
<g
id="text4163"
style="font-size:40px;font-style:italic;font-variant:normal;font-weight:bold;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#ffffff;fill-opacity:1;stroke:none;font-family:Airbus Special;-inkscape-font-specification:Airbus Special Bold Italic"
transform="translate(-153.18412,-49.986397)">
<path
inkscape:connector-curvature="0"
id="path3039"
style="fill:#ffffff;font-family:Republika Exp;-inkscape-font-specification:Republika Exp Bold Italic"
d="m 271.89189,204.38367 c 0.45331,1e-5 0.73331,0.08 0.84,0.24 0.13331,0.16001 0.13331,0.50668 0,1.04 l -3.16,12.92 c -0.13335,0.53333 -0.29335,0.88 -0.48,1.04 -0.16002,0.16 -0.48002,0.24 -0.96,0.24 l -10.2,0 c -0.29334,0 -0.56001,0.08 -0.8,0.24 -0.21334,0.16 -0.34668,0.34666 -0.4,0.56 l -0.44,1.84 c -0.0533,0.21333 -0.0133,0.4 0.12,0.56 0.15999,0.16 0.38666,0.24 0.68,0.24 l 10.6,0 c 1.27998,0 2.37331,-0.0933 3.28,-0.28 0.93331,-0.18667 1.71998,-0.49334 2.36,-0.92 0.66664,-0.45334 1.21331,-1.04 1.64,-1.76 0.42664,-0.72 0.77331,-1.62667 1.04,-2.72 l 2.68,-11 c 0.26664,-1.09332 0.35997,-1.99999 0.28,-2.72 -0.08,-0.71998 -0.3467,-1.29332 -0.8,-1.72 -0.45336,-0.45332 -1.12003,-0.77332 -2,-0.96 -0.88003,-0.18665 -2.00003,-0.27998 -3.36,-0.28 l -19.44,0 c -0.29334,2e-5 -0.56,0.08 -0.8,0.24 -0.21334,0.16002 -0.34667,0.34668 -0.4,0.56 l -0.44,1.84 c -0.0533,0.21335 -0.0133,0.40001 0.12,0.56 0.16,0.16001 0.38666,0.24001 0.68,0.24 l 19.36,0 m -15.68,5.56 c 0.0533,-0.21332 -10e-6,-0.41332 -0.16,-0.6 -0.13334,-0.21332 -0.34667,-0.31999 -0.64,-0.32 l -4.12,0 c -0.29334,1e-5 -0.56,0.10668 -0.8,0.32 -0.21334,0.18668 -0.34667,0.38668 -0.4,0.6 l -5,20.52 c -0.0533,0.21332 -0.0133,0.39999 0.12,0.56 0.16,0.15999 0.38667,0.23999 0.68,0.24 l 4.12,0 c 0.29333,-1e-5 0.54666,-0.08 0.76,-0.24 0.24,-0.16001 0.38666,-0.34668 0.44,-0.56 l 5,-20.52" />
<path
inkscape:connector-curvature="0"
id="path3041"
style="fill:#ffffff;font-family:Republika Exp;-inkscape-font-specification:Republika Exp Bold Italic"
d="m 282.22439,223.30367 c 0.10667,0 0.25333,-0.0267 0.44,-0.08 0.18666,-0.08 0.30666,-0.14667 0.36,-0.2 l 9.68,-7.2 4.6,7.16 c 0.0533,0.08 0.14665,0.16 0.28,0.24 0.15998,0.0533 0.29332,0.08 0.4,0.08 l 5.36,0 c 0.45331,0 0.79998,-0.13334 1.04,-0.4 0.23998,-0.29334 0.25331,-0.58667 0.04,-0.88 l -7.12,-10.2 12.28,-9.52 c 0.3733,-0.29332 0.50664,-0.58665 0.4,-0.88 -0.1067,-0.29332 -0.3867,-0.43998 -0.84,-0.44 l -4.12,0 c -0.10669,2e-5 -0.24002,0.04 -0.4,0.12 -0.16002,0.0533 -0.29336,0.10668 -0.4,0.16 l -9.2,7.24 -4.92,-7.2 c -0.0533,-0.08 -0.17334,-0.14665 -0.36,-0.2 -0.16001,-0.08 -0.29334,-0.11998 -0.4,-0.12 l -5.56,0 c -0.45334,2e-5 -0.8,0.14668 -1.04,0.44 -0.24,0.26668 -0.25333,0.54668 -0.04,0.84 l 7.24,10.36 -9.56,7.28 -6.44,0 c -0.29333,0 -0.54666,0.08 -0.76,0.24 -0.23999,0.16 -0.38666,0.34666 -0.44,0.56 l -0.44,1.84 c -0.0533,0.21333 10e-6,0.4 0.16,0.56 0.13334,0.16 0.34667,0.24 0.64,0.24 l 9.12,-0.04" />
<path
inkscape:connector-curvature="0"
id="path3043"
style="fill:#ffffff;font-family:Republika Exp;-inkscape-font-specification:Republika Exp Bold Italic"
d="m 316.83127,208.50367 1.6,-6.56 c 0.0533,-0.21332 0.0133,-0.42665 -0.12,-0.64 -0.13335,-0.21332 -0.34668,-0.31998 -0.64,-0.32 l -4.24,0 c -0.29334,2e-5 -0.56001,0.10668 -0.8,0.32 -0.21334,0.21335 -0.34667,0.42668 -0.4,0.64 l -1.88,7.68 c -0.10667,0.42668 -0.16001,0.85334 -0.16,1.28 0.0267,0.42667 0.11999,0.81334 0.28,1.16 0.18666,0.34667 0.45333,0.64001 0.8,0.88 0.37333,0.21334 0.86666,0.32001 1.48,0.32 l 11.68,0 -2.24,9.24 c -0.0533,0.21333 -0.0134,0.4 0.12,0.56 0.15998,0.16 0.38665,0.24 0.68,0.24 l 4.24,0 c 0.29331,0 0.54664,-0.08 0.76,-0.24 0.23998,-0.16 0.38664,-0.34667 0.44,-0.56 l 2.24,-9.24 10.08,0 c 0.2133,1e-5 0.4133,-0.0533 0.6,-0.16 0.2133,-0.13333 0.3733,-0.26666 0.48,-0.4 l 0.4,-1.8 c 0.18663,-0.29333 0.19996,-0.53333 0.04,-0.72 -0.13337,-0.21332 -0.37337,-0.31999 -0.72,-0.32 l -10.08,0 1.96,-7.96 c 0.0533,-0.21332 -3e-5,-0.41332 -0.16,-0.6 -0.13336,-0.21332 -0.3467,-0.31998 -0.64,-0.32 l -4.24,0 c -0.29336,2e-5 -0.56002,0.10668 -0.8,0.32 -0.21336,0.18668 -0.34669,0.38668 -0.4,0.6 l -1.96,7.96 -7.6,0 c -0.37335,10e-6 -0.62668,-0.14666 -0.76,-0.44 -0.10668,-0.31999 -0.12001,-0.62666 -0.04,-0.92" />
</g>
<g
id="text4167"
style="font-size:12.16440105px;font-style:italic;font-variant:normal;font-weight:bold;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#ffffff;fill-opacity:1;stroke:none;font-family:Republika Exp;-inkscape-font-specification:Republika Exp Bold Italic"
transform="matrix(1.0137001,0,0,0.98648506,-153.18412,-49.986397)">
<path
inkscape:connector-curvature="0"
id="path3046"
style="fill:#ffffff;font-family:Quarx;-inkscape-font-specification:Quarx Bold Italic"
d="m 253.5841,232.55941 5.61434,0 -0.80472,3.7429 -5.61434,0 0.80472,-3.7429 m -1.76851,-0.50529 -1.01058,4.75348 c -0.0187,0.0873 -0.0281,0.17467 -0.0281,0.262 0,0.31191 0.10293,0.57391 0.30879,0.78601 0.2121,0.21209 0.47722,0.31814 0.79537,0.31814 l 7.99107,0 1.59073,-7.48578 -7.99107,0 c -0.36182,0 -0.71116,0.13724 -1.04801,0.41171 -0.33063,0.26825 -0.53337,0.5864 -0.60822,0.95444" />
<path
inkscape:connector-curvature="0"
id="path3048"
style="fill:#ffffff;font-family:Quarx;-inkscape-font-specification:Quarx Bold Italic"
d="m 272.70071,230.68797 -0.49594,0 c -0.36806,0 -0.72051,0.13724 -1.05736,0.41171 -0.33063,0.26825 -0.53337,0.5864 -0.60822,0.95444 l -0.90765,4.24819 -5.61434,0 0.90765,-4.24819 c 0.0187,-0.0873 0.0281,-0.17466 0.0281,-0.262 0,-0.3119 -0.10605,-0.5739 -0.31815,-0.78601 -0.20586,-0.21209 -0.46786,-0.31814 -0.786,-0.31814 l -0.50529,0 -1.30066,6.11963 c -0.0187,0.0873 -0.0281,0.17467 -0.0281,0.262 0,0.31191 0.10605,0.57391 0.31815,0.78601 0.21209,0.21209 0.47721,0.31814 0.79536,0.31814 l 6.61556,0 c 0.36181,0 0.70802,-0.13724 1.03866,-0.41172 0.33685,-0.27447 0.54271,-0.59262 0.61757,-0.95443 l 1.30066,-6.11963" />
<path
inkscape:connector-curvature="0"
id="path3050"
style="fill:#ffffff;font-family:Quarx;-inkscape-font-specification:Quarx Bold Italic"
d="m 279.06341,230.68797 -2.80717,0 0.10293,-0.50529 c 0.0187,-0.0873 0.0281,-0.17466 0.0281,-0.26201 -10e-6,-0.3119 -0.10605,-0.5739 -0.31815,-0.786 -0.20586,-0.21209 -0.46786,-0.31814 -0.78601,-0.31815 l -0.50529,0 -1.69365,7.99108 c -0.0187,0.0873 -0.0281,0.17467 -0.0281,0.262 0,0.31191 0.10293,0.57391 0.30879,0.78601 0.2121,0.21209 0.48034,0.31814 0.80472,0.31814 l 1.93695,0 c 0.36181,0 0.70803,-0.13724 1.03865,-0.41172 0.33062,-0.27447 0.53648,-0.59262 0.61758,-0.95443 l 0.10293,-0.50529 -2.80717,0 0.79537,-3.7429 1.44101,0 c 0.36181,10e-6 0.70802,-0.13723 1.03865,-0.41172 0.33686,-0.27447 0.54272,-0.59261 0.61758,-0.95443 l 0.11229,-0.50529" />
<path
inkscape:connector-curvature="0"
id="path3052"
style="fill:#ffffff;font-family:Quarx;-inkscape-font-specification:Quarx Bold Italic"
d="m 288.23145,232.55941 -5.61434,0 -0.80472,3.7429 5.61433,0 0.80473,-3.7429 m 1.97437,-0.50529 -1.01058,4.75348 c -0.0749,0.36181 -0.28072,0.67996 -0.61758,0.95443 -0.33063,0.27448 -0.67684,0.41172 -1.03865,0.41172 l -6.62492,0 c -0.31815,0 -0.58327,-0.10605 -0.79536,-0.31814 -0.20586,-0.2121 -0.30879,-0.4741 -0.30879,-0.78601 0,-0.0873 0.009,-0.17467 0.0281,-0.262 l 1.01058,-4.75348 c 0.0749,-0.36804 0.2776,-0.68619 0.60822,-0.95444 0.33686,-0.27447 0.6862,-0.41171 1.04801,-0.41171 l 6.62492,0 c 0.31814,0 0.58014,0.10605 0.78601,0.31814 0.21209,0.21211 0.31813,0.47411 0.31814,0.78601 -1e-5,0.0873 -0.009,0.17467 -0.0281,0.262" />
<path
inkscape:connector-curvature="0"
id="path3054"
style="fill:#ffffff;font-family:Quarx;-inkscape-font-specification:Quarx Bold Italic"
d="m 293.25606,236.30231 0.79537,-3.7429 5.61433,0 -0.79536,3.7429 -5.61434,0 m 7.3735,0.50529 1.01058,-4.75348 c 0.0187,-0.0873 0.0281,-0.17466 0.0281,-0.262 -1e-5,-0.3119 -0.10606,-0.5739 -0.31814,-0.78601 -0.20587,-0.21209 -0.46788,-0.31814 -0.78601,-0.31814 l -6.61556,0 c -0.36806,0 -0.71739,0.13724 -1.04801,0.41171 -0.33063,0.26825 -0.53649,0.5864 -0.61758,0.95444 l -1.69366,7.99108 0.50529,0 c 0.36181,0 0.70803,-0.13724 1.03865,-0.41172 0.33062,-0.27448 0.53648,-0.59263 0.61758,-0.95444 l 0.10293,-0.50529 6.11963,0 c 0.36804,0 0.71738,-0.13724 1.04801,-0.41172 0.33061,-0.27447 0.53335,-0.59262 0.60822,-0.95443" />
<path
inkscape:connector-curvature="0"
id="path3056"
style="fill:#ffffff;font-family:Quarx;-inkscape-font-specification:Quarx Bold Italic"
d="m 303.22129,232.55941 0.39301,-1.87144 1.87144,0 -0.393,1.87144 -1.87145,0 m 0.67372,5.61434 -0.49593,0 c -0.31815,0 -0.58327,-0.10605 -0.79536,-0.31814 -0.2121,-0.2121 -0.31815,-0.4741 -0.31815,-0.78601 0,-0.0873 0.009,-0.17467 0.0281,-0.262 l 0.70179,-3.31246 0.50529,0 c 0.31815,0 0.58015,0.10605 0.78601,0.31814 0.2121,0.2121 0.31815,0.47411 0.31815,0.78601 0,0.0873 -0.009,0.17467 -0.0281,0.262 l -0.7018,3.31246" />
<path
inkscape:connector-curvature="0"
id="path3058"
style="fill:#ffffff;font-family:Quarx;-inkscape-font-specification:Quarx Bold Italic"
d="m 307.36815,230.68797 -1.30065,6.11963 c -0.0187,0.0873 -0.0281,0.17467 -0.0281,0.262 0,0.31191 0.10293,0.57391 0.30879,0.78601 0.21209,0.21209 0.47721,0.31814 0.79536,0.31814 l 1.93695,0 c 0.36804,0 0.71738,-0.13412 1.04801,-0.40236 0.33061,-0.27448 0.53647,-0.59574 0.61757,-0.96379 l 0.10293,-0.50529 -2.80717,0 0.90766,-4.24819 c 0.0187,-0.0873 0.0281,-0.17466 0.0281,-0.262 -10e-6,-0.3119 -0.10605,-0.5739 -0.31815,-0.78601 -0.2121,-0.21209 -0.47722,-0.31814 -0.79536,-0.31814 l -0.49594,0" />
<path
inkscape:connector-curvature="0"
id="path3060"
style="fill:#ffffff;font-family:Quarx;-inkscape-font-specification:Quarx Bold Italic"
d="m 321.01831,232.55941 -5.61434,0 -0.80472,3.7429 5.61434,0 0.80472,-3.7429 m 1.97437,-0.50529 -1.01058,4.75348 c -0.0749,0.36181 -0.28072,0.67996 -0.61757,0.95443 -0.33064,0.27448 -0.67685,0.41172 -1.03866,0.41172 l -6.62492,0 c -0.31814,0 -0.58327,-0.10605 -0.79536,-0.31814 -0.20586,-0.2121 -0.30879,-0.4741 -0.30879,-0.78601 0,-0.0873 0.009,-0.17467 0.0281,-0.262 l 1.01058,-4.75348 c 0.0749,-0.36804 0.2776,-0.68619 0.60822,-0.95444 0.33686,-0.27447 0.6862,-0.41171 1.04801,-0.41171 l 6.62492,0 c 0.31814,0 0.58014,0.10605 0.78601,0.31814 0.21209,0.21211 0.31814,0.47411 0.31815,0.78601 -10e-6,0.0873 -0.009,0.17467 -0.0281,0.262" />
<path
inkscape:connector-curvature="0"
id="path3062"
style="fill:#ffffff;font-family:Quarx;-inkscape-font-specification:Quarx Bold Italic"
d="m 329.64546,230.68797 -2.80717,0 0.10293,-0.50529 c 0.0187,-0.0873 0.0281,-0.17466 0.0281,-0.26201 0,-0.3119 -0.10605,-0.5739 -0.31814,-0.786 -0.20587,-0.21209 -0.46787,-0.31814 -0.78601,-0.31815 l -0.50529,0 -1.69366,7.99108 c -0.0187,0.0873 -0.0281,0.17467 -0.0281,0.262 0,0.31191 0.10293,0.57391 0.30879,0.78601 0.21209,0.21209 0.48033,0.31814 0.80472,0.31814 l 1.93695,0 c 0.3618,0 0.70802,-0.13724 1.03865,-0.41172 0.33062,-0.27447 0.53647,-0.59262 0.61758,-0.95443 l 0.10292,-0.50529 -2.80716,0 0.79536,-3.7429 1.44101,0 c 0.36181,10e-6 0.70803,-0.13723 1.03866,-0.41172 0.33685,-0.27447 0.54271,-0.59261 0.61757,-0.95443 l 0.11229,-0.50529" />
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 14 KiB

+110
View File
@@ -0,0 +1,110 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="97.312958"
height="39.32"
id="svg2"
version="1.1"
inkscape:version="0.91 r13725"
sodipodi:docname="px4-text.svg"
inkscape:export-filename="/Users/lorenzmeier/src/Devguide/book/images/px4-text.png"
inkscape:export-xdpi="296.83377"
inkscape:export-ydpi="296.83377">
<defs
id="defs4" />
<sodipodi:namedview
id="base"
pagecolor="#99908e"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0"
inkscape:pageshadow="2"
inkscape:zoom="5.33"
inkscape:cx="27.459647"
inkscape:cy="14.828386"
inkscape:document-units="px"
inkscape:current-layer="layer1"
showgrid="false"
inkscape:window-width="1031"
inkscape:window-height="699"
inkscape:window-x="152"
inkscape:window-y="4"
inkscape:window-maximized="0"
showguides="true"
inkscape:guide-bbox="true"
fit-margin-top="0"
fit-margin-left="0"
fit-margin-right="0"
fit-margin-bottom="0" />
<metadata
id="metadata7">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
<cc:license
rdf:resource="" />
</cc:Work>
</rdf:RDF>
</metadata>
<g
inkscape:label="Ebene 1"
inkscape:groupmode="layer"
id="layer1"
transform="translate(-91.884933,-141.95727)">
<flowRoot
xml:space="preserve"
id="flowRoot2993"
style="font-style:italic;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:40px;line-height:125%;font-family:'Airbus Special';-inkscape-font-specification:'Airbus Special Bold Italic';letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none"><flowRegion
id="flowRegion2995"><rect
id="rect2997"
width="456.43564"
height="208.91089"
x="650.49506"
y="332.56021" /></flowRegion><flowPara
id="flowPara2999" /></flowRoot> <text
xml:space="preserve"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:24px;line-height:125%;font-family:Sans;-inkscape-font-specification:Helvetica;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none"
x="39.796597"
y="57.447254"
id="text3974"
sodipodi:linespacing="125%"><tspan
sodipodi:role="line"
id="tspan3976"
x="39.796597"
y="57.447254" /></text>
<g
id="text4163"
style="font-style:italic;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:40px;line-height:125%;font-family:'Airbus Special';-inkscape-font-specification:'Airbus Special Bold Italic';letter-spacing:0px;word-spacing:0px;fill:#ffffff;fill-opacity:1;stroke:none"
transform="translate(-153.18412,-49.986397)"
inkscape:export-xdpi="296.83377"
inkscape:export-ydpi="296.83377">
<path
inkscape:connector-curvature="0"
id="path3039"
style="font-family:'Republika Exp';-inkscape-font-specification:'Republika Exp Bold Italic';fill:#ffffff;fill-opacity:1"
d="m 271.89189,204.38367 c 0.45331,1e-5 0.73331,0.08 0.84,0.24 0.13331,0.16001 0.13331,0.50668 0,1.04 l -3.16,12.92 c -0.13335,0.53333 -0.29335,0.88 -0.48,1.04 -0.16002,0.16 -0.48002,0.24 -0.96,0.24 l -10.2,0 c -0.29334,0 -0.56001,0.08 -0.8,0.24 -0.21334,0.16 -0.34668,0.34666 -0.4,0.56 l -0.44,1.84 c -0.0533,0.21333 -0.0133,0.4 0.12,0.56 0.15999,0.16 0.38666,0.24 0.68,0.24 l 10.6,0 c 1.27998,0 2.37331,-0.0933 3.28,-0.28 0.93331,-0.18667 1.71998,-0.49334 2.36,-0.92 0.66664,-0.45334 1.21331,-1.04 1.64,-1.76 0.42664,-0.72 0.77331,-1.62667 1.04,-2.72 l 2.68,-11 c 0.26664,-1.09332 0.35997,-1.99999 0.28,-2.72 -0.08,-0.71998 -0.3467,-1.29332 -0.8,-1.72 -0.45336,-0.45332 -1.12003,-0.77332 -2,-0.96 -0.88003,-0.18665 -2.00003,-0.27998 -3.36,-0.28 l -19.44,0 c -0.29334,2e-5 -0.56,0.08 -0.8,0.24 -0.21334,0.16002 -0.34667,0.34668 -0.4,0.56 l -0.44,1.84 c -0.0533,0.21335 -0.0133,0.40001 0.12,0.56 0.16,0.16001 0.38666,0.24001 0.68,0.24 l 19.36,0 m -15.68,5.56 c 0.0533,-0.21332 -10e-6,-0.41332 -0.16,-0.6 -0.13334,-0.21332 -0.34667,-0.31999 -0.64,-0.32 l -4.12,0 c -0.29334,1e-5 -0.56,0.10668 -0.8,0.32 -0.21334,0.18668 -0.34667,0.38668 -0.4,0.6 l -5,20.52 c -0.0533,0.21332 -0.0133,0.39999 0.12,0.56 0.16,0.15999 0.38667,0.23999 0.68,0.24 l 4.12,0 c 0.29333,-1e-5 0.54666,-0.08 0.76,-0.24 0.24,-0.16001 0.38666,-0.34668 0.44,-0.56 l 5,-20.52" />
<path
inkscape:connector-curvature="0"
id="path3041"
style="font-family:'Republika Exp';-inkscape-font-specification:'Republika Exp Bold Italic';fill:#ffffff;fill-opacity:1"
d="m 282.22439,223.30367 c 0.10667,0 0.25333,-0.0267 0.44,-0.08 0.18666,-0.08 0.30666,-0.14667 0.36,-0.2 l 9.68,-7.2 4.6,7.16 c 0.0533,0.08 0.14665,0.16 0.28,0.24 0.15998,0.0533 0.29332,0.08 0.4,0.08 l 5.36,0 c 0.45331,0 0.79998,-0.13334 1.04,-0.4 0.23998,-0.29334 0.25331,-0.58667 0.04,-0.88 l -7.12,-10.2 12.28,-9.52 c 0.3733,-0.29332 0.50664,-0.58665 0.4,-0.88 -0.1067,-0.29332 -0.3867,-0.43998 -0.84,-0.44 l -4.12,0 c -0.10669,2e-5 -0.24002,0.04 -0.4,0.12 -0.16002,0.0533 -0.29336,0.10668 -0.4,0.16 l -9.2,7.24 -4.92,-7.2 c -0.0533,-0.08 -0.17334,-0.14665 -0.36,-0.2 -0.16001,-0.08 -0.29334,-0.11998 -0.4,-0.12 l -5.56,0 c -0.45334,2e-5 -0.8,0.14668 -1.04,0.44 -0.24,0.26668 -0.25333,0.54668 -0.04,0.84 l 7.24,10.36 -9.56,7.28 -6.44,0 c -0.29333,0 -0.54666,0.08 -0.76,0.24 -0.23999,0.16 -0.38666,0.34666 -0.44,0.56 l -0.44,1.84 c -0.0533,0.21333 10e-6,0.4 0.16,0.56 0.13334,0.16 0.34667,0.24 0.64,0.24 l 9.12,-0.04" />
<path
inkscape:connector-curvature="0"
id="path3043"
style="font-family:'Republika Exp';-inkscape-font-specification:'Republika Exp Bold Italic';fill:#ffffff;fill-opacity:1"
d="m 316.83127,208.50367 1.6,-6.56 c 0.0533,-0.21332 0.0133,-0.42665 -0.12,-0.64 -0.13335,-0.21332 -0.34668,-0.31998 -0.64,-0.32 l -4.24,0 c -0.29334,2e-5 -0.56001,0.10668 -0.8,0.32 -0.21334,0.21335 -0.34667,0.42668 -0.4,0.64 l -1.88,7.68 c -0.10667,0.42668 -0.16001,0.85334 -0.16,1.28 0.0267,0.42667 0.11999,0.81334 0.28,1.16 0.18666,0.34667 0.45333,0.64001 0.8,0.88 0.37333,0.21334 0.86666,0.32001 1.48,0.32 l 11.68,0 -2.24,9.24 c -0.0533,0.21333 -0.0134,0.4 0.12,0.56 0.15998,0.16 0.38665,0.24 0.68,0.24 l 4.24,0 c 0.29331,0 0.54664,-0.08 0.76,-0.24 0.23998,-0.16 0.38664,-0.34667 0.44,-0.56 l 2.24,-9.24 10.08,0 c 0.2133,1e-5 0.4133,-0.0533 0.6,-0.16 0.2133,-0.13333 0.3733,-0.26666 0.48,-0.4 l 0.4,-1.8 c 0.18663,-0.29333 0.19996,-0.53333 0.04,-0.72 -0.13337,-0.21332 -0.37337,-0.31999 -0.72,-0.32 l -10.08,0 1.96,-7.96 c 0.0533,-0.21332 -3e-5,-0.41332 -0.16,-0.6 -0.13336,-0.21332 -0.3467,-0.31998 -0.64,-0.32 l -4.24,0 c -0.29336,2e-5 -0.56002,0.10668 -0.8,0.32 -0.21336,0.18668 -0.34669,0.38668 -0.4,0.6 l -1.96,7.96 -7.6,0 c -0.37335,10e-6 -0.62668,-0.14666 -0.76,-0.44 -0.10668,-0.31999 -0.12001,-0.62666 -0.04,-0.92" />
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 7.4 KiB