pyedb 0.23.0__py3-none-any.whl → 0.25.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.

Files changed (38) hide show
  1. pyedb/__init__.py +1 -1
  2. pyedb/component_libraries/ansys_components.py +48 -2
  3. pyedb/configuration/cfg_operations.py +38 -4
  4. pyedb/configuration/cfg_ports_sources.py +16 -2
  5. pyedb/configuration/configuration.py +8 -0
  6. pyedb/dotnet/edb.py +39 -37
  7. pyedb/dotnet/edb_core/cell/hierarchy/hierarchy_obj.py +11 -0
  8. pyedb/dotnet/edb_core/cell/layout.py +47 -23
  9. pyedb/dotnet/edb_core/cell/layout_obj.py +0 -9
  10. pyedb/dotnet/edb_core/cell/primitive/__init__.py +3 -0
  11. pyedb/dotnet/edb_core/cell/{primitive.py → primitive/bondwire.py} +1 -146
  12. pyedb/dotnet/edb_core/cell/primitive/path.py +351 -0
  13. pyedb/dotnet/edb_core/cell/primitive/primitive.py +895 -0
  14. pyedb/dotnet/edb_core/cell/terminal/bundle_terminal.py +0 -4
  15. pyedb/dotnet/edb_core/cell/terminal/edge_terminal.py +1 -1
  16. pyedb/dotnet/edb_core/cell/terminal/terminal.py +2 -2
  17. pyedb/dotnet/edb_core/components.py +48 -25
  18. pyedb/dotnet/edb_core/dotnet/database.py +1 -23
  19. pyedb/dotnet/edb_core/dotnet/primitive.py +3 -139
  20. pyedb/dotnet/edb_core/edb_data/nets_data.py +1 -11
  21. pyedb/dotnet/edb_core/edb_data/padstacks_data.py +10 -24
  22. pyedb/dotnet/edb_core/edb_data/primitives_data.py +56 -868
  23. pyedb/dotnet/edb_core/geometry/polygon_data.py +43 -0
  24. pyedb/dotnet/edb_core/hfss.py +26 -22
  25. pyedb/dotnet/edb_core/layout_validation.py +3 -3
  26. pyedb/dotnet/edb_core/modeler.py +64 -81
  27. pyedb/dotnet/edb_core/nets.py +5 -4
  28. pyedb/dotnet/edb_core/padstack.py +12 -13
  29. pyedb/dotnet/edb_core/siwave.py +1 -1
  30. pyedb/dotnet/edb_core/stackup.py +3 -3
  31. pyedb/ipc2581/ecad/cad_data/layer_feature.py +1 -1
  32. pyedb/ipc2581/ecad/cad_data/polygon.py +2 -2
  33. pyedb/ipc2581/ecad/cad_data/step.py +2 -2
  34. pyedb/siwave.py +99 -0
  35. {pyedb-0.23.0.dist-info → pyedb-0.25.0.dist-info}/METADATA +4 -4
  36. {pyedb-0.23.0.dist-info → pyedb-0.25.0.dist-info}/RECORD +38 -35
  37. {pyedb-0.23.0.dist-info → pyedb-0.25.0.dist-info}/LICENSE +0 -0
  38. {pyedb-0.23.0.dist-info → pyedb-0.25.0.dist-info}/WHEEL +0 -0
@@ -20,6 +20,7 @@
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 pyedb.dotnet.edb_core.general import convert_py_list_to_net_list
23
24
  from pyedb.dotnet.edb_core.geometry.point_data import PointData
24
25
  from pyedb.dotnet.edb_core.utilities.obj_base import BBox
25
26
 
@@ -50,6 +51,14 @@ class PolygonData:
50
51
  else: # pragma: no cover
51
52
  self._edb_object = edb_object
52
53
 
54
+ @property
55
+ def arcs(self):
56
+ """Get the Primitive Arc Data."""
57
+ from pyedb.dotnet.edb_core.edb_data.primitives_data import EDBArcs
58
+
59
+ arcs = [EDBArcs(self._pedb, i) for i in self._edb_object.GetArcData()]
60
+ return arcs
61
+
53
62
  @property
54
63
  def points(self):
55
64
  """Get all points in polygon.
@@ -72,3 +81,37 @@ class PolygonData:
72
81
  def create_from_bounding_box(self, points):
73
82
  bbox = BBox(self._pedb, point_1=points[0], point_2=points[1])
74
83
  return self._pedb.edb_api.geometry.api_class.PolygonData.CreateFromBBox(bbox._edb_object)
84
+
85
+ def expand(self, offset=0.001, tolerance=1e-12, round_corners=True, maximum_corner_extension=0.001):
86
+ """Expand the polygon shape by an absolute value in all direction.
87
+ Offset can be negative for negative expansion.
88
+
89
+ Parameters
90
+ ----------
91
+ offset : float, optional
92
+ Offset value in meters.
93
+ tolerance : float, optional
94
+ Tolerance in meters.
95
+ round_corners : bool, optional
96
+ Whether to round corners or not.
97
+ If True, use rounded corners in the expansion otherwise use straight edges (can be degenerate).
98
+ maximum_corner_extension : float, optional
99
+ The maximum corner extension (when round corners are not used) at which point the corner is clipped.
100
+ """
101
+ new_poly = self._edb_object.Expand(offset, tolerance, round_corners, maximum_corner_extension)
102
+ self._edb_object = new_poly[0]
103
+ return True
104
+
105
+ def create_from_arcs(self, arcs, flag):
106
+ """Edb Dotnet Api Database `Edb.Geometry.CreateFromArcs`.
107
+
108
+ Parameters
109
+ ----------
110
+ arcs : list or `Edb.Geometry.ArcData`
111
+ List of ArcData.
112
+ flag : bool
113
+ """
114
+ if isinstance(arcs, list):
115
+ arcs = convert_py_list_to_net_list(arcs)
116
+ poly = self._edb_object.CreateFromArcs(arcs, flag)
117
+ return PolygonData(self._pedb, poly)
@@ -27,7 +27,7 @@ import math
27
27
 
28
28
  from pyedb.dotnet.edb_core.edb_data.hfss_extent_info import HfssExtentInfo
29
29
  from pyedb.dotnet.edb_core.edb_data.ports import BundleWavePort, WavePort
30
- from pyedb.dotnet.edb_core.edb_data.primitives_data import EDBPrimitives
30
+ from pyedb.dotnet.edb_core.edb_data.primitives_data import Primitive
31
31
  from pyedb.dotnet.edb_core.edb_data.simulation_configuration import (
32
32
  SimulationConfiguration,
33
33
  )
@@ -523,10 +523,10 @@ class EdbHfss(object):
523
523
  if not port_name:
524
524
  port_name = generate_unique_name("diff")
525
525
 
526
- if isinstance(positive_primitive_id, EDBPrimitives):
526
+ if isinstance(positive_primitive_id, Primitive):
527
527
  positive_primitive_id = positive_primitive_id.id
528
528
 
529
- if isinstance(negative_primitive_id, EDBPrimitives):
529
+ if isinstance(negative_primitive_id, Primitive):
530
530
  negative_primitive_id = negative_primitive_id.id
531
531
 
532
532
  _, pos_term = self.create_wave_port(
@@ -547,8 +547,10 @@ class EdbHfss(object):
547
547
  [pos_term._edb_object, neg_term._edb_object], self._edb.cell.terminal.Terminal
548
548
  )
549
549
  _edb_boundle_terminal = self._edb.cell.terminal.BundleTerminal.Create(edb_list)
550
- # _edb_boundle_terminal.SetName("Wave_"+port_name)
551
- pos_term._edb_object.SetName(port_name)
550
+ _edb_boundle_terminal.SetName(port_name)
551
+ pos, neg = list(_edb_boundle_terminal.GetTerminals())
552
+ pos.SetName(port_name + ":T1")
553
+ neg.SetName(port_name + ":T2")
552
554
  return port_name, BundleWavePort(self._pedb, _edb_boundle_terminal)
553
555
 
554
556
  def create_bundle_wave_port(
@@ -591,7 +593,7 @@ class EdbHfss(object):
591
593
  if not port_name:
592
594
  port_name = generate_unique_name("bundle_port")
593
595
 
594
- if isinstance(primitives_id[0], EDBPrimitives):
596
+ if isinstance(primitives_id[0], Primitive):
595
597
  primitives_id = [i.id for i in primitives_id]
596
598
 
597
599
  terminals = []
@@ -718,10 +720,10 @@ class EdbHfss(object):
718
720
  )
719
721
  if not port_name:
720
722
  port_name = generate_unique_name("Port_")
721
- edge = self._edb.cell.terminal.PrimitiveEdge.Create(polygon.prim_obj, terminal_point)
723
+ edge = self._edb.cell.terminal.PrimitiveEdge.Create(polygon._edb_object, terminal_point)
722
724
  edges = convert_py_list_to_net_list(edge, self._edb.cell.terminal.Edge)
723
725
  edge_term = self._edb.cell.terminal.EdgeTerminal.Create(
724
- polygon.GetLayout(), polygon.GetNet(), port_name, edges, isRef=False
726
+ polygon._edb_object.GetLayout(), polygon._edb_object.GetNet(), port_name, edges, isRef=False
725
727
  )
726
728
  if force_circuit_port:
727
729
  edge_term.SetIsCircuitPort(True)
@@ -732,10 +734,14 @@ class EdbHfss(object):
732
734
  edge_term.SetImpedance(self._pedb.edb_value(port_impedance))
733
735
  edge_term.SetName(port_name)
734
736
  if reference_polygon and reference_point:
735
- ref_edge = self._edb.cell.terminal.PrimitiveEdge.Create(reference_polygon.prim_obj, reference_point)
737
+ ref_edge = self._edb.cell.terminal.PrimitiveEdge.Create(reference_polygon._edb_object, reference_point)
736
738
  ref_edges = convert_py_list_to_net_list(ref_edge, self._edb.cell.terminal.Edge)
737
739
  ref_edge_term = self._edb.cell.terminal.EdgeTerminal.Create(
738
- reference_polygon.GetLayout(), reference_polygon.GetNet(), port_name + "_ref", ref_edges, isRef=True
740
+ reference_polygon._edb_object.GetLayout(),
741
+ reference_polygon._edb_object.GetNet(),
742
+ port_name + "_ref",
743
+ ref_edges,
744
+ isRef=True,
739
745
  )
740
746
  if reference_layer:
741
747
  ref_edge_term.SetReferenceLayer(reference_layer)
@@ -763,7 +769,7 @@ class EdbHfss(object):
763
769
 
764
770
  Parameters
765
771
  ----------
766
- prim_id : int, EDBPrimitives
772
+ prim_id : int, Primitive
767
773
  Primitive ID.
768
774
  point_on_edge : list
769
775
  Coordinate of the point to define the edge terminal.
@@ -792,7 +798,7 @@ class EdbHfss(object):
792
798
  if not port_name:
793
799
  port_name = generate_unique_name("Terminal_")
794
800
 
795
- if isinstance(prim_id, EDBPrimitives):
801
+ if isinstance(prim_id, Primitive):
796
802
  prim_id = prim_id.id
797
803
 
798
804
  pos_edge_term = self._create_edge_terminal(prim_id, point_on_edge, port_name)
@@ -1097,27 +1103,25 @@ class EdbHfss(object):
1097
1103
  net_polygons = [
1098
1104
  pp
1099
1105
  for pp in net.primitives
1100
- if pp.GetPrimitiveType() == self._edb.cell.primitive.PrimitiveType.Polygon
1106
+ if pp._edb_object.GetPrimitiveType() == self._edb.cell.primitive.api.PrimitiveType.Polygon
1101
1107
  ]
1102
1108
  for poly in net_polygons:
1103
1109
  mid_points = [[arc.mid_point.X.ToDouble(), arc.mid_point.Y.ToDouble()] for arc in poly.arcs]
1104
1110
  for mid_point in mid_points:
1105
1111
  if GeometryOperators.point_in_polygon(mid_point, user_defined_extent) == 0:
1106
- port_name = generate_unique_name("{}_{}".format(poly.GetNet().GetName(), poly.GetId()))
1107
- term = self._create_edge_terminal(poly.GetId(), mid_point, port_name) # pragma no cover
1112
+ port_name = generate_unique_name("{}_{}".format(poly.net.name, poly.id))
1113
+ term = self._create_edge_terminal(poly.id, mid_point, port_name) # pragma no cover
1108
1114
  if not term.IsNull():
1109
1115
  self._logger.info("Terminal {} created".format(term.GetName()))
1110
1116
  term.SetIsCircuitPort(True)
1111
- terminal_info.append(
1112
- [poly.GetNet().GetName(), mid_point[0], mid_point[1], term.GetName()]
1113
- )
1117
+ terminal_info.append([poly.net.name, mid_point[0], mid_point[1], term.GetName()])
1114
1118
  mid_pt_data = self._edb.geometry.point_data(
1115
1119
  self._edb.utility.value(mid_point[0]), self._edb.utility.value(mid_point[1])
1116
1120
  )
1117
1121
  ref_prim = [
1118
1122
  prim
1119
1123
  for prim in reference_net.primitives
1120
- if prim.polygon_data.edb_api.PointInPolygon(mid_pt_data)
1124
+ if prim.polygon_data._edb_object.PointInPolygon(mid_pt_data)
1121
1125
  ]
1122
1126
  if not ref_prim:
1123
1127
  self._logger.warning("no reference primitive found, trying to extend scanning area")
@@ -1442,7 +1446,7 @@ class EdbHfss(object):
1442
1446
  as argument."
1443
1447
  )
1444
1448
  return False
1445
- net_names = [net.name for net in self._layout.nets if not net.IsPowerGround()]
1449
+ net_names = [net.name for net in self._layout.nets if not net._edb_object.IsPowerGround()]
1446
1450
  if simulation_setup.components and isinstance(simulation_setup.components[0], str):
1447
1451
  cmp_names = (
1448
1452
  simulation_setup.components
@@ -1552,8 +1556,8 @@ class EdbHfss(object):
1552
1556
  Number of ports.
1553
1557
 
1554
1558
  """
1555
- terms = [term for term in self._layout.terminals if int(term.GetBoundaryType()) == 0]
1556
- return len([i for i in terms if not i.IsReferenceTerminal()])
1559
+ terms = [term for term in self._layout.terminals if int(term._edb_object.GetBoundaryType()) == 0]
1560
+ return len([i for i in terms if not i.is_reference_terminal])
1557
1561
 
1558
1562
  def layout_defeaturing(self, simulation_setup=None):
1559
1563
  """Defeature the layout by reducing the number of points for polygons based on surface deviation criteria.
@@ -23,7 +23,7 @@
23
23
  import re
24
24
 
25
25
  from pyedb.dotnet.edb_core.edb_data.padstacks_data import EDBPadstackInstance
26
- from pyedb.dotnet.edb_core.edb_data.primitives_data import EDBPrimitives
26
+ from pyedb.dotnet.edb_core.edb_data.primitives_data import Primitive
27
27
  from pyedb.generic.general_methods import generate_unique_name
28
28
 
29
29
 
@@ -204,7 +204,7 @@ class LayoutValidation:
204
204
  sum = 0
205
205
  for el in elem:
206
206
  try:
207
- if isinstance(obj_dict[el], EDBPrimitives):
207
+ if isinstance(obj_dict[el], Primitive):
208
208
  if not obj_dict[el].is_void:
209
209
  sum += obj_dict[el].area()
210
210
  except:
@@ -246,7 +246,7 @@ class LayoutValidation:
246
246
  new_net_name = generate_unique_name(net, n=6)
247
247
  net_obj = self._pedb.nets.find_or_create_net(new_net_name)
248
248
  if net_obj:
249
- new_nets.append(net_obj.GetName())
249
+ new_nets.append(net_obj.name)
250
250
  for geo in disjoints:
251
251
  try:
252
252
  obj_dict[geo].net_name = net_obj
@@ -26,14 +26,9 @@ This module contains these classes: `EdbLayout` and `Shape`.
26
26
  import math
27
27
  import warnings
28
28
 
29
- from pyedb.dotnet.edb_core.cell.primitive import Bondwire
30
- from pyedb.dotnet.edb_core.dotnet.primitive import (
31
- CircleDotNet,
32
- PathDotNet,
33
- PolygonDotNet,
34
- RectangleDotNet,
35
- )
36
- from pyedb.dotnet.edb_core.edb_data.primitives_data import EDBPrimitives, cast
29
+ from pyedb.dotnet.edb_core.cell.primitive.bondwire import Bondwire
30
+ from pyedb.dotnet.edb_core.dotnet.primitive import CircleDotNet, RectangleDotNet
31
+ from pyedb.dotnet.edb_core.edb_data.primitives_data import Primitive, cast
37
32
  from pyedb.dotnet.edb_core.edb_data.utilities import EDBStatistics
38
33
  from pyedb.dotnet.edb_core.general import convert_py_list_to_net_list
39
34
 
@@ -128,7 +123,7 @@ class Modeler(object):
128
123
 
129
124
  Returns
130
125
  -------
131
- list of :class:`pyedb.dotnet.edb_core.edb_data.primitives_data.EDBPrimitives`
126
+ list of :class:`pyedb.dotnet.edb_core.edb_data.primitives_data.Primitive`
132
127
  List of primitives.
133
128
  """
134
129
  for p in self._layout.primitives:
@@ -145,16 +140,10 @@ class Modeler(object):
145
140
 
146
141
  Returns
147
142
  -------
148
- list of :class:`pyedb.dotnet.edb_core.edb_data.primitives_data.EDBPrimitives`
143
+ list of :class:`pyedb.dotnet.edb_core.edb_data.primitives_data.Primitive`
149
144
  List of primitives.
150
145
  """
151
- if len(self._primitives) == len(self._layout.primitives):
152
- return self._primitives
153
- self._primitives = []
154
- if self._active_layout:
155
- for lay_obj in self._layout.primitives:
156
- self._primitives.append(cast(lay_obj, self._pedb))
157
- return self._primitives
146
+ return self._pedb.layout.primitives
158
147
 
159
148
  @property
160
149
  def polygons_by_layer(self):
@@ -181,7 +170,7 @@ class Modeler(object):
181
170
  """
182
171
  _prim_by_net = {}
183
172
  for net, net_obj in self._pedb.nets.nets.items():
184
- _prim_by_net[net] = [cast(i, self._pedb) for i in net_obj.primitives]
173
+ _prim_by_net[net] = [i for i in net_obj.primitives]
185
174
  return _prim_by_net
186
175
 
187
176
  @property
@@ -199,13 +188,9 @@ class Modeler(object):
199
188
  for lay in self._pedb.stackup.non_stackup_layers:
200
189
  _primitives_by_layer[lay] = []
201
190
  for i in self._layout.primitives:
202
- try:
203
- lay = i.GetLayer().GetName()
204
- if lay in _primitives_by_layer:
205
- _primitives_by_layer[lay].append(cast(i, self._pedb))
206
- except:
207
- self._logger.warning(f"Failed to get layer on primitive {i}, skipping.")
208
- continue
191
+ lay = i.layer.name
192
+ if lay in _primitives_by_layer:
193
+ _primitives_by_layer[lay].append(i)
209
194
  return _primitives_by_layer
210
195
 
211
196
  @property
@@ -214,7 +199,7 @@ class Modeler(object):
214
199
 
215
200
  Returns
216
201
  -------
217
- list of :class:`pyedb.dotnet.edb_core.edb_data.primitives_data.EDBPrimitives`
202
+ list of :class:`pyedb.dotnet.edb_core.edb_data.primitives_data.Primitive`
218
203
  List of rectangles.
219
204
 
220
205
  """
@@ -226,7 +211,7 @@ class Modeler(object):
226
211
 
227
212
  Returns
228
213
  -------
229
- list of :class:`pyedb.dotnet.edb_core.edb_data.primitives_data.EDBPrimitives`
214
+ list of :class:`pyedb.dotnet.edb_core.edb_data.primitives_data.Primitive`
230
215
  List of circles.
231
216
 
232
217
  """
@@ -238,10 +223,10 @@ class Modeler(object):
238
223
 
239
224
  Returns
240
225
  -------
241
- list of :class:`pyedb.dotnet.edb_core.edb_data.primitives_data.EDBPrimitives`
226
+ list of :class:`pyedb.dotnet.edb_core.edb_data.primitives_data.Primitive`
242
227
  List of paths.
243
228
  """
244
- return [i for i in self.primitives if isinstance(i, PathDotNet)]
229
+ return [i for i in self.primitives if i.primitive_type == "path"]
245
230
 
246
231
  @property
247
232
  def polygons(self):
@@ -249,10 +234,10 @@ class Modeler(object):
249
234
 
250
235
  Returns
251
236
  -------
252
- list of :class:`pyedb.dotnet.edb_core.edb_data.primitives_data.EDBPrimitives`
237
+ list of :class:`pyedb.dotnet.edb_core.edb_data.primitives_data.Primitive`
253
238
  List of polygons.
254
239
  """
255
- return [i for i in self.primitives if isinstance(i, PolygonDotNet)]
240
+ return [i for i in self.primitives if i.primitive_type == "polygon"]
256
241
 
257
242
  def get_polygons_by_layer(self, layer_name, net_list=None):
258
243
  """Retrieve polygons by a layer.
@@ -271,14 +256,11 @@ class Modeler(object):
271
256
  """
272
257
  objinst = []
273
258
  for el in self.polygons:
274
- try:
275
- if el.GetLayer().GetName() == layer_name:
276
- if net_list and el.GetNet().GetName() in net_list:
277
- objinst.append(el)
278
- else:
279
- objinst.append(el)
280
- except:
281
- self._logger.warning(f"Failed to retrieve layer on polygon {el}")
259
+ if el.layer.name == layer_name:
260
+ if net_list and el.net.name in net_list:
261
+ objinst.append(el)
262
+ else:
263
+ objinst.append(el)
282
264
  return objinst
283
265
 
284
266
  def get_primitive_by_layer_and_point(self, point=None, layer=None, nets=None):
@@ -297,7 +279,7 @@ class Modeler(object):
297
279
 
298
280
  Returns
299
281
  -------
300
- list of :class:`pyedb.dotnet.edb_core.edb_data.primitives_data.EDBPrimitives`
282
+ list of :class:`pyedb.dotnet.edb_core.edb_data.primitives_data.Primitive`
301
283
  List of primitives, polygons, paths and rectangles.
302
284
  """
303
285
  if isinstance(layer, str) and layer not in list(self._pedb.stackup.signal_layers.keys()):
@@ -379,7 +361,7 @@ class Modeler(object):
379
361
  Parameters
380
362
  ----------
381
363
  polygon :
382
- class: `dotnet.edb_core.edb_data.primitives_data.EDBPrimitives`
364
+ class: `dotnet.edb_core.edb_data.primitives_data.Primitive`
383
365
 
384
366
  Returns
385
367
  -------
@@ -536,28 +518,28 @@ class Modeler(object):
536
518
 
537
519
  Returns
538
520
  -------
539
- :class:`pyedb.dotnet.edb_core.edb_data.primitives_data.EDBPrimitives`
521
+ :class:`pyedb.dotnet.edb_core.edb_data.primitives_data.Primitive`
540
522
  ``True`` when successful, ``False`` when failed.
541
523
  """
542
524
  net = self._pedb.nets.find_or_create_net(net_name)
543
525
  if start_cap_style.lower() == "round":
544
- start_cap_style = self._edb.cell.primitive.PathEndCapStyle.Round
526
+ start_cap_style = self._edb.cell.primitive.api.PathEndCapStyle.Round
545
527
  elif start_cap_style.lower() == "extended":
546
- start_cap_style = self._edb.cell.primitive.PathEndCapStyle.Extended # pragma: no cover
528
+ start_cap_style = self._edb.cell.primitive.api.PathEndCapStyle.Extended # pragma: no cover
547
529
  else:
548
- start_cap_style = self._edb.cell.primitive.PathEndCapStyle.Flat # pragma: no cover
530
+ start_cap_style = self._edb.cell.primitive.api.PathEndCapStyle.Flat # pragma: no cover
549
531
  if end_cap_style.lower() == "round":
550
- end_cap_style = self._edb.cell.primitive.PathEndCapStyle.Round # pragma: no cover
532
+ end_cap_style = self._edb.cell.primitive.api.PathEndCapStyle.Round # pragma: no cover
551
533
  elif end_cap_style.lower() == "extended":
552
- end_cap_style = self._edb.cell.primitive.PathEndCapStyle.Extended # pragma: no cover
534
+ end_cap_style = self._edb.cell.primitive.api.PathEndCapStyle.Extended # pragma: no cover
553
535
  else:
554
- end_cap_style = self._edb.cell.primitive.PathEndCapStyle.Flat
536
+ end_cap_style = self._edb.cell.primitive.api.PathEndCapStyle.Flat
555
537
  if corner_style.lower() == "round":
556
- corner_style = self._edb.cell.primitive.PathCornerStyle.RoundCorner
538
+ corner_style = self._edb.cell.primitive.api.PathCornerStyle.RoundCorner
557
539
  elif corner_style.lower() == "sharp":
558
- corner_style = self._edb.cell.primitive.PathCornerStyle.SharpCorner # pragma: no cover
540
+ corner_style = self._edb.cell.primitive.api.PathCornerStyle.SharpCorner # pragma: no cover
559
541
  else:
560
- corner_style = self._edb.cell.primitive.PathCornerStyle.MiterCorner # pragma: no cover
542
+ corner_style = self._edb.cell.primitive.api.PathCornerStyle.MiterCorner # pragma: no cover
561
543
 
562
544
  pointlists = [self._pedb.point_data(i[0], i[1]) for i in path_list.points]
563
545
  polygonData = self._edb.geometry.polygon_data.dotnetobj(convert_py_list_to_net_list(pointlists), False)
@@ -571,10 +553,12 @@ class Modeler(object):
571
553
  corner_style,
572
554
  polygonData,
573
555
  )
574
- if polygon.IsNull(): # pragma: no cover
556
+
557
+ if polygon.prim_obj.IsNull(): # pragma: no cover
575
558
  self._logger.error("Null path created")
576
559
  return False
577
- return cast(polygon, self._pedb)
560
+ polygon = self._pedb.layout.find_object_by_id(polygon.prim_obj.GetId())
561
+ return polygon
578
562
 
579
563
  def create_trace(
580
564
  self,
@@ -613,7 +597,7 @@ class Modeler(object):
613
597
 
614
598
  Returns
615
599
  -------
616
- :class:`pyedb.dotnet.edb_core.edb_data.primitives_data.EDBPrimitives`
600
+ :class:`pyedb.dotnet.edb_core.edb_data.primitives_data.Primitive`
617
601
  """
618
602
  path = self.Shape("Polygon", points=path_list)
619
603
  primitive = self._create_path(
@@ -648,7 +632,7 @@ class Modeler(object):
648
632
 
649
633
  Returns
650
634
  -------
651
- bool, :class:`dotnet.edb_core.edb_data.primitives.EDBPrimitives`
635
+ bool, :class:`dotnet.edb_core.edb_data.primitives.Primitive`
652
636
  Polygon when successful, ``False`` when failed.
653
637
  """
654
638
  net = self._pedb.nets.find_or_create_net(net_name)
@@ -683,12 +667,15 @@ class Modeler(object):
683
667
  elif isinstance(void, Modeler.Shape):
684
668
  voidPolygonData = self.shape_to_polygon_data(void)
685
669
  else:
686
- voidPolygonData = void
670
+ voidPolygonData = void.polygon_data._edb_object
671
+
687
672
  if voidPolygonData is False or voidPolygonData is None or voidPolygonData.IsNull():
688
673
  self._logger.error("Failed to create void polygon data")
689
674
  return False
690
675
  polygonData.AddHole(voidPolygonData)
691
- polygon = self._edb.cell.primitive.polygon.create(self._active_layout, layer_name, net, polygonData)
676
+ polygon = self._pedb._edb.Cell.Primitive.Polygon.Create(
677
+ self._active_layout, layer_name, net.net_obj, polygonData
678
+ )
692
679
  if polygon.IsNull() or polygonData is False: # pragma: no cover
693
680
  self._logger.error("Null polygon created")
694
681
  return False
@@ -716,7 +703,7 @@ class Modeler(object):
716
703
 
717
704
  Returns
718
705
  -------
719
- :class:`pyedb.dotnet.edb_core.edb_data.primitives_data.EDBPrimitives`
706
+ :class:`pyedb.dotnet.edb_core.edb_data.primitives_data.Primitive`
720
707
  """
721
708
  warnings.warn(
722
709
  "Use :func:`create_polygon` method instead. It now supports point lists as arguments.", DeprecationWarning
@@ -764,12 +751,12 @@ class Modeler(object):
764
751
 
765
752
  Returns
766
753
  -------
767
- :class:`pyedb.dotnet.edb_core.edb_data.primitives_data.EDBPrimitives`
754
+ :class:`pyedb.dotnet.edb_core.edb_data.primitives_data.Primitive`
768
755
  Rectangle when successful, ``False`` when failed.
769
756
  """
770
757
  edb_net = self._pedb.nets.find_or_create_net(net_name)
771
758
  if representation_type == "LowerLeftUpperRight":
772
- rep_type = self._edb.cell.primitive.RectangleRepresentationType.LowerLeftUpperRight
759
+ rep_type = self._edb.cell.primitive.api.RectangleRepresentationType.LowerLeftUpperRight
773
760
  rect = self._edb.cell.primitive.rectangle.create(
774
761
  self._active_layout,
775
762
  layer_name,
@@ -783,7 +770,7 @@ class Modeler(object):
783
770
  self._get_edb_value(rotation),
784
771
  )
785
772
  else:
786
- rep_type = self._edb.cell.primitive.RectangleRepresentationType.CenterWidthHeight
773
+ rep_type = self._edb.cell.primitive.api.RectangleRepresentationType.CenterWidthHeight
787
774
  rect = self._edb.cell.primitive.rectangle.create(
788
775
  self._active_layout,
789
776
  layer_name,
@@ -797,7 +784,7 @@ class Modeler(object):
797
784
  self._get_edb_value(rotation),
798
785
  )
799
786
  if rect:
800
- return cast(rect, self._pedb)
787
+ return self._pedb.layout.find_object_by_id(rect._edb_object.GetId())
801
788
  return False # pragma: no cover
802
789
 
803
790
  def create_circle(self, layer_name, x, y, radius, net_name=""):
@@ -819,7 +806,7 @@ class Modeler(object):
819
806
 
820
807
  Returns
821
808
  -------
822
- :class:`pyedb.dotnet.edb_core.edb_data.primitives_data.EDBPrimitives`
809
+ :class:`pyedb.dotnet.edb_core.edb_data.primitives_data.Primitive`
823
810
  Objects of the circle created when successful.
824
811
  """
825
812
  edb_net = self._pedb.nets.find_or_create_net(net_name)
@@ -833,7 +820,7 @@ class Modeler(object):
833
820
  self._get_edb_value(radius),
834
821
  )
835
822
  if circle:
836
- return cast(circle, self._pedb)
823
+ return self._pedb.layout.find_object_by_id(circle._edb_object.GetId())
837
824
  return False # pragma: no cover
838
825
 
839
826
  def delete_primitives(self, net_names):
@@ -940,12 +927,12 @@ class Modeler(object):
940
927
  Shape of the voids.
941
928
  """
942
929
  flag = False
943
- if isinstance(shape, EDBPrimitives):
930
+ if isinstance(shape, Primitive):
944
931
  shape = shape.primitive_object
945
932
  if not isinstance(void_shape, list):
946
933
  void_shape = [void_shape]
947
934
  for void in void_shape:
948
- if isinstance(void, EDBPrimitives):
935
+ if isinstance(void, Primitive):
949
936
  flag = shape.AddVoid(void.primitive_object)
950
937
  else:
951
938
  flag = shape.AddVoid(void)
@@ -1188,23 +1175,23 @@ class Modeler(object):
1188
1175
  for net_name in nets_name:
1189
1176
  var_server = False
1190
1177
  for p in self.paths:
1191
- if p.GetNet().GetName() == net_name:
1178
+ if p.net.name == net_name:
1192
1179
  if not layers_name:
1193
1180
  if not var_server:
1194
1181
  if not variable_value:
1195
- variable_value = p.GetWidth()
1182
+ variable_value = p.width
1196
1183
  result, var_server = self._pedb.add_design_variable(
1197
1184
  parameter_name, variable_value, is_parameter=True
1198
1185
  )
1199
- p.SetWidth(self._pedb.edb_value(parameter_name))
1200
- elif p.GetLayer().GetName() in layers_name:
1186
+ p.width = self._pedb.edb_value(parameter_name)
1187
+ elif p.layer.name in layers_name:
1201
1188
  if not var_server:
1202
1189
  if not variable_value:
1203
- variable_value = p.GetWidth()
1190
+ variable_value = p.width
1204
1191
  result, var_server = self._pedb.add_design_variable(
1205
1192
  parameter_name, variable_value, is_parameter=True
1206
1193
  )
1207
- p.SetWidth(self._pedb.edb_value(parameter_name))
1194
+ p.width = self._pedb.edb_value(parameter_name)
1208
1195
  return True
1209
1196
 
1210
1197
  def unite_polygons_on_layer(self, layer_name=None, delete_padstack_gemometries=False, net_names_list=[]):
@@ -1237,6 +1224,7 @@ class Modeler(object):
1237
1224
  delete_list = []
1238
1225
  if lay in list(self.polygons_by_layer.keys()):
1239
1226
  for poly in self.polygons_by_layer[lay]:
1227
+ poly = poly._edb_object
1240
1228
  if not poly.GetNet().GetName() in list(poly_by_nets.keys()):
1241
1229
  if poly.GetNet().GetName():
1242
1230
  poly_by_nets[poly.GetNet().GetName()] = [poly]
@@ -1255,12 +1243,7 @@ class Modeler(object):
1255
1243
  for void in v:
1256
1244
  if int(item.GetIntersectionType(void.GetPolygonData())) == 2:
1257
1245
  item.AddHole(void.GetPolygonData())
1258
- poly = self._edb.cell.primitive.polygon.create(
1259
- self._active_layout,
1260
- lay,
1261
- self._pedb.nets.nets[net],
1262
- item,
1263
- )
1246
+ self.create_polygon(item, layer_name=lay, voids=[], net_name=net)
1264
1247
  for v in all_voids:
1265
1248
  for void in v:
1266
1249
  for poly in poly_by_nets[net]: # pragma no cover
@@ -1299,8 +1282,8 @@ class Modeler(object):
1299
1282
  ``True`` when successful, ``False`` when failed.
1300
1283
  """
1301
1284
  poly_data = poly.polygon_data
1302
- new_poly = poly_data.edb_api.Defeature(tolerance)
1303
- poly.polygon_data = new_poly
1285
+ new_poly = poly_data._edb_object.Defeature(tolerance)
1286
+ poly._edb_object.SetPolygonData(new_poly)
1304
1287
  return True
1305
1288
 
1306
1289
  def get_layout_statistics(self, evaluate_area=False, net_list=None):
@@ -1350,7 +1333,7 @@ class Modeler(object):
1350
1333
  if prim.type == "Path":
1351
1334
  surface += prim.length * prim.width
1352
1335
  if prim.type == "Polygon":
1353
- surface += prim.polygon_data.edb_api.Area()
1336
+ surface += prim.polygon_data._edb_object.Area()
1354
1337
  stat_model.occupying_surface[layer] = surface
1355
1338
  stat_model.occupying_ratio[layer] = surface / outline_surface
1356
1339
  return stat_model
@@ -206,10 +206,11 @@ class EdbNets(object):
206
206
  for net in self._layout.nets[:]:
207
207
  total_plane_area = 0.0
208
208
  total_trace_area = 0.0
209
- for primitive in net.Primitives:
210
- if primitive.GetPrimitiveType() == self._edb.cell.primitive.PrimitiveType.Bondwire:
209
+ for primitive in net.primitives:
210
+ primitive = primitive._edb_object
211
+ if primitive.GetPrimitiveType() == self._edb.cell.primitive.api_class.PrimitiveType.Bondwire:
211
212
  continue
212
- if primitive.GetPrimitiveType() != self._edb.cell.primitive.PrimitiveType.Path:
213
+ if primitive.GetPrimitiveType() != self._edb.cell.primitive.api_class.PrimitiveType.Path:
213
214
  total_plane_area += float(primitive.GetPolygonData().Area())
214
215
  else:
215
216
  total_trace_area += float(primitive.GetPolygonData().Area())
@@ -1088,7 +1089,7 @@ class EdbNets(object):
1088
1089
  else:
1089
1090
  if not start_with and not contain and not end_with:
1090
1091
  net = self._edb.cell.net.find_by_name(self._active_layout, net_name)
1091
- if net.IsNull():
1092
+ if net.is_null:
1092
1093
  net = self._edb.cell.net.create(self._active_layout, net_name)
1093
1094
  return net
1094
1095
  elif start_with: