From 055fd19a75a2352942f1f393d68c3cb50e2a9c6d Mon Sep 17 00:00:00 2001 From: matthewAnsys Date: Wed, 6 Mar 2024 10:23:21 +0000 Subject: [PATCH 01/17] Initial commit --- src/ansys/motorcad/core/geometry.py | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/src/ansys/motorcad/core/geometry.py b/src/ansys/motorcad/core/geometry.py index e94f8a64a..de0f1e4b0 100644 --- a/src/ansys/motorcad/core/geometry.py +++ b/src/ansys/motorcad/core/geometry.py @@ -21,6 +21,8 @@ def __init__(self, motorcad_instance=None): self._parent_name = "" self._child_names = [] self._motorcad_instance = motorcad_instance + self.singular = False + self.length = 0 # expect other properties to be implemented here including number duplications, material etc @@ -38,6 +40,8 @@ def __eq__(self, other): # Region coordinate is an output, cannot guarantee will be same for identical regions and self.duplications == other.duplications and self.entities == other.entities + and self.singular == other.singular + and self.length == other.length ) @classmethod @@ -125,6 +129,8 @@ def _from_json(self, json): self.entities = _convert_entities_from_json(json["entities"]) self.parent_name = json["parent_name"] self._child_names = json["child_names"] + # self.singular = json["singular"] + # self.length = json["length"] # method to convert python object to send to Motor-CAD def _to_json(self): @@ -145,6 +151,8 @@ def _to_json(self): "duplications": self.duplications, "entities": _convert_entities_to_json(self.entities), "parent_name": self.parent_name, + "length": self.length, + "singular": self.singular, } return region_dict @@ -1221,6 +1229,10 @@ def _entities_same_with_direction(entities_1, entities_2): else: return _entities_same_with_direction(self, entities_to_compare) + @property + def get_entity_type_string_array(self): + return [str(type(entity)) for entity in self] + def _convert_entities_to_json(entities): """Get entities list as a json object. From 549743e3acd2135605e1fe8566607cbb609687e5 Mon Sep 17 00:00:00 2001 From: matthewAnsys Date: Thu, 1 Aug 2024 08:18:28 +0100 Subject: [PATCH 02/17] Add duplication angle --- src/ansys/motorcad/core/geometry.py | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/src/ansys/motorcad/core/geometry.py b/src/ansys/motorcad/core/geometry.py index de0f1e4b0..4bbc2bc53 100644 --- a/src/ansys/motorcad/core/geometry.py +++ b/src/ansys/motorcad/core/geometry.py @@ -248,6 +248,11 @@ def parent(self, region): """Set parent region.""" self._parent_name = region.name + @property + def duplication_angle(self): + """Get linked Motor-CAD instance.""" + return 360 / self.duplications + def subtract(self, region): """Subtract region from self, returning any additional regions. @@ -1181,6 +1186,22 @@ def points(self): points += [deepcopy(entity.start)] return points + @property + def points_maxwell(self): + points = [] + for entity in self: + points += [[str(entity.start.x), str(entity.start.y), "0"]] + if isinstance(entity, Arc): + mid_point = entity.midpoint + points += [[str(mid_point.x), str(mid_point.y), "0"]] + + points += [[str(self[0].start.x), str(self[0].start.y), "0"]] + return points + + @property + def entity_types(self): + return [entity.__class__.__name__ for entity in self] + def _entities_same(self, entities_to_compare, check_reverse=False): """Check whether entities in region are the same as entities a different region. From 5701b6b0784e529a887ad0cb197b48285acc0d39 Mon Sep 17 00:00:00 2001 From: matthewAnsys Date: Thu, 13 Mar 2025 12:43:56 +0000 Subject: [PATCH 03/17] Update length to extrusion_length --- src/ansys/motorcad/core/geometry.py | 36 ++++++++++++++++++++++++----- 1 file changed, 30 insertions(+), 6 deletions(-) diff --git a/src/ansys/motorcad/core/geometry.py b/src/ansys/motorcad/core/geometry.py index e0b542c88..f7ecf42f3 100644 --- a/src/ansys/motorcad/core/geometry.py +++ b/src/ansys/motorcad/core/geometry.py @@ -48,7 +48,7 @@ def __init__(self, motorcad_instance=None): self._motorcad_instance = motorcad_instance self._region_type = RegionType.adaptive self._mesh_length = 0 - self.length = 0 + self._extrusion_length = 0 self._linked_region = None self._singular = False @@ -68,8 +68,8 @@ def __eq__(self, other): # Region coordinate is an output, cannot guarantee will be same for identical regions and self._duplications == other._duplications and self._entities == other._entities - and self._singular == other.singular - and self.length == other.length + and self._singular == other._singular + and self._extrusion_length == other._extrusion_length ) @classmethod @@ -203,8 +203,8 @@ def _from_json(cls, json, motorcad_instance=None): if "lamination_type" in json: new_region._lamination_type = json["lamination_type"] - # self.singular = json["singular"] - # self.length = json["length"] + if "length" in json: + new_region._extrusion_length = json["length"] return new_region @@ -237,7 +237,7 @@ def _to_json(self): "on_boundary": False if self._linked_region is None else True, "singular": self._singular, "lamination_type": lamination_type, - "length": self.length, + "length": self._extrusion_length, } return region_dict @@ -427,6 +427,14 @@ def mesh_length(self): def mesh_length(self, mesh_length): self._mesh_length = mesh_length + @property + def extrusion_length(self): + return self._extrusion_length + + @extrusion_length.setter + def extrusion_length(self, extrusion_length): + self._extrusion_length = extrusion_length + @property def area(self): """Get the region area.""" @@ -1957,6 +1965,22 @@ def points(self): points += [deepcopy(entity.start)] return points + @property + def points_maxwell(self): + points = [] + for entity in self: + points += [[str(entity.start.x), str(entity.start.y), "0"]] + if isinstance(entity, Arc): + mid_point = entity.midpoint + points += [[str(mid_point.x), str(mid_point.y), "0"]] + + points += [[str(self[0].start.x), str(self[0].start.y), "0"]] + return points + + @property + def entity_types(self): + return [entity.__class__.__name__ for entity in self] + def _entities_same(self, entities_to_compare, check_reverse=False): """Check whether entities in region are the same as entities a different region. From 6819ca238e5a31a84ed63d842208b04d7e7ce78b Mon Sep 17 00:00:00 2001 From: matthewAnsys Date: Thu, 13 Mar 2025 12:57:49 +0000 Subject: [PATCH 04/17] Rename procedures --- src/ansys/motorcad/core/geometry.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/ansys/motorcad/core/geometry.py b/src/ansys/motorcad/core/geometry.py index f7ecf42f3..d6d3db2b3 100644 --- a/src/ansys/motorcad/core/geometry.py +++ b/src/ansys/motorcad/core/geometry.py @@ -1966,7 +1966,7 @@ def points(self): return points @property - def points_maxwell(self): + def points_maxwell_polyline(self): points = [] for entity in self: points += [[str(entity.start.x), str(entity.start.y), "0"]] From dd25e1a85fe7748ddc1b81d09453f97e4a617ab9 Mon Sep 17 00:00:00 2001 From: matthewAnsys Date: Thu, 13 Mar 2025 13:00:58 +0000 Subject: [PATCH 05/17] Add docstrings --- src/ansys/motorcad/core/geometry.py | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/src/ansys/motorcad/core/geometry.py b/src/ansys/motorcad/core/geometry.py index d6d3db2b3..a624ebb4c 100644 --- a/src/ansys/motorcad/core/geometry.py +++ b/src/ansys/motorcad/core/geometry.py @@ -1967,6 +1967,12 @@ def points(self): @property def points_maxwell_polyline(self): + """Get points of shape/region from Entity list for generating AEDT polyline object. + + Returns + ------- + List of Lists of real + """ points = [] for entity in self: points += [[str(entity.start.x), str(entity.start.y), "0"]] @@ -1979,6 +1985,12 @@ def points_maxwell_polyline(self): @property def entity_types(self): + """Get entity types of entities within shape/region from Entity list. + + Returns + ------- + List of string + """ return [entity.__class__.__name__ for entity in self] def _entities_same(self, entities_to_compare, check_reverse=False): From c7e3ff68822fd6819d6264baa436b280ab04610d Mon Sep 17 00:00:00 2001 From: matthewAnsys Date: Fri, 23 May 2025 14:16:05 +0100 Subject: [PATCH 06/17] Remove extrusion length parameter --- src/ansys/motorcad/core/geometry.py | 16 +--------------- 1 file changed, 1 insertion(+), 15 deletions(-) diff --git a/src/ansys/motorcad/core/geometry.py b/src/ansys/motorcad/core/geometry.py index 5a88050d0..33a4a7483 100644 --- a/src/ansys/motorcad/core/geometry.py +++ b/src/ansys/motorcad/core/geometry.py @@ -133,7 +133,6 @@ def __init__(self, region_type=RegionType.adaptive, motorcad_instance=None): self._motorcad_instance = motorcad_instance self._region_type = region_type self._mesh_length = 0 - self._extrusion_length = 0 self._linked_region = None self._singular = False @@ -153,7 +152,6 @@ def __eq__(self, other): and self._duplications == other._duplications and self._entities == other._entities and self._singular == other._singular - and self._extrusion_length == other._extrusion_length ) @classmethod @@ -289,9 +287,6 @@ def _from_json(cls, json, motorcad_instance=None): if "lamination_type" in json: new_region._lamination_type = json["lamination_type"] - if "length" in json: - new_region._extrusion_length = json["length"] - return new_region # method to convert python object to send to Motor-CAD @@ -322,8 +317,7 @@ def _to_json(self): "mesh_length": self._mesh_length, "on_boundary": False if self._linked_region is None else True, "singular": self._singular, - "lamination_type": lamination_type, - "length": self._extrusion_length, + "lamination_type": lamination_type } return region_dict @@ -517,14 +511,6 @@ def mesh_length(self): def mesh_length(self, mesh_length): self._mesh_length = mesh_length - @property - def extrusion_length(self): - return self._extrusion_length - - @extrusion_length.setter - def extrusion_length(self, extrusion_length): - self._extrusion_length = extrusion_length - @property def area(self): """Get the region area.""" From d7b90471470830d2be2269122e15bc84e7eb5732 Mon Sep 17 00:00:00 2001 From: matthewAnsys Date: Fri, 23 May 2025 15:49:49 +0100 Subject: [PATCH 07/17] Add extrusion block classes --- src/ansys/motorcad/core/geometry.py | 91 ++++++++++++++++++++++++++++- 1 file changed, 90 insertions(+), 1 deletion(-) diff --git a/src/ansys/motorcad/core/geometry.py b/src/ansys/motorcad/core/geometry.py index 33a4a7483..0bee89443 100644 --- a/src/ansys/motorcad/core/geometry.py +++ b/src/ansys/motorcad/core/geometry.py @@ -133,6 +133,7 @@ def __init__(self, region_type=RegionType.adaptive, motorcad_instance=None): self._motorcad_instance = motorcad_instance self._region_type = region_type self._mesh_length = 0 + self._extrusion_blocks = ExtrusionBlockList() self._linked_region = None self._singular = False @@ -287,6 +288,9 @@ def _from_json(cls, json, motorcad_instance=None): if "lamination_type" in json: new_region._lamination_type = json["lamination_type"] + if "extrusion_blocks" in json: + new_region._extrusion_blocks._from_json(json["extrusion_blocks"]) + return new_region # method to convert python object to send to Motor-CAD @@ -317,7 +321,8 @@ def _to_json(self): "mesh_length": self._mesh_length, "on_boundary": False if self._linked_region is None else True, "singular": self._singular, - "lamination_type": lamination_type + "lamination_type": lamination_type, + "extrusion_blocks": self._extrusion_blocks._to_json, } return region_dict @@ -373,6 +378,10 @@ def singular(self): def singular(self, singular): self._singular = singular + @property + def extrusion_blocks(self): + return self._extrusion_blocks + @property def child_names(self): """Get child names list. @@ -2123,6 +2132,86 @@ def _entities_same_with_direction(entities_1, entities_2): return _entities_same_with_direction(self, entities_to_compare) +class ExtrusionBlock: + """Generic class for storing 3D extrusion data.""" + + def __init__(self): + """Initialise extrusion block""" + self.start_pos = 0 + self.end_pos = 0 + self.angle_shift = 0 + + def __eq__(self, other): + """Compare equality of 2 ExtrusionBlock objects.""" + return (self.start_pos == other.start_pos) & (self.end_pos == other.end_pos) & \ + (self.start_pos == other.end_pos) + + def from_json(self, json): + """Convert the class from a JSON object. + + Parameters + ---------- + json: dict + Dictionary representing the extrusion block. + """ + self.start_pos = json["extrusion_block_start"] + self.end_pos = json["extrusion_block_end"] + self.angle_shift = json["extrusion_block_angle"] + + def to_json(self): + """Convert from a Python class to a JSON object. + + Returns + ------- + dict + Dictionary of the extrusion block represented as JSON. + """ + block_dict = { + "extrusion_block_start": self.start_pos, + "extrusion_block_end": self.end_pos, + "extrusion_block_angle": self.start_pos} + + return block_dict + + @property + def extrusion_length(self): + """Return extrusion length between start and end positions. + + Returns + ------- + float + Block extrusion length. + """ + return abs(self.end_pos - self.start_pos) + + +class ExtrusionBlockList(list): + """Generic class for list of Entities.""" + + def _to_json(self): + """Convert from a Python class to a JSON object. + + Returns + ------- + list + List of the extrusion blocks represented as JSON. + """ + return [block.to_json for block in self] + + def _from_json(self, json_list): + """Convert the class from a JSON object. + + Parameters + ---------- + json: list + List of extrusion blocks in json. + """ + for json_object in json_list: + block = ExtrusionBlock() + block.from_json(json_object) + self.append(block) + + def _convert_entities_to_json(entities): """Get entities list as a json object. From d7350967d66cd8f3e39ea1adef47a47b4b934abd Mon Sep 17 00:00:00 2001 From: matthewAnsys Date: Fri, 23 May 2025 15:52:31 +0100 Subject: [PATCH 08/17] Remove Maxwell UDM specific methods --- src/ansys/motorcad/core/geometry.py | 28 ---------------------------- 1 file changed, 28 deletions(-) diff --git a/src/ansys/motorcad/core/geometry.py b/src/ansys/motorcad/core/geometry.py index 0bee89443..ec6bbbff0 100644 --- a/src/ansys/motorcad/core/geometry.py +++ b/src/ansys/motorcad/core/geometry.py @@ -2055,34 +2055,6 @@ def points(self): points += [deepcopy(entity.start)] return points - @property - def points_maxwell_polyline(self): - """Get points of shape/region from Entity list for generating AEDT polyline object. - - Returns - ------- - List of Lists of real - """ - points = [] - for entity in self: - points += [[str(entity.start.x), str(entity.start.y), "0"]] - if isinstance(entity, Arc): - mid_point = entity.midpoint - points += [[str(mid_point.x), str(mid_point.y), "0"]] - - points += [[str(self[0].start.x), str(self[0].start.y), "0"]] - return points - - @property - def entity_types(self): - """Get entity types of entities within shape/region from Entity list. - - Returns - ------- - List of string - """ - return [entity.__class__.__name__ for entity in self] - def _entities_same(self, entities_to_compare, check_reverse=False): """Check whether entities in region are the same as entities a different region. From 96fdf8b59efde382aeaf94cf70bec625a752596c Mon Sep 17 00:00:00 2001 From: matthewAnsys Date: Mon, 16 Jun 2025 11:15:20 +0100 Subject: [PATCH 09/17] Update formatting --- src/ansys/motorcad/core/geometry.py | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/src/ansys/motorcad/core/geometry.py b/src/ansys/motorcad/core/geometry.py index ec6bbbff0..7227a3dd3 100644 --- a/src/ansys/motorcad/core/geometry.py +++ b/src/ansys/motorcad/core/geometry.py @@ -2115,8 +2115,10 @@ def __init__(self): def __eq__(self, other): """Compare equality of 2 ExtrusionBlock objects.""" - return (self.start_pos == other.start_pos) & (self.end_pos == other.end_pos) & \ - (self.start_pos == other.end_pos) + return ( + (self.start_pos == other.start_pos) & + (self.end_pos == other.end_pos) & + (self.start_pos == other.end_pos)) def from_json(self, json): """Convert the class from a JSON object. @@ -2141,7 +2143,8 @@ def to_json(self): block_dict = { "extrusion_block_start": self.start_pos, "extrusion_block_end": self.end_pos, - "extrusion_block_angle": self.start_pos} + "extrusion_block_angle": self.start_pos, + } return block_dict From bc6c07eca2abc64029156ebc5fd2c23336af77a6 Mon Sep 17 00:00:00 2001 From: matthewAnsys Date: Mon, 16 Jun 2025 11:16:03 +0100 Subject: [PATCH 10/17] Update formatting --- src/ansys/motorcad/core/geometry.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/ansys/motorcad/core/geometry.py b/src/ansys/motorcad/core/geometry.py index ec802d235..be73351b3 100644 --- a/src/ansys/motorcad/core/geometry.py +++ b/src/ansys/motorcad/core/geometry.py @@ -2183,7 +2183,8 @@ def __eq__(self, other): return ( (self.start_pos == other.start_pos) & (self.end_pos == other.end_pos) & - (self.start_pos == other.end_pos)) + (self.start_pos == other.end_pos) + ) def from_json(self, json): """Convert the class from a JSON object. From a5fcfe365aaf4e0841825b98f28d96dc694de822 Mon Sep 17 00:00:00 2001 From: matthewAnsys Date: Mon, 16 Jun 2025 11:18:45 +0100 Subject: [PATCH 11/17] Update formatting --- src/ansys/motorcad/core/geometry.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/ansys/motorcad/core/geometry.py b/src/ansys/motorcad/core/geometry.py index be73351b3..68daa69a0 100644 --- a/src/ansys/motorcad/core/geometry.py +++ b/src/ansys/motorcad/core/geometry.py @@ -2181,9 +2181,9 @@ def __init__(self): def __eq__(self, other): """Compare equality of 2 ExtrusionBlock objects.""" return ( - (self.start_pos == other.start_pos) & - (self.end_pos == other.end_pos) & - (self.start_pos == other.end_pos) + (self.start_pos == other.start_pos) & + (self.end_pos == other.end_pos) & + (self.start_pos == other.end_pos) ) def from_json(self, json): From c5b069a7349c4a61c123e5a5568fc3a1656b42a5 Mon Sep 17 00:00:00 2001 From: matthewAnsys Date: Mon, 16 Jun 2025 11:20:42 +0100 Subject: [PATCH 12/17] Update formatting --- src/ansys/motorcad/core/geometry.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/ansys/motorcad/core/geometry.py b/src/ansys/motorcad/core/geometry.py index 68daa69a0..f057f3cae 100644 --- a/src/ansys/motorcad/core/geometry.py +++ b/src/ansys/motorcad/core/geometry.py @@ -2181,9 +2181,9 @@ def __init__(self): def __eq__(self, other): """Compare equality of 2 ExtrusionBlock objects.""" return ( - (self.start_pos == other.start_pos) & - (self.end_pos == other.end_pos) & - (self.start_pos == other.end_pos) + (self.start_pos == other.start_pos) + & (self.end_pos == other.end_pos) + & (self.start_pos == other.end_pos) ) def from_json(self, json): From dd19d8353d492f0267d5399f77695aa5db2cb30a Mon Sep 17 00:00:00 2001 From: matthewAnsys Date: Mon, 16 Jun 2025 11:27:44 +0100 Subject: [PATCH 13/17] Update formatting final --- src/ansys/motorcad/core/geometry.py | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/ansys/motorcad/core/geometry.py b/src/ansys/motorcad/core/geometry.py index f057f3cae..13d7a1bae 100644 --- a/src/ansys/motorcad/core/geometry.py +++ b/src/ansys/motorcad/core/geometry.py @@ -391,6 +391,12 @@ def singular(self, singular): @property def extrusion_blocks(self): + """Get extrusion blocks list. + + Returns + ------- + list of ExtrusionBlock + """ return self._extrusion_blocks @property @@ -2173,7 +2179,7 @@ class ExtrusionBlock: """Generic class for storing 3D extrusion data.""" def __init__(self): - """Initialise extrusion block""" + """Initialise extrusion block.""" self.start_pos = 0 self.end_pos = 0 self.angle_shift = 0 From a8bae45fa1bd1590c12d48487c5843683bb9d645 Mon Sep 17 00:00:00 2001 From: matthewAnsys Date: Mon, 16 Jun 2025 12:02:10 +0100 Subject: [PATCH 14/17] Add region temperature --- src/ansys/motorcad/core/geometry.py | 15 +++++++++++++++ tests/test_geometry.py | 12 ++++++++++++ 2 files changed, 27 insertions(+) diff --git a/src/ansys/motorcad/core/geometry.py b/src/ansys/motorcad/core/geometry.py index 13d7a1bae..179722f2b 100644 --- a/src/ansys/motorcad/core/geometry.py +++ b/src/ansys/motorcad/core/geometry.py @@ -139,6 +139,7 @@ def __init__(self, region_type=RegionType.adaptive, motorcad_instance=None): self._region_type = region_type self._mesh_length = 0 self._extrusion_blocks = ExtrusionBlockList() + self._temperature = 0 self._linked_region = None self._singular = False @@ -301,6 +302,9 @@ def _from_json(cls, json, motorcad_instance=None): if "extrusion_blocks" in json: new_region._extrusion_blocks._from_json(json["extrusion_blocks"]) + if "region_temperature" in json: + new_region._temperature = json["region_temperature"] + return new_region # method to convert python object to send to Motor-CAD @@ -334,6 +338,7 @@ def _to_json(self): "singular": self._singular, "lamination_type": lamination_type, "extrusion_blocks": self._extrusion_blocks._to_json, + "region_temperature": self._temperature, } return region_dict @@ -537,6 +542,16 @@ def mesh_length(self): def mesh_length(self, mesh_length): self._mesh_length = mesh_length + @property + def temperature(self): + """Get region temperature. + + Returns + ------- + float : region temperature + """ + return self._temperature + @property def area(self): """Get the region area.""" diff --git a/tests/test_geometry.py b/tests/test_geometry.py index 0a042f592..b2304c33c 100644 --- a/tests/test_geometry.py +++ b/tests/test_geometry.py @@ -364,6 +364,7 @@ def test_region_from_json(): "region type": RegionType.stator_copper, "mesh_length": 0.035, "singular": False, + "region_temperature": 25 } test_region = geometry.Region(region_type=RegionType.stator_copper) @@ -380,6 +381,7 @@ def test_region_from_json(): test_region._child_names = ["Duct", "Duct_1"] test_region.mesh_length = (0.035,) test_region.singular = (False,) + test_region._temperature = 25 region = geometry.Region._from_json(raw_region) @@ -403,6 +405,7 @@ def test_region_to_json(): "mesh_length": 0.035, "singular": True, "on_boundary": False, + "region_temperature": 35, } test_region = geometry.Region(region_type=RegionType.stator_copper) @@ -418,6 +421,7 @@ def test_region_to_json(): test_region.parent_name = "Insulation" test_region.mesh_length = 0.035 test_region.singular = True + test_region._temperature = 35 assert test_region._to_json() == raw_region @@ -2687,3 +2691,11 @@ def test_region_creation_warnings(mc): _ = Region() with pytest.warns(): _ = Region(mc) + + +def test_get_temperature(): + region_temp = 100 + test_region = Region() + test_region._temperature = region_temp + + assert test_region.temperature == region_temp From f202d229a2f1182575eeee5f58745668ed7444da Mon Sep 17 00:00:00 2001 From: matthewAnsys Date: Mon, 16 Jun 2025 12:04:57 +0100 Subject: [PATCH 15/17] Add region temperature --- tests/test_geometry.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/test_geometry.py b/tests/test_geometry.py index b2304c33c..94805fcf0 100644 --- a/tests/test_geometry.py +++ b/tests/test_geometry.py @@ -364,7 +364,7 @@ def test_region_from_json(): "region type": RegionType.stator_copper, "mesh_length": 0.035, "singular": False, - "region_temperature": 25 + "region_temperature": 25, } test_region = geometry.Region(region_type=RegionType.stator_copper) From 45be374cc716b637a010f71c8e3e7489f395699e Mon Sep 17 00:00:00 2001 From: matthewAnsys Date: Tue, 17 Jun 2025 08:26:41 +0100 Subject: [PATCH 16/17] Update json string name for block step angle --- src/ansys/motorcad/core/geometry.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/ansys/motorcad/core/geometry.py b/src/ansys/motorcad/core/geometry.py index 179722f2b..48816dbd3 100644 --- a/src/ansys/motorcad/core/geometry.py +++ b/src/ansys/motorcad/core/geometry.py @@ -2217,7 +2217,7 @@ def from_json(self, json): """ self.start_pos = json["extrusion_block_start"] self.end_pos = json["extrusion_block_end"] - self.angle_shift = json["extrusion_block_angle"] + self.angle_shift = json["extrusion_block_angle_step"] def to_json(self): """Convert from a Python class to a JSON object. @@ -2230,7 +2230,7 @@ def to_json(self): block_dict = { "extrusion_block_start": self.start_pos, "extrusion_block_end": self.end_pos, - "extrusion_block_angle": self.start_pos, + "extrusion_block_angle_step": self.start_pos, } return block_dict From 7c119c7b45a2e51ad9e225d2873eba0602179101 Mon Sep 17 00:00:00 2001 From: matthewAnsys Date: Tue, 17 Jun 2025 09:43:07 +0100 Subject: [PATCH 17/17] Add weight reduction factor --- src/ansys/motorcad/core/geometry.py | 25 +++++++++++++++++++++++++ tests/test_geometry.py | 12 ++++++++++++ 2 files changed, 37 insertions(+) diff --git a/src/ansys/motorcad/core/geometry.py b/src/ansys/motorcad/core/geometry.py index 48816dbd3..73e0d9d10 100644 --- a/src/ansys/motorcad/core/geometry.py +++ b/src/ansys/motorcad/core/geometry.py @@ -140,6 +140,7 @@ def __init__(self, region_type=RegionType.adaptive, motorcad_instance=None): self._mesh_length = 0 self._extrusion_blocks = ExtrusionBlockList() self._temperature = 0 + self._weight_reduction_factor = 1 self._linked_region = None self._singular = False @@ -305,6 +306,9 @@ def _from_json(cls, json, motorcad_instance=None): if "region_temperature" in json: new_region._temperature = json["region_temperature"] + if "weight_reduction_factor" in json: + new_region._weight_reduction_factor = json["weight_reduction_factor"] + return new_region # method to convert python object to send to Motor-CAD @@ -506,6 +510,27 @@ def material(self): def material(self, material): self._material = material + @property + def weight_reduction_factor(self): + """Get weight reduction factor. + + Returns + ------- + float : weight reduction factor + """ + return self._weight_reduction_factor + + @weight_reduction_factor.setter + def weight_reduction_factor(self, factor): + """Set weight reduction factor. + + Parameters + ---------- + factor : float + weight reduction factor + """ + self._weight_reduction_factor = factor + @property def colour(self): """Get or set region colour.""" diff --git a/tests/test_geometry.py b/tests/test_geometry.py index 94805fcf0..dc995903f 100644 --- a/tests/test_geometry.py +++ b/tests/test_geometry.py @@ -365,6 +365,7 @@ def test_region_from_json(): "mesh_length": 0.035, "singular": False, "region_temperature": 25, + "weight_reduction_factor": 0.5, } test_region = geometry.Region(region_type=RegionType.stator_copper) @@ -382,6 +383,7 @@ def test_region_from_json(): test_region.mesh_length = (0.035,) test_region.singular = (False,) test_region._temperature = 25 + test_region.weight_reduction_factor = 0.5 region = geometry.Region._from_json(raw_region) @@ -406,6 +408,7 @@ def test_region_to_json(): "singular": True, "on_boundary": False, "region_temperature": 35, + "weight_reduction_factor" : 0.75, } test_region = geometry.Region(region_type=RegionType.stator_copper) @@ -422,6 +425,7 @@ def test_region_to_json(): test_region.mesh_length = 0.035 test_region.singular = True test_region._temperature = 35 + test_region._weight_reduction_factor = 0.75 assert test_region._to_json() == raw_region @@ -2699,3 +2703,11 @@ def test_get_temperature(): test_region._temperature = region_temp assert test_region.temperature == region_temp + + +def test_get_weight_reduction_factor(): + factor = 0.789 + test_region = Region() + test_region.weight_reduction_factor = factor + + assert test_region.weight_reduction_factor == factor