Files
2026-07-09 09:21:49 +02:00

338 lines
21 KiB
XML
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<!--
RSS generated by JIRA (1001.0.0-SNAPSHOT#100292-rev:f152b838bb945118c071b297741ecc5e36093b62) at Fri Jul 03 09:13:25 UTC 2026
It is possible to restrict the fields that are returned in this document by specifying the 'field' parameter in your request.
For example, to request only the issue key and summary add field=key&field=summary to the URL of your request.
-->
<rss version="0.92" >
<channel>
<title>Jira adesso Group extern</title>
<link>https://adesso-group-extern.atlassian.net</link>
<description>This file is an XML representation of an issue</description>
<language>en-us</language> <build-info>
<version>1001.0.0-SNAPSHOT</version>
<build-number>100292</build-number>
<build-date>30-06-2026</build-date>
</build-info>
<item>
<title>[GEKO-16] Schutzzaun im Layout schlie&#223;en/Schutzzaun zwischen zwei Punkten planen</title>
<link>https://adesso-group-extern.atlassian.net/browse/GEKO-16</link>
<project id="12341" key="GEKO">GEKO</project>
<description>&lt;p&gt;Dieses Ticket implementiert die interaktive Planung eines Schutzzauns zwischen zwei Punkten im 3D-Layout. Die Funktion erm&#246;glicht das Ziehen einer Strecke, berechnet die Geometrie und generiert den Zaun als kaskadierende Baugruppe. Neu ist die intelligente Vererbungslogik: Werden PMIs als Start- oder Endpunkt genutzt, erbt der Zaun Typ und F&#252;llung automatisch; andernfalls werden diese &#252;ber ein modales Overlay abgefragt.&lt;/p&gt;
&lt;h3&gt;&lt;a name=&quot;%F0%9F%9F%A6DefinitionofReady%C2%A0&quot;&gt;&lt;/a&gt;&lt;b&gt; Definition of Ready&lt;/b&gt;&#160;&lt;/h3&gt;
&lt;h4&gt;&lt;a name=&quot;Wer%3F%C2%A0&quot;&gt;&lt;/a&gt;&lt;b&gt;Wer?&lt;/b&gt;&#160;&lt;/h4&gt;
&lt;p&gt;Anwender des Schutzzaun-Konfigurators im 3D-Layout.&lt;/p&gt;
&lt;h4&gt;&lt;a name=&quot;Was%3F%C2%A0&quot;&gt;&lt;/a&gt;&lt;b&gt;Was?&lt;/b&gt;&#160;&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;Interaktives Setzen von Start- und Endpunkt (frei oder gesnappt an PMIs).&lt;/li&gt;
&lt;li&gt;Dynamische Anzeige von 3 Bema&#223;ungen (L&#228;nge, Diagonale, Winkel) w&#228;hrend der Mausbewegung.&lt;/li&gt;
&lt;li&gt;Intelligente Eigenschafts-Vererbung (Typ/F&#252;llung) basierend auf Start-/End-PMIs zur Vermeidung unn&#246;tiger UI-Abfragen.&lt;/li&gt;
&lt;li&gt;Filterung von PMIs: Inkompatible End-PMIs werden nach der Auswahl des Start-PMIs ignoriert und nicht gehighlighted.&lt;/li&gt;
&lt;li&gt;Mathematische Berechnung von 2D-L&#228;nge (XZ-Ebene) und Ausrichtungswinkel.&lt;/li&gt;
&lt;li&gt;Algorithmus-gest&#252;tzte Aufteilung der Strecke in Standard- und Sonderelemente.&lt;/li&gt;
&lt;li&gt;Generierung des Zauns als kaskadierender Verbund (Typ 2 Einbaubedingungen).&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;&lt;a name=&quot;Warum%3F%C2%A0&quot;&gt;&lt;/a&gt;&lt;b&gt;Warum?&lt;/b&gt;&#160;&lt;/h4&gt;
&lt;p&gt;Effiziente Planung von Schutzz&#228;unen &#252;ber gr&#246;&#223;ere Distanzen, ohne dass der Nutzer jedes Element einzeln platzieren muss und unter Vermeidung von fehlerhaften Typen-Mischungen.&lt;/p&gt;
&lt;h4&gt;&lt;a name=&quot;Wozu%3F%C2%A0&quot;&gt;&lt;/a&gt;&lt;b&gt;Wozu?&lt;/b&gt;&#160;&lt;/h4&gt;
&lt;p&gt;Ein strukturierter, in den Szenegraphen integrierter Schutzzaun-Zug, mit dem offene Z&#252;ge geschlossen werden k&#246;nnen.&lt;/p&gt;</description>
<environment></environment>
<key id="139286">GEKO-16</key>
<summary>Schutzzaun im Layout schlie&#223;en/Schutzzaun zwischen zwei Punkten planen</summary>
<type id="12871" iconUrl="https://adesso-group-extern.atlassian.net/rest/api/2/universal_avatar/view/type/issuetype/avatar/10318?size=medium">Task</type>
<parent id="119259">GEKO-6</parent>
<priority id="10001" iconUrl="https://adesso-group-extern.atlassian.net/images/icons/priorities/major.svg">Major</priority>
<status id="14794" iconUrl="https://adesso-group-extern.atlassian.net/" description="">To Do</status>
<statusCategory id="2" key="new" colorName="blue-gray"/>
<resolution id="-1">Unresolved</resolution>
<assignee accountid="712020:1a31ac71-0e6f-49af-83f9-0d630a810204">Marcus Hinz</assignee>
<reporter accountid="712020:0a2bb4c7-7da6-48f0-8264-d021465e5f0f">Lukas H&#246;rger</reporter>
<labels>
</labels>
<created>Wed, 8 Apr 2026 11:43:54 +0200</created>
<updated>Thu, 2 Jul 2026 14:28:25 +0200</updated>
<due></due>
<votes>0</votes>
<watches>0</watches>
<attachments>
</attachments>
<subtasks>
</subtasks>
<customfields>
<customfield id="customfield_10000" key="com.atlassian.jira.plugins.jira-development-integration-plugin:devsummarycf">
<customfieldname>Development</customfieldname>
<customfieldvalues>
</customfieldvalues>
</customfield>
<customfield id="customfield_10019" key="com.pyxis.greenhopper.jira:gh-lexo-rank">
<customfieldname>Rank</customfieldname>
<customfieldvalues>
<customfieldvalue>0|i5ji9k:</customfieldvalue>
</customfieldvalues>
</customfield>
<customfield id="customfield_13432" key="com.atlassian.jira.plugin.system.customfieldtypes:select">
<customfieldname>T-Shirt Size - Storypoint</customfieldname>
<customfieldvalues>
<customfieldvalue key="20365"><![CDATA[L]]></customfieldvalue>
</customfieldvalues>
</customfield>
<customfield id="customfield_13430" key="com.atlassian.jira.plugin.system.customfieldtypes:textarea">
<customfieldname> Definition of Ready - Formale Kriterien</customfieldname>
<customfieldvalues>
<customfieldvalue>&lt;h3&gt;&lt;a name=&quot;%F0%9F%93%98Funktionsbeschreibung%3A&quot;&gt;&lt;/a&gt;&lt;b&gt; Funktionsbeschreibung:&lt;/b&gt;&lt;/h3&gt;
&lt;p&gt;&lt;b&gt;Input:&lt;/b&gt; Klick-Events im 3D-Viewport und ggf. Auswahl-Events im modalen Overlay.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;b&gt;Verhalten / Ablauf:&lt;/b&gt;
&lt;ol&gt;
&lt;li&gt;&lt;b&gt;Startpunkt (Klick 1):&lt;/b&gt; Nutzer setzt den ersten Punkt (Typ 1 Weltkoordinaten oder Typ 2 PMI).&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Zeichnen &amp;amp; Filtern:&lt;/b&gt; Unmittelbar &lt;b&gt;nach dem 1. Klick&lt;/b&gt; (sofern dieser an einem PMI erfolgte) filtert die Engine den Szenegraphen. Anhand des Typs des Start-PMIs (z. B. Basic) werden alle inkompatiblen PMIs (z. B. Allround) f&#252;r den aktuellen Zeichen-Modus als ung&#252;ltig markiert. W&#228;hrend der Nutzer nun die Gummiband-Linie zum Endpunkt zieht, werden diese inkompatiblen PMIs konsequent nicht gehighlighted und k&#246;nnen nicht angeklickt werden.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Endpunkt (Klick 2):&lt;/b&gt; Nutzer setzt den zweiten Punkt.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Vererbungslogik &amp;amp; Konfiguration:&lt;/b&gt; Die Engine entscheidet anhand folgender Logik-Matrix, woher die Parameter (Typ/F&#252;llung) stammen:
&lt;ul&gt;
&lt;li&gt;&lt;b&gt;Start: Frei | Ende: Frei&lt;/b&gt; &#8594; Keine Vererbung. Das modale Auswahl-Overlay &#246;ffnet sich. Standard-Elemente werden nach Best&#228;tigung generiert.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Start: PMI | Ende: Frei&lt;/b&gt; &#8594; Vererbung der Properties vom Start-PMI. Das Overlay erscheint &lt;b&gt;nicht&lt;/b&gt;.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Start: Frei | Ende: PMI&lt;/b&gt; &#8594; Vererbung der Properties vom End-PMI. Das Overlay erscheint &lt;b&gt;nicht&lt;/b&gt;.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Start: PMI | Ende: PMI&lt;/b&gt; &#8594; Vererbung der Properties vom Start-PMI. (Typengleichheit ist durch das Filtern in Schritt 2 bereits sichergestellt). Das Overlay erscheint &lt;b&gt;nicht&lt;/b&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Geometrie-Berechnung:&lt;/b&gt; Y-Offset und Rotationen werden ignoriert. Absolute Strecke &#252;ber Pythagoras ({{L = &#8730;(&#916;x&#178; + &#916;z&#178;)}}), Winkel &#252;ber &lt;tt&gt;atan2(&#916;z, &#916;x)&lt;/tt&gt; (auf XZ-Ebene projiziert).&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Element-Aufteilung:&lt;/b&gt; Die Logik &lt;tt&gt;berechnung_aufteilung_laenge&lt;/tt&gt; ermittelt die Rasterelemente &lt;em&gt;(siehe Algorithmus-Abschnitt unten)&lt;/em&gt;.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Generierung:&lt;/b&gt; Elemente werden kaskadierend via PMI (Typ 2) eingebaut.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Validierung:&lt;/b&gt; Trigger der lokalen Validierungsengine.&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;&lt;a name=&quot;Algorithmus%3AElementAufteilung%28%7B%7Bberechnungaufteilunglaenge%7D%7D%29&quot;&gt;&lt;/a&gt;Algorithmus: Element-Aufteilung (&lt;tt&gt;berechnung_aufteilung_laenge&lt;/tt&gt;)&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;b&gt;1. Grundkonfiguration:&lt;/b&gt;
&lt;ul&gt;
&lt;li&gt;&lt;b&gt;Typ &quot;Basic&quot;:&lt;/b&gt; Der Elementabstand wird als Parameter &#252;bergeben; es gibt keinen Steherzusatz (0 mm).&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Typ &quot;Allround&quot;:&lt;/b&gt; Fester Elementabstand von &lt;b&gt;11 mm&lt;/b&gt;, Steherzusatz von &lt;b&gt;51 mm&lt;/b&gt; pro Element.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;T&#252;ren:&lt;/b&gt; Ist eine T&#252;r in der Konfiguration enthalten, wird pauschal ein Ma&#223; von &lt;b&gt;1124 mm&lt;/b&gt; (zzgl. Elementabstand) von der Gesamtbreite abgezogen.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;2. Standardelemente (Greedy):&lt;/b&gt; Der Raum wird systematisch mit den gr&#246;&#223;ten passenden Standardelementen gef&#252;llt (Priorit&#228;t: 1507, 1034, 776, 518 mm).&lt;/li&gt;
&lt;li&gt;&lt;b&gt;3. Dead Zone Correction (Todeszone):&lt;/b&gt; Bleibt eine kritische Restbreite (zwischen 43 mm und Mindestbreite der F&#252;llung) &#252;brig, wird das kleinste bereits verplante Element downgradet (z. B. 776 mm -&amp;gt; 518 mm) oder gel&#246;scht, um Platz f&#252;r ein produzierbares Sonderelement zu schaffen.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;4. Sonderelement (Rasterung):&lt;/b&gt; Aus der Restbreite wird im &lt;b&gt;43-mm-Raster&lt;/b&gt; das finale Passst&#252;ck ermittelt. Restl&#252;cken &amp;lt; 43 mm werden als Toleranz ignoriert.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;b&gt;Pseudocode der Aufteilungslogik:&lt;/b&gt;&lt;/p&gt;
&lt;div class=&quot;preformatted panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;preformattedContent panelContent&quot;&gt;
&lt;pre&gt;FUNCTION calculate_width_distribution(type, has_door, gap_input, total_width, filling_type)
INITIALIZE results AS dictionary
// --- 1. Base Setup &amp;amp; Door Deduction ---
IF type == &quot;Basic&quot; THEN
gap = gap_input
post_addition = 0
ELSE IF type == &quot;Allround&quot; THEN
gap = 11
post_addition = 51
END IF
IF has_door == TRUE THEN
deduction = 1124 + gap
results[&quot;door_count&quot;] = 1
ELSE IF type != &quot;0&quot; THEN
deduction = 51
results[&quot;door_count&quot;] = 0
ELSE
deduction = 0
results[&quot;door_count&quot;] = 0
END IF
remaining_width = total_width - deduction
test_width = remaining_width
// --- 2. Distribute Standard Elements (Greedy Approach) ---
STANDARD_SIZES = [1507, 1034, 776, 518]
element_counts = {1507: 0, 1034: 0, 776: 0, 518: 0}
FOR EACH size IN STANDARD_SIZES DO
required_width = size + post_addition
WHILE test_width &amp;gt;= required_width DO
element_counts[size] = element_counts[size] + 1
remaining_width = test_width - required_width
test_width = remaining_width - gap
END WHILE
END FOR
// --- 3. Dead Zone Correction ---
min_special_element = (IF filling_type == 0 THEN 174 ELSE 131) + post_addition
IF test_width &amp;gt;= 43 AND test_width &amp;lt;= min_special_element THEN
smallest_assigned = FIND_SMALLEST_ASSIGNED_ELEMENT(element_counts)
next_smaller = FIND_NEXT_SMALLER_SIZE(STANDARD_SIZES, smallest_assigned)
IF smallest_assigned EXISTS THEN
element_counts[smallest_assigned] = element_counts[smallest_assigned] - 1
IF next_smaller EXISTS THEN
// Downgrade to next smaller standard element
element_counts[next_smaller] = element_counts[next_smaller] + 1
difference = smallest_assigned - next_smaller
remaining_width = remaining_width + difference
test_width = test_width + difference
ELSE
// Lowest element was 518, remove it completely
freed_space = post_addition + smallest_assigned + gap
remaining_width = remaining_width + freed_space
test_width = test_width + freed_space
END IF
END IF
END IF
SAVE element_counts TO results
test_width = test_width - post_addition
// --- 4. Special Element (Sonderelement) Calculation ---
special_element_width = 0
test_width_int = FLOOR(test_width)
IF test_width_int &amp;lt; 43 THEN
special_element_width = 0
ELSE IF test_width_int &amp;gt;= 518 AND test_width_int &amp;lt; 561 THEN
results[&quot;518_count&quot;] = results[&quot;518_count&quot;] + 1
remaining_width = remaining_width - 518 - gap - post_addition
ELSE IF test_width_int &amp;gt;= 776 AND test_width_int &amp;lt; 819 THEN
results[&quot;776_count&quot;] = results[&quot;776_count&quot;] + 1
remaining_width = remaining_width - 776 - gap - post_addition
ELSE IF test_width_int &amp;gt;= 131 AND test_width_int &amp;lt; 776 THEN
// Calculate based on a grid step of 43
calculated_size = ((test_width_int - 131) / 43) * 43 + 131
IF calculated_size == 131 AND min_special_element != 131 + post_addition THEN
special_element_width = 0 // Min size rule prevents a 131 element
ELSE
special_element_width = calculated_size
END IF
END IF
// --- 5. Final Remainder Output ---
results[&quot;special_element&quot;] = special_element_width
IF special_element_width &amp;gt; 0 THEN
remaining_width = remaining_width - special_element_width - gap - post_addition
END IF
results[&quot;final_remainder&quot;] = remaining_width
RETURN results
END FUNCTION
FUNCTION determine_parameters_and_generate(start_point, end_point)
// --- 1. Vererbungs-Weiche (Typ und F&#252;llung ermitteln) ---
IF start_point.is_pmi == TRUE THEN
// Vererbung vom Start-PMI (gilt f&#252;r PMI+Frei und PMI+PMI)
fence_type = start_point.parent.type
fence_filling = start_point.parent.filling
ELSE IF end_point.is_pmi == TRUE THEN
// R&#252;ckw&#228;rtsvererbung vom End-PMI (gilt f&#252;r Frei+PMI)
fence_type = end_point.parent.type
fence_filling = end_point.parent.filling
ELSE
// Beide Punkte frei (Frei+Frei) -&amp;gt; Modales UI-Overlay
ui_selection = SHOW_MODAL_OVERLAY()
IF ui_selection == CANCELLED THEN RETURN
fence_type = ui_selection.type
fence_filling = ui_selection.filling
END IF
// --- 2. Geometrie berechnen ---
total_width = CALCULATE_2D_DISTANCE(start_point, end_point)
angle = CALCULATE_2D_ANGLE(start_point, end_point)
// --- 3. Aufteilung berechnen (Kern-Algorithmus bleibt unver&#228;ndert) ---
distribution = calculate_width_distribution(fence_type, FALSE, 0, total_width, fence_filling)
// --- 4. Kaskadierende Platzierung triggern ---
PLACE_FENCE_ELEMENTS(distribution, start_point, angle)
END FUNCTION&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;
&lt;h4&gt;&lt;a name=&quot;NichtZiele%28OutofScope%29&quot;&gt;&lt;/a&gt;Nicht-Ziele (Out of Scope)&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;b&gt;Live-Vorschau (Ghosting):&lt;/b&gt; Das Rendern einer 3D-Vorschau des Zauns w&#228;hrend der Mausbewegung.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Passst&#252;cke (Sonderbau):&lt;/b&gt; Generierung freier Sonder-Bauteile au&#223;erhalb des 43-mm-Rasters.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Spezifikation des Overlays:&lt;/b&gt; Das UI des modalen Overlays wird separat spezifiziert.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr /&gt;
&lt;h3&gt;&lt;a name=&quot;%F0%9F%93%91Akzeptanzkriterien%3A&quot;&gt;&lt;/a&gt;&lt;b&gt; Akzeptanzkriterien:&lt;/b&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Die Vererbungsmatrix wird strikt eingehalten: Das Konfigurations-Overlay &#246;ffnet sich &lt;em&gt;ausschlie&#223;lich&lt;/em&gt;, wenn sowohl Start- als auch Endpunkt frei im Raum (Typ 1) liegen.&lt;/li&gt;
&lt;li&gt;Ist der Startpunkt ein PMI, werden inkompatible PMIs im Viewer beim Hovern ignoriert und nicht als Snapping-Ziel angeboten.&lt;/li&gt;
&lt;li&gt;Startet der Zaun frei und endet an einem PMI, &#252;bernimmt der Zaun die Parameter des Ziel-Elements fehlerfrei (R&#252;ckw&#228;rtsvererbung).&lt;/li&gt;
&lt;li&gt;Geometrie wird flach auf der XZ-Ebene berechnet; H&#246;henunterschiede zwischen den Punkten f&#252;hren nicht zu schiefen Z&#228;unen.&lt;/li&gt;
&lt;li&gt;Kaskadierendes Verhalten: Bei Verschiebung des Eltern-Bauteils bewegt sich der gesamte Zaun-Verbund mit.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr /&gt;
&lt;h3&gt;&lt;a name=&quot;%F0%9F%A7%AATestCases%3A&quot;&gt;&lt;/a&gt;&lt;b&gt; Test Cases:&lt;/b&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;b&gt;&lt;span class=&quot;error&quot;&gt;&amp;#91;R&#252;ckw&#228;rtsvererbung&amp;#93;&lt;/span&gt;&lt;/b&gt;: Startpunkt ins Freie klicken -&amp;gt; Endpunkt an PMI eines Basic-Zauns mit Polycarbonat-F&#252;llung snappen -&amp;gt; &lt;em&gt;Erwartetes Ergebnis:&lt;/em&gt; Kein Overlay &#246;ffnet sich. Es wird sofort ein Basic-Zaun mit Polycarbonat generiert, der an das Ziel snappt.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;&lt;span class=&quot;error&quot;&gt;&amp;#91;PMI Typen-Filter&amp;#93;&lt;/span&gt;&lt;/b&gt;: Startpunkt an Allround-PMI klicken -&amp;gt; Maus &#252;ber ein Basic-PMI bewegen -&amp;gt; &lt;em&gt;Erwartetes Ergebnis:&lt;/em&gt; Das Basic-PMI wird nicht gehighlighted und kann nicht als Endpunkt ausgew&#228;hlt werden.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;&lt;span class=&quot;error&quot;&gt;&amp;#91;Overlay-Trigger&amp;#93;&lt;/span&gt;&lt;/b&gt;: Startpunkt frei klicken -&amp;gt; Endpunkt frei klicken -&amp;gt;&lt;em&gt;Erwartetes Ergebnis:&lt;/em&gt; Modales Overlay zur Parameterauswahl &#246;ffnet sich.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr /&gt;
&lt;h3&gt;&lt;a name=&quot;%E2%9A%A0%EF%B8%8FEdgeCases%3A%C2%A0&quot;&gt;&lt;/a&gt;&lt;b&gt;&#9888;&#65039; Edge Cases:&lt;/b&gt;&#160;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;b&gt;&lt;span class=&quot;error&quot;&gt;&amp;#91;Abbruch w&#228;hrend Zeichnen&amp;#93;&lt;/span&gt;&lt;/b&gt;: &lt;tt&gt;ESC&lt;/tt&gt; oder ein Klick au&#223;erhalb des Canvas bricht den Modus nach Klick 1 restlos ab.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;&lt;span class=&quot;error&quot;&gt;&amp;#91;Distanz zu kurz&amp;#93;&lt;/span&gt;&lt;/b&gt;: Ist die Gesamtdistanz kleiner als das schmalste verf&#252;gbare Rasterelement, f&#252;hrt der Abschluss im Overlay zu einem No-Op (keine Generierung).&lt;/li&gt;
&lt;li&gt;&lt;b&gt;&lt;span class=&quot;error&quot;&gt;&amp;#91;Eltern-L&#246;schung&amp;#93;&lt;/span&gt;&lt;/b&gt;: Wird das Bauteil gel&#246;scht, an dessen PMI der Zaun beginnt, verliert das erste Zaunelement seine Typ 2 Bedingung, f&#228;llt auf Typ 1 zur&#252;ck und der Zaun bleibt stehen.&lt;/li&gt;
&lt;/ul&gt;
</customfieldvalue>
</customfieldvalues>
</customfield>
<customfield id="customfield_13429" key="com.atlassian.jira.plugin.system.customfieldtypes:multicheckboxes">
<customfieldname> DoR - Checkliste</customfieldname>
<customfieldvalues>
<customfieldvalue key="20347"><![CDATA[Ziel eindeutig formuliert (W-Fragen vollständig?)]]></customfieldvalue>
<customfieldvalue key="20349"><![CDATA[Akzeptanzkriterien definiert]]></customfieldvalue>
<customfieldvalue key="20350"><![CDATA[mind. ein Testfall dokumentiert]]></customfieldvalue>
<customfieldvalue key="20351"><![CDATA[Priorität gesetzt]]></customfieldvalue>
<customfieldvalue key="20352"><![CDATA[Edge Cases beschrieben]]></customfieldvalue>
<customfieldvalue key="20353"><![CDATA[TShirtAufwand geschätzt]]></customfieldvalue>
</customfieldvalues>
</customfield>
</customfields>
</item>
</channel>
</rss>