@@ -158,6 +158,78 @@ describe("OCCT fillets unit tests", () => {
158158 result . delete ( ) ;
159159 } ) ;
160160
161+ it ( "should fillet multiple 3D wires with the same radius" , ( ) => {
162+ const starOpt1 = new Inputs . OCCT . StarDto ( 10 , 6 , 7 , [ 0 , 0 , 0 ] , [ 0 , 1 , 0 ] , 3 ) ;
163+ const starOpt2 = new Inputs . OCCT . StarDto ( 8 , 5 , 6 , [ 20 , 0 , 0 ] , [ 0 , 1 , 0 ] , 2 ) ;
164+ const star1 = wire . createStarWire ( starOpt1 ) ;
165+ const star2 = wire . createStarWire ( starOpt2 ) ;
166+
167+ const filletOptions = new Inputs . OCCT . Fillet3DWiresDto < TopoDS_Wire > (
168+ [ star1 , star2 ] ,
169+ 0.3 ,
170+ [ 0 , 1 , 0 ] ,
171+ ) ;
172+ const results = fillets . fillet3DWires ( filletOptions ) ;
173+
174+ expect ( results . length ) . toBe ( 2 ) ;
175+
176+ const edges1 = occHelper . edgesService . getEdgesAlongWire ( { shape : results [ 0 ] } ) ;
177+ const edges2 = occHelper . edgesService . getEdgesAlongWire ( { shape : results [ 1 ] } ) ;
178+
179+ // All edges should be filleted, so we expect more edges than original
180+ expect ( edges1 . length ) . toBe ( 28 ) ;
181+ expect ( edges2 . length ) . toBe ( 24 ) ;
182+
183+ // Some edges should be short fillet arcs
184+ const edgeLengths1 = edges1 . map ( e => occHelper . edgesService . getEdgeLength ( { shape : e } ) ) ;
185+ const edgeLengths2 = edges2 . map ( e => occHelper . edgesService . getEdgeLength ( { shape : e } ) ) ;
186+ const hasShortEdges1 = edgeLengths1 . some ( length => length < 1 ) ;
187+ const hasShortEdges2 = edgeLengths2 . some ( length => length < 1 ) ;
188+ expect ( hasShortEdges1 ) . toBe ( true ) ;
189+ expect ( hasShortEdges2 ) . toBe ( true ) ;
190+
191+ star1 . delete ( ) ;
192+ star2 . delete ( ) ;
193+ edges1 . forEach ( e => e . delete ( ) ) ;
194+ edges2 . forEach ( e => e . delete ( ) ) ;
195+ results . forEach ( r => r . delete ( ) ) ;
196+ } ) ;
197+
198+ it ( "should fillet multiple 3D wires with indexes" , ( ) => {
199+ const starOpt1 = new Inputs . OCCT . StarDto ( 10 , 6 , 7 , [ 0 , 0 , 0 ] , [ 0 , 1 , 0 ] , 3 ) ;
200+ const starOpt2 = new Inputs . OCCT . StarDto ( 8 , 5 , 6 , [ 20 , 0 , 0 ] , [ 0 , 1 , 0 ] , 2 ) ;
201+ const star1 = wire . createStarWire ( starOpt1 ) ;
202+ const star2 = wire . createStarWire ( starOpt2 ) ;
203+
204+ const filletOptions = new Inputs . OCCT . Fillet3DWiresDto < TopoDS_Wire > (
205+ [ star1 , star2 ] ,
206+ undefined ,
207+ [ 0 , 1 , 0 ] ,
208+ [ 0.2 , 0.4 , 0.3 ] ,
209+ [ 1 , 3 , 5 ] ,
210+ ) ;
211+ const results = fillets . fillet3DWires ( filletOptions ) ;
212+
213+ expect ( results . length ) . toBe ( 2 ) ;
214+
215+ const edges1 = occHelper . edgesService . getEdgesAlongWire ( { shape : results [ 0 ] } ) ;
216+ const edges2 = occHelper . edgesService . getEdgesAlongWire ( { shape : results [ 1 ] } ) ;
217+
218+ // Check that fillets were applied
219+ const edgeLengths1 = edges1 . map ( e => occHelper . edgesService . getEdgeLength ( { shape : e } ) ) ;
220+ const edgeLengths2 = edges2 . map ( e => occHelper . edgesService . getEdgeLength ( { shape : e } ) ) ;
221+ const hasShortEdges1 = edgeLengths1 . some ( length => length < 1 ) ;
222+ const hasShortEdges2 = edgeLengths2 . some ( length => length < 1 ) ;
223+ expect ( hasShortEdges1 ) . toBe ( true ) ;
224+ expect ( hasShortEdges2 ) . toBe ( true ) ;
225+
226+ star1 . delete ( ) ;
227+ star2 . delete ( ) ;
228+ edges1 . forEach ( e => e . delete ( ) ) ;
229+ edges2 . forEach ( e => e . delete ( ) ) ;
230+ results . forEach ( r => r . delete ( ) ) ;
231+ } ) ;
232+
161233 it ( "should fillet closed 2D wire on various corners" , ( ) => {
162234 const starOpt = new Inputs . OCCT . StarDto ( 10 , 6 , 7 , [ 0 , 0 , 0 ] , [ 0 , 1 , 0 ] , 0 ) ;
163235 const star = wire . createStarWire ( starOpt ) ;
@@ -232,6 +304,76 @@ describe("OCCT fillets unit tests", () => {
232304 result . delete ( ) ;
233305 } ) ;
234306
307+ it ( "should fillet multiple 2D wires with the same radius" , ( ) => {
308+ const starOpt1 = new Inputs . OCCT . StarDto ( 10 , 6 , 7 , [ 0 , 0 , 0 ] , [ 0 , 1 , 0 ] , 0 ) ;
309+ const starOpt2 = new Inputs . OCCT . StarDto ( 8 , 5 , 6 , [ 20 , 0 , 0 ] , [ 0 , 1 , 0 ] , 0 ) ;
310+ const star1 = wire . createStarWire ( starOpt1 ) ;
311+ const star2 = wire . createStarWire ( starOpt2 ) ;
312+
313+ const filletOptions = new Inputs . OCCT . FilletShapesDto < TopoDS_Wire > (
314+ [ star1 , star2 ] ,
315+ 0.3 ,
316+ ) ;
317+ const results = fillets . fillet2dShapes ( filletOptions ) ;
318+
319+ expect ( results . length ) . toBe ( 2 ) ;
320+
321+ const edges1 = occHelper . shapeGettersService . getEdges ( { shape : results [ 0 ] } ) ;
322+ const edges2 = occHelper . shapeGettersService . getEdges ( { shape : results [ 1 ] } ) ;
323+
324+ // All edges should be filleted, so we expect more edges than original
325+ expect ( edges1 . length ) . toBe ( 28 ) ;
326+ expect ( edges2 . length ) . toBe ( 24 ) ;
327+
328+ // Some edges should be short fillet arcs
329+ const edgeLengths1 = edges1 . map ( e => occHelper . edgesService . getEdgeLength ( { shape : e } ) ) ;
330+ const edgeLengths2 = edges2 . map ( e => occHelper . edgesService . getEdgeLength ( { shape : e } ) ) ;
331+ const hasShortEdges1 = edgeLengths1 . some ( length => length < 1 ) ;
332+ const hasShortEdges2 = edgeLengths2 . some ( length => length < 1 ) ;
333+ expect ( hasShortEdges1 ) . toBe ( true ) ;
334+ expect ( hasShortEdges2 ) . toBe ( true ) ;
335+
336+ star1 . delete ( ) ;
337+ star2 . delete ( ) ;
338+ edges1 . forEach ( e => e . delete ( ) ) ;
339+ edges2 . forEach ( e => e . delete ( ) ) ;
340+ results . forEach ( r => r . delete ( ) ) ;
341+ } ) ;
342+
343+ it ( "should fillet multiple 2D wires with indexes and radius list" , ( ) => {
344+ const starOpt1 = new Inputs . OCCT . StarDto ( 10 , 6 , 7 , [ 0 , 0 , 0 ] , [ 0 , 1 , 0 ] , 0 ) ;
345+ const starOpt2 = new Inputs . OCCT . StarDto ( 8 , 5 , 6 , [ 20 , 0 , 0 ] , [ 0 , 1 , 0 ] , 0 ) ;
346+ const star1 = wire . createStarWire ( starOpt1 ) ;
347+ const star2 = wire . createStarWire ( starOpt2 ) ;
348+
349+ const filletOptions = new Inputs . OCCT . FilletShapesDto < TopoDS_Wire > (
350+ [ star1 , star2 ] ,
351+ undefined ,
352+ [ 0.2 , 0.4 , 0.3 ] ,
353+ [ 1 , 3 , 5 ] ,
354+ ) ;
355+ const results = fillets . fillet2dShapes ( filletOptions ) ;
356+
357+ expect ( results . length ) . toBe ( 2 ) ;
358+
359+ const edges1 = occHelper . shapeGettersService . getEdges ( { shape : results [ 0 ] } ) ;
360+ const edges2 = occHelper . shapeGettersService . getEdges ( { shape : results [ 1 ] } ) ;
361+
362+ // Check that fillets were applied
363+ const edgeLengths1 = edges1 . map ( e => occHelper . edgesService . getEdgeLength ( { shape : e } ) ) ;
364+ const edgeLengths2 = edges2 . map ( e => occHelper . edgesService . getEdgeLength ( { shape : e } ) ) ;
365+ const hasShortEdges1 = edgeLengths1 . some ( length => length < 1 ) ;
366+ const hasShortEdges2 = edgeLengths2 . some ( length => length < 1 ) ;
367+ expect ( hasShortEdges1 ) . toBe ( true ) ;
368+ expect ( hasShortEdges2 ) . toBe ( true ) ;
369+
370+ star1 . delete ( ) ;
371+ star2 . delete ( ) ;
372+ edges1 . forEach ( e => e . delete ( ) ) ;
373+ edges2 . forEach ( e => e . delete ( ) ) ;
374+ results . forEach ( r => r . delete ( ) ) ;
375+ } ) ;
376+
235377 it ( "should fillet a single edge on the solid" , ( ) => {
236378 const cube = solid . createCube ( { size : 2 , center : [ 0 , 0 , 0 ] } ) ;
237379 const filRes = fillets . filletEdges ( { shape : cube , indexes : [ 1 ] , radius : 0.5 } ) ;
0 commit comments