From 6cb3b1b8b926ece2843a34ecbe2cdcca9bd0d0d1 Mon Sep 17 00:00:00 2001 From: Daniel Caspi Date: Thu, 7 Dec 2023 14:01:01 -0600 Subject: [PATCH 1/5] refactor cylinder drawing method to perform dashes calculation --- src/GLModel.ts | 28 ++++++++++++++++++++-------- 1 file changed, 20 insertions(+), 8 deletions(-) diff --git a/src/GLModel.ts b/src/GLModel.ts index d3c27dc0..ab68fd97 100644 --- a/src/GLModel.ts +++ b/src/GLModel.ts @@ -658,7 +658,7 @@ export class GLModel { this.drawSphereImposter(geo, atom as XYZ, radius, C); }; - static drawDashedStickImposter(geo: Geometry, from: XYZ, to: XYZ, radius: number, color: Color, fromCap: CAP = 0, toCap: CAP = 0, dashLength: number = 0.1, gapLength: number = 0.25) { + private calculateDashes(from: XYZ, to: XYZ, radius: number, dashLength: number, gapLength: number) { var cylinderLength = Math.sqrt(Math.pow((from.x - to.x), 2) + Math.pow((from.y - to.y), 2) + Math.pow((from.z - to.z), 2)); // Constrain dash and gap lengths to not exceed cylinder length @@ -683,19 +683,21 @@ export class GLModel { // Recalculate gapLength based on final totalSegments and totalDashLength gapLength = (cylinderLength - totalDashLength) / totalSegments; + var new_to; var new_from = new Vector3(from.x, from.y, from.z); - var new_to = new Vector3(to.x, to.y, to.z); var gapVector = new Vector3((to.x - from.x) / (cylinderLength / gapLength), (to.y - from.y) / (cylinderLength / gapLength), (to.z - from.z) / (cylinderLength / gapLength)); var dashVector = new Vector3((to.x - from.x) / (cylinderLength / dashLength), (to.y - from.y) / (cylinderLength / dashLength), (to.z - from.z) / (cylinderLength / dashLength)); + var segments = []; for (var place = 0; place < totalSegments; place++) { new_to = new Vector3(new_from.x + dashVector.x, new_from.y + dashVector.y, new_from.z + dashVector.z); - // this.intersectionShape.cylinder.push(new $3Dmol.Cylinder(new_from, new_to, radius)); - GLModel.drawStickImposter(geo, new_from, new_to, radius, color); + segments.push({ from: new_from, to: new_to }); new_from = new Vector3(new_to.x + gapVector.x, new_to.y + gapVector.y, new_to.z + gapVector.z); } - }; + + return segments; + } static drawStickImposter(geo: Geometry, from: XYZ, to: XYZ, radius: number, color: Color, fromCap:CAP = 0, toCap:CAP = 0) { //we need the four corners - two have from coord, two have to coord, the normal @@ -790,10 +792,20 @@ export class GLModel { if (!atom.capDrawn && atom.bonds.length < 4) fromCap = 2; - var selectCylDrawMethod = function (bondOrder) { - if (geo.imposter) return (atomDashedBonds || bondOrder < 1) ? GLModel.drawDashedStickImposter : GLModel.drawStickImposter; + var selectCylDrawMethod = (bondOrder) => { + var drawMethod = geo.imposter ? GLModel.drawStickImposter : GLDraw.drawCylinder; - return GLDraw.drawCylinder; //mesh cylinder + if (!atomDashedBonds && bondOrder >= 1) { + return drawMethod; + } + + // draw dashes + return (geo, from, to, radius, color, fromCap = 0, toCap = 0, dashLength = 0.1, gapLength = 0.25) => { + var segments = this.calculateDashes(from, to, radius, dashLength, gapLength); + segments.forEach(segment => { + drawMethod(geo, segment.from, segment.to, radius, color, fromCap, toCap); + }); + }; }; for (i = 0; i < atom.bonds.length; i++) { From 315186c4a33dd968fd4cd92ff11807b08838901a Mon Sep 17 00:00:00 2001 From: Daniel Caspi Date: Thu, 7 Dec 2023 14:02:40 -0600 Subject: [PATCH 2/5] update algorithm for dash calculation --- src/GLModel.ts | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/src/GLModel.ts b/src/GLModel.ts index ab68fd97..f7850110 100644 --- a/src/GLModel.ts +++ b/src/GLModel.ts @@ -661,25 +661,25 @@ export class GLModel { private calculateDashes(from: XYZ, to: XYZ, radius: number, dashLength: number, gapLength: number) { var cylinderLength = Math.sqrt(Math.pow((from.x - to.x), 2) + Math.pow((from.y - to.y), 2) + Math.pow((from.z - to.z), 2)); + // Ensure non-negative values and set a minimum dash length + radius = Math.max(radius, 0); + gapLength = Math.max(gapLength, 0) + 2 * radius; + dashLength = Math.max(dashLength, 0.001); + // Constrain dash and gap lengths to not exceed cylinder length dashLength = Math.min(dashLength, cylinderLength); gapLength = Math.min(gapLength, cylinderLength); - // Initial calculations for totalSegments based on input dashLength, gapLength, and radius - var totalSegments = Math.floor(cylinderLength / (dashLength + gapLength + radius)); - - // Make totalSegments odd to ensure dashed segments at both ends - totalSegments += totalSegments % 2 === 0 ? 1 : 0; + // Handle cases where dashLength + gapLength exceeds cylinderLength + if (dashLength + gapLength > cylinderLength) { + dashLength = cylinderLength; + gapLength = 0; // No gap as the dash fills the cylinder + } + // Initial calculations for totalSegments based on input dashLength and gapLength + var totalSegments = Math.floor((cylinderLength - dashLength) / (dashLength + gapLength)) + 1; var totalDashLength = totalSegments * dashLength; - // If totalDashLength exceeds cylinder length, adjust it - if (totalDashLength > cylinderLength) { - totalSegments = Math.floor(cylinderLength / dashLength); - totalSegments -= totalSegments % 2 === 0 ? 1 : 0; // Make it odd - totalDashLength = totalSegments * dashLength; // Recalculate totalDashLength - } - // Recalculate gapLength based on final totalSegments and totalDashLength gapLength = (cylinderLength - totalDashLength) / totalSegments; From 50135ff797c06fe08ffce11428a46a605abf5c20 Mon Sep 17 00:00:00 2001 From: Daniel Caspi Date: Thu, 7 Dec 2023 14:02:49 -0600 Subject: [PATCH 3/5] updated test images --- ...glcheck-render-tests-partialbonds.html.png | Bin 23417 -> 26079 bytes ...lcheck-render-tests-partialbonds3.html.png | Bin 35992 -> 34762 bytes 2 files changed, 0 insertions(+), 0 deletions(-) diff --git a/tests/glcheck/reference-images/tests-glcheck-render-tests-partialbonds.html.png b/tests/glcheck/reference-images/tests-glcheck-render-tests-partialbonds.html.png index c47f86bf17d05f5235bdc3b874ef16cd078cc4e6..b3d9275c91b3397819c59fa3634057af40c844ea 100644 GIT binary patch literal 26079 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 literal 23417 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 diff --git a/tests/glcheck/reference-images/tests-glcheck-render-tests-partialbonds3.html.png b/tests/glcheck/reference-images/tests-glcheck-render-tests-partialbonds3.html.png index 9d1c69881e62567f459c634f6c0d7934bf42737a..3e989684c2fd959eea8f0a5ff60f59deafd8e774 100644 GIT binary patch literal 34762 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

kmEA*@=QqyLvVUEz>QKk9@q{W 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 literal 35992 zcmeGEi9gi)`v#8B3=>AoSS#zuzNJ&462_85WZ#LRWQme}8?sf(oEDYH64{qz7qS#3 zYu0S3ELpQ<3*Y-i=X1{Q_x%&T@AG(6r|B`T<@vnt>%Q*mx}R?9XrE%hao|uW6vJtC zRXr4niirH8-36cYx$d%uKhSP^r<74S&0IfFC?e{#s*-`1)zpA@q~*wyvAN=3Vtsp^ zZp_{CeDyd_P#{PxE+q1S>W|-_^oq?m++RGh-;7XmC^U=vC=z#9nTF#*a&K6OAW1eT zFZ2!RP0$%Kg+Oa#AC3A;X0TDy`&?sTR6uTvoA=~O$AoW-d}DDk^X2l1XKo5(1=j-t z2FLt4!r(uybF@S<3iHozBpil;n!@_v81?^s1pnxT#?az1|NSIch=e+QCx(jeKi@^6 zLoT7v)CAH$zv;0M$;oO>LH~Y2AdyiuhyVK>OgbHbr1yN3^v@F@&q6{C@B6>2z_)`s zsA-Amx^Be(T%158|J?om^XLv3YD!1iF~WbJlR)y?_21hQrO_C5hYl{<|2`)z@dVX> zZ%>Iqp#`KJ7(@PD7Ziq?@a(_eA*gGSQTI5cX_WtYTjVwv+Lr%*hxUKV^uJ~LUo`zM z=}7;>rvE|s|0>=82*Ljd!T$)s{|LeVM+m_!KG$K<)RJHC)VkYSzr=8G{65LRz)(7v z$hSNnMD?~rJqPorrEq|DDt(_MZzSn2>S(PeUoT3_mZxiJDR>pg$drwW_#HVm#=*hS zufwXmD=f@ntCb=rb99_>ak+empnhwP;L5hsz8L6|QF4>ugC1*{x(<1KOK-OGqh3n-+VJ> z5=nY9)n!ziklhr=VJOe4@Hy#2c(i42ySQW(2RkX4aQ-17lwhcGclYj+X?gh>L9zWO z{cKBwc6u}+0TSv7VUJ=Y=_NM$`t_q&$`38AfcJ(btM<ydc~SlTACi)_ zV!RWpKRfY;3KD*4TeZiA$j|nYlI%=y#I>2*939!rNrd^jnSnI^oraTi8cRzQteCTq z!6d$Ezsu;U=9r0xD?Dai@)PkJ?~ArdUw+=cWuuvwq(E4IowvvK&9QF9qvM_p6Wm;j z@_gYmyZQ$=1D02EEc>bdbfO}OD0Fg&Y@DVVk=3MiaHiSG**z6DPoGsGIK|jzNrg|K zf8&Ex^{wdhKNkG>eHN=7RE<@9UgO%I6Am5x!pN|@#M0k?=Cl~!iO8Mze4q_`SZ3ag z<^LJ<=CY*Z6&v%XPkY?TyP82x<7PAXv4)XdA;XUV79nCHhPV0No8w`xef#7(#u`zKyCV0T5^ znnv}QXt4!-o&7~JvixQ~BV+yoQ+{@AgiOEjDjfHmvsY~kqd3t9rK?hgiO3+Hf(5J& zLU(ueO$L0>li<yLTF>mxK5!YVnDUpXNW+ zs%t&oSOP z=i+^DiP7T4cGQFvkQ*L+m2vxdw=sAY*A}S*%RAMe!)qGYgLgd4;{REiQET+B)U5 zV%-yxlTn|?7jl0$@u8rJ5^qEk^|6HNkg2e@wYPQxO%w^Vk|qlQ3@@$y_!llM1!HV- z`g>#2*H10?#fTYxJ%>d*UxBJZ=w?iK`bZhzTnvE2Hys8Ra?lUj`Wh37-7 z4tjk*g%-(aYr|DEG;u{=3Z15YtCa(%B1DO}m}M|oql00{fZ`Ei7gu&1?S{_u@s z!~lZL5t?NF&)Cd-1{Z^k$7fi|Vp4?XldAzwb8*GPGm9tLYQt8BFDYaBo zNL}mmn|i#yF=TXznXoBN&I8hvzSJQ$QCkE__a0{S|_EGGhVwOqZjaXB(lJ}xK z{YPUIL;&WCklRh#IxH)xp#MX(O{hQdVYb)vo8t;()uwSAca!e;UU72TY^_jY{kozA z*?zUN63S74XK|m;)Lz+tlICCRQ)h<2l_2!pHNG=0yciUzgWl&%XOyzWBpn~F-&(tg zXCR*F8JhK2S}N_vbAJ{3Bj%D$Lk0_$wpj>aPGe%`n2eNINi}vRF*N7d2pipE#M)7^ zs^-g@7ULxqrMl>IKdQ_EQc&kRqxf}~E-0Bl^-a#a&G~GUR8O<&+ zw5pP-erxzsrd!S>gx2=y(2 zgf9sRHgXqM2}xE2N7ZiTth6;7hH;~fl?Kt&mH1ax#%|?4XA0it`rnnTzV~G4g)GE@ z?_h<$|CQR87iRv7`E+|x{pueE`j6QVDQ3;a)VHs3H2BC#mNsX4E5k!jD%VrYZ61D$ zjAl>$aB8pZS2jY`Zb#SFB@;GV>o?OA)9%F{9@jkoDEP~PjyVySNdIS}p=o$kL&{9G(j`Mm6Y$!^ zI5|h}(|$647BX1^oR596wR}1T=ukRCnImUy1I(YAcL4VToQOVWs$afzZ{_j?lUff= z(&-;KBF)pE*R5>2NpJX>{?w#USOc}*~e#3?HCUKdLkeA5;PhFQ)9ofi;xQn3@{N( zVIhZ4I_;5kw2E2|nwpt(o8^_Cc-C89%;jYvxbqtS!cDSh0%|_-@+Uu(E>)Qr@iVqD z+WIn7md^GQ6fe}v#Lx^f7sp;#9C5O|e4vGnczICyZs<;>*MedrJu*_uB$E2(15k41 zC9(-NxwKd7vQyS>83Ps{K{E9#sK7ikA%&;dC^J`<8~xWm(7iX@A>=wF2q3hJ*rO0q z1$MNka8=U#k~vFR1`$Vmd5q|w+Wjb|wU8xRjMznW&DHvi?DNU3!S12iXZ;oBgOA?M zG3_`+2{_nfG2%QEE%BfQ$)6`9IJWom#6=m|^ zC!NIHyVUyaoqLk9y#os_obr&0J*@I)H*{ewP7rB{IxJ}E=Tg(-KMe^C{JV?4E`93g z4B?Teo`~>K^}AojAQl;YDP1;MHs)SsRn?HOGLJRMMr($X_YZl>hRYPPk1jBYyd+0k zta=kAB_CcM$8ne?jXbhGDHD@)g{6ayfuu>EQSBZ4Q(`J%*^?HMw`62obByNFn}1*8@O_S zJ!p+S_H+AJBdxfJ(ZZrNR1ztPJHI1#hAP6N`c{UZS+KMOc{jr<>e_YdH{5&ox>^E~ z-l+{A$fUt{ZPgs5`h(JYAED5;7H58g*Jz+g(i$HVCx@_6tkoj01nDGka!J@OMfy69 zHhcgERCi*A*4{`L)*86%=EUXDoI$57CE49?pPpsaHo)q-tpOJ*UhVm7nN~AD!>@kj=+0JUKy#UXmp?ujg}G07+|@rN z&Ud(w+ogj>?+G?(;*`pb+{p3S7piQ`^u#$ypU#9UkO$j*h}Wa4wu?F_G?&R~_hqLc zh0(dyKm80r-59EHj_fHFR1h`V@OX2iN8LMLgWi8;0rXmR?w8HtFJH-V`owvlW!`*I zZG(@U6JMYby{1xwN*a181$HC?2 z@812^n4dI=WHt@KQF&RVUC~~zJNY_25z#*?D;2tXKYg3IbSf)fLBm28sU{>fSeShk zf5oz6?AS~?+J-&r+wW!Bpao*?<)D(BeWcTVdi{3IIV5cB+RDwzbsb0SqM3irE%!m= zz57lqQ%*xV2)WP;hmyRJN>FOYZ$SFZXiA5MmV5&J;|`XBbf`*V#1a3;CD)Lh4LXA( zkPdm99~GtkAnvN+_Daq-gol77Jbj>$g-KEhZ9c}S?xhMVz+!YZ%GaqoXa4-PksTsw zs{@-*{j^4uPv;_f$z6o}(b3ucRYwR9gQx+^S_E3a2z~6x!7m*wNiGZ`Ck`I`!jr_T zH(Gzoal7(1PymxuWN+vzp@P0)V(tbQ`IgH)PkFl>WUsN-VNDpOlP6}7Rkg;~{Hrvh z-Ly4dttAnlU=;saED`pY4cqr87A8a>F!>e2)lfmUXhWrFkLx9+ZAPzU1S|N>f>X$e zE{@8)5m1jM#rt0v$Ip1yb8s#8E%1!bdYb$A^z&OyJi+c9jwu0L;+ z0jwzfkO*%$3e(BbswWXjzZ4SN)&E=R;q%05Ete|_gULKkALL9#EFs`{4*ilZG=}Lb zC~K2$PknuQl8SwbZ=K!IGOYU{BCqPt-GE{$g~l?45|)C~a7h^vyV#l|g;E?>J0JA0 zS7eaWb|vwJ4j+;L$W5M2#_8quy}!C${WK8OV3q342tP#_js4p#^~_bx(|q1xUsoc42ZFKP1JloXUkRV3j{VaRmqH8reUtqfn)ZRF zbtlvxUElRNRMI}awsr|f5sr>prBJhAJAdM522D5RUyDnnck1t!Zq+8#T$3kRNN(rH z0OW^z6*d;K_KfP6{&f9~NCKAfDOk|N2CFJhWGDGyRr?kh8OuN!uHw#xO=oaiczNNB zMm(*8;_dBRC$YgM8TxW3-DY zOf#?Uf;`bd*%Kbj<;RSK9?bmA=cnPek8!0yPjEak+)1sTQ0q4G3FOtPWL>{CGe@{K5u6R?fHh2HF zoO`ecO0W}u07&SEgc2k@i~;#B1+6GhM9B7_DlupE$h^+*0$q1@L#6^p)OD{b8Z#7B zZOrGna49Qt;Howa61oZM5N!Jgv~sXP%yjlNSy*T1`qaczjd{PdO&A!o8w;{%R1Fyo zPak>HN<#ruzj}F}(YXTFN!J4T*}hYEOU8api~lY3=ns4Ifr~9>9b*Popi5#HjS0!I zA}HcP{DOLjPJVwZmF@?-wwRl80kycj4t`zbNV1M0g&UA9$GI=VtH_UaClhHOBcoKv zmWe}e`6W@(o9)O8wL9Yw^NOnIw?ZlPG;CpVw!IYPrQj7Y^}s6gp@Ak!O~1mv*rVG4 z7YzYtS}7OHiJ^_uB-wnu9(rf=VroL7Dc{`bAH(w!ljyc^NA<*WVbY*(*Bw7}bo|%y zaycU64;8!ccF(Qy?Su|tZxt-^Z=>G=7+PBklG68D=rVj&0GTBvE0vQ{OxQ^=Hv~-r zgtHRxb+XU#yGy93sB$ukyDNOgDeHkW_=~?Yj>+#_YhI9qdf&bA)d|WcYtTV*+Ww?b zwAwS2iA01ErLO;z^yPYPwWP6eSKgCzMoV6^z@IV*NI%5+xtv`tx+B{I)DqB z$HmIJXM94qFGO2o-d8k~iCxdLz3yWg7M$wM2g7fQZzFx$O}M2{mY)dRQqx-ZRJfd` zJhA%MYaG!*dl@YNiR0{JsdD38B5(Wyg`?v>VPSswh;zZ9ZiB*Cp87b_D%boEB;mvW zlE&|h6!derRv?N9XQE>2q~@fk3E5*6`(7Sl`c)0o(>=-derEl z0Gj7e=iNvJ=Fu*CQJ9EnieWD|^w`t4IX=(VKpoGaJ<}L#mLbU85j;&Jlp1dCoA}%L%+E4;h6MJSmaAWSp3=; zo+6N}?_p%PH$JA}zN)BQc%FN$hl^qw^Ngp7u5Bp&c#>uQ5mEWe>cf8rp@;D82nR_K zw!P;Wc5b@^6DfzinmUW>jv@tNS(RB2YP&eQPhfS~fI#5*AC8z-C)9wQuxrWs_TXT( z(pV;OVWBjq$+lg!pe8g#l7kyQrtPu4;^=6nlNfz5UC~yf z;G~Nl5;SYioqgCyjQHIvR@)*$b)4K`w>z=4I|=L!rS$uV_Ek`>T-!0JMFk~zXgE9@ z+ULdl_&|7<5wz@EoM?>ckQP=opXa$5(^kCvt8A;MawECrCjL)f>jV*-KX5f?PY^S` z$n{t`_Y8fuIvUF8#VRgM%~u_qNxR%9(U&9FNJj(*MnhIm%+Bx2Ux7$d=xlydy7cgnIHF76VHlXe-y&7wvB~tRq7yV*+&4Z;SC(ytIK$2EvX{!}9p-Do`XKt(yj9#eM ztHdz^1wcq)B}CY2Wnip46g?8DX8#j+Z2)6YGnH4cS!tewyKd;85ve>p*c3 zw+f{^zj0#*Iuw?pQ~|7ic*V|WrjA(9;l9uPNkuY`fA(VBottb zx=$Au9fbaVS2NAqa^e}mJ%=O=rTyNtCSM;53*FsBLnoXPE@vCs^uu>;eS=(c?oh%( ze$SXs+k4xP1QhbNXQ&(WIWf32+_j62nL`YYYMPoU_&PDJVP*;J1Ej%)EL8s5$;2Rf zVy|@S7J1s+(PwML71`JzKWMw={kM+#QWG90lS3(ogS|mEnV`~TDT}s?W0y{M)Q)ie zBqu?pW|%Mwvs1xI3vTeeNIpB?{L^teflngR`Uaz$Kd{CmGT6afsizDHij=&>YT2~O z7QoTxBc^7z><%k;V9!HOsvU7Lgo_(`QJP)9BPo5y<^JBrNO%-#n0k%EVrU;&k(5+B z84cx)RBzxeiII;;uPT0GG_}Fj`H)ya1BU{Q2HL1Iv3) zBUEGooeW(Z=}59`4A@FxtQm^Q$3DOCOh#Qpq{Ycu&pzPYR0brko}G&H&-^hz-A4!K zB^BJ5J)IF~GRhHQtPX@kkN3E6rVLDyH}Uf=+1+V5!wi5$|`3oIwJ*SRzm4B0i z-+Jq(u8D$@A(Px%G~CHv!A`m>^#zf>KCE@JC!2lZUE)yCFJ#Dp>l+_g%4a3gXExU*>D&O19*?o-e;J4KzQ5 z@Jx0)bo1$T(4y-sZ}Jp`EkE4xXh4k=wCJdBft|ZHF>n z6=)h2oM=3&;o`K|NictA2LYv?7;V3FIXo*5*AC_91@6!Q8SNz<5r*pa`JVAk z-?3~O_Au1^!?A6-qC*K@jOIEcnE$J+CeqF^<~?1b;>6U;dOlg0uaB(L@v6SDj!y>@ z6E%3%TfQX3KY&(UfuaSyOTEYR2Vv?pvP1D(EUs!rsO6_H!P} zlOpQOmvbS`UK`9=e~A$}qqyD9&h{Q|=3lt5LoirR!5hT-zJCa{up4AGdZ8TK zj#;@1!E#(?3~-?96E zXDx%Q?eB?ySnPk~BtfRuW@8|MqCYB`DoT5eNgXuz4A6*R)-dnlS6f(ESUNg-k(YFY zKN*x>ZaI&S+$X$R-QC?w9dk-w2;2gD4W5ql1R~h3a@|4>>ZHjVq2v}v#|1+In7(!< zX2G4&I%w0y&fK!gpI(&Sy?a*!b=k>j5p8R2{bmU;@cF5zvW@lS^5$l3&*{Q$?UmRS z>`vXE7XVuIY2d2`6N$(Ifj#U2v{i;)UAl2CHYN2_mn_$_@QpMxLP5gF;{k?qKs; z?p9~hGx@%z$A8t*P}22N%YOax*n>w3(&4gb8*Z>KjFmj5dWNmMN7$C@SkAHzQs`BY zYATWn#4UC?E)#SRF-mX8KDN$gv)u zFDsDGJUNu2hrWFIa=JuyzS?#3uoUi>zovS>612yd&8{H+c7fu>8^BOt>jkxit+u` zd&$wa#_#w}wzvcMbfDu@_LE6}VOdW!E37+J(Rb~;6#JJGrw8ZsFtM zfsaoP52U9)JMP3>=25MIBgTZ~phLTO&+E6dX_S?f^)tx!>)h5KJ-j0ts3Y>j@nbZq zsG$AyB3=^bD*b?MIjS0C1$GlTRPB{i%zsVHvT3s-mPiwg?zx7-ZYy)!<2el5ou2?a z$-RF21JJ3oGwC1=0qCe4K7Q=#C&)bs%F^k5$=ChEnrPc7%HXH8XGxkDmCOb#m;bP! zJ*Bi`AE?14II8Dg!ungGu@Mi&jn{%gVrUNeuPuH!0?Oz#G*35;+7Xeoi#KV+R7TLh zDMosxS#DNB>VWZfsiOEo0?oMa?EyS8Wz~sjJwq^5y7=+&@H&b0xWP#4gX_}i!de=| zf+iUN?$Ixj!w)MTmy;W)`rTM%J9qDx@J?R8gD!gC9u`H!Uq533n(wd*pXxSTY!b9I zjA?amfQMJ4Vg&nhN*}ZoWe~VvpoxZYC2Udg_b}c-Nhm;Wg<-o8M*_4Ty2gJL{w9(G z>5{?CyD@%h;OpDl8;quAF?OIZBwq)Y=YWZWa`z)K;Fk!^%|Za;4ySC{WNuYuiM7SP z?O;m;6br4au;2or;3O&W+t=Gt9=F*gHTsjfqc2?sCbk5I01gq!%;#r%U)9S#Kj%5% zZd!VznQEKq2hl<93e~;EBckSg7M+&*lY1<`Hy@wOV!FCI*NwHpCh?%96VF|HFL)F951}s%_?L{ZfGGI{#NJGH@t_!< zXuPf1=tQb^R@XfKjc*1!2@W?LbF1Lhvs?KN_GknMPr@wS${`chxYxPST+RK z(8gX7gHIylU#MsF{G=s&XOe4$Z|5=-&_1UxbAMTZw-yTurQcJQqWOr?Jd6!bETRXq zM9&TcqZet8#~xwS&z(DGr_fO3+}H0}xe%vkdJWs)6Y}KO>lpmCg(lfCgRoEAZIQ@r0CEY> zm`O;}kF+A{J*taO4qq~Qk(}9X!>3ZMIt0?wX@-eYce&=kVwvgx;rY(zOAyT=x9oqq z=Bvo@IfT;c(4Y;Kqa{qg`YJi?FEc!LL|i~YRDQRx3_o<V*!w+}eFHzSP$91cAXJ%$L zW?Pnb4S4i9|J$qvEdt>FFm*#@S8G+Y^ow}knbO*#aYJ`ihVjp6X#4NnxwGk(#bgOl zNx4CTFS9K7C}rT3X^m`twav>ZrVx%7T^NMnZ+6T&Aa6xP+nORMmkn%151FA9I*qnn zo*9@5Gkif4?syX5=^FS5?}xR%JzydwcwrXCS`=;66AeiPCv!oYMjg_Ft298&o1GBI z*`AI}AOM&t_p2R%qB(ycL1R17d`Zoa92(fVqTxF5NFpj?GOQ%v@;wrSCYqOOi(XjO8?=UK-P{O)F{(c4g13P3E@XcU{^^c@re%T_pFw8hf+aJ2=dj+cZ6uZAsq`)u)inea`W$Dyh^WwX!L~lQlqnBWJ|D7v=C6r3A%tcti(>CXQ(M_0_&R%0s z-Xvn{s2W;Zb?iW};y>lbX1o4tdS>L&Igd=^+-5~)V$I8_ z*#A9?eL3yLb_n=|w9}(3SG}@;Q)~}h)nE?95UVTI@J!zKH>HO2N=ahFbqkPp0e{{B z678!}isgY8+?b@KEKfAMm9phvG8~Mh@1N>@i2h1WfLlZG(Kw9Uq*`-)rKJv_=> z0v4W*oE-VEU1cZ0G)Z5V{DQzr&`a!r((m_dpzXgs=yd~XbUrR3+S(MEN0F@k{PIG$ z?__py|Hkr=;xDCtCYKywBo<=xE7C8r&;Y|K}qCk|_y6mjQb8iJ^3 z`kUkA24bWg`v*LSET{E9){R-ZR%2(fUNz4*cGXnwGrYej81?KKPnE!QH4X2_x?^t4 z$XoV8a@m!Cvyj5je%Jd_Lodbk7a4?O7=X0QpR$w7g7HXj|8sH<6njjYd3IZRj57)u21)YEj zKJWVI=qX683i9UCCY0S@QUjl{nvHj0W)CSvOeTKmFeKM`yJXWsY5*s|DSPEQUJ>kA zzuedJ8VJ93v3`hu%FcV>l>SOyT(tzbp$!wkB@vRQdrl#ok^7qO@{Ida8Ru)ogFcQq z7Dr8yRg;2Md)+VE3~;F-l`v7CZ`UZM-@Y`TeT?X{stw}?^hHf*T|1)1vy{NqZu(;7 zhOTV$f#s^LjgRXS#|>BWMCaHQYzYS{aFR8k3aysuEY**jqg98l>CwI%fw4&hHZE$6 z#^baJkYWhJeY5-)3kdfBv)1h^S!-6}YGcO^>Y>kHXTdE+C5e%(nw|B^tZK5E`g~NT z&i!^N9f>|u9x$OFKmQPK9{eKAjo!LwQS9>S!|0UWUv)<4(;2}HDv2MJBX-GVDA#>? zcSeyt7TC*o#2l`D`c9Oe3|=&=j8T@!@Mv?~(~?R3qcpZa{Wq}#G5Kt2HIhEHqCd(# zrmwkFZFpRK`YC%%rLpC@Wzp|5JVqN4QdRkz_{rNZL5Scr!onXmY^r>!8^jF8_jUti z?lZna>sH>p$8)%lnw1Zz_#wfM3o{cG`TU<*04Rfw=n6k6tJfumU?7bUx_c6qlqB`T zh%axCoB7@31x=VCa_*B^&UW$7>`GM}ZrN%LSNM)#QAdP}KkwYcsUE)rG?QCSC2LPI)v zZJz<14z2EZYkQX0jiPBryTgAu?YoCj?@7)HoHlN$McNGaZp%me{?&_~r3*_m`LB#fxV#l_8p?y+)hkzckLFm(ELQ~H_tY`uD8uG6wO zy?MrpfMoS8*`)eMHlpO7qSsyYNv3B|))jGak-+g%e59j_+o?vBo|8wf}DMtt!N#%r4pr#@)x zEqbZft}xhtkR0Mhs=-BAy`Da|E(r$Pcj)snGBblapwx>ujhO}5bwB9XVvuRAu|}} zDkZ@A=ZxMZlcBr_O%Jv27XaF` zojO`zic0t3{r6h319fiO2FXDfd1(+BUO{Xyq9(@YvhmwDF-6&zYJ?IUZ{Cx(3zsLZ zJqp0$D_&<_QVzUySb1?idyr;HzW-`Hce+JR#!;W@?kRlJu{JJ(rDhNL$_DRgv}*U! zXSj$1LW5NI;0c)q#8fA!dO;3bZ}zObe~X3&>1J;Mn2LV29EkxM^8kY*Y=cuqqzP8Q zNx3-tl4Js~H>uHy@VwFM&Ptg&I+J#%%no?`NO`p8OqSm88?FhhjJbeT?ZjI~H6QCo zHwsmR!=eNmZ)w5ooEZuZB4H0tf~TX37I0E+Y0r9~r!Zx41oqMlaCNe;{yh>rwb+71 zjfVtDOTErFYoxC*Rz6e|`<|m@+RhR#je1I(lVT$0IddIK)UEX&X9LX+Ukhbi3K-uz zd@Vm2b+3TB(T60IPjA$IP?;W7E!Bq!2gy#o`EMmJwUMs3H^u*lToOTH;7kcIp)2(fFe0F`dYADWg z(7Q7JBS!&2TXWKd3u&a(*Tf4uM-0 ztl>u&UGW%1q%~pzLpDcVcka1!OWX;-3IsB&Ka?-ZFdS6f_HNd(Qd2#P74I`k=V^O>vDIa;3)E>zmei zkzZCc8v2Vu9)fdi`PFY~p6k=am*$Mzv=Od!0O(z5iB>EO8W6#(Tk^BG-ga^`MPWD5 z=rpZ3aTsyy?f1rGB7}m@xiv}OS9~%qTiEw7gXg$xXq0Q&>Z8g6lYs@7dXZW|}&sxYl->^Cud)wJGptyNU(GW`CeY zYJ9{>T2yw?8d!Vfg`yh^Nt3PNXoI!_rOUsDkeHUhO}FLGj=5T&XXhKGmTekpP93#q z#k@WD`|Y_iUd&}$zVTCBgwUwDGs=PRf&=p7__Y{rYcT{i#5k9 zR?WY{X|Wr@76hCf{$?wjXpYidQmK&o9A>=1i#zxER*x77$l7FbZv44z{m}I;szx8S zk(Skhq#0F^`GBLXkUm=Lbg`tfGu?eG;VQIH6_I^11wQERg9;Uo9c9yQ&V(%u;{$u7 z%JbjNd+B?Z#A+Ba_h}!!EIv55i}Lp_riryF^M^eC;ea{zXaR)~*Q9RCpY^vJ5i?#0 zX2G5u+*gI%^7~m5%iF@vY%!eA%i@U}a42r|-kP8U*+ek}10%P3I&F_OEgJJ#)dmB% z{FlG+Zh4)dfV_6x-yD_yVj($wv?wko`c68Ic~iSx+vK)BzZ8$P+x{bGi7U z^AZ^bgxG1blq>^NKSV?eBVCbmPhK^`FZjj8j@TEAHwnH>G3Lk8nX9E-nDAqZ{#v!? zKy7=BF%9V% zk6l2ER6c#!G~a6Uy2z=qxwq(>)@M3#F156Y@aA4jgymC1FF5Gdn49(W!mG1c^UpP+ zGI$-kvaU*1Eb3jH5f%n%i}t%AfN!^4z4x}dMu7P|-^Ai+ms(Sz&*|<*S{hM!vE7$K z#!p%r5-Jj0hAIav-8&71WB(T8$u!E2xz482n9HhHb8#_wkSX(P9aTgqqL0bFcg6X< z-m3N3%pYAqMAP_W5(N#*jHrj>5#Qog(`!?nsp`L3bq=}{*ah)0~2n@(UHu< zYhVw6FwVf)QOG*^j?;zfh4-NM*y^aKq2j$!@1BE7nPd|(ZE?F{)vbVTF_F{d$cd;j z#&v)Ad`WH0g^hBMTvt3)_+!lMd=W@v%h3I-S>~;5j}ab49RK&6^K?jx&rmOZ&CLk5 znqfP_iZXD{Qwp6MF$D|jAvKKfMcbH4!Tgy+>*iaj0NwN?`}dEcb$gqQ*?DTJZ?Ioe z>(ekcB>0Dk9UT_%d}?t`@jJY4^KQqMO?CCCSIDQ2wJ4?;+Z4CfRa5-!P|DxYHgAiExzpEdhE-UG z*pdy}hUp=VNN^;InlkZp{w8w69BPAAomXCaNm<9_E9s5=bP}CSId@UkXUbc`S*DBJ zyG$<`t|>aLBw%-O20t#qy7YuRD~QzKQw`*Cc^oDCs@|7${X&hPt&CS|O}MjYY$j*J zdqht>21DrIr^2q5AvY<+cI*wP#_lnQd7J&dkK=XraU1=&F!M4Im*>6D$GcnGvB1P!>W8vb~%iiT0&`fCP<6P%&dEv--+LTGY!G)a~ND zw$y37K9IYZUC9jFFX?p((y!{Y9?P0K9Gxz9!E*cmxMaxP=55}os#$xz`FM+q|D<`P z=Sg{9q>Do6|2-kz?bCM$;peJ_jBN}4Z>kdFp=S)B)9Z=2Vu;HWGGPIE6GQ_YU6Z^` z0yd~>y}T-OF)$JiySz8>+mrQoOe-w=@CiJ(Y=5W5hA2CQkyl~LbE5rVHE4vT#^?My zU6`_zZaByUg8AzW>;)>39?ZulQ#aWljZzkU+VX|Bx7aFiNw-e+MDXB=KE1}SIwYv^ zChp&*w&tb$PoC_geJXiq5aj=RrG}O@mU%+VqyjDpE(v?|_wK6A!rW#!a|s1{W~*`g ztSjj_#N+kYV>o2*ywMds;(lp+>Y{CW^+e4-*aEGsU_f^a^Gjza5G^r6r)PXZBg=T^CmoS&S* zs{=#CQo!Oph9yjQq?igyz5W^O3ljd}K*gg zTi{m49!%329!?DB;V63kP;CF!;@K^O-mvblU7vqd4s%gfh&Au0f>Q!m`^=2ds^(Oa zeHS0tYg*G2%^Xq&ayB=Hwl)MpSKQ$ysG#?-H$vj|vk0@q?$MD}HKdhH0q?A@?Ss!T zgMHp#ZwmXZ(B249u2cM7tGF^^Y}RaN$gq z=DNTTctR!y&d!xvrVsxHD4iQ?+F3wnP&=CciI-x}R1HjfdXsOhX0x78S`8`+fX48Bc zfz*@iFl@FubIlpq1UBjpa!!gt(d~!IL57Mo6QPC&oH#A%@#j`*_V^txYoY=SzzXo3 zXVt!^9BD{864{D@L)euyn^7S1eBStw!7Ej{lGK-Pr^%+eLc1MO_hG;zHj<|bne_vb zE6;1DYjf<7KX4m}7HCcuA-j=mI8$&n~71CG&XPMbaU-{m_F=}z*+^$8}WpPIZ zjhh;&1T;JQL&2NC;_~f^A$} zhvOVefgua9ZsC#@pNpKIu6O1JJUnKujhH(kub`HE^o-v=siMa8Sl+iN{vywTs{BDb z#F|34k8F+T=rE%ZJC8wi$=6%reprFuXF~BCXZG5Em9q&&tEO`8qU0^ZDf&JS&-%OE zGsRUKlFNuJLLy!OaEKfrY>&-1+#-X=hJQyxD|T>P95gUSlev97HslgmKYx}o2I&Gj zOB^@ufK9?pV_helkKbBp25-@##$iQ+)z&(5eX zf%}yb$A=kgYx%3Zb9VaAu>}8Lc8@Gaix&zBNi9WIgpJYwAtzPiC1}VIrDs@0&T4v~ zyc^H;eVZf@pTd(m4en`11`+n^ljPYrCQ=Cr8bMZ{3%O2j;Lpl0bv&+8{EQ!eRkI25 z7LKkf7Y-{qap6@|Ui&cNnb!QVOp=rB%_i*1HI{{oav2^yGsbJV((!%m;)V)Gwp1SC zmon_@#hW(1{J(E_R0%OB7R|qYZY--v%RFy=_|Vjdh1B;L>YRi50UJKci=WP(RW}&6 zfvJ>Qj(4?Up?59sppsfz?@6pnV8!T<;$&zUL%Pm*+{kaT-<7#++L~?Xt=QBEt#C}>{QdaFvD6mY+%`DN zyrNUmE^X;O@^Gf%Z~lOuFW}p}b9Y9LJwhV;1I1lh8XJfIhXI+jJ^rC6XUj}Mo#A=m zzF#s~gmJ+EOoY`08_9r9H!4IqqUmkPOxff+17pP442}|G0UbfoEt4Ar0{7{DwxoiO z8r`lxzbNs_7|ivQTzx(?r_q>w#EBxco#TFp*Ksxes3wAd}#sq%B?iGx;YIp6GDM zSo+k0{1N+qt`7qU^X^qg&Efh%Z!Re;?5p~&@h~cHJ|Ql3F_@QegPyY@TUX96-S{M5 zmVk+%s?=NzA>i8`S)p4KuL>AkjvhG(c9Gjl?!4=f4m5-~H~2XoDMlIO@qSt7&);EQ z!7?~CNE2zuZ$aRT4$6<*f~-o#Oca(Zwrl#2)J9u|nh%+c@b}MqB%}5RyJnjCKEXda zlQWUW2rly_yTq4QZv_9_QEZfTF1l4j}@rTpQwMoNEZ1B2kx~-hp)Rq$-TC; zxjtJC12=rBFma5S^B-VJKy-OyYyzgiRNx?Op>;JzkyAx#!{MkgO1H3DjIrpjK}pAZ zj*8l2`;ha7Mn@$rpcnj@dDC2K;j`c*XvRE3&@l`~mAZ|=X&#=A{M=iq-q|9gYY`Vd-JQNrhHp7*Qw4cO-Owf#}7OWuVQGyzVcWb47gT1`y zyXfVaFhkC-QmYxk0!=-%V|F3(Y(9y_DJC&-FWttpm)D231_#_)FLnfqxH^Zkc^^W=f)82PRHMuoyhZ0ISND)wqBy?yk`2QTH`!_$}o9chjCf zzt|EJ(00Hq-=*slD@ma$-m<&ClvZaY7@M49RsX2sAtb#syt$tNpkUdM>{7|fZGz^N ze{YJ_DHejavdE9v*W;*uH)tvtqK*MBrUc;Gu4T<@QzF ze1bK??+*!qSqcT_mb{Yp41;HtVhnlCqA8GH_tfAPH4Ei-j$m6uqJZeMg*VL8bAsF| zYAX7zJjEC+G~ukDSO8OJ4QRH*$+p8Sqf~FD3kfXolQlAkPnVEL+2u(JfS|e~<6J=A zOYf{>tp*Ya0hzn}NdY0Bn>{YijeU1Hm@4nt+bUi{ChfAB?s-?q*UHV~jz3c7a>c~t zVN2_47hCDa3Biq!LoyTRk>+OcDvxN|(yvrCg*Jb=8fWB^at`olHiObGJK!RHf=2#v zvj0+dz*yMgxscv3(QV&e4P1O*na(mN22Qz&vNw3b}_Jr0)3dB1>}tl@KQ*g8mBJ`e*eyQ@lMd(0?zz_ zU>5RSF+IPSn~$0tr_2onxbSy#i{3F$47N(K2>E6kbBnG=FvdQ^1JY>G7?4|WN+qk4 zr0;`a*i64jym1XH33p!b^0;l0)raRfQv&ZI?cYK~cAT<8>HfyH_@WpNe?ehcB5(@9 zra~n!M1qQAxj_uB(8kYmyj#78U^roor$6V9eWCDEwW zsCe!;0NnuEnWlb&d21RjnITfm*Fa;e>Kf(#&;_WeQEGPVGkuPkGc7a~n3KDs+i+R4 zscr_A5$SS%NZ8NBr3uNg$hBHSSaTG;G^DEfLte$(E{YVd4Ba+VzI!>~#g_HvI;AxI zg3O}AhHBzFj_-%ls=otW0lGiVBFfOJIWlTitp8Clq|;9F_P@PyuV|^~>dvgsK-P0# zL&rO5PW{&0oQE%L6Yd?$2d!B zeySGQ7e#xQ!*T!$!$ptZoQqjgCw9A!R#1+8?#UIPm=@~gGX-`N2-7%~)hk50Zb5z`#sljLl` zEhXD>OH)atr#+zCRR`S)Sw2En9}p0x%M@bpwhQihLeIa7i+_mlt;=ikq;x zXu0L_>1s3E-tdWH2W6wX=EdrGRS8qiG|9+dGNjN;WVR{iKR`bl*K(ihB{0zu<=BlD ztg@ld+YQIo%u~KEjTS3IzushRTasB(I4qO+GS!E#=i?Fpd9dx4?;$k?JuVUg>8a-4rThk{jD&>YmH<7jut zzoE30rNHVxQ7W+iHza z+B=VP3}b%;@!%ae*X-J($CIu%`U5cGQJc@K9-MjrsDmhMmit^TgZZHgI_)>Kv$TIX z%BJDpSb)m7qc>&N=U(>daYFAgr);*%~c=ca7+kEQ11e5NLbcT3eKBIPm8rwc6##T|5< zY`8)AJDyXaCPpFT;7dlW4QvP96F1gzq8z^vT zhsvi#AtG@mr@3uzs9u*fD?c6{zAXC4;ZJs>5b`^+ozDWOEC9oy+{YzUX6X z!3B^LmEHX0idmO)(*IPtM9xJEzM{PdEEmyt8xN_TzRC9Z`Kl3DTpLrS`HMIC>yv=+ zNLquG!l%#FPC9+~asV9~C*gRQ$Ws=(M+I>fUylVoOFK0jh#;$v?m%<;peR)j`AG1;wA`Br<3OHr@) zR+z>7tF6j7Qd&#Aq?u>GwcV=z8bW<%-!$Iykm-2 zzA{dFO))cMFdgFBv6jP&)Ai>$a_i1zhY;w(txp&-WZzTi`n_LQcI$kshoV-(wke@o@{zk z=v&Tf3U-k5`RfYy(h*Y+^)179?>#FqUjM@I7rzsUll%jqJGn)}(JGRmP#*H`>L~Y& z9%j~=QxBN~HnQg~6hkO)z%6KTc(K!RnRQ~@X5jSoU@H%JP#hr6BoSBf;=hDRuMYVc-<<=&D@2qPV{|Rj*+}myY=!gdC5v#obAbCI>Njm>qfjtR%U~4ew3L z_>^y1_4QeaWWQGb&4py_Ow58C)h6&l8rtStsLK(s2}gq<2=1JbP208R68~~#_Pqn+XH+NGr25y<6~4e$1QM&#;7(a9+gjtp-io1iFTA)3aWqf5 zAGE5pnG3W0&pO^arm*R%mLz6kbSYfsJs+IbhVCvT9r0x*U|i5=duXTYe@Wqq8)`y z&i!!57di(w|iZ}_H9H?6Xm;6oJNEp)43j&vIe^B%QFZ7u*xbBBb4s6Hzb7h>)d4@ zQfrmh#G6s84nL^EUouvpnCWF5cGn*qeqd~|Z)*7cHn~X~!pW=cw*&gA-tE-Cskxx` zmd;4Y8Y!&Ev%8== z3?W(gmgw+3EM2f82FQ3lhYgq{E8;`NH@lNJ&T&ZJyo%WMf9O>A#uFtO6o>}}30$Xs zJU)Cy75u{urWy<`m%I-gCKTU>%=4VSgmcHvO79EV>td%I2bDe9!UH>5plH543^oEc z1Xup`{#{@7iX!|MNtOp%#i%@Ognt14qulzj|I$H=ngz=nphf#89A(x-8hT!b0w)Jj z(^CGPV6Cnd^_3^ly%Z2WDvG9@m-Vu^@MjmBW7RkI{QUZvHdBz&j7mAMdZma18V37{ z5eOJ3E^XReCph%vJ62vjx@+*D20-Arhail4JnPY`0AzwMDy)U7Byp>RDa|u0XJ(t{ zDBBz&fT#gn=NHySAgoOnPl;c=R3Fz4RfOzE&4xj*#ofUvn!i5Gy3wMIef9BOwQb

TY5FW(_ShKoMv^C^|-5Z#GYxrA3%y|YQ5 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 Date: Thu, 7 Dec 2023 14:24:04 -0600 Subject: [PATCH 4/5] remove unnecessary constraints --- src/GLModel.ts | 4 ---- 1 file changed, 4 deletions(-) diff --git a/src/GLModel.ts b/src/GLModel.ts index f7850110..db7505bf 100644 --- a/src/GLModel.ts +++ b/src/GLModel.ts @@ -666,10 +666,6 @@ export class GLModel { gapLength = Math.max(gapLength, 0) + 2 * radius; dashLength = Math.max(dashLength, 0.001); - // Constrain dash and gap lengths to not exceed cylinder length - dashLength = Math.min(dashLength, cylinderLength); - gapLength = Math.min(gapLength, cylinderLength); - // Handle cases where dashLength + gapLength exceeds cylinderLength if (dashLength + gapLength > cylinderLength) { dashLength = cylinderLength; From 84c512a6bd8660abbd5029eca763024ea580d71b Mon Sep 17 00:00:00 2001 From: Daniel Caspi Date: Thu, 7 Dec 2023 14:58:33 -0600 Subject: [PATCH 5/5] update documentation --- src/GLModel.ts | 30 ++++++++++++++++++++---------- 1 file changed, 20 insertions(+), 10 deletions(-) diff --git a/src/GLModel.ts b/src/GLModel.ts index db7505bf..b2c4f412 100644 --- a/src/GLModel.ts +++ b/src/GLModel.ts @@ -659,24 +659,34 @@ export class GLModel { }; private calculateDashes(from: XYZ, to: XYZ, radius: number, dashLength: number, gapLength: number) { - var cylinderLength = Math.sqrt(Math.pow((from.x - to.x), 2) + Math.pow((from.y - to.y), 2) + Math.pow((from.z - to.z), 2)); - - // Ensure non-negative values and set a minimum dash length + // Calculate the length of a cylinder defined by two points 'from' and 'to'. + var cylinderLength = Math.sqrt( + Math.pow((from.x - to.x), 2) + + Math.pow((from.y - to.y), 2) + + Math.pow((from.z - to.z), 2) + ); + + // Ensure non-negative values for radius, dashLength, and gapLength. + // Adjust gapLength to include the radius of the cylinder. radius = Math.max(radius, 0); gapLength = Math.max(gapLength, 0) + 2 * radius; dashLength = Math.max(dashLength, 0.001); - - // Handle cases where dashLength + gapLength exceeds cylinderLength + + // Handle cases where the combined length of dash and gap exceeds the cylinder's length. + // In such cases, use a single dash to represent the entire cylinder with no gaps. if (dashLength + gapLength > cylinderLength) { dashLength = cylinderLength; - gapLength = 0; // No gap as the dash fills the cylinder + gapLength = 0; // No gap as the dash fills the entire cylinder. } - - // Initial calculations for totalSegments based on input dashLength and gapLength + + // Calculate the total number of dash-gap segments that can fit within the cylinder. var totalSegments = Math.floor((cylinderLength - dashLength) / (dashLength + gapLength)) + 1; + + // Compute the total length covered by dashes. var totalDashLength = totalSegments * dashLength; - - // Recalculate gapLength based on final totalSegments and totalDashLength + + // Recalculate gap length to evenly distribute remaining space among gaps. + // This ensures dashes and gaps are evenly spaced within the cylinder. gapLength = (cylinderLength - totalDashLength) / totalSegments; var new_to;