@@ -79,7 +79,7 @@ def fillet_polyline(self, child: OccPolyline) -> TopoDS_Shape:
7979 d = self .declaration
8080 points = child .declaration .points
8181 operations = d .operations if d .operations else child .topology .vertices
82- wires = []
82+ filleted_wires = []
8383
8484 # Fillet each segment of the wire
8585 for i in range (1 , len (points ) - 1 ):
@@ -118,36 +118,37 @@ def fillet_polyline(self, child: OccPolyline) -> TopoDS_Shape:
118118 fillet .AddFillet (middle_vertex , radius )
119119 result = Topology .cast_shape (fillet .Shape ())
120120 wire = BRepTools .OuterWire_ (result )
121- wires .append (wire )
121+ filleted_wires .append (( radius , wire ) )
122122
123- assert wires
124- if len (wires ) == 1 :
125- return wires [0 ] # No merging needed
123+ assert filleted_wires
124+ if len (filleted_wires ) == 1 :
125+ r , wire = filleted_wires [0 ]
126+ return wire # No merging needed
126127
127128 # Merge filleted edges by taking the intersection of overlapping segments
128129 edges = []
129- last_index = len (wires ) - 1
130- for i in range (1 , len (wires )):
131- last_wire = wires [i - 1 ]
132- wire = wires [i ]
133- last_topo = Topology (shape = last_wire )
130+ last_index = len (filleted_wires ) - 1
131+ last_radius , last_wire = filleted_wires [0 ]
132+ last_topo = Topology (shape = last_wire )
133+ edges .extend (last_topo .edges [0 :- 1 ])
134+ for i in range (1 , len (filleted_wires )):
135+ radius , wire = filleted_wires [i ]
134136 topo = Topology (shape = wire )
135- if last_topo .end_point == topo .start_point :
136- # No fillet
137- edges .extend (last_topo .edges )
137+ if last_radius is None and radius is None :
138+ edges .append (topo .edges [0 ]) # Add common edge with no fillets
138139 else :
139- if i == 1 :
140- # Add starting edges
141- edges .extend (last_topo .edges [0 :- 1 ])
142140 common = BRepAlgoAPI_Common (last_wire , wire )
143141 common .Build ()
144142 common_edges = Topology (shape = common .Shape ()).edges
145143 assert common_edges , "Fillet radius too large"
146144 edges .extend (common_edges )
147- edges .append (topo .edges [1 ]) # Add filleted edge
148- if i == last_index and len (topo .edges ) > 2 :
149- # Add final edge
150- edges .extend (topo .edges [2 :])
145+ if i == last_index :
146+ edges .extend (topo .edges [1 :]) # Add all remaining edges
147+ elif radius is not None :
148+ edges .append (topo .edges [1 ]) # Add only the filleted edge
149+ last_wire = wire
150+ last_topo = topo
151+ last_radius = radius
151152
152153 # Create a wire
153154 shapes = TopTools_ListOfShape ()
0 commit comments