                         let _t2 = t2 == 1 ? 0 : t2
                         let _l_idx = t1 == 1 ? left.indexMod(l_idx + 1) : l_idx
                         let _r_idx = t2 == 1 ? right.indexMod(r_idx + 1) : r_idx
-                        if _data.contains(where: { $0.left.index == _l_idx && $0.left.split.almostEqual(_t1) && $0.right.index == _r_idx && $0.right.split.almostEqual(_t2) }) {
+                        if data.contains(where: { $0.left.index == _l_idx && $0.left.split.almostEqual(_t1) && $0.right.index == _r_idx && $0.right.split.almostEqual(_t2) }) {
                             continue
                         }
-                        _data.append(SplitData.Data(left: Split(index: _l_idx, split: _t1), right: Split(index: _r_idx, split: _t2), point: l_segment.point(t1)))
+                        data.append(SplitData(left: ConstructiveSolidResult.Split(index: _l_idx, split: _t1), right: ConstructiveSolidResult.Split(index: _r_idx, split: _t2), point: l_segment.point(t1)))
                     }
                 } else {
                     overlap_l_index.insert(l_idx)

        
        var result: [ShapeRegion.Solid] = []
        
        var graph = Graph<Int, [(ConstructiveSolidResult.Table.Split, ConstructiveSolidResult.Table.Split)]>()
        
        let _points = points.enumerated().flatMap { [($0.0, $0.1.0), ($0.0, $0.1.1)] }.sorted { $0.1.ordering($1.1) }
        

                        if intersects.contains(where: { $0.1.index == _l_idx && $0.1.split.almostEqual(_t1) && $0.0.index == _r_idx && $0.0.split.almostEqual(_t2) }) {
                            continue
                        }
                        intersects.append((ConstructiveSolidResult.Split(index: _l_idx, split: _t1), ConstructiveSolidResult.Split(index: _r_idx, split: _t2)))
                    }
                } else {
                    if let a = segment2.fromPoint(segment1.end) {
