<div dir="ltr"><div>Three.js has ExtrudeGeometry and it uses Frenet frames: <a href="https://github.com/mrdoob/three.js/blob/master/src/geometries/ExtrudeGeometry.js" target="_blank">https://github.com/mrdoob/three.js/blob/master/src/geometries/ExtrudeGeometry.js</a></div><div><a href="https://github.com/mrdoob/three.js/blob/42048f84e788e7277ed0d5b211ce6dcdc72e6b48/src/extras/core/Curve.js#L337" target="_blank">https://github.com/mrdoob/three.js/blob/42048f84e788e7277ed0d5b211ce6dcdc72e6b48/src/extras/core/Curve.js#L337</a></div><div><br></div><div>Wikipedia has <a href="https://en.wikipedia.org/wiki/Frenet%E2%80%93Serret_formulas#Ribbons_and_tubes">https://en.wikipedia.org/wiki/Frenet%E2%80%93Serret_formulas#Ribbons_and_tubes</a></div><div><br></div><div>I believe the SCP is essentially the Frenet frame (y tangent to the direction of motion, z normal as the derivative or change in y, and x just the cross product) but perhaps the Three implementation has more robust ways to compute curve tangents, and normals.</div><div><br></div><div>Andreas</div><div><br></div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Fri, Jul 11, 2025 at 11:14 AM Holger Seelig <<a href="mailto:holger.seelig@yahoo.de" target="_blank">holger.seelig@yahoo.de</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div>The question is what can be done to prevent this.<div><br></div><div>Data URL will work (first bas64, then URL encode):</div><div><a href="https://create3000.github.io/x_ite/playground/?url=data:text/plain;base64,PFgzRD4KICA8U2NlbmU%2BCiAgICAgICAgPFNoYXBlPgogICAgICAgICAgPEFwcGVhcmFuY2U%2BCiAgICAgICAgICAgIDxNYXRlcmlhbCBkaWZmdXNlQ29sb3I9JzAuMSAwIDAuOCcvPgogICAgICAgICAgPC9BcHBlYXJhbmNlPgogICAgICAgICAgPEV4dHJ1c2lvbiBiZWdpbkNhcD0nZmFsc2UnIGVuZENhcD0nZmFsc2UnIHNjYWxlPScxIDEgMS4yIDEuMiAxLjQgMS40JyBzb2xpZD0nZmFsc2UnIHNwaW5lPScwIDAgMCAwIDEgMCAwIDAgMC4wMScvPgogICAgICAgIDwvU2hhcGU%2BCiAgPC9TY2VuZT4KPC9YM0Q%2B" target="_blank">https://create3000.github.io/x_ite/playground/?url=data:text/plain;base64,PFgzRD4KICA8U2NlbmU%2BCiAgICAgICAgPFNoYXBlPgogICAgICAgICAgPEFwcGVhcmFuY2U%2BCiAgICAgICAgICAgIDxNYXRlcmlhbCBkaWZmdXNlQ29sb3I9JzAuMSAwIDAuOCcvPgogICAgICAgICAgPC9BcHBlYXJhbmNlPgogICAgICAgICAgPEV4dHJ1c2lvbiBiZWdpbkNhcD0nZmFsc2UnIGVuZENhcD0nZmFsc2UnIHNjYWxlPScxIDEgMS4yIDEuMiAxLjQgMS40JyBzb2xpZD0nZmFsc2UnIHNwaW5lPScwIDAgMCAwIDEgMCAwIDAgMC4wMScvPgogICAgICAgIDwvU2hhcGU%2BCiAgPC9TY2VuZT4KPC9YM0Q%2B</a><div><br></div><div>Here is another edge case where the SPC axis changes to much:</div><div><br></div><div><a href="https://create3000.github.io/x_ite/playground/?url=https://create3000.github.io/Library/Tests/Components/Extrusion/wrong2.x3d" target="_blank">https://create3000.github.io/x_ite/playground/?url=https://create3000.github.io/Library/Tests/Components/Extrusion/wrong2.x3d</a></div><div><br></div><div><a href="https://andreasplesch.github.io/Library/Viewer/index.html?url=https://create3000.github.io/Library/Tests/Components/Extrusion/wrong2.x3d" target="_blank">https://andreasplesch.github.io/Library/Viewer/index.html?url=https://create3000.github.io/Library/Tests/Components/Extrusion/wrong2.x3d</a></div><div><br></div><div>But there was an old VRML viewer, which can this (see image). I don’t know what these people have done, seems it was not documented:</div><div><br></div><div><img alt="PastedGraphic-1.png" src="cid:ii_197fb3b4bb55b206ef61"></div><br id="m_-652399505481219147m_3101151781617371495m_-8183353166769586382lineBreakAtBeginningOfMessage"><div>
<div dir="auto" style="color:rgb(0,0,0);letter-spacing:normal;text-align:start;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;text-decoration:none"><div dir="auto" style="color:rgb(0,0,0);letter-spacing:normal;text-align:start;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;text-decoration:none"><div dir="auto" style="color:rgb(0,0,0);letter-spacing:normal;text-align:start;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;text-decoration:none"><div dir="auto" style="color:rgb(0,0,0);letter-spacing:normal;text-align:start;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;text-decoration:none"><div dir="auto" style="color:rgb(0,0,0);letter-spacing:normal;text-align:start;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;text-decoration:none"><div dir="auto" style="color:rgb(0,0,0);letter-spacing:normal;text-align:start;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;text-decoration:none"><div dir="auto" style="color:rgb(0,0,0);letter-spacing:normal;text-align:start;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;text-decoration:none"><div dir="auto" style="color:rgb(0,0,0);letter-spacing:normal;text-align:start;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;text-decoration:none"><div dir="auto" style="color:rgb(0,0,0);letter-spacing:normal;text-align:start;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;text-decoration:none"><div dir="auto" style="color:rgb(0,0,0);letter-spacing:normal;text-align:start;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;text-decoration:none"><div dir="auto" style="text-align:start;text-indent:0px"><div style="color:rgb(0,0,0);letter-spacing:normal;text-transform:none;white-space:normal;word-spacing:0px;text-decoration:none">—</div><div style="color:rgb(0,0,0);letter-spacing:normal;text-transform:none;white-space:normal;word-spacing:0px;text-decoration:none">Holger Seelig<br><a href="mailto:holger.seelig@yahoo.de" target="_blank">holger.seelig@yahoo.de</a><br><br></div></div></div></div></div></div></div></div></div></div></div></div>
</div>
<div><br><blockquote type="cite"><div>Am 11.07.2025 um 16:45 schrieb Andreas Plesch <<a href="mailto:andreasplesch@gmail.com" target="_blank">andreasplesch@gmail.com</a>>:</div><br><div><a href="https://andreasplesch.github.io/Library/Viewer/index.html?url=data:text/plain;base64,PFgzRD4KICA8U2NlbmU+CiAgICAgICAgPFNoYXBlPgogICAgICAgICAgPEFwcGVhcmFuY2U+CiAgICAgICAgICAgIDxNYXRlcmlhbCBkaWZmdXNlQ29sb3I9JzAuMSAwIDAuOCcvPgogICAgICAgICAgPC9BcHBlYXJhbmNlPgogICAgICAgICAgPEV4dHJ1c2lvbiBiZWdpbkNhcD0nZmFsc2UnIGVuZENhcD0nZmFsc2UnIHNjYWxlPScxIDEgMS4yIDEuMiAxLjQgMS40JyBzb2xpZD0nZmFsc2UnIHNwaW5lPScwIDAgMCAwIDEgMCAwIDAgMC4wMScvPgogICAgICAgIDwvU2hhcGU+CiAgPC9TY2VuZT4KPC9YM0Q+" style="font-family:Helvetica;font-size:12px;font-style:normal;font-variant-caps:normal;font-weight:400;letter-spacing:normal;text-align:start;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px" target="_blank">url=data:text/plain;base64,</a></div></blockquote></div><br></div></div></blockquote></div><div><br clear="all"></div><br><span class="gmail_signature_prefix">-- </span><br><div dir="ltr" class="gmail_signature"><div dir="ltr"><div>Andreas Plesch<br>Waltham, MA 02453</div></div></div>