3
3
import re
4
4
import sys
5
5
import typing
6
+ from copy import copy
6
7
7
8
from pymead .core .airfoil import Airfoil
8
9
from pymead .core .bezier import Bezier
@@ -172,7 +173,8 @@ def remove_from_subcontainer(self, pymead_obj: PymeadObj):
172
173
self .container ()[pymead_obj .sub_container ].pop (pymead_obj .name ())
173
174
174
175
def add_param (self , value : float , name : str or None = None , lower : float or None = None ,
175
- upper : float or None = None , unit_type : str or None = None , assign_unique_name : bool = True ):
176
+ upper : float or None = None , unit_type : str or None = None , assign_unique_name : bool = True ,
177
+ point : Point = None ):
176
178
"""
177
179
Adds a parameter to the geometry collection sub-container ``"params"``, and modifies the name to make it
178
180
unique if necessary.
@@ -199,7 +201,7 @@ def add_param(self, value: float, name: str or None = None, lower: float or None
199
201
Param
200
202
The generated parameter
201
203
"""
202
- kwargs = dict (value = value , name = name , lower = lower , upper = upper , setting_from_geo_col = True )
204
+ kwargs = dict (value = value , name = name , lower = lower , upper = upper , setting_from_geo_col = True , point = point )
203
205
if unit_type is None :
204
206
param = Param (** kwargs )
205
207
elif unit_type == "length" :
@@ -488,7 +490,7 @@ def add_line(self, point_sequence: PointSequence, name: str or None = None, assi
488
490
return self .add_pymead_obj_by_ref (line , assign_unique_name = assign_unique_name )
489
491
490
492
def add_desvar (self , value : float , name : str , lower : float or None = None , upper : float or None = None ,
491
- unit_type : str or None = None , assign_unique_name : bool = True ):
493
+ unit_type : str or None = None , assign_unique_name : bool = True , point : Point = None ):
492
494
"""
493
495
Directly adds a design variable value to the geometry collection.
494
496
@@ -516,7 +518,7 @@ def add_desvar(self, value: float, name: str, lower: float or None = None, upper
516
518
DesVar
517
519
The generated design variable
518
520
"""
519
- kwargs = dict (value = value , name = name , lower = lower , upper = upper , setting_from_geo_col = True )
521
+ kwargs = dict (value = value , name = name , lower = lower , upper = upper , setting_from_geo_col = True , point = point )
520
522
if unit_type is None :
521
523
desvar = DesVar (** kwargs )
522
524
elif unit_type == "length" :
@@ -581,7 +583,8 @@ def promote_param_to_desvar(self, param: Param or str, lower: float or None = No
581
583
else :
582
584
unit_type = None
583
585
584
- desvar = self .add_desvar (value = param .value (), name = param .name (), lower = lower , upper = upper , unit_type = unit_type )
586
+ desvar = self .add_desvar (value = param .value (), name = param .name (), lower = lower , upper = upper , unit_type = unit_type ,
587
+ point = copy (param .point ))
585
588
586
589
# Replace the corresponding x() or y() in parameter with the new design variable
587
590
self .replace_geo_objs (tool = param , target = desvar )
@@ -602,8 +605,7 @@ def promote_param_to_desvar(self, param: Param or str, lower: float or None = No
602
605
# desvar.gcs.constraint_params[self.gcs.constraint_params.index(param)] = desvar
603
606
604
607
# Remove the parameter
605
- if param .point is None :
606
- self .remove_pymead_obj (param , promotion_demotion = True )
608
+ self .remove_pymead_obj (param , promotion_demotion = True )
607
609
608
610
return desvar
609
611
@@ -629,7 +631,7 @@ def demote_desvar_to_param(self, desvar: DesVar):
629
631
else :
630
632
unit_type = None
631
633
632
- param = self .add_param (value = desvar .value (), name = desvar .name (), unit_type = unit_type )
634
+ param = self .add_param (value = desvar .value (), name = desvar .name (), unit_type = unit_type , point = copy ( desvar . point ) )
633
635
634
636
# Replace the corresponding x() or y() in parameter with the new parameter
635
637
self .replace_geo_objs (tool = desvar , target = param )
@@ -834,12 +836,18 @@ def set_from_dict_rep(cls, d: dict, canvas=None, tree=None, gui_obj=None):
834
836
geo_col = cls (gui_obj = gui_obj )
835
837
geo_col .canvas = canvas
836
838
geo_col .tree = tree
837
- for name , desvar_dict in d ["desvar" ].items ():
838
- geo_col .add_desvar (** desvar_dict , name = name , assign_unique_name = False )
839
- for name , param_dict in d ["params" ].items ():
840
- geo_col .add_param (** param_dict , name = name , assign_unique_name = False )
841
839
for name , point_dict in d ["points" ].items ():
842
840
geo_col .add_point (** point_dict , name = name , assign_unique_name = False )
841
+ for name , desvar_dict in d ["desvar" ].items ():
842
+ point = None
843
+ if ".x" in name or ".y" in name :
844
+ point = geo_col .container ()["points" ][name .split ("." )[0 ]]
845
+ geo_col .add_desvar (** desvar_dict , name = name , assign_unique_name = False , point = point )
846
+ for name , param_dict in d ["params" ].items ():
847
+ point = None
848
+ if ".x" in name or ".y" in name :
849
+ point = geo_col .container ()["points" ][name .split ("." )[0 ]]
850
+ geo_col .add_param (** param_dict , name = name , assign_unique_name = False , point = point )
843
851
for name , line_dict in d ["lines" ].items ():
844
852
geo_col .add_line (point_sequence = PointSequence (
845
853
points = [geo_col .container ()["points" ][k ] for k in line_dict ["points" ]]),
0 commit comments