@@ -1342,7 +1342,7 @@ def _init_curve_memory(self, sample_points: int = 10):
13421342 )
13431343
13441344 self .memory ["piece_curves" ] = {
1345- "points" : self .points ,
1345+ "points" : self .points . copy () ,
13461346 "sample_points" : sample_points ,
13471347 "lengths" : lengths ,
13481348 "acc_lengths" : np .add .accumulate (lengths ),
@@ -1371,38 +1371,48 @@ def _update_curve_memory(self, sample_points: int = 10):
13711371 neq2 = neq [:, 0 ]
13721372 for i in range (1 , self .dim ):
13731373 neq2 |= neq [:, i ]
1374- # Collapse every group of 4 values into a single value per curve.
1374+ # Collapse every group of 4 (or nppcc) values into a single value per curve.
13751375 neq2 = neq2 .reshape (- 1 , nppcc )
13761376 differences = neq2 [:, 0 ]
13771377 for i in range (1 , nppcc ):
13781378 differences |= neq2 [:, i ]
13791379 differences = np .arange (n_curves )[differences ]
13801380
13811381 # If the amount of points has changed, adjust lengths
1382- curr_n_curves = curr_n_points / nppcc
1383- memo_n_curves = memo_n_points / nppcc
1384- if curr_n_points < memo_n_points :
1385- new_lengths = self .memory ["piece_curves" ]["lengths" ][:curr_n_curves ]
1386- self .memory ["piece_curves" ]["lengths" ] = new_lengths
1387- elif curr_n_points > memo_n_points :
1382+ curr_n_curves = curr_n_points // nppcc
1383+ memo_n_curves = memo_n_points // nppcc
1384+ if curr_n_points > memo_n_points :
13881385 new_lengths = np .empty (curr_n_curves )
1389- new_lengths [:memo_n_curves ] = self .memory ["piece_curves" ]
1386+ new_lengths [:memo_n_curves ] = self .memory ["piece_curves" ][ "lengths" ]
13901387 new_lengths [memo_n_curves :] = [
13911388 self .get_nth_curve_length (n , sample_points )
13921389 for n in range (memo_n_curves , curr_n_curves )
13931390 ]
1391+ new_lengths [differences ] = [
1392+ self .get_nth_curve_length (n , sample_points ) for n in differences
1393+ ]
13941394 self .memory ["piece_curves" ]["lengths" ] = new_lengths
1395-
1396- # Update memo, recalculating only the lengths which have changed
1397- self .memory ["piece_curves" ]["points" ] = curr_points
1398- self .memory ["piece_curves" ]["lengths" ][differences ] = [
1399- self .get_nth_curve_length (n ) for n in differences
1400- ]
1401- if differences .shape [0 ] > 0 :
14021395 self .memory ["piece_curves" ]["acc_lengths" ] = np .add .accumulate (
14031396 self .memory ["piece_curves" ]["lengths" ]
14041397 )
14051398
1399+ else :
1400+ new_lengths = self .memory ["piece_curves" ]["lengths" ][:curr_n_curves ]
1401+ new_lengths [differences ] = [
1402+ self .get_nth_curve_length (n , sample_points ) for n in differences
1403+ ]
1404+ self .memory ["piece_curves" ]["lengths" ] = new_lengths
1405+ if differences .shape [0 ] == 0 :
1406+ self .memory ["piece_curves" ]["acc_lengths" ] = self .memory [
1407+ "piece_curves"
1408+ ]["acc_lengths" ][:curr_n_curves ]
1409+ else :
1410+ self .memory ["piece_curves" ]["acc_lengths" ] = np .add .accumulate (
1411+ self .memory ["piece_curves" ]["lengths" ]
1412+ )
1413+
1414+ self .memory ["piece_curves" ]["points" ] = curr_points .copy ()
1415+
14061416 def get_nth_curve_points (self , n : int ) -> np .ndarray :
14071417 """Returns the points defining the nth curve of the vmobject.
14081418
0 commit comments