<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Tools on Schallberts Blog</title><link>https://blog.schallbert.de/tags/tools/</link><description>Recent content in Tools on Schallberts Blog</description><generator>Hugo</generator><language>de</language><lastBuildDate>Sun, 14 Sep 2025 00:00:00 +0000</lastBuildDate><atom:link href="https://blog.schallbert.de/tags/tools/index.xml" rel="self" type="application/rss+xml"/><item><title>passtdas auf Github</title><link>https://blog.schallbert.de/announcements/2025-09-14-passtdas/</link><pubDate>Sun, 14 Sep 2025 00:00:00 +0000</pubDate><author>Schallbert</author><guid>https://blog.schallbert.de/announcements/2025-09-14-passtdas/</guid><description type="html">&#10; &lt;img src="https://blog.schallbert.de/assets/images/posts/2025-09-08-passtdas-thumb.avif"&#10; class="post-cover"&#10; alt="Image: Visualizazion of how passtdas analyzes and determines workpiece edges"&#10; title="passtdas auf Github" /&gt;&#10;&lt;h2 id="-september-2025--passtdas-zum-download-verfügbar"&gt;&amp;mdash; September 2025 &amp;mdash; passtdas zum Download verfügbar&lt;/h2&gt;&#10;&lt;p&gt;Das Werkzeug &lt;a href="https://blog.schallbert.de/passtdas/"&gt;passtdas&lt;/a&gt; liest eine G-Code Datei für die Bearbeitung mit einer CNC-Fräsmaschine und ermittelt die Werkstückgrenzen (Extremwerte) in X und Y.&#10;Anschließend schreibt es ein weiteres CNC-Programm mit diesen Punkten und ermöglicht so, dass die Werkstückgrenzen direkt an der Maschine angefahren werden können.&lt;/p&gt;&#10;&lt;div class="media-wrapper center"&gt;&#10; &lt;figure class="media-frame"&gt;&#10; &lt;img src="https://blog.schallbert.de/assets/images/posts/2025-09-08-ext.avif" alt="Image: Visual example of an extreme value dataset for a simple geometry" /&gt;&lt;/figure&gt;&#10;&lt;/div&gt;&#10;&lt;p&gt;So kann stets sichergestellt werden, dass der Rohling korrekt ausgerichtet ist und das Werkstück drauf passt.&lt;/p&gt;&#10;&lt;p&gt;&lt;a href="https://github.com/Schallbert/passtdas" target="_blank" rel="noopener noreferrer" class="external-link"&gt;Link zum Projekt auf Github&lt;span class="external-link-icon" aria-hidden="true"&gt;↗&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;&#10;&lt;p&gt;Ich habe vor, das Projekt demnächst in eine Browser-Lösung zu portieren und will es auf diese Weise einfacher zugänglich machen.&lt;/p&gt;&#10;&lt;p&gt;&lt;em&gt;Schallbert&lt;/em&gt;&lt;/p&gt;&#10;</description></item><item><title>passtdas - ein Hilfsprogramm für die CNC</title><link>https://blog.schallbert.de/passtdas/</link><pubDate>Mon, 08 Sep 2025 00:00:00 +0000</pubDate><author>Schallbert</author><guid>https://blog.schallbert.de/passtdas/</guid><description type="html">&#10; &lt;img src="https://blog.schallbert.de/assets/images/posts/2025-09-08-passtdas-thumb.avif"&#10; class="post-cover"&#10; alt="Image: Visualizazion of how passtdas analyzes and determines workpiece edges"&#10; title="passtdas - ein Hilfsprogramm für die CNC" /&gt;&#10;&lt;h2 id="das-problem"&gt;Das Problem&lt;/h2&gt;&#10;&lt;p&gt;Ein Bekannter von mir schrieb mich an. Er betreibt eine CNC-Portalfräsmaschine als Hobby so wie ich und fertigt oft Einzelstücke. Die dabei entstehenden Reste sind aber teils zu schade zum Wegwerfen. Für eine bestmögliche Materialausnutzung probiert er, diese Reste als Rohlinge für weitere Projekte zu verwenden.&lt;/p&gt;&#10;&lt;blockquote&gt;&#10;&lt;p&gt;&amp;ldquo;Weißt du, wie ich an der Maschine herausfinden kann, ob mein Frästeil auf den Rohling passt?&amp;rdquo; - Anonym&lt;/p&gt;&#10;&lt;/blockquote&gt;&#10;&lt;p&gt;Schnell ist es passiert: Den Maßen zufolge passt das Werkstück so gerade auf den Rohling. Setzt man den Nullpunkt nur leicht falsch, so fährt der Fräser über die Werkstückgrenzen hinaus und man kann das Werkstück wegwerfen.&lt;/p&gt;&#10;&lt;h2 id="die-lösung"&gt;Die Lösung&lt;/h2&gt;&#10;&lt;p&gt;Es wäre doch toll, wenn die Maschine vor Beginn des Fräsvorganges die Kontur des Werkstückes abfahren würde, oder? So könnte man unkompliziert herausfinden, ob sich der Rohling wirklich komplett innerhalb der Werkstückgrenze befindet.&lt;/p&gt;&#10;&lt;p&gt;Da ich auf Anhieb keine schnelle Lösung online finden kann, denke ich an selbstgeschriebene Software für die Umsetzung. Daher mache ich mich an die Arbeit.&lt;/p&gt;&#10;&lt;p&gt;TODO: ADD VIDEO LINK&lt;/p&gt;&#10;&lt;h2 id="die-software"&gt;Die Software&lt;/h2&gt;&#10;&lt;p&gt;Für einen schnellen Prototypen wähle ich die Hochsprache &lt;a href="https://www.python.org/downloads/" target="_blank" rel="noopener noreferrer" class="external-link"&gt;python&lt;span class="external-link-icon" aria-hidden="true"&gt;↗&lt;/span&gt;&lt;/a&gt;. Warum? Ich beherrsche &lt;em&gt;python&lt;/em&gt; recht gut, Bibliotheken für die erforderlichen geometrischen Berechnungen sind verfügbar, und das geschriebene Programm lässt sich leicht in eine all-in-one-Datei kompilieren.&lt;/p&gt;&#10;&lt;p&gt;Das Programm soll Maschineninstruktionen (G-Code) lesen und die Fräspfade analysieren. Die Stellen, an denen im Fräsprogramm die maximalen und minimalen &lt;code&gt;X- und Y-Werte&lt;/code&gt; angefahren werden, sollen abgespeichert und selbst als Bewegungskommando in einer Pfaddatei ausgegeben werden.&lt;/p&gt;&#10;&lt;p&gt;Lädt man dieses Programm auf die Maschine, so wird ein so ermittelter &amp;ldquo;Extremwert&amp;rdquo; angefahren und die Z-Achse von Sicherheits- auf Messhöhe abgesenkt. Anschließend wird das Programm pausiert, sodass der Bediener Anpassungen der Werkstückposition vornehmen kann. Erst durch Einabe eines weiteren Startbefehls wird der nächste Extremwert angefahren usw.&lt;/p&gt;&#10;&lt;p&gt;Dieses Programm wird &lt;em&gt;passtdas&lt;/em&gt; heißen.&lt;/p&gt;&#10;&lt;h3 id="programmart"&gt;Programmart&lt;/h3&gt;&#10;&lt;p&gt;Ich entscheide mich für ein Konsolenprogramm mit wenigen Parametern:&lt;/p&gt;&#10;&lt;table&gt;&#10;&#9;&lt;thead&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;Shortcut&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;Parameter name&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;Description&lt;/th&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/thead&gt;&#10;&#9;&lt;tbody&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;code&gt;-f&lt;/code&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;code&gt;--file&lt;/code&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;The source file to be analyzed. Required.&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;code&gt;-s&lt;/code&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;code&gt;--zsafety&lt;/code&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Safety height the machine will do flyovers with. Optional.&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;code&gt;-p&lt;/code&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;code&gt;--zprobe&lt;/code&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Probe height the machine will pinpoint to. Optional.&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;p&gt;Die beiden Höhenparameter bekommen Default-Werte, sodass sie nicht immer mit angegeben werden müssen.&lt;/p&gt;&#10;&lt;h3 id="eingabe"&gt;Eingabe&lt;/h3&gt;&#10;&lt;p&gt;&lt;em&gt;passtdas&lt;/em&gt; liest Dateien ein und durchsucht sie zeilenweise nach Bewegungsbefehlen &lt;code&gt;G00, G01, G02, G03&lt;/code&gt;. Während die Auswertung für lineare Bewegungen wie &lt;code&gt;G00, G01&lt;/code&gt; einfach ist - Lineare Bewegungen lassen sich durch Punkt-zu-Punkt-Verbindungen ausdrücken, deren Extremwerte nicht zwischen den Punkten liegen können - kann das für Kreissegmente durchaus herausfordernd sein.&lt;/p&gt;&#10;&lt;p&gt;Die Höheninformation auf der Z-Achse wird ebenfalls mitgelesen und gespeichert. So kann die Zerspanungstechnikerin schnell prüfen, ob die maximale Frästiefe mit der Gewünschten übereinstimmt.&lt;/p&gt;&#10;&lt;p&gt;Befinden sich in der G-Code-Datei keine oder falsch formulierte Anweisungen, so gibt das &lt;em&gt;passtdas&lt;/em&gt; entsprechende Fehlermeldungen aus und bricht die Analyse ab.&lt;/p&gt;&#10;&lt;h3 id="definition-kreissegmente"&gt;Definition Kreissegmente&lt;/h3&gt;&#10;&lt;p&gt;Zum Hintergrund: Im G-Code können Kreissegmente auf zwei Arten definiert werden.&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;[&lt;/span&gt;...&lt;span style="color:#f92672"&gt;]&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;G00 X5.660 Y-0.000 Z10.000&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;G02 X-5.660 Y0.000 R5.660 F1600&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;[&lt;/span&gt;...&lt;span style="color:#f92672"&gt;]&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Kommando:&lt;/p&gt;&#10;&lt;blockquote&gt;&#10;&lt;p&gt;&amp;ldquo;Fahre einen Kreisbogen im Uhrzeigersinn ab dem Punkt &lt;code&gt;X5.66 Y0&lt;/code&gt; mit Radius &lt;code&gt;5.66mm&lt;/code&gt; bis zum Punkt &lt;code&gt;X-5.66 Y0&lt;/code&gt; mit Vorschub &lt;code&gt;1600mm/min&lt;/code&gt; auf Höhe &lt;code&gt;10mm&lt;/code&gt;.&amp;rdquo;&lt;/p&gt;&#10;&lt;/blockquote&gt;&#10;&lt;p&gt;Zeichnet man diese Kommandos, entsteht ein hängender Halbkreis. Kreise können mittels dreier Punkte definiert werden. Doch nur zwei Punkte sind gegeben. Der dritte Punkt muss mit Hilfe von Anfangs- und Endpunkt aus dem ebenfalls angegebenen Kreisradius berechnet werden.&lt;/p&gt;&#10;&lt;div class="media-wrapper center"&gt;&#10; &lt;figure class="media-frame"&gt;&#10; &lt;img src="https://blog.schallbert.de/assets/images/posts/2025-09-08-arcr.avif" alt="Image: drawing an arc using given radius, start- and endpoint" /&gt;&lt;/figure&gt;&#10;&lt;/div&gt;&#10;&lt;p&gt;&lt;em&gt;Aufgabe: Finde heraus, wo dieser Kreis seine Extremwerte in XY hat.&lt;/em&gt;&lt;/p&gt;&#10;&lt;p&gt;Aber auch so kann ein Kreissegment definiert sein:&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;[&lt;/span&gt;...&lt;span style="color:#f92672"&gt;]&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;G00 X-2.5696 Y5.0431&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;G03 X-4.6258 Y3.2616 Z-0.5000 I2.5696 J-5.0431&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;[&lt;/span&gt;...&lt;span style="color:#f92672"&gt;]&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Kommando:&lt;/p&gt;&#10;&lt;blockquote&gt;&#10;&lt;p&gt;&amp;ldquo;Fahre einen Kreisbogen gegen den Uhrzeigersinn ab dem Punkt &lt;code&gt;X-2.56 Y5.04&lt;/code&gt; mit Mittelpunktkoordinaten &lt;code&gt;I2.56 J-5.04&lt;/code&gt; bis zum Punkt &lt;code&gt;X-4.62 Y3.26&lt;/code&gt;.&amp;rdquo;&lt;/p&gt;&#10;&lt;/blockquote&gt;&#10;&lt;p&gt;Zeichnet man diese Kommandos, entsteht ein kurzes Kreissegment im oberen linken Quadranten. Hier sind zwar drei Punkte (Start- und Endpunkt sowie Kreismittelpunkt) gegeben. Doch auch hier kann es mitunter schwierig werden, herauszufinden, ob irgendwo auf dem Kreisbogen ein Extremwert angefahren wird.&lt;/p&gt;&#10;&lt;div class="media-wrapper center"&gt;&#10; &lt;figure class="media-frame"&gt;&#10; &lt;img src="https://blog.schallbert.de/assets/images/posts/2025-09-08-arcij.avif" alt="Image: drawing an arc using center point, start- and endpoint" /&gt;&lt;/figure&gt;&#10;&lt;/div&gt;&#10;&lt;p&gt;&lt;em&gt;Aufgabe: Finde heraus, wo dieser Kreis seine Extremwerte in XY hat.&lt;/em&gt;&lt;/p&gt;&#10;&lt;h3 id="extremwerte-von-kreissegmenten-berechnen"&gt;Extremwerte von Kreissegmenten berechnen&lt;/h3&gt;&#10;&lt;p&gt;Ein Kreissegment kann je nach Spanne bis zu vier zusätzliche Extremwerte haben: &lt;code&gt;X+, Y+, X-, Y-&lt;/code&gt;. Bei einem Vollkreis sind dies stets die Koordinatenschnittpunkte vom Radius aus gesehen.&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;def&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;get_extremes_from_arc&lt;/span&gt;(arc, coordinates):&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#75715e"&gt;# [...]&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; x_plus_radius &lt;span style="color:#f92672"&gt;=&lt;/span&gt; [center_x &lt;span style="color:#f92672"&gt;+&lt;/span&gt; radius, center_y, xyz[&lt;span style="color:#ae81ff"&gt;2&lt;/span&gt;]]&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; y_plus_radius &lt;span style="color:#f92672"&gt;=&lt;/span&gt; [center_x, center_y &lt;span style="color:#f92672"&gt;+&lt;/span&gt; radius, xyz[&lt;span style="color:#ae81ff"&gt;2&lt;/span&gt;]]&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; x_minus_radius &lt;span style="color:#f92672"&gt;=&lt;/span&gt; [center_x &lt;span style="color:#f92672"&gt;-&lt;/span&gt; radius, center_y, xyz[&lt;span style="color:#ae81ff"&gt;2&lt;/span&gt;]]&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; y_minus_radius &lt;span style="color:#f92672"&gt;=&lt;/span&gt; [center_x, center_y &lt;span style="color:#f92672"&gt;-&lt;/span&gt; radius, xyz[&lt;span style="color:#ae81ff"&gt;2&lt;/span&gt;]]&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; extremevalue_order &lt;span style="color:#f92672"&gt;=&lt;/span&gt; [x_plus_radius, y_plus_radius, x_minus_radius, y_minus_radius]&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;if&lt;/span&gt; (arc[&lt;span style="color:#ae81ff"&gt;1&lt;/span&gt;] &lt;span style="color:#f92672"&gt;-&lt;/span&gt; arc[&lt;span style="color:#ae81ff"&gt;0&lt;/span&gt;]) &lt;span style="color:#f92672"&gt;&amp;lt;&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;0&lt;/span&gt;:&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#75715e"&gt;# crossing the 0° line (x-axis), handle overflow with nested if below&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; arc[&lt;span style="color:#ae81ff"&gt;1&lt;/span&gt;] &lt;span style="color:#f92672"&gt;+=&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;360&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; result &lt;span style="color:#f92672"&gt;=&lt;/span&gt; []&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;for&lt;/span&gt; crossing_angle &lt;span style="color:#f92672"&gt;in&lt;/span&gt; range(&lt;span style="color:#ae81ff"&gt;0&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;721&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;90&lt;/span&gt;):&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;if&lt;/span&gt; crossing_angle &lt;span style="color:#f92672"&gt;in&lt;/span&gt; range(int(arc[&lt;span style="color:#ae81ff"&gt;0&lt;/span&gt;]), int(arc[&lt;span style="color:#ae81ff"&gt;1&lt;/span&gt;] &lt;span style="color:#f92672"&gt;+&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;1&lt;/span&gt;)):&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; i &lt;span style="color:#f92672"&gt;=&lt;/span&gt; int(crossing_angle &lt;span style="color:#f92672"&gt;/&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;90&lt;/span&gt;)&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;if&lt;/span&gt; i &lt;span style="color:#f92672"&gt;&amp;gt;&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;3&lt;/span&gt;:&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; i &lt;span style="color:#f92672"&gt;-=&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;4&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; result&lt;span style="color:#f92672"&gt;.&lt;/span&gt;append(extremevalue_order[i])&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#75715e"&gt;# [...]&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Sind Kreismittelpunkt sowie Kreisradius bekannt, kann aus den Anfangs- und Endpunkten der überstrichene Winkel bestimmt werden. Hierdurch wird nun klar, ob Kreisanfangspunkt und/oder -Endpunkt selbst Extremwerte darstellen, oder ob durch Überstreichen eines Koordinatennullpunktes zusätzliche Extremwerte entstehen. Genau dies tut das obige Codebeispiel.&lt;/p&gt;&#10;&lt;div class="media-wrapper center"&gt;&#10; &lt;figure class="media-frame"&gt;&#10; &lt;img src="https://blog.schallbert.de/assets/images/posts/2025-09-08-arcext.avif" alt="Image: Possible coordinate extreme values of an arc segment" /&gt;&lt;/figure&gt;&#10;&lt;/div&gt;&#10;&lt;h3 id="datentabelle"&gt;Datentabelle&lt;/h3&gt;&#10;&lt;p&gt;Alle möglichen Extremwerte (zwei bei einer Linie, bis zu vier bei einem Kreissegment) werden nun in einer Datentabelle gesammelt. Sobald jede G-Codezeile ausgewertet und die Liste damit komplett ist, werden die Maximal- und Minimalwerte für jede Achse aus dieser Liste bestimmt.&lt;/p&gt;&#10;&lt;p&gt;So entstehen schließlich vier &lt;code&gt;XYZ&lt;/code&gt;-Koordinaten, welche für jede Raumrichtung die maximale Ausdehnung des Werkstückes beschreibt.&lt;/p&gt;&#10;&lt;div class="media-wrapper center"&gt;&#10; &lt;figure class="media-frame"&gt;&#10; &lt;img src="https://blog.schallbert.de/assets/images/posts/2025-09-08-ext.avif" alt="Image: Visual example of an extreme value dataset for a simple geometry" /&gt;&lt;/figure&gt;&#10;&lt;/div&gt;&#10;&lt;p&gt;Parallel durchsucht das Programm alle Befehle an die Z-Achse und merkt sich die maximale Eintauchtiefe.&lt;/p&gt;&#10;&lt;h3 id="ausgabe"&gt;Ausgabe&lt;/h3&gt;&#10;&lt;p&gt;Das Kommandozeilenprogramm verfügt über keine visuelle Ausgabe. Daher beschränke ich mich auf die Erstellung eines Simulationsprogramms für die Fräsmaschine, in dem die Werkstückausdehnung angefahren wird und bei jedem Punkt pausiert:&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;G90&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# Go to coordinate zero&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;MSG &lt;span style="color:#e6db74"&gt;&amp;#34;Zmin of this job: -1.0&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;G00 Z40&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;G00 X0 Y0&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;G01 Z15 F1200&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;MSG &lt;span style="color:#e6db74"&gt;&amp;#34;PathPreview: Hit START to go to Ymin: [&amp;#39;0.0&amp;#39;, &amp;#39;-5.66&amp;#39;]&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;M00&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;G00 Z40&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;G00 X0.0 Y-5.66&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;G01 Z15 F1200&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;MSG &lt;span style="color:#e6db74"&gt;&amp;#34;PathPreview: Hit START to go to Xmin: [&amp;#39;-5.66&amp;#39;, &amp;#39;0.0&amp;#39;]&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;M00&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;G00 Z40&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;G00 X-5.66 Y0.0&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;G01 Z15 F1200&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;MSG &lt;span style="color:#e6db74"&gt;&amp;#34;PathPreview: Hit START to go to Ymax: [&amp;#39;0.0&amp;#39;, &amp;#39;5.66&amp;#39;]&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;M00&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;G00 Z40&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;G00 X0.0 Y5.66&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;G01 Z15 F1200&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;MSG &lt;span style="color:#e6db74"&gt;&amp;#34;PathPreview: Hit START to go to Xmax: [&amp;#39;5.66&amp;#39;, &amp;#39;0.0&amp;#39;]&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;M00&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;G00 Z40&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;G00 X5.66 Y0.0&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;G01 Z15 F1200&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# [...]&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Obiges Beispiel fährt die Extremwerte eines Kreises mit &lt;code&gt;r=5.66mm&lt;/code&gt; ab. Dabei fährt es stets eine Sicherheitshöhe von &lt;code&gt;Z40&lt;/code&gt; zum Überstreichen der Punkte an und bewegt die Z-Achse bei Ankunft langsam mit &lt;code&gt;F1200&lt;/code&gt; auf die Zielhöhe von &lt;code&gt;Z15&lt;/code&gt;. Wichtig dabei ist, dass der Nullpunkt in &lt;code&gt;Z&lt;/code&gt; vorher korrekt vermessen wurde - sonst kommt es möglicherweise zur Kollision mit dem Werkstück.&lt;/p&gt;&#10;&lt;h2 id="test-und-verifikation"&gt;Test und Verifikation&lt;/h2&gt;&#10;&lt;p&gt;Um zu sehen ob das Programm auch wie erwartet funktioniert habe ich drei Testdateien erstellt:&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;Unit tests: Prüft einzelne Funktionen im Programm, z.B. ob Linien- und Kreissegmente korrekt erkannt werden&lt;/li&gt;&#10;&lt;li&gt;integration tests: Testen, ob Funktionen im Verbund korrekt funktionieren, z.B. die richtige Berechnung von Extremwerten anhand von Eingabewerten&lt;/li&gt;&#10;&lt;li&gt;End to end tests: Diese Tests prüfen über die gesamte Funktionskette, z.B. ob falsch formatierte Eingabedateien erkannt werden&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;div class="media-wrapper center"&gt;&#10; &lt;figure class="media-frame"&gt;&#10; &lt;img src="https://blog.schallbert.de/assets/images/posts/2025-09-08-unittest.avif" alt="Image: Test result summary for passtdas" /&gt;&lt;/figure&gt;&#10;&lt;/div&gt;&#10;&lt;p&gt;Zum Schluss erstelle ich mehrere Testdateien mit dem Programm und fahre die daraus erzeugten Extremwerte mit meiner CNC an.&lt;/p&gt;&#10;&lt;h2 id="open-source-software"&gt;Open-source software&lt;/h2&gt;&#10;&lt;p&gt;Der Quellcode für &lt;em&gt;passtdas&lt;/em&gt; steht kostenlos auf &lt;a href="https://github.com/Schallbert/passtdas" target="_blank" rel="noopener noreferrer" class="external-link"&gt;GitHub&lt;span class="external-link-icon" aria-hidden="true"&gt;↗&lt;/span&gt;&lt;/a&gt; zur Verfügung, muss allerdings durch Python interpretiert werden.&lt;/p&gt;&#10;&lt;p&gt;Ich baue ein Endanwenderfreundliches und leicht zu bedienendes Programm daraus, sobald genügend Leute den Wunsch dafür geäußert haben.&lt;/p&gt;&#10;</description></item><item><title>NVME-Festplatte kaputt?</title><link>https://blog.schallbert.de/broken-nvme/</link><pubDate>Tue, 10 Sep 2024 00:00:00 +0000</pubDate><author>Schallbert</author><guid>https://blog.schallbert.de/broken-nvme/</guid><description type="html">&#10; &lt;img src="https://blog.schallbert.de/assets/images/posts/2024-09-10_nvme-thumb.jpg"&#10; class="post-cover"&#10; alt="Image: My NVME-SSD that suddenly broke down"&#10; title="NVME-Festplatte kaputt?" /&gt;&#10;&lt;h2 id="das-ereignis"&gt;Das Ereignis&lt;/h2&gt;&#10;&lt;p&gt;Mitte April 2024:&lt;/p&gt;&#10;&lt;p&gt;Nach einem Systemupdate fährt mein Laptop plötzlich nicht mehr hoch. Der Bootloader &lt;em&gt;grub-core&lt;/em&gt; meldet, er habe Probleme beim Schreiben von Sektoren.&lt;/p&gt;&#10;&lt;pre tabindex="0"&gt;&lt;code class="language-log" data-lang="log"&gt;error: ../grub-core/efi/efidisk.c:638: failure writing sector 0xXXXXXXXX&#10;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Beim Reboot bleibt mir der Bildschirm nach Anzeige des Firmenlogos mit blinkendem Cursor schwarz. Wenn ich hinter die Maske schaue, dann schlägt das Laden diverser Services fehl:&lt;/p&gt;&#10;&lt;div class="media-wrapper center"&gt;&#10; &lt;figure class="media-frame"&gt;&lt;video controls&gt;&#10; &lt;source src="https://blog.schallbert.de/assets/video/posts/2024-09-10_nvme-boot-errors.mp4" type="video/mp4"&gt;&#10; Your browser does not support the video tag.&#10; &lt;/video&gt;&lt;figcaption class="media-caption"&gt;&#10; &lt;span class="caption-text"&gt;Boot errors due to read-only nvme&lt;/span&gt;&#10; &lt;/figcaption&gt;&lt;/figure&gt;&#10;&lt;/div&gt;&#10;&lt;h2 id="erste-analyse"&gt;Erste Analyse&lt;/h2&gt;&#10;&lt;p&gt;Ich vermutete ein Problem beim Update des Rechners und führte aus dem &lt;a href="https://en.wikipedia.org/wiki/UEFI" target="_blank" rel="noopener noreferrer" class="external-link"&gt;UEFI&lt;span class="external-link-icon" aria-hidden="true"&gt;↗&lt;/span&gt;&lt;/a&gt; von Lenovo heraus einen Festplattentest durch. Ergebnis:&lt;/p&gt;&#10;&lt;pre tabindex="0"&gt;&lt;code class="language-log" data-lang="log"&gt;The media check is complete, the result is: FAIL&#10;&lt;/code&gt;&lt;/pre&gt;&lt;div class="media-wrapper center"&gt;&#10; &lt;figure class="media-frame"&gt;&#10; &lt;img src="https://blog.schallbert.de/assets/images/posts/2024-09-10_diskcheck-fail.jpg" alt="Image: disk check tool diagnoses a defective device" /&gt;&lt;/figure&gt;&#10;&lt;/div&gt;&#10;&lt;p&gt;Eher kein Problem mit dem Betriebssystem sondern eines mit der Platte. Mist. Muss ich um meine Daten bangen? Ich habe zwar Backups herumliegen, das letzte ist aber drei Wochen alt und somit sind einige Stunden Arbeit auf der Kippe. Zudem kostet mich ein Wiederaufsetzen einiges an Zeit. Daher probiere ich erst einmal, ob sich noch etwas retten lässt.&lt;/p&gt;&#10;&lt;h3 id="selbsttest"&gt;Selbsttest&lt;/h3&gt;&#10;&lt;p&gt;Ich lasse also die &lt;a href="https://en.wikipedia.org/wiki/Self-Monitoring,_Analysis_and_Reporting_Technology" target="_blank" rel="noopener noreferrer" class="external-link"&gt;SMART&lt;span class="external-link-icon" aria-hidden="true"&gt;↗&lt;/span&gt;&lt;/a&gt; Tests für die Platte mit &lt;code&gt;smartctl -x /dev/nvm0&lt;/code&gt; durchlaufen und weiß nun, dass sie etwa &lt;code&gt;7600&lt;/code&gt; Betriebsstunden hinter sich und &lt;code&gt;240GB&lt;/code&gt; nutzbare Kapazität hat. Die unter dem Namen &lt;code&gt;nvme0n1&lt;/code&gt; eingesetzte Disk meint, sie sei nun &amp;ldquo;read-only&amp;rdquo;. Und zwar sämtliche Partitionen inklusive Kernel. Na klasse. Das Ergebnis meiner Online-Suche war in etwa:&lt;/p&gt;&#10;&lt;blockquote&gt;&#10;&lt;p&gt;Die Platte ist irreparabel beschädigt. Es muss eine Neue her.&lt;/p&gt;&#10;&lt;/blockquote&gt;&#10;&lt;h3 id="reparaturversuch"&gt;Reparaturversuch&lt;/h3&gt;&#10;&lt;p&gt;Man muss ja nicht alles glauben, was im Netz steht. Also nehme ich das Lenovo-eigene Reparaturwerkzeug für Festplatten zur Hand. Es lässt sich aus dem UEFI heraus aufrufen und firmiert unter dem Namen &lt;a href="https://download.lenovo.com/pccbbs/thinkvantage_en/userguide_uefi_v04.08.000.pdf" target="_blank" rel="noopener noreferrer" class="external-link"&gt;Bad Block Recovery Tool&lt;span class="external-link-icon" aria-hidden="true"&gt;↗&lt;/span&gt;&lt;/a&gt;. Das Programm scannt die Platte auf defekte Sektoren und versucht, betroffene Blöcke wiederherzustellen. Der Durchlauf benötigt für die letzten 10% fast eine halbe Stunde.&lt;/p&gt;&#10;&lt;div class="media-wrapper center"&gt;&#10; &lt;figure class="media-frame"&gt;&#10; &lt;img src="https://blog.schallbert.de/assets/images/posts/2024-09-10_badblockrecovery_summary.jpg" alt="Image: Bad Block Recovery tool&amp;#39;s summary for my disk" /&gt;&lt;/figure&gt;&#10;&lt;/div&gt;&#10;&lt;div class="media-wrapper center"&gt;&#10; &lt;figure class="media-frame"&gt;&#10; &lt;img src="https://blog.schallbert.de/assets/images/posts/2024-09-10_badblockrecovery_detail.jpg" alt="Image: Bad Block Recovery tool&amp;#39;s output messages" /&gt;&lt;/figure&gt;&#10;&lt;/div&gt;&#10;&lt;p&gt;Ergebnis: Wiederherstellung fehlgeschlagen. Ich führe das Werkzeug erneut aus. Und noch ein drittes Mal im langsamen &lt;code&gt;pedantic&lt;/code&gt;-Modus. Immer wieder ohne Erfolg. Ständig bekomme ich &lt;code&gt;critical medium error&lt;/code&gt; angezeigt.&lt;/p&gt;&#10;&lt;div class="media-wrapper center"&gt;&#10; &lt;figure class="media-frame"&gt;&#10; &lt;img src="https://blog.schallbert.de/assets/images/posts/2024-09-10_badblockrecovery_log.jpg" alt="Image: Bad Block Recovery tool&amp;#39;s log" /&gt;&lt;/figure&gt;&#10;&lt;/div&gt;&#10;&lt;blockquote&gt;&#10;&lt;p&gt;Ob dies alles nicht klappt, weil sich die Platte in den Read-only mode gesetzt hat?&lt;/p&gt;&#10;&lt;/blockquote&gt;&#10;&lt;p&gt;Da ich nicht mehr booten kann und keine Konsole zur Verfügung habe, sind meine Möglichkeiten mit Bordmitteln nun erschöpft.&lt;/p&gt;&#10;&lt;h3 id="einwurf-der-read-only-mode-bei-ssds"&gt;Einwurf: Der Read-only mode bei SSDs&lt;/h3&gt;&#10;&lt;p&gt;Laut Internet &lt;a href="https://www.disktuna.com/a-write-protected-ssd-nvme-read-only/" target="_blank" rel="noopener noreferrer" class="external-link"&gt;(DiskTuna)&lt;span class="external-link-icon" aria-hidden="true"&gt;↗&lt;/span&gt;&lt;/a&gt; ist der &lt;em&gt;read only mode&lt;/em&gt; zur Schadensbegrenzung vorhanden. Stellt der Controller des Speichergerätes einen schwerwiegenden Fehler fest, versetzt er die Platte in Nur-Lesezugriff. Somit wird das Risiko minimiert, dass weitere Blöcke korrumpiert oder mit in den Tod gerissen werden.&lt;/p&gt;&#10;&lt;p&gt;Im Forum &lt;a href="https://superuser.com/questions/1802470/ssd-in-read-only-mode-after-power-failure" target="_blank" rel="noopener noreferrer" class="external-link"&gt;Superuser&lt;span class="external-link-icon" aria-hidden="true"&gt;↗&lt;/span&gt;&lt;/a&gt; beschreibt jemand einen identischen Fehler zu meinem, und tatsächlich ist da wohl nichts mehr zu machen.&lt;/p&gt;&#10;&lt;h2 id="datenrettung-per-boot-stick"&gt;Datenrettung per Boot-Stick&lt;/h2&gt;&#10;&lt;p&gt;Weiter geht&amp;rsquo;s mit einem USB-Stick, den ich von einem anderen Rechner aus zum Linux-Boot-Stick mache. Ich stopfe ihn an meinen Laptop und kann ihn endlich wieder hochfahren. Als Medium zur Datenrettung schließe ich eine externe Festplatte an.&lt;/p&gt;&#10;&lt;h3 id="übersicht-verschaffen-mit-fdisk"&gt;Übersicht verschaffen mit &lt;em&gt;fdisk&lt;/em&gt;&lt;/h3&gt;&#10;&lt;p&gt;Zuerst schaue ich, ob alle Platten und Partitionen auftauchen. Dafür tippe ich das Kommando &lt;code&gt;sudo fdisk -l&lt;/code&gt; in die Konsole.&lt;/p&gt;&#10;&lt;div class="media-wrapper center"&gt;&#10; &lt;figure class="media-frame"&gt;&#10; &lt;img src="https://blog.schallbert.de/assets/images/posts/2024-09-10_fdisk.jpg" alt="Image: fdisk&amp;#39;s output on my live system" /&gt;&lt;/figure&gt;&#10;&lt;/div&gt;&#10;&lt;p&gt;Glück gehabt, alles ist noch da! Vielleicht kann ich die Dateien ja einfach von der defekten Festplatte herunter kopieren?&lt;/p&gt;&#10;&lt;h3 id="kopieren-mit-cp"&gt;Kopieren mit &lt;em&gt;cp&lt;/em&gt;&lt;/h3&gt;&#10;&lt;p&gt;Probieren wir&amp;rsquo;s aus.&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;sudo cp -r -v /mnt/nvme0n1p3/Documents/my/important/files /mnt/externalHdd/save&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Ein paar Sekunden denke ich, dass alles glatt geht. Doch dann bricht &lt;code&gt;cp&lt;/code&gt; mit Fehlermeldung ab, das Volume sei nicht verfügbar. Tatsächlich ist die Platte nicht mehr gemountet. Ich kann sie allerdings direkt wieder finden und mounten. Ein paar Versuche später habe ich meine wirklich wichtigen Daten gesichert, der Kopiervorgang bricht aber stets nach ein paar Sekunden ab. Für die ganze Platte würde mir dieses Vorgehen viel zu lange dauern.&lt;/p&gt;&#10;&lt;p&gt;Genau dieses Verhalten - mounten, ein paar Sekunden kopieren, Platte verschwindet - habe ich online in ein paar Foreneinträgen bestätigt bekommen.&lt;/p&gt;&#10;&lt;p&gt;Also muss eine andere Lösung her.&lt;/p&gt;&#10;&lt;h3 id="daten-retten-mit-ddrescue"&gt;Daten retten mit &lt;em&gt;ddrescue&lt;/em&gt;&lt;/h3&gt;&#10;&lt;p&gt;&lt;div class="media-wrapper right"&gt;&#10; &lt;figure class="media-frame"&gt;&#10; &lt;img src="https://blog.schallbert.de/assets/images/posts/2024-09-10_ddrescue.jpg" alt="Image: ddrescue output when saving my broken SSD&amp;#39;s files to an external HDD." /&gt;&lt;/figure&gt;&#10;&lt;/div&gt;&#10;Nach kurzer Online-Suche installiere ich das Programm &lt;a href="https://www.gnu.org/software/ddrescue/" target="_blank" rel="noopener noreferrer" class="external-link"&gt;ddrescue&lt;span class="external-link-icon" aria-hidden="true"&gt;↗&lt;/span&gt;&lt;/a&gt;.&lt;/p&gt;&#10;&lt;p&gt;In der zugehörigen Dokumentation stehen einige Dinge sehr klar drin. Dass man z.B. verstanden haben sollte was es genau tut, bevor man es verwendet. Oder das Folgende:&lt;/p&gt;&#10;&lt;blockquote&gt;&#10;&lt;p&gt;&amp;ldquo;Never try to repair a file system on a drive with I/O errors; you will probably lose even more data. &amp;quot; - ddrescue Manual&lt;/p&gt;&#10;&lt;/blockquote&gt;&#10;&lt;p&gt;Jetzt stellt sich für mich die Frage, ob ich oben mit dem Block-Reparaturversuch genau so einen Fehler begangen habe. Oder bin ich mit der Bad Block Recovery auf der sicheren Seite, da hier von Datenblöcken auf der Platte und nicht vom &amp;ldquo;darüber liegenden&amp;rdquo; Dateisystem die Rede ist?&#10;Hier steht auch, dass die sogenannte &lt;em&gt;Mapfile&lt;/em&gt; eine Kernfunktion des Programmes ist. Nach Abbruch, Neustart, für die Zusammenführung von Backups und zum Verkürzen der Datenrettung bietet sie einen großen Zeitvorteil. Daher sei es keine schlechte Idee, sich die Mapfile schon bei Erstellung einer Offlinhe-Sicherheitskopie zu erzeugen und gut wegzulegen. Insgesamt fand ich das Tool extrem hilfreich, effektiv und leicht zu bedienen und kann es an dieser Stelle nur weiterempfehlen.&lt;/p&gt;&#10;&lt;p&gt;Zurück zur Sache: Ich finde einen ganz einfachen Befehl, die komplette Datenpartition meines beschädigten NVME-Speichers auf eine externe Festplatte zu kopieren:&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;ddrescue --sparse /dev/nvme0n1p3 /run/media/liveuser/myExternalHDD/datapartition&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Die &lt;code&gt;--sparse&lt;/code&gt;-Option überspringt mit Nullen belegte Bereiche der Quellplatte und kann so eine Menge Platz auf dem Zieldatenträger einsparen.&#10;Das Programm benötigt eine Viertelstunde für den kompletten Durchlauf. Es kann wie oben im Bild zu erkennen tatsächlich &lt;code&gt;99.6%&lt;/code&gt; der Daten retten und auch mehrere Monate später habe ich die restlichen &lt;code&gt;0.4%&lt;/code&gt; noch nicht vermisst. Glück gehabt.&lt;/p&gt;&#10;&lt;h3 id="überprüfung-output-von-ddrescue-ansehen"&gt;Überprüfung: Output von &lt;em&gt;ddrescue&lt;/em&gt; ansehen&lt;/h3&gt;&#10;&lt;p&gt;Jedenfalls legt das Programm am Ende eine einzige Datei auf meiner externen Platte ab: &lt;code&gt;datapartition.img&lt;/code&gt;&#10;Dieses Image kann ich mit &lt;code&gt;fdisk -l&lt;/code&gt; anschauen:&lt;/p&gt;&#10;&lt;pre tabindex="0"&gt;&lt;code class="language-log" data-lang="log"&gt;datapartition.img: 236.89 GiB, 254356226048 bytes, 496789504 sectors&#10;Units: sectors of 1 * 512 = 512 bytes&#10;Sector size (logical/physical): 512 bytes / 512 bytes&#10;I/O size (minimum/optimal): 512 bytes / 512 bytes&#10;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Alles da, das ist ja schon einmal gut. Ob denn nun auch alles drin ist?&lt;/p&gt;&#10;&lt;p&gt;Dafür mounte ich die Partition mal und schaue mich per &lt;code&gt;cd&lt;/code&gt; und &lt;code&gt;ls -l&lt;/code&gt; darin um:&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;sudo mkdir /mnt/olddisk &lt;span style="color:#75715e"&gt;# Mount point of the rescued data image&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;sudo mount /run/media/liveuser/myExternalHDD/datapartition.img /mnt/olddisk&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Zum Glück war alles drin, was drin sein sollte. Nun konnte ich das Image unmounten, den Rechner herunterfahren und eine neue Festplatte einbauen lassen.&lt;/p&gt;&#10;&lt;h2 id="die-neue-festplatte"&gt;Die neue Festplatte&lt;/h2&gt;&#10;&lt;p&gt;Auch hier habe ich noch einmal Glück gehabt: Auf meinem Gebrauchtlaptop war noch Garantie und so bekam ich ihn binnen einer Woche mit einer neuen (und doppelt so großen) Festplatte zurück gesendet. Da ich so große Angst vor Datenklau bekam, hatte ich meine alte Platte vor dem Versenden ausgebaut. Dabei kam ich mir ganz schön paranoid vor.&lt;/p&gt;&#10;&lt;p&gt;Diese Arbeit hätte ich mir aber vielleicht sparen können, denn &lt;em&gt;ddrescue&lt;/em&gt; hat auch für paranoide Leute wie mich eine Software-Lösung parat: Die Option &lt;code&gt;--fill-mode&lt;/code&gt;.&#10;Hiermit können nach erfolgter Rettung die &amp;ldquo;noch guten&amp;rdquo; Blöcke und Sektoren gelöscht werden. Nur die ohnehin defekten Sektoren bleiben erhalten. Aus der &lt;a href="https://www.gnu.org/software/ddrescue/manual/ddrescue_manual.html#Fill-mode" target="_blank" rel="noopener noreferrer" class="external-link"&gt;Online-Dokumentation&lt;span class="external-link-icon" aria-hidden="true"&gt;↗&lt;/span&gt;&lt;/a&gt;:&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;ddrescue --fill-mode&lt;span style="color:#f92672"&gt;=&lt;/span&gt;+ --force /dev/zero bad_drive mapfile&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Ob dies allerdings auch einer Platte wie meiner funktioniert hätte, die der On-Board-Controller auf &amp;ldquo;read-only&amp;rdquo; gesetzt hat, ist mir nicht klar. Egal.&lt;/p&gt;&#10;&lt;p&gt;Ich kann jetzt jedenfalls mit einem voll funktionsfähigen Laptop weiter Blog-Einträge verfassen ☺️.&lt;/p&gt;&#10;</description></item><item><title>Vom Bild zum Pfad</title><link>https://blog.schallbert.de/path-from-image/</link><pubDate>Mon, 04 Jul 2022 00:00:00 +0000</pubDate><author>Schallbert</author><guid>https://blog.schallbert.de/path-from-image/</guid><description type="html">&#10; &lt;img src="https://blog.schallbert.de/assets/images/posts/2022-07-04_cam-thumb.jpg"&#10; class="post-cover"&#10; alt="Image: CAM drawing of Image-to-Path engraving"&#10; title="Vom Bild zum Pfad" /&gt;&#10;&lt;p&gt;Dies ist ein kurzer Beitrag über die Verwendung der beiden Open-Source-Programme &lt;a href="https://www.getpaint.net/" target="_blank" rel="noopener noreferrer" class="external-link"&gt;Paint.NET&lt;span class="external-link-icon" aria-hidden="true"&gt;↗&lt;/span&gt;&lt;/a&gt; und &lt;a href="https://inkscape.org/" target="_blank" rel="noopener noreferrer" class="external-link"&gt;Inkscape&lt;span class="external-link-icon" aria-hidden="true"&gt;↗&lt;/span&gt;&lt;/a&gt;, um aus Pixelgrafiken Pfade zu erzeugen. Diese können dann z.B. für Gravuren auf einer CNC-Maschine, einem Laserschneider oder einem Plotter verwendet werden. Und das sogar auf Grundlage eines digitalen Bildes von geringer Qualität in einem verlustbehafteten Datenkompressionsformat wie JPEG.&lt;/p&gt;&#10;&lt;p&gt;Der Beitrag wurde inspiriert von &lt;a href="https://graphicdesign.stackexchange.com/questions/113560/convert-parallel-paths-into-one-in-inkscape" target="_blank" rel="noopener noreferrer" class="external-link"&gt;diesem ausgezeichneten Stackexchange-Thread&lt;span class="external-link-icon" aria-hidden="true"&gt;↗&lt;/span&gt;&lt;/a&gt;.&lt;/p&gt;&#10;&lt;h2 id="die-bildquelle"&gt;Die Bildquelle&lt;/h2&gt;&#10;&lt;div class="media-wrapper right"&gt;&#10; &lt;figure class="media-frame"&gt;&#10; &lt;img src="https://blog.schallbert.de/assets/images/posts/2022-07-04_original.jpg" alt="Image: Lagerfeuer - wunderschön gezeichnet von Schallbert" /&gt;&lt;/figure&gt;&#10;&lt;/div&gt;&#10;&lt;p&gt;Alles beginnt mit zu konvertierenden dem Bild (bzw. der Pixelgrafik).&lt;/p&gt;&#10;&lt;h3 id="geistiges-eigentum"&gt;Geistiges Eigentum&lt;/h3&gt;&#10;&lt;p&gt;Zu beachten ist, dass Bilder (auch selbstgezeichnete) in der Regel urheberrechtlich geschützt sind, so dass zunächst die (schriftliche) Zustimmung des Eigentümers des geistigen Eigentums eingeholt werden muss.&lt;/p&gt;&#10;&lt;p&gt;Sind Sie der Inhaber der geistigen Eigentumsrechte, ist das viel einfacher. Aus diesem Grund habe ich für diese kurze Demo ein Bild gewählt, das ich selbst erstellt habe.&lt;/p&gt;&#10;&lt;h3 id="bildqualität"&gt;Bildqualität&lt;/h3&gt;&#10;&lt;p&gt;Richtig gut zeichnen kann ich allerdings nicht, wie das Bild klar andeutet. Einige Linien sind übereinander gemalt und der Kontrast ist gering. Perfekte Bedingungen, um zu zeigen, was die Software leisten kann!&lt;/p&gt;&#10;&lt;p&gt;Hinweis: Es gilt wie immer das Credo &amp;ldquo;Garbage in, garbage out&amp;rdquo;. Es ist also sicher zu stellen, dass vor Beginn der Arbeiten die bestmögliche Bildqualität erreicht wird. Auf diese Weise ist die Bereinigung des Bildes viel einfacher und die Gravurpfade fallen simpler und genauer aus.&lt;/p&gt;&#10;&lt;h2 id="paintnet"&gt;Paint.NET&lt;/h2&gt;&#10;&lt;div class="media-wrapper right"&gt;&#10; &lt;figure class="media-frame"&gt;&#10; &lt;img src="https://blog.schallbert.de/assets/images/posts/2022-07-04_luminance.jpg" alt="Image: Luminance change for maximum contrast" /&gt;&lt;/figure&gt;&#10;&lt;/div&gt;&#10;&lt;h3 id="farbkorrektur-und-freistellung"&gt;Farbkorrektur und Freistellung&lt;/h3&gt;&#10;&lt;p&gt;Schneiden Sie Ihr Bild zunächst auf den Inhalt zu, den Sie später verwenden möchten. Nehmen Sie dann das Werkzeug &lt;code&gt;Helligkeitskurve&lt;/code&gt; (Anpassen -&amp;gt; Kurven) und versuchen Sie, die hellen und dunklen Töne so weit wie möglich zu trennen.&lt;/p&gt;&#10;&lt;p&gt;Zweitens, wenn Ihr Bild so schlecht ist wie meines, verwenden Sie das Werkzeug &lt;code&gt;Zauberstab&lt;/code&gt;. Spielen Sie mit den Toleranzen für die Farberkennung - um so den Hintergrund so gut wie möglich zu entfernen und das Motiv freizustellen.&lt;/p&gt;&#10;&lt;p&gt;Drittens: Verwenden Sie das &lt;code&gt;Kontur&lt;/code&gt;-Werkzeug (Effekte -&amp;gt; Stilisieren -&amp;gt; Kontur), um eine schöne dicke Linie als Umriss zu erhalten. Eine Umwandlung des Bildes in Graustufen und eine weitere Erhöhung des Kontrasts können helfen, diese Linie schwarz zu machen. Falls Sie Linien verlieren, die nicht dunkel genug sind - keine Sorge, das lässt sich später in Inkscape leicht beheben.&lt;/p&gt;&#10;&lt;h3 id="weitere-bereinigung"&gt;Weitere Bereinigung&lt;/h3&gt;&#10;&lt;p&gt;Entfernen Sie so viele &amp;ldquo;Pixelwolken&amp;rdquo; und andere Artefakte aus dem Bild wie möglich mit den Werkzeugen &lt;code&gt;Zauberstab&lt;/code&gt; oder &lt;code&gt;Radiergummi&lt;/code&gt;, das ist jetzt einfacher als später.&lt;/p&gt;&#10;&lt;p&gt;Speichern Sie Ihr Bild als portable Netzwerkgrafik &lt;code&gt;.PNG&lt;/code&gt;.&lt;/p&gt;&#10;&lt;div class="media-wrapper center"&gt;&#10; &lt;figure class="media-frame"&gt;&#10; &lt;img src="https://blog.schallbert.de/assets/images/posts/2022-07-04_outline.jpg" alt="Image: Outline tool for continuous and thick lines" /&gt;&lt;/figure&gt;&#10;&lt;/div&gt;&#10;&lt;h2 id="inkscape"&gt;Inkscape&lt;/h2&gt;&#10;&lt;p&gt;Öffnen Sie das Bild in Inkscape. Wählen Sie die Standard-Import-Einstellungen &lt;code&gt;DPI der Datei verwenden&lt;/code&gt;.&lt;/p&gt;&#10;&lt;h3 id="nachzeichnen"&gt;Nachzeichnen&lt;/h3&gt;&#10;&lt;p&gt;Wählen Sie &lt;code&gt;Pfad -&amp;gt; Bitmap nachzeichnen&lt;/code&gt;. In dem neu geöffneten Tab wählen Sie &lt;code&gt;Trace Bitmap&lt;/code&gt;, &lt;code&gt;Single Scan&lt;/code&gt;, &lt;code&gt;Brightness Cutoff&lt;/code&gt; und spielen mit den Optionen herum, bis sich die Kontur Ihres Motivs vom Hintergrund abhebt. Stellen Sie sicher, dass Sie das Bild per Mausklick auswählen, bevor Sie auf &amp;ldquo;Aktualisieren&amp;rdquo; oder &amp;ldquo;Anwenden&amp;rdquo; klicken. Wenn Sie mit der Vorschau nicht zufrieden sind, passen Sie die Werte an. Falls Sie bei der Vielzahl der Einstellungen nicht weiterkommen, schauen Sie sich einfach &lt;a href="https://inkscape.org/doc/tutorials/tracing/tutorial-tracing.html" target="_blank" rel="noopener noreferrer" class="external-link"&gt;dieses Tutorial von Inkscape - Link zur Inkscape Website&lt;span class="external-link-icon" aria-hidden="true"&gt;↗&lt;/span&gt;&lt;/a&gt; an.&lt;/p&gt;&#10;&lt;div class="media-wrapper center"&gt;&#10; &lt;figure class="media-frame"&gt;&#10; &lt;img src="https://blog.schallbert.de/assets/images/posts/2022-07-04_paths.jpg" alt="IMAGE Image to Path tool at its best" /&gt;&lt;/figure&gt;&#10;&lt;/div&gt;&#10;&lt;p&gt;OK, jetzt haben wir eine Menge Pfade. Per Klick auf &lt;code&gt;Pfad -&amp;gt; Vereinfachen&lt;/code&gt; wird die Anzahl der Stützpunkte reduziert. Entfernen Sie dann manuell Artefakte, die sich bei Verwendung der Luminanzkurven eingeschlichen haben, mit dem &lt;code&gt;Knotenwerkzeug&lt;/code&gt;.&lt;/p&gt;&#10;&lt;h3 id="füllen-und-streichen"&gt;Füllen und Streichen&lt;/h3&gt;&#10;&lt;p&gt;Damit gibt es nun genau zwei die Zeichnung außen und innen umreißende Pfade sowie eine Füllung zwischen diesen Pfaden, die die Linienstärke der ursprünglichen Zeichnung darstellt. Da wir nur die äußere Kontur behalten wollen, müssen wir die Füllung und die innere Linie entfernen.&lt;/p&gt;&#10;&lt;p&gt;Wählen Sie das Werkzeug &lt;code&gt;Linie und Füllung&lt;/code&gt; im unteren Teil der rechten Symbolleiste. Wählen Sie die Registerkarte &lt;code&gt;Linienfarbe&lt;/code&gt; und setzen Sie den Strich auf eine &lt;code&gt;deckende Farbe&lt;/code&gt;. Wählen Sie unter &lt;code&gt;Linienstil&lt;/code&gt; eine Linienbreite, die Ihnen zusagt. Gehen Sie dann zur Registerkarte &lt;code&gt;Ausfüllen&lt;/code&gt; und stellen Sie &lt;code&gt;Ohne&lt;/code&gt; ein. Jetzt haben Sie nur noch zwei Umrisslinien, von denen Sie eine löschen können, wenn Sie möchten.&lt;/p&gt;&#10;&lt;div class="media-wrapper right"&gt;&#10; &lt;figure class="media-frame"&gt;&#10; &lt;img src="https://blog.schallbert.de/assets/images/posts/2022-07-04_paths_cleaned.jpg" alt="Image: Paths cleaned up and simplified" /&gt;&lt;/figure&gt;&#10;&lt;/div&gt;&#10;&lt;h3 id="und-noch-mehr-bereinigung"&gt;Und noch mehr Bereinigung&lt;/h3&gt;&#10;&lt;p&gt;Das sieht doch schon ziemlich gut aus, oder? Wenn es Ihnen nichts ausmacht, dass die Umrisse mehr als ein einziger Strich sind, sind Sie schon fertig. Sie können nun das Bild weiter verbessern, indem Sie Pfade herausziehen oder Kurven umwandeln.&lt;/p&gt;&#10;&lt;p&gt;Verwenden Sie das Werkzeug &lt;code&gt;Pfad an ausgewählten Knoten unterbrechen&lt;/code&gt;, bevor Sie parallele Linien entfernen, damit Sie nicht versehentlich die Linien zerstören, die Sie behalten möchten. Wenn Sie mit dem Ergebnis zufrieden und alle Unsauberkeiten ausgebügelt sind, speichern Sie Ihr Werk als skalierbare Vektorgrafikdatei &lt;code&gt;SVG&lt;/code&gt;.&lt;/p&gt;&#10;&lt;p&gt;Das war&amp;rsquo;s! Jetzt kann Ihr CAM-System das Bild importieren (denken Sie an die DPI-Einstellung, damit Ihre Skalierung gültig bleibt).&lt;/p&gt;&#10;&lt;div class="media-wrapper center"&gt;&#10; &lt;figure class="media-frame"&gt;&#10; &lt;img src="https://blog.schallbert.de/assets/images/posts/2022-07-04_clean.jpg" alt="Image: Fireplace SVG path work complete" /&gt;&lt;/figure&gt;&#10;&lt;/div&gt;&#10;</description></item><item><title>Videos mit dem VLC player konvertieren</title><link>https://blog.schallbert.de/video-conversion/</link><pubDate>Wed, 27 Oct 2021 00:00:00 +0000</pubDate><author>Schallbert</author><guid>https://blog.schallbert.de/video-conversion/</guid><description type="html">&#10; &lt;img src="https://blog.schallbert.de/assets/images/posts/2021-10-27_vlc-thumb.jpg"&#10; class="post-cover"&#10; alt="Image: VLC media player icon"&#10; title="Videos mit dem VLC player konvertieren" /&gt;&#10;&lt;h2 id="website-medienerstellung"&gt;Website: Medienerstellung&lt;/h2&gt;&#10;&lt;p&gt;Für diese Website habe ich viele Mediendateien konvertiert. Die selbstgemachten Fotos sind sehr groß, was zu langen Ladezeiten der Seite und bildschirmfüllenden Bildern führt. Während es recht einfach ist, ihre Größe zu reduzieren und die JPEG-Komprimierung zu erhöhen, ist dies bei Videos schwieriger.&lt;/p&gt;&#10;&lt;h2 id="das-problem"&gt;Das Problem&lt;/h2&gt;&#10;&lt;p&gt;&lt;div class="media-wrapper right"&gt;&#10; &lt;figure class="media-frame"&gt;&#10; &lt;img src="https://blog.schallbert.de/assets/images/posts/2021-10-27_wtf-vlc.jpg" alt="Image: VLCs Vorschau Effekte und Filter Fenster" /&gt;&lt;/figure&gt;&#10;&lt;/div&gt;&#10;Hä, VLC?!&#10;Ich verwende den beliebten &lt;a href="https://www.videolan.org/vlc/" target="_blank" rel="noopener noreferrer" class="external-link"&gt;vlc player&lt;span class="external-link-icon" aria-hidden="true"&gt;↗&lt;/span&gt;&lt;/a&gt; und irgendwie habe ich einige Grundkonzepte nicht richtig verstanden. Entweder wird mein Video nicht wie geplant in Graustufen angezeigt, die Ausgabedatei ist leer (Verwendung von &lt;code&gt;H.264&lt;/code&gt; statt &lt;code&gt;H.265&lt;/code&gt; behebt das Problem), das Seitenverhältnis scheint verzerrt zu sein, oder das Video hat sich plötzlich gedreht, was ich weder wollte noch erwartet habe.&lt;/p&gt;&#10;&lt;h2 id="in-diesem-beitrag"&gt;In diesem Beitrag&lt;/h2&gt;&#10;&lt;p&gt;Eine Reihe von Schritten hilft mir, wie man einfache Aufgaben zur Konvertierung und rudimentäre Bearbeitung von Videos mit vlc umsetzt.&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;a href="https://blog.schallbert.de/video-conversion/#colors"&gt;Farben verändern oder auf Graustufen wechseln&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;a href="https://blog.schallbert.de/video-conversion/#rotation"&gt;Das Video rotieren&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;a href="https://blog.schallbert.de/video-conversion/#cropping"&gt;Ausschnitt eines Videos verwenden, Auflösung oder Seitenverhältnis anpassen&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;a href="https://blog.schallbert.de/video-conversion/#cutting"&gt;Ein Video schneiden&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;a href="https://blog.schallbert.de/video-conversion/#scaling"&gt;Größe des Videos auf dem Datenträger verringern&lt;/a&gt;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h2 id="wie-funktioniert-das-mit-den-filtern"&gt;Wie funktioniert das mit den Filtern?&lt;/h2&gt;&#10;&lt;div class="media-wrapper right"&gt;&#10; &lt;figure class="media-frame"&gt;&#10; &lt;img src="https://blog.schallbert.de/assets/images/posts/2021-10-27_video-effects.jpg" alt="Image: VLC&amp;#39;s preview Effects and filters window" /&gt;&lt;/figure&gt;&#10;&lt;/div&gt;&#10;&lt;h3 id="vorschau-der-filter"&gt;Vorschau der Filter&lt;/h3&gt;&#10;&lt;p&gt;VLC verfügt über eine Schnellvorschau für die gängigsten Filter im Menü &amp;ldquo;Werkzeuge -&amp;gt; Effekte und Filter&amp;rdquo;. Dies wirkt sich direkt auf das Video aus, das Sie ansehen, aber nicht auf Ihre gespeicherte Datei. Sie dient lediglich dazu, eine Vorschau zu erstellen und die Auswirkungen dieser Filter auf Ihr Video zu kontrollieren. In &lt;a href="https://www.videoproc.com/troubleshoot-vlc/how-to-crop-a-video-in-vlc.htm" target="_blank" rel="noopener noreferrer" class="external-link"&gt;diesem VideoProc-Blogeintrag&lt;span class="external-link-icon" aria-hidden="true"&gt;↗&lt;/span&gt;&lt;/a&gt; finden Sie ausführliche Anleitungen - und, was noch wichtiger ist, viele Bilder, die Sie dabei unterstützen. Für die ungeduldige Fraktion: weiterlesen 😉&lt;/p&gt;&#10;&lt;h3 id="gefiltertes-video-in-datei-speichern"&gt;Gefiltertes Video in Datei speichern&lt;/h3&gt;&#10;&lt;p&gt;&lt;div class="media-wrapper right"&gt;&#10; &lt;figure class="media-frame"&gt;&#10; &lt;img src="https://blog.schallbert.de/assets/images/posts/2021-10-27_profile.jpg" alt="Image: VLC&amp;#39;s conversion profile window for saving" /&gt;&lt;/figure&gt;&#10;&lt;/div&gt;&#10;Um einen Filter zu speichern, den Sie für Ihre Vorschau ausgewählt haben, müssen Sie ihn zum Konvertierungsprofil hinzufügen. Solange sie angekreuzt bleiben, wird &lt;em&gt;jedes&lt;/em&gt; Speichern mit diesem Profil Ihr Video verändern, auch wenn Sie alle Änderungen, die Sie in der Vergangenheit an den Vorschaufiltern vorgenommen haben, rückgängig gemacht haben!&lt;/p&gt;&#10;&lt;h2 id="colors"&gt;Wie kann ich die Farben in meinem Video ändern?&lt;/h2&gt;&#10;&lt;ol&gt;&#10;&lt;li&gt;Öffnen Sie die Videodatei, die Sie ändern möchten.&lt;/li&gt;&#10;&lt;li&gt;Klicken Sie auf &amp;ldquo;Werkzeuge -&amp;gt; Effekte und Filter&amp;rdquo; (oder drücken Sie &amp;ldquo;Strg+E&amp;rdquo;)&lt;/li&gt;&#10;&lt;li&gt;Es öffnet sich ein Dialogfeld mit drei Registerkarten. Wählen Sie die Registerkarte &amp;ldquo;Videoeffekte&amp;rdquo;.&lt;/li&gt;&#10;&lt;li&gt;Markieren Sie unter &amp;ldquo;Essentials&amp;rdquo; die Option &amp;ldquo;Bildanpassung&amp;rdquo;.&lt;/li&gt;&#10;&lt;li&gt;Nehmen Sie Ihre Änderungen vor und klicken Sie auf &amp;ldquo;Speichern&amp;rdquo; und dann auf &amp;ldquo;Schließen&amp;rdquo;. Eine Vorschau des Effekts wird im Hauptfenster angezeigt.&lt;/li&gt;&#10;&lt;li&gt;Öffnen Sie die Wiedergabelistenansicht durch Drücken von &amp;ldquo;Wiedergabeliste umschalten&amp;rdquo; (Strg+L).&lt;/li&gt;&#10;&lt;li&gt;Klicken Sie mit der rechten Maustaste auf Ihr Video und wählen Sie &amp;ldquo;Speichern&amp;hellip;&amp;rdquo; im Kontextmenü.&lt;/li&gt;&#10;&lt;li&gt;Drücken Sie das Schraubenschlüssel-Symbol &amp;ldquo;Ausgewähltes Profil bearbeiten&amp;rdquo; und wählen Sie auf der Registerkarte &amp;ldquo;Videocodec&amp;rdquo; die Unterregisterkarte &amp;ldquo;Filter&amp;rdquo;.&lt;/li&gt;&#10;&lt;li&gt;Markieren Sie den Filter &amp;ldquo;Bildeigenschaften&amp;rdquo;. Dadurch wird Ihre Änderung durchgeführt, sobald Sie Ihre Datei speichern.&lt;/li&gt;&#10;&lt;li&gt;Geben Sie eine Zieldatei ein und klicken Sie auf &amp;ldquo;Start&amp;rdquo;.&lt;/li&gt;&#10;&lt;li&gt;Vergessen Sie nicht, den Filter &amp;ldquo;Bildeigenschaften&amp;rdquo; in Ihrem Profil zu deaktivieren, wenn Sie damit fertig sind. Nehmen Sie auch die Änderungen zurück, die Sie auf der Registerkarte &amp;ldquo;Videoeffekte&amp;rdquo; vorgenommen haben (Schritt 4).&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;h2 id="rotation"&gt;Wie drehe ich mein Video?&lt;/h2&gt;&#10;&lt;ol&gt;&#10;&lt;li&gt;Öffnen Sie die Videodatei, die Sie ändern möchten.&lt;/li&gt;&#10;&lt;li&gt;Klicken Sie auf &amp;ldquo;Werkzeuge -&amp;gt; Effekte und Filter&amp;rdquo; (oder drücken Sie &amp;ldquo;Strg+E&amp;rdquo;)&lt;/li&gt;&#10;&lt;li&gt;Es öffnet sich ein Dialogfeld mit drei Registerkarten. Wählen Sie die Registerkarte &amp;ldquo;Videoeffekte&amp;rdquo;.&lt;/li&gt;&#10;&lt;li&gt;Wählen Sie unter &amp;ldquo;Geometrie&amp;rdquo; die Option &amp;ldquo;Transformieren&amp;rdquo;.&lt;/li&gt;&#10;&lt;li&gt;Nehmen Sie Ihre Änderungen vor und klicken Sie auf &amp;ldquo;Speichern&amp;rdquo; und dann auf &amp;ldquo;Schließen&amp;rdquo;. Eine Vorschau des Effekts wird im Hauptfenster angezeigt.&lt;/li&gt;&#10;&lt;li&gt;Öffnen Sie die Wiedergabelistenansicht durch Drücken von &amp;ldquo;Wiedergabeliste umschalten&amp;rdquo; (Strg+L).&lt;/li&gt;&#10;&lt;li&gt;Klicken Sie mit der rechten Maustaste auf Ihr Video und wählen Sie &amp;ldquo;Speichern&amp;hellip;&amp;rdquo; im Kontextmenü.&lt;/li&gt;&#10;&lt;li&gt;Drücken Sie das Schraubenschlüssel-Symbol &amp;ldquo;Ausgewähltes Profil bearbeiten&amp;rdquo; und wählen Sie auf der Registerkarte &amp;ldquo;Videocodec&amp;rdquo; die Unterregisterkarte &amp;ldquo;Filter&amp;rdquo;.&lt;/li&gt;&#10;&lt;li&gt;Markieren Sie den Filter &amp;ldquo;Videotransformation&amp;rdquo;. Dadurch wird Ihre Änderung durchgeführt, sobald Sie Ihre Datei speichern.&lt;/li&gt;&#10;&lt;li&gt;Geben Sie eine Zieldatei ein und klicken Sie auf &amp;ldquo;Start&amp;rdquo;.&lt;/li&gt;&#10;&lt;li&gt;Vergessen Sie nicht, das Häkchen beim Filter &amp;ldquo;Bildeigenschaften&amp;rdquo; in Ihrem Profil zu entfernen. Nehmen Sie auch die Änderungen zurück, die Sie auf der Registerkarte &amp;ldquo;Videoeffekte&amp;rdquo; vorgenommen haben.&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;h2 id="cropping"&gt;Wie kann ich mein Video zuschneiden?&lt;/h2&gt;&#10;&lt;ol&gt;&#10;&lt;li&gt;Öffnen Sie die Videodatei, die Sie ändern möchten.&lt;/li&gt;&#10;&lt;li&gt;Klicken Sie auf &amp;ldquo;Werkzeuge -&amp;gt; Effekte und Filter&amp;rdquo; (oder drücken Sie &amp;ldquo;Strg+E&amp;rdquo;)&lt;/li&gt;&#10;&lt;li&gt;Es öffnet sich ein Dialogfeld mit drei Registerkarten. Wählen Sie die Registerkarte &amp;ldquo;Videoeffekte&amp;rdquo;.&lt;/li&gt;&#10;&lt;li&gt;Spielen Sie unter &amp;ldquo;Zuschneiden&amp;rdquo; mit den Pixelwerten herum und beobachten Sie das Vorschaufenster genau, bis Sie mit dem Zuschnitt zufrieden sind. Notieren oder merken Sie sich die Einstellungen, die Sie anwenden möchten. Schließen Sie den Dialog.&lt;/li&gt;&#10;&lt;li&gt;Klicken Sie auf &amp;ldquo;Werkzeuge -&amp;gt; Voreinstellungen&amp;rdquo; (oder drücken Sie &amp;ldquo;Strg+P&amp;rdquo;)&lt;/li&gt;&#10;&lt;li&gt;Wählen Sie auf der Registerkarte &lt;code&gt;Interface&lt;/code&gt; (Start) die Optionsschaltfläche &lt;code&gt;Show Settings - All&lt;/code&gt;.&lt;/li&gt;&#10;&lt;li&gt;Scrollen Sie nach unten zum Element &amp;ldquo;Video&amp;rdquo; und öffnen Sie &amp;ldquo;Filter&amp;rdquo;.&lt;/li&gt;&#10;&lt;li&gt;Wählen Sie den &amp;ldquo;Video-Zuschneidefilter&amp;rdquo;.&lt;/li&gt;&#10;&lt;li&gt;Suchen Sie das Element &lt;code&gt;Cropadd&lt;/code&gt; in der Filterliste auf der linken Seite. Geben Sie die Werte ein, die Sie sich in der Vorschau gemerkt/aufgeschrieben haben. Klicken Sie auf &amp;ldquo;Speichern&amp;rdquo;.&lt;/li&gt;&#10;&lt;li&gt;Öffnen Sie die Wiedergabelistenansicht, indem Sie auf &amp;ldquo;Wiedergabeliste umschalten&amp;rdquo; (Strg+L) drücken. Klicken Sie dann mit der rechten Maustaste auf Ihr Video und wählen Sie &amp;ldquo;Speichern&amp;hellip;&amp;rdquo; aus dem Kontextmenü.&lt;/li&gt;&#10;&lt;li&gt;Drücken Sie das Schraubenschlüssel-Symbol &amp;ldquo;Ausgewähltes Profil bearbeiten&amp;rdquo; und wählen Sie auf der Registerkarte &amp;ldquo;Videocodec&amp;rdquo; die Unterregisterkarte &amp;ldquo;Filter&amp;rdquo;.&lt;/li&gt;&#10;&lt;li&gt;Aktivieren Sie den Filter &amp;ldquo;Videoschnitt&amp;rdquo;. Dadurch wird die Änderung durchgeführt, sobald Sie Ihre Datei speichern.&lt;/li&gt;&#10;&lt;li&gt;Geben Sie eine Zieldatei ein und klicken Sie auf &amp;ldquo;Start&amp;rdquo;.&lt;/li&gt;&#10;&lt;li&gt;Vergessen Sie nicht, das Häkchen bei &amp;ldquo;Video-Zuschnittfilter&amp;rdquo; in Ihrem Profil zu entfernen. Nehmen Sie auch die Änderungen zurück, die Sie in den Einstellungen unter &amp;ldquo;Filter&amp;rdquo; vorgenommen haben.&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;h2 id="cutting"&gt;Wie kürze ich mein Video?&lt;/h2&gt;&#10;&lt;p&gt;Hinweis: Eine ausführlichere Version dieses Themas findet sich in &lt;a href="https://www.movavi.io/how-to-trim-video-in-vlc-en/" target="_blank" rel="noopener noreferrer" class="external-link"&gt;diesem Beitrag von movavi&lt;span class="external-link-icon" aria-hidden="true"&gt;↗&lt;/span&gt;&lt;/a&gt;.&lt;/p&gt;&#10;&lt;ol&gt;&#10;&lt;li&gt;Öffnen Sie die Videodatei, die Sie ändern möchten.&lt;/li&gt;&#10;&lt;li&gt;Zeigen Sie die Schaltfläche &amp;ldquo;Aufnehmen&amp;rdquo; im VLC Player an (markieren Sie &amp;ldquo;Ansicht-&amp;gt;Erweiterte Steuerelemente&amp;rdquo;).&lt;/li&gt;&#10;&lt;li&gt;Springen Sie an die Stelle, an der das geschnittene Video beginnen soll.&lt;/li&gt;&#10;&lt;li&gt;Drücken Sie die rote Schaltfläche &amp;ldquo;Aufnehmen&amp;rdquo;.&lt;/li&gt;&#10;&lt;li&gt;Spielen Sie die Videosequenz ab. Halten Sie an der Stelle an, an der der Zuschnitt enden soll.&lt;/li&gt;&#10;&lt;li&gt;VLCs Standardspeicherort für die Videoausgabe: &lt;code&gt;C:\Benutzer\Benutzername\Video&lt;/code&gt;&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;h2 id="scaling"&gt;Wie ändere ich die Videoauflösung?&lt;/h2&gt;&#10;&lt;ol&gt;&#10;&lt;li&gt;Öffnen Sie die Videodatei, die Sie ändern möchten.&lt;/li&gt;&#10;&lt;li&gt;Öffnen Sie die Wiedergabelistenansicht, indem Sie &amp;ldquo;Wiedergabeliste umschalten&amp;rdquo; (Strg+L) drücken. Klicken Sie dann mit der rechten Maustaste auf Ihr Video und wählen Sie &amp;ldquo;Speichern&amp;hellip;&amp;rdquo; aus dem Kontextmenü.&lt;/li&gt;&#10;&lt;li&gt;Drücken Sie das Schraubenschlüssel-Symbol &amp;ldquo;Ausgewähltes Profil bearbeiten&amp;rdquo; und wählen Sie auf der Registerkarte &amp;ldquo;Videocodec&amp;rdquo; die Unterregisterkarte &amp;ldquo;Auflösung&amp;rdquo;.&lt;/li&gt;&#10;&lt;li&gt;Geben Sie die Videogröße ein, in die Sie konvertieren möchten, und klicken Sie auf &amp;ldquo;Speichern&amp;rdquo;.&lt;/li&gt;&#10;&lt;/ol&gt;&#10;</description></item><item><title>Arbeitsabläufe mit FreeCAD</title><link>https://blog.schallbert.de/freecad-get-started/</link><pubDate>Tue, 12 Oct 2021 00:00:00 +0000</pubDate><author>Schallbert</author><guid>https://blog.schallbert.de/freecad-get-started/</guid><description type="html">&#10; &lt;img src="https://blog.schallbert.de/assets/images/posts/2021-10-12_pad-thumb.jpg"&#10; class="post-cover"&#10; alt="Image: Freecad example design in 3D view"&#10; title="Arbeitsabläufe mit FreeCAD" /&gt;&#10;&lt;h2 id="motivation"&gt;Motivation&lt;/h2&gt;&#10;&lt;p&gt;&lt;div class="media-wrapper right"&gt;&#10; &lt;figure class="media-frame"&gt;&#10; &lt;img src="https://upload.wikimedia.org/wikipedia/commons/f/f7/FreeCAD-logo.svg" alt="FreeCad logo" /&gt;&lt;figcaption class="media-caption"&gt;&#10; &lt;span class="caption-text"&gt;FreeCad logo&lt;/span&gt;&lt;a href="https://commons.wikimedia.org/wiki/File:FreeCAD-logo.svg#file" class="attr-link" aria-label="Attribution 1"&gt;&#10; &lt;sup class="attr-id"&gt;[1]&lt;/sup&gt;&#10; &lt;/a&gt;&lt;/figcaption&gt;&lt;/figure&gt;&#10;&lt;/div&gt;&#10;Ich habe gerade eine zweite Bestellung für AnywhereAmps Alpha erhalten. Mein erster Prototyp hat bereits ein neues Zuhause, also werde ich mindestens drei weitere Exemplare bauen. Alle Holzarbeiten, die von Hand ausgeführt werden, würden 4-5 Stunden pro Exemplar in Anspruch nehmen, also habe ich mich entschlossen, sie auf den eigentlichen Bauprozess zu beschränken, der - hoffentlich - nur eine Stunde dauert.&#10;Dies möchte ich erreichen, indem ich die Holzteile mit einer CNC-Maschine fräsen lasse.&lt;/p&gt;&#10;&lt;h2 id="cad-werkzeug"&gt;CAD-Werkzeug&lt;/h2&gt;&#10;&lt;p&gt;Eine solche Maschine würde die Pläne, die ich von Hand skizziert habe, nicht verarbeiten. Also musste ich mich mit einer Software vertraut machen, die 2D-Skizzen in ein 3D-Modell umwandeln kann, und schließlich mit einem weiteren Werkzeug, das die Komponenten des 3D-Modells in eine Bahnsteuerung für die CNC-Maschine übersetzt, mit der ich meine Teile fräsen will.&#10;Für die 3D-Arbeiten habe ich die Software &lt;a href="https://www.freecad.org/" target="_blank" rel="noopener noreferrer" class="external-link"&gt;FreeCAD&lt;span class="external-link-icon" aria-hidden="true"&gt;↗&lt;/span&gt;&lt;/a&gt; gewählt.&lt;/p&gt;&#10;&lt;h2 id="aller-anfang-ist-schwer"&gt;Aller Anfang ist schwer&lt;/h2&gt;&#10;&lt;p&gt;&lt;div class="media-wrapper right"&gt;&#10; &lt;figure class="media-frame"&gt;&#10; &lt;img src="https://blog.schallbert.de/assets/images/posts/2021-10-12_freecad_parts3d.jpg" alt="Image: parts construction complete" /&gt;&lt;/figure&gt;&#10;&lt;/div&gt;&#10;Aber FreeCAD ist&amp;hellip; naja, ich bin halt kein CAD-Designer oder Maschinenbauingenieur. Daher ist der Einstieg in dieses Tool für mich ziemlich schwierig. Glücklicherweise gibt es einige gute Tutorials wie dieses: &lt;a href="https://www.youtube.com/watch?v=C1JG6l1uIJw" target="_blank" rel="noopener noreferrer" class="external-link"&gt;youtube link&lt;span class="external-link-icon" aria-hidden="true"&gt;↗&lt;/span&gt;&lt;/a&gt;, dennoch habe ich einige Stunden gebraucht, bis ich mein erstes Teil gezeichnet hatte. Außerdem ist das, was auf dem Bild rechts zu erkennen ist, noch lange nicht der fertige Entwurf.&lt;/p&gt;&#10;&lt;h2 id="freecad-arbeitsablauf"&gt;FreeCAD Arbeitsablauf&lt;/h2&gt;&#10;&lt;p&gt;FreeCAD ist meiner Meinung nach (Stand Ende 2021) kein selbsterklärendes Werkzeug. Es ist sehr vielseitig und daher komplex und umfangreich. Da ich es zum Zeichnen von 3D-Teilen und/oder zur &lt;a href="https://de.wikipedia.org/wiki/Computerized_Numerical_Control#DIN/ISO-Programmierung_bzw._G-Code" target="_blank" rel="noopener noreferrer" class="external-link"&gt;G-Code&lt;span class="external-link-icon" aria-hidden="true"&gt;↗&lt;/span&gt;&lt;/a&gt;-Generierung verwenden möchte, werde ich nur eine Handvoll seiner Arbeitsbereiche benötigen.&lt;/p&gt;&#10;&lt;p&gt;Natürlich können die folgenden Zeilen nicht mehr als eine Schnellstartanleitung sein. Es gibt tonnenweise hilfreiches Material wie ein FreeCad &lt;a href="https://wiki.freecad.org/" target="_blank" rel="noopener noreferrer" class="external-link"&gt;Wiki&lt;span class="external-link-icon" aria-hidden="true"&gt;↗&lt;/span&gt;&lt;/a&gt;, ein &lt;a href="https://forum.freecad.org/" target="_blank" rel="noopener noreferrer" class="external-link"&gt;Forum&lt;span class="external-link-icon" aria-hidden="true"&gt;↗&lt;/span&gt;&lt;/a&gt;, und viele, viele Tutorial-Videos usw., die die Dinge besser und ausführlicher erklären als ich es kann. &lt;a href="https://wiki.freecad.org/Getting_started" target="_blank" rel="noopener noreferrer" class="external-link"&gt;https://wiki.freecad.org/Getting_started&lt;span class="external-link-icon" aria-hidden="true"&gt;↗&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;&#10;&lt;h3 id="erst-die-abmessungen---das-modul-spreadsheet"&gt;Erst die Abmessungen - das Modul &amp;ldquo;Spreadsheet&amp;rdquo;&lt;/h3&gt;&#10;&lt;p&gt;Schaffen wir zuerst einen zentralen Ort, an dem wir alle Maße unseres Projekts aufbewahren. Wir werden sie später in den Zeichnungen, 3D-Modellen und Baugruppen verknüpfen, so dass sich geänderte Werte in der Kalkulationstabelle automatisch auf alles andere angewendet werden (für mich übrigens &lt;em&gt;der&lt;/em&gt; Vorteil dieses CAD-Programms gegenüber vielen anderen, bei denen quasi von Vorn begonnen werden muss, wenn man die Größe des Bauteils anpassen möchte).&lt;/p&gt;&#10;&lt;ol&gt;&#10;&lt;li&gt;Wählen Sie das Modul &amp;ldquo;Spreadsheet&amp;rdquo; an. Erstellen Sie ein Arbeitsblatt und benennen Sie es z. B. in &amp;ldquo;Abmessungen&amp;rdquo; um.&lt;/li&gt;&#10;&lt;li&gt;Tragen Sie Namen Ihrer Dimensionen ein. Ich habe festgestellt, dass es gut lesbar ist, wenn Sie für jede Dimension die Namenskonvention &lt;code&gt;Teil_Beschreibung_Attribut&lt;/code&gt; verwenden.&lt;/li&gt;&#10;&lt;li&gt;Nachdem Sie den Wert Ihrer Dimension eingegeben haben, klicken Sie mit der rechten Maustaste auf die Zelle und wählen Sie &amp;ldquo;Eigenschaften&amp;rdquo;.&lt;/li&gt;&#10;&lt;li&gt;Im folgenden Dialog wählen Sie die &amp;ldquo;Alias&amp;rdquo;-Leiste und geben den Namen des Maßes &lt;code&gt;dimensionName&lt;/code&gt; ein.&lt;/li&gt;&#10;&lt;li&gt;Nun sind Sie in jeder Skizze in der Lage, diese Maße unter ihrem Alias auszuwählen. Klicken Sie &amp;ldquo;Save&amp;rdquo;, um den Dialog zu schließen.&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;div class="media-wrapper center"&gt;&#10; &lt;figure class="media-frame"&gt;&#10; &lt;img src="https://blog.schallbert.de/assets/images/posts/2021-10-12_spreadsheet.jpg" alt="Image: Spreadsheet example in FreeCad" /&gt;&lt;/figure&gt;&#10;&lt;/div&gt;&#10;&lt;h3 id="skizze-anfertigen---scetcher-in-der-parts-design-workbench"&gt;Skizze anfertigen - scetcher in der &amp;ldquo;Parts Design Workbench&amp;rdquo;&lt;/h3&gt;&#10;&lt;p&gt;Nun erstellen wir die erste Skizze des Teils, wobei die soeben erstellten Maße verwendet werden. Am besten beginnt man mit sogenannten Master-Skizzen, die alle Elemente einer Zeichnung in einer bestimmten Ansicht, z.B. auf der XY-Ebene, enthalten. Von ihnen werden dann die für dreidimensionale Modelle erforderlichen Grundriss-Skizzen der jeweiligen Achsenpaare abgeleitet.&lt;/p&gt;&#10;&lt;ol&gt;&#10;&lt;li&gt;Aktivieren Sie das Konstruktionsmodul &amp;ldquo;Part Design&amp;rdquo;.&lt;/li&gt;&#10;&lt;li&gt;Erstellen Sie einen neuen Körper mit dem blauen Baustein-Symbol.&lt;/li&gt;&#10;&lt;li&gt;Erstellen Sie eine neue Skizze für diesen Körper mit dem Skizzen-Symbol. Wählen Sie z.B. die XY-Ebene.&lt;/li&gt;&#10;&lt;li&gt;Benennen Sie Ihre Skizze um, damit Sie sich ihren Zweck leicht merken können. Da Ihre ersten Skizzen die &amp;ldquo;Master&amp;rdquo;-Skizzen sind, schlage ich vor, sie &amp;ldquo;Master_IhrTeilename_xy&amp;rdquo; zu nennen.&lt;/li&gt;&#10;&lt;li&gt;Doppelklicken Sie auf die Skizze und beginnen Sie mit dem Zeichnen Ihrer Formen.&#10;&lt;div class="media-wrapper right"&gt;&#10; &lt;figure class="media-frame"&gt;&#10; &lt;img src="https://blog.schallbert.de/assets/images/posts/2021-10-12_usingalias.jpg" alt="Image: Using spreadsheet alias in Parts Design workbench" /&gt;&lt;/figure&gt;&#10;&lt;/div&gt;&lt;/li&gt;&#10;&lt;li&gt;Stellen Sie sicher, dass Sie Ihre Skizze vollständig definieren (&lt;a href="https://www.youtube.com/watch?v=F6H1iPwVg2o" target="_blank" rel="noopener noreferrer" class="external-link"&gt;youtube link&lt;span class="external-link-icon" aria-hidden="true"&gt;↗&lt;/span&gt;&lt;/a&gt;). Verwenden Sie die Abmessungen, die Sie in die Kalkulationstabelle eingegeben haben, als Hilfe: Doppelklicken Sie auf Ihre Maßeinschränkung und geben Sie &amp;ldquo;=&amp;rdquo; ein oder drücken Sie die kleine runde Schaltfläche &amp;ldquo;fx&amp;rdquo;. Geben Sie den Namen Ihrer Kalkulationstabelle ein (zum Glück gibt es hier die Autovervollständigung) und dann den Alias der Dimension, die Sie in der Definition widerspiegeln wollen.&lt;/li&gt;&#10;&lt;li&gt;Wiederholen Sie diesen Vorgang für jede Bemaßungsabhängigkeit Ihrer Zeichnung.&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;p&gt;Mit Ihren fertigen Master-Skizzen (je eine für jede Achsenkombination) stehen alle Informationen für jeden Drittanbieter zur Verfügung, der Ihre Teile fertigen kann. Wenn Sie das tun möchten, können Sie Ihre Skizzen hier in DXF-Dateien exportieren, und schon sind Sie fertig.&#10;Andernfalls: Lesen Sie unten weiter.&lt;/p&gt;&#10;&lt;h3 id="3d-teile-erstellen---teile-design-workbench"&gt;3D-Teile erstellen - Teile Design Workbench&lt;/h3&gt;&#10;&lt;p&gt;Um ein echtes 3D-Teil aus Ihren Master-Skizzen zu erstellen, müssen Sie davon abgeleitete Skizzen erstellen, die extrudiert oder ausgeschnitten werden können. Sie müssen zunächst verstehen, wie FreeCAD Teile und Skizzen baumartig ausrichtet:&#10;Jedes extrudierte (3D)-Teil hat eine zugrunde liegende Skizze, die definiert, wie es aussieht. Seine Extrusionsrichtung hängt direkt von der Ebene der Skizze ab. Jedes Teil kann eine oder mehrere Bezugsebenen haben, an denen andere Teile befestigt werden können, die wiederum Teile, Löcher oder Taschen auf dieser spezifischen Fläche bilden.&lt;/p&gt;&#10;&lt;p&gt;FreeCAD zeigt nur das &amp;ldquo;letzte&amp;rdquo; Mitglied des Bauteilbaums an, das alle abhängigen Teile enthält, die Sie zuvor entworfen haben. Um die Sichtbarkeit umzuschalten, drücken Sie einfach die Leertaste.&#10;&lt;div class="media-wrapper center"&gt;&#10; &lt;figure class="media-frame"&gt;&#10; &lt;img src="https://blog.schallbert.de/assets/images/posts/2021-10-12_pad.jpg" alt="Image: FreeCAD&amp;#39;s pad design tree view" /&gt;&lt;/figure&gt;&#10;&lt;/div&gt;&lt;/p&gt;&#10;&lt;ol&gt;&#10;&lt;li&gt;Erstellen Sie eine neue Skizze in der Baumstruktur Ihres Teils. Dies wird Ihr erstes &amp;ldquo;Pad&amp;rdquo; sein, d.h. Ihr eigentliches 3D-Teil.&lt;/li&gt;&#10;&lt;li&gt;Wählen Sie das Werkzeug &lt;code&gt;create an edge linked to an external geometry&lt;/code&gt; (Hotkey &amp;ldquo;X&amp;rdquo;) und wählen Sie das Basisteil Ihrer ursprünglichen Master-Skizze aus.&lt;/li&gt;&#10;&lt;li&gt;Zeichnen Sie Ihre Form so, dass sie mit dieser Form übereinstimmt, und legen Sie ihre Maße fest, wiederum unter Verwendung der zuvor erstellten Bemaßungstabelle. Sie sollten dies jedoch nicht allzu oft benötigen, da Sie alle möglichen Kanten, die Sie finden konnten, bereits mit Ihrer Musterskizze verknüpft haben.&lt;/li&gt;&#10;&lt;li&gt;Jetzt kommt der spaßige Teil: Schließen Sie die Skizze, klicken Sie dann auf das Symbol &lt;code&gt;pad a selected sketch&lt;/code&gt; und geben Sie die gewünschte Höhe des Teils ein.&lt;/li&gt;&#10;&lt;li&gt;Das war&amp;rsquo;s!&lt;/li&gt;&#10;&lt;li&gt;Um ein weiteres Teil, eine Tasche oder ein Loch auf einer der Flächen Ihres Teiles zu erstellen, erstellen Sie zunächst eine neue Skizze und geben Sie ihr einen aussagekräftigen Namen. Klicken Sie dann auf die Fläche, auf der diese Skizze basieren soll. Wählen Sie schließlich das Werkzeug &lt;code&gt;set the Support of a scetch&lt;/code&gt; und wählen Sie die zuvor erstellte Skizze aus. Wiederholen Sie den Vorgang ab Schritt 2, bis Ihr Teil vollständig ist.&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;p&gt;Hm, Ihr neues Teil sitzt direkt auf dem Master-Sketch, so dass Sie es nicht mehr sehen können? Keine Panik, lesen Sie einfach weiter.&lt;/p&gt;&#10;&lt;h3 id="3d-teile-anordnen---das-modul-draft"&gt;3D-Teile anordnen - das Modul &amp;ldquo;Draft&amp;rdquo;&lt;/h3&gt;&#10;&lt;p&gt;Meiner Meinung nach ist es sehr mühsam, Teile in der Konstruktionswerkbank neu anzuordnen. Es wird viel einfacher, wenn Sie die Werkbank &amp;ldquo;Entwurf&amp;rdquo; (Draft) für diese Aufgabe verwenden. Auch hier können Sie Teile einfach klonen und nach Ihren Vorstellungen anordnen.&lt;/p&gt;&#10;&lt;div class="media-wrapper center"&gt;&#10; &lt;figure class="media-frame"&gt;&#10; &lt;img src="https://blog.schallbert.de/assets/images/posts/2021-10-12_move.jpg" alt="Image: move in FreeCAD&amp;#39;s Draft workbench" /&gt;&lt;/figure&gt;&#10;&lt;/div&gt;&#10;&lt;ol&gt;&#10;&lt;li&gt;Aktivieren Sie das Modul &amp;ldquo;Draft&amp;rdquo;.&lt;/li&gt;&#10;&lt;li&gt;Wählen Sie das Pad/Teil, an dem Sie zuvor gearbeitet haben, im Teilebaum aus.&lt;/li&gt;&#10;&lt;li&gt;Klicken Sie auf das Schaf-Symbol, um Ihr Teil zu klonen.&lt;/li&gt;&#10;&lt;li&gt;Machen Sie das ursprüngliche Pad unsichtbar, indem Sie die Leertaste drücken, während das Teil aktiv ist.&lt;/li&gt;&#10;&lt;li&gt;Wählen Sie das geklonte Teil aus und benennen Sie es sinnvoll um, z.B. &lt;code&gt;derGerät_part&lt;/code&gt;.&lt;/li&gt;&#10;&lt;li&gt;Wählen Sie das &amp;ldquo;Verschieben&amp;rdquo;-Symbol (im obigen Bild grün markiert).&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;div class="media-wrapper right"&gt;&#10; &lt;figure class="media-frame"&gt;&#10; &lt;img src="https://blog.schallbert.de/assets/images/posts/2021-10-12_neat.jpg" alt="Image: part scetches and pads aligned side by side" /&gt;&lt;/figure&gt;&#10;&lt;/div&gt;&#10;&lt;p&gt;Eine Verschiebe-Operation besteht aus zwei Schritten: Zuerst müssen Sie die Referenzposition für Ihre Verschiebung eingeben. Entweder wählen Sie den Punkt aus, indem Sie irgendwo in der 3D-Ansicht klicken und dann den Cursor ein wenig bewegen (meine Empfehlung), oder Sie geben den Bezugspunkt in die Felder auf der linken Seite ein und bestätigen jede Achse mit &amp;ldquo;Enter&amp;rdquo;.&#10;Der zweite Schritt ist die eigentliche Bewegung gegenüber Ihrem Referenzpunkt. Ich empfehle, diese Werte mit der Tastatur einzugeben, da es unglaublich schwierig ist, mit der Maus eine exakte Position anzufahren.&#10;Bestätigen Sie mit &amp;ldquo;Enter&amp;rdquo;, und die Verschiebung sollte abgeschlossen sein.&lt;/p&gt;&#10;&lt;p&gt;Cool, jetzt haben Sie ein Bemaßungsblatt, Master-Skizzen, die Ihre Teile vollständig spezifizieren, die Teile selbst als 3D-Körper und das alles ordentlich sortiert in Ihrer Ansicht!&lt;/p&gt;&#10;&lt;h3 id="techdraw-erstellen-sie-eine-klassische-papier-2d-zeichnung-als-pdf"&gt;TechDraw: Erstellen Sie eine klassische &amp;ldquo;Papier 2D&amp;rdquo; Zeichnung als PDF&lt;/h3&gt;&#10;&lt;p&gt;Abschließend möchten Sie vielleicht eine klassische 2D-Zeichnung Ihres Teils exportieren? Zum Glück ist keine schwere Aufgabe.&lt;/p&gt;&#10;&lt;ol&gt;&#10;&lt;li&gt;Aktivieren Sie das &lt;code&gt;TechDraw&lt;/code&gt;-Modul.&lt;/li&gt;&#10;&lt;li&gt;Drücken Sie das Symbol &amp;ldquo;Standardseite einfügen&amp;rdquo;.&lt;/li&gt;&#10;&lt;li&gt;Wählen Sie im Teilebaum das 3D-Teil aus, das Sie zeichnen lassen möchten.&lt;/li&gt;&#10;&lt;li&gt;Drücken Sie auf das Symbol &amp;ldquo;Mehrere Ansichten von zeichnungsfähigen Objekten einfügen&amp;rdquo; und wählen Sie die Ansichten aus, die vorhanden sein sollen.&lt;/li&gt;&#10;&lt;li&gt;Fügen Sie mithilfe der Symbolleiste Maße, Anmerkungen usw. hinzu.&lt;/li&gt;&#10;&lt;li&gt;Verwenden Sie die Funktion &amp;ldquo;Ansichtsrahmen ein-/ausschalten&amp;rdquo;, wenn sich Ihre Geometrien überschneiden, damit Sie sie wieder auswählen können.&lt;/li&gt;&#10;&lt;li&gt;Fügen Sie bei Bedarf kosmetische Linien ein, z. B. um Symmetrielinien zu zeichnen.&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;p&gt;Das resultierende Dokument könnte wie folgt aussehen:&#10;&lt;div class="media-wrapper center"&gt;&#10; &lt;figure class="media-frame"&gt;&#10; &lt;img src="https://blog.schallbert.de/assets/images/posts/2021-10-12_drawing.jpg" alt="Image: classic drawing in FreeCAD" /&gt;&lt;/figure&gt;&#10;&lt;/div&gt;&lt;/p&gt;&#10;&lt;p&gt;Weitere Informationen zu diesem Modul sind auf dem &lt;a href="https://wiki.freecad.org/Basic_TechDraw_Tutorial" target="_blank" rel="noopener noreferrer" class="external-link"&gt;FreeCAD Wiki&lt;span class="external-link-icon" aria-hidden="true"&gt;↗&lt;/span&gt;&lt;/a&gt; verfügbar.&lt;/p&gt;&#10;</description></item><item><title>Markdown zu PDF konvertieren</title><link>https://blog.schallbert.de/md-export-pdf/</link><pubDate>Wed, 09 Jun 2021 00:00:00 +0000</pubDate><author>Schallbert</author><guid>https://blog.schallbert.de/md-export-pdf/</guid><description type="html">&#10; &lt;img src="https://blog.schallbert.de/assets/images/posts/markdown-thumb.jpg"&#10; class="post-cover"&#10; alt="Image: markdown to pdv converter extension for VS code"&#10; title="Markdown zu PDF konvertieren" /&gt;&#10;&lt;h3 id="die-software"&gt;Die Software&lt;/h3&gt;&#10;&lt;p&gt;Ich habe die Visual Studio Code-Erweiterung &lt;a href="https://github.com/yzane/vscode-markdown-pdf" target="_blank" rel="noopener noreferrer" class="external-link"&gt;Yzane&amp;rsquo;s Markdown PDF&lt;span class="external-link-icon" aria-hidden="true"&gt;↗&lt;/span&gt;&lt;/a&gt; gewählt. Einfach zu installieren, einfach zu benutzen, gute Dokumentation. Nur die Bilder&amp;hellip; naja&amp;hellip; wurden nicht angezeigt.&lt;/p&gt;&#10;&lt;h3 id="auch-die-bilder-werden-konvertiert"&gt;Auch die Bilder werden konvertiert&lt;/h3&gt;&#10;&lt;p&gt;Die relativen Links zu den Bildern unterscheiden sich zwischen Jekylls Interpretation und der Vorstellung des PDF-Generators. Ich musste die Markdown-Zieldatei in das Stammverzeichnis der Website verschieben und ein &lt;code&gt;.&lt;/code&gt; vor meinem &lt;code&gt;/assets&lt;/code&gt; hinzufügen, damit es funktioniert. Die Seitenumbrüche sind &amp;hellip; meh&amp;hellip; aber ich bin im Moment nicht bereit, mehr Arbeit hineinzustecken, also ist das gut genug für meine Zwecke.&lt;/p&gt;&#10;&lt;h3 id="ein-problem-mit-posts-die-nicht-angezeigt-werden"&gt;Ein Problem mit Posts, die nicht angezeigt werden?&lt;/h3&gt;&#10;&lt;p&gt;Gerade als ich diesen sechsten Beitrag von mir veröffentlicht habe, sehe ich, dass irgendwie nur Seite 2 der Beitragsübersicht angezeigt wird (sieht aus wie 5 Beiträge pro Seite) und ich kann nicht zu Seite 1 mit den &amp;ldquo;neuesten&amp;rdquo; Beiträgen wechseln: &lt;div class="media-wrapper center"&gt;&#10; &lt;figure class="media-frame"&gt;&#10; &lt;img src="https://blog.schallbert.de/assets/images/posts/2021-06-09_stuckonpage2.jpg" alt="terminal output" /&gt;&lt;/figure&gt;&#10;&lt;/div&gt;. Hm.&lt;/p&gt;&#10;</description></item></channel></rss>