My objective was to find a way to transfer Named Selections from a model to another model, never managed to find it. Thanks to Erik code I could finally create something that works, which I share below and hope it's useful for someone.
FILE_NAME = 'named_sel_export.py'
model = ExtAPI.DataModel.Project.Model
object_lists = {
# 'Ansys.ACT.Automation.Mechanical.AnalysisPly': 'model.???',
# 'Ansys.ACT.Automation.Mechanical.CrossSection': 'model.???',
'Ansys.ACT.Automation.Mechanical.Material': 'model.Materials.Children',
'Ansys.ACT.Automation.Mechanical.NamedSelection': 'model.NamedSelections.Children',
'Ansys.ACT.Automation.Mechanical.CoordinateSystem': 'model.CoordinateSystems.Children',
}
with open(FILE_NAME, 'w') as f:
lines = []
lines.append("def get_entity_by_name(entity_list, name):")
lines.append(" for x in entity_list:")
lines.append(" if x.Name == name:")
lines.append(" return x")
lines.append(" return None")
lines.append("")
lines.append("model = ExtAPI.DataModel.Project.Model")
lines.append("")
for ns in model.NamedSelections.Children:
lines.append("ns = Model.AddNamedSelection()")
lines.append("ns.Name = '{}'".format(ns.Name))
lines.append("ns.ScopingMethod = GeometryDefineByType.{}".format(ns.ScopingMethod))
if ns.ScopingMethod == GeometryDefineByType.Worksheet:
lines.append("criteria = ns.GenerationCriteria")
for i, criteria in enumerate(ns.GenerationCriteria):
lines.append("criteria.Add(None)")
lines.append("criteria[{}].Active = {}".format(i, criteria.Active))
lines.append("criteria[{}].Action = SelectionActionType.{}".format(i, criteria.Action))
lines.append("criteria[{}].EntityType = SelectionType.{}".format(i, criteria.EntityType))
if criteria.Action in [SelectionActionType.Invert, SelectionActionType.Convert]:
# No further parameters necessary for Invert or Convert
continue
lines.append("criteria[{}].Criterion = SelectionCriterionType.{}".format(i, criteria.Criterion))
lines.append("criteria[{}].Operator = SelectionOperatorType.{}".format(i, criteria.Operator))
if criteria.Operator in [SelectionOperatorType.RangeExclude, SelectionOperatorType.RangeInclude]:
# Define lower and upper bound only, do not define value
if criteria.IsUnitless():
lines.append("criteria[{}].LowerBound = {}".format(i, criteria.LowerBound))
lines.append("criteria[{}].UpperBound = {}".format(i, criteria.UpperBound))
else:
lines.append("criteria[{}].LowerBound = Quantity('{}')".format(i, criteria.LowerBound))
lines.append("criteria[{}].UpperBound = Quantity('{}')".format(i, criteria.UpperBound))
else:
# Define value, do not define lower and upper bound
if criteria.IsString():
lines.append("criteria[{}].Value = '{}'".format(i, criteria.Value))
elif criteria.IsObject():
lines.append("criteria[{}].Value = get_entity_by_name({}, '{}')".format(i, object_lists[str(criteria.Value.GetType())], criteria.Value.Name))
elif criteria.IsUnitless():
lines.append("criteria[{}].Value = {}".format(i, criteria.Value))
else:
lines.append("criteria[{}].Value = Quantity('{}')".format(i, criteria.Value))
if criteria.CoordinateSystem.CoordinateSystemID != 0:
lines.append("criteria[{}].CoordinateSystem = get_entity_by_name(model.CoordinateSystems.Children, '{}')".format(i, criteria.CoordinateSystem.Name))
# lines.append("# criteria[{}].IsObject() == {}".format(i, criteria.IsObject()))
# lines.append("# criteria[{}].IsString() == {}".format(i, criteria.IsString()))
# lines.append("# criteria[{}].IsUnitless() == {}".format(i, criteria.IsUnitless()))
lines.append("ns.ToleranceType = ToleranceType.Manual")
lines.append("ns.ZeroTolerance = 1E-3")
lines.append("ns.RelativeTolerance = 1E-3")
lines.append("ns.Generate()")
lines.append("")
f.write('\n'.join(lines))
f.close()