pyedb 0.52.0__py3-none-any.whl → 0.54.0__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of pyedb might be problematic. Click here for more details.
- pyedb/__init__.py +1 -1
- pyedb/configuration/cfg_common.py +12 -15
- pyedb/configuration/cfg_data.py +2 -2
- pyedb/configuration/cfg_modeler.py +163 -234
- pyedb/configuration/cfg_ports_sources.py +6 -8
- pyedb/configuration/cfg_stackup.py +62 -249
- pyedb/configuration/configuration.py +272 -170
- pyedb/dotnet/database/cell/hierarchy/model.py +1 -1
- pyedb/dotnet/database/cell/layout.py +1 -1
- pyedb/dotnet/database/cell/layout_obj.py +3 -3
- pyedb/dotnet/database/cell/primitive/path.py +1 -1
- pyedb/dotnet/database/cell/primitive/primitive.py +8 -8
- pyedb/dotnet/database/cell/terminal/pingroup_terminal.py +1 -1
- pyedb/dotnet/database/cell/terminal/point_terminal.py +1 -1
- pyedb/dotnet/database/cell/terminal/terminal.py +24 -26
- pyedb/dotnet/database/components.py +33 -27
- pyedb/dotnet/database/definition/component_def.py +3 -3
- pyedb/dotnet/database/definition/component_model.py +1 -1
- pyedb/dotnet/database/definition/package_def.py +1 -1
- pyedb/dotnet/database/dotnet/database.py +47 -38
- pyedb/dotnet/database/dotnet/primitive.py +16 -16
- pyedb/dotnet/database/edb_data/hfss_extent_info.py +6 -6
- pyedb/dotnet/database/edb_data/layer_data.py +17 -15
- pyedb/dotnet/database/edb_data/padstacks_data.py +12 -12
- pyedb/dotnet/database/edb_data/primitives_data.py +3 -3
- pyedb/dotnet/database/edb_data/sources.py +6 -6
- pyedb/dotnet/database/edb_data/variables.py +7 -3
- pyedb/dotnet/database/geometry/point_data.py +1 -1
- pyedb/dotnet/database/geometry/polygon_data.py +2 -4
- pyedb/dotnet/database/hfss.py +7 -7
- pyedb/dotnet/database/materials.py +2 -2
- pyedb/dotnet/database/modeler.py +8 -11
- pyedb/dotnet/database/nets.py +1 -1
- pyedb/dotnet/database/padstack.py +72 -1
- pyedb/dotnet/database/sim_setup_data/data/settings.py +24 -0
- pyedb/dotnet/database/sim_setup_data/io/siwave.py +26 -1
- pyedb/dotnet/database/siwave.py +19 -5
- pyedb/dotnet/database/stackup.py +80 -137
- pyedb/dotnet/database/utilities/heatsink.py +4 -4
- pyedb/dotnet/database/utilities/obj_base.py +1 -1
- pyedb/dotnet/database/utilities/simulation_setup.py +1 -1
- pyedb/dotnet/database/utilities/siwave_cpa_simulation_setup.py +894 -0
- pyedb/dotnet/database/utilities/siwave_simulation_setup.py +15 -0
- pyedb/dotnet/database/utilities/value.py +116 -0
- pyedb/dotnet/edb.py +58 -45
- pyedb/generic/design_types.py +39 -1
- pyedb/generic/grpc_warnings.py +5 -0
- pyedb/grpc/__init__.py +0 -0
- pyedb/grpc/database/components.py +155 -98
- pyedb/grpc/database/control_file.py +240 -193
- pyedb/grpc/database/definition/materials.py +23 -30
- pyedb/grpc/database/definition/package_def.py +15 -15
- pyedb/grpc/database/definition/padstack_def.py +51 -51
- pyedb/grpc/database/definitions.py +7 -5
- pyedb/grpc/database/geometry/arc_data.py +7 -5
- pyedb/grpc/database/geometry/point_3d_data.py +8 -7
- pyedb/grpc/database/geometry/polygon_data.py +3 -2
- pyedb/grpc/database/hierarchy/component.py +43 -38
- pyedb/grpc/database/hierarchy/pin_pair_model.py +15 -14
- pyedb/grpc/database/hierarchy/pingroup.py +9 -9
- pyedb/grpc/database/layers/stackup_layer.py +45 -44
- pyedb/grpc/database/layout/layout.py +9 -8
- pyedb/grpc/database/layout/voltage_regulator.py +7 -7
- pyedb/grpc/database/layout_validation.py +13 -12
- pyedb/grpc/database/modeler.py +156 -131
- pyedb/grpc/database/nets.py +42 -31
- pyedb/grpc/database/padstacks.py +270 -175
- pyedb/grpc/database/ports/ports.py +5 -6
- pyedb/grpc/database/primitive/bondwire.py +8 -7
- pyedb/grpc/database/primitive/circle.py +4 -4
- pyedb/grpc/database/primitive/padstack_instance.py +18 -18
- pyedb/grpc/database/primitive/path.py +7 -7
- pyedb/grpc/database/primitive/polygon.py +3 -3
- pyedb/grpc/database/primitive/primitive.py +13 -17
- pyedb/grpc/database/primitive/rectangle.py +13 -13
- pyedb/grpc/database/simulation_setup/hfss_general_settings.py +1 -1
- pyedb/grpc/database/simulation_setup/hfss_simulation_setup.py +10 -0
- pyedb/grpc/database/simulation_setup/siwave_cpa_simulation_setup.py +961 -0
- pyedb/grpc/database/simulation_setup/siwave_simulation_setup.py +17 -1
- pyedb/grpc/database/siwave.py +44 -24
- pyedb/grpc/database/source_excitations.py +333 -229
- pyedb/grpc/database/stackup.py +164 -147
- pyedb/grpc/database/terminal/bundle_terminal.py +17 -7
- pyedb/grpc/database/terminal/edge_terminal.py +10 -0
- pyedb/grpc/database/terminal/padstack_instance_terminal.py +15 -4
- pyedb/grpc/database/terminal/pingroup_terminal.py +11 -10
- pyedb/grpc/database/terminal/point_terminal.py +4 -3
- pyedb/grpc/database/terminal/terminal.py +9 -9
- pyedb/grpc/database/utility/value.py +109 -0
- pyedb/grpc/edb.py +129 -45
- pyedb/grpc/edb_init.py +0 -7
- pyedb/siwave_core/cpa/simulation_setup_data_model.py +132 -0
- pyedb/siwave_core/product_properties.py +198 -0
- {pyedb-0.52.0.dist-info → pyedb-0.54.0.dist-info}/METADATA +15 -13
- {pyedb-0.52.0.dist-info → pyedb-0.54.0.dist-info}/RECORD +97 -89
- {pyedb-0.52.0.dist-info → pyedb-0.54.0.dist-info}/WHEEL +1 -1
- {pyedb-0.52.0.dist-info → pyedb-0.54.0.dist-info/licenses}/LICENSE +0 -0
|
@@ -20,14 +20,13 @@
|
|
|
20
20
|
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
21
|
# SOFTWARE.
|
|
22
22
|
|
|
23
|
-
from ansys.edb.core.utility.value import Value as GrpcValue
|
|
24
|
-
|
|
25
23
|
from pyedb.dotnet.database.cell.terminal.terminal import Terminal
|
|
26
24
|
from pyedb.grpc.database.terminal.bundle_terminal import BundleTerminal
|
|
27
25
|
from pyedb.grpc.database.terminal.edge_terminal import EdgeTerminal
|
|
28
26
|
from pyedb.grpc.database.terminal.padstack_instance_terminal import (
|
|
29
27
|
PadstackInstanceTerminal,
|
|
30
28
|
)
|
|
29
|
+
from pyedb.grpc.database.utility.value import Value
|
|
31
30
|
|
|
32
31
|
|
|
33
32
|
class GapPort(EdgeTerminal):
|
|
@@ -60,7 +59,7 @@ class GapPort(EdgeTerminal):
|
|
|
60
59
|
float
|
|
61
60
|
Magnitude value.
|
|
62
61
|
"""
|
|
63
|
-
return self._edb_object.source_amplitude.
|
|
62
|
+
return Value(self._edb_object.source_amplitude, self._pedb.active_cell)
|
|
64
63
|
|
|
65
64
|
@property
|
|
66
65
|
def phase(self) -> float:
|
|
@@ -71,7 +70,7 @@ class GapPort(EdgeTerminal):
|
|
|
71
70
|
float
|
|
72
71
|
Phase value.
|
|
73
72
|
"""
|
|
74
|
-
return self._edb_object.source_phase.
|
|
73
|
+
return Value(self._edb_object.source_phase, self._pedb.active_cell)
|
|
75
74
|
|
|
76
75
|
@property
|
|
77
76
|
def renormalize(self) -> bool:
|
|
@@ -236,12 +235,12 @@ class WavePort(EdgeTerminal):
|
|
|
236
235
|
float
|
|
237
236
|
deembed value.
|
|
238
237
|
"""
|
|
239
|
-
return self._edb_object.port_post_processing_prop.deembed_length.
|
|
238
|
+
return Value(self._edb_object.port_post_processing_prop.deembed_length, self._pedb.active_cell)
|
|
240
239
|
|
|
241
240
|
@deembed_length.setter
|
|
242
241
|
def deembed_length(self, value):
|
|
243
242
|
p = self._edb_object.port_post_processing_prop
|
|
244
|
-
p.deembed_length =
|
|
243
|
+
p.deembed_length = Value(value)
|
|
245
244
|
self._edb_object.port_post_processing_prop = p
|
|
246
245
|
|
|
247
246
|
|
|
@@ -25,7 +25,8 @@ from ansys.edb.core.primitive.bondwire import (
|
|
|
25
25
|
)
|
|
26
26
|
from ansys.edb.core.primitive.bondwire import Bondwire as GrpcBondWire
|
|
27
27
|
from ansys.edb.core.primitive.bondwire import BondwireType as GrpcBondWireType
|
|
28
|
-
|
|
28
|
+
|
|
29
|
+
from pyedb.grpc.database.utility.value import Value
|
|
29
30
|
|
|
30
31
|
|
|
31
32
|
class Bondwire(GrpcBondWire):
|
|
@@ -113,11 +114,11 @@ class Bondwire(GrpcBondWire):
|
|
|
113
114
|
float
|
|
114
115
|
Cross section height.
|
|
115
116
|
"""
|
|
116
|
-
return super().cross_section_height
|
|
117
|
+
return Value(super().cross_section_height)
|
|
117
118
|
|
|
118
119
|
@cross_section_height.setter
|
|
119
120
|
def cross_section_height(self, cross_section_height):
|
|
120
|
-
super(Bondwire, self.__class__).cross_section_height.__set__(self,
|
|
121
|
+
super(Bondwire, self.__class__).cross_section_height.__set__(self, Value(cross_section_height))
|
|
121
122
|
|
|
122
123
|
# @property
|
|
123
124
|
# def trajectory(self):
|
|
@@ -134,11 +135,11 @@ class Bondwire(GrpcBondWire):
|
|
|
134
135
|
# **x1** : X value of the end point.
|
|
135
136
|
# **y1** : Y value of the end point.
|
|
136
137
|
# """
|
|
137
|
-
# return [i
|
|
138
|
+
# return [Value(i) for i in self.get_traj()]
|
|
138
139
|
#
|
|
139
140
|
# @trajectory.setter
|
|
140
141
|
# def trajectory(self, value):
|
|
141
|
-
# values = [
|
|
142
|
+
# values = [Value(i) for i in value]
|
|
142
143
|
# self.set_traj(values[0], values[1], values[2], values[3])
|
|
143
144
|
|
|
144
145
|
@property
|
|
@@ -150,11 +151,11 @@ class Bondwire(GrpcBondWire):
|
|
|
150
151
|
float
|
|
151
152
|
Width value.
|
|
152
153
|
"""
|
|
153
|
-
return super().width
|
|
154
|
+
return Value(super().width)
|
|
154
155
|
|
|
155
156
|
@width.setter
|
|
156
157
|
def width(self, width):
|
|
157
|
-
super(Bondwire, self.__class__).width.__set__(self,
|
|
158
|
+
super(Bondwire, self.__class__).width.__set__(self, Value(width))
|
|
158
159
|
|
|
159
160
|
# @property
|
|
160
161
|
# def start_elevation(self):
|
|
@@ -22,9 +22,9 @@
|
|
|
22
22
|
|
|
23
23
|
|
|
24
24
|
from ansys.edb.core.primitive.circle import Circle as GrpcCircle
|
|
25
|
-
from ansys.edb.core.utility.value import Value as GrpcValue
|
|
26
25
|
|
|
27
26
|
from pyedb.grpc.database.primitive.primitive import Primitive
|
|
27
|
+
from pyedb.grpc.database.utility.value import Value
|
|
28
28
|
|
|
29
29
|
|
|
30
30
|
class Circle(GrpcCircle, Primitive):
|
|
@@ -33,7 +33,7 @@ class Circle(GrpcCircle, Primitive):
|
|
|
33
33
|
Primitive.__init__(self, pedb, edb_object)
|
|
34
34
|
self._pedb = pedb
|
|
35
35
|
|
|
36
|
-
def get_parameters(self):
|
|
36
|
+
def get_parameters(self) -> tuple[float, float, float]:
|
|
37
37
|
"""Returns parameters.
|
|
38
38
|
|
|
39
39
|
Returns
|
|
@@ -57,7 +57,7 @@ class Circle(GrpcCircle, Primitive):
|
|
|
57
57
|
|
|
58
58
|
"""
|
|
59
59
|
params = super().get_parameters()
|
|
60
|
-
return params[0]
|
|
60
|
+
return Value(params[0]), Value(params[1]), Value(params[2])
|
|
61
61
|
|
|
62
62
|
def set_parameters(self, center_x, center_y, radius):
|
|
63
63
|
"""Set parameters.
|
|
@@ -72,4 +72,4 @@ class Circle(GrpcCircle, Primitive):
|
|
|
72
72
|
Circle radius.
|
|
73
73
|
|
|
74
74
|
"""
|
|
75
|
-
super().set_parameters(
|
|
75
|
+
super().set_parameters(Value(center_x), Value(center_y), Value(radius))
|
|
@@ -33,12 +33,12 @@ from ansys.edb.core.primitive.padstack_instance import (
|
|
|
33
33
|
from ansys.edb.core.terminal.pin_group_terminal import (
|
|
34
34
|
PinGroupTerminal as GrpcPinGroupTerminal,
|
|
35
35
|
)
|
|
36
|
-
from ansys.edb.core.utility.value import Value as GrpcValue
|
|
37
36
|
|
|
38
37
|
from pyedb.grpc.database.definition.padstack_def import PadstackDef
|
|
39
38
|
from pyedb.grpc.database.terminal.padstack_instance_terminal import (
|
|
40
39
|
PadstackInstanceTerminal,
|
|
41
40
|
)
|
|
41
|
+
from pyedb.grpc.database.utility.value import Value
|
|
42
42
|
from pyedb.modeler.geometry_operators import GeometryOperators
|
|
43
43
|
|
|
44
44
|
|
|
@@ -266,7 +266,7 @@ class PadstackInstance(GrpcPadstackInstance):
|
|
|
266
266
|
@_em_properties.setter
|
|
267
267
|
def _em_properties(self, em_prop):
|
|
268
268
|
"""Set EM properties"""
|
|
269
|
-
pid = self._pedb.
|
|
269
|
+
pid = self._pedb.core.ProductId.Designer
|
|
270
270
|
self.set_product_property(pid, 18, em_prop)
|
|
271
271
|
|
|
272
272
|
@property
|
|
@@ -503,9 +503,9 @@ class PadstackInstance(GrpcPadstackInstance):
|
|
|
503
503
|
position = self.get_position_and_rotation()
|
|
504
504
|
if self.component:
|
|
505
505
|
out2 = self.component.transform.transform_point(GrpcPointData(position[:2]))
|
|
506
|
-
self._position = [
|
|
506
|
+
self._position = [Value(out2[0]), Value(out2[1])]
|
|
507
507
|
else:
|
|
508
|
-
self._position = [
|
|
508
|
+
self._position = [Value(pt) for pt in position[:2]]
|
|
509
509
|
return self._position
|
|
510
510
|
|
|
511
511
|
@position.setter
|
|
@@ -513,12 +513,12 @@ class PadstackInstance(GrpcPadstackInstance):
|
|
|
513
513
|
pos = []
|
|
514
514
|
for v in value:
|
|
515
515
|
if isinstance(v, (float, int, str)):
|
|
516
|
-
pos.append(
|
|
516
|
+
pos.append(Value(v, self._pedb.active_cell))
|
|
517
517
|
else:
|
|
518
518
|
pos.append(v)
|
|
519
519
|
point_data = GrpcPointData(pos[0], pos[1])
|
|
520
520
|
self.set_position_and_rotation(
|
|
521
|
-
x=point_data.x, y=point_data.y, rotation=
|
|
521
|
+
x=point_data.x, y=point_data.y, rotation=Value(self.rotation, self._pedb.active_cell)
|
|
522
522
|
)
|
|
523
523
|
|
|
524
524
|
@property
|
|
@@ -530,7 +530,7 @@ class PadstackInstance(GrpcPadstackInstance):
|
|
|
530
530
|
float
|
|
531
531
|
Rotatation value for the padstack instance.
|
|
532
532
|
"""
|
|
533
|
-
return self.get_position_and_rotation()[-1]
|
|
533
|
+
return Value(self.get_position_and_rotation()[-1])
|
|
534
534
|
|
|
535
535
|
@property
|
|
536
536
|
def name(self) -> str:
|
|
@@ -714,8 +714,8 @@ class PadstackInstance(GrpcPadstackInstance):
|
|
|
714
714
|
"""
|
|
715
715
|
back_drill = super().get_back_drill_by_layer(from_bottom)
|
|
716
716
|
layer = back_drill[0].name
|
|
717
|
-
offset =
|
|
718
|
-
diameter =
|
|
717
|
+
offset = Value(back_drill[1])
|
|
718
|
+
diameter = Value(back_drill[2])
|
|
719
719
|
return layer, offset, diameter
|
|
720
720
|
|
|
721
721
|
def get_back_drill_by_depth(self, from_bottom=True) -> tuple[float, float]:
|
|
@@ -730,8 +730,8 @@ class PadstackInstance(GrpcPadstackInstance):
|
|
|
730
730
|
tuple (drill_depth, drill_diameter) (float, float)
|
|
731
731
|
"""
|
|
732
732
|
back_drill = super().get_back_drill_by_depth(from_bottom)
|
|
733
|
-
drill_depth = back_drill[0]
|
|
734
|
-
drill_diameter = back_drill[1]
|
|
733
|
+
drill_depth = Value(back_drill[0])
|
|
734
|
+
drill_diameter = Value(back_drill[1])
|
|
735
735
|
return drill_depth, drill_diameter
|
|
736
736
|
|
|
737
737
|
def set_back_drill_by_depth(self, drill_depth, diameter, from_bottom=True):
|
|
@@ -747,7 +747,7 @@ class PadstackInstance(GrpcPadstackInstance):
|
|
|
747
747
|
Default value is `True`.
|
|
748
748
|
"""
|
|
749
749
|
super().set_back_drill_by_depth(
|
|
750
|
-
drill_depth=
|
|
750
|
+
drill_depth=Value(drill_depth), diameter=Value(diameter), from_bottom=from_bottom
|
|
751
751
|
)
|
|
752
752
|
|
|
753
753
|
def set_back_drill_by_layer(self, drill_to_layer, offset, diameter, from_bottom=True):
|
|
@@ -768,8 +768,8 @@ class PadstackInstance(GrpcPadstackInstance):
|
|
|
768
768
|
drill_to_layer = self._pedb.stackup.layers[drill_to_layer]
|
|
769
769
|
super().set_back_drill_by_layer(
|
|
770
770
|
drill_to_layer=drill_to_layer,
|
|
771
|
-
offset=
|
|
772
|
-
diameter=
|
|
771
|
+
offset=Value(offset),
|
|
772
|
+
diameter=Value(diameter),
|
|
773
773
|
from_bottom=from_bottom,
|
|
774
774
|
)
|
|
775
775
|
|
|
@@ -812,8 +812,8 @@ class PadstackInstance(GrpcPadstackInstance):
|
|
|
812
812
|
List[:class:`PadstackInstance <pyedb.grpc.database.primitive.padstack_instance.PadstackInstance>`]
|
|
813
813
|
List of the voids that include this padstack instance.
|
|
814
814
|
"""
|
|
815
|
-
x_pos =
|
|
816
|
-
y_pos =
|
|
815
|
+
x_pos = Value(self.position[0])
|
|
816
|
+
y_pos = Value(self.position[1])
|
|
817
817
|
point_data = GrpcPointData([x_pos, y_pos])
|
|
818
818
|
|
|
819
819
|
voids = []
|
|
@@ -1068,7 +1068,7 @@ class PadstackInstance(GrpcPadstackInstance):
|
|
|
1068
1068
|
if point.is_arc:
|
|
1069
1069
|
continue
|
|
1070
1070
|
else:
|
|
1071
|
-
points.append([point.x
|
|
1071
|
+
points.append([Value(point.x), Value(point.y)])
|
|
1072
1072
|
xpoly, ypoly = zip(*points)
|
|
1073
1073
|
polygon = [list(xpoly), list(ypoly)]
|
|
1074
1074
|
rectangles = GeometryOperators.find_largest_rectangle_inside_polygon(
|
|
@@ -1086,7 +1086,7 @@ class PadstackInstance(GrpcPadstackInstance):
|
|
|
1086
1086
|
for point in path.points:
|
|
1087
1087
|
if self.component:
|
|
1088
1088
|
p_transf = self.component.transform.transform_point(point)
|
|
1089
|
-
new_rect.append([p_transf.x
|
|
1089
|
+
new_rect.append([Value(p_transf.x), Value(p_transf.y)])
|
|
1090
1090
|
if return_points:
|
|
1091
1091
|
return new_rect
|
|
1092
1092
|
else:
|
|
@@ -24,9 +24,9 @@ import math
|
|
|
24
24
|
from ansys.edb.core.geometry.polygon_data import PolygonData as GrpcPolygonData
|
|
25
25
|
from ansys.edb.core.primitive.path import Path as GrpcPath
|
|
26
26
|
from ansys.edb.core.primitive.path import PathCornerType as GrpcPatCornerType
|
|
27
|
-
from ansys.edb.core.utility.value import Value as GrpcValue
|
|
28
27
|
|
|
29
28
|
from pyedb.grpc.database.primitive.primitive import Primitive
|
|
29
|
+
from pyedb.grpc.database.utility.value import Value
|
|
30
30
|
|
|
31
31
|
|
|
32
32
|
class Path(GrpcPath, Primitive):
|
|
@@ -45,11 +45,11 @@ class Path(GrpcPath, Primitive):
|
|
|
45
45
|
float
|
|
46
46
|
Path width or None.
|
|
47
47
|
"""
|
|
48
|
-
return
|
|
48
|
+
return Value(super().width)
|
|
49
49
|
|
|
50
50
|
@width.setter
|
|
51
51
|
def width(self, value):
|
|
52
|
-
super(Path, self.__class__).width.__set__(self,
|
|
52
|
+
super(Path, self.__class__).width.__set__(self, Value(value))
|
|
53
53
|
|
|
54
54
|
@property
|
|
55
55
|
def length(self) -> float:
|
|
@@ -119,7 +119,7 @@ class Path(GrpcPath, Primitive):
|
|
|
119
119
|
layout=self._pedb.active_layout,
|
|
120
120
|
layer=self.layer,
|
|
121
121
|
net=self.net,
|
|
122
|
-
width=
|
|
122
|
+
width=Value(self.width),
|
|
123
123
|
end_cap1=self.get_end_cap_style()[0],
|
|
124
124
|
end_cap2=self.get_end_cap_style()[1],
|
|
125
125
|
corner_style=mapping[self.corner_style],
|
|
@@ -289,8 +289,8 @@ class Path(GrpcPath, Primitive):
|
|
|
289
289
|
rightline.append(rightPt)
|
|
290
290
|
return leftline, rightline
|
|
291
291
|
|
|
292
|
-
distance =
|
|
293
|
-
gap =
|
|
292
|
+
distance = Value(distance)
|
|
293
|
+
gap = Value(gap)
|
|
294
294
|
center_line = self.center_line
|
|
295
295
|
leftline, rightline = get_parallet_lines(center_line, distance)
|
|
296
296
|
for x, y in get_locations(rightline, gap) + get_locations(leftline, gap):
|
|
@@ -315,7 +315,7 @@ class Path(GrpcPath, Primitive):
|
|
|
315
315
|
List[List[float, float]].
|
|
316
316
|
|
|
317
317
|
"""
|
|
318
|
-
return [[pt.x
|
|
318
|
+
return [[Value(pt.x), Value(pt.y)] for pt in super().center_line.points]
|
|
319
319
|
|
|
320
320
|
# def set_center_line(self, value):
|
|
321
321
|
# if isinstance(value, list):
|
|
@@ -26,9 +26,9 @@ import math
|
|
|
26
26
|
from ansys.edb.core.geometry.point_data import PointData as GrpcPointData
|
|
27
27
|
from ansys.edb.core.geometry.polygon_data import PolygonData as GrpcPolygonData
|
|
28
28
|
from ansys.edb.core.primitive.polygon import Polygon as GrpcPolygon
|
|
29
|
-
from ansys.edb.core.utility.value import Value as GrpcValue
|
|
30
29
|
|
|
31
30
|
from pyedb.grpc.database.primitive.primitive import Primitive
|
|
31
|
+
from pyedb.grpc.database.utility.value import Value
|
|
32
32
|
|
|
33
33
|
|
|
34
34
|
class Polygon(GrpcPolygon, Primitive):
|
|
@@ -147,7 +147,7 @@ class Polygon(GrpcPolygon, Primitive):
|
|
|
147
147
|
>>> polygon.move(vector=["2mm", "100um"])
|
|
148
148
|
"""
|
|
149
149
|
if vector and isinstance(vector, list) and len(vector) == 2:
|
|
150
|
-
_vector = [
|
|
150
|
+
_vector = [Value(pt) for pt in vector]
|
|
151
151
|
self.polygon_data = self.polygon_data.move(_vector)
|
|
152
152
|
return True
|
|
153
153
|
return False
|
|
@@ -177,7 +177,7 @@ class Polygon(GrpcPolygon, Primitive):
|
|
|
177
177
|
else:
|
|
178
178
|
self._pedb.logger.error(f"Failed to evaluate center on primitive {self.id}")
|
|
179
179
|
elif isinstance(center, list) and len(center) == 2:
|
|
180
|
-
center = GrpcPointData([
|
|
180
|
+
center = GrpcPointData([Value(center[0]), Value(center[1])])
|
|
181
181
|
self.polygon_data = self.polygon_data.scale(factor, center)
|
|
182
182
|
return True
|
|
183
183
|
return False
|
|
@@ -25,6 +25,7 @@ from ansys.edb.core.geometry.point_data import PointData as GrpcPointData
|
|
|
25
25
|
from ansys.edb.core.primitive.circle import Circle as GrpcCircle
|
|
26
26
|
from ansys.edb.core.primitive.primitive import Primitive as GrpcPrimitive
|
|
27
27
|
|
|
28
|
+
from pyedb.grpc.database.utility.value import Value
|
|
28
29
|
from pyedb.misc.utilities import compute_arc_points
|
|
29
30
|
from pyedb.modeler.geometry_operators import GeometryOperators
|
|
30
31
|
|
|
@@ -202,15 +203,15 @@ class Primitive(GrpcPrimitive):
|
|
|
202
203
|
y = []
|
|
203
204
|
for i, point in enumerate(my_net_points):
|
|
204
205
|
if not point.is_arc:
|
|
205
|
-
x.append(point.x
|
|
206
|
-
y.append(point.y
|
|
206
|
+
x.append(Value(point.x))
|
|
207
|
+
y.append(Value(point.y))
|
|
207
208
|
else:
|
|
208
|
-
arc_h = point.arc_height
|
|
209
|
-
p1 = [my_net_points[i - 1].x
|
|
209
|
+
arc_h = Value(point.arc_height)
|
|
210
|
+
p1 = [Value(my_net_points[i - 1].x), Value(my_net_points[i - 1].y)]
|
|
210
211
|
if i + 1 < len(my_net_points):
|
|
211
|
-
p2 = [my_net_points[i + 1].x
|
|
212
|
+
p2 = [Value(my_net_points[i + 1].x), Value(my_net_points[i + 1].y)]
|
|
212
213
|
else:
|
|
213
|
-
p2 = [my_net_points[0].x
|
|
214
|
+
p2 = [Value(my_net_points[0].x), Value(my_net_points[0].y)]
|
|
214
215
|
x_arc, y_arc = compute_arc_points(p1, p2, arc_h, num)
|
|
215
216
|
x.extend(x_arc)
|
|
216
217
|
y.extend(y_arc)
|
|
@@ -228,7 +229,7 @@ class Primitive(GrpcPrimitive):
|
|
|
228
229
|
|
|
229
230
|
"""
|
|
230
231
|
center = self.cast().polygon_data.bounding_circle()[0]
|
|
231
|
-
return [center.x
|
|
232
|
+
return [Value(center.x), Value(center.y)]
|
|
232
233
|
|
|
233
234
|
def get_connected_object_id_set(self) -> list[int]:
|
|
234
235
|
"""Produce a list of all geometries physically connected to a given layout object.
|
|
@@ -253,12 +254,7 @@ class Primitive(GrpcPrimitive):
|
|
|
253
254
|
|
|
254
255
|
"""
|
|
255
256
|
bbox = self.cast().polygon_data.bbox()
|
|
256
|
-
return [
|
|
257
|
-
round(bbox[0].x.value, 6),
|
|
258
|
-
round(bbox[0].y.value, 6),
|
|
259
|
-
round(bbox[1].x.value, 6),
|
|
260
|
-
round(bbox[1].y.value, 6),
|
|
261
|
-
]
|
|
257
|
+
return [Value(bbox[0].x), Value(bbox[0].y), Value(bbox[1].x), Value(bbox[1].y)]
|
|
262
258
|
|
|
263
259
|
def convert_to_polygon(self):
|
|
264
260
|
"""Convert path to polygon.
|
|
@@ -329,7 +325,7 @@ class Primitive(GrpcPrimitive):
|
|
|
329
325
|
point = GrpcPointData(point)
|
|
330
326
|
|
|
331
327
|
p0 = self.cast().polygon_data.closest_point(point)
|
|
332
|
-
return [p0.x
|
|
328
|
+
return [Value(p0.x), Value(p0.y)]
|
|
333
329
|
|
|
334
330
|
@property
|
|
335
331
|
def arcs(self):
|
|
@@ -549,16 +545,16 @@ class Primitive(GrpcPrimitive):
|
|
|
549
545
|
"""
|
|
550
546
|
|
|
551
547
|
if isinstance(point, GrpcPointData):
|
|
552
|
-
point = [point.x
|
|
548
|
+
point = [Value(point.x), Value(point.y)]
|
|
553
549
|
dist = 1e12
|
|
554
550
|
out = None
|
|
555
551
|
for arc in self.arcs:
|
|
556
552
|
mid_point = arc.midpoint
|
|
557
|
-
mid_point = [mid_point.x
|
|
553
|
+
mid_point = [Value(mid_point.x), Value(mid_point.y)]
|
|
558
554
|
if GeometryOperators.points_distance(mid_point, point) < dist:
|
|
559
555
|
out = arc.midpoint
|
|
560
556
|
dist = GeometryOperators.points_distance(mid_point, point)
|
|
561
|
-
return [out.x
|
|
557
|
+
return [Value(out.x), Value(out.y)]
|
|
562
558
|
|
|
563
559
|
@property
|
|
564
560
|
def shortest_arc(self) -> float:
|
|
@@ -25,9 +25,9 @@ from ansys.edb.core.primitive.rectangle import (
|
|
|
25
25
|
RectangleRepresentationType as GrpcRectangleRepresentationType,
|
|
26
26
|
)
|
|
27
27
|
from ansys.edb.core.primitive.rectangle import Rectangle as GrpcRectangle
|
|
28
|
-
from ansys.edb.core.utility.value import Value as GrpcValue
|
|
29
28
|
|
|
30
29
|
from pyedb.grpc.database.primitive.primitive import Primitive
|
|
30
|
+
from pyedb.grpc.database.utility.value import Value
|
|
31
31
|
|
|
32
32
|
|
|
33
33
|
class Rectangle(GrpcRectangle, Primitive):
|
|
@@ -106,12 +106,12 @@ class Rectangle(GrpcRectangle, Primitive):
|
|
|
106
106
|
"""
|
|
107
107
|
parameters = super().get_parameters()
|
|
108
108
|
representation_type = parameters[0].name.lower()
|
|
109
|
-
parameter1 = parameters[1]
|
|
110
|
-
parameter2 = parameters[2]
|
|
111
|
-
parameter3 = parameters[3]
|
|
112
|
-
parameter4 = parameters[4]
|
|
113
|
-
corner_radius = parameters[5]
|
|
114
|
-
rotation = parameters[6]
|
|
109
|
+
parameter1 = Value(parameters[1])
|
|
110
|
+
parameter2 = Value(parameters[2])
|
|
111
|
+
parameter3 = Value(parameters[3])
|
|
112
|
+
parameter4 = Value(parameters[4])
|
|
113
|
+
corner_radius = Value(parameters[5])
|
|
114
|
+
rotation = Value(parameters[6])
|
|
115
115
|
return representation_type, parameter1, parameter2, parameter3, parameter4, corner_radius, rotation
|
|
116
116
|
|
|
117
117
|
def set_parameters(self, rep_type, param1, param2, param3, param4, corner_rad, rotation):
|
|
@@ -137,10 +137,10 @@ class Rectangle(GrpcRectangle, Primitive):
|
|
|
137
137
|
|
|
138
138
|
return super().set_parameters(
|
|
139
139
|
self.representation_type[rep_type],
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
140
|
+
Value(param1),
|
|
141
|
+
Value(param2),
|
|
142
|
+
Value(param3),
|
|
143
|
+
Value(param4),
|
|
144
|
+
Value(corner_rad),
|
|
145
|
+
Value(rotation),
|
|
146
146
|
)
|
|
@@ -51,7 +51,7 @@ class HFSSGeneralSettings(GrpcHFSSGeneralSettings):
|
|
|
51
51
|
@adaptive_solution_type.setter
|
|
52
52
|
def adaptive_solution_type(self, value):
|
|
53
53
|
if isinstance(value, str):
|
|
54
|
-
if value.lower() == "
|
|
54
|
+
if value.lower() == "single":
|
|
55
55
|
self.adaptive_solution_type = GrpcAdaptType.SINGLE
|
|
56
56
|
elif value.lower() == "multi_frequencies":
|
|
57
57
|
self.adaptive_solution_type = GrpcAdaptType.MULTI_FREQUENCIES
|
|
@@ -43,6 +43,16 @@ class HfssSimulationSetup(GrpcHfssSimulationSetup):
|
|
|
43
43
|
self._pedb = pedb
|
|
44
44
|
self._name = name
|
|
45
45
|
|
|
46
|
+
@property
|
|
47
|
+
def hfss_solver_settings(self):
|
|
48
|
+
"""Legacy compatibility to settings properties."""
|
|
49
|
+
return self.settings.options
|
|
50
|
+
|
|
51
|
+
@property
|
|
52
|
+
def adaptive_settings(self):
|
|
53
|
+
"""Legacy compatibility to general settings."""
|
|
54
|
+
return self.settings.general
|
|
55
|
+
|
|
46
56
|
def set_solution_single_frequency(self, frequency="5GHz", max_num_passes=10, max_delta_s=0.02) -> bool:
|
|
47
57
|
"""Set HFSS single frequency solution.
|
|
48
58
|
Parameters
|