<?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><![CDATA[GridTalk.de - Externe Tools]]></title>
		<link>https://www.gridtalk.de/</link>
		<description><![CDATA[GridTalk.de - https://www.gridtalk.de]]></description>
		<pubDate>Wed, 29 Apr 2026 20:51:20 +0000</pubDate>
		<generator>MyBB</generator>
		<item>
			<title><![CDATA[OSSL2Gif]]></title>
			<link>https://www.gridtalk.de/showthread.php?tid=5364</link>
			<pubDate>Thu, 12 Feb 2026 12:46:34 +0100</pubDate>
			<dc:creator><![CDATA[<a href="https://www.gridtalk.de/member.php?action=profile&uid=998">Manfred Aabye</a>]]></dc:creator>
			<guid isPermaLink="false">https://www.gridtalk.de/showthread.php?tid=5364</guid>
			<description><![CDATA[<span style="font-size: xx-large;" class="mycode_size">OSSL2Gif Version 1.0.2 – Einfache GIF-zu-Textur-Umwandlung​</span><br />
<br />
Mit OSSL2Gif kannst du animierte GIFs einfach in Texturen für Second Life/OpenSim umwandeln – ganz ohne Programmierkenntnisse!<br />
Das ist ähnlich wie sl2gif hat aber nichts damit zu tun.<br />
<br />
<!-- start: postbit_attachments_attachment -->
<br /><!-- start: attachment_icon -->
<img src="https://www.gridtalk.de/images/attachtypes/image.gif" title="PNG Image" border="0" alt=".png" />
<!-- end: attachment_icon -->&nbsp;&nbsp;<a href="attachment.php?aid=11845" target="_blank" title="">logo003.png</a> (Größe: 1,55 MB / Downloads: 49)
<!-- end: postbit_attachments_attachment --><br />
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Bedienung:​</span></span><br />
    <span style="font-weight: bold;" class="mycode_b">GIF laden:</span> Klicke auf „GIF laden“ und wähle eine animierte GIF-Datei aus.<br />
    <span style="font-weight: bold;" class="mycode_b">Vorschau:</span> Das GIF und die spätere Textur werden angezeigt.<br />
    <span style="font-weight: bold;" class="mycode_b">Effekte:</span> Du kannst Graustufen, Schärfe, Weichzeichnen und Transparenz einstellen.<br />
    <span style="font-weight: bold;" class="mycode_b">Bildgröße:</span> Passe die Zielgröße der Textur an.<br />
    <span style="font-weight: bold;" class="mycode_b">Randlos:</span> Entfernt überflüssige transparente Ränder.<br />
    <span style="font-weight: bold;" class="mycode_b">Play/Pause:</span> Animation abspielen oder anhalten.<br />
    <span style="font-weight: bold;" class="mycode_b">Bild hinzufügen:</span> Einzelne GIF-Frames zur Textur hinzufügen.<br />
    <span style="font-weight: bold;" class="mycode_b">Sprache:</span> Wähle die Sprache im Dropdown-Menü.<br />
    <span style="font-weight: bold;" class="mycode_b">Speichern:</span> Speichere das GIF oder die Textur als Datei.<br />
    <span style="font-weight: bold;" class="mycode_b">LSL exportieren:</span> Erzeuge ein LSL-Skript für Second Life/OpenSim.<br />
<br />
<br />
<!-- start: postbit_attachments_attachment -->
<br /><!-- start: attachment_icon -->
<img src="https://www.gridtalk.de/images/attachtypes/image.gif" title="PNG Image" border="0" alt=".png" />
<!-- end: attachment_icon -->&nbsp;&nbsp;<a href="attachment.php?aid=11846" target="_blank" title="">Demo.png</a> (Größe: 936,76 KB / Downloads: 46)
<!-- end: postbit_attachments_attachment --><br />
<br />
<br />
<a href="https://github.com/ManfredAabye/OSSL2Gif/releases" target="_blank" rel="noopener" class="mycode_url">Download Github</a>]]></description>
			<content:encoded><![CDATA[<span style="font-size: xx-large;" class="mycode_size">OSSL2Gif Version 1.0.2 – Einfache GIF-zu-Textur-Umwandlung​</span><br />
<br />
Mit OSSL2Gif kannst du animierte GIFs einfach in Texturen für Second Life/OpenSim umwandeln – ganz ohne Programmierkenntnisse!<br />
Das ist ähnlich wie sl2gif hat aber nichts damit zu tun.<br />
<br />
<!-- start: postbit_attachments_attachment -->
<br /><!-- start: attachment_icon -->
<img src="https://www.gridtalk.de/images/attachtypes/image.gif" title="PNG Image" border="0" alt=".png" />
<!-- end: attachment_icon -->&nbsp;&nbsp;<a href="attachment.php?aid=11845" target="_blank" title="">logo003.png</a> (Größe: 1,55 MB / Downloads: 49)
<!-- end: postbit_attachments_attachment --><br />
<br />
<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Bedienung:​</span></span><br />
    <span style="font-weight: bold;" class="mycode_b">GIF laden:</span> Klicke auf „GIF laden“ und wähle eine animierte GIF-Datei aus.<br />
    <span style="font-weight: bold;" class="mycode_b">Vorschau:</span> Das GIF und die spätere Textur werden angezeigt.<br />
    <span style="font-weight: bold;" class="mycode_b">Effekte:</span> Du kannst Graustufen, Schärfe, Weichzeichnen und Transparenz einstellen.<br />
    <span style="font-weight: bold;" class="mycode_b">Bildgröße:</span> Passe die Zielgröße der Textur an.<br />
    <span style="font-weight: bold;" class="mycode_b">Randlos:</span> Entfernt überflüssige transparente Ränder.<br />
    <span style="font-weight: bold;" class="mycode_b">Play/Pause:</span> Animation abspielen oder anhalten.<br />
    <span style="font-weight: bold;" class="mycode_b">Bild hinzufügen:</span> Einzelne GIF-Frames zur Textur hinzufügen.<br />
    <span style="font-weight: bold;" class="mycode_b">Sprache:</span> Wähle die Sprache im Dropdown-Menü.<br />
    <span style="font-weight: bold;" class="mycode_b">Speichern:</span> Speichere das GIF oder die Textur als Datei.<br />
    <span style="font-weight: bold;" class="mycode_b">LSL exportieren:</span> Erzeuge ein LSL-Skript für Second Life/OpenSim.<br />
<br />
<br />
<!-- start: postbit_attachments_attachment -->
<br /><!-- start: attachment_icon -->
<img src="https://www.gridtalk.de/images/attachtypes/image.gif" title="PNG Image" border="0" alt=".png" />
<!-- end: attachment_icon -->&nbsp;&nbsp;<a href="attachment.php?aid=11846" target="_blank" title="">Demo.png</a> (Größe: 936,76 KB / Downloads: 46)
<!-- end: postbit_attachments_attachment --><br />
<br />
<br />
<a href="https://github.com/ManfredAabye/OSSL2Gif/releases" target="_blank" rel="noopener" class="mycode_url">Download Github</a>]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[PBR Material Maker]]></title>
			<link>https://www.gridtalk.de/showthread.php?tid=5354</link>
			<pubDate>Sat, 31 Jan 2026 15:25:05 +0100</pubDate>
			<dc:creator><![CDATA[<a href="https://www.gridtalk.de/member.php?action=profile&uid=998">Manfred Aabye</a>]]></dc:creator>
			<guid isPermaLink="false">https://www.gridtalk.de/showthread.php?tid=5354</guid>
			<description><![CDATA[<span style="font-size: xx-large;" class="mycode_size">PBR Material Maker 3.8.602</span><br />
<span style="font-weight: bold;" class="mycode_b">Allgemeines</span><br />
PBR Material Maker ist ein erweitertes Tool zum Packen und Erstellen von GLTF-Dateien für PBR-Materialien. Es unterstützt das Laden, Bearbeiten und Exportieren von Texturen (Base Color, Occlusion, Roughness, Metallic, Normal, Emission, Alpha) und bietet zahlreiche Automatisierungen für die Materialerstellung und den Export.<br />
<br />
<!-- start: postbit_attachments_attachment -->
<br /><!-- start: attachment_icon -->
<img src="https://www.gridtalk.de/images/attachtypes/image.gif" title="PNG Image" border="0" alt=".png" />
<!-- end: attachment_icon -->&nbsp;&nbsp;<a href="attachment.php?aid=11783" target="_blank" title="">PBR-Material-Maker1.png</a> (Größe: 2,15 MB / Downloads: 45)
<!-- end: postbit_attachments_attachment --><br />
<br />
Version: 3.8.602.0<br />
Plattform: Windows 7 und neuer (.NET 10)<br />
Ziel: OpenSim, SecondLife, GLTF 2.0-kompatible Plattformen<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Hauptfunktionen</span><br />
Drag &amp; Drop: Texturen einfach in die jeweiligen Slots ziehen.<br />
Material-Presets: Auswahl und Verwaltung von Materialvorlagen.<br />
Parametersteuerung: Alle relevanten Materialparameter (Stärke, Schwellenwerte, Tönung, etc.) sind direkt einstellbar.<br />
Checkboxen für Texturtypen: Jede Map kann gezielt aktiviert/deaktiviert werden. Nur aktivierte Maps werden in die GLTF-Datei übernommen.<br />
Bildgrößenanpassung (Resize): Alle Texturen können automatisch auf die gewünschte Auflösung skaliert werden.<br />
Automatische Map-Generierung: Fehlende Maps (Normal, Roughness, Metallic, Occlusion, Alpha, ORM) können per Batch automatisch erzeugt werden.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Batch-Funktionen:</span><br />
Batch: Generiere Fehlende Maps – Automatische Erzeugung aller fehlenden Maps im Verzeichnis.<br />
Batch: Batch Speichern – Exportiert alle Materialien im Verzeichnis als GLTF inklusive Texturen.<br />
Zentraler GLTF-Export: Die Funktion gltf_exporter steuert den Export und die Texturzuordnung für alle relevanten Speicherpunkte.<br />
Fortschrittsbalken: Zeigt den Status bei längeren Batch-Operationen an.<br />
Kompatibilität: Exportierte GLTF-Dateien sind direkt für OpenSim und SecondLife verwendbar.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">UI-Komponenten</span><br />
Materialauswahl &amp; Parameter<br />
Materialname: Eingabefeld für den Namen des Materials.<br />
Material-Preset: Dropdown zur Auswahl vordefinierter Materialtypen.<br />
Texturauflösung: Dropdown zur Auswahl der Zielauflösung für alle Maps.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Textur-Slots (Drag &amp; Drop)</span><br />
Base Color (Albedo)<br />
Alpha-Map<br />
Occlusion-Map<br />
Roughness-Map<br />
Metallic-Map<br />
Normal-Map<br />
Emission-Map<br />
ORM-Map (Occlusion-Roughness-Metallic kombiniert)<br />
Checkboxen für Map-Typen<br />
Normal, ORM, Emission, Metallic, Roughness, Occlusion, Alpha<br />
Nur aktivierte Maps werden exportiert.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Batch-Funktionen</span><br />
Batch: Generiere Fehlende Maps<br />
Automatische Erzeugung aller fehlenden Maps im aktuellen Verzeichnis. Fortschrittsbalken wird angezeigt.<br />
Batch: Batch Speichern<br />
Exportiert alle Materialien im Verzeichnis als GLTF inklusive Texturen. Fortschrittsbalken wird angezeigt.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Fortschrittsbalken</span><br />
Zeigt den Status bei längeren Operationen (Batch-Generierung, Batch-Speichern).<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Bedienung &amp; Workflow</span><br />
Texturen per Drag &amp; Drop in die Slots ziehen.<br />
Materialparameter und Checkboxen nach Bedarf einstellen.<br />
Optional: Fehlende Maps automatisch generieren (Batch: Generiere Fehlende Maps).<br />
Material exportieren (Speichern oder Batch Speichern).<br />
GLTF-Dateien können direkt in OpenSim/SecondLife hochgeladen werden.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Hinweise &amp; Tipps</span><br />
Nur aktivierte Checkboxen werden exportiert: Über die Checkboxen kann gezielt gesteuert werden, welche Maps in die GLTF-Datei übernommen werden.<br />
Automatische Map-Generierung: Fehlende Maps werden nach Standardparametern erzeugt, können aber nachträglich angepasst werden.<br />
Batch-Funktionen: Ideal für die Verarbeitung ganzer Verzeichnisse mit vielen Materialien.<br />
Fortschrittsbalken: Gibt visuelles Feedback bei längeren Prozessen.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Systemvoraussetzungen</span><br />
Windows 7 oder neuer<br />
.NET 10 Desktop Runtime<br />
Keine Installation erforderlich, einfach ausführbar<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Installation</span><br />
Release herunterladen und entpacken.<br />
Die Datei PBR Material Maker.exe ausführen.<br />
<br />
Github Repository: <a href="https://github.com/ManfredAabye/PBR-Material-Maker" target="_blank" rel="noopener" class="mycode_url">https://github.com/ManfredAabye/PBR-Material-Maker</a><br />
<br />
<span style="font-weight: bold;" class="mycode_b">Nachtrag:</span><br />
Wichtig sind 2048 Texturen für das Terrain denn das sind ja nur wenige und es wertet die ganze Region auf.<br />
Bei Tile Texturen die aneinander gekachelt werden, kann die Größe auch unter 512 fallen da sieht man das nicht wirklich.<br />
Tip: Testen Testen Testen <img src="https://www.gridtalk.de/images/smilies/smile.gif" alt="Smile" title="Smile" class="smilie smilie_1" onclick="&#36;.markItUp({target:markitup_instance,replaceWith:''});&#36;.modal.close()" />]]></description>
			<content:encoded><![CDATA[<span style="font-size: xx-large;" class="mycode_size">PBR Material Maker 3.8.602</span><br />
<span style="font-weight: bold;" class="mycode_b">Allgemeines</span><br />
PBR Material Maker ist ein erweitertes Tool zum Packen und Erstellen von GLTF-Dateien für PBR-Materialien. Es unterstützt das Laden, Bearbeiten und Exportieren von Texturen (Base Color, Occlusion, Roughness, Metallic, Normal, Emission, Alpha) und bietet zahlreiche Automatisierungen für die Materialerstellung und den Export.<br />
<br />
<!-- start: postbit_attachments_attachment -->
<br /><!-- start: attachment_icon -->
<img src="https://www.gridtalk.de/images/attachtypes/image.gif" title="PNG Image" border="0" alt=".png" />
<!-- end: attachment_icon -->&nbsp;&nbsp;<a href="attachment.php?aid=11783" target="_blank" title="">PBR-Material-Maker1.png</a> (Größe: 2,15 MB / Downloads: 45)
<!-- end: postbit_attachments_attachment --><br />
<br />
Version: 3.8.602.0<br />
Plattform: Windows 7 und neuer (.NET 10)<br />
Ziel: OpenSim, SecondLife, GLTF 2.0-kompatible Plattformen<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Hauptfunktionen</span><br />
Drag &amp; Drop: Texturen einfach in die jeweiligen Slots ziehen.<br />
Material-Presets: Auswahl und Verwaltung von Materialvorlagen.<br />
Parametersteuerung: Alle relevanten Materialparameter (Stärke, Schwellenwerte, Tönung, etc.) sind direkt einstellbar.<br />
Checkboxen für Texturtypen: Jede Map kann gezielt aktiviert/deaktiviert werden. Nur aktivierte Maps werden in die GLTF-Datei übernommen.<br />
Bildgrößenanpassung (Resize): Alle Texturen können automatisch auf die gewünschte Auflösung skaliert werden.<br />
Automatische Map-Generierung: Fehlende Maps (Normal, Roughness, Metallic, Occlusion, Alpha, ORM) können per Batch automatisch erzeugt werden.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Batch-Funktionen:</span><br />
Batch: Generiere Fehlende Maps – Automatische Erzeugung aller fehlenden Maps im Verzeichnis.<br />
Batch: Batch Speichern – Exportiert alle Materialien im Verzeichnis als GLTF inklusive Texturen.<br />
Zentraler GLTF-Export: Die Funktion gltf_exporter steuert den Export und die Texturzuordnung für alle relevanten Speicherpunkte.<br />
Fortschrittsbalken: Zeigt den Status bei längeren Batch-Operationen an.<br />
Kompatibilität: Exportierte GLTF-Dateien sind direkt für OpenSim und SecondLife verwendbar.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">UI-Komponenten</span><br />
Materialauswahl &amp; Parameter<br />
Materialname: Eingabefeld für den Namen des Materials.<br />
Material-Preset: Dropdown zur Auswahl vordefinierter Materialtypen.<br />
Texturauflösung: Dropdown zur Auswahl der Zielauflösung für alle Maps.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Textur-Slots (Drag &amp; Drop)</span><br />
Base Color (Albedo)<br />
Alpha-Map<br />
Occlusion-Map<br />
Roughness-Map<br />
Metallic-Map<br />
Normal-Map<br />
Emission-Map<br />
ORM-Map (Occlusion-Roughness-Metallic kombiniert)<br />
Checkboxen für Map-Typen<br />
Normal, ORM, Emission, Metallic, Roughness, Occlusion, Alpha<br />
Nur aktivierte Maps werden exportiert.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Batch-Funktionen</span><br />
Batch: Generiere Fehlende Maps<br />
Automatische Erzeugung aller fehlenden Maps im aktuellen Verzeichnis. Fortschrittsbalken wird angezeigt.<br />
Batch: Batch Speichern<br />
Exportiert alle Materialien im Verzeichnis als GLTF inklusive Texturen. Fortschrittsbalken wird angezeigt.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Fortschrittsbalken</span><br />
Zeigt den Status bei längeren Operationen (Batch-Generierung, Batch-Speichern).<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Bedienung &amp; Workflow</span><br />
Texturen per Drag &amp; Drop in die Slots ziehen.<br />
Materialparameter und Checkboxen nach Bedarf einstellen.<br />
Optional: Fehlende Maps automatisch generieren (Batch: Generiere Fehlende Maps).<br />
Material exportieren (Speichern oder Batch Speichern).<br />
GLTF-Dateien können direkt in OpenSim/SecondLife hochgeladen werden.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Hinweise &amp; Tipps</span><br />
Nur aktivierte Checkboxen werden exportiert: Über die Checkboxen kann gezielt gesteuert werden, welche Maps in die GLTF-Datei übernommen werden.<br />
Automatische Map-Generierung: Fehlende Maps werden nach Standardparametern erzeugt, können aber nachträglich angepasst werden.<br />
Batch-Funktionen: Ideal für die Verarbeitung ganzer Verzeichnisse mit vielen Materialien.<br />
Fortschrittsbalken: Gibt visuelles Feedback bei längeren Prozessen.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Systemvoraussetzungen</span><br />
Windows 7 oder neuer<br />
.NET 10 Desktop Runtime<br />
Keine Installation erforderlich, einfach ausführbar<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Installation</span><br />
Release herunterladen und entpacken.<br />
Die Datei PBR Material Maker.exe ausführen.<br />
<br />
Github Repository: <a href="https://github.com/ManfredAabye/PBR-Material-Maker" target="_blank" rel="noopener" class="mycode_url">https://github.com/ManfredAabye/PBR-Material-Maker</a><br />
<br />
<span style="font-weight: bold;" class="mycode_b">Nachtrag:</span><br />
Wichtig sind 2048 Texturen für das Terrain denn das sind ja nur wenige und es wertet die ganze Region auf.<br />
Bei Tile Texturen die aneinander gekachelt werden, kann die Größe auch unter 512 fallen da sieht man das nicht wirklich.<br />
Tip: Testen Testen Testen <img src="https://www.gridtalk.de/images/smilies/smile.gif" alt="Smile" title="Smile" class="smilie smilie_1" onclick="&#36;.markItUp({target:markitup_instance,replaceWith:''});&#36;.modal.close()" />]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[Onigiri]]></title>
			<link>https://www.gridtalk.de/showthread.php?tid=5313</link>
			<pubDate>Sat, 03 Jan 2026 22:20:54 +0100</pubDate>
			<dc:creator><![CDATA[<a href="https://www.gridtalk.de/member.php?action=profile&uid=998">Manfred Aabye</a>]]></dc:creator>
			<guid isPermaLink="false">https://www.gridtalk.de/showthread.php?tid=5313</guid>
			<description><![CDATA[<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Ich habe mich gerade über Onigiri hergemacht, um es an Blender 5.0.1 anzupassen.</span></span><br />
Github: <a href="https://github.com/ManfredAabye/Onigiri" target="_blank" rel="noopener" class="mycode_url">https://github.com/ManfredAabye/Onigiri</a><br />
<br />
<span style="font-size: xx-large;" class="mycode_size">Onigiri 4</span><br />
<br />
Rigging-Add-on für Blender 5.0.*, basierend auf <a href="https://github.com/nessaki/Onigiri" target="_blank" rel="noopener" class="mycode_url">Onigiri</a>.<br />
<br />
Lade die .zip-Datei aus dem Bereich „Releases“ herunter, um sie als Blender-Add-on zu installieren.<br />
<br />
Die .zip-Datei wird aus dem Code des GitHub-Repositorys erstellt und enthält nur das Onigiri-Verzeichnis.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Blender 5.0 Kompatibilität</span><br />
Dieses Add-on wurde für Blender 5.0 aktualisiert:<ul class="mycode_list"><li>Alle <span style="font-weight: bold;" class="mycode_b">PropertyGroup</span>- und <span style="font-weight: bold;" class="mycode_b">Operator</span>-Eigenschaftsdeklarationen wurden in das neue Zuweisung-mit-Typ-Format konvertiert.<br />
</li>
<li>Die Codebasis ist nun formal mit Blender 5.0 kompatibel.<br />
</li>
<li>Die Collada-Exportfunktion wurde entfernt/ersetzt; glTF wird nun empfohlen.<br />
</li>
</ul>
<span style="font-weight: bold;" class="mycode_b">Hinweis:</span> Für ältere Blender-Versionen (&lt;5.0) bitte weiterhin die vorherige Add-on-Version verwenden.<br />
<br />
<hr class="mycode_hr" />
<span style="font-weight: bold;" class="mycode_b">Onigiri Dokumentation</span><br />
Überblick<br />
Onigiri ist ein Rigging- und Konvertierungs-Add-on für Blender, das speziell für die Arbeit mit Avataren und Animationen für OpenSim und Second Life entwickelt wurde. Es unterstützt das Mapping, die Anpassung und den Export von Rigs und Meshes, insbesondere für glTF-Workflows.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Installation</span><br />
<ol type="1" class="mycode_list"><li>Lade das Onigiri-Add-on als ZIP-Datei herunter.<br />
</li>
<li>Öffne Blender und gehe zu <span style="font-style: italic;" class="mycode_i">Bearbeiten &gt; Einstellungen &gt; Add-ons &gt; Installieren</span>.<br />
</li>
<li>Wähle die ZIP-Datei aus und installiere das Add-on.<br />
</li>
<li>Aktiviere das Add-on in der Add-on-Liste.<br />
</li>
</ol>
<br />
<span style="font-weight: bold;" class="mycode_b">Hauptfunktionen</span><br />
<span style="font-weight: bold;" class="mycode_b">1. Charakter-Konverter</span><ul class="mycode_list"><li>Konvertiert Avatare und Rigs zu OpenSim-/Second-Life-kompatiblen Skeletten.<br />
</li>
<li>Unterstützt Mixamo, DAZ, Avastar und andere gängige Rigs.<br />
</li>
<li>Automatisches und manuelles Bone-Mapping.<br />
</li>
</ul>
<br />
<span style="font-weight: bold;" class="mycode_b">2. Mapper</span><ul class="mycode_list"><li>Detailliertes Mapping-Werkzeug für Bones zwischen Quell- und Ziel-Rigs.<br />
</li>
<li>Unterstützt Reskinning, Bone-Umbenennung und Hierarchieanpassung.<br />
</li>
<li>Visualisierung des Bone-Mappings in der 3D-Ansicht.<br />
</li>
</ul>
<br />
<span style="font-weight: bold;" class="mycode_b">3. Sliders &amp; Shape-Werkzeuge</span><ul class="mycode_list"><li>Passe Körperformen und Proportionen mit Schiebereglern an.<br />
</li>
<li>Speichere und lade Shape-Voreinstellungen.<br />
</li>
</ul>
<br />
<span style="font-weight: bold;" class="mycode_b">4. Export</span><ul class="mycode_list"><li>Exportiere Modelle und Rigs als glTF 2.0 für OpenSim/Second Life.<br />
</li>
<li>Unterstützung für Animationen und Materialien.<br />
</li>
</ul>
<br />
<span style="font-weight: bold;" class="mycode_b">Typische Workflows</span><br />
<span style="font-weight: bold;" class="mycode_b">Mixamo-Avatar für OpenSim/SL vorbereiten</span><br />
<ol type="1" class="mycode_list"><li>Importiere das Mixamo-Modell (FBX).<br />
</li>
<li>Öffne das Onigiri-Panel und starte den Charakter-Konverter.<br />
</li>
<li>Mappe die Bones auf das OpenSim/SL-Rig.<br />
</li>
<li>Überprüfe und optimiere die Gewichte.<br />
</li>
<li>Exportiere als glTF.<br />
</li>
</ol>
<br />
<span style="font-weight: bold;" class="mycode_b">DAZ/Avastar-Avatar konvertieren</span><br />
<ol type="1" class="mycode_list"><li>Importiere das DAZ/Avastar-Modell.<br />
</li>
<li>Verwende den Charakter-Konverter und Mapper.<br />
</li>
<li>Passe Bone-Namen und -Hierarchie an.<br />
</li>
<li>Exportiere als glTF.<br />
</li>
</ol>
<br />
<span style="font-weight: bold;" class="mycode_b">Tipps &amp; Hinweise</span><ul class="mycode_list"><li>Speichere Blender-Dateien regelmäßig als Backup.<br />
</li>
<li>Teste Modelle nach dem Hochladen in einer Test-Region.<br />
</li>
<li>Verwende Onigiri-Werkzeuge für Shape- und Gewichtsoptimierung.<br />
</li>
<li>Bei Problemen: siehe README, CHANGELOG oder dieses Handbuch.<br />
</li>
</ul>
<br />
<span style="font-weight: bold;" class="mycode_b">Support &amp; Community</span><ul class="mycode_list"><li>GitHub: <a href="https://github.com/nessaki/Onigiri" target="_blank" rel="noopener" class="mycode_url">https://github.com/nessaki/Onigiri</a><br />
</li>
<li>Offizielle Dokumentation (Englisch): <a href="https://github.com/nessaki/Onigiri/wiki" target="_blank" rel="noopener" class="mycode_url">https://github.com/nessaki/Onigiri/wiki</a><br />
</li>
<li>Für Fragen und Hilfe: siehe README oder erstelle ein GitHub-Issue.<br />
</li>
</ul>
<br />
<hr class="mycode_hr" />
<span style="font-weight: bold;" class="mycode_b">Anleitung: Export eines Mixamo-Avatars als glTF für OpenSim/Second Life</span><br />
Diese Anleitung erklärt, wie man ein Mixamo-gerigtes Avatarmodell in Blender importiert, für OpenSim/Second Life vorbereitet und als glTF exportiert.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Voraussetzungen</span><ul class="mycode_list"><li>Blender 5.0 oder neuer<br />
</li>
<li>Onigiri-Add-on installiert und aktiviert<br />
</li>
<li>Mixamo-Avatar als FBX-Datei<br />
</li>
</ul>
<br />
<span style="font-weight: bold;" class="mycode_b">Schritt 1: Mixamo-Avatar importieren</span><br />
<ol type="1" class="mycode_list"><li>Starte Blender und öffne eine neue Szene.<br />
</li>
<li>Gehe zu <span style="font-style: italic;" class="mycode_i">Datei &gt; Importieren &gt; FBX (.fbx)</span>.<br />
</li>
<li>Wähle deine Mixamo-Avatar-FBX-Datei aus und importiere sie.<br />
</li>
<li>Überprüfe, ob Modell und Rig korrekt angezeigt werden.<br />
</li>
</ol>
<br />
<span style="font-weight: bold;" class="mycode_b">Schritt 2: Rig für OpenSim/Second Life vorbereiten</span><br />
<ol type="1" class="mycode_list"><li>Wähle das importierte Armature-Objekt aus.<br />
</li>
<li>Öffne das Onigiri-Panel (normalerweise in den Eigenschaften oder auf der rechten Seite der 3D-Ansicht).<br />
</li>
<li>Wähle im Onigiri-Panel die Funktion, um auf ein OpenSim/Second-Life-kompatibles Rig zu konvertieren oder zu mappen:<br />
   <ul class="mycode_list"><li>Verwende die „Charakter-Konverter“- oder „Mapper“-Funktion bei Bedarf.<br />
</li>
<li>Wähle „Second Life / OpenSim“ als Zielplattform.<br />
</li>
<li>Folge den Anweisungen des Add-ons, um die Bones korrekt zuzuordnen.<br />
    </li>
</ul>
</li>
<li>Überprüfe Bone-Namen und -Hierarchie. Passe sie bei Bedarf an OpenSim/SL-Standards an (z.B. „mPelvis“, „mTorso“, „mHead“, etc.).<br />
</li>
<li>Optional: Verwende Onigiri-Werkzeuge, um Vertexgruppen, Gewichte und Posen zu optimieren.<br />
</li>
</ol>
<br />
<span style="font-weight: bold;" class="mycode_b">Schritt 3: Modell bereinigen und testen</span><br />
<ol type="1" class="mycode_list"><li>Entferne unnötige Meshes, Bones oder Hilfsobjekte.<br />
</li>
<li>Überprüfe Skinning-Gewichte und Animationen (falls vorhanden).<br />
</li>
<li>Stelle sicher, dass sich das Modell in T-Pose oder A-Pose befindet (abhängig von der Zielplattform).<br />
</li>
</ol>
<br />
<span style="font-weight: bold;" class="mycode_b">Schritt 4: Als glTF exportieren</span><br />
<ol type="1" class="mycode_list"><li>Wähle das Armature-Objekt und das Mesh aus.<br />
</li>
<li>Gehe zu <span style="font-style: italic;" class="mycode_i">Datei &gt; Exportieren &gt; glTF 2.0 (.glb/.gltf)</span>.<br />
</li>
<li>Wähle die Option <span style="font-style: italic;" class="mycode_i">Ausgewählte Objekte</span>.<br />
</li>
<li>Stelle sicher, dass „Animationen“ aktiviert ist, wenn du Animationen exportieren möchtest.<br />
</li>
<li>Wähle einen Speicherort und exportiere die Datei.<br />
</li>
</ol>
<br />
<span style="font-weight: bold;" class="mycode_b">Schritt 5: In OpenSim/Second Life importieren</span><br />
<ol type="1" class="mycode_list"><li>Verwende einen Viewer oder ein Import-Tool, das glTF unterstützt (z.B. DreamGrid, OpenSim-Distributionen mit glTF-Unterstützung).<br />
</li>
<li>Lade das glTF-Modell hoch und überprüfe Rigging und Animationen.<br />
</li>
<li>Passe Materialien und Texturen bei Bedarf an.<br />
</li>
</ol>
<br />
<span style="font-weight: bold;" class="mycode_b">Tipps &amp; Hinweise</span><ul class="mycode_list"><li>Mixamo-Rigs müssen oft manuell auf die OpenSim/SL-Bone-Struktur gemappt werden.<br />
</li>
<li>Onigiri bietet Werkzeuge für automatisches und manuelles Mapping.<br />
</li>
<li>Teste das Modell nach dem Hochladen in einer Testregion.<br />
</li>
<li>Für komplexe Avatare wird empfohlen, zwischendurch als Blender-Datei zu speichern.<br />
</li>
</ul>
<br />
<hr class="mycode_hr" />
Fragen oder Probleme? Siehe README, CHANGELOG oder die Onigiri-Dokumentation für weitere Informationen.]]></description>
			<content:encoded><![CDATA[<span style="font-size: large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Ich habe mich gerade über Onigiri hergemacht, um es an Blender 5.0.1 anzupassen.</span></span><br />
Github: <a href="https://github.com/ManfredAabye/Onigiri" target="_blank" rel="noopener" class="mycode_url">https://github.com/ManfredAabye/Onigiri</a><br />
<br />
<span style="font-size: xx-large;" class="mycode_size">Onigiri 4</span><br />
<br />
Rigging-Add-on für Blender 5.0.*, basierend auf <a href="https://github.com/nessaki/Onigiri" target="_blank" rel="noopener" class="mycode_url">Onigiri</a>.<br />
<br />
Lade die .zip-Datei aus dem Bereich „Releases“ herunter, um sie als Blender-Add-on zu installieren.<br />
<br />
Die .zip-Datei wird aus dem Code des GitHub-Repositorys erstellt und enthält nur das Onigiri-Verzeichnis.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Blender 5.0 Kompatibilität</span><br />
Dieses Add-on wurde für Blender 5.0 aktualisiert:<ul class="mycode_list"><li>Alle <span style="font-weight: bold;" class="mycode_b">PropertyGroup</span>- und <span style="font-weight: bold;" class="mycode_b">Operator</span>-Eigenschaftsdeklarationen wurden in das neue Zuweisung-mit-Typ-Format konvertiert.<br />
</li>
<li>Die Codebasis ist nun formal mit Blender 5.0 kompatibel.<br />
</li>
<li>Die Collada-Exportfunktion wurde entfernt/ersetzt; glTF wird nun empfohlen.<br />
</li>
</ul>
<span style="font-weight: bold;" class="mycode_b">Hinweis:</span> Für ältere Blender-Versionen (&lt;5.0) bitte weiterhin die vorherige Add-on-Version verwenden.<br />
<br />
<hr class="mycode_hr" />
<span style="font-weight: bold;" class="mycode_b">Onigiri Dokumentation</span><br />
Überblick<br />
Onigiri ist ein Rigging- und Konvertierungs-Add-on für Blender, das speziell für die Arbeit mit Avataren und Animationen für OpenSim und Second Life entwickelt wurde. Es unterstützt das Mapping, die Anpassung und den Export von Rigs und Meshes, insbesondere für glTF-Workflows.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Installation</span><br />
<ol type="1" class="mycode_list"><li>Lade das Onigiri-Add-on als ZIP-Datei herunter.<br />
</li>
<li>Öffne Blender und gehe zu <span style="font-style: italic;" class="mycode_i">Bearbeiten &gt; Einstellungen &gt; Add-ons &gt; Installieren</span>.<br />
</li>
<li>Wähle die ZIP-Datei aus und installiere das Add-on.<br />
</li>
<li>Aktiviere das Add-on in der Add-on-Liste.<br />
</li>
</ol>
<br />
<span style="font-weight: bold;" class="mycode_b">Hauptfunktionen</span><br />
<span style="font-weight: bold;" class="mycode_b">1. Charakter-Konverter</span><ul class="mycode_list"><li>Konvertiert Avatare und Rigs zu OpenSim-/Second-Life-kompatiblen Skeletten.<br />
</li>
<li>Unterstützt Mixamo, DAZ, Avastar und andere gängige Rigs.<br />
</li>
<li>Automatisches und manuelles Bone-Mapping.<br />
</li>
</ul>
<br />
<span style="font-weight: bold;" class="mycode_b">2. Mapper</span><ul class="mycode_list"><li>Detailliertes Mapping-Werkzeug für Bones zwischen Quell- und Ziel-Rigs.<br />
</li>
<li>Unterstützt Reskinning, Bone-Umbenennung und Hierarchieanpassung.<br />
</li>
<li>Visualisierung des Bone-Mappings in der 3D-Ansicht.<br />
</li>
</ul>
<br />
<span style="font-weight: bold;" class="mycode_b">3. Sliders &amp; Shape-Werkzeuge</span><ul class="mycode_list"><li>Passe Körperformen und Proportionen mit Schiebereglern an.<br />
</li>
<li>Speichere und lade Shape-Voreinstellungen.<br />
</li>
</ul>
<br />
<span style="font-weight: bold;" class="mycode_b">4. Export</span><ul class="mycode_list"><li>Exportiere Modelle und Rigs als glTF 2.0 für OpenSim/Second Life.<br />
</li>
<li>Unterstützung für Animationen und Materialien.<br />
</li>
</ul>
<br />
<span style="font-weight: bold;" class="mycode_b">Typische Workflows</span><br />
<span style="font-weight: bold;" class="mycode_b">Mixamo-Avatar für OpenSim/SL vorbereiten</span><br />
<ol type="1" class="mycode_list"><li>Importiere das Mixamo-Modell (FBX).<br />
</li>
<li>Öffne das Onigiri-Panel und starte den Charakter-Konverter.<br />
</li>
<li>Mappe die Bones auf das OpenSim/SL-Rig.<br />
</li>
<li>Überprüfe und optimiere die Gewichte.<br />
</li>
<li>Exportiere als glTF.<br />
</li>
</ol>
<br />
<span style="font-weight: bold;" class="mycode_b">DAZ/Avastar-Avatar konvertieren</span><br />
<ol type="1" class="mycode_list"><li>Importiere das DAZ/Avastar-Modell.<br />
</li>
<li>Verwende den Charakter-Konverter und Mapper.<br />
</li>
<li>Passe Bone-Namen und -Hierarchie an.<br />
</li>
<li>Exportiere als glTF.<br />
</li>
</ol>
<br />
<span style="font-weight: bold;" class="mycode_b">Tipps &amp; Hinweise</span><ul class="mycode_list"><li>Speichere Blender-Dateien regelmäßig als Backup.<br />
</li>
<li>Teste Modelle nach dem Hochladen in einer Test-Region.<br />
</li>
<li>Verwende Onigiri-Werkzeuge für Shape- und Gewichtsoptimierung.<br />
</li>
<li>Bei Problemen: siehe README, CHANGELOG oder dieses Handbuch.<br />
</li>
</ul>
<br />
<span style="font-weight: bold;" class="mycode_b">Support &amp; Community</span><ul class="mycode_list"><li>GitHub: <a href="https://github.com/nessaki/Onigiri" target="_blank" rel="noopener" class="mycode_url">https://github.com/nessaki/Onigiri</a><br />
</li>
<li>Offizielle Dokumentation (Englisch): <a href="https://github.com/nessaki/Onigiri/wiki" target="_blank" rel="noopener" class="mycode_url">https://github.com/nessaki/Onigiri/wiki</a><br />
</li>
<li>Für Fragen und Hilfe: siehe README oder erstelle ein GitHub-Issue.<br />
</li>
</ul>
<br />
<hr class="mycode_hr" />
<span style="font-weight: bold;" class="mycode_b">Anleitung: Export eines Mixamo-Avatars als glTF für OpenSim/Second Life</span><br />
Diese Anleitung erklärt, wie man ein Mixamo-gerigtes Avatarmodell in Blender importiert, für OpenSim/Second Life vorbereitet und als glTF exportiert.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Voraussetzungen</span><ul class="mycode_list"><li>Blender 5.0 oder neuer<br />
</li>
<li>Onigiri-Add-on installiert und aktiviert<br />
</li>
<li>Mixamo-Avatar als FBX-Datei<br />
</li>
</ul>
<br />
<span style="font-weight: bold;" class="mycode_b">Schritt 1: Mixamo-Avatar importieren</span><br />
<ol type="1" class="mycode_list"><li>Starte Blender und öffne eine neue Szene.<br />
</li>
<li>Gehe zu <span style="font-style: italic;" class="mycode_i">Datei &gt; Importieren &gt; FBX (.fbx)</span>.<br />
</li>
<li>Wähle deine Mixamo-Avatar-FBX-Datei aus und importiere sie.<br />
</li>
<li>Überprüfe, ob Modell und Rig korrekt angezeigt werden.<br />
</li>
</ol>
<br />
<span style="font-weight: bold;" class="mycode_b">Schritt 2: Rig für OpenSim/Second Life vorbereiten</span><br />
<ol type="1" class="mycode_list"><li>Wähle das importierte Armature-Objekt aus.<br />
</li>
<li>Öffne das Onigiri-Panel (normalerweise in den Eigenschaften oder auf der rechten Seite der 3D-Ansicht).<br />
</li>
<li>Wähle im Onigiri-Panel die Funktion, um auf ein OpenSim/Second-Life-kompatibles Rig zu konvertieren oder zu mappen:<br />
   <ul class="mycode_list"><li>Verwende die „Charakter-Konverter“- oder „Mapper“-Funktion bei Bedarf.<br />
</li>
<li>Wähle „Second Life / OpenSim“ als Zielplattform.<br />
</li>
<li>Folge den Anweisungen des Add-ons, um die Bones korrekt zuzuordnen.<br />
    </li>
</ul>
</li>
<li>Überprüfe Bone-Namen und -Hierarchie. Passe sie bei Bedarf an OpenSim/SL-Standards an (z.B. „mPelvis“, „mTorso“, „mHead“, etc.).<br />
</li>
<li>Optional: Verwende Onigiri-Werkzeuge, um Vertexgruppen, Gewichte und Posen zu optimieren.<br />
</li>
</ol>
<br />
<span style="font-weight: bold;" class="mycode_b">Schritt 3: Modell bereinigen und testen</span><br />
<ol type="1" class="mycode_list"><li>Entferne unnötige Meshes, Bones oder Hilfsobjekte.<br />
</li>
<li>Überprüfe Skinning-Gewichte und Animationen (falls vorhanden).<br />
</li>
<li>Stelle sicher, dass sich das Modell in T-Pose oder A-Pose befindet (abhängig von der Zielplattform).<br />
</li>
</ol>
<br />
<span style="font-weight: bold;" class="mycode_b">Schritt 4: Als glTF exportieren</span><br />
<ol type="1" class="mycode_list"><li>Wähle das Armature-Objekt und das Mesh aus.<br />
</li>
<li>Gehe zu <span style="font-style: italic;" class="mycode_i">Datei &gt; Exportieren &gt; glTF 2.0 (.glb/.gltf)</span>.<br />
</li>
<li>Wähle die Option <span style="font-style: italic;" class="mycode_i">Ausgewählte Objekte</span>.<br />
</li>
<li>Stelle sicher, dass „Animationen“ aktiviert ist, wenn du Animationen exportieren möchtest.<br />
</li>
<li>Wähle einen Speicherort und exportiere die Datei.<br />
</li>
</ol>
<br />
<span style="font-weight: bold;" class="mycode_b">Schritt 5: In OpenSim/Second Life importieren</span><br />
<ol type="1" class="mycode_list"><li>Verwende einen Viewer oder ein Import-Tool, das glTF unterstützt (z.B. DreamGrid, OpenSim-Distributionen mit glTF-Unterstützung).<br />
</li>
<li>Lade das glTF-Modell hoch und überprüfe Rigging und Animationen.<br />
</li>
<li>Passe Materialien und Texturen bei Bedarf an.<br />
</li>
</ol>
<br />
<span style="font-weight: bold;" class="mycode_b">Tipps &amp; Hinweise</span><ul class="mycode_list"><li>Mixamo-Rigs müssen oft manuell auf die OpenSim/SL-Bone-Struktur gemappt werden.<br />
</li>
<li>Onigiri bietet Werkzeuge für automatisches und manuelles Mapping.<br />
</li>
<li>Teste das Modell nach dem Hochladen in einer Testregion.<br />
</li>
<li>Für komplexe Avatare wird empfohlen, zwischendurch als Blender-Datei zu speichern.<br />
</li>
</ul>
<br />
<hr class="mycode_hr" />
Fragen oder Probleme? Siehe README, CHANGELOG oder die Onigiri-Dokumentation für weitere Informationen.]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[PaintNet 5.x Megafilter Plugin]]></title>
			<link>https://www.gridtalk.de/showthread.php?tid=5293</link>
			<pubDate>Fri, 26 Dec 2025 08:43:22 +0100</pubDate>
			<dc:creator><![CDATA[<a href="https://www.gridtalk.de/member.php?action=profile&uid=998">Manfred Aabye</a>]]></dc:creator>
			<guid isPermaLink="false">https://www.gridtalk.de/showthread.php?tid=5293</guid>
			<description><![CDATA[<span style="font-size: xx-large;" class="mycode_size">PaintNet 5.x Megafilter Plugin</span><br />
<br />
<img src="https://raw.githubusercontent.com/ManfredAabye/PaintNet5-Megafilter-Plugin/refs/heads/main/PaintNet-Megafilter2.png" loading="lazy"  alt="[Bild: PaintNet-Megafilter2.png]" class="mycode_img" /><br />
<br />
<span style="font-weight: bold;" class="mycode_b">Echtzeit Regelung, ohne dutzende Filter zu öffnen.</span><br />
<br />
Basis-Anpassungen (8 Filter)<br />
<br />
    Helligkeit ✅ - Helligkeit anpassen (-100 bis +100)<br />
    Kontrast ✅ - Kontrast verstärken/reduzieren (-100 bis +100)<br />
    Sättigung ✅ - Farbsättigung anpassen (-100 bis +100)<br />
    Weichzeichner ✅ - Gaußscher Weichzeichner (Radius 0-100)<br />
    Schärfen ✅ - Schärfen-Filter (0-100)<br />
    Farbton verschieben ✅ - Hue-Rotation (-180° bis +180°)<br />
    Vignette ✅ - Randabdunklung (Strength + Radius 0.0-1.0)<br />
    Sepia ✅ - Sepia-Ton-Effekt (Intensity 0-100)<br />
<br />
Farbfilter (4 Filter)<br />
<br />
    Graustufen ✅ - Schwarzweiß (3 Methoden: Average, Luminosity, Desaturation)<br />
    Invertieren ✅ - Farben umkehren (Intensity 0-100%)<br />
    Farbtemperatur ✅ - Warm/Kalt + Tint-Anpassung (-100 bis +100)<br />
    Kanalmixer ✅ - RGB-Kanäle einzeln anpassen (-100 bis +100)<br />
<br />
Schärfe &amp; Weichzeichner (3 Filter)<br />
<br />
    Bewegungsunschärfe ✅ - Motion Blur (Angle 0-360°, Distance 0-100px)<br />
    Kantenerkennung ✅ - Edge Detection mit Sobel-Operator (Threshold 0-255)<br />
    Unscharf maskieren ✅ - Professionelles Schärfen (Amount 0-500%, Radius 1-10, Threshold 0-255)<br />
<br />
Stilisierung (4 Filter)<br />
<br />
    Posterisieren ✅ - Farbreduktion (2-256 Stufen)<br />
    Verpixeln ✅ - Pixelate-Effekt (Block Size 2-50px)<br />
    Prägen ✅ - 3D-Relief-Effekt (Angle 0-360°, Depth 0-100)<br />
    Ölgemälde ✅ - Künstlerischer Look (Brush Size 1-20, Intensity 0-100)<br />
<br />
Tonwert-Korrekturen (4 Filter)<br />
<br />
    Belichtung ✅ - EV-Stops (-3 bis +3)<br />
    Schatten/Lichter ✅ - Dynamikbereich optimieren (je -100 bis +100)<br />
    Gamma ✅ - Gamma-Korrektur (0.1-3.0)<br />
    Tonwertkorrektur ✅ - Levels mit Black/White/Mid-Point<br />
<br />
Spezialeffekte (4 Filter)<br />
<br />
    Glühen ✅ - Bloom/Glow-Effekt (Intensity 0-100, Radius 0-50)<br />
    Rauschen ✅ - 3 Rausch-Typen (Gaussian, Uniform, Salt&amp;Pepper)<br />
    Chromatische Aberration ✅ - Farbversatz-Linseneffekt (Strength 0-10)<br />
    Linsenverzerrung ✅ - Barrel/Pincushion Distortion (-100 bis +100)<br />
<br />
<br />
Download: <a href="https://github.com/ManfredAabye/PaintNet5-Megafilter-Plugin/releases" target="_blank" rel="noopener" class="mycode_url">https://github.com/ManfredAabye/PaintNet...n/releases</a><br />
Sourcecode: <a href="https://github.com/ManfredAabye/PaintNet5-Megafilter-Plugin" target="_blank" rel="noopener" class="mycode_url">https://github.com/ManfredAabye/PaintNet...ter-Plugin</a>]]></description>
			<content:encoded><![CDATA[<span style="font-size: xx-large;" class="mycode_size">PaintNet 5.x Megafilter Plugin</span><br />
<br />
<img src="https://raw.githubusercontent.com/ManfredAabye/PaintNet5-Megafilter-Plugin/refs/heads/main/PaintNet-Megafilter2.png" loading="lazy"  alt="[Bild: PaintNet-Megafilter2.png]" class="mycode_img" /><br />
<br />
<span style="font-weight: bold;" class="mycode_b">Echtzeit Regelung, ohne dutzende Filter zu öffnen.</span><br />
<br />
Basis-Anpassungen (8 Filter)<br />
<br />
    Helligkeit ✅ - Helligkeit anpassen (-100 bis +100)<br />
    Kontrast ✅ - Kontrast verstärken/reduzieren (-100 bis +100)<br />
    Sättigung ✅ - Farbsättigung anpassen (-100 bis +100)<br />
    Weichzeichner ✅ - Gaußscher Weichzeichner (Radius 0-100)<br />
    Schärfen ✅ - Schärfen-Filter (0-100)<br />
    Farbton verschieben ✅ - Hue-Rotation (-180° bis +180°)<br />
    Vignette ✅ - Randabdunklung (Strength + Radius 0.0-1.0)<br />
    Sepia ✅ - Sepia-Ton-Effekt (Intensity 0-100)<br />
<br />
Farbfilter (4 Filter)<br />
<br />
    Graustufen ✅ - Schwarzweiß (3 Methoden: Average, Luminosity, Desaturation)<br />
    Invertieren ✅ - Farben umkehren (Intensity 0-100%)<br />
    Farbtemperatur ✅ - Warm/Kalt + Tint-Anpassung (-100 bis +100)<br />
    Kanalmixer ✅ - RGB-Kanäle einzeln anpassen (-100 bis +100)<br />
<br />
Schärfe &amp; Weichzeichner (3 Filter)<br />
<br />
    Bewegungsunschärfe ✅ - Motion Blur (Angle 0-360°, Distance 0-100px)<br />
    Kantenerkennung ✅ - Edge Detection mit Sobel-Operator (Threshold 0-255)<br />
    Unscharf maskieren ✅ - Professionelles Schärfen (Amount 0-500%, Radius 1-10, Threshold 0-255)<br />
<br />
Stilisierung (4 Filter)<br />
<br />
    Posterisieren ✅ - Farbreduktion (2-256 Stufen)<br />
    Verpixeln ✅ - Pixelate-Effekt (Block Size 2-50px)<br />
    Prägen ✅ - 3D-Relief-Effekt (Angle 0-360°, Depth 0-100)<br />
    Ölgemälde ✅ - Künstlerischer Look (Brush Size 1-20, Intensity 0-100)<br />
<br />
Tonwert-Korrekturen (4 Filter)<br />
<br />
    Belichtung ✅ - EV-Stops (-3 bis +3)<br />
    Schatten/Lichter ✅ - Dynamikbereich optimieren (je -100 bis +100)<br />
    Gamma ✅ - Gamma-Korrektur (0.1-3.0)<br />
    Tonwertkorrektur ✅ - Levels mit Black/White/Mid-Point<br />
<br />
Spezialeffekte (4 Filter)<br />
<br />
    Glühen ✅ - Bloom/Glow-Effekt (Intensity 0-100, Radius 0-50)<br />
    Rauschen ✅ - 3 Rausch-Typen (Gaussian, Uniform, Salt&amp;Pepper)<br />
    Chromatische Aberration ✅ - Farbversatz-Linseneffekt (Strength 0-10)<br />
    Linsenverzerrung ✅ - Barrel/Pincushion Distortion (-100 bis +100)<br />
<br />
<br />
Download: <a href="https://github.com/ManfredAabye/PaintNet5-Megafilter-Plugin/releases" target="_blank" rel="noopener" class="mycode_url">https://github.com/ManfredAabye/PaintNet...n/releases</a><br />
Sourcecode: <a href="https://github.com/ManfredAabye/PaintNet5-Megafilter-Plugin" target="_blank" rel="noopener" class="mycode_url">https://github.com/ManfredAabye/PaintNet...ter-Plugin</a>]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[PaintNET Plugin ORM Maps]]></title>
			<link>https://www.gridtalk.de/showthread.php?tid=5277</link>
			<pubDate>Wed, 17 Dec 2025 00:15:31 +0100</pubDate>
			<dc:creator><![CDATA[<a href="https://www.gridtalk.de/member.php?action=profile&uid=998">Manfred Aabye</a>]]></dc:creator>
			<guid isPermaLink="false">https://www.gridtalk.de/showthread.php?tid=5277</guid>
			<description><![CDATA[<span style="font-size: xx-large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">PaintNET 5.1.x Plugin´s</span></span><br />
PaintNET Plugin’s - ORM-Emissive, ORM-Normalmap und ORM-Generator für OpenSim und Second Life.<br />
<br />
Die DLL liegt bereit in Release\net9.0-windows\ORMGenerator.dll. Kopiere sie nach C:\Program Files\paint.net\Effects<br />
Starte Paint.Net<br />
Lade oder generiere ein Bild.<br />
In PaintNet: <br />
ORM -&gt; ORM MAP Generator<br />
ORM -&gt; ORM-Emissive<br />
ORM -&gt; ORM-Normalmap<br />
<br />
<!-- start: postbit_attachments_attachment -->
<br /><!-- start: attachment_icon -->
<img src="https://www.gridtalk.de/images/attachtypes/image.gif" title="PNG Image" border="0" alt=".png" />
<!-- end: attachment_icon -->&nbsp;&nbsp;<a href="attachment.php?aid=11399" target="_blank" title="">PaintnetORM2.png</a> (Größe: 220,76 KB / Downloads: 70)
<!-- end: postbit_attachments_attachment --><br />
<br />
<span style="font-weight: bold;" class="mycode_b">Upgrade: Version 1.0.3</span> Echtzeit Bearbeitung und Position verändert, jetzt im eigenen ORM Verzeichnis.<br />
<br />
<a href="https://github.com/ManfredAabye/PaintNET-Plugin-ORM-Maps/releases" target="_blank" rel="noopener" class="mycode_url">Erste Release auf Github:</a> <a href="https://github.com/ManfredAabye/PaintNET-Plugin-ORM-Maps/releases" target="_blank" rel="noopener" class="mycode_url">https://github.com/ManfredAabye/PaintNET...s/releases</a>]]></description>
			<content:encoded><![CDATA[<span style="font-size: xx-large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">PaintNET 5.1.x Plugin´s</span></span><br />
PaintNET Plugin’s - ORM-Emissive, ORM-Normalmap und ORM-Generator für OpenSim und Second Life.<br />
<br />
Die DLL liegt bereit in Release\net9.0-windows\ORMGenerator.dll. Kopiere sie nach C:\Program Files\paint.net\Effects<br />
Starte Paint.Net<br />
Lade oder generiere ein Bild.<br />
In PaintNet: <br />
ORM -&gt; ORM MAP Generator<br />
ORM -&gt; ORM-Emissive<br />
ORM -&gt; ORM-Normalmap<br />
<br />
<!-- start: postbit_attachments_attachment -->
<br /><!-- start: attachment_icon -->
<img src="https://www.gridtalk.de/images/attachtypes/image.gif" title="PNG Image" border="0" alt=".png" />
<!-- end: attachment_icon -->&nbsp;&nbsp;<a href="attachment.php?aid=11399" target="_blank" title="">PaintnetORM2.png</a> (Größe: 220,76 KB / Downloads: 70)
<!-- end: postbit_attachments_attachment --><br />
<br />
<span style="font-weight: bold;" class="mycode_b">Upgrade: Version 1.0.3</span> Echtzeit Bearbeitung und Position verändert, jetzt im eigenen ORM Verzeichnis.<br />
<br />
<a href="https://github.com/ManfredAabye/PaintNET-Plugin-ORM-Maps/releases" target="_blank" rel="noopener" class="mycode_url">Erste Release auf Github:</a> <a href="https://github.com/ManfredAabye/PaintNET-Plugin-ORM-Maps/releases" target="_blank" rel="noopener" class="mycode_url">https://github.com/ManfredAabye/PaintNET...s/releases</a>]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[ERP-System-Integration]]></title>
			<link>https://www.gridtalk.de/showthread.php?tid=5181</link>
			<pubDate>Sun, 12 Oct 2025 16:28:41 +0200</pubDate>
			<dc:creator><![CDATA[<a href="https://www.gridtalk.de/member.php?action=profile&uid=998">Manfred Aabye</a>]]></dc:creator>
			<guid isPermaLink="false">https://www.gridtalk.de/showthread.php?tid=5181</guid>
			<description><![CDATA[<span style="font-size: x-large;" class="mycode_size"># Machbarkeitsstudie: OpenSimulator ERP-System-Integration für Virtuelle Welten</span><br />
<br />
## ? Executive Summary<br />
<br />
### Zielsetzung<br />
Entwicklung einer ERP-Integration für virtuelle Wirtschaftssysteme am Beispiel des C# MoneyServers mit ERPNext/Odoo zur Erschließung neuer digitaler Märkte.<br />
<br />
## ? Marktanalyse und Potenzial<br />
<br />
### Virtuelle Wirtschaft im Überblick<br />
```<br />
Marktvolumen virtueller Wirtschaften (2024):<br />
├── Second Life Economy: ~500 Mio. USD/Jahr<br />
├── Roblox Developer Exchange: ~600 Mio. USD/Jahr  <br />
├── Fortnite Creative Economy: ~300 Mio. USD/Jahr<br />
├── Decentraland/Web3: ~200 Mio. USD/Jahr<br />
└── Asiatische Metaverse-Plattformen: ~1 Mrd. USD/Jahr<br />
```<br />
<br />
### Zielgruppen<br />
```python<br />
target_groups = {<br />
    "Unternehmen": [<br />
        "Virtuelle Retailer (Nike, Gucci)",<br />
        "Event-Veranstalter in Metaverse",<br />
        "Immobilienentwickler digitale Grundstücke",<br />
        "Bildungsanbieter mit VR-Training"<br />
    ],<br />
    "Inhalteersteller": [<br />
        "3D-Designer und Entwickler",<br />
        "Virtual Fashion Brands", <br />
        "NFT-Künstler und Galerien",<br />
        "Metaverse Architekten"<br />
    ],<br />
    "Service Provider": [<br />
        "VR-Beratungsunternehmen",<br />
        "Transaktionsdienstleister",<br />
        "Steuerberater für digitale Wirtschaft"<br />
    ]<br />
}<br />
```<br />
<br />
## ? Technische Machbarkeit<br />
<br />
### 1. Systemarchitektur<br />
```mermaid<br />
graph TB<br />
    A[ERPNext/Odoo] --&gt; B[Integration Layer]<br />
    B --&gt; C[C# MoneyServer]<br />
    C --&gt; D[Virtuelle Welt]<br />
    B --&gt; E[Blockchain Connector]<br />
    B --&gt; F[Payment Gateway]<br />
    E --&gt; G[NFT Marketplace]<br />
    F --&gt; H[Fiat Währung]<br />
```<br />
<br />
### 2. API-Integration<br />
```python<br />
class TechnicalFeasibility:<br />
    def api_compatibility_check(self):<br />
        return {<br />
            "csharp_money_server": {<br />
                "rest_api": "✅ Vollständig",<br />
                "authentication": "✅ OAuth2/JWT",<br />
                "data_formats": "✅ JSON/XML",<br />
                "rate_limiting": "✅ Konfigurierbar"<br />
            },<br />
            "erpnext_integration": {<br />
                "custom_doctypes": "✅ Möglich",<br />
                "webhooks": "✅ Verfügbar", <br />
                "real_time_sync": "✅ WebSockets",<br />
                "batch_processing": "✅ Scheduled Jobs"<br />
            },<br />
            "odoo_integration": {<br />
                "custom_modules": "✅ Standard",<br />
                "orm_integration": "✅ Native",<br />
                "qweb_reports": "✅ Templates",<br />
                "security_model": "✅ Erweiterbar"<br />
            }<br />
        }<br />
```<br />
<br />
### 3. Datenmodell-Erweiterungen<br />
```python<br />
# ERPNext Doctype Erweiterungen<br />
required_doctypes = [<br />
    "Virtual Currency Account",<br />
    "Digital Asset Inventory", <br />
    "Metaverse Transaction",<br />
    "NFT Asset Management",<br />
    "Cross-Reality Customer",<br />
    "Virtual Event Management"<br />
]<br />
<br />
# Odoo Model Erweiterungen<br />
odoo_models = [<br />
    "opensim.currency.account",<br />
    "metaverse.transaction",<br />
    "digital.asset.tracking",<br />
    "virtual.inventory",<br />
    "avatar.customer.profile"<br />
]<br />
```<br />
<br />
## ? Wirtschaftliche Machbarkeit<br />
<br />
### Investitionskosten<br />
```python<br />
development_costs = {<br />
    "phase_1_grundintegration": {<br />
        "entwicklung": "15.000-25.000 €",<br />
        "testing": "5.000 €", <br />
        "dokumentation": "3.000 €",<br />
        "gesamt": "23.000-33.000 €"<br />
    },<br />
    "phase_2_erweiterungen": {<br />
        "multi_currency": "8.000 €",<br />
        "nft_integration": "12.000 €",<br />
        "analytics_dashboard": "10.000 €",<br />
        "gesamt": "30.000 €"<br />
    },<br />
    "phase_3_enterprise": {<br />
        "ai_features": "25.000 €",<br />
        "blockchain": "20.000 €",<br />
        "compliance_tools": "15.000 €",<br />
        "gesamt": "60.000 €"<br />
    }<br />
}<br />
```<br />
<br />
### Betriebskosten (jährlich)<br />
```python<br />
operational_costs = {<br />
    "server_infrastruktur": "5.000 €",<br />
    "wartung_updates": "15.000 €", <br />
    "support_service": "10.000 €",<br />
    "lizenzen_apis": "3.000 €",<br />
    "gesamt": "33.000 €/Jahr"<br />
}<br />
```<br />
<br />
### Erlöspotenziale<br />
```python<br />
revenue_streams = {<br />
    "lizenzmodell": {<br />
        "basic": "99 €/Monat",<br />
        "professional": "299 €/Monat", <br />
        "enterprise": "999 €/Monat",<br />
        "potenzial_jahr_1": "120.000 €",<br />
        "potenzial_jahr_3": "500.000 €"<br />
    },<br />
    "transaktionsgebuehren": {<br />
        "prozent_satz": "0.5-1%",<br />
        "volumen_annahme": "1 Mio. €/Jahr",<br />
        "ertrag_potenzial": "5.000-10.000 €/Jahr"<br />
    },<br />
    "service_dienstleistungen": {<br />
        "implementierung": "10.000 €/Projekt",<br />
        "schulung": "2.000 €/Tag",<br />
        "wartung": "15% Lizenzkosten"<br />
    }<br />
}<br />
```<br />
<br />
## ⚖️ Rechtliche und Compliance-Machbarkeit<br />
<br />
### Kritische Bereiche<br />
```python<br />
compliance_requirements = {<br />
    "finanzverwaltung": [<br />
        "Umsatzsteuer auf virtuelle Dienstleistungen",<br />
        "Gewinnermittlung digitale Assets",<br />
        "Geldwäscheprävention (AML)",<br />
        "Steuerliche Behandlung virtueller Währungen"<br />
    ],<br />
    "datenschutz": [<br />
        "DSGVO für Avatar-Daten",<br />
        "Cross-Border Data Transfer",<br />
        "Recht auf Vergessenwerden",<br />
        "Data Processing Agreements"<br />
    ],<br />
    "vertragsrecht": [<br />
        "EULA für virtuelle Güter",<br />
        "Nutzungsrechte digitale Assets",<br />
        "Haftung für Systemausfälle",<br />
        "Internationale Jurisdiktion"<br />
    ]<br />
}<br />
```<br />
<br />
## ? Use Cases und Geschäftsszenarien<br />
<br />
### 1. Virtueller Einzelhandel<br />
```python<br />
virtual_retail_scenario = {<br />
    "prozess": "Nike Virtual Store in Roblox",<br />
    "integration": [<br />
        "ERP: Lagerbestandsmanagement",<br />
        "CRM: Kundenpräferenzen Avatare", <br />
        "POS: Virtuelle Kassenintegration",<br />
        "Analytics: Cross-Reality Kundenverhalten"<br />
    ],<br />
    "mehrwert": "Nahtlose Integration realer und virtueller Verkäufe"<br />
}<br />
```<br />
<br />
### 2. Digitale Event-Wirtschaft<br />
```python<br />
event_management_scenario = {<br />
    "anwendung": "Virtual Concert Management",<br />
    "funktionen": [<br />
        "Ticketverkauf mit NFT-Integration",<br />
        "Merchandising virtuelle Güter",<br />
        "Royalty-Verteilung an Künstler",<br />
        "Echtzeit-Umsatzreporting"<br />
    ],<br />
    "skalierung": "Globale Events ohne physische Limits"<br />
}<br />
```<br />
<br />
### 3. Unternehmensinterne Anwendungen<br />
```python<br />
corporate_scenario = {<br />
    "use_case": "VR Training mit ERP-Tracking",<br />
    "integration": [<br />
        "Schulungsbudget-Verwaltung",<br />
        "Teilnehmer-Fortschrittsmonitoring",<br />
        "Skill-Zertifizierung",<br />
        "ROI-Berechnung Trainingseffektivität"<br />
    ],<br />
    "effizienz": "Reduzierte Reisekosten, bessere Lernresultate"<br />
}<br />
```<br />
<br />
## ? Risikoanalyse<br />
<br />
### Technische Risiken<br />
```python<br />
technical_risks = {<br />
    "hoch": [<br />
        "API-Änderungen Plattform-Betreiber",<br />
        "Skalierbarkeit bei Massentransaktionen",<br />
        "Datenkonsistenz bei Netzwerkproblemen"<br />
    ],<br />
    "mittel": [<br />
        "Sicherheit virtueller Wallets",<br />
        "Performance Echtzeit-Synchronisation",<br />
        "Datenmigration bestehender Systeme"<br />
    ],<br />
    "gering": [<br />
        "Browser-Kompatibilität Frontend",<br />
        "Backup-Wiederherstellung",<br />
        "Dokumentation Updates"<br />
    ]<br />
}<br />
```<br />
<br />
### Marktrisiken<br />
```python<br />
market_risks = {<br />
    "regulatorisch": "Änderungen Krypto-Regulierung",<br />
    "akzeptanz": "Langsame Enterprise-Adoption Metaverse",<br />
    "konkurrenz": "Großtech-Lösungen (Microsoft, Meta)",<br />
    "technologisch": "Platform-Shifts im Metaverse"<br />
}<br />
```<br />
<br />
## ? Umsetzungsplan<br />
<br />
### Phase 1: MVP (3-4 Monate)<br />
```python<br />
mvp_milestones = [<br />
    "Monat 1: Grundintegration C# MoneyServer",<br />
    "Monat 2: Basis-ERP-Funktionen (Konten, Transaktionen)",<br />
    "Monat 3: Reporting und Dashboard",<br />
    "Monat 4: Pilotkunden-Integration und Testing"<br />
]<br />
```<br />
<br />
### Phase 2: Erweiterung (6 Monate)<br />
```python<br />
enhancement_phase = [<br />
    "Multi-Währungs-Support",<br />
    "NFT-Asset-Management",<br />
    "Erweiterte Analytics",<br />
    "Compliance-Features"<br />
]<br />
```<br />
<br />
### Phase 3: Enterprise (12 Monate)<br />
```python<br />
enterprise_features = [<br />
    "AI-gestützte Prognosen",<br />
    "Blockchain-Integration",<br />
    "Multi-Plattform-Support",<br />
    "Global Compliance Framework"<br />
]<br />
```<br />
<br />
## ? Empfehlungen<br />
<br />
### 1. Technologische Entscheidungen<br />
```python<br />
recommendations = {<br />
    "erp_system": "ERPNext für Startups, Odoo für Enterprises",<br />
    "entwicklungsansatz": "Microservices-Architektur",<br />
    "sicherheit": "Zero-Trust Security Model",<br />
    "skalierung": "Cloud-native Implementierung"<br />
}<br />
```<br />
<br />
### 2. Geschäftsstrategie<br />
```python<br />
business_strategy = {<br />
    "markteintritt": "Nische Virtual Retail -&gt; Enterprise",<br />
    "preisstrategie": "Value-based Pricing",<br />
    "partner": "Metaverse-Plattformen, Steuerberater, Tech-Provider",<br />
    "expansion": "EU -&gt; Nordamerika -&gt; Asien"<br />
}<br />
```<br />
<br />
## ✅ Fazit der Machbarkeitsstudie<br />
<br />
### Machbarkeit<br />
- **Technisch**: ✅ Hoch - Standardschnittstellen verfügbar<br />
- **Wirtschaftlich**: ✅ Mittel - Investition mit gutem ROI-Potenzial  <br />
- **Rechtlich**: ⚠️ Herausfordernd - aber managbar mit Expertise<br />
- **Operativ**: ✅ Hoch - Ähnlich anderen ERP-Integrationen<br />
<br />
### Erfolgskritische Faktoren<br />
1. **Frühe Compliance-Einbindung**<br />
2. **Skalierbare Architektur**<br />
3. **Starke Partner-Netzwerke**<br />
4. **Agile Marktanpassungsfähigkeit**<br />
<br />
### Next Steps<br />
1. **Proof-of-Concept mit Pilotkunden**<br />
2. **Detailierte Rechtsprüfung**<br />
3. **Technische Prototyp-Entwicklung**<br />
4. **Business Plan Verfeinerung**<br />
<br />
Die Integration von ERP-Systemen mit virtuellen Wirtschaften stellt eine **realistische und vielversprechende** Geschäftschance dar, die strategische Wettbewerbsvorteile in der digitalen Transformation bietet.]]></description>
			<content:encoded><![CDATA[<span style="font-size: x-large;" class="mycode_size"># Machbarkeitsstudie: OpenSimulator ERP-System-Integration für Virtuelle Welten</span><br />
<br />
## ? Executive Summary<br />
<br />
### Zielsetzung<br />
Entwicklung einer ERP-Integration für virtuelle Wirtschaftssysteme am Beispiel des C# MoneyServers mit ERPNext/Odoo zur Erschließung neuer digitaler Märkte.<br />
<br />
## ? Marktanalyse und Potenzial<br />
<br />
### Virtuelle Wirtschaft im Überblick<br />
```<br />
Marktvolumen virtueller Wirtschaften (2024):<br />
├── Second Life Economy: ~500 Mio. USD/Jahr<br />
├── Roblox Developer Exchange: ~600 Mio. USD/Jahr  <br />
├── Fortnite Creative Economy: ~300 Mio. USD/Jahr<br />
├── Decentraland/Web3: ~200 Mio. USD/Jahr<br />
└── Asiatische Metaverse-Plattformen: ~1 Mrd. USD/Jahr<br />
```<br />
<br />
### Zielgruppen<br />
```python<br />
target_groups = {<br />
    "Unternehmen": [<br />
        "Virtuelle Retailer (Nike, Gucci)",<br />
        "Event-Veranstalter in Metaverse",<br />
        "Immobilienentwickler digitale Grundstücke",<br />
        "Bildungsanbieter mit VR-Training"<br />
    ],<br />
    "Inhalteersteller": [<br />
        "3D-Designer und Entwickler",<br />
        "Virtual Fashion Brands", <br />
        "NFT-Künstler und Galerien",<br />
        "Metaverse Architekten"<br />
    ],<br />
    "Service Provider": [<br />
        "VR-Beratungsunternehmen",<br />
        "Transaktionsdienstleister",<br />
        "Steuerberater für digitale Wirtschaft"<br />
    ]<br />
}<br />
```<br />
<br />
## ? Technische Machbarkeit<br />
<br />
### 1. Systemarchitektur<br />
```mermaid<br />
graph TB<br />
    A[ERPNext/Odoo] --&gt; B[Integration Layer]<br />
    B --&gt; C[C# MoneyServer]<br />
    C --&gt; D[Virtuelle Welt]<br />
    B --&gt; E[Blockchain Connector]<br />
    B --&gt; F[Payment Gateway]<br />
    E --&gt; G[NFT Marketplace]<br />
    F --&gt; H[Fiat Währung]<br />
```<br />
<br />
### 2. API-Integration<br />
```python<br />
class TechnicalFeasibility:<br />
    def api_compatibility_check(self):<br />
        return {<br />
            "csharp_money_server": {<br />
                "rest_api": "✅ Vollständig",<br />
                "authentication": "✅ OAuth2/JWT",<br />
                "data_formats": "✅ JSON/XML",<br />
                "rate_limiting": "✅ Konfigurierbar"<br />
            },<br />
            "erpnext_integration": {<br />
                "custom_doctypes": "✅ Möglich",<br />
                "webhooks": "✅ Verfügbar", <br />
                "real_time_sync": "✅ WebSockets",<br />
                "batch_processing": "✅ Scheduled Jobs"<br />
            },<br />
            "odoo_integration": {<br />
                "custom_modules": "✅ Standard",<br />
                "orm_integration": "✅ Native",<br />
                "qweb_reports": "✅ Templates",<br />
                "security_model": "✅ Erweiterbar"<br />
            }<br />
        }<br />
```<br />
<br />
### 3. Datenmodell-Erweiterungen<br />
```python<br />
# ERPNext Doctype Erweiterungen<br />
required_doctypes = [<br />
    "Virtual Currency Account",<br />
    "Digital Asset Inventory", <br />
    "Metaverse Transaction",<br />
    "NFT Asset Management",<br />
    "Cross-Reality Customer",<br />
    "Virtual Event Management"<br />
]<br />
<br />
# Odoo Model Erweiterungen<br />
odoo_models = [<br />
    "opensim.currency.account",<br />
    "metaverse.transaction",<br />
    "digital.asset.tracking",<br />
    "virtual.inventory",<br />
    "avatar.customer.profile"<br />
]<br />
```<br />
<br />
## ? Wirtschaftliche Machbarkeit<br />
<br />
### Investitionskosten<br />
```python<br />
development_costs = {<br />
    "phase_1_grundintegration": {<br />
        "entwicklung": "15.000-25.000 €",<br />
        "testing": "5.000 €", <br />
        "dokumentation": "3.000 €",<br />
        "gesamt": "23.000-33.000 €"<br />
    },<br />
    "phase_2_erweiterungen": {<br />
        "multi_currency": "8.000 €",<br />
        "nft_integration": "12.000 €",<br />
        "analytics_dashboard": "10.000 €",<br />
        "gesamt": "30.000 €"<br />
    },<br />
    "phase_3_enterprise": {<br />
        "ai_features": "25.000 €",<br />
        "blockchain": "20.000 €",<br />
        "compliance_tools": "15.000 €",<br />
        "gesamt": "60.000 €"<br />
    }<br />
}<br />
```<br />
<br />
### Betriebskosten (jährlich)<br />
```python<br />
operational_costs = {<br />
    "server_infrastruktur": "5.000 €",<br />
    "wartung_updates": "15.000 €", <br />
    "support_service": "10.000 €",<br />
    "lizenzen_apis": "3.000 €",<br />
    "gesamt": "33.000 €/Jahr"<br />
}<br />
```<br />
<br />
### Erlöspotenziale<br />
```python<br />
revenue_streams = {<br />
    "lizenzmodell": {<br />
        "basic": "99 €/Monat",<br />
        "professional": "299 €/Monat", <br />
        "enterprise": "999 €/Monat",<br />
        "potenzial_jahr_1": "120.000 €",<br />
        "potenzial_jahr_3": "500.000 €"<br />
    },<br />
    "transaktionsgebuehren": {<br />
        "prozent_satz": "0.5-1%",<br />
        "volumen_annahme": "1 Mio. €/Jahr",<br />
        "ertrag_potenzial": "5.000-10.000 €/Jahr"<br />
    },<br />
    "service_dienstleistungen": {<br />
        "implementierung": "10.000 €/Projekt",<br />
        "schulung": "2.000 €/Tag",<br />
        "wartung": "15% Lizenzkosten"<br />
    }<br />
}<br />
```<br />
<br />
## ⚖️ Rechtliche und Compliance-Machbarkeit<br />
<br />
### Kritische Bereiche<br />
```python<br />
compliance_requirements = {<br />
    "finanzverwaltung": [<br />
        "Umsatzsteuer auf virtuelle Dienstleistungen",<br />
        "Gewinnermittlung digitale Assets",<br />
        "Geldwäscheprävention (AML)",<br />
        "Steuerliche Behandlung virtueller Währungen"<br />
    ],<br />
    "datenschutz": [<br />
        "DSGVO für Avatar-Daten",<br />
        "Cross-Border Data Transfer",<br />
        "Recht auf Vergessenwerden",<br />
        "Data Processing Agreements"<br />
    ],<br />
    "vertragsrecht": [<br />
        "EULA für virtuelle Güter",<br />
        "Nutzungsrechte digitale Assets",<br />
        "Haftung für Systemausfälle",<br />
        "Internationale Jurisdiktion"<br />
    ]<br />
}<br />
```<br />
<br />
## ? Use Cases und Geschäftsszenarien<br />
<br />
### 1. Virtueller Einzelhandel<br />
```python<br />
virtual_retail_scenario = {<br />
    "prozess": "Nike Virtual Store in Roblox",<br />
    "integration": [<br />
        "ERP: Lagerbestandsmanagement",<br />
        "CRM: Kundenpräferenzen Avatare", <br />
        "POS: Virtuelle Kassenintegration",<br />
        "Analytics: Cross-Reality Kundenverhalten"<br />
    ],<br />
    "mehrwert": "Nahtlose Integration realer und virtueller Verkäufe"<br />
}<br />
```<br />
<br />
### 2. Digitale Event-Wirtschaft<br />
```python<br />
event_management_scenario = {<br />
    "anwendung": "Virtual Concert Management",<br />
    "funktionen": [<br />
        "Ticketverkauf mit NFT-Integration",<br />
        "Merchandising virtuelle Güter",<br />
        "Royalty-Verteilung an Künstler",<br />
        "Echtzeit-Umsatzreporting"<br />
    ],<br />
    "skalierung": "Globale Events ohne physische Limits"<br />
}<br />
```<br />
<br />
### 3. Unternehmensinterne Anwendungen<br />
```python<br />
corporate_scenario = {<br />
    "use_case": "VR Training mit ERP-Tracking",<br />
    "integration": [<br />
        "Schulungsbudget-Verwaltung",<br />
        "Teilnehmer-Fortschrittsmonitoring",<br />
        "Skill-Zertifizierung",<br />
        "ROI-Berechnung Trainingseffektivität"<br />
    ],<br />
    "effizienz": "Reduzierte Reisekosten, bessere Lernresultate"<br />
}<br />
```<br />
<br />
## ? Risikoanalyse<br />
<br />
### Technische Risiken<br />
```python<br />
technical_risks = {<br />
    "hoch": [<br />
        "API-Änderungen Plattform-Betreiber",<br />
        "Skalierbarkeit bei Massentransaktionen",<br />
        "Datenkonsistenz bei Netzwerkproblemen"<br />
    ],<br />
    "mittel": [<br />
        "Sicherheit virtueller Wallets",<br />
        "Performance Echtzeit-Synchronisation",<br />
        "Datenmigration bestehender Systeme"<br />
    ],<br />
    "gering": [<br />
        "Browser-Kompatibilität Frontend",<br />
        "Backup-Wiederherstellung",<br />
        "Dokumentation Updates"<br />
    ]<br />
}<br />
```<br />
<br />
### Marktrisiken<br />
```python<br />
market_risks = {<br />
    "regulatorisch": "Änderungen Krypto-Regulierung",<br />
    "akzeptanz": "Langsame Enterprise-Adoption Metaverse",<br />
    "konkurrenz": "Großtech-Lösungen (Microsoft, Meta)",<br />
    "technologisch": "Platform-Shifts im Metaverse"<br />
}<br />
```<br />
<br />
## ? Umsetzungsplan<br />
<br />
### Phase 1: MVP (3-4 Monate)<br />
```python<br />
mvp_milestones = [<br />
    "Monat 1: Grundintegration C# MoneyServer",<br />
    "Monat 2: Basis-ERP-Funktionen (Konten, Transaktionen)",<br />
    "Monat 3: Reporting und Dashboard",<br />
    "Monat 4: Pilotkunden-Integration und Testing"<br />
]<br />
```<br />
<br />
### Phase 2: Erweiterung (6 Monate)<br />
```python<br />
enhancement_phase = [<br />
    "Multi-Währungs-Support",<br />
    "NFT-Asset-Management",<br />
    "Erweiterte Analytics",<br />
    "Compliance-Features"<br />
]<br />
```<br />
<br />
### Phase 3: Enterprise (12 Monate)<br />
```python<br />
enterprise_features = [<br />
    "AI-gestützte Prognosen",<br />
    "Blockchain-Integration",<br />
    "Multi-Plattform-Support",<br />
    "Global Compliance Framework"<br />
]<br />
```<br />
<br />
## ? Empfehlungen<br />
<br />
### 1. Technologische Entscheidungen<br />
```python<br />
recommendations = {<br />
    "erp_system": "ERPNext für Startups, Odoo für Enterprises",<br />
    "entwicklungsansatz": "Microservices-Architektur",<br />
    "sicherheit": "Zero-Trust Security Model",<br />
    "skalierung": "Cloud-native Implementierung"<br />
}<br />
```<br />
<br />
### 2. Geschäftsstrategie<br />
```python<br />
business_strategy = {<br />
    "markteintritt": "Nische Virtual Retail -&gt; Enterprise",<br />
    "preisstrategie": "Value-based Pricing",<br />
    "partner": "Metaverse-Plattformen, Steuerberater, Tech-Provider",<br />
    "expansion": "EU -&gt; Nordamerika -&gt; Asien"<br />
}<br />
```<br />
<br />
## ✅ Fazit der Machbarkeitsstudie<br />
<br />
### Machbarkeit<br />
- **Technisch**: ✅ Hoch - Standardschnittstellen verfügbar<br />
- **Wirtschaftlich**: ✅ Mittel - Investition mit gutem ROI-Potenzial  <br />
- **Rechtlich**: ⚠️ Herausfordernd - aber managbar mit Expertise<br />
- **Operativ**: ✅ Hoch - Ähnlich anderen ERP-Integrationen<br />
<br />
### Erfolgskritische Faktoren<br />
1. **Frühe Compliance-Einbindung**<br />
2. **Skalierbare Architektur**<br />
3. **Starke Partner-Netzwerke**<br />
4. **Agile Marktanpassungsfähigkeit**<br />
<br />
### Next Steps<br />
1. **Proof-of-Concept mit Pilotkunden**<br />
2. **Detailierte Rechtsprüfung**<br />
3. **Technische Prototyp-Entwicklung**<br />
4. **Business Plan Verfeinerung**<br />
<br />
Die Integration von ERP-Systemen mit virtuellen Wirtschaften stellt eine **realistische und vielversprechende** Geschäftschance dar, die strategische Wettbewerbsvorteile in der digitalen Transformation bietet.]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[GLTF-Packer]]></title>
			<link>https://www.gridtalk.de/showthread.php?tid=5168</link>
			<pubDate>Sat, 04 Oct 2025 00:50:47 +0200</pubDate>
			<dc:creator><![CDATA[<a href="https://www.gridtalk.de/member.php?action=profile&uid=998">Manfred Aabye</a>]]></dc:creator>
			<guid isPermaLink="false">https://www.gridtalk.de/showthread.php?tid=5168</guid>
			<description><![CDATA[<span style="font-size: xx-large;" class="mycode_size">PBR Material Maker Dotnet 10 mit Texturgenerator.</span><br />
﻿# DOTNET 10.0 Version von GLTF Packer (Fork von Captain Ai)<br />
<br />
Visual Studio 2026 – Windows 11 – .NET 10.0<br />
<br />
Diese Version erstellt automatisch nicht vorhandene PBR-Bestandteile (BaseColor, Normal, Occlusion, Roughness, Metallic, Emission, Alpha) und speichert sie im Zielverzeichnis. Diese werden aus der Albedo berechnet.<br />
<br />
<!-- start: postbit_attachments_attachment -->
<br /><!-- start: attachment_icon -->
<img src="https://www.gridtalk.de/images/attachtypes/image.gif" title="PNG Image" border="0" alt=".png" />
<!-- end: attachment_icon -->&nbsp;&nbsp;<a href="attachment.php?aid=10883" target="_blank" title="">packer.png</a> (Größe: 220,27 KB / Downloads: 250)
<!-- end: postbit_attachments_attachment --><br />
<br />
## Features<br />
<br />
- Automatische Erzeugung fehlender PBR-Texturen (weiß/schwarz oder generiert)<br />
- Normalmap-Generierung aus Albedo mit Prägung<br />
- Unterstützung für Drag &amp; Drop von Texturen<br />
- Anpassbare Auflösung für alle Maps<br />
- GLTF-Export mit allen relevanten Textur-Referenzen<br />
- Kompatibel mit Windows 11 und Visual Studio 2026 (.NET 10.0)<br />
<br />
## Installation<br />
<br />
1. Projekt mit Visual Studio 2026 öffnen.<br />
2. Abhängigkeiten installieren (NuGet: Newtonsoft.Json).<br />
3. Anwendung kompilieren und starten.<br />
<br />
## Verwendung<br />
<br />
1. Ziehe die gewünschte Albedo-Textur per Drag &amp; Drop in das Fenster.<br />
2. Weitere Maps werden automatisch erkannt oder generiert.<br />
3. Wähle die gewünschte Auflösung.<br />
4. Klicke auf „Save“, um die GLTF-Datei und alle Texturen zu exportieren.<br />
<br />
## Disclaimer<br />
<br />
GLTF Packer steht in keiner Verbindung zu KhronosGroup, glTF, Linden Lab, SecondLife oder OpenSim. Es handelt sich um Drittanbieter-Software.<br />
<br />
## Lizenz<br />
<br />
Siehe LICENSE-Datei im Repository.<br />
<br />
## Fertige Windows Version <a href="https://github.com/ManfredAabye/GLTF-Packer/releases" target="_blank" rel="noopener" class="mycode_url">Download</a>]]></description>
			<content:encoded><![CDATA[<span style="font-size: xx-large;" class="mycode_size">PBR Material Maker Dotnet 10 mit Texturgenerator.</span><br />
﻿# DOTNET 10.0 Version von GLTF Packer (Fork von Captain Ai)<br />
<br />
Visual Studio 2026 – Windows 11 – .NET 10.0<br />
<br />
Diese Version erstellt automatisch nicht vorhandene PBR-Bestandteile (BaseColor, Normal, Occlusion, Roughness, Metallic, Emission, Alpha) und speichert sie im Zielverzeichnis. Diese werden aus der Albedo berechnet.<br />
<br />
<!-- start: postbit_attachments_attachment -->
<br /><!-- start: attachment_icon -->
<img src="https://www.gridtalk.de/images/attachtypes/image.gif" title="PNG Image" border="0" alt=".png" />
<!-- end: attachment_icon -->&nbsp;&nbsp;<a href="attachment.php?aid=10883" target="_blank" title="">packer.png</a> (Größe: 220,27 KB / Downloads: 250)
<!-- end: postbit_attachments_attachment --><br />
<br />
## Features<br />
<br />
- Automatische Erzeugung fehlender PBR-Texturen (weiß/schwarz oder generiert)<br />
- Normalmap-Generierung aus Albedo mit Prägung<br />
- Unterstützung für Drag &amp; Drop von Texturen<br />
- Anpassbare Auflösung für alle Maps<br />
- GLTF-Export mit allen relevanten Textur-Referenzen<br />
- Kompatibel mit Windows 11 und Visual Studio 2026 (.NET 10.0)<br />
<br />
## Installation<br />
<br />
1. Projekt mit Visual Studio 2026 öffnen.<br />
2. Abhängigkeiten installieren (NuGet: Newtonsoft.Json).<br />
3. Anwendung kompilieren und starten.<br />
<br />
## Verwendung<br />
<br />
1. Ziehe die gewünschte Albedo-Textur per Drag &amp; Drop in das Fenster.<br />
2. Weitere Maps werden automatisch erkannt oder generiert.<br />
3. Wähle die gewünschte Auflösung.<br />
4. Klicke auf „Save“, um die GLTF-Datei und alle Texturen zu exportieren.<br />
<br />
## Disclaimer<br />
<br />
GLTF Packer steht in keiner Verbindung zu KhronosGroup, glTF, Linden Lab, SecondLife oder OpenSim. Es handelt sich um Drittanbieter-Software.<br />
<br />
## Lizenz<br />
<br />
Siehe LICENSE-Datei im Repository.<br />
<br />
## Fertige Windows Version <a href="https://github.com/ManfredAabye/GLTF-Packer/releases" target="_blank" rel="noopener" class="mycode_url">Download</a>]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[opensim user accounts tests]]></title>
			<link>https://www.gridtalk.de/showthread.php?tid=4910</link>
			<pubDate>Mon, 02 Sep 2024 12:07:53 +0200</pubDate>
			<dc:creator><![CDATA[<a href="https://www.gridtalk.de/member.php?action=profile&uid=998">Manfred Aabye</a>]]></dc:creator>
			<guid isPermaLink="false">https://www.gridtalk.de/showthread.php?tid=4910</guid>
			<description><![CDATA[<span style="font-weight: bold;" class="mycode_b">opensim_user_accounts</span> <br />
OpenSimulator Benutzeraccounts erstellen, ändern und löschen.<br />
Anleitung und Sourcecode auf Github.<br />
<a href="https://github.com/ManfredAabye/opensim_user_accounts" target="_blank" rel="noopener" class="mycode_url">https://github.com/ManfredAabye/opensim_user_accounts</a>]]></description>
			<content:encoded><![CDATA[<span style="font-weight: bold;" class="mycode_b">opensim_user_accounts</span> <br />
OpenSimulator Benutzeraccounts erstellen, ändern und löschen.<br />
Anleitung und Sourcecode auf Github.<br />
<a href="https://github.com/ManfredAabye/opensim_user_accounts" target="_blank" rel="noopener" class="mycode_url">https://github.com/ManfredAabye/opensim_user_accounts</a>]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[OpenSimRegionConfig]]></title>
			<link>https://www.gridtalk.de/showthread.php?tid=4908</link>
			<pubDate>Sat, 31 Aug 2024 15:30:54 +0200</pubDate>
			<dc:creator><![CDATA[<a href="https://www.gridtalk.de/member.php?action=profile&uid=998">Manfred Aabye</a>]]></dc:creator>
			<guid isPermaLink="false">https://www.gridtalk.de/showthread.php?tid=4908</guid>
			<description><![CDATA[Anleitung zur Nutzung des Regionenkonfigurators<br />
<br />
Hier ist eine Schritt-für-Schritt-Anleitung zur Verwendung des Python-Skripts, das eine GUI-Anwendung erstellt, um Regionskonfigurationen zu generieren.<br />
<br />
### Voraussetzungen:<br />
- **Python 3.x**: Stelle sicher, dass Python auf deinem System installiert ist.<br />
- **Tkinter**: Tkinter ist normalerweise in Python vorinstalliert. Falls es fehlt, installiere es mit:<br />
  ```bash<br />
  sudo apt-get install python3-tk<br />
  ```<br />
<br />
### 1. Überblick:<br />
Dieses Skript erstellt eine grafische Benutzeroberfläche (GUI), mit der du verschiedene Einstellungen für Regionen vornehmen kannst, die anschließend in einer `.ini`-Konfigurationsdatei gespeichert werden. Jede Region hat verschiedene Parameter wie Größe, UUID, Position (Location) und viele andere, die du individuell konfigurieren kannst.<br />
<br />
### 2. Skript ausführen:<br />
1. **Python-Datei erstellen**: Erstelle eine Datei namens `region_config_app.py` und kopiere den bereitgestellten Python-Code in diese Datei.<br />
2. **Skript starten**: Öffne ein Terminal oder eine Eingabeaufforderung und navigiere zu dem Verzeichnis, in dem sich die Datei befindet. Führe das Skript mit folgendem Befehl aus:<br />
   ```bash<br />
   python region_config_app.py<br />
   ```<br />
3. **GUI-Anwendung**: Nach dem Ausführen öffnet sich ein Fenster mit der Benutzeroberfläche.<br />
<br />
### 3. Verwendung der GUI:<br />
1. **Felder ausfüllen**: Die Benutzeroberfläche zeigt verschiedene Felder an, in denen du die gewünschten Parameter für eine Region anpassen kannst.<br />
    - **Region Name**: Name der Region.<br />
    - **Region UUID**: Eindeutige Identifikationsnummer der Region.<br />
    - **Location**: Der Standort der Region (x, y), standardmäßig auf `1000,1000` gesetzt. Es wird automatisch angepasst, wenn du eine neue Region hinzufügst.<br />
    - **Size X, Y, Z**: Dimensionen der Region.<br />
    - **Internal Port**: Interner Netzwerkport.<br />
    - **External Host**: Externer Hostname.<br />
    - **Maptile UUID**: UUID für die Kartendatei, die die Region repräsentiert. Wird automatisch auf die Region UUID gesetzt.<br />
    - **Weitere Parameter**: Andere Einstellungen wie Maximalanzahl an Prims, Agenten, ScopeID usw.<br />
2. **Region hinzufügen**: Klicke auf die Schaltfläche **"Add Region"**. Dadurch wird eine neue Region mit einer eigenen UUID und einem neuen Standort (basierend auf einer spiralförmigen Berechnung) erstellt.<br />
3. **Konfiguration speichern**: Nachdem du die gewünschten Regionen hinzugefügt hast, klicke auf **"Save Config"**, um die Konfigurationen in einer `.ini`-Datei zu speichern. Wähle einen Speicherort und einen Dateinamen.<br />
<br />
### 4. Ergebnis:<br />
- Die erstellte `.ini`-Datei enthält Abschnitte für jede Region mit den von dir festgelegten Konfigurationen. Jede Region erhält eine eigene `Location`, `UUID` und andere Parameter.<br />
<br />
### 5. Beispielhafte INI-Datei:<br />
Die gespeicherte Datei könnte in etwa so aussehen:<br />
<br />
```ini<br />
<div class="codeblock phpcodeblock"><div class="title">PHP-Code:</div><div class="body"><div dir="ltr"><code><span style="color: #007700">[</span><span style="color: #0000BB">TestRegion_1</span><span style="color: #007700">]<br /></span><span style="color: #0000BB">RegionUUID&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">123e4567</span><span style="color: #007700">-</span><span style="color: #0000BB">e89b</span><span style="color: #007700">-</span><span style="color: #0000BB">12d3</span><span style="color: #007700">-</span><span style="color: #0000BB">a456</span><span style="color: #007700">-</span><span style="color: #0000BB">426614174000<br />Location&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">1000</span><span style="color: #007700">,</span><span style="color: #0000BB">1000<br />SizeX&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">256<br />SizeY&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">256<br />SizeZ&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">256<br />InternalPort&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">9050<br />ExternalHostName&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">SYSTEMIP<br />MaxPrims&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">100000<br />MaxAgents&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">99<br />MaptileStaticUUID&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">123e4567</span><span style="color: #007700">-</span><span style="color: #0000BB">e89b</span><span style="color: #007700">-</span><span style="color: #0000BB">12d3</span><span style="color: #007700">-</span><span style="color: #0000BB">a456</span><span style="color: #007700">-</span><span style="color: #0000BB">426614174000<br /></span><span style="color: #007700">...<br /><br />[</span><span style="color: #0000BB">TestRegion_2</span><span style="color: #007700">]<br /></span><span style="color: #0000BB">RegionUUID&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">223e4567</span><span style="color: #007700">-</span><span style="color: #0000BB">e89b</span><span style="color: #007700">-</span><span style="color: #0000BB">12d3</span><span style="color: #007700">-</span><span style="color: #0000BB">a456</span><span style="color: #007700">-</span><span style="color: #0000BB">426614174001<br />Location&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">1001</span><span style="color: #007700">,</span><span style="color: #0000BB">1001<br />SizeX&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">256<br />SizeY&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">256<br />SizeZ&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">256<br />InternalPort&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">9051<br />ExternalHostName&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">SYSTEMIP<br />MaxPrims&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">100000<br />MaxAgents&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">99<br />MaptileStaticUUID&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">223e4567</span><span style="color: #007700">-</span><span style="color: #0000BB">e89b</span><span style="color: #007700">-</span><span style="color: #0000BB">12d3</span><span style="color: #007700">-</span><span style="color: #0000BB">a456</span><span style="color: #007700">-</span><span style="color: #0000BB">426614174001&nbsp;<br /></span></code></div></div></div>...<br />
```<br />
<br />
### 6. Erweiterungen und Anpassungen:<br />
Du kannst den Code anpassen, um zusätzliche Parameter hinzuzufügen oder die Art und Weise zu ändern, wie `Locations` berechnet werden.<br />
<br />
### 7. Fehlerbehebung:<br />
- **Tkinter nicht gefunden**: Stelle sicher, dass Tkinter installiert ist.<br />
- **INI-Datei wird nicht gespeichert**: Überprüfe die Dateiberechtigungen im Zielverzeichnis.<br />
<br />
Mit dieser Anleitung solltest du in der Lage sein, das Skript erfolgreich zu verwenden und benutzerdefinierte Konfigurationen für Regionen zu erstellen und zu verwalten.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Sourcecode:</span><br />
<div class="codeblock phpcodeblock"><div class="title">PHP-Code:</div><div class="body"><div dir="ltr"><code><span style="color: #0000BB">import&nbsp;tkinter&nbsp;</span><span style="color: #007700">as&nbsp;</span><span style="color: #0000BB">tk<br />from&nbsp;tkinter&nbsp;import&nbsp;messagebox</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">filedialog<br />import&nbsp;configparser<br />import&nbsp;uuid<br />import&nbsp;math<br /><br /></span><span style="color: #007700">class&nbsp;</span><span style="color: #0000BB">RegionConfigApp</span><span style="color: #007700">:<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">def&nbsp;__init__</span><span style="color: #007700">(</span><span style="color: #0000BB">self</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">root</span><span style="color: #007700">):<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">self</span><span style="color: #007700">.</span><span style="color: #0000BB">root&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">root<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self</span><span style="color: #007700">.</span><span style="color: #0000BB">root</span><span style="color: #007700">.</span><span style="color: #0000BB">title</span><span style="color: #007700">(</span><span style="color: #DD0000">"Region&nbsp;Configurations"</span><span style="color: #007700">)<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #FF8000">#&nbsp;Set&nbsp;window&nbsp;size<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">self</span><span style="color: #007700">.</span><span style="color: #0000BB">root</span><span style="color: #007700">.</span><span style="color: #0000BB">geometry</span><span style="color: #007700">(</span><span style="color: #DD0000">"450x700"</span><span style="color: #007700">)<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #FF8000">#&nbsp;Initialize&nbsp;variables&nbsp;with&nbsp;default&nbsp;values<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">self</span><span style="color: #007700">.</span><span style="color: #0000BB">region_name&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">tk</span><span style="color: #007700">.</span><span style="color: #0000BB">StringVar</span><span style="color: #007700">(</span><span style="color: #0000BB">value</span><span style="color: #007700">=</span><span style="color: #DD0000">"TestRegion"</span><span style="color: #007700">)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">self</span><span style="color: #007700">.</span><span style="color: #0000BB">region_uuid&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">tk</span><span style="color: #007700">.</span><span style="color: #0000BB">StringVar</span><span style="color: #007700">(</span><span style="color: #0000BB">value</span><span style="color: #007700">=</span><span style="color: #0000BB">str</span><span style="color: #007700">(</span><span style="color: #0000BB">uuid</span><span style="color: #007700">.</span><span style="color: #0000BB">uuid4</span><span style="color: #007700">()))<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">self</span><span style="color: #007700">.</span><span style="color: #0000BB">maptile_uuid&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">tk</span><span style="color: #007700">.</span><span style="color: #0000BB">StringVar</span><span style="color: #007700">(</span><span style="color: #0000BB">value</span><span style="color: #007700">=</span><span style="color: #0000BB">self</span><span style="color: #007700">.</span><span style="color: #0000BB">region_uuid</span><span style="color: #007700">.</span><span style="color: #0000BB">get</span><span style="color: #007700">())<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #FF8000">#&nbsp;Location&nbsp;variable&nbsp;for&nbsp;grid&nbsp;position<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">self</span><span style="color: #007700">.</span><span style="color: #0000BB">location&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">tk</span><span style="color: #007700">.</span><span style="color: #0000BB">StringVar</span><span style="color: #007700">(</span><span style="color: #0000BB">value</span><span style="color: #007700">=</span><span style="color: #DD0000">"1000,1000"</span><span style="color: #007700">)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">self</span><span style="color: #007700">.</span><span style="color: #0000BB">size_x&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">tk</span><span style="color: #007700">.</span><span style="color: #0000BB">IntVar</span><span style="color: #007700">(</span><span style="color: #0000BB">value</span><span style="color: #007700">=</span><span style="color: #0000BB">256</span><span style="color: #007700">)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">self</span><span style="color: #007700">.</span><span style="color: #0000BB">size_y&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">tk</span><span style="color: #007700">.</span><span style="color: #0000BB">IntVar</span><span style="color: #007700">(</span><span style="color: #0000BB">value</span><span style="color: #007700">=</span><span style="color: #0000BB">256</span><span style="color: #007700">)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">self</span><span style="color: #007700">.</span><span style="color: #0000BB">size_z&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">tk</span><span style="color: #007700">.</span><span style="color: #0000BB">IntVar</span><span style="color: #007700">(</span><span style="color: #0000BB">value</span><span style="color: #007700">=</span><span style="color: #0000BB">256</span><span style="color: #007700">)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">self</span><span style="color: #007700">.</span><span style="color: #0000BB">internal_port&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">tk</span><span style="color: #007700">.</span><span style="color: #0000BB">IntVar</span><span style="color: #007700">(</span><span style="color: #0000BB">value</span><span style="color: #007700">=</span><span style="color: #0000BB">9050</span><span style="color: #007700">)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">self</span><span style="color: #007700">.</span><span style="color: #0000BB">external_host&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">tk</span><span style="color: #007700">.</span><span style="color: #0000BB">StringVar</span><span style="color: #007700">(</span><span style="color: #0000BB">value</span><span style="color: #007700">=</span><span style="color: #DD0000">"SYSTEMIP"</span><span style="color: #007700">)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">self</span><span style="color: #007700">.</span><span style="color: #0000BB">max_prims&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">tk</span><span style="color: #007700">.</span><span style="color: #0000BB">IntVar</span><span style="color: #007700">(</span><span style="color: #0000BB">value</span><span style="color: #007700">=</span><span style="color: #0000BB">100000</span><span style="color: #007700">)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">self</span><span style="color: #007700">.</span><span style="color: #0000BB">max_agents&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">tk</span><span style="color: #007700">.</span><span style="color: #0000BB">IntVar</span><span style="color: #007700">(</span><span style="color: #0000BB">value</span><span style="color: #007700">=</span><span style="color: #0000BB">99</span><span style="color: #007700">)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">self</span><span style="color: #007700">.</span><span style="color: #0000BB">internal_address&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">tk</span><span style="color: #007700">.</span><span style="color: #0000BB">StringVar</span><span style="color: #007700">(</span><span style="color: #0000BB">value</span><span style="color: #007700">=</span><span style="color: #DD0000">"0.0.0.0"</span><span style="color: #007700">)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">self</span><span style="color: #007700">.</span><span style="color: #0000BB">allow_alt_ports&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">tk</span><span style="color: #007700">.</span><span style="color: #0000BB">BooleanVar</span><span style="color: #007700">(</span><span style="color: #0000BB">value</span><span style="color: #007700">=</span><span style="color: #0000BB">False</span><span style="color: #007700">)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">self</span><span style="color: #007700">.</span><span style="color: #0000BB">non_physical_prim_max&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">tk</span><span style="color: #007700">.</span><span style="color: #0000BB">IntVar</span><span style="color: #007700">(</span><span style="color: #0000BB">value</span><span style="color: #007700">=</span><span style="color: #0000BB">256</span><span style="color: #007700">)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">self</span><span style="color: #007700">.</span><span style="color: #0000BB">physical_prim_max&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">tk</span><span style="color: #007700">.</span><span style="color: #0000BB">IntVar</span><span style="color: #007700">(</span><span style="color: #0000BB">value</span><span style="color: #007700">=</span><span style="color: #0000BB">64</span><span style="color: #007700">)<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #FF8000">#&nbsp;New&nbsp;variables&nbsp;for&nbsp;additional&nbsp;settings<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">self</span><span style="color: #007700">.</span><span style="color: #0000BB">clamp_prim_size&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">tk</span><span style="color: #007700">.</span><span style="color: #0000BB">BooleanVar</span><span style="color: #007700">(</span><span style="color: #0000BB">value</span><span style="color: #007700">=</span><span style="color: #0000BB">False</span><span style="color: #007700">)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">self</span><span style="color: #007700">.</span><span style="color: #0000BB">max_prims_per_user&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">tk</span><span style="color: #007700">.</span><span style="color: #0000BB">IntVar</span><span style="color: #007700">(</span><span style="color: #0000BB">value</span><span style="color: #007700">=-</span><span style="color: #0000BB">1</span><span style="color: #007700">)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">self</span><span style="color: #007700">.</span><span style="color: #0000BB">scope_id&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">tk</span><span style="color: #007700">.</span><span style="color: #0000BB">StringVar</span><span style="color: #007700">(</span><span style="color: #0000BB">value</span><span style="color: #007700">=</span><span style="color: #0000BB">self</span><span style="color: #007700">.</span><span style="color: #0000BB">region_uuid</span><span style="color: #007700">.</span><span style="color: #0000BB">get</span><span style="color: #007700">())<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">self</span><span style="color: #007700">.</span><span style="color: #0000BB">region_type&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">tk</span><span style="color: #007700">.</span><span style="color: #0000BB">StringVar</span><span style="color: #007700">(</span><span style="color: #0000BB">value</span><span style="color: #007700">=</span><span style="color: #DD0000">"Mainland"</span><span style="color: #007700">)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">self</span><span style="color: #007700">.</span><span style="color: #0000BB">render_min_height&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">tk</span><span style="color: #007700">.</span><span style="color: #0000BB">IntVar</span><span style="color: #007700">(</span><span style="color: #0000BB">value</span><span style="color: #007700">=-</span><span style="color: #0000BB">1</span><span style="color: #007700">)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">self</span><span style="color: #007700">.</span><span style="color: #0000BB">render_max_height&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">tk</span><span style="color: #007700">.</span><span style="color: #0000BB">IntVar</span><span style="color: #007700">(</span><span style="color: #0000BB">value</span><span style="color: #007700">=</span><span style="color: #0000BB">100</span><span style="color: #007700">)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">self</span><span style="color: #007700">.</span><span style="color: #0000BB">maptile_static_file&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">tk</span><span style="color: #007700">.</span><span style="color: #0000BB">StringVar</span><span style="color: #007700">(</span><span style="color: #0000BB">value</span><span style="color: #007700">=</span><span style="color: #DD0000">"SomeFile.png"</span><span style="color: #007700">)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">self</span><span style="color: #007700">.</span><span style="color: #0000BB">master_avatar_first_name&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">tk</span><span style="color: #007700">.</span><span style="color: #0000BB">StringVar</span><span style="color: #007700">(</span><span style="color: #0000BB">value</span><span style="color: #007700">=</span><span style="color: #DD0000">"John"</span><span style="color: #007700">)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">self</span><span style="color: #007700">.</span><span style="color: #0000BB">master_avatar_last_name&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">tk</span><span style="color: #007700">.</span><span style="color: #0000BB">StringVar</span><span style="color: #007700">(</span><span style="color: #0000BB">value</span><span style="color: #007700">=</span><span style="color: #DD0000">"Doe"</span><span style="color: #007700">)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">self</span><span style="color: #007700">.</span><span style="color: #0000BB">master_avatar_sandbox_password&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">tk</span><span style="color: #007700">.</span><span style="color: #0000BB">StringVar</span><span style="color: #007700">(</span><span style="color: #0000BB">value</span><span style="color: #007700">=</span><span style="color: #DD0000">"passwd"</span><span style="color: #007700">)<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">self</span><span style="color: #007700">.</span><span style="color: #0000BB">region_count&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">0&nbsp;&nbsp;</span><span style="color: #FF8000">#&nbsp;Startet&nbsp;bei&nbsp;0<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">self</span><span style="color: #007700">.</span><span style="color: #0000BB">angle&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">0<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self</span><span style="color: #007700">.</span><span style="color: #0000BB">radius&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">1&nbsp;&nbsp;</span><span style="color: #FF8000">#&nbsp;Initialer&nbsp;Radius<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">self</span><span style="color: #007700">.</span><span style="color: #0000BB">locations&nbsp;</span><span style="color: #007700">=&nbsp;[]&nbsp;&nbsp;</span><span style="color: #FF8000">#&nbsp;Liste&nbsp;für&nbsp;die&nbsp;Locations&nbsp;aller&nbsp;Regionen<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#&nbsp;Trace&nbsp;changes&nbsp;to&nbsp;region_uuid&nbsp;to&nbsp;update&nbsp;maptile_uuid&nbsp;accordingly<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">self</span><span style="color: #007700">.</span><span style="color: #0000BB">region_uuid</span><span style="color: #007700">.</span><span style="color: #0000BB">trace_add</span><span style="color: #007700">(</span><span style="color: #DD0000">'write'</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">self</span><span style="color: #007700">.</span><span style="color: #0000BB">update_maptile_uuid</span><span style="color: #007700">)<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #FF8000">#&nbsp;Build&nbsp;the&nbsp;UI<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">self</span><span style="color: #007700">.</span><span style="color: #0000BB">build_ui</span><span style="color: #007700">()<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">def&nbsp;update_maptile_uuid</span><span style="color: #007700">(</span><span style="color: #0000BB">self</span><span style="color: #007700">,&nbsp;*</span><span style="color: #0000BB">args</span><span style="color: #007700">):<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">self</span><span style="color: #007700">.</span><span style="color: #0000BB">maptile_uuid</span><span style="color: #007700">.</span><span style="color: #0000BB">set</span><span style="color: #007700">(</span><span style="color: #0000BB">self</span><span style="color: #007700">.</span><span style="color: #0000BB">region_uuid</span><span style="color: #007700">.</span><span style="color: #0000BB">get</span><span style="color: #007700">())<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">def&nbsp;build_ui</span><span style="color: #007700">(</span><span style="color: #0000BB">self</span><span style="color: #007700">):<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">canvas&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">tk</span><span style="color: #007700">.</span><span style="color: #0000BB">Canvas</span><span style="color: #007700">(</span><span style="color: #0000BB">self</span><span style="color: #007700">.</span><span style="color: #0000BB">root</span><span style="color: #007700">)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">scrollbar&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">tk</span><span style="color: #007700">.</span><span style="color: #0000BB">Scrollbar</span><span style="color: #007700">(</span><span style="color: #0000BB">self</span><span style="color: #007700">.</span><span style="color: #0000BB">root</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">orient</span><span style="color: #007700">=</span><span style="color: #DD0000">"vertical"</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">command</span><span style="color: #007700">=</span><span style="color: #0000BB">canvas</span><span style="color: #007700">.</span><span style="color: #0000BB">yview</span><span style="color: #007700">)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">scrollable_frame&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">tk</span><span style="color: #007700">.</span><span style="color: #0000BB">Frame</span><span style="color: #007700">(</span><span style="color: #0000BB">canvas</span><span style="color: #007700">)<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">scrollable_frame</span><span style="color: #007700">.</span><span style="color: #0000BB">bind</span><span style="color: #007700">(<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #DD0000">"&lt;Configure&gt;"</span><span style="color: #007700">,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">lambda&nbsp;e</span><span style="color: #007700">:&nbsp;</span><span style="color: #0000BB">canvas</span><span style="color: #007700">.</span><span style="color: #0000BB">configure</span><span style="color: #007700">(<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">scrollregion</span><span style="color: #007700">=</span><span style="color: #0000BB">canvas</span><span style="color: #007700">.</span><span style="color: #0000BB">bbox</span><span style="color: #007700">(</span><span style="color: #DD0000">"all"</span><span style="color: #007700">)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;)<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">canvas</span><span style="color: #007700">.</span><span style="color: #0000BB">create_window</span><span style="color: #007700">((</span><span style="color: #0000BB">0</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">0</span><span style="color: #007700">),&nbsp;</span><span style="color: #0000BB">window</span><span style="color: #007700">=</span><span style="color: #0000BB">scrollable_frame</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">anchor</span><span style="color: #007700">=</span><span style="color: #DD0000">"nw"</span><span style="color: #007700">)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">canvas</span><span style="color: #007700">.</span><span style="color: #0000BB">configure</span><span style="color: #007700">(</span><span style="color: #0000BB">yscrollcommand</span><span style="color: #007700">=</span><span style="color: #0000BB">scrollbar</span><span style="color: #007700">.</span><span style="color: #0000BB">set</span><span style="color: #007700">)<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">canvas</span><span style="color: #007700">.</span><span style="color: #0000BB">pack</span><span style="color: #007700">(</span><span style="color: #0000BB">side</span><span style="color: #007700">=</span><span style="color: #DD0000">"left"</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">fill</span><span style="color: #007700">=</span><span style="color: #DD0000">"both"</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">expand</span><span style="color: #007700">=</span><span style="color: #0000BB">True</span><span style="color: #007700">)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">scrollbar</span><span style="color: #007700">.</span><span style="color: #0000BB">pack</span><span style="color: #007700">(</span><span style="color: #0000BB">side</span><span style="color: #007700">=</span><span style="color: #DD0000">"right"</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">fill</span><span style="color: #007700">=</span><span style="color: #DD0000">"y"</span><span style="color: #007700">)<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">fields&nbsp;</span><span style="color: #007700">=&nbsp;[<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(</span><span style="color: #DD0000">"Region&nbsp;Name:"</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">self</span><span style="color: #007700">.</span><span style="color: #0000BB">region_name</span><span style="color: #007700">),<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(</span><span style="color: #DD0000">"Region&nbsp;UUID:"</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">self</span><span style="color: #007700">.</span><span style="color: #0000BB">region_uuid</span><span style="color: #007700">),<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(</span><span style="color: #DD0000">"Location:"</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">self</span><span style="color: #007700">.</span><span style="color: #0000BB">location</span><span style="color: #007700">),&nbsp;&nbsp;</span><span style="color: #FF8000">#&nbsp;Location&nbsp;field&nbsp;added&nbsp;here<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #007700">(</span><span style="color: #DD0000">"Size&nbsp;X:"</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">self</span><span style="color: #007700">.</span><span style="color: #0000BB">size_x</span><span style="color: #007700">),<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(</span><span style="color: #DD0000">"Size&nbsp;Y:"</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">self</span><span style="color: #007700">.</span><span style="color: #0000BB">size_y</span><span style="color: #007700">),<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(</span><span style="color: #DD0000">"Size&nbsp;Z:"</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">self</span><span style="color: #007700">.</span><span style="color: #0000BB">size_z</span><span style="color: #007700">),<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(</span><span style="color: #DD0000">"Internal&nbsp;Port:"</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">self</span><span style="color: #007700">.</span><span style="color: #0000BB">internal_port</span><span style="color: #007700">),<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(</span><span style="color: #DD0000">"External&nbsp;Host:"</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">self</span><span style="color: #007700">.</span><span style="color: #0000BB">external_host</span><span style="color: #007700">),<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(</span><span style="color: #DD0000">"Max&nbsp;Prims:"</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">self</span><span style="color: #007700">.</span><span style="color: #0000BB">max_prims</span><span style="color: #007700">),<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(</span><span style="color: #DD0000">"Max&nbsp;Agents:"</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">self</span><span style="color: #007700">.</span><span style="color: #0000BB">max_agents</span><span style="color: #007700">),<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(</span><span style="color: #DD0000">"Maptile&nbsp;UUID:"</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">self</span><span style="color: #007700">.</span><span style="color: #0000BB">maptile_uuid</span><span style="color: #007700">),<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(</span><span style="color: #DD0000">"Internal&nbsp;Address:"</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">self</span><span style="color: #007700">.</span><span style="color: #0000BB">internal_address</span><span style="color: #007700">),<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(</span><span style="color: #DD0000">"Allow&nbsp;Alternate&nbsp;Ports:"</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">self</span><span style="color: #007700">.</span><span style="color: #0000BB">allow_alt_ports</span><span style="color: #007700">),<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(</span><span style="color: #DD0000">"Non&nbsp;Physical&nbsp;Prim&nbsp;Max:"</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">self</span><span style="color: #007700">.</span><span style="color: #0000BB">non_physical_prim_max</span><span style="color: #007700">),<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(</span><span style="color: #DD0000">"Physical&nbsp;Prim&nbsp;Max:"</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">self</span><span style="color: #007700">.</span><span style="color: #0000BB">physical_prim_max</span><span style="color: #007700">),<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(</span><span style="color: #DD0000">"Clamp&nbsp;Prim&nbsp;Size:"</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">self</span><span style="color: #007700">.</span><span style="color: #0000BB">clamp_prim_size</span><span style="color: #007700">),<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(</span><span style="color: #DD0000">"Max&nbsp;Prims&nbsp;Per&nbsp;User:"</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">self</span><span style="color: #007700">.</span><span style="color: #0000BB">max_prims_per_user</span><span style="color: #007700">),<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(</span><span style="color: #DD0000">"Scope&nbsp;ID:"</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">self</span><span style="color: #007700">.</span><span style="color: #0000BB">scope_id</span><span style="color: #007700">),<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(</span><span style="color: #DD0000">"Region&nbsp;Type:"</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">self</span><span style="color: #007700">.</span><span style="color: #0000BB">region_type</span><span style="color: #007700">),<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(</span><span style="color: #DD0000">"Render&nbsp;Min&nbsp;Height:"</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">self</span><span style="color: #007700">.</span><span style="color: #0000BB">render_min_height</span><span style="color: #007700">),<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(</span><span style="color: #DD0000">"Render&nbsp;Max&nbsp;Height:"</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">self</span><span style="color: #007700">.</span><span style="color: #0000BB">render_max_height</span><span style="color: #007700">),<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(</span><span style="color: #DD0000">"Maptile&nbsp;Static&nbsp;File:"</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">self</span><span style="color: #007700">.</span><span style="color: #0000BB">maptile_static_file</span><span style="color: #007700">),<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(</span><span style="color: #DD0000">"Master&nbsp;Avatar&nbsp;First&nbsp;Name:"</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">self</span><span style="color: #007700">.</span><span style="color: #0000BB">master_avatar_first_name</span><span style="color: #007700">),<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(</span><span style="color: #DD0000">"Master&nbsp;Avatar&nbsp;Last&nbsp;Name:"</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">self</span><span style="color: #007700">.</span><span style="color: #0000BB">master_avatar_last_name</span><span style="color: #007700">),<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(</span><span style="color: #DD0000">"Master&nbsp;Avatar&nbsp;Sandbox&nbsp;Password:"</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">self</span><span style="color: #007700">.</span><span style="color: #0000BB">master_avatar_sandbox_password</span><span style="color: #007700">),<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;]<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for&nbsp;</span><span style="color: #0000BB">idx</span><span style="color: #007700">,&nbsp;(</span><span style="color: #0000BB">label_text</span><span style="color: #007700">,&nbsp;var)&nbsp;</span><span style="color: #0000BB">in&nbsp;enumerate</span><span style="color: #007700">(</span><span style="color: #0000BB">fields</span><span style="color: #007700">):<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;</span><span style="color: #0000BB">isinstance</span><span style="color: #007700">(var,&nbsp;</span><span style="color: #0000BB">tk</span><span style="color: #007700">.</span><span style="color: #0000BB">BooleanVar</span><span style="color: #007700">):<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">tk</span><span style="color: #007700">.</span><span style="color: #0000BB">Checkbutton</span><span style="color: #007700">(</span><span style="color: #0000BB">scrollable_frame</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">text</span><span style="color: #007700">=</span><span style="color: #0000BB">label_text</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">variable</span><span style="color: #007700">=var).</span><span style="color: #0000BB">grid</span><span style="color: #007700">(</span><span style="color: #0000BB">row</span><span style="color: #007700">=</span><span style="color: #0000BB">idx</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">column</span><span style="color: #007700">=</span><span style="color: #0000BB">0</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">columnspan</span><span style="color: #007700">=</span><span style="color: #0000BB">2</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">sticky</span><span style="color: #007700">=</span><span style="color: #0000BB">tk</span><span style="color: #007700">.</span><span style="color: #0000BB">W</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">pady</span><span style="color: #007700">=</span><span style="color: #0000BB">2</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">padx</span><span style="color: #007700">=</span><span style="color: #0000BB">5</span><span style="color: #007700">)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else:<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">tk</span><span style="color: #007700">.</span><span style="color: #0000BB">Label</span><span style="color: #007700">(</span><span style="color: #0000BB">scrollable_frame</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">text</span><span style="color: #007700">=</span><span style="color: #0000BB">label_text</span><span style="color: #007700">).</span><span style="color: #0000BB">grid</span><span style="color: #007700">(</span><span style="color: #0000BB">row</span><span style="color: #007700">=</span><span style="color: #0000BB">idx</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">column</span><span style="color: #007700">=</span><span style="color: #0000BB">0</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">sticky</span><span style="color: #007700">=</span><span style="color: #0000BB">tk</span><span style="color: #007700">.</span><span style="color: #0000BB">W</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">pady</span><span style="color: #007700">=</span><span style="color: #0000BB">2</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">padx</span><span style="color: #007700">=</span><span style="color: #0000BB">5</span><span style="color: #007700">)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">entry&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">tk</span><span style="color: #007700">.</span><span style="color: #0000BB">Entry</span><span style="color: #007700">(</span><span style="color: #0000BB">scrollable_frame</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">textvariable</span><span style="color: #007700">=var,&nbsp;</span><span style="color: #0000BB">width</span><span style="color: #007700">=</span><span style="color: #0000BB">40</span><span style="color: #007700">)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">entry</span><span style="color: #007700">.</span><span style="color: #0000BB">grid</span><span style="color: #007700">(</span><span style="color: #0000BB">row</span><span style="color: #007700">=</span><span style="color: #0000BB">idx</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">column</span><span style="color: #007700">=</span><span style="color: #0000BB">1</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">sticky</span><span style="color: #007700">=</span><span style="color: #0000BB">tk</span><span style="color: #007700">.</span><span style="color: #0000BB">W</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">pady</span><span style="color: #007700">=</span><span style="color: #0000BB">2</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">padx</span><span style="color: #007700">=</span><span style="color: #0000BB">5</span><span style="color: #007700">)<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">button_frame&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">tk</span><span style="color: #007700">.</span><span style="color: #0000BB">Frame</span><span style="color: #007700">(</span><span style="color: #0000BB">scrollable_frame</span><span style="color: #007700">)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">button_frame</span><span style="color: #007700">.</span><span style="color: #0000BB">grid</span><span style="color: #007700">(</span><span style="color: #0000BB">row</span><span style="color: #007700">=</span><span style="color: #0000BB">len</span><span style="color: #007700">(</span><span style="color: #0000BB">fields</span><span style="color: #007700">),&nbsp;</span><span style="color: #0000BB">column</span><span style="color: #007700">=</span><span style="color: #0000BB">0</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">columnspan</span><span style="color: #007700">=</span><span style="color: #0000BB">2</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">pady</span><span style="color: #007700">=</span><span style="color: #0000BB">10</span><span style="color: #007700">)<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">tk</span><span style="color: #007700">.</span><span style="color: #0000BB">Button</span><span style="color: #007700">(</span><span style="color: #0000BB">button_frame</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">text</span><span style="color: #007700">=</span><span style="color: #DD0000">"Add&nbsp;Region"</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">command</span><span style="color: #007700">=</span><span style="color: #0000BB">self</span><span style="color: #007700">.</span><span style="color: #0000BB">add_region</span><span style="color: #007700">).</span><span style="color: #0000BB">pack</span><span style="color: #007700">(</span><span style="color: #0000BB">side</span><span style="color: #007700">=</span><span style="color: #DD0000">"left"</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">padx</span><span style="color: #007700">=</span><span style="color: #0000BB">10</span><span style="color: #007700">)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">tk</span><span style="color: #007700">.</span><span style="color: #0000BB">Button</span><span style="color: #007700">(</span><span style="color: #0000BB">button_frame</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">text</span><span style="color: #007700">=</span><span style="color: #DD0000">"Save&nbsp;Config"</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">command</span><span style="color: #007700">=</span><span style="color: #0000BB">self</span><span style="color: #007700">.</span><span style="color: #0000BB">save_config</span><span style="color: #007700">).</span><span style="color: #0000BB">pack</span><span style="color: #007700">(</span><span style="color: #0000BB">side</span><span style="color: #007700">=</span><span style="color: #DD0000">"left"</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">padx</span><span style="color: #007700">=</span><span style="color: #0000BB">10</span><span style="color: #007700">)<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">def&nbsp;next_flower_spiral_location</span><span style="color: #007700">(</span><span style="color: #0000BB">self</span><span style="color: #007700">):<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #FF8000">#&nbsp;Berechnung&nbsp;der&nbsp;nächsten&nbsp;Position&nbsp;in&nbsp;der&nbsp;spiralförmigen,&nbsp;blütenartigen&nbsp;Anordnung<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">self</span><span style="color: #007700">.</span><span style="color: #0000BB">angle&nbsp;</span><span style="color: #007700">+=&nbsp;</span><span style="color: #0000BB">137.5&nbsp;&nbsp;</span><span style="color: #FF8000">#&nbsp;Goldener&nbsp;Winkel&nbsp;in&nbsp;Grad<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">radians&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">math</span><span style="color: #007700">.</span><span style="color: #0000BB">radians</span><span style="color: #007700">(</span><span style="color: #0000BB">self</span><span style="color: #007700">.</span><span style="color: #0000BB">angle</span><span style="color: #007700">)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">location_x&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">1000&nbsp;</span><span style="color: #007700">+&nbsp;</span><span style="color: #0000BB">int</span><span style="color: #007700">(</span><span style="color: #0000BB">self</span><span style="color: #007700">.</span><span style="color: #0000BB">radius&nbsp;</span><span style="color: #007700">*&nbsp;</span><span style="color: #0000BB">math</span><span style="color: #007700">.</span><span style="color: #0000BB">cos</span><span style="color: #007700">(</span><span style="color: #0000BB">radians</span><span style="color: #007700">))<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">location_y&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">1000&nbsp;</span><span style="color: #007700">+&nbsp;</span><span style="color: #0000BB">int</span><span style="color: #007700">(</span><span style="color: #0000BB">self</span><span style="color: #007700">.</span><span style="color: #0000BB">radius&nbsp;</span><span style="color: #007700">*&nbsp;</span><span style="color: #0000BB">math</span><span style="color: #007700">.</span><span style="color: #0000BB">sin</span><span style="color: #007700">(</span><span style="color: #0000BB">radians</span><span style="color: #007700">))<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">self</span><span style="color: #007700">.</span><span style="color: #0000BB">radius&nbsp;</span><span style="color: #007700">+=&nbsp;</span><span style="color: #0000BB">1&nbsp;&nbsp;</span><span style="color: #FF8000">#&nbsp;Erhöhe&nbsp;den&nbsp;Radius&nbsp;schrittweise&nbsp;für&nbsp;den&nbsp;nächsten&nbsp;Punkt<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #007700">return&nbsp;</span><span style="color: #0000BB">location_x</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">location_y<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;def&nbsp;add_region</span><span style="color: #007700">(</span><span style="color: #0000BB">self</span><span style="color: #007700">):<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">location&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">self</span><span style="color: #007700">.</span><span style="color: #0000BB">next_flower_spiral_location</span><span style="color: #007700">()<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">self</span><span style="color: #007700">.</span><span style="color: #0000BB">locations</span><span style="color: #007700">.</span><span style="color: #0000BB">append</span><span style="color: #007700">(</span><span style="color: #0000BB">location</span><span style="color: #007700">)<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">new_uuid&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">str</span><span style="color: #007700">(</span><span style="color: #0000BB">uuid</span><span style="color: #007700">.</span><span style="color: #0000BB">uuid4</span><span style="color: #007700">())<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">self</span><span style="color: #007700">.</span><span style="color: #0000BB">region_count&nbsp;</span><span style="color: #007700">+=&nbsp;</span><span style="color: #0000BB">1<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self</span><span style="color: #007700">.</span><span style="color: #0000BB">region_name</span><span style="color: #007700">.</span><span style="color: #0000BB">set</span><span style="color: #007700">(</span><span style="color: #0000BB">f</span><span style="color: #DD0000">"TestRegion_{self.region_count}"</span><span style="color: #007700">)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">self</span><span style="color: #007700">.</span><span style="color: #0000BB">region_uuid</span><span style="color: #007700">.</span><span style="color: #0000BB">set</span><span style="color: #007700">(</span><span style="color: #0000BB">new_uuid</span><span style="color: #007700">)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">self</span><span style="color: #007700">.</span><span style="color: #0000BB">internal_port</span><span style="color: #007700">.</span><span style="color: #0000BB">set</span><span style="color: #007700">(</span><span style="color: #0000BB">self</span><span style="color: #007700">.</span><span style="color: #0000BB">internal_port</span><span style="color: #007700">.</span><span style="color: #0000BB">get</span><span style="color: #007700">()&nbsp;+&nbsp;</span><span style="color: #0000BB">1</span><span style="color: #007700">)<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">self</span><span style="color: #007700">.</span><span style="color: #0000BB">location</span><span style="color: #007700">.</span><span style="color: #0000BB">set</span><span style="color: #007700">(</span><span style="color: #0000BB">f</span><span style="color: #DD0000">"{location[0]},{location[1]}"</span><span style="color: #007700">)&nbsp;&nbsp;</span><span style="color: #FF8000">#&nbsp;Update&nbsp;the&nbsp;location<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">messagebox</span><span style="color: #007700">.</span><span style="color: #0000BB">showinfo</span><span style="color: #007700">(</span><span style="color: #DD0000">"Region&nbsp;Added"</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">f</span><span style="color: #DD0000">"Region&nbsp;{self.region_name.get()}&nbsp;hinzugefügt.&nbsp;Location:&nbsp;({location[0]},{location[1]})"</span><span style="color: #007700">)<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">def&nbsp;save_config</span><span style="color: #007700">(</span><span style="color: #0000BB">self</span><span style="color: #007700">):<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">filename&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">filedialog</span><span style="color: #007700">.</span><span style="color: #0000BB">asksaveasfilename</span><span style="color: #007700">(</span><span style="color: #0000BB">defaultextension</span><span style="color: #007700">=</span><span style="color: #DD0000">".ini"</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">filetypes</span><span style="color: #007700">=[(</span><span style="color: #DD0000">"INI&nbsp;files"</span><span style="color: #007700">,&nbsp;</span><span style="color: #DD0000">"*.ini"</span><span style="color: #007700">)])<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;</span><span style="color: #0000BB">filename</span><span style="color: #007700">:<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">config&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">configparser</span><span style="color: #007700">.</span><span style="color: #0000BB">ConfigParser</span><span style="color: #007700">()<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for&nbsp;</span><span style="color: #0000BB">i&nbsp;in&nbsp;range</span><span style="color: #007700">(</span><span style="color: #0000BB">1</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">self</span><span style="color: #007700">.</span><span style="color: #0000BB">region_count&nbsp;</span><span style="color: #007700">+&nbsp;</span><span style="color: #0000BB">1</span><span style="color: #007700">):<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;</span><span style="color: #0000BB">i&nbsp;</span><span style="color: #007700">==&nbsp;</span><span style="color: #0000BB">1</span><span style="color: #007700">:<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">region_name&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">self</span><span style="color: #007700">.</span><span style="color: #0000BB">region_name</span><span style="color: #007700">.</span><span style="color: #0000BB">get</span><span style="color: #007700">()<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">region_uuid&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">self</span><span style="color: #007700">.</span><span style="color: #0000BB">region_uuid</span><span style="color: #007700">.</span><span style="color: #0000BB">get</span><span style="color: #007700">()<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">location_x</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">location_y&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">map</span><span style="color: #007700">(</span><span style="color: #0000BB">int</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">self</span><span style="color: #007700">.</span><span style="color: #0000BB">location</span><span style="color: #007700">.</span><span style="color: #0000BB">get</span><span style="color: #007700">().</span><span style="color: #0000BB">split</span><span style="color: #007700">(</span><span style="color: #DD0000">','</span><span style="color: #007700">))&nbsp;&nbsp;</span><span style="color: #FF8000">#&nbsp;Erste&nbsp;Region<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #007700">else:<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">region_name&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">f</span><span style="color: #DD0000">"TestRegion_{i}"<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">region_uuid&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">str</span><span style="color: #007700">(</span><span style="color: #0000BB">uuid</span><span style="color: #007700">.</span><span style="color: #0000BB">uuid4</span><span style="color: #007700">())<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">location_x</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">location_y&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">self</span><span style="color: #007700">.</span><span style="color: #0000BB">locations</span><span style="color: #007700">[</span><span style="color: #0000BB">i</span><span style="color: #007700">-</span><span style="color: #0000BB">1</span><span style="color: #007700">]&nbsp;&nbsp;</span><span style="color: #FF8000">#&nbsp;Spezielle&nbsp;Location&nbsp;für&nbsp;jede&nbsp;Region<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">config</span><span style="color: #007700">[</span><span style="color: #0000BB">region_name</span><span style="color: #007700">]&nbsp;=&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #DD0000">"RegionUUID"</span><span style="color: #007700">:&nbsp;</span><span style="color: #0000BB">region_uuid</span><span style="color: #007700">,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #DD0000">"Location"</span><span style="color: #007700">:&nbsp;</span><span style="color: #0000BB">f</span><span style="color: #DD0000">"{location_x},{location_y}"</span><span style="color: #007700">,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #DD0000">"SizeX"</span><span style="color: #007700">:&nbsp;</span><span style="color: #0000BB">self</span><span style="color: #007700">.</span><span style="color: #0000BB">size_x</span><span style="color: #007700">.</span><span style="color: #0000BB">get</span><span style="color: #007700">(),<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #DD0000">"SizeY"</span><span style="color: #007700">:&nbsp;</span><span style="color: #0000BB">self</span><span style="color: #007700">.</span><span style="color: #0000BB">size_y</span><span style="color: #007700">.</span><span style="color: #0000BB">get</span><span style="color: #007700">(),<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #DD0000">"SizeZ"</span><span style="color: #007700">:&nbsp;</span><span style="color: #0000BB">self</span><span style="color: #007700">.</span><span style="color: #0000BB">size_z</span><span style="color: #007700">.</span><span style="color: #0000BB">get</span><span style="color: #007700">(),<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #DD0000">"InternalPort"</span><span style="color: #007700">:&nbsp;</span><span style="color: #0000BB">self</span><span style="color: #007700">.</span><span style="color: #0000BB">internal_port</span><span style="color: #007700">.</span><span style="color: #0000BB">get</span><span style="color: #007700">()&nbsp;+&nbsp;(</span><span style="color: #0000BB">i&nbsp;</span><span style="color: #007700">-&nbsp;</span><span style="color: #0000BB">1</span><span style="color: #007700">),<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #DD0000">"ExternalHostName"</span><span style="color: #007700">:&nbsp;</span><span style="color: #0000BB">self</span><span style="color: #007700">.</span><span style="color: #0000BB">external_host</span><span style="color: #007700">.</span><span style="color: #0000BB">get</span><span style="color: #007700">(),<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #DD0000">"MaxPrims"</span><span style="color: #007700">:&nbsp;</span><span style="color: #0000BB">self</span><span style="color: #007700">.</span><span style="color: #0000BB">max_prims</span><span style="color: #007700">.</span><span style="color: #0000BB">get</span><span style="color: #007700">(),<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #DD0000">"MaxAgents"</span><span style="color: #007700">:&nbsp;</span><span style="color: #0000BB">self</span><span style="color: #007700">.</span><span style="color: #0000BB">max_agents</span><span style="color: #007700">.</span><span style="color: #0000BB">get</span><span style="color: #007700">(),<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #DD0000">"MaptileStaticUUID"</span><span style="color: #007700">:&nbsp;</span><span style="color: #0000BB">self</span><span style="color: #007700">.</span><span style="color: #0000BB">maptile_uuid</span><span style="color: #007700">.</span><span style="color: #0000BB">get</span><span style="color: #007700">(),<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #DD0000">"InternalAddress"</span><span style="color: #007700">:&nbsp;</span><span style="color: #0000BB">self</span><span style="color: #007700">.</span><span style="color: #0000BB">internal_address</span><span style="color: #007700">.</span><span style="color: #0000BB">get</span><span style="color: #007700">(),<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #DD0000">"AllowAlternatePorts"</span><span style="color: #007700">:&nbsp;</span><span style="color: #0000BB">self</span><span style="color: #007700">.</span><span style="color: #0000BB">allow_alt_ports</span><span style="color: #007700">.</span><span style="color: #0000BB">get</span><span style="color: #007700">(),<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #DD0000">"NonPhysicalPrimMax"</span><span style="color: #007700">:&nbsp;</span><span style="color: #0000BB">self</span><span style="color: #007700">.</span><span style="color: #0000BB">non_physical_prim_max</span><span style="color: #007700">.</span><span style="color: #0000BB">get</span><span style="color: #007700">(),<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #DD0000">"PhysicalPrimMax"</span><span style="color: #007700">:&nbsp;</span><span style="color: #0000BB">self</span><span style="color: #007700">.</span><span style="color: #0000BB">physical_prim_max</span><span style="color: #007700">.</span><span style="color: #0000BB">get</span><span style="color: #007700">(),<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #DD0000">"ClampPrimSize"</span><span style="color: #007700">:&nbsp;</span><span style="color: #0000BB">str</span><span style="color: #007700">(</span><span style="color: #0000BB">self</span><span style="color: #007700">.</span><span style="color: #0000BB">clamp_prim_size</span><span style="color: #007700">.</span><span style="color: #0000BB">get</span><span style="color: #007700">()),<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #DD0000">"MaxPrimsPerUser"</span><span style="color: #007700">:&nbsp;</span><span style="color: #0000BB">self</span><span style="color: #007700">.</span><span style="color: #0000BB">max_prims_per_user</span><span style="color: #007700">.</span><span style="color: #0000BB">get</span><span style="color: #007700">(),<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #DD0000">"ScopeID"</span><span style="color: #007700">:&nbsp;</span><span style="color: #0000BB">self</span><span style="color: #007700">.</span><span style="color: #0000BB">scope_id</span><span style="color: #007700">.</span><span style="color: #0000BB">get</span><span style="color: #007700">(),<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #DD0000">"RegionType"</span><span style="color: #007700">:&nbsp;</span><span style="color: #0000BB">self</span><span style="color: #007700">.</span><span style="color: #0000BB">region_type</span><span style="color: #007700">.</span><span style="color: #0000BB">get</span><span style="color: #007700">(),<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #DD0000">"RenderMinHeight"</span><span style="color: #007700">:&nbsp;</span><span style="color: #0000BB">self</span><span style="color: #007700">.</span><span style="color: #0000BB">render_min_height</span><span style="color: #007700">.</span><span style="color: #0000BB">get</span><span style="color: #007700">(),<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #DD0000">"RenderMaxHeight"</span><span style="color: #007700">:&nbsp;</span><span style="color: #0000BB">self</span><span style="color: #007700">.</span><span style="color: #0000BB">render_max_height</span><span style="color: #007700">.</span><span style="color: #0000BB">get</span><span style="color: #007700">(),<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #DD0000">"MaptileStaticFile"</span><span style="color: #007700">:&nbsp;</span><span style="color: #0000BB">self</span><span style="color: #007700">.</span><span style="color: #0000BB">maptile_static_file</span><span style="color: #007700">.</span><span style="color: #0000BB">get</span><span style="color: #007700">(),<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #DD0000">"MasterAvatarFirstName"</span><span style="color: #007700">:&nbsp;</span><span style="color: #0000BB">self</span><span style="color: #007700">.</span><span style="color: #0000BB">master_avatar_first_name</span><span style="color: #007700">.</span><span style="color: #0000BB">get</span><span style="color: #007700">(),<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #DD0000">"MasterAvatarLastName"</span><span style="color: #007700">:&nbsp;</span><span style="color: #0000BB">self</span><span style="color: #007700">.</span><span style="color: #0000BB">master_avatar_last_name</span><span style="color: #007700">.</span><span style="color: #0000BB">get</span><span style="color: #007700">(),<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #DD0000">"MasterAvatarSandboxPassword"</span><span style="color: #007700">:&nbsp;</span><span style="color: #0000BB">self</span><span style="color: #007700">.</span><span style="color: #0000BB">master_avatar_sandbox_password</span><span style="color: #007700">.</span><span style="color: #0000BB">get</span><span style="color: #007700">(),<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">with&nbsp;open</span><span style="color: #007700">(</span><span style="color: #0000BB">filename</span><span style="color: #007700">,&nbsp;</span><span style="color: #DD0000">'w'</span><span style="color: #007700">)&nbsp;as&nbsp;</span><span style="color: #0000BB">configfile</span><span style="color: #007700">:<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">config</span><span style="color: #007700">.</span><span style="color: #0000BB">write</span><span style="color: #007700">(</span><span style="color: #0000BB">configfile</span><span style="color: #007700">)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">messagebox</span><span style="color: #007700">.</span><span style="color: #0000BB">showinfo</span><span style="color: #007700">(</span><span style="color: #DD0000">"Gespeichert"</span><span style="color: #007700">,&nbsp;</span><span style="color: #DD0000">"Konfiguration&nbsp;erfolgreich&nbsp;gespeichert."</span><span style="color: #007700">)<br /><br />if&nbsp;</span><span style="color: #0000BB">__name__&nbsp;</span><span style="color: #007700">==&nbsp;</span><span style="color: #DD0000">"__main__"</span><span style="color: #007700">:<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">root&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">tk</span><span style="color: #007700">.</span><span style="color: #0000BB">Tk</span><span style="color: #007700">()<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">app&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">RegionConfigApp</span><span style="color: #007700">(</span><span style="color: #0000BB">root</span><span style="color: #007700">)<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">root</span><span style="color: #007700">.</span><span style="color: #0000BB">mainloop</span><span style="color: #007700">()&nbsp;<br /></span></code></div></div></div><span style="font-weight: bold;" class="mycode_b">Sourcecode als Text:</span> <!-- start: postbit_attachments_attachment -->
<br /><!-- start: attachment_icon -->
<img src="https://www.gridtalk.de/images/attachtypes/txt.gif" title="Text Document" border="0" alt=".txt" />
<!-- end: attachment_icon -->&nbsp;&nbsp;<a href="attachment.php?aid=7154" target="_blank" title="">OpenSimRegionConfig5.py.txt</a> (Größe: 8,96 KB / Downloads: 243)
<!-- end: postbit_attachments_attachment -->]]></description>
			<content:encoded><![CDATA[Anleitung zur Nutzung des Regionenkonfigurators<br />
<br />
Hier ist eine Schritt-für-Schritt-Anleitung zur Verwendung des Python-Skripts, das eine GUI-Anwendung erstellt, um Regionskonfigurationen zu generieren.<br />
<br />
### Voraussetzungen:<br />
- **Python 3.x**: Stelle sicher, dass Python auf deinem System installiert ist.<br />
- **Tkinter**: Tkinter ist normalerweise in Python vorinstalliert. Falls es fehlt, installiere es mit:<br />
  ```bash<br />
  sudo apt-get install python3-tk<br />
  ```<br />
<br />
### 1. Überblick:<br />
Dieses Skript erstellt eine grafische Benutzeroberfläche (GUI), mit der du verschiedene Einstellungen für Regionen vornehmen kannst, die anschließend in einer `.ini`-Konfigurationsdatei gespeichert werden. Jede Region hat verschiedene Parameter wie Größe, UUID, Position (Location) und viele andere, die du individuell konfigurieren kannst.<br />
<br />
### 2. Skript ausführen:<br />
1. **Python-Datei erstellen**: Erstelle eine Datei namens `region_config_app.py` und kopiere den bereitgestellten Python-Code in diese Datei.<br />
2. **Skript starten**: Öffne ein Terminal oder eine Eingabeaufforderung und navigiere zu dem Verzeichnis, in dem sich die Datei befindet. Führe das Skript mit folgendem Befehl aus:<br />
   ```bash<br />
   python region_config_app.py<br />
   ```<br />
3. **GUI-Anwendung**: Nach dem Ausführen öffnet sich ein Fenster mit der Benutzeroberfläche.<br />
<br />
### 3. Verwendung der GUI:<br />
1. **Felder ausfüllen**: Die Benutzeroberfläche zeigt verschiedene Felder an, in denen du die gewünschten Parameter für eine Region anpassen kannst.<br />
    - **Region Name**: Name der Region.<br />
    - **Region UUID**: Eindeutige Identifikationsnummer der Region.<br />
    - **Location**: Der Standort der Region (x, y), standardmäßig auf `1000,1000` gesetzt. Es wird automatisch angepasst, wenn du eine neue Region hinzufügst.<br />
    - **Size X, Y, Z**: Dimensionen der Region.<br />
    - **Internal Port**: Interner Netzwerkport.<br />
    - **External Host**: Externer Hostname.<br />
    - **Maptile UUID**: UUID für die Kartendatei, die die Region repräsentiert. Wird automatisch auf die Region UUID gesetzt.<br />
    - **Weitere Parameter**: Andere Einstellungen wie Maximalanzahl an Prims, Agenten, ScopeID usw.<br />
2. **Region hinzufügen**: Klicke auf die Schaltfläche **"Add Region"**. Dadurch wird eine neue Region mit einer eigenen UUID und einem neuen Standort (basierend auf einer spiralförmigen Berechnung) erstellt.<br />
3. **Konfiguration speichern**: Nachdem du die gewünschten Regionen hinzugefügt hast, klicke auf **"Save Config"**, um die Konfigurationen in einer `.ini`-Datei zu speichern. Wähle einen Speicherort und einen Dateinamen.<br />
<br />
### 4. Ergebnis:<br />
- Die erstellte `.ini`-Datei enthält Abschnitte für jede Region mit den von dir festgelegten Konfigurationen. Jede Region erhält eine eigene `Location`, `UUID` und andere Parameter.<br />
<br />
### 5. Beispielhafte INI-Datei:<br />
Die gespeicherte Datei könnte in etwa so aussehen:<br />
<br />
```ini<br />
<div class="codeblock phpcodeblock"><div class="title">PHP-Code:</div><div class="body"><div dir="ltr"><code><span style="color: #007700">[</span><span style="color: #0000BB">TestRegion_1</span><span style="color: #007700">]<br /></span><span style="color: #0000BB">RegionUUID&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">123e4567</span><span style="color: #007700">-</span><span style="color: #0000BB">e89b</span><span style="color: #007700">-</span><span style="color: #0000BB">12d3</span><span style="color: #007700">-</span><span style="color: #0000BB">a456</span><span style="color: #007700">-</span><span style="color: #0000BB">426614174000<br />Location&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">1000</span><span style="color: #007700">,</span><span style="color: #0000BB">1000<br />SizeX&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">256<br />SizeY&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">256<br />SizeZ&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">256<br />InternalPort&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">9050<br />ExternalHostName&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">SYSTEMIP<br />MaxPrims&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">100000<br />MaxAgents&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">99<br />MaptileStaticUUID&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">123e4567</span><span style="color: #007700">-</span><span style="color: #0000BB">e89b</span><span style="color: #007700">-</span><span style="color: #0000BB">12d3</span><span style="color: #007700">-</span><span style="color: #0000BB">a456</span><span style="color: #007700">-</span><span style="color: #0000BB">426614174000<br /></span><span style="color: #007700">...<br /><br />[</span><span style="color: #0000BB">TestRegion_2</span><span style="color: #007700">]<br /></span><span style="color: #0000BB">RegionUUID&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">223e4567</span><span style="color: #007700">-</span><span style="color: #0000BB">e89b</span><span style="color: #007700">-</span><span style="color: #0000BB">12d3</span><span style="color: #007700">-</span><span style="color: #0000BB">a456</span><span style="color: #007700">-</span><span style="color: #0000BB">426614174001<br />Location&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">1001</span><span style="color: #007700">,</span><span style="color: #0000BB">1001<br />SizeX&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">256<br />SizeY&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">256<br />SizeZ&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">256<br />InternalPort&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">9051<br />ExternalHostName&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">SYSTEMIP<br />MaxPrims&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">100000<br />MaxAgents&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">99<br />MaptileStaticUUID&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">223e4567</span><span style="color: #007700">-</span><span style="color: #0000BB">e89b</span><span style="color: #007700">-</span><span style="color: #0000BB">12d3</span><span style="color: #007700">-</span><span style="color: #0000BB">a456</span><span style="color: #007700">-</span><span style="color: #0000BB">426614174001&nbsp;<br /></span></code></div></div></div>...<br />
```<br />
<br />
### 6. Erweiterungen und Anpassungen:<br />
Du kannst den Code anpassen, um zusätzliche Parameter hinzuzufügen oder die Art und Weise zu ändern, wie `Locations` berechnet werden.<br />
<br />
### 7. Fehlerbehebung:<br />
- **Tkinter nicht gefunden**: Stelle sicher, dass Tkinter installiert ist.<br />
- **INI-Datei wird nicht gespeichert**: Überprüfe die Dateiberechtigungen im Zielverzeichnis.<br />
<br />
Mit dieser Anleitung solltest du in der Lage sein, das Skript erfolgreich zu verwenden und benutzerdefinierte Konfigurationen für Regionen zu erstellen und zu verwalten.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Sourcecode:</span><br />
<div class="codeblock phpcodeblock"><div class="title">PHP-Code:</div><div class="body"><div dir="ltr"><code><span style="color: #0000BB">import&nbsp;tkinter&nbsp;</span><span style="color: #007700">as&nbsp;</span><span style="color: #0000BB">tk<br />from&nbsp;tkinter&nbsp;import&nbsp;messagebox</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">filedialog<br />import&nbsp;configparser<br />import&nbsp;uuid<br />import&nbsp;math<br /><br /></span><span style="color: #007700">class&nbsp;</span><span style="color: #0000BB">RegionConfigApp</span><span style="color: #007700">:<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">def&nbsp;__init__</span><span style="color: #007700">(</span><span style="color: #0000BB">self</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">root</span><span style="color: #007700">):<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">self</span><span style="color: #007700">.</span><span style="color: #0000BB">root&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">root<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self</span><span style="color: #007700">.</span><span style="color: #0000BB">root</span><span style="color: #007700">.</span><span style="color: #0000BB">title</span><span style="color: #007700">(</span><span style="color: #DD0000">"Region&nbsp;Configurations"</span><span style="color: #007700">)<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #FF8000">#&nbsp;Set&nbsp;window&nbsp;size<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">self</span><span style="color: #007700">.</span><span style="color: #0000BB">root</span><span style="color: #007700">.</span><span style="color: #0000BB">geometry</span><span style="color: #007700">(</span><span style="color: #DD0000">"450x700"</span><span style="color: #007700">)<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #FF8000">#&nbsp;Initialize&nbsp;variables&nbsp;with&nbsp;default&nbsp;values<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">self</span><span style="color: #007700">.</span><span style="color: #0000BB">region_name&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">tk</span><span style="color: #007700">.</span><span style="color: #0000BB">StringVar</span><span style="color: #007700">(</span><span style="color: #0000BB">value</span><span style="color: #007700">=</span><span style="color: #DD0000">"TestRegion"</span><span style="color: #007700">)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">self</span><span style="color: #007700">.</span><span style="color: #0000BB">region_uuid&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">tk</span><span style="color: #007700">.</span><span style="color: #0000BB">StringVar</span><span style="color: #007700">(</span><span style="color: #0000BB">value</span><span style="color: #007700">=</span><span style="color: #0000BB">str</span><span style="color: #007700">(</span><span style="color: #0000BB">uuid</span><span style="color: #007700">.</span><span style="color: #0000BB">uuid4</span><span style="color: #007700">()))<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">self</span><span style="color: #007700">.</span><span style="color: #0000BB">maptile_uuid&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">tk</span><span style="color: #007700">.</span><span style="color: #0000BB">StringVar</span><span style="color: #007700">(</span><span style="color: #0000BB">value</span><span style="color: #007700">=</span><span style="color: #0000BB">self</span><span style="color: #007700">.</span><span style="color: #0000BB">region_uuid</span><span style="color: #007700">.</span><span style="color: #0000BB">get</span><span style="color: #007700">())<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #FF8000">#&nbsp;Location&nbsp;variable&nbsp;for&nbsp;grid&nbsp;position<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">self</span><span style="color: #007700">.</span><span style="color: #0000BB">location&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">tk</span><span style="color: #007700">.</span><span style="color: #0000BB">StringVar</span><span style="color: #007700">(</span><span style="color: #0000BB">value</span><span style="color: #007700">=</span><span style="color: #DD0000">"1000,1000"</span><span style="color: #007700">)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">self</span><span style="color: #007700">.</span><span style="color: #0000BB">size_x&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">tk</span><span style="color: #007700">.</span><span style="color: #0000BB">IntVar</span><span style="color: #007700">(</span><span style="color: #0000BB">value</span><span style="color: #007700">=</span><span style="color: #0000BB">256</span><span style="color: #007700">)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">self</span><span style="color: #007700">.</span><span style="color: #0000BB">size_y&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">tk</span><span style="color: #007700">.</span><span style="color: #0000BB">IntVar</span><span style="color: #007700">(</span><span style="color: #0000BB">value</span><span style="color: #007700">=</span><span style="color: #0000BB">256</span><span style="color: #007700">)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">self</span><span style="color: #007700">.</span><span style="color: #0000BB">size_z&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">tk</span><span style="color: #007700">.</span><span style="color: #0000BB">IntVar</span><span style="color: #007700">(</span><span style="color: #0000BB">value</span><span style="color: #007700">=</span><span style="color: #0000BB">256</span><span style="color: #007700">)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">self</span><span style="color: #007700">.</span><span style="color: #0000BB">internal_port&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">tk</span><span style="color: #007700">.</span><span style="color: #0000BB">IntVar</span><span style="color: #007700">(</span><span style="color: #0000BB">value</span><span style="color: #007700">=</span><span style="color: #0000BB">9050</span><span style="color: #007700">)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">self</span><span style="color: #007700">.</span><span style="color: #0000BB">external_host&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">tk</span><span style="color: #007700">.</span><span style="color: #0000BB">StringVar</span><span style="color: #007700">(</span><span style="color: #0000BB">value</span><span style="color: #007700">=</span><span style="color: #DD0000">"SYSTEMIP"</span><span style="color: #007700">)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">self</span><span style="color: #007700">.</span><span style="color: #0000BB">max_prims&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">tk</span><span style="color: #007700">.</span><span style="color: #0000BB">IntVar</span><span style="color: #007700">(</span><span style="color: #0000BB">value</span><span style="color: #007700">=</span><span style="color: #0000BB">100000</span><span style="color: #007700">)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">self</span><span style="color: #007700">.</span><span style="color: #0000BB">max_agents&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">tk</span><span style="color: #007700">.</span><span style="color: #0000BB">IntVar</span><span style="color: #007700">(</span><span style="color: #0000BB">value</span><span style="color: #007700">=</span><span style="color: #0000BB">99</span><span style="color: #007700">)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">self</span><span style="color: #007700">.</span><span style="color: #0000BB">internal_address&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">tk</span><span style="color: #007700">.</span><span style="color: #0000BB">StringVar</span><span style="color: #007700">(</span><span style="color: #0000BB">value</span><span style="color: #007700">=</span><span style="color: #DD0000">"0.0.0.0"</span><span style="color: #007700">)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">self</span><span style="color: #007700">.</span><span style="color: #0000BB">allow_alt_ports&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">tk</span><span style="color: #007700">.</span><span style="color: #0000BB">BooleanVar</span><span style="color: #007700">(</span><span style="color: #0000BB">value</span><span style="color: #007700">=</span><span style="color: #0000BB">False</span><span style="color: #007700">)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">self</span><span style="color: #007700">.</span><span style="color: #0000BB">non_physical_prim_max&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">tk</span><span style="color: #007700">.</span><span style="color: #0000BB">IntVar</span><span style="color: #007700">(</span><span style="color: #0000BB">value</span><span style="color: #007700">=</span><span style="color: #0000BB">256</span><span style="color: #007700">)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">self</span><span style="color: #007700">.</span><span style="color: #0000BB">physical_prim_max&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">tk</span><span style="color: #007700">.</span><span style="color: #0000BB">IntVar</span><span style="color: #007700">(</span><span style="color: #0000BB">value</span><span style="color: #007700">=</span><span style="color: #0000BB">64</span><span style="color: #007700">)<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #FF8000">#&nbsp;New&nbsp;variables&nbsp;for&nbsp;additional&nbsp;settings<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">self</span><span style="color: #007700">.</span><span style="color: #0000BB">clamp_prim_size&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">tk</span><span style="color: #007700">.</span><span style="color: #0000BB">BooleanVar</span><span style="color: #007700">(</span><span style="color: #0000BB">value</span><span style="color: #007700">=</span><span style="color: #0000BB">False</span><span style="color: #007700">)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">self</span><span style="color: #007700">.</span><span style="color: #0000BB">max_prims_per_user&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">tk</span><span style="color: #007700">.</span><span style="color: #0000BB">IntVar</span><span style="color: #007700">(</span><span style="color: #0000BB">value</span><span style="color: #007700">=-</span><span style="color: #0000BB">1</span><span style="color: #007700">)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">self</span><span style="color: #007700">.</span><span style="color: #0000BB">scope_id&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">tk</span><span style="color: #007700">.</span><span style="color: #0000BB">StringVar</span><span style="color: #007700">(</span><span style="color: #0000BB">value</span><span style="color: #007700">=</span><span style="color: #0000BB">self</span><span style="color: #007700">.</span><span style="color: #0000BB">region_uuid</span><span style="color: #007700">.</span><span style="color: #0000BB">get</span><span style="color: #007700">())<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">self</span><span style="color: #007700">.</span><span style="color: #0000BB">region_type&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">tk</span><span style="color: #007700">.</span><span style="color: #0000BB">StringVar</span><span style="color: #007700">(</span><span style="color: #0000BB">value</span><span style="color: #007700">=</span><span style="color: #DD0000">"Mainland"</span><span style="color: #007700">)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">self</span><span style="color: #007700">.</span><span style="color: #0000BB">render_min_height&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">tk</span><span style="color: #007700">.</span><span style="color: #0000BB">IntVar</span><span style="color: #007700">(</span><span style="color: #0000BB">value</span><span style="color: #007700">=-</span><span style="color: #0000BB">1</span><span style="color: #007700">)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">self</span><span style="color: #007700">.</span><span style="color: #0000BB">render_max_height&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">tk</span><span style="color: #007700">.</span><span style="color: #0000BB">IntVar</span><span style="color: #007700">(</span><span style="color: #0000BB">value</span><span style="color: #007700">=</span><span style="color: #0000BB">100</span><span style="color: #007700">)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">self</span><span style="color: #007700">.</span><span style="color: #0000BB">maptile_static_file&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">tk</span><span style="color: #007700">.</span><span style="color: #0000BB">StringVar</span><span style="color: #007700">(</span><span style="color: #0000BB">value</span><span style="color: #007700">=</span><span style="color: #DD0000">"SomeFile.png"</span><span style="color: #007700">)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">self</span><span style="color: #007700">.</span><span style="color: #0000BB">master_avatar_first_name&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">tk</span><span style="color: #007700">.</span><span style="color: #0000BB">StringVar</span><span style="color: #007700">(</span><span style="color: #0000BB">value</span><span style="color: #007700">=</span><span style="color: #DD0000">"John"</span><span style="color: #007700">)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">self</span><span style="color: #007700">.</span><span style="color: #0000BB">master_avatar_last_name&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">tk</span><span style="color: #007700">.</span><span style="color: #0000BB">StringVar</span><span style="color: #007700">(</span><span style="color: #0000BB">value</span><span style="color: #007700">=</span><span style="color: #DD0000">"Doe"</span><span style="color: #007700">)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">self</span><span style="color: #007700">.</span><span style="color: #0000BB">master_avatar_sandbox_password&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">tk</span><span style="color: #007700">.</span><span style="color: #0000BB">StringVar</span><span style="color: #007700">(</span><span style="color: #0000BB">value</span><span style="color: #007700">=</span><span style="color: #DD0000">"passwd"</span><span style="color: #007700">)<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">self</span><span style="color: #007700">.</span><span style="color: #0000BB">region_count&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">0&nbsp;&nbsp;</span><span style="color: #FF8000">#&nbsp;Startet&nbsp;bei&nbsp;0<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">self</span><span style="color: #007700">.</span><span style="color: #0000BB">angle&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">0<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self</span><span style="color: #007700">.</span><span style="color: #0000BB">radius&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">1&nbsp;&nbsp;</span><span style="color: #FF8000">#&nbsp;Initialer&nbsp;Radius<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">self</span><span style="color: #007700">.</span><span style="color: #0000BB">locations&nbsp;</span><span style="color: #007700">=&nbsp;[]&nbsp;&nbsp;</span><span style="color: #FF8000">#&nbsp;Liste&nbsp;für&nbsp;die&nbsp;Locations&nbsp;aller&nbsp;Regionen<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#&nbsp;Trace&nbsp;changes&nbsp;to&nbsp;region_uuid&nbsp;to&nbsp;update&nbsp;maptile_uuid&nbsp;accordingly<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">self</span><span style="color: #007700">.</span><span style="color: #0000BB">region_uuid</span><span style="color: #007700">.</span><span style="color: #0000BB">trace_add</span><span style="color: #007700">(</span><span style="color: #DD0000">'write'</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">self</span><span style="color: #007700">.</span><span style="color: #0000BB">update_maptile_uuid</span><span style="color: #007700">)<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #FF8000">#&nbsp;Build&nbsp;the&nbsp;UI<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">self</span><span style="color: #007700">.</span><span style="color: #0000BB">build_ui</span><span style="color: #007700">()<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">def&nbsp;update_maptile_uuid</span><span style="color: #007700">(</span><span style="color: #0000BB">self</span><span style="color: #007700">,&nbsp;*</span><span style="color: #0000BB">args</span><span style="color: #007700">):<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">self</span><span style="color: #007700">.</span><span style="color: #0000BB">maptile_uuid</span><span style="color: #007700">.</span><span style="color: #0000BB">set</span><span style="color: #007700">(</span><span style="color: #0000BB">self</span><span style="color: #007700">.</span><span style="color: #0000BB">region_uuid</span><span style="color: #007700">.</span><span style="color: #0000BB">get</span><span style="color: #007700">())<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">def&nbsp;build_ui</span><span style="color: #007700">(</span><span style="color: #0000BB">self</span><span style="color: #007700">):<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">canvas&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">tk</span><span style="color: #007700">.</span><span style="color: #0000BB">Canvas</span><span style="color: #007700">(</span><span style="color: #0000BB">self</span><span style="color: #007700">.</span><span style="color: #0000BB">root</span><span style="color: #007700">)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">scrollbar&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">tk</span><span style="color: #007700">.</span><span style="color: #0000BB">Scrollbar</span><span style="color: #007700">(</span><span style="color: #0000BB">self</span><span style="color: #007700">.</span><span style="color: #0000BB">root</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">orient</span><span style="color: #007700">=</span><span style="color: #DD0000">"vertical"</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">command</span><span style="color: #007700">=</span><span style="color: #0000BB">canvas</span><span style="color: #007700">.</span><span style="color: #0000BB">yview</span><span style="color: #007700">)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">scrollable_frame&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">tk</span><span style="color: #007700">.</span><span style="color: #0000BB">Frame</span><span style="color: #007700">(</span><span style="color: #0000BB">canvas</span><span style="color: #007700">)<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">scrollable_frame</span><span style="color: #007700">.</span><span style="color: #0000BB">bind</span><span style="color: #007700">(<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #DD0000">"&lt;Configure&gt;"</span><span style="color: #007700">,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">lambda&nbsp;e</span><span style="color: #007700">:&nbsp;</span><span style="color: #0000BB">canvas</span><span style="color: #007700">.</span><span style="color: #0000BB">configure</span><span style="color: #007700">(<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">scrollregion</span><span style="color: #007700">=</span><span style="color: #0000BB">canvas</span><span style="color: #007700">.</span><span style="color: #0000BB">bbox</span><span style="color: #007700">(</span><span style="color: #DD0000">"all"</span><span style="color: #007700">)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;)<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">canvas</span><span style="color: #007700">.</span><span style="color: #0000BB">create_window</span><span style="color: #007700">((</span><span style="color: #0000BB">0</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">0</span><span style="color: #007700">),&nbsp;</span><span style="color: #0000BB">window</span><span style="color: #007700">=</span><span style="color: #0000BB">scrollable_frame</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">anchor</span><span style="color: #007700">=</span><span style="color: #DD0000">"nw"</span><span style="color: #007700">)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">canvas</span><span style="color: #007700">.</span><span style="color: #0000BB">configure</span><span style="color: #007700">(</span><span style="color: #0000BB">yscrollcommand</span><span style="color: #007700">=</span><span style="color: #0000BB">scrollbar</span><span style="color: #007700">.</span><span style="color: #0000BB">set</span><span style="color: #007700">)<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">canvas</span><span style="color: #007700">.</span><span style="color: #0000BB">pack</span><span style="color: #007700">(</span><span style="color: #0000BB">side</span><span style="color: #007700">=</span><span style="color: #DD0000">"left"</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">fill</span><span style="color: #007700">=</span><span style="color: #DD0000">"both"</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">expand</span><span style="color: #007700">=</span><span style="color: #0000BB">True</span><span style="color: #007700">)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">scrollbar</span><span style="color: #007700">.</span><span style="color: #0000BB">pack</span><span style="color: #007700">(</span><span style="color: #0000BB">side</span><span style="color: #007700">=</span><span style="color: #DD0000">"right"</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">fill</span><span style="color: #007700">=</span><span style="color: #DD0000">"y"</span><span style="color: #007700">)<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">fields&nbsp;</span><span style="color: #007700">=&nbsp;[<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(</span><span style="color: #DD0000">"Region&nbsp;Name:"</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">self</span><span style="color: #007700">.</span><span style="color: #0000BB">region_name</span><span style="color: #007700">),<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(</span><span style="color: #DD0000">"Region&nbsp;UUID:"</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">self</span><span style="color: #007700">.</span><span style="color: #0000BB">region_uuid</span><span style="color: #007700">),<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(</span><span style="color: #DD0000">"Location:"</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">self</span><span style="color: #007700">.</span><span style="color: #0000BB">location</span><span style="color: #007700">),&nbsp;&nbsp;</span><span style="color: #FF8000">#&nbsp;Location&nbsp;field&nbsp;added&nbsp;here<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #007700">(</span><span style="color: #DD0000">"Size&nbsp;X:"</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">self</span><span style="color: #007700">.</span><span style="color: #0000BB">size_x</span><span style="color: #007700">),<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(</span><span style="color: #DD0000">"Size&nbsp;Y:"</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">self</span><span style="color: #007700">.</span><span style="color: #0000BB">size_y</span><span style="color: #007700">),<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(</span><span style="color: #DD0000">"Size&nbsp;Z:"</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">self</span><span style="color: #007700">.</span><span style="color: #0000BB">size_z</span><span style="color: #007700">),<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(</span><span style="color: #DD0000">"Internal&nbsp;Port:"</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">self</span><span style="color: #007700">.</span><span style="color: #0000BB">internal_port</span><span style="color: #007700">),<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(</span><span style="color: #DD0000">"External&nbsp;Host:"</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">self</span><span style="color: #007700">.</span><span style="color: #0000BB">external_host</span><span style="color: #007700">),<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(</span><span style="color: #DD0000">"Max&nbsp;Prims:"</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">self</span><span style="color: #007700">.</span><span style="color: #0000BB">max_prims</span><span style="color: #007700">),<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(</span><span style="color: #DD0000">"Max&nbsp;Agents:"</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">self</span><span style="color: #007700">.</span><span style="color: #0000BB">max_agents</span><span style="color: #007700">),<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(</span><span style="color: #DD0000">"Maptile&nbsp;UUID:"</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">self</span><span style="color: #007700">.</span><span style="color: #0000BB">maptile_uuid</span><span style="color: #007700">),<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(</span><span style="color: #DD0000">"Internal&nbsp;Address:"</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">self</span><span style="color: #007700">.</span><span style="color: #0000BB">internal_address</span><span style="color: #007700">),<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(</span><span style="color: #DD0000">"Allow&nbsp;Alternate&nbsp;Ports:"</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">self</span><span style="color: #007700">.</span><span style="color: #0000BB">allow_alt_ports</span><span style="color: #007700">),<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(</span><span style="color: #DD0000">"Non&nbsp;Physical&nbsp;Prim&nbsp;Max:"</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">self</span><span style="color: #007700">.</span><span style="color: #0000BB">non_physical_prim_max</span><span style="color: #007700">),<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(</span><span style="color: #DD0000">"Physical&nbsp;Prim&nbsp;Max:"</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">self</span><span style="color: #007700">.</span><span style="color: #0000BB">physical_prim_max</span><span style="color: #007700">),<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(</span><span style="color: #DD0000">"Clamp&nbsp;Prim&nbsp;Size:"</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">self</span><span style="color: #007700">.</span><span style="color: #0000BB">clamp_prim_size</span><span style="color: #007700">),<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(</span><span style="color: #DD0000">"Max&nbsp;Prims&nbsp;Per&nbsp;User:"</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">self</span><span style="color: #007700">.</span><span style="color: #0000BB">max_prims_per_user</span><span style="color: #007700">),<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(</span><span style="color: #DD0000">"Scope&nbsp;ID:"</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">self</span><span style="color: #007700">.</span><span style="color: #0000BB">scope_id</span><span style="color: #007700">),<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(</span><span style="color: #DD0000">"Region&nbsp;Type:"</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">self</span><span style="color: #007700">.</span><span style="color: #0000BB">region_type</span><span style="color: #007700">),<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(</span><span style="color: #DD0000">"Render&nbsp;Min&nbsp;Height:"</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">self</span><span style="color: #007700">.</span><span style="color: #0000BB">render_min_height</span><span style="color: #007700">),<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(</span><span style="color: #DD0000">"Render&nbsp;Max&nbsp;Height:"</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">self</span><span style="color: #007700">.</span><span style="color: #0000BB">render_max_height</span><span style="color: #007700">),<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(</span><span style="color: #DD0000">"Maptile&nbsp;Static&nbsp;File:"</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">self</span><span style="color: #007700">.</span><span style="color: #0000BB">maptile_static_file</span><span style="color: #007700">),<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(</span><span style="color: #DD0000">"Master&nbsp;Avatar&nbsp;First&nbsp;Name:"</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">self</span><span style="color: #007700">.</span><span style="color: #0000BB">master_avatar_first_name</span><span style="color: #007700">),<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(</span><span style="color: #DD0000">"Master&nbsp;Avatar&nbsp;Last&nbsp;Name:"</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">self</span><span style="color: #007700">.</span><span style="color: #0000BB">master_avatar_last_name</span><span style="color: #007700">),<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(</span><span style="color: #DD0000">"Master&nbsp;Avatar&nbsp;Sandbox&nbsp;Password:"</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">self</span><span style="color: #007700">.</span><span style="color: #0000BB">master_avatar_sandbox_password</span><span style="color: #007700">),<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;]<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for&nbsp;</span><span style="color: #0000BB">idx</span><span style="color: #007700">,&nbsp;(</span><span style="color: #0000BB">label_text</span><span style="color: #007700">,&nbsp;var)&nbsp;</span><span style="color: #0000BB">in&nbsp;enumerate</span><span style="color: #007700">(</span><span style="color: #0000BB">fields</span><span style="color: #007700">):<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;</span><span style="color: #0000BB">isinstance</span><span style="color: #007700">(var,&nbsp;</span><span style="color: #0000BB">tk</span><span style="color: #007700">.</span><span style="color: #0000BB">BooleanVar</span><span style="color: #007700">):<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">tk</span><span style="color: #007700">.</span><span style="color: #0000BB">Checkbutton</span><span style="color: #007700">(</span><span style="color: #0000BB">scrollable_frame</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">text</span><span style="color: #007700">=</span><span style="color: #0000BB">label_text</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">variable</span><span style="color: #007700">=var).</span><span style="color: #0000BB">grid</span><span style="color: #007700">(</span><span style="color: #0000BB">row</span><span style="color: #007700">=</span><span style="color: #0000BB">idx</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">column</span><span style="color: #007700">=</span><span style="color: #0000BB">0</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">columnspan</span><span style="color: #007700">=</span><span style="color: #0000BB">2</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">sticky</span><span style="color: #007700">=</span><span style="color: #0000BB">tk</span><span style="color: #007700">.</span><span style="color: #0000BB">W</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">pady</span><span style="color: #007700">=</span><span style="color: #0000BB">2</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">padx</span><span style="color: #007700">=</span><span style="color: #0000BB">5</span><span style="color: #007700">)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else:<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">tk</span><span style="color: #007700">.</span><span style="color: #0000BB">Label</span><span style="color: #007700">(</span><span style="color: #0000BB">scrollable_frame</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">text</span><span style="color: #007700">=</span><span style="color: #0000BB">label_text</span><span style="color: #007700">).</span><span style="color: #0000BB">grid</span><span style="color: #007700">(</span><span style="color: #0000BB">row</span><span style="color: #007700">=</span><span style="color: #0000BB">idx</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">column</span><span style="color: #007700">=</span><span style="color: #0000BB">0</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">sticky</span><span style="color: #007700">=</span><span style="color: #0000BB">tk</span><span style="color: #007700">.</span><span style="color: #0000BB">W</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">pady</span><span style="color: #007700">=</span><span style="color: #0000BB">2</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">padx</span><span style="color: #007700">=</span><span style="color: #0000BB">5</span><span style="color: #007700">)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">entry&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">tk</span><span style="color: #007700">.</span><span style="color: #0000BB">Entry</span><span style="color: #007700">(</span><span style="color: #0000BB">scrollable_frame</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">textvariable</span><span style="color: #007700">=var,&nbsp;</span><span style="color: #0000BB">width</span><span style="color: #007700">=</span><span style="color: #0000BB">40</span><span style="color: #007700">)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">entry</span><span style="color: #007700">.</span><span style="color: #0000BB">grid</span><span style="color: #007700">(</span><span style="color: #0000BB">row</span><span style="color: #007700">=</span><span style="color: #0000BB">idx</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">column</span><span style="color: #007700">=</span><span style="color: #0000BB">1</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">sticky</span><span style="color: #007700">=</span><span style="color: #0000BB">tk</span><span style="color: #007700">.</span><span style="color: #0000BB">W</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">pady</span><span style="color: #007700">=</span><span style="color: #0000BB">2</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">padx</span><span style="color: #007700">=</span><span style="color: #0000BB">5</span><span style="color: #007700">)<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">button_frame&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">tk</span><span style="color: #007700">.</span><span style="color: #0000BB">Frame</span><span style="color: #007700">(</span><span style="color: #0000BB">scrollable_frame</span><span style="color: #007700">)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">button_frame</span><span style="color: #007700">.</span><span style="color: #0000BB">grid</span><span style="color: #007700">(</span><span style="color: #0000BB">row</span><span style="color: #007700">=</span><span style="color: #0000BB">len</span><span style="color: #007700">(</span><span style="color: #0000BB">fields</span><span style="color: #007700">),&nbsp;</span><span style="color: #0000BB">column</span><span style="color: #007700">=</span><span style="color: #0000BB">0</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">columnspan</span><span style="color: #007700">=</span><span style="color: #0000BB">2</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">pady</span><span style="color: #007700">=</span><span style="color: #0000BB">10</span><span style="color: #007700">)<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">tk</span><span style="color: #007700">.</span><span style="color: #0000BB">Button</span><span style="color: #007700">(</span><span style="color: #0000BB">button_frame</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">text</span><span style="color: #007700">=</span><span style="color: #DD0000">"Add&nbsp;Region"</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">command</span><span style="color: #007700">=</span><span style="color: #0000BB">self</span><span style="color: #007700">.</span><span style="color: #0000BB">add_region</span><span style="color: #007700">).</span><span style="color: #0000BB">pack</span><span style="color: #007700">(</span><span style="color: #0000BB">side</span><span style="color: #007700">=</span><span style="color: #DD0000">"left"</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">padx</span><span style="color: #007700">=</span><span style="color: #0000BB">10</span><span style="color: #007700">)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">tk</span><span style="color: #007700">.</span><span style="color: #0000BB">Button</span><span style="color: #007700">(</span><span style="color: #0000BB">button_frame</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">text</span><span style="color: #007700">=</span><span style="color: #DD0000">"Save&nbsp;Config"</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">command</span><span style="color: #007700">=</span><span style="color: #0000BB">self</span><span style="color: #007700">.</span><span style="color: #0000BB">save_config</span><span style="color: #007700">).</span><span style="color: #0000BB">pack</span><span style="color: #007700">(</span><span style="color: #0000BB">side</span><span style="color: #007700">=</span><span style="color: #DD0000">"left"</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">padx</span><span style="color: #007700">=</span><span style="color: #0000BB">10</span><span style="color: #007700">)<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">def&nbsp;next_flower_spiral_location</span><span style="color: #007700">(</span><span style="color: #0000BB">self</span><span style="color: #007700">):<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #FF8000">#&nbsp;Berechnung&nbsp;der&nbsp;nächsten&nbsp;Position&nbsp;in&nbsp;der&nbsp;spiralförmigen,&nbsp;blütenartigen&nbsp;Anordnung<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">self</span><span style="color: #007700">.</span><span style="color: #0000BB">angle&nbsp;</span><span style="color: #007700">+=&nbsp;</span><span style="color: #0000BB">137.5&nbsp;&nbsp;</span><span style="color: #FF8000">#&nbsp;Goldener&nbsp;Winkel&nbsp;in&nbsp;Grad<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">radians&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">math</span><span style="color: #007700">.</span><span style="color: #0000BB">radians</span><span style="color: #007700">(</span><span style="color: #0000BB">self</span><span style="color: #007700">.</span><span style="color: #0000BB">angle</span><span style="color: #007700">)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">location_x&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">1000&nbsp;</span><span style="color: #007700">+&nbsp;</span><span style="color: #0000BB">int</span><span style="color: #007700">(</span><span style="color: #0000BB">self</span><span style="color: #007700">.</span><span style="color: #0000BB">radius&nbsp;</span><span style="color: #007700">*&nbsp;</span><span style="color: #0000BB">math</span><span style="color: #007700">.</span><span style="color: #0000BB">cos</span><span style="color: #007700">(</span><span style="color: #0000BB">radians</span><span style="color: #007700">))<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">location_y&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">1000&nbsp;</span><span style="color: #007700">+&nbsp;</span><span style="color: #0000BB">int</span><span style="color: #007700">(</span><span style="color: #0000BB">self</span><span style="color: #007700">.</span><span style="color: #0000BB">radius&nbsp;</span><span style="color: #007700">*&nbsp;</span><span style="color: #0000BB">math</span><span style="color: #007700">.</span><span style="color: #0000BB">sin</span><span style="color: #007700">(</span><span style="color: #0000BB">radians</span><span style="color: #007700">))<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">self</span><span style="color: #007700">.</span><span style="color: #0000BB">radius&nbsp;</span><span style="color: #007700">+=&nbsp;</span><span style="color: #0000BB">1&nbsp;&nbsp;</span><span style="color: #FF8000">#&nbsp;Erhöhe&nbsp;den&nbsp;Radius&nbsp;schrittweise&nbsp;für&nbsp;den&nbsp;nächsten&nbsp;Punkt<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #007700">return&nbsp;</span><span style="color: #0000BB">location_x</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">location_y<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;def&nbsp;add_region</span><span style="color: #007700">(</span><span style="color: #0000BB">self</span><span style="color: #007700">):<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">location&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">self</span><span style="color: #007700">.</span><span style="color: #0000BB">next_flower_spiral_location</span><span style="color: #007700">()<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">self</span><span style="color: #007700">.</span><span style="color: #0000BB">locations</span><span style="color: #007700">.</span><span style="color: #0000BB">append</span><span style="color: #007700">(</span><span style="color: #0000BB">location</span><span style="color: #007700">)<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">new_uuid&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">str</span><span style="color: #007700">(</span><span style="color: #0000BB">uuid</span><span style="color: #007700">.</span><span style="color: #0000BB">uuid4</span><span style="color: #007700">())<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">self</span><span style="color: #007700">.</span><span style="color: #0000BB">region_count&nbsp;</span><span style="color: #007700">+=&nbsp;</span><span style="color: #0000BB">1<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self</span><span style="color: #007700">.</span><span style="color: #0000BB">region_name</span><span style="color: #007700">.</span><span style="color: #0000BB">set</span><span style="color: #007700">(</span><span style="color: #0000BB">f</span><span style="color: #DD0000">"TestRegion_{self.region_count}"</span><span style="color: #007700">)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">self</span><span style="color: #007700">.</span><span style="color: #0000BB">region_uuid</span><span style="color: #007700">.</span><span style="color: #0000BB">set</span><span style="color: #007700">(</span><span style="color: #0000BB">new_uuid</span><span style="color: #007700">)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">self</span><span style="color: #007700">.</span><span style="color: #0000BB">internal_port</span><span style="color: #007700">.</span><span style="color: #0000BB">set</span><span style="color: #007700">(</span><span style="color: #0000BB">self</span><span style="color: #007700">.</span><span style="color: #0000BB">internal_port</span><span style="color: #007700">.</span><span style="color: #0000BB">get</span><span style="color: #007700">()&nbsp;+&nbsp;</span><span style="color: #0000BB">1</span><span style="color: #007700">)<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">self</span><span style="color: #007700">.</span><span style="color: #0000BB">location</span><span style="color: #007700">.</span><span style="color: #0000BB">set</span><span style="color: #007700">(</span><span style="color: #0000BB">f</span><span style="color: #DD0000">"{location[0]},{location[1]}"</span><span style="color: #007700">)&nbsp;&nbsp;</span><span style="color: #FF8000">#&nbsp;Update&nbsp;the&nbsp;location<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">messagebox</span><span style="color: #007700">.</span><span style="color: #0000BB">showinfo</span><span style="color: #007700">(</span><span style="color: #DD0000">"Region&nbsp;Added"</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">f</span><span style="color: #DD0000">"Region&nbsp;{self.region_name.get()}&nbsp;hinzugefügt.&nbsp;Location:&nbsp;({location[0]},{location[1]})"</span><span style="color: #007700">)<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">def&nbsp;save_config</span><span style="color: #007700">(</span><span style="color: #0000BB">self</span><span style="color: #007700">):<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">filename&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">filedialog</span><span style="color: #007700">.</span><span style="color: #0000BB">asksaveasfilename</span><span style="color: #007700">(</span><span style="color: #0000BB">defaultextension</span><span style="color: #007700">=</span><span style="color: #DD0000">".ini"</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">filetypes</span><span style="color: #007700">=[(</span><span style="color: #DD0000">"INI&nbsp;files"</span><span style="color: #007700">,&nbsp;</span><span style="color: #DD0000">"*.ini"</span><span style="color: #007700">)])<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;</span><span style="color: #0000BB">filename</span><span style="color: #007700">:<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">config&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">configparser</span><span style="color: #007700">.</span><span style="color: #0000BB">ConfigParser</span><span style="color: #007700">()<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for&nbsp;</span><span style="color: #0000BB">i&nbsp;in&nbsp;range</span><span style="color: #007700">(</span><span style="color: #0000BB">1</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">self</span><span style="color: #007700">.</span><span style="color: #0000BB">region_count&nbsp;</span><span style="color: #007700">+&nbsp;</span><span style="color: #0000BB">1</span><span style="color: #007700">):<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;</span><span style="color: #0000BB">i&nbsp;</span><span style="color: #007700">==&nbsp;</span><span style="color: #0000BB">1</span><span style="color: #007700">:<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">region_name&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">self</span><span style="color: #007700">.</span><span style="color: #0000BB">region_name</span><span style="color: #007700">.</span><span style="color: #0000BB">get</span><span style="color: #007700">()<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">region_uuid&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">self</span><span style="color: #007700">.</span><span style="color: #0000BB">region_uuid</span><span style="color: #007700">.</span><span style="color: #0000BB">get</span><span style="color: #007700">()<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">location_x</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">location_y&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">map</span><span style="color: #007700">(</span><span style="color: #0000BB">int</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">self</span><span style="color: #007700">.</span><span style="color: #0000BB">location</span><span style="color: #007700">.</span><span style="color: #0000BB">get</span><span style="color: #007700">().</span><span style="color: #0000BB">split</span><span style="color: #007700">(</span><span style="color: #DD0000">','</span><span style="color: #007700">))&nbsp;&nbsp;</span><span style="color: #FF8000">#&nbsp;Erste&nbsp;Region<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #007700">else:<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">region_name&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">f</span><span style="color: #DD0000">"TestRegion_{i}"<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">region_uuid&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">str</span><span style="color: #007700">(</span><span style="color: #0000BB">uuid</span><span style="color: #007700">.</span><span style="color: #0000BB">uuid4</span><span style="color: #007700">())<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">location_x</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">location_y&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">self</span><span style="color: #007700">.</span><span style="color: #0000BB">locations</span><span style="color: #007700">[</span><span style="color: #0000BB">i</span><span style="color: #007700">-</span><span style="color: #0000BB">1</span><span style="color: #007700">]&nbsp;&nbsp;</span><span style="color: #FF8000">#&nbsp;Spezielle&nbsp;Location&nbsp;für&nbsp;jede&nbsp;Region<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">config</span><span style="color: #007700">[</span><span style="color: #0000BB">region_name</span><span style="color: #007700">]&nbsp;=&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #DD0000">"RegionUUID"</span><span style="color: #007700">:&nbsp;</span><span style="color: #0000BB">region_uuid</span><span style="color: #007700">,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #DD0000">"Location"</span><span style="color: #007700">:&nbsp;</span><span style="color: #0000BB">f</span><span style="color: #DD0000">"{location_x},{location_y}"</span><span style="color: #007700">,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #DD0000">"SizeX"</span><span style="color: #007700">:&nbsp;</span><span style="color: #0000BB">self</span><span style="color: #007700">.</span><span style="color: #0000BB">size_x</span><span style="color: #007700">.</span><span style="color: #0000BB">get</span><span style="color: #007700">(),<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #DD0000">"SizeY"</span><span style="color: #007700">:&nbsp;</span><span style="color: #0000BB">self</span><span style="color: #007700">.</span><span style="color: #0000BB">size_y</span><span style="color: #007700">.</span><span style="color: #0000BB">get</span><span style="color: #007700">(),<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #DD0000">"SizeZ"</span><span style="color: #007700">:&nbsp;</span><span style="color: #0000BB">self</span><span style="color: #007700">.</span><span style="color: #0000BB">size_z</span><span style="color: #007700">.</span><span style="color: #0000BB">get</span><span style="color: #007700">(),<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #DD0000">"InternalPort"</span><span style="color: #007700">:&nbsp;</span><span style="color: #0000BB">self</span><span style="color: #007700">.</span><span style="color: #0000BB">internal_port</span><span style="color: #007700">.</span><span style="color: #0000BB">get</span><span style="color: #007700">()&nbsp;+&nbsp;(</span><span style="color: #0000BB">i&nbsp;</span><span style="color: #007700">-&nbsp;</span><span style="color: #0000BB">1</span><span style="color: #007700">),<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #DD0000">"ExternalHostName"</span><span style="color: #007700">:&nbsp;</span><span style="color: #0000BB">self</span><span style="color: #007700">.</span><span style="color: #0000BB">external_host</span><span style="color: #007700">.</span><span style="color: #0000BB">get</span><span style="color: #007700">(),<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #DD0000">"MaxPrims"</span><span style="color: #007700">:&nbsp;</span><span style="color: #0000BB">self</span><span style="color: #007700">.</span><span style="color: #0000BB">max_prims</span><span style="color: #007700">.</span><span style="color: #0000BB">get</span><span style="color: #007700">(),<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #DD0000">"MaxAgents"</span><span style="color: #007700">:&nbsp;</span><span style="color: #0000BB">self</span><span style="color: #007700">.</span><span style="color: #0000BB">max_agents</span><span style="color: #007700">.</span><span style="color: #0000BB">get</span><span style="color: #007700">(),<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #DD0000">"MaptileStaticUUID"</span><span style="color: #007700">:&nbsp;</span><span style="color: #0000BB">self</span><span style="color: #007700">.</span><span style="color: #0000BB">maptile_uuid</span><span style="color: #007700">.</span><span style="color: #0000BB">get</span><span style="color: #007700">(),<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #DD0000">"InternalAddress"</span><span style="color: #007700">:&nbsp;</span><span style="color: #0000BB">self</span><span style="color: #007700">.</span><span style="color: #0000BB">internal_address</span><span style="color: #007700">.</span><span style="color: #0000BB">get</span><span style="color: #007700">(),<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #DD0000">"AllowAlternatePorts"</span><span style="color: #007700">:&nbsp;</span><span style="color: #0000BB">self</span><span style="color: #007700">.</span><span style="color: #0000BB">allow_alt_ports</span><span style="color: #007700">.</span><span style="color: #0000BB">get</span><span style="color: #007700">(),<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #DD0000">"NonPhysicalPrimMax"</span><span style="color: #007700">:&nbsp;</span><span style="color: #0000BB">self</span><span style="color: #007700">.</span><span style="color: #0000BB">non_physical_prim_max</span><span style="color: #007700">.</span><span style="color: #0000BB">get</span><span style="color: #007700">(),<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #DD0000">"PhysicalPrimMax"</span><span style="color: #007700">:&nbsp;</span><span style="color: #0000BB">self</span><span style="color: #007700">.</span><span style="color: #0000BB">physical_prim_max</span><span style="color: #007700">.</span><span style="color: #0000BB">get</span><span style="color: #007700">(),<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #DD0000">"ClampPrimSize"</span><span style="color: #007700">:&nbsp;</span><span style="color: #0000BB">str</span><span style="color: #007700">(</span><span style="color: #0000BB">self</span><span style="color: #007700">.</span><span style="color: #0000BB">clamp_prim_size</span><span style="color: #007700">.</span><span style="color: #0000BB">get</span><span style="color: #007700">()),<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #DD0000">"MaxPrimsPerUser"</span><span style="color: #007700">:&nbsp;</span><span style="color: #0000BB">self</span><span style="color: #007700">.</span><span style="color: #0000BB">max_prims_per_user</span><span style="color: #007700">.</span><span style="color: #0000BB">get</span><span style="color: #007700">(),<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #DD0000">"ScopeID"</span><span style="color: #007700">:&nbsp;</span><span style="color: #0000BB">self</span><span style="color: #007700">.</span><span style="color: #0000BB">scope_id</span><span style="color: #007700">.</span><span style="color: #0000BB">get</span><span style="color: #007700">(),<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #DD0000">"RegionType"</span><span style="color: #007700">:&nbsp;</span><span style="color: #0000BB">self</span><span style="color: #007700">.</span><span style="color: #0000BB">region_type</span><span style="color: #007700">.</span><span style="color: #0000BB">get</span><span style="color: #007700">(),<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #DD0000">"RenderMinHeight"</span><span style="color: #007700">:&nbsp;</span><span style="color: #0000BB">self</span><span style="color: #007700">.</span><span style="color: #0000BB">render_min_height</span><span style="color: #007700">.</span><span style="color: #0000BB">get</span><span style="color: #007700">(),<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #DD0000">"RenderMaxHeight"</span><span style="color: #007700">:&nbsp;</span><span style="color: #0000BB">self</span><span style="color: #007700">.</span><span style="color: #0000BB">render_max_height</span><span style="color: #007700">.</span><span style="color: #0000BB">get</span><span style="color: #007700">(),<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #DD0000">"MaptileStaticFile"</span><span style="color: #007700">:&nbsp;</span><span style="color: #0000BB">self</span><span style="color: #007700">.</span><span style="color: #0000BB">maptile_static_file</span><span style="color: #007700">.</span><span style="color: #0000BB">get</span><span style="color: #007700">(),<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #DD0000">"MasterAvatarFirstName"</span><span style="color: #007700">:&nbsp;</span><span style="color: #0000BB">self</span><span style="color: #007700">.</span><span style="color: #0000BB">master_avatar_first_name</span><span style="color: #007700">.</span><span style="color: #0000BB">get</span><span style="color: #007700">(),<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #DD0000">"MasterAvatarLastName"</span><span style="color: #007700">:&nbsp;</span><span style="color: #0000BB">self</span><span style="color: #007700">.</span><span style="color: #0000BB">master_avatar_last_name</span><span style="color: #007700">.</span><span style="color: #0000BB">get</span><span style="color: #007700">(),<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #DD0000">"MasterAvatarSandboxPassword"</span><span style="color: #007700">:&nbsp;</span><span style="color: #0000BB">self</span><span style="color: #007700">.</span><span style="color: #0000BB">master_avatar_sandbox_password</span><span style="color: #007700">.</span><span style="color: #0000BB">get</span><span style="color: #007700">(),<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">with&nbsp;open</span><span style="color: #007700">(</span><span style="color: #0000BB">filename</span><span style="color: #007700">,&nbsp;</span><span style="color: #DD0000">'w'</span><span style="color: #007700">)&nbsp;as&nbsp;</span><span style="color: #0000BB">configfile</span><span style="color: #007700">:<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">config</span><span style="color: #007700">.</span><span style="color: #0000BB">write</span><span style="color: #007700">(</span><span style="color: #0000BB">configfile</span><span style="color: #007700">)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">messagebox</span><span style="color: #007700">.</span><span style="color: #0000BB">showinfo</span><span style="color: #007700">(</span><span style="color: #DD0000">"Gespeichert"</span><span style="color: #007700">,&nbsp;</span><span style="color: #DD0000">"Konfiguration&nbsp;erfolgreich&nbsp;gespeichert."</span><span style="color: #007700">)<br /><br />if&nbsp;</span><span style="color: #0000BB">__name__&nbsp;</span><span style="color: #007700">==&nbsp;</span><span style="color: #DD0000">"__main__"</span><span style="color: #007700">:<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">root&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">tk</span><span style="color: #007700">.</span><span style="color: #0000BB">Tk</span><span style="color: #007700">()<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">app&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">RegionConfigApp</span><span style="color: #007700">(</span><span style="color: #0000BB">root</span><span style="color: #007700">)<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">root</span><span style="color: #007700">.</span><span style="color: #0000BB">mainloop</span><span style="color: #007700">()&nbsp;<br /></span></code></div></div></div><span style="font-weight: bold;" class="mycode_b">Sourcecode als Text:</span> <!-- start: postbit_attachments_attachment -->
<br /><!-- start: attachment_icon -->
<img src="https://www.gridtalk.de/images/attachtypes/txt.gif" title="Text Document" border="0" alt=".txt" />
<!-- end: attachment_icon -->&nbsp;&nbsp;<a href="attachment.php?aid=7154" target="_blank" title="">OpenSimRegionConfig5.py.txt</a> (Größe: 8,96 KB / Downloads: 243)
<!-- end: postbit_attachments_attachment -->]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[OAR Converter]]></title>
			<link>https://www.gridtalk.de/showthread.php?tid=4894</link>
			<pubDate>Fri, 26 Jul 2024 10:43:16 +0200</pubDate>
			<dc:creator><![CDATA[<a href="https://www.gridtalk.de/member.php?action=profile&uid=1710">Samuro</a>]]></dc:creator>
			<guid isPermaLink="false">https://www.gridtalk.de/showthread.php?tid=4894</guid>
			<description><![CDATA[hat jemand erfahrung mit OAR Converter ?<br />
<br />
<a href="https://aiaustin.wordpress.com/2015/10/24/opensim-oar-convert-to-unity-scene-with-windows-interface/" target="_blank" rel="noopener" class="mycode_url">https://aiaustin.wordpress.com/2015/10/2...interface/</a><br />
<br />
<a href="https://www.nsl.tuis.ac.jp/xoops/modules/xpwiki/?OAR%20Converter" target="_blank" rel="noopener" class="mycode_url">https://www.nsl.tuis.ac.jp/xoops/modules...0Converter</a><br />
<br />
Das soll ein tolles tool sein mit dem man OAR dateien in Collada für Unity unwandeln kann, entwikkelt an einer Universität in Japan.<br />
Prims, Sculpties und terraformtes Land sollen automatisch in collada umgeformt werden.<br />
<br />
hier ein video wie das geht : <a href="https://www.youtube.com/watch?v=LUhqNJHLCuM" target="_blank" rel="noopener" class="mycode_url">https://www.youtube.com/watch?v=LUhqNJHLCuM</a><br />
<br />
Leider scheint die software seit 2020 etwas verwarlost. Der source code ist noch da, aber man kann keine .EXE für windows mehr runterladen. Ich hab den eindruck das projekt stirbt langsam, vielleicht kann man noch etwas retten.<br />
<br />
<a href="https://www.nsl.tuis.ac.jp/svn/linux/oarconv/trunk/" target="_blank" rel="noopener" class="mycode_url">https://www.nsl.tuis.ac.jp/svn/linux/oarconv/trunk/</a><br />
<br />
--------------<br />
<br />
UPDATE:<br />
<br />
ah das runterladen vom exe geht doch, wenn man auf das kleine Ikon klickt]]></description>
			<content:encoded><![CDATA[hat jemand erfahrung mit OAR Converter ?<br />
<br />
<a href="https://aiaustin.wordpress.com/2015/10/24/opensim-oar-convert-to-unity-scene-with-windows-interface/" target="_blank" rel="noopener" class="mycode_url">https://aiaustin.wordpress.com/2015/10/2...interface/</a><br />
<br />
<a href="https://www.nsl.tuis.ac.jp/xoops/modules/xpwiki/?OAR%20Converter" target="_blank" rel="noopener" class="mycode_url">https://www.nsl.tuis.ac.jp/xoops/modules...0Converter</a><br />
<br />
Das soll ein tolles tool sein mit dem man OAR dateien in Collada für Unity unwandeln kann, entwikkelt an einer Universität in Japan.<br />
Prims, Sculpties und terraformtes Land sollen automatisch in collada umgeformt werden.<br />
<br />
hier ein video wie das geht : <a href="https://www.youtube.com/watch?v=LUhqNJHLCuM" target="_blank" rel="noopener" class="mycode_url">https://www.youtube.com/watch?v=LUhqNJHLCuM</a><br />
<br />
Leider scheint die software seit 2020 etwas verwarlost. Der source code ist noch da, aber man kann keine .EXE für windows mehr runterladen. Ich hab den eindruck das projekt stirbt langsam, vielleicht kann man noch etwas retten.<br />
<br />
<a href="https://www.nsl.tuis.ac.jp/svn/linux/oarconv/trunk/" target="_blank" rel="noopener" class="mycode_url">https://www.nsl.tuis.ac.jp/svn/linux/oarconv/trunk/</a><br />
<br />
--------------<br />
<br />
UPDATE:<br />
<br />
ah das runterladen vom exe geht doch, wenn man auf das kleine Ikon klickt]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[Manni bei Gitlab]]></title>
			<link>https://www.gridtalk.de/showthread.php?tid=4851</link>
			<pubDate>Wed, 24 Apr 2024 22:22:27 +0200</pubDate>
			<dc:creator><![CDATA[<a href="https://www.gridtalk.de/member.php?action=profile&uid=998">Manfred Aabye</a>]]></dc:creator>
			<guid isPermaLink="false">https://www.gridtalk.de/showthread.php?tid=4851</guid>
			<description><![CDATA[Ich habe erst einmal das <a href="https://gitlab.com/ManfredAabye/opensimmultitool" target="_blank" rel="noopener" class="mycode_url">opensimMULTITOOL</a> und den <a href="https://gitlab.com/ManfredAabye/opensimcurrencyserver-dotnet" target="_blank" rel="noopener" class="mycode_url">OpenSimCurrencyServer-DOTNET</a><br />
bei Gitlab zum Download bereitgestellt, beides ist DOTNET 8 kompatibel.<br />
<br />
<img src="https://i.pinimg.com/originals/34/2e/6d/342e6d8b1ef0a4ff9ae8853284047266.jpg" loading="lazy"  width="250" height="250" alt="[Bild: 342e6d8b1ef0a4ff9ae8853284047266.jpg]" class="mycode_img" /><br />
<br />
Link: <a href="https://gitlab.com/ManfredAabye" target="_blank" rel="noopener" class="mycode_url">https://gitlab.com/ManfredAabye</a>]]></description>
			<content:encoded><![CDATA[Ich habe erst einmal das <a href="https://gitlab.com/ManfredAabye/opensimmultitool" target="_blank" rel="noopener" class="mycode_url">opensimMULTITOOL</a> und den <a href="https://gitlab.com/ManfredAabye/opensimcurrencyserver-dotnet" target="_blank" rel="noopener" class="mycode_url">OpenSimCurrencyServer-DOTNET</a><br />
bei Gitlab zum Download bereitgestellt, beides ist DOTNET 8 kompatibel.<br />
<br />
<img src="https://i.pinimg.com/originals/34/2e/6d/342e6d8b1ef0a4ff9ae8853284047266.jpg" loading="lazy"  width="250" height="250" alt="[Bild: 342e6d8b1ef0a4ff9ae8853284047266.jpg]" class="mycode_img" /><br />
<br />
Link: <a href="https://gitlab.com/ManfredAabye" target="_blank" rel="noopener" class="mycode_url">https://gitlab.com/ManfredAabye</a>]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[World Heightmap Generator]]></title>
			<link>https://www.gridtalk.de/showthread.php?tid=4642</link>
			<pubDate>Fri, 26 May 2023 14:21:22 +0200</pubDate>
			<dc:creator><![CDATA[<a href="https://www.gridtalk.de/member.php?action=profile&uid=998">Manfred Aabye</a>]]></dc:creator>
			<guid isPermaLink="false">https://www.gridtalk.de/showthread.php?tid=4642</guid>
			<description><![CDATA[<span style="font-size: xx-large;" class="mycode_size">WGEN 0.3.1 – ein einfacher Höhenkartengenerator</span><br />
<br />
Es gibt viele großartige Geländegeneratoren, aber die meisten davon verfügen über eine kostenlose Version mit einer Geländegrößenbeschränkung.<br />
<br />
Dies ist ein viel einfacherer Generator, aber er kann Karten in beliebig großer Größe exportieren.<br />
<br />
<img src="https://raw.githubusercontent.com/jice-nospam/wgen/main/doc/ex_ue5.jpg" loading="lazy"  alt="[Bild: ex_ue5.jpg]" class="mycode_img" /><br />
<br />
<br />
Github (Herunterladen - entpacken - starten):<br />
<a href="https://github.com/jice-nospam/wgen/releases/tag/v0.3.1" target="_blank" rel="noopener" class="mycode_url">https://github.com/jice-nospam/wgen/releases/tag/v0.3.1</a><br />
<br />
Deutsche Anleitung:<br />
<a href="https://eu2.contabostorage.com/52253033fae547669ac2197e11daac60:bigmanzai/Hoehenkartengenerator.pdf" target="_blank" rel="noopener" class="mycode_url">https://eu2.contabostorage.com/52253033f...erator.pdf</a>]]></description>
			<content:encoded><![CDATA[<span style="font-size: xx-large;" class="mycode_size">WGEN 0.3.1 – ein einfacher Höhenkartengenerator</span><br />
<br />
Es gibt viele großartige Geländegeneratoren, aber die meisten davon verfügen über eine kostenlose Version mit einer Geländegrößenbeschränkung.<br />
<br />
Dies ist ein viel einfacherer Generator, aber er kann Karten in beliebig großer Größe exportieren.<br />
<br />
<img src="https://raw.githubusercontent.com/jice-nospam/wgen/main/doc/ex_ue5.jpg" loading="lazy"  alt="[Bild: ex_ue5.jpg]" class="mycode_img" /><br />
<br />
<br />
Github (Herunterladen - entpacken - starten):<br />
<a href="https://github.com/jice-nospam/wgen/releases/tag/v0.3.1" target="_blank" rel="noopener" class="mycode_url">https://github.com/jice-nospam/wgen/releases/tag/v0.3.1</a><br />
<br />
Deutsche Anleitung:<br />
<a href="https://eu2.contabostorage.com/52253033fae547669ac2197e11daac60:bigmanzai/Hoehenkartengenerator.pdf" target="_blank" rel="noopener" class="mycode_url">https://eu2.contabostorage.com/52253033f...erator.pdf</a>]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[Fragen zum Thema Mesh]]></title>
			<link>https://www.gridtalk.de/showthread.php?tid=4592</link>
			<pubDate>Fri, 24 Mar 2023 11:01:46 +0100</pubDate>
			<dc:creator><![CDATA[<a href="https://www.gridtalk.de/member.php?action=profile&uid=1660">Sleimer Akina</a>]]></dc:creator>
			<guid isPermaLink="false">https://www.gridtalk.de/showthread.php?tid=4592</guid>
			<description><![CDATA[Hey Zusammen,<br />
<br />
Ich habe mal eine Frage, ist es Technisch möglich aus einer 2D Grafik also einem Bild ein Mesh Objekt zu erzeugen?]]></description>
			<content:encoded><![CDATA[Hey Zusammen,<br />
<br />
Ich habe mal eine Frage, ist es Technisch möglich aus einer 2D Grafik also einem Bild ein Mesh Objekt zu erzeugen?]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[Mesh Texte]]></title>
			<link>https://www.gridtalk.de/showthread.php?tid=4548</link>
			<pubDate>Tue, 17 Jan 2023 14:23:26 +0100</pubDate>
			<dc:creator><![CDATA[<a href="https://www.gridtalk.de/member.php?action=profile&uid=1660">Sleimer Akina</a>]]></dc:creator>
			<guid isPermaLink="false">https://www.gridtalk.de/showthread.php?tid=4548</guid>
			<description><![CDATA[Hey,<br />
Ich wollte mal fragen ob mir vielleicht einmal einer erklären kann wie man mesh texte erstellen, ich gab mir bereits blender herruntergeladen. Aber ich komm damit nicht klar.<br />
Deswegen wollte ich erst einfache sachen machen, wie eben einen Text.<br />
Und was man beim upload des collada files beachten muss.<br />
Vielleicht kann das ja jemmand erklären wäre super.]]></description>
			<content:encoded><![CDATA[Hey,<br />
Ich wollte mal fragen ob mir vielleicht einmal einer erklären kann wie man mesh texte erstellen, ich gab mir bereits blender herruntergeladen. Aber ich komm damit nicht klar.<br />
Deswegen wollte ich erst einfache sachen machen, wie eben einen Text.<br />
Und was man beim upload des collada files beachten muss.<br />
Vielleicht kann das ja jemmand erklären wäre super.]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[Metahuman Avatare]]></title>
			<link>https://www.gridtalk.de/showthread.php?tid=4525</link>
			<pubDate>Tue, 13 Dec 2022 16:14:57 +0100</pubDate>
			<dc:creator><![CDATA[<a href="https://www.gridtalk.de/member.php?action=profile&uid=998">Manfred Aabye</a>]]></dc:creator>
			<guid isPermaLink="false">https://www.gridtalk.de/showthread.php?tid=4525</guid>
			<description><![CDATA[Ich bastell gerade mit Blender-Buddy Avatare.<br />
Von etwas über 100, die ich bis jetzt erstellt habe, sind 55 so lala benutzbar.<br />
Die haben erst einmal keine Gesichtsmuskeln nur Bento Hände.<br />
Ich teste gerade, wie man am besten Metahuman Avatare nach OpenSim portieren kann.<br />
<br />
Metahuman Avatare benötigt (nicht mit Makehuman verwechseln):<br />
<br />
<!-- start: postbit_attachments_attachment -->
<br /><!-- start: attachment_icon -->
<img src="https://www.gridtalk.de/images/attachtypes/image.gif" title="JPG Image" border="0" alt=".jpg" />
<!-- end: attachment_icon -->&nbsp;&nbsp;<a href="attachment.php?aid=5388" target="_blank" title="">MetaHumanCreator.jpg</a> (Größe: 125,23 KB / Downloads: 328)
<!-- end: postbit_attachments_attachment --><br />
<br />
Metahuman UE5<br />
<a href="https://metahuman.unrealengine.com/" target="_blank" rel="noopener" class="mycode_url">https://metahuman.unrealengine.com/</a><br />
<br />
Unreal Engine UE5<br />
<a href="https://www.unrealengine.com" target="_blank" rel="noopener" class="mycode_url">https://www.unrealengine.com</a><br />
<br />
Quixel Bridge UE4<br />
<a href="https://quixel.com/bridge" target="_blank" rel="noopener" class="mycode_url">https://quixel.com/bridge</a><br />
Ab Unreal Engine 5 ist das eine Erweiterung, die man im Asset Store bekommt.<br />
<a href="https://www.unrealengine.com/marketplace/en-US/store" target="_blank" rel="noopener" class="mycode_url">https://www.unrealengine.com/marketplace/en-US/store</a><br />
<br />
Quixel Mixer<br />
<a href="https://quixel.com/mixer" target="_blank" rel="noopener" class="mycode_url">https://quixel.com/mixer</a><br />
<br />
In Blender können die Metahuman Avatare für OpenSim angepasst werden.<br />
Für Second Life ist das Kommerziell, da kenn ich mich nicht mit aus.<br />
<br />
Ich benutze zum anpassen Blender 3.x+ und Blender Buddy<br />
Blender Buddy kostet ca` 33€.<br />
<br />
<!-- start: postbit_attachments_attachment -->
<br /><!-- start: attachment_icon -->
<img src="https://www.gridtalk.de/images/attachtypes/image.gif" title="JPG Image" border="0" alt=".jpg" />
<!-- end: attachment_icon -->&nbsp;&nbsp;<a href="attachment.php?aid=5389" target="_blank" title="">MetaHumanCreator5.jpg</a> (Größe: 85,75 KB / Downloads: 305)
<!-- end: postbit_attachments_attachment --><br />
<br />
P.S. Die Avatare sehen hier auf den Bildern nicht so Real aus, Fototechnisch bedingt.]]></description>
			<content:encoded><![CDATA[Ich bastell gerade mit Blender-Buddy Avatare.<br />
Von etwas über 100, die ich bis jetzt erstellt habe, sind 55 so lala benutzbar.<br />
Die haben erst einmal keine Gesichtsmuskeln nur Bento Hände.<br />
Ich teste gerade, wie man am besten Metahuman Avatare nach OpenSim portieren kann.<br />
<br />
Metahuman Avatare benötigt (nicht mit Makehuman verwechseln):<br />
<br />
<!-- start: postbit_attachments_attachment -->
<br /><!-- start: attachment_icon -->
<img src="https://www.gridtalk.de/images/attachtypes/image.gif" title="JPG Image" border="0" alt=".jpg" />
<!-- end: attachment_icon -->&nbsp;&nbsp;<a href="attachment.php?aid=5388" target="_blank" title="">MetaHumanCreator.jpg</a> (Größe: 125,23 KB / Downloads: 328)
<!-- end: postbit_attachments_attachment --><br />
<br />
Metahuman UE5<br />
<a href="https://metahuman.unrealengine.com/" target="_blank" rel="noopener" class="mycode_url">https://metahuman.unrealengine.com/</a><br />
<br />
Unreal Engine UE5<br />
<a href="https://www.unrealengine.com" target="_blank" rel="noopener" class="mycode_url">https://www.unrealengine.com</a><br />
<br />
Quixel Bridge UE4<br />
<a href="https://quixel.com/bridge" target="_blank" rel="noopener" class="mycode_url">https://quixel.com/bridge</a><br />
Ab Unreal Engine 5 ist das eine Erweiterung, die man im Asset Store bekommt.<br />
<a href="https://www.unrealengine.com/marketplace/en-US/store" target="_blank" rel="noopener" class="mycode_url">https://www.unrealengine.com/marketplace/en-US/store</a><br />
<br />
Quixel Mixer<br />
<a href="https://quixel.com/mixer" target="_blank" rel="noopener" class="mycode_url">https://quixel.com/mixer</a><br />
<br />
In Blender können die Metahuman Avatare für OpenSim angepasst werden.<br />
Für Second Life ist das Kommerziell, da kenn ich mich nicht mit aus.<br />
<br />
Ich benutze zum anpassen Blender 3.x+ und Blender Buddy<br />
Blender Buddy kostet ca` 33€.<br />
<br />
<!-- start: postbit_attachments_attachment -->
<br /><!-- start: attachment_icon -->
<img src="https://www.gridtalk.de/images/attachtypes/image.gif" title="JPG Image" border="0" alt=".jpg" />
<!-- end: attachment_icon -->&nbsp;&nbsp;<a href="attachment.php?aid=5389" target="_blank" title="">MetaHumanCreator5.jpg</a> (Größe: 85,75 KB / Downloads: 305)
<!-- end: postbit_attachments_attachment --><br />
<br />
P.S. Die Avatare sehen hier auf den Bildern nicht so Real aus, Fototechnisch bedingt.]]></content:encoded>
		</item>
	</channel>
</rss>