@@ -532,6 +532,82 @@ describe("OCCT wire unit tests", () => {
532532 w2 . delete ( ) ;
533533 } ) ;
534534
535+ it ( "should reverse closed polygon wire and have same start point using reversedWireFromReversedEdges" , async ( ) => {
536+ // Create a closed polygon (rectangle)
537+ const points = [ [ 0 , 0 , 0 ] , [ 10 , 0 , 0 ] , [ 10 , 0 , 5 ] , [ 0 , 0 , 5 ] ] as Inputs . Base . Point3 [ ] ;
538+ const w = wire . createPolygonWire ( { points } ) ;
539+
540+ const startPt = wire . startPointOnWire ( { shape : w } ) ;
541+ const endPt = wire . endPointOnWire ( { shape : w } ) ;
542+
543+ // For a closed polygon, start and end should be the same
544+ expect ( startPt [ 0 ] ) . toBeCloseTo ( endPt [ 0 ] , 5 ) ;
545+ expect ( startPt [ 1 ] ) . toBeCloseTo ( endPt [ 1 ] , 5 ) ;
546+ expect ( startPt [ 2 ] ) . toBeCloseTo ( endPt [ 2 ] , 5 ) ;
547+
548+ // Use reversedWireFromReversedEdges for closed wires to maintain start point
549+ const w2 = wire . reversedWireFromReversedEdges ( { shape : w } ) ;
550+
551+ const startPtRev = wire . startPointOnWire ( { shape : w2 } ) ;
552+
553+ // For a reversed closed polygon using reversedWireFromReversedEdges,
554+ // the start point should be the same as the original
555+ // User expectation: forward, left, back, right becomes left, forward, right, back
556+ // Same start/end point but opposite traversal direction
557+ expect ( startPtRev [ 0 ] ) . toBeCloseTo ( startPt [ 0 ] , 5 ) ;
558+ expect ( startPtRev [ 1 ] ) . toBeCloseTo ( startPt [ 1 ] , 5 ) ;
559+ expect ( startPtRev [ 2 ] ) . toBeCloseTo ( startPt [ 2 ] , 5 ) ;
560+
561+ w . delete ( ) ;
562+ w2 . delete ( ) ;
563+ } ) ;
564+
565+ it ( "should reverse closed polygon wire edges and have correct edge directions using reversedWireFromReversedEdges" , async ( ) => {
566+ // Create a closed polygon (rectangle)
567+ const points = [ [ 0 , 0 , 0 ] , [ 10 , 0 , 0 ] , [ 10 , 0 , 5 ] , [ 0 , 0 , 5 ] ] as Inputs . Base . Point3 [ ] ;
568+ const w = wire . createPolygonWire ( { points } ) ;
569+
570+ const allEdges = edge . getEdgesAlongWire ( { shape : w } ) ;
571+ const firstEdgeStart = edge . startPointOnEdge ( { shape : allEdges [ 0 ] } ) ;
572+
573+ // Use reversedWireFromReversedEdges for closed wires
574+ const w2 = wire . reversedWireFromReversedEdges ( { shape : w } ) ;
575+
576+ const allEdgesRev = edge . getEdgesAlongWire ( { shape : w2 } ) ;
577+ const firstEdgeRevStart = edge . startPointOnEdge ( { shape : allEdgesRev [ 0 ] } ) ;
578+
579+ // For a reversed wire using reversedWireFromReversedEdges,
580+ // the first edge's start should be the original first edge's start
581+ expect ( firstEdgeRevStart [ 0 ] ) . toBeCloseTo ( firstEdgeStart [ 0 ] , 5 ) ;
582+ expect ( firstEdgeRevStart [ 1 ] ) . toBeCloseTo ( firstEdgeStart [ 1 ] , 5 ) ;
583+ expect ( firstEdgeRevStart [ 2 ] ) . toBeCloseTo ( firstEdgeStart [ 2 ] , 5 ) ;
584+
585+ allEdges . forEach ( e => e . delete ( ) ) ;
586+ allEdgesRev . forEach ( e => e . delete ( ) ) ;
587+ w . delete ( ) ;
588+ w2 . delete ( ) ;
589+ } ) ;
590+
591+ it ( "should reverse closed rectangle wire and maintain start point using reversedWireFromReversedEdges" , async ( ) => {
592+ // Create a closed rectangle wire
593+ const w = wire . createRectangleWire ( { width : 10 , length : 5 , center : [ 5 , 0 , 2.5 ] , direction : [ 0 , 1 , 0 ] } ) ;
594+
595+ const startPt = wire . startPointOnWire ( { shape : w } ) ;
596+
597+ // Use reversedWireFromReversedEdges for closed wires
598+ const w2 = wire . reversedWireFromReversedEdges ( { shape : w } ) ;
599+
600+ const startPtRev = wire . startPointOnWire ( { shape : w2 } ) ;
601+
602+ // The reversed wire should have the same start point as the original
603+ expect ( startPtRev [ 0 ] ) . toBeCloseTo ( startPt [ 0 ] , 5 ) ;
604+ expect ( startPtRev [ 1 ] ) . toBeCloseTo ( startPt [ 1 ] , 5 ) ;
605+ expect ( startPtRev [ 2 ] ) . toBeCloseTo ( startPt [ 2 ] , 5 ) ;
606+
607+ w . delete ( ) ;
608+ w2 . delete ( ) ;
609+ } ) ;
610+
535611 it ( "should get wire of a box at specific index" , async ( ) => {
536612 const b = occHelper . entitiesService . bRepPrimAPIMakeBox ( 3 , 4 , 5 , [ 0 , 0 , 0 ] ) ;
537613 const w = wire . getWire ( { shape : b , index : 2 } ) ;
0 commit comments