src.acoustools.Paths.Curves

 1# CURVES MUST DEFINE A get_data THAT RETURNS THE PARAMETERS FOR ITS CONSTRUCTOR SUCH THAT `curve==type(curve)(curve.get_data())`
 2
 3class CubicBezier():
 4    '''
 5    Cublic Bezier class defined by `start, end, offset_1, offset_2` \n
 6    See https://www.desmos.com/calculator/gtngeffijw for interactive Bezier demo
 7    
 8    '''
 9
10    def __init__(self, start, end, offset_1, offset_2):
11        self.start = start
12        self.end = end
13        self.offset_1 = offset_1
14        self.offset_2 = offset_2
15
16        self.index = -1
17    
18    def __iter__(self):
19        return self #Is this right?
20
21    def __next__(self):
22        self.index += 1
23
24        if self.index == 0:
25            return self.start
26        elif self.index == 1:
27            return self.end
28        elif self.index == 2:
29            return self.offset_1
30        elif self.index == 3:
31            return self.offset_2
32        if self.index == 4:
33            raise StopIteration
34        
35
36    def get_data(self): 
37        
38
39        return self.start, self.end, self.offset_1, self.offset_2
40
41    def __getitem__(self, i):
42        return self.get_data()[i]
43    
44    def __len__(self):
45        return 4
46    
47    def __str__(self):
48        return f"Bezier: Start{self.start}, End{self.end}, Offset_1{self.offset_1}, Offset_2{self.offset_2}"
49    
50    
51
52class Spline():
53    '''
54    Container for combining curve objects into a spline
55    '''
56
57    def __init__(self,curves:list = None):
58        if curves is None:
59            curves = []
60        self.curves = curves
61        self.index = -1
62    
63    def __iter__(self):
64        return iter(self.curves)
65    
66    def __next__(self):
67        self.index += 1
68        if self.index >= len(self.curves):
69            raise StopIteration
70        else:
71            return self.curves[self.index]
72        
73    def __getitem__(self, i):
74        return self.curves[i]
75    
76    def __len__(self):
77        return len(self.curves)
78
79    def add_curve(self,curve):
80        self.curves.append(curve)
81    
82    def __setitem__(self, i, value):
83        self.curves[i] = value
84    
85    def __str__(self):
86        return "Spline: "  + str(self.curves)
87    
88    def clone(self):
89        new_curves = []
90        for curve in self.curves:
91            curve_type = type(curve)
92            data = curve.get_data()
93            data = [d.clone() for d in data]
94            new = curve_type(*data)
95            new_curves.append(new)
96        return Spline(new_curves)
class CubicBezier:
 4class CubicBezier():
 5    '''
 6    Cublic Bezier class defined by `start, end, offset_1, offset_2` \n
 7    See https://www.desmos.com/calculator/gtngeffijw for interactive Bezier demo
 8    
 9    '''
10
11    def __init__(self, start, end, offset_1, offset_2):
12        self.start = start
13        self.end = end
14        self.offset_1 = offset_1
15        self.offset_2 = offset_2
16
17        self.index = -1
18    
19    def __iter__(self):
20        return self #Is this right?
21
22    def __next__(self):
23        self.index += 1
24
25        if self.index == 0:
26            return self.start
27        elif self.index == 1:
28            return self.end
29        elif self.index == 2:
30            return self.offset_1
31        elif self.index == 3:
32            return self.offset_2
33        if self.index == 4:
34            raise StopIteration
35        
36
37    def get_data(self): 
38        
39
40        return self.start, self.end, self.offset_1, self.offset_2
41
42    def __getitem__(self, i):
43        return self.get_data()[i]
44    
45    def __len__(self):
46        return 4
47    
48    def __str__(self):
49        return f"Bezier: Start{self.start}, End{self.end}, Offset_1{self.offset_1}, Offset_2{self.offset_2}"

Cublic Bezier class defined by start, end, offset_1, offset_2

See https://www.desmos.com/calculator/gtngeffijw for interactive Bezier demo

CubicBezier(start, end, offset_1, offset_2)
11    def __init__(self, start, end, offset_1, offset_2):
12        self.start = start
13        self.end = end
14        self.offset_1 = offset_1
15        self.offset_2 = offset_2
16
17        self.index = -1
start
end
offset_1
offset_2
index
def get_data(self):
37    def get_data(self): 
38        
39
40        return self.start, self.end, self.offset_1, self.offset_2
class Spline:
53class Spline():
54    '''
55    Container for combining curve objects into a spline
56    '''
57
58    def __init__(self,curves:list = None):
59        if curves is None:
60            curves = []
61        self.curves = curves
62        self.index = -1
63    
64    def __iter__(self):
65        return iter(self.curves)
66    
67    def __next__(self):
68        self.index += 1
69        if self.index >= len(self.curves):
70            raise StopIteration
71        else:
72            return self.curves[self.index]
73        
74    def __getitem__(self, i):
75        return self.curves[i]
76    
77    def __len__(self):
78        return len(self.curves)
79
80    def add_curve(self,curve):
81        self.curves.append(curve)
82    
83    def __setitem__(self, i, value):
84        self.curves[i] = value
85    
86    def __str__(self):
87        return "Spline: "  + str(self.curves)
88    
89    def clone(self):
90        new_curves = []
91        for curve in self.curves:
92            curve_type = type(curve)
93            data = curve.get_data()
94            data = [d.clone() for d in data]
95            new = curve_type(*data)
96            new_curves.append(new)
97        return Spline(new_curves)

Container for combining curve objects into a spline

Spline(curves: list = None)
58    def __init__(self,curves:list = None):
59        if curves is None:
60            curves = []
61        self.curves = curves
62        self.index = -1
curves
index
def add_curve(self, curve):
80    def add_curve(self,curve):
81        self.curves.append(curve)
def clone(self):
89    def clone(self):
90        new_curves = []
91        for curve in self.curves:
92            curve_type = type(curve)
93            data = curve.get_data()
94            data = [d.clone() for d in data]
95            new = curve_type(*data)
96            new_curves.append(new)
97        return Spline(new_curves)