<?xml version="1.0" encoding="utf-8"?><rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/">
<channel>
<title>Forum Bauen und Umwelt - Wie man 2D-Zeichnungen auf einen Zylindermantel aufprägt</title>
<link>https://bauforum.wirklichewelt.de/</link>
<description>Das Bauforum</description>
<language>de</language>
<item>
<title>Wie man 2D-Zeichnungen auf einen Zylindermantel aufprägt</title>
<content:encoded><![CDATA[<p>Die DWG-CAD-Programme BricsCAD und AutoCAD besitzen recht eindrucksvolle Modellierungsfähigkeiten. Reichen die eingebauten Befehle nicht aus, lassen sich in der Programmiersprache <a href="https://www.martinvogel.de/prog/marvolisp.html" target="_blank">LISP</a> neue Funktionen dazuschreiben. In den letzten 33 Jahren entstanden so allerorten tausende kleine und große CAD-Hilfswerkzeuge.</p>
<p>Leider ist die uralte Sprache LISP zwar ziemlich leistungsfähig, aber sie ist schon etwas speziell mit ihrer Syntax voller Klammerausdrücke. Ihre fremdartige polnische Notation trägt wohl auch mit dazu bei, dass die meisten CAD-Anwenderinnen und -anwender noch nie eine LISP-Routine selber geschrieben haben.</p>
<p>Ich fragte mich, ob es wohl möglich sei, auch mit einem Python-Programm CAD-Daten aus einer bestehenden Zeichnung zu lesen. Da es weder in AutoCAD noch in BricsCAD eine Programmierschnittstelle für Python gibt, müsste die Datenübergabe allein über Textdateien erfolgen.</p>
<p>Um Daten aus dem CAD-Programm heraus zu bekommen, hilft der Befehl DATENEXTRAKT, der eine CSV-Datei mit den Geometriedaten ausgewählter Zeichnungsobjekte erzeugt. Diese CSV-Datei kann von Python problemlos gelesen werden.</p>
<p>Der Rückweg ist etwas kniffliger, da Python ja wegen der fehlenden Programmierschnittstelle keine Möglichkeit hat, unmittelbar vorhandene Objekteigenschaften abzufragen. Alles, was Python ausgibt, muss praktisch „im Blindflug“ vom CAD-Programm ausgeführt werden. Zu diesem Zweck erzeugt das in diesem Beitrag vorgestellte Pythonprogramm eine SCR-Datei, in der alle Zeichenbefehle genau so stehen, wie sie ohne Maus über die Tastatur eingetippt werden müssten. Sinnvollerweise geschieht das in einer neuen, leeren Zeichnung. </p>
<p>Um beispielsweise das Haus vom Nikolaus bildschirmfüllend darzustellen, würde man folgendes eintippen:<br />
</p>
<pre><code>LINIE 1,1 1,3 2,4 3,3 1,3 3,1 1,1 3,3 3,1 ↲</code>
<code>ZOOM G↲</code></pre><p><br />
Das Zeichen ↲ steht dabei für das Drücken der Eingabetaste auf der Tastatur. In Python wird das entsprechende Steuerzeichen durch die Ersatzdarstellung \n in die SCR-Datei eingefügt.</p>
<p>Damit unser Pythonprogramm nicht allzu trivial wird, bekommt es die Aufgabe, eine zweidimensionale Zeichnung auf einem Zylindermantel abzubilden. Die Beispielzeichnung unten besteht aus 12 geschlossenen Polylinien. Die Bögen sind als Splines konstruiert worden und verwandeln sich dadurch beim Verbinden mit dem Rest der Polylinie zu einer Kette kurzer Linienstücke. Kreisbogenstücke würden dagegen durch ein einzelnes Linienstück ersetzt.</p>
<p><img src="https://bauforum.wirklichewelt.de/images/uploaded/201904121732365cb0cbb46cef7.png" alt="[image]"  loading="lazy" /></p>
<p>Exportiert man die Geometrie aus BricsCAD mittels DATENEXTRAKT in eine CSV-Datei, so kann man auswählen, welche Objektarten und -eigenschaften exportiert werden sollen. Wir beschränken uns bei der Objektart auf „Polylinien-Scheitelpunkte“ und bei den Eigenschaften auf  „Position X“, „Position Y“ und „Scheitelpunkt“. Das Häkchen vor „kombiniere gleiche Zeilen“ darf nicht gesetzt sein.</p>
<p>Die „extrahierte“ CSV-Datei besteht aus ein paar hundert Zeilen mit den Koordinaten aller Scheitelpunkte der ausgewählten Polylinien.</p>
<pre><code>Anzahl;Name;Position X;Position Y;Scheitelpunkt</code>
<code>1;Polylinien Scheitelpunkt;8.527978;0.410224;1</code>
<code>1;Polylinien Scheitelpunkt;7.976107;0.410224;2</code>
<code>1;Polylinien Scheitelpunkt;7.976107;1.279974;3</code>
<code>1;Polylinien Scheitelpunkt;7.979059;1.328747;4</code>
<code>1;Polylinien Scheitelpunkt;7.987645;1.377615;5</code>
<code>1;Polylinien Scheitelpunkt;8.001463;1.426065;6</code>
<code>1;Polylinien Scheitelpunkt;8.020111;1.473588;7</code></pre><p>Der Zähler in der letzten Spalte ist die Nummer des Scheitelpunkts in der jeweiligen Polylinie. Er beginnt bei jeder neuen Polylinie wieder bei Eins. Wir verwenden ihn, um herauszufinden, zu welcher Polylinie ein Scheitelpunkt gehört.</p>
<p>Unser Programm hat nun die Aufgabe, aus dieser CSV-Datei die X-Y-Koordinaten in 3D-Zylinderkoordinaten umzurechnen und die CAD-Befehle zu erzeugen, die diese Geometrie auf einen Zylindermantel abbilden. Diese werden in eine Datei geschrieben und mit dem Befehl SCRIPT in AutoCAD oder BricsCAD ausgeführt. </p>
<p>Das Ergebnis sieht in unserem Beispiel so aus:</p>
<p><img src="https://bauforum.wirklichewelt.de/images/uploaded/201904121726365cb0ca4c9ba80.png" alt="[image]"  loading="lazy" /></p>
<p>Mit dem CAD-Befehl AUFPRÄGEN lassen sich auf dem Zylindermantel liegende Flächen erzeugen, die dann beispielsweise verstärkt oder zurückgesetzt werden können. Wenn wir unserem Zylinder eine Wandstärke zuweisen, sieht das Ergebnis der Modellierung so aus:</p>
<p><img src="https://bauforum.wirklichewelt.de/images/uploaded/201904121722045cb0c93ca6757.png" alt="[image]"  loading="lazy" /></p>
<p>Damit die erzeugte Geometrie überhaupt korrekt aufgeprägt werden kann, muss sie exakt auf dem Zylindermantel liegen. Die Verbindungslinien zwischen den Scheitelpunkten sind daher stets Ellipsenbögen, die jeweils auf einer Ebene liegen, welche den Zylinder schneidet. Einzige Ausnahme sind senkrechte Linien, die weiterhin geradlinig bleiben.</p>
<p>Als Kuriosum ist zu beachten, dass weder AutoCAD noch BricsCAD Ellipsenbögen im Raum kennen. Um einen Ellipsenbogen zu zeichnen, muss zuerst eine Zeichenebene durch ein Benutzerkoordinatensystem definiert werden, auf der dann in einem zweiten Schritt ein Ellipsenbogen vom Startpunkt zum Endpunkt gezeichnet werden kann.</p>
<p><img src="https://bauforum.wirklichewelt.de/images/uploaded/201904112001055caf9d0135163.png" alt="[image]"  loading="lazy" /></p>
<p>Das Programm kann auch dazu verwendet werden, Schrift auf Zylindermäntel aufzuprägen. Der Text muss lediglich vorher mit dem Befehl <a href="index.php?id=11681" class="internal">TXTAUFL</a> in Polylinien umgewandelt werden. Je nach Font ist nach der Umwandlung ein Zwischenschritt notwendig, in dem möglicherweise vorhandene doppelte Umrisslinien gelöscht werden.</p>
<p><img src="https://bauforum.wirklichewelt.de/images/uploaded/201904112001195caf9d0f83c54.png" alt="[image]"  loading="lazy" /></p>
<pre class="python" style="font-family:monospace;"><ol><li style="background:#f5f5f5;"><div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;"><span style="color: #ff7700;">from</span> <span style="color: #dc143c;">math</span> <span style="color: #ff7700;">import</span> sin<span style="color: #000;">,</span> cos<span style="color: #000;">,</span> pi<span style="color: #000;">,</span> hypot</div></li><li style="background:#f9f9f9;"><div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;"><span style="color: #ff7700;">from</span> tkinter <span style="color: #ff7700;">import</span> Tk</div></li><li style="background:#f5f5f5;"><div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;"><span style="color: #ff7700;">from</span> tkinter.<span style="color: black;">filedialog</span> <span style="color: #ff7700;">import</span> askopenfilename</div></li><li style="background:#f9f9f9;"><div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;"><span style="color: #ff7700;">import</span> <span style="color: #dc143c;">sys</span></div></li><li style="background:#f5f5f5;"><div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">&nbsp;</div></li><li style="background:#f9f9f9;"><div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;"><span style="color: #800; font-style: italic;">## Version 5 vom 10. April 2019</span></div></li><li style="background:#f5f5f5;"><div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">&nbsp;</div></li><li style="background:#f9f9f9;"><div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;"><span style="color: #808;">print</span><span style="color: black;">&#40;</span><span style="color: #080;">&quot;&quot;&quot;</span></div></li><li style="background:#f5f5f5;"><div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;"><span style="color: #080;">Dieses Python-Programm erzeugt ein BricsCAD-Script, um geradlinige Teilstücke</span></div></li><li style="background:#f9f9f9;"><div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;"><span style="color: #080;">von 2D-Polylinien als Ellipsenbögen auf einem Zylindermantel abzubilden.</span></div></li><li style="background:#f5f5f5;"><div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">&nbsp;</div></li><li style="background:#f9f9f9;"><div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;"><span style="color: #080;">### Anleitung ###</span></div></li><li style="background:#f5f5f5;"><div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">&nbsp;</div></li><li style="background:#f9f9f9;"><div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;"><span style="color: #080;">Schritt 1: Die später auf dem Zylindermantel anzuordnenden Elemente müssen als</span></div></li><li style="background:#f5f5f5;"><div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;"><span style="color: #080;">2D-Polylinien in der x-y-Ebene vorliegen. Bei mittels TXTAUFL aus Texten</span></div></li><li style="background:#f9f9f9;"><div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;"><span style="color: #080;">erzeugten Objekten müssen ggf. doppelte Polylinien gelöscht werden.</span></div></li><li style="background:#f5f5f5;"><div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">&nbsp;</div></li><li style="background:#f9f9f9;"><div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;"><span style="color: #080;">Schritt 2: In BricsCAD mittels DATENEXTRAKT eine CSV-Datei mit den Scheitel-</span></div></li><li style="background:#f5f5f5;"><div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;"><span style="color: #080;">punktdaten der gewünschten Polylinien erstellen. Es müssen mindestens die</span></div></li><li style="background:#f9f9f9;"><div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;"><span style="color: #080;">Eigenschaften &quot;Position X&quot;, &quot;Position Y&quot; und &quot;Scheitelpunkt&quot; ausgewählt werden.</span></div></li><li style="background:#f5f5f5;"><div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;"><span style="color: #080;">Gleiche Elemente dürfen nicht zusammengefasst werden.</span></div></li><li style="background:#f9f9f9;"><div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">&nbsp;</div></li><li style="background:#f5f5f5;"><div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;"><span style="color: #080;">Als Trennzeichen ist das Semikolon zu wählen.</span></div></li><li style="background:#f9f9f9;"><div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">&nbsp;</div></li><li style="background:#f5f5f5;"><div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;"><span style="color: #080;">Schritt 3: Diese CSV-Datei laden.</span></div></li><li style="background:#f9f9f9;"><div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;"><span style="color: #080;">&quot;&quot;&quot;</span><span style="color: black;">&#41;</span></div></li><li style="background:#f5f5f5;"><div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">&nbsp;</div></li><li style="background:#f9f9f9;"><div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">Tk<span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>.<span style="color: black;">withdraw</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span></div></li><li style="background:#f5f5f5;"><div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">csvname <span style="color: #000;">=</span> askopenfilename<span style="color: black;">&#40;</span>title <span style="color: #000;">=</span> <span style="color: #080;">&quot;CSV-Datei wählen:&quot;</span><span style="color: #000;">,</span></div></li><li style="background:#f9f9f9;"><div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">                          filetypes <span style="color: #000;">=</span> <span style="color: black;">&#40;</span><span style="color: black;">&#40;</span><span style="color: #080;">&quot;CSV-Dateien&quot;</span><span style="color: #000;">,</span><span style="color: #080;">&quot;*.csv&quot;</span><span style="color: black;">&#41;</span><span style="color: #000;">,</span></div></li><li style="background:#f5f5f5;"><div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">                                       <span style="color: black;">&#40;</span><span style="color: #080;">&quot;Alle Dateien&quot;</span><span style="color: #000;">,</span><span style="color: #080;">&quot;*.*&quot;</span><span style="color: black;">&#41;</span><span style="color: black;">&#41;</span><span style="color: black;">&#41;</span></div></li><li style="background:#f9f9f9;"><div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;"><span style="color: #ff7700;">if</span> <span style="color: #ff7700;">not</span> csvname:</div></li><li style="background:#f5f5f5;"><div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">    <span style="color: #808;">print</span><span style="color: black;">&#40;</span><span style="color: #080;">&quot;Keine CSV-Datei ausgewählt. Programm wird abgebrochen.&quot;</span><span style="color: black;">&#41;</span></div></li><li style="background:#f9f9f9;"><div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">    <span style="color: #dc143c;">sys</span>.<span style="color: black;">exit</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span></div></li><li style="background:#f5f5f5;"><div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">&nbsp;</div></li><li style="background:#f9f9f9;"><div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;"><span style="color: #ff7700;">with</span> <span style="color: #808;">open</span><span style="color: black;">&#40;</span>csvname<span style="color: black;">&#41;</span> <span style="color: #ff7700;">as</span> <span style="color: #dc143c;">csv</span>:</div></li><li style="background:#f5f5f5;"><div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">    Zeilen <span style="color: #000;">=</span> <span style="color: black;">&#91;</span>Z.<span style="color: black;">strip</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span> <span style="color: #ff7700;">for</span> Z <span style="color: #ff7700;">in</span> <span style="color: #dc143c;">csv</span><span style="color: black;">&#93;</span></div></li><li style="background:#f9f9f9;"><div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">&nbsp;</div></li><li style="background:#f5f5f5;"><div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;"><span style="color: #800; font-style: italic;"># Kopfzeile der CSV-Datei</span></div></li><li style="background:#f9f9f9;"><div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">Z <span style="color: #000;">=</span> Zeilen<span style="color: black;">&#91;</span><span style="color: #008;">0</span><span style="color: black;">&#93;</span>.<span style="color: black;">split</span><span style="color: black;">&#40;</span><span style="color: #080;">&quot;;&quot;</span><span style="color: black;">&#41;</span></div></li><li style="background:#f5f5f5;"><div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">&nbsp;</div></li><li style="background:#f9f9f9;"><div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;"><span style="color: #800; font-style: italic;"># Führt diese alle benötigten Spalten auf?</span></div></li><li style="background:#f5f5f5;"><div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;"><span style="color: #ff7700;">try</span>:</div></li><li style="background:#f9f9f9;"><div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">    xSpalte <span style="color: #000;">=</span> Z.<span style="color: black;">index</span><span style="color: black;">&#40;</span><span style="color: #080;">&quot;Position X&quot;</span><span style="color: black;">&#41;</span></div></li><li style="background:#f5f5f5;"><div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">    ySpalte <span style="color: #000;">=</span> Z.<span style="color: black;">index</span><span style="color: black;">&#40;</span><span style="color: #080;">&quot;Position Y&quot;</span><span style="color: black;">&#41;</span></div></li><li style="background:#f9f9f9;"><div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">    sSpalte <span style="color: #000;">=</span> Z.<span style="color: black;">index</span><span style="color: black;">&#40;</span><span style="color: #080;">&quot;Scheitelpunkt&quot;</span><span style="color: black;">&#41;</span></div></li><li style="background:#f5f5f5;"><div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;"><span style="color: #ff7700;">except</span> <span style="color: #808;">ValueError</span>:</div></li><li style="background:#f9f9f9;"><div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">    <span style="color: #808;">print</span><span style="color: black;">&#40;</span><span style="color: #080;">&quot;&quot;&quot;</span></div></li><li style="background:#f5f5f5;"><div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;"><span style="color: #080;">CSV-Formatfehler!</span></div></li><li style="background:#f9f9f9;"><div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">&nbsp;</div></li><li style="background:#f5f5f5;"><div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;"><span style="color: #080;">In der Kopfzeile der CSV-Datei müssen die Spaltenüberschriften &quot;Position X&quot;,</span></div></li><li style="background:#f9f9f9;"><div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;"><span style="color: #080;">&quot;Position Y&quot; und &quot;Scheitelpunkt&quot; aufgeführt sein.</span></div></li><li style="background:#f5f5f5;"><div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">&nbsp;</div></li><li style="background:#f9f9f9;"><div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;"><span style="color: #080;">Programm wird abgebrochen.</span></div></li><li style="background:#f5f5f5;"><div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;"><span style="color: #080;">&quot;&quot;&quot;</span><span style="color: black;">&#41;</span></div></li><li style="background:#f9f9f9;"><div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">    <span style="color: #dc143c;">sys</span>.<span style="color: black;">exit</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span></div></li><li style="background:#f5f5f5;"><div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">&nbsp;</div></li><li style="background:#f9f9f9;"><div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;"><span style="color: #800; font-style: italic;"># Liste aller Polylinien in der CSV-Datei</span></div></li><li style="background:#f5f5f5;"><div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">PL <span style="color: #000;">=</span> <span style="color: black;">&#91;</span><span style="color: black;">&#93;</span></div></li><li style="background:#f9f9f9;"><div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">&nbsp;</div></li><li style="background:#f5f5f5;"><div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;"><span style="color: #800; font-style: italic;"># Grenzen des erkannten Bereichs</span></div></li><li style="background:#f9f9f9;"><div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">xmin <span style="color: #000;">=</span> ymin <span style="color: #000;">=</span> <span style="color: #808;">float</span><span style="color: black;">&#40;</span><span style="color: #080;">&quot;inf&quot;</span><span style="color: black;">&#41;</span></div></li><li style="background:#f5f5f5;"><div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">xmax <span style="color: #000;">=</span> ymax <span style="color: #000;">=</span> <span style="color: #808;">float</span><span style="color: black;">&#40;</span><span style="color: #080;">&quot;-inf&quot;</span><span style="color: black;">&#41;</span></div></li><li style="background:#f9f9f9;"><div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">&nbsp;</div></li><li style="background:#f5f5f5;"><div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;"><span style="color: #800; font-style: italic;"># Alle Zeilen der CSV-Datei auswerten</span></div></li><li style="background:#f9f9f9;"><div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;"><span style="color: #ff7700;">for</span> Zeile <span style="color: #ff7700;">in</span> Zeilen<span style="color: black;">&#91;</span><span style="color: #008;">1</span>:<span style="color: black;">&#93;</span>:</div></li><li style="background:#f5f5f5;"><div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">    zs <span style="color: #000;">=</span> Zeile.<span style="color: black;">split</span><span style="color: black;">&#40;</span><span style="color: #080;">&quot;;&quot;</span><span style="color: black;">&#41;</span></div></li><li style="background:#f9f9f9;"><div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">&nbsp;</div></li><li style="background:#f5f5f5;"><div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">    <span style="color: #ff7700;">if</span> <span style="color: #080;">&quot;Scheitelpunkt;&quot;</span> <span style="color: #ff7700;">in</span> Zeile:</div></li><li style="background:#f9f9f9;"><div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">        <span style="color: #800; font-style: italic;"># Nummer des Scheitelpunkts</span></div></li><li style="background:#f5f5f5;"><div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">        sp <span style="color: #000;">=</span> zs<span style="color: black;">&#91;</span>sSpalte<span style="color: black;">&#93;</span></div></li><li style="background:#f9f9f9;"><div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">&nbsp;</div></li><li style="background:#f5f5f5;"><div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">        <span style="color: #800; font-style: italic;"># Beginn einer neuen Polylinie?</span></div></li><li style="background:#f9f9f9;"><div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">        <span style="color: #ff7700;">if</span> sp <span style="color: #000;">==</span> <span style="color: #080;">&quot;1&quot;</span>:</div></li><li style="background:#f5f5f5;"><div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">            PL.<span style="color: black;">append</span><span style="color: black;">&#40;</span><span style="color: black;">&#91;</span><span style="color: black;">&#93;</span><span style="color: black;">&#41;</span></div></li><li style="background:#f9f9f9;"><div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">&nbsp;</div></li><li style="background:#f5f5f5;"><div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">        <span style="color: #800; font-style: italic;"># x- und y-Ordinaten holen</span></div></li><li style="background:#f9f9f9;"><div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">        x <span style="color: #000;">=</span> <span style="color: #808;">float</span><span style="color: black;">&#40;</span>zs<span style="color: black;">&#91;</span>xSpalte<span style="color: black;">&#93;</span><span style="color: black;">&#41;</span></div></li><li style="background:#f5f5f5;"><div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">        y <span style="color: #000;">=</span> <span style="color: #808;">float</span><span style="color: black;">&#40;</span>zs<span style="color: black;">&#91;</span>ySpalte<span style="color: black;">&#93;</span><span style="color: black;">&#41;</span></div></li><li style="background:#f9f9f9;"><div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">&nbsp;</div></li><li style="background:#f5f5f5;"><div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">        <span style="color: #800; font-style: italic;"># Grenzen ggf. erweitern</span></div></li><li style="background:#f9f9f9;"><div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">        xmin <span style="color: #000;">=</span> <span style="color: #808;">min</span><span style="color: black;">&#40;</span>xmin<span style="color: #000;">,</span> x<span style="color: black;">&#41;</span></div></li><li style="background:#f5f5f5;"><div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">        ymin <span style="color: #000;">=</span> <span style="color: #808;">min</span><span style="color: black;">&#40;</span>ymin<span style="color: #000;">,</span> y<span style="color: black;">&#41;</span></div></li><li style="background:#f9f9f9;"><div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">        xmax <span style="color: #000;">=</span> <span style="color: #808;">max</span><span style="color: black;">&#40;</span>xmax<span style="color: #000;">,</span> x<span style="color: black;">&#41;</span></div></li><li style="background:#f5f5f5;"><div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">        ymax <span style="color: #000;">=</span> <span style="color: #808;">max</span><span style="color: black;">&#40;</span>ymax<span style="color: #000;">,</span> y<span style="color: black;">&#41;</span></div></li><li style="background:#f9f9f9;"><div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">&nbsp;</div></li><li style="background:#f5f5f5;"><div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">        <span style="color: #800; font-style: italic;"># Scheitelpunkt an zuletzt begonnene Polylinie anhängen,</span></div></li><li style="background:#f9f9f9;"><div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">        <span style="color: #800; font-style: italic;"># doppelte Punkte überspringen</span></div></li><li style="background:#f5f5f5;"><div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">        <span style="color: #ff7700;">if</span> <span style="color: #ff7700;">not</span> PL<span style="color: black;">&#91;</span>-<span style="color: #008;">1</span><span style="color: black;">&#93;</span> <span style="color: #ff7700;">or</span> <span style="color: black;">&#40;</span>x<span style="color: #000;">,</span>y<span style="color: black;">&#41;</span> <span style="color: #000;">!=</span> PL<span style="color: black;">&#91;</span>-<span style="color: #008;">1</span><span style="color: black;">&#93;</span><span style="color: black;">&#91;</span>-<span style="color: #008;">1</span><span style="color: black;">&#93;</span>:</div></li><li style="background:#f9f9f9;"><div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">            PL<span style="color: black;">&#91;</span>-<span style="color: #008;">1</span><span style="color: black;">&#93;</span>.<span style="color: black;">append</span><span style="color: black;">&#40;</span><span style="color: black;">&#40;</span>x<span style="color: #000;">,</span>y<span style="color: black;">&#41;</span><span style="color: black;">&#41;</span></div></li><li style="background:#f5f5f5;"><div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">&nbsp;</div></li><li style="background:#f9f9f9;"><div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;"><span style="color: #808;">print</span><span style="color: black;">&#40;</span><span style="color: #808;">len</span><span style="color: black;">&#40;</span>PL<span style="color: black;">&#41;</span><span style="color: #000;">,</span><span style="color: #080;">&quot;Polylinien gefunden.<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: black;">&#41;</span></div></li><li style="background:#f5f5f5;"><div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">&nbsp;</div></li><li style="background:#f9f9f9;"><div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;"><span style="color: #808;">print</span><span style="color: black;">&#40;</span>f<span style="color: #080;">&quot;x-Bereich {xmin:.2f} bis {xmax:.2f}&quot;</span><span style="color: black;">&#41;</span></div></li><li style="background:#f5f5f5;"><div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;"><span style="color: #808;">print</span><span style="color: black;">&#40;</span>f<span style="color: #080;">&quot;y-Bereich {ymin:.2f} bis {ymax:.2f}&quot;</span><span style="color: black;">&#41;</span></div></li><li style="background:#f9f9f9;"><div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">&nbsp;</div></li><li style="background:#f5f5f5;"><div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">breite <span style="color: #000;">=</span> xmax - xmin</div></li><li style="background:#f9f9f9;"><div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">höhe <span style="color: #000;">=</span> ymax - ymin</div></li><li style="background:#f5f5f5;"><div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">&nbsp;</div></li><li style="background:#f9f9f9;"><div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;"><span style="color: #800; font-style: italic;"># Radius für 360° Umwicklung</span></div></li><li style="background:#f5f5f5;"><div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">rmin <span style="color: #000;">=</span> breite/pi/<span style="color: #008;">2</span></div></li><li style="background:#f9f9f9;"><div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">&nbsp;</div></li><li style="background:#f5f5f5;"><div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;"><span style="color: #808;">print</span><span style="color: black;">&#40;</span>f<span style="color: #080;">&quot;<span style="color: #000099; font-weight: bold;">\n</span>Kleinster sinnvoller Radius: {rmin:.2f}&quot;</span><span style="color: black;">&#41;</span></div></li><li style="background:#f9f9f9;"><div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">r <span style="color: #000;">=</span> <span style="color: #808;">float</span><span style="color: black;">&#40;</span><span style="color: #808;">input</span><span style="color: black;">&#40;</span><span style="color: #080;">&quot;Gewählter Radius r = &quot;</span><span style="color: black;">&#41;</span><span style="color: black;">&#41;</span></div></li><li style="background:#f5f5f5;"><div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">&nbsp;</div></li><li style="background:#f9f9f9;"><div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;"><span style="color: #800; font-style: italic;"># Zylinderumfang</span></div></li><li style="background:#f5f5f5;"><div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">u <span style="color: #000;">=</span> <span style="color: #008;">2</span>*pi*r</div></li><li style="background:#f9f9f9;"><div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">&nbsp;</div></li><li style="background:#f5f5f5;"><div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;"><span style="color: #ff7700;">def</span> zk<span style="color: black;">&#40;</span>r<span style="color: #000;">,</span>x<span style="color: #000;">,</span>y<span style="color: black;">&#41;</span>:</div></li><li style="background:#f9f9f9;"><div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">    <span style="color: #080;">&quot;&quot;&quot;Berechnet Zylinderkoordinaten&quot;&quot;&quot;</span></div></li><li style="background:#f5f5f5;"><div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">    z <span style="color: #000;">=</span> y-ymin</div></li><li style="background:#f9f9f9;"><div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">    w <span style="color: #000;">=</span> <span style="color: #008;">2</span>*pi*<span style="color: black;">&#40;</span>x-xmin<span style="color: black;">&#41;</span>/u</div></li><li style="background:#f5f5f5;"><div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">    x <span style="color: #000;">=</span> r*cos<span style="color: black;">&#40;</span>w<span style="color: black;">&#41;</span></div></li><li style="background:#f9f9f9;"><div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">    y <span style="color: #000;">=</span> r*sin<span style="color: black;">&#40;</span>w<span style="color: black;">&#41;</span></div></li><li style="background:#f5f5f5;"><div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">    <span style="color: #ff7700;">return</span> x<span style="color: #000;">,</span> y<span style="color: #000;">,</span> z</div></li><li style="background:#f9f9f9;"><div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">&nbsp;</div></li><li style="background:#f5f5f5;"><div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;"><span style="color: #800; font-style: italic;"># Die Scriptdatei heißt wie die CSV-Datei   </span></div></li><li style="background:#f9f9f9;"><div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">scrname <span style="color: #000;">=</span> csvname<span style="color: black;">&#91;</span>:-<span style="color: #008;">4</span><span style="color: black;">&#93;</span>+<span style="color: #080;">&quot;.scr&quot;</span></div></li><li style="background:#f5f5f5;"><div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">&nbsp;</div></li><li style="background:#f9f9f9;"><div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;"><span style="color: #808;">print</span><span style="color: black;">&#40;</span>f<span style="color: #080;">&quot;<span style="color: #000099; font-weight: bold;">\n</span>Schreibe Skriptdatei „{scrname}“ …&quot;</span><span style="color: black;">&#41;</span></div></li><li style="background:#f5f5f5;"><div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;"><span style="color: #ff7700;">with</span> <span style="color: #808;">open</span><span style="color: black;">&#40;</span>scrname<span style="color: #000;">,</span><span style="color: #080;">&quot;w&quot;</span><span style="color: black;">&#41;</span> <span style="color: #ff7700;">as</span> scr:</div></li><li style="background:#f9f9f9;"><div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">    <span style="color: #800; font-style: italic;"># Aus Geschwindigkeitsgründen: visueller Stil &quot;2D-Drahtmodell&quot;</span></div></li><li style="background:#f5f5f5;"><div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">    scr.<span style="color: black;">write</span><span style="color: black;">&#40;</span><span style="color: #080;">&quot;-VIS A 2D<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: black;">&#41;</span></div></li><li style="background:#f9f9f9;"><div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">    <span style="color: #800; font-style: italic;"># Definierende Geometrie immer löschen</span></div></li><li style="background:#f5f5f5;"><div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">    scr.<span style="color: black;">write</span><span style="color: black;">&#40;</span><span style="color: #080;">&quot;DELOBJ 2<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: black;">&#41;</span></div></li><li style="background:#f9f9f9;"><div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">    <span style="color: #800; font-style: italic;"># Schrägansicht</span></div></li><li style="background:#f5f5f5;"><div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">    scr.<span style="color: black;">write</span><span style="color: black;">&#40;</span><span style="color: #080;">&quot;APUNKT 1,1,1<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: black;">&#41;</span></div></li><li style="background:#f9f9f9;"><div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">    <span style="color: #800; font-style: italic;"># Zoom auf interessanten Bereich</span></div></li><li style="background:#f5f5f5;"><div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">    scr.<span style="color: black;">write</span><span style="color: black;">&#40;</span>f<span style="color: #080;">&quot;ZOOM F {-r},{-r} {r},{r}<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: black;">&#41;</span></div></li><li style="background:#f9f9f9;"><div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">&nbsp;</div></li><li style="background:#f5f5f5;"><div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">    <span style="color: #800; font-style: italic;"># Für alle Polylinien in der Liste:</span></div></li><li style="background:#f9f9f9;"><div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">    <span style="color: #ff7700;">for</span> P <span style="color: #ff7700;">in</span> PL:</div></li><li style="background:#f5f5f5;"><div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">        <span style="color: #800; font-style: italic;"># Erster und letzter Punkt müssen übereinstimmen</span></div></li><li style="background:#f9f9f9;"><div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">        <span style="color: #ff7700;">if</span> P<span style="color: black;">&#91;</span><span style="color: #008;">0</span><span style="color: black;">&#93;</span> <span style="color: #000;">!=</span> P<span style="color: black;">&#91;</span>-<span style="color: #008;">1</span><span style="color: black;">&#93;</span>:</div></li><li style="background:#f5f5f5;"><div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">            P.<span style="color: black;">append</span><span style="color: black;">&#40;</span>P<span style="color: black;">&#91;</span><span style="color: #008;">0</span><span style="color: black;">&#93;</span><span style="color: black;">&#41;</span></div></li><li style="background:#f9f9f9;"><div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">&nbsp;</div></li><li style="background:#f5f5f5;"><div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">        <span style="color: #800; font-style: italic;"># Für alle Teilstücke in der Polylinie:</span></div></li><li style="background:#f9f9f9;"><div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">        <span style="color: #ff7700;">for</span> i <span style="color: #ff7700;">in</span> <span style="color: #808;">range</span><span style="color: black;">&#40;</span><span style="color: #808;">len</span><span style="color: black;">&#40;</span>P<span style="color: black;">&#41;</span>-<span style="color: #008;">1</span><span style="color: black;">&#41;</span>:</div></li><li style="background:#f5f5f5;"><div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">            <span style="color: #800; font-style: italic;"># Die beiden Endpunkte auf den Zylindermantel projizieren</span></div></li><li style="background:#f9f9f9;"><div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">            x1z<span style="color: #000;">,</span> y1z <span style="color: #000;">,</span>z1z <span style="color: #000;">=</span> zk<span style="color: black;">&#40;</span>r<span style="color: #000;">,</span> P<span style="color: black;">&#91;</span>i<span style="color: black;">&#93;</span><span style="color: black;">&#91;</span><span style="color: #008;">0</span><span style="color: black;">&#93;</span><span style="color: #000;">,</span> P<span style="color: black;">&#91;</span>i<span style="color: black;">&#93;</span><span style="color: black;">&#91;</span><span style="color: #008;">1</span><span style="color: black;">&#93;</span><span style="color: black;">&#41;</span></div></li><li style="background:#f5f5f5;"><div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">            x2z<span style="color: #000;">,</span> y2z <span style="color: #000;">,</span>z2z <span style="color: #000;">=</span> zk<span style="color: black;">&#40;</span>r<span style="color: #000;">,</span> P<span style="color: black;">&#91;</span>i+<span style="color: #008;">1</span><span style="color: black;">&#93;</span><span style="color: black;">&#91;</span><span style="color: #008;">0</span><span style="color: black;">&#93;</span><span style="color: #000;">,</span> P<span style="color: black;">&#91;</span>i+<span style="color: #008;">1</span><span style="color: black;">&#93;</span><span style="color: black;">&#91;</span><span style="color: #008;">1</span><span style="color: black;">&#93;</span><span style="color: black;">&#41;</span></div></li><li style="background:#f9f9f9;"><div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">            <span style="color: #800; font-style: italic;"># Mittlerer Punkt der Linie auf dem Zylindermantel</span></div></li><li style="background:#f5f5f5;"><div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">            xmz<span style="color: #000;">,</span> ymz<span style="color: #000;">,</span> zmz <span style="color: #000;">=</span> zk<span style="color: black;">&#40;</span>r<span style="color: #000;">,</span></div></li><li style="background:#f9f9f9;"><div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">                               <span style="color: black;">&#40;</span>P<span style="color: black;">&#91;</span>i<span style="color: black;">&#93;</span><span style="color: black;">&#91;</span><span style="color: #008;">0</span><span style="color: black;">&#93;</span>+P<span style="color: black;">&#91;</span>i+<span style="color: #008;">1</span><span style="color: black;">&#93;</span><span style="color: black;">&#91;</span><span style="color: #008;">0</span><span style="color: black;">&#93;</span><span style="color: black;">&#41;</span>/<span style="color: #008;">2</span><span style="color: #000;">,</span></div></li><li style="background:#f5f5f5;"><div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">                               <span style="color: black;">&#40;</span>P<span style="color: black;">&#91;</span>i<span style="color: black;">&#93;</span><span style="color: black;">&#91;</span><span style="color: #008;">1</span><span style="color: black;">&#93;</span>+P<span style="color: black;">&#91;</span>i+<span style="color: #008;">1</span><span style="color: black;">&#93;</span><span style="color: black;">&#91;</span><span style="color: #008;">1</span><span style="color: black;">&#93;</span><span style="color: black;">&#41;</span>/<span style="color: #008;">2</span><span style="color: black;">&#41;</span></div></li><li style="background:#f9f9f9;"><div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">            <span style="color: #800; font-style: italic;"># Sehnenlänge im Grundriss</span></div></li><li style="background:#f5f5f5;"><div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">            dx <span style="color: #000;">=</span> x2z-x1z</div></li><li style="background:#f9f9f9;"><div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">            dy <span style="color: #000;">=</span> y2z-y1z</div></li><li style="background:#f5f5f5;"><div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">            dh <span style="color: #000;">=</span> hypot<span style="color: black;">&#40;</span>dx<span style="color: #000;">,</span> dy<span style="color: black;">&#41;</span></div></li><li style="background:#f9f9f9;"><div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">            <span style="color: #800; font-style: italic;"># Höhenunterschied zwischen Start- und Endpunkt</span></div></li><li style="background:#f5f5f5;"><div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">            dz <span style="color: #000;">=</span> z2z-z1z</div></li><li style="background:#f9f9f9;"><div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">            <span style="color: #800; font-style: italic;"># Sehnenlänge im Raum</span></div></li><li style="background:#f5f5f5;"><div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">            ds <span style="color: #000;">=</span> hypot<span style="color: black;">&#40;</span>dh<span style="color: #000;">,</span> dz<span style="color: black;">&#41;</span></div></li><li style="background:#f9f9f9;"><div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">&nbsp;</div></li><li style="background:#f5f5f5;"><div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">            <span style="color: #800; font-style: italic;"># Um Nulldivisionen zu vermeiden, müssen Linien</span></div></li><li style="background:#f9f9f9;"><div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">            <span style="color: #800; font-style: italic;"># parallel zur Zylinderachse gesondert betrachtet werden:</span></div></li><li style="background:#f5f5f5;"><div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">&nbsp;</div></li><li style="background:#f9f9f9;"><div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">            <span style="color: #ff7700;">if</span> <span style="color: #ff7700;">not</span> dh:</div></li><li style="background:#f5f5f5;"><div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">                <span style="color: #800; font-style: italic;"># Senkrechte Linie</span></div></li><li style="background:#f9f9f9;"><div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">&nbsp;</div></li><li style="background:#f5f5f5;"><div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">                scr.<span style="color: black;">write</span><span style="color: black;">&#40;</span><span style="color: #080;">&quot;LINIE &quot;</span></div></li><li style="background:#f9f9f9;"><div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">                          f<span style="color: #080;">&quot;{x1z},{y1z},{z1z} &quot;</span></div></li><li style="background:#f5f5f5;"><div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">                          f<span style="color: #080;">&quot;{x2z},{y2z},{z2z} <span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: black;">&#41;</span></div></li><li style="background:#f9f9f9;"><div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">&nbsp;</div></li><li style="background:#f5f5f5;"><div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">            <span style="color: #ff7700;">else</span>:</div></li><li style="background:#f9f9f9;"><div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">                <span style="color: #800; font-style: italic;"># Ellipsenbogen</span></div></li><li style="background:#f5f5f5;"><div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">&nbsp;</div></li><li style="background:#f9f9f9;"><div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">                <span style="color: #800; font-style: italic;"># Radius der langen Halbachse</span></div></li><li style="background:#f5f5f5;"><div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">                rl <span style="color: #000;">=</span> -ds/dh * r</div></li><li style="background:#f9f9f9;"><div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">&nbsp;</div></li><li style="background:#f5f5f5;"><div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">                <span style="color: #800; font-style: italic;"># Radius bis zur Sehnenmitte</span></div></li><li style="background:#f9f9f9;"><div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">                rs <span style="color: #000;">=</span> hypot<span style="color: black;">&#40;</span><span style="color: black;">&#40;</span>x1z+x2z<span style="color: black;">&#41;</span>/<span style="color: #008;">2</span><span style="color: #000;">,</span><span style="color: black;">&#40;</span>y1z+y2z<span style="color: black;">&#41;</span>/<span style="color: #008;">2</span><span style="color: black;">&#41;</span></div></li><li style="background:#f5f5f5;"><div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">&nbsp;</div></li><li style="background:#f9f9f9;"><div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">                <span style="color: #800; font-style: italic;"># Ellipsenbögen können nur</span></div></li><li style="background:#f5f5f5;"><div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">                <span style="color: #800; font-style: italic;"># im ebenen BKS gezeichnet werden.</span></div></li><li style="background:#f9f9f9;"><div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">                scr.<span style="color: black;">write</span><span style="color: black;">&#40;</span>f<span style="color: #080;">&quot;BKS 0,0,{zmz} &quot;</span></div></li><li style="background:#f5f5f5;"><div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">                          f<span style="color: #080;">&quot;{xmz},{ymz},{zmz} &quot;</span></div></li><li style="background:#f9f9f9;"><div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">                          f<span style="color: #080;">&quot;{x2z},{y2z},{z2z}<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: black;">&#41;</span></div></li><li style="background:#f5f5f5;"><div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">&nbsp;</div></li><li style="background:#f9f9f9;"><div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">                <span style="color: #800; font-style: italic;"># Wir sammeln alle Punkte ein</span></div></li><li style="background:#f5f5f5;"><div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">                scr.<span style="color: black;">write</span><span style="color: black;">&#40;</span><span style="color: #080;">&quot;ELLIPSE B &quot;</span></div></li><li style="background:#f9f9f9;"><div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">                          f<span style="color: #080;">&quot;0,{-rl} &quot;</span></div></li><li style="background:#f5f5f5;"><div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">                          f<span style="color: #080;">&quot;0,{rl} &quot;</span></div></li><li style="background:#f9f9f9;"><div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">                          f<span style="color: #080;">&quot;{r},0 &quot;</span></div></li><li style="background:#f5f5f5;"><div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">                          f<span style="color: #080;">&quot;{rs},{-ds/2} &quot;</span></div></li><li style="background:#f9f9f9;"><div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">                          f<span style="color: #080;">&quot;{rs},{ds/2}<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span></div></li><li style="background:#f5f5f5;"><div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">                          <span style="color: #080;">&quot;BKS W<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: black;">&#41;</span></div></li><li style="background:#f9f9f9;"><div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">&nbsp;</div></li><li style="background:#f5f5f5;"><div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">    <span style="color: #800; font-style: italic;"># Alle Ellipsen zu &quot;Splines&quot; verbinden</span></div></li><li style="background:#f9f9f9;"><div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">    scr.<span style="color: black;">write</span><span style="color: black;">&#40;</span><span style="color: #080;">&quot;VERBINDEN alle <span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: black;">&#41;</span></div></li><li style="background:#f5f5f5;"><div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">&nbsp;</div></li><li style="background:#f9f9f9;"><div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">    <span style="color: #800; font-style: italic;"># Zum Schluss noch den dazugehörigen Zylinder bauen …</span></div></li><li style="background:#f5f5f5;"><div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">    scr.<span style="color: black;">write</span><span style="color: black;">&#40;</span>f<span style="color: #080;">&quot;ZYLINDER 0,0,{-höhe/4} {r} {höhe*1.5}<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: black;">&#41;</span></div></li><li style="background:#f9f9f9;"><div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">&nbsp;</div></li><li style="background:#f5f5f5;"><div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">    <span style="color: #800; font-style: italic;"># … und alle Splines auf den Zylindermantel aufprägen</span></div></li><li style="background:#f9f9f9;"><div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">    scr.<span style="color: black;">write</span><span style="color: black;">&#40;</span><span style="color: #080;">&quot;AUFPRÄG L &quot;</span><span style="color: black;">&#41;</span></div></li><li style="background:#f5f5f5;"><div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">    <span style="color: #ff7700;">for</span> P <span style="color: #ff7700;">in</span> PL:</div></li><li style="background:#f9f9f9;"><div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">        scr.<span style="color: black;">write</span><span style="color: black;">&#40;</span><span style="color: #080;">&quot;alle J &quot;</span><span style="color: black;">&#41;</span></div></li><li style="background:#f5f5f5;"><div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">    scr.<span style="color: black;">write</span><span style="color: black;">&#40;</span><span style="color: #080;">&quot;<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: black;">&#41;</span></div></li><li style="background:#f9f9f9;"><div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">&nbsp;</div></li><li style="background:#f5f5f5;"><div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;"><span style="color: #808;">print</span><span style="color: black;">&#40;</span><span style="color: #080;">&quot;&quot;&quot;</span></div></li><li style="background:#f9f9f9;"><div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;"><span style="color: #080;">Schritt 4: In BricsCAD in einer leeren Zeichnung mittels SCRIPT die gerade</span></div></li><li style="background:#f5f5f5;"><div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;"><span style="color: #080;">erzeugte Scriptdatei ausführen lassen.</span></div></li><li style="background:#f9f9f9;"><div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">&nbsp;</div></li><li style="background:#f5f5f5;"><div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;"><span style="color: #080;">Die Umrisse werden vom Skript mittels AUFPRÄGEN auf die Zylinderwand</span></div></li><li style="background:#f9f9f9;"><div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;"><span style="color: #080;">aufgeprägt. </span></div></li><li style="background:#f5f5f5;"><div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">&nbsp;</div></li><li style="background:#f9f9f9;"><div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;"><span style="color: #080;">Die dadurch erzeugten Teilflächen der Zylinderwand können mittels</span></div></li><li style="background:#f5f5f5;"><div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;"><span style="color: #080;">DMVERSTÄRKEN erhaben oder vertieft ausmodelliert werden.</span></div></li><li style="background:#f9f9f9;"><div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">&nbsp;</div></li><li style="background:#f5f5f5;"><div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;"><span style="color: #080;">&quot;&quot;&quot;</span><span style="color: black;">&#41;</span></div></li><li style="background:#f9f9f9;"><div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;">&nbsp;</div></li><li style="background:#f5f5f5;"><div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;"><span style="color: #808;">input</span><span style="color: black;">&#40;</span><span style="color: #080;">&quot;[Enter]&quot;</span><span style="color: black;">&#41;</span></div></li></ol></pre>]]></content:encoded>
<link>https://bauforum.wirklichewelt.de/index.php?id=11715</link>
<guid>https://bauforum.wirklichewelt.de/index.php?id=11715</guid>
<pubDate>Thu, 11 Apr 2019 20:40:54 +0000</pubDate>
<category>Software</category><dc:creator>Martin Vogel</dc:creator>
</item>
</channel>
</rss>
