<p dir="auto"><code class="notranslate">WireframeGeometry</code> generates duplicate edges for both indexed and non-indexed buffer geometry.</p>
<p dir="auto">This is true by inspection, as the code does not test for duplicate xyz-coordinates.</p>
<p dir="auto">A simple non-indexed example is:</p>
<div class="highlight highlight-source-js notranslate position-relative overflow-auto" dir="auto" data-snippet-clipboard-copy-content="const geometry = new THREE.TetrahedronGeometry( 1, 0 ); // 6 unique edges

const wireframe = new THREE.WireframeGeometry( geometry ); // 12 edges"><pre class="notranslate"><span class="pl-k">const</span> <span class="pl-s1">geometry</span> <span class="pl-c1">=</span> <span class="pl-k">new</span> <span class="pl-c1">THREE</span><span class="pl-kos">.</span><span class="pl-c1">TetrahedronGeometry</span><span class="pl-kos">(</span> <span class="pl-c1">1</span><span class="pl-kos">,</span> <span class="pl-c1">0</span> <span class="pl-kos">)</span><span class="pl-kos">;</span> <span class="pl-c">// 6 unique edges</span>

<span class="pl-k">const</span> <span class="pl-s1">wireframe</span> <span class="pl-c1">=</span> <span class="pl-k">new</span> <span class="pl-c1">THREE</span><span class="pl-kos">.</span><span class="pl-c1">WireframeGeometry</span><span class="pl-kos">(</span> <span class="pl-s1">geometry</span> <span class="pl-kos">)</span><span class="pl-kos">;</span> <span class="pl-c">// 12 edges</span></pre></div>
<p dir="auto"><code class="notranslate">BoxGeometry( 1, 1, 1 )</code> is a simple indexed example.</p>
<p dir="auto">Duplicating an edge is not a problem most of the time, but when using dashed lines, it is a problem.</p>
<hr>
<p dir="auto">EDIT: Actually, instead of "duplicate edges", they should be referred to as "coincident edges": A -&gt; B  =  B -&gt; A.</p>
<p dir="auto">Discussion continued from <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/mrdoob/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/mrdoob">@mrdoob</a>'s question in <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="17013713" data-permission-text="Title is private" data-url="https://github.com/mrdoob/three.js/issues/3657" data-hovercard-type="pull_request" data-hovercard-url="/mrdoob/three.js/pull/3657/hovercard" href="https://github.com/mrdoob/three.js/pull/3657">#3657</a>.</p>
<p dir="auto">It sure would simplify the code. Non-planar quads would no longer shade incorrectly (because quads wouldn't exist). Raycasting against modified quad terrain would work correctly.</p>
<p dir="auto">The downside is a wireframe cube in CanvasRenderer and WebGLRenderer would no longer have 6 square faces. CanvasRender may be slower. Converters would have to be changed first. We'd lose backward compatibility with existing quad-based models.</p>