44import math
55import numbers
66from typing import TYPE_CHECKING
7+ from packaging .version import Version
78
89import euklid
910import pyfoil
@@ -72,7 +73,7 @@ def import_ods_glider(cls: type[ParametricGlider], tables: list[Table]) -> Param
7273 # profiles = [BezierProfile2D(profile) for profile in transpose_columns(sheets[3])]
7374 profiles = [pyfoil .Airfoil (profile , name ).normalized () for name , profile in transpose_columns (tables [3 ])]
7475
75- if config .version > "0.0.1" :
76+ if config .version > Version ( "0.0.1" ) :
7677 has_center_cell = not tables [0 ]["C2" ] == 0
7778 cell_no = (tables [0 ].num_rows - 2 ) * 2 + has_center_cell
7879 geometry = get_geometry_parametric (table_dct [TableNames .parametric_data ], cell_no , config )
@@ -88,7 +89,8 @@ def import_ods_glider(cls: type[ParametricGlider], tables: list[Table]) -> Param
8889 migrate_header = cell_sheet [0 , 0 ] is not None and cell_sheet [0 , 0 ] < "V4"
8990
9091 glider_tables = GliderTables ()
91- glider_tables .curves = CurveTable (table_dct .get ("Curves" , None ))
92+ glider_tables .curves = CurveTable (table_dct .get ("Curves" , None ), config .version )
93+
9294 glider_tables .cuts = CutTable (cell_sheet , migrate_header = migrate_header )
9395 glider_tables .ballooning_modifiers = BallooningModifierTable (cell_sheet , migrate_header = migrate_header )
9496 glider_tables .holes = HolesTable (rib_sheet , migrate_header = migrate_header )
@@ -121,7 +123,6 @@ class Geometry(BaseModel):
121123 shape : ParametricShape
122124 arc : ArcCurve
123125 aoa : SymmetricCurveType
124- zrot : SymmetricCurveType
125126 profile_merge_curve : SymmetricCurveType
126127 ballooning_merge_curve : SymmetricCurveType
127128
@@ -135,7 +136,6 @@ def get_geometry_explicit(sheet: Table, config: ParametricGliderConfig) -> Geome
135136 arc = []
136137 profile_merge = []
137138 ballooning_merge = []
138- zrot = []
139139
140140 y = z = span_last = alpha = 0.
141141 for i in range (1 , sheet .num_rows ):
@@ -162,8 +162,6 @@ def get_geometry_explicit(sheet: Table, config: ParametricGliderConfig) -> Geome
162162 profile_merge .append ([span , line [8 ]])
163163 ballooning_merge .append ([span , line [9 ]])
164164
165- zrot .append ([span , line [7 ] * math .pi / 180 ])
166-
167165 span_last = span
168166
169167 def symmetric_fit (data : list [list [float ]], bspline : bool = True ) -> SymmetricCurveType :
@@ -200,7 +198,6 @@ def symmetric_fit(data: list[list[float]], bspline: bool=True) -> SymmetricCurve
200198 shape = parametric_shape ,
201199 arc = arc_curve ,
202200 aoa = symmetric_fit (aoa ),
203- zrot = symmetric_fit (zrot ),
204201 profile_merge_curve = symmetric_fit (profile_merge , bspline = True ),
205202 ballooning_merge_curve = symmetric_fit (ballooning_merge , bspline = True )
206203 )
@@ -214,13 +211,16 @@ def get_geometry_parametric(table: Table, cell_num: int, config: ParametricGlide
214211 "rib_distribution" : euklid .spline .BezierCurve ,
215212 "arc" : euklid .spline .SymmetricBSplineCurve ,
216213 "aoa" : euklid .spline .SymmetricBSplineCurve ,
217- "zrot" : euklid .spline .SymmetricBSplineCurve ,
218214 "profile_merge_curve" : euklid .spline .SymmetricBSplineCurve ,
219215 "ballooning_merge_curve" : euklid .spline .SymmetricBSplineCurve
220216 }
221217
222218 for column in range (0 , table .num_columns , 2 ):
223219 key = table [0 , column ]
220+ if key not in curve_types :
221+ if key == "zrot" :
222+ continue
223+ raise ValueError ("Invalid curve: {key}" )
224224 points = []
225225
226226 if table [0 , column + 1 ] is not None :
0 commit comments