@@ -336,15 +336,22 @@ function parallelFollow(rp,thick=4,minR=1,mode=1)=
336
336
)
337
337
concat(cen,outR);
338
338
339
+ function is90or270(ang)= ang== 90 ?1 :ang== 270 ?1 :0 ;
340
+
339
341
function findPoint(ang1,refpoint1,ang2,refpoint2,r= 0 )=
340
342
// finds the intersection of two lines given two angles and points on those lines
341
343
let(
344
+ overrideX= is90or270(ang1)?
345
+ refpoint1.x:
346
+ is90or270(ang2)?
347
+ refpoint2.x:
348
+ 0 ,
342
349
m1= tan (ang1),
343
350
c1= refpoint1.y- m1* refpoint1.x,
344
351
m2= tan (ang2),
345
352
c2= refpoint2.y- m2* refpoint2.x,
346
- outputX= ang1 == 90 ?refpoint1.x:ang2 == 90 ?refpoint2.x :(c2- c1)/(m1- m2),
347
- outputY= ang1== 90 ?m2* outputX+ c2:m1* outputX+ c1
353
+ outputX= overrideX?overrideX :(c2- c1)/(m1- m2),
354
+ outputY= is90or270( ang1) ?m2* outputX+ c2:m1* outputX+ c1
348
355
)
349
356
[outputX,outputY,r];
350
357
@@ -384,13 +391,23 @@ function beamChain(radiiPoints,offset1=0,offset2,mode=0,minR=0,startAngle,endAng
384
391
getAngle(radiiPoints[Lrp- 1 ],radiiPoints[Lrp- 2 ])+ endAngle:
385
392
endAngle,
386
393
OffLn1= [for (i= [0 :Lrp3]) offset1== 0 ?radiiPoints[i+ 1 ]:parallelFollow([radiiPoints[i],radiiPoints[i+ 1 ],radiiPoints[i+ 2 ]],offset1,minR,mode= CWorCCW1)],
387
- OffLn2= [for (i= [0 :Lrp3]) offset2== 0 ?radiiPoints[i+ 1 ]:parallelFollow([radiiPoints[i],radiiPoints[i+ 1 ],radiiPoints[i+ 2 ]],offset2b,minR,mode= CWorCCW2)],
394
+ OffLn2= [for (i= [0 :Lrp3]) offset2== 0 ?radiiPoints[i+ 1 ]:parallelFollow([radiiPoints[i],radiiPoints[i+ 1 ],radiiPoints[i+ 2 ]],offset2b,minR,mode= CWorCCW2)],
395
+
388
396
Rp1= abs (radiiPoints[0 ].z),
389
397
Rp2= abs (radiiPoints[Lrp- 1 ].z),
390
- endP1a= findPoint(getAngle(radiiPoints[0 ],radiiPoints[1 ]), OffLn1[0 ], startAngle,radiiPoints[0 ], Rp1),
391
- endP1b= findPoint(getAngle(radiiPoints[Lrp- 1 ],radiiPoints[Lrp- 2 ]), OffLn1[len(OffLn1)- 1 ], endAngle,radiiPoints[Lrp- 1 ], Rp2),
392
- endP2a= findPoint(getAngle(radiiPoints[0 ],radiiPoints[1 ]), OffLn2[0 ], startAngle,radiiPoints[0 ], Rp1),
393
- endP2b= findPoint(getAngle(radiiPoints[Lrp- 1 ],radiiPoints[Lrp- 2 ]), OffLn2[len(OffLn1)- 1 ], endAngle,radiiPoints[Lrp- 1 ], Rp2),
398
+
399
+ endP1aAngle = getAngle(radiiPoints[0 ],radiiPoints[1 ]),
400
+ endP1a= findPoint(endP1aAngle, OffLn1[0 ], startAngle,radiiPoints[0 ], Rp1),
401
+
402
+ endP1bAngle = getAngle(radiiPoints[Lrp- 1 ],radiiPoints[Lrp- 2 ]),
403
+ endP1b= findPoint(endP1bAngle, OffLn1[len(OffLn1)- 1 ], endAngle,radiiPoints[Lrp- 1 ], Rp2),
404
+
405
+ endP2aAngle = getAngle(radiiPoints[0 ],radiiPoints[1 ]),
406
+ endP2a= findPoint(endP2aAngle, OffLn2[0 ], startAngle,radiiPoints[0 ], Rp1),
407
+
408
+ endP2bAngle = getAngle(radiiPoints[Lrp- 1 ],radiiPoints[Lrp- 2 ]),
409
+ endP2b= findPoint(endP2bAngle, OffLn2[len(OffLn1)- 1 ], endAngle,radiiPoints[Lrp- 1 ], Rp2),
410
+
394
411
absEnda= getAngle(endP1a,endP2a),
395
412
absEndb= getAngle(endP1b,endP2b),
396
413
negRP1a= [cos (absEnda)* radiiPoints[0 ].z* 10 + endP1a.x, sin (absEnda)* radiiPoints[0 ].z* 10 + endP1a.y, 0.0 ],
0 commit comments