pyedb 0.23.0__py3-none-any.whl → 0.24.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/dotnet/edb.py +35 -33
- pyedb/dotnet/edb_core/cell/hierarchy/hierarchy_obj.py +11 -0
- pyedb/dotnet/edb_core/cell/layout.py +30 -23
- pyedb/dotnet/edb_core/cell/layout_obj.py +0 -9
- pyedb/dotnet/edb_core/cell/primitive/__init__.py +3 -0
- pyedb/dotnet/edb_core/cell/{primitive.py → primitive/bondwire.py} +1 -146
- pyedb/dotnet/edb_core/cell/primitive/path.py +351 -0
- pyedb/dotnet/edb_core/cell/primitive/primitive.py +895 -0
- pyedb/dotnet/edb_core/cell/terminal/bundle_terminal.py +0 -4
- pyedb/dotnet/edb_core/cell/terminal/edge_terminal.py +1 -1
- pyedb/dotnet/edb_core/components.py +12 -5
- pyedb/dotnet/edb_core/dotnet/database.py +1 -23
- pyedb/dotnet/edb_core/dotnet/primitive.py +3 -139
- pyedb/dotnet/edb_core/edb_data/nets_data.py +1 -11
- pyedb/dotnet/edb_core/edb_data/padstacks_data.py +10 -24
- pyedb/dotnet/edb_core/edb_data/primitives_data.py +56 -868
- pyedb/dotnet/edb_core/geometry/polygon_data.py +43 -0
- pyedb/dotnet/edb_core/hfss.py +26 -22
- pyedb/dotnet/edb_core/layout_validation.py +3 -3
- pyedb/dotnet/edb_core/modeler.py +64 -81
- pyedb/dotnet/edb_core/nets.py +5 -4
- pyedb/dotnet/edb_core/padstack.py +12 -13
- pyedb/dotnet/edb_core/siwave.py +1 -1
- pyedb/dotnet/edb_core/stackup.py +3 -3
- pyedb/ipc2581/ecad/cad_data/layer_feature.py +1 -1
- pyedb/ipc2581/ecad/cad_data/polygon.py +2 -2
- pyedb/ipc2581/ecad/cad_data/step.py +2 -2
- pyedb/siwave.py +99 -0
- {pyedb-0.23.0.dist-info → pyedb-0.24.0.dist-info}/METADATA +2 -2
- {pyedb-0.23.0.dist-info → pyedb-0.24.0.dist-info}/RECORD +33 -30
- {pyedb-0.23.0.dist-info → pyedb-0.24.0.dist-info}/LICENSE +0 -0
- {pyedb-0.23.0.dist-info → pyedb-0.24.0.dist-info}/WHEEL +0 -0
|
@@ -43,10 +43,6 @@ class BundleTerminal(Terminal):
|
|
|
43
43
|
"""Get terminals belonging to this excitation."""
|
|
44
44
|
return [EdgeTerminal(self._pedb, i) for i in list(self._edb_object.GetTerminals())]
|
|
45
45
|
|
|
46
|
-
@property
|
|
47
|
-
def name(self):
|
|
48
|
-
return self.terminals[0].name
|
|
49
|
-
|
|
50
46
|
def decouple(self):
|
|
51
47
|
"""Ungroup a bundle of terminals."""
|
|
52
48
|
return self._edb_object.Ungroup()
|
|
@@ -47,4 +47,4 @@ class EdgeTerminal(Terminal):
|
|
|
47
47
|
temp.extend([i._edb_object for i in port])
|
|
48
48
|
edb_list = convert_py_list_to_net_list(temp, self._edb.cell.terminal.Terminal)
|
|
49
49
|
_edb_bundle_terminal = self._edb.cell.terminal.BundleTerminal.Create(edb_list)
|
|
50
|
-
return self._pedb.ports[
|
|
50
|
+
return self._pedb.ports[_edb_bundle_terminal.GetName()]
|
|
@@ -1134,7 +1134,7 @@ class Components(object):
|
|
|
1134
1134
|
self.create_port_on_pins(
|
|
1135
1135
|
component,
|
|
1136
1136
|
[EDBPadstackInstance(pin, self._pedb).name],
|
|
1137
|
-
[EDBPadstackInstance(ref_pin[0], self._pedb).id],
|
|
1137
|
+
[EDBPadstackInstance(ref_pin[0]._edb_object, self._pedb).id],
|
|
1138
1138
|
)
|
|
1139
1139
|
else:
|
|
1140
1140
|
self._logger.error("Skipping port creation no reference pin found.")
|
|
@@ -1606,6 +1606,7 @@ class Components(object):
|
|
|
1606
1606
|
>>> edbapp.components.create(pins, "A1New")
|
|
1607
1607
|
|
|
1608
1608
|
"""
|
|
1609
|
+
pins = [p._edb_object for p in pins]
|
|
1609
1610
|
if not component_name:
|
|
1610
1611
|
component_name = generate_unique_name("Comp_")
|
|
1611
1612
|
if component_part_name:
|
|
@@ -1619,7 +1620,7 @@ class Components(object):
|
|
|
1619
1620
|
)
|
|
1620
1621
|
|
|
1621
1622
|
if isinstance(pins[0], EDBPadstackInstance):
|
|
1622
|
-
pins = [i.
|
|
1623
|
+
pins = [i._edb_object for i in pins]
|
|
1623
1624
|
hosting_component_location = pins[0].GetComponent().GetTransform()
|
|
1624
1625
|
for pin in pins:
|
|
1625
1626
|
pin.SetIsLayoutPin(True)
|
|
@@ -1746,7 +1747,7 @@ class Components(object):
|
|
|
1746
1747
|
"""
|
|
1747
1748
|
if not modelname:
|
|
1748
1749
|
modelname = get_filename_without_extension(modelpath)
|
|
1749
|
-
edbComponent = self.get_component_by_name(componentname)
|
|
1750
|
+
edbComponent = self.get_component_by_name(componentname)._edb_object
|
|
1750
1751
|
if str(edbComponent.EDBHandle) == "0":
|
|
1751
1752
|
return False
|
|
1752
1753
|
edbRlcComponentProperty = edbComponent.GetComponentProperty().Clone()
|
|
@@ -1958,7 +1959,7 @@ class Components(object):
|
|
|
1958
1959
|
>>> edbapp.components.delete("A1")
|
|
1959
1960
|
|
|
1960
1961
|
"""
|
|
1961
|
-
edb_cmp = self.get_component_by_name(component_name)
|
|
1962
|
+
edb_cmp = self.get_component_by_name(component_name)._edb_object
|
|
1962
1963
|
if edb_cmp is not None:
|
|
1963
1964
|
edb_cmp.Delete()
|
|
1964
1965
|
if edb_cmp in list(self.instances.keys()):
|
|
@@ -1989,6 +1990,7 @@ class Components(object):
|
|
|
1989
1990
|
"""
|
|
1990
1991
|
edb_cmp = self.get_component_by_name(component_name)
|
|
1991
1992
|
if edb_cmp is not None:
|
|
1993
|
+
edb_cmp = edb_cmp._edb_object
|
|
1992
1994
|
rlc_property = edb_cmp.GetComponentProperty().Clone()
|
|
1993
1995
|
pin_pair_model = rlc_property.GetModel().Clone()
|
|
1994
1996
|
pprlc = pin_pair_model.GetPinPairRlc(list(pin_pair_model.PinPairs)[0])
|
|
@@ -2149,7 +2151,7 @@ class Components(object):
|
|
|
2149
2151
|
self.instances[componentname].is_enabled = False
|
|
2150
2152
|
self._logger.info("No parameters passed, component %s is disabled.", componentname)
|
|
2151
2153
|
return True
|
|
2152
|
-
edb_component = self.get_component_by_name(componentname)
|
|
2154
|
+
edb_component = self.get_component_by_name(componentname)._edb_object
|
|
2153
2155
|
edb_rlc_component_property = self._edb.cell.hierarchy._hierarchy.RLCComponentProperty()
|
|
2154
2156
|
component_pins = self.get_pin_from_component(componentname)
|
|
2155
2157
|
pin_number = len(component_pins)
|
|
@@ -2322,6 +2324,7 @@ class Components(object):
|
|
|
2322
2324
|
unmount_comp_list.remove(refdes)
|
|
2323
2325
|
comp.edbcomponent.Ungroup(True)
|
|
2324
2326
|
|
|
2327
|
+
pinlist = [self._pedb.layout.find_object_by_id(i.GetId()) for i in pinlist]
|
|
2325
2328
|
self.create(pinlist, refdes, p_layer, part_name)
|
|
2326
2329
|
self.refresh_components()
|
|
2327
2330
|
comp = self.instances[refdes]
|
|
@@ -2522,6 +2525,10 @@ class Components(object):
|
|
|
2522
2525
|
>>> edbapp.components.get_pin_position(pin)
|
|
2523
2526
|
|
|
2524
2527
|
"""
|
|
2528
|
+
try:
|
|
2529
|
+
pin = pin._edb_object
|
|
2530
|
+
except:
|
|
2531
|
+
pin = pin
|
|
2525
2532
|
res, pt_pos, rot_pos = pin.GetPositionAndRotation()
|
|
2526
2533
|
|
|
2527
2534
|
if pin.GetComponent().IsNull():
|
|
@@ -92,6 +92,7 @@ class PolygonDataDotNet: # pragma: no cover
|
|
|
92
92
|
self._pedb = pedb
|
|
93
93
|
self.dotnetobj = pedb.edb_api.geometry.api_class.PolygonData
|
|
94
94
|
self.edb_api = api_object
|
|
95
|
+
self._edb_object = api_object
|
|
95
96
|
|
|
96
97
|
@property
|
|
97
98
|
def api_class(self): # pragma: no cover
|
|
@@ -103,16 +104,6 @@ class PolygonDataDotNet: # pragma: no cover
|
|
|
103
104
|
"""List of Edb.Geometry.ArcData."""
|
|
104
105
|
return list(self.edb_api.GetArcData())
|
|
105
106
|
|
|
106
|
-
def get_points(self):
|
|
107
|
-
"""Get all points in polygon.
|
|
108
|
-
|
|
109
|
-
Returns
|
|
110
|
-
-------
|
|
111
|
-
list[list[edb_value]]
|
|
112
|
-
"""
|
|
113
|
-
|
|
114
|
-
return [[self._pedb.edb_value(i.X), self._pedb.edb_value(i.Y)] for i in list(self.edb_api.Points)]
|
|
115
|
-
|
|
116
107
|
def add_point(self, x, y, incremental=False):
|
|
117
108
|
"""Add a point at the end of the point list of the polygon.
|
|
118
109
|
|
|
@@ -217,19 +208,6 @@ class PolygonDataDotNet: # pragma: no cover
|
|
|
217
208
|
class NetDotNet:
|
|
218
209
|
"""Net Objects."""
|
|
219
210
|
|
|
220
|
-
def __getattr__(self, key):
|
|
221
|
-
try:
|
|
222
|
-
return super().__getattribute__(key)
|
|
223
|
-
except AttributeError:
|
|
224
|
-
if self.net_obj and key in dir(self.net_obj):
|
|
225
|
-
obj = self.net_obj
|
|
226
|
-
else:
|
|
227
|
-
obj = self.net
|
|
228
|
-
try:
|
|
229
|
-
return getattr(obj, key)
|
|
230
|
-
except AttributeError:
|
|
231
|
-
raise AttributeError("Attribute not present")
|
|
232
|
-
|
|
233
211
|
def __init__(self, app, net_obj=None):
|
|
234
212
|
self.net = app._edb.Cell.Net
|
|
235
213
|
|
|
@@ -21,7 +21,7 @@
|
|
|
21
21
|
# SOFTWARE.
|
|
22
22
|
|
|
23
23
|
"""Primitive."""
|
|
24
|
-
from pyedb.dotnet.edb_core.dotnet.database import NetDotNet
|
|
24
|
+
from pyedb.dotnet.edb_core.dotnet.database import NetDotNet
|
|
25
25
|
from pyedb.dotnet.edb_core.general import convert_py_list_to_net_list
|
|
26
26
|
from pyedb.modeler.geometry_operators import GeometryOperators
|
|
27
27
|
|
|
@@ -36,8 +36,6 @@ def cast(api, prim_object):
|
|
|
36
36
|
prim_type = prim_object.GetPrimitiveType()
|
|
37
37
|
if prim_type == prim_type.Rectangle:
|
|
38
38
|
return RectangleDotNet(api, prim_object)
|
|
39
|
-
elif prim_type == prim_type.Polygon:
|
|
40
|
-
return PolygonDotNet(api, prim_object)
|
|
41
39
|
elif prim_type == prim_type.Path:
|
|
42
40
|
return PathDotNet(api, prim_object)
|
|
43
41
|
elif prim_type == prim_type.Bondwire:
|
|
@@ -53,67 +51,17 @@ def cast(api, prim_object):
|
|
|
53
51
|
class PrimitiveDotNet:
|
|
54
52
|
"""Base class representing primitive objects."""
|
|
55
53
|
|
|
56
|
-
def __getattr__(self, key):
|
|
57
|
-
try:
|
|
58
|
-
return super().__getattribute__(key)
|
|
59
|
-
except AttributeError:
|
|
60
|
-
if self.prim_obj and key in dir(self.prim_obj):
|
|
61
|
-
obj = self.prim_obj
|
|
62
|
-
else:
|
|
63
|
-
obj = self.api
|
|
64
|
-
try:
|
|
65
|
-
return getattr(obj, key)
|
|
66
|
-
except AttributeError: # pragma: no cover
|
|
67
|
-
raise AttributeError("Attribute {} not present".format(key))
|
|
68
|
-
|
|
69
54
|
def __init__(self, api, prim_object=None):
|
|
70
55
|
self._app = api
|
|
71
56
|
self.api = api._edb.Cell.Primitive
|
|
72
57
|
self.edb_api = api._edb
|
|
73
58
|
self.prim_obj = prim_object
|
|
74
|
-
|
|
75
|
-
@property
|
|
76
|
-
def id(self):
|
|
77
|
-
return self.prim_obj.GetId()
|
|
59
|
+
self._edb_object = prim_object
|
|
78
60
|
|
|
79
61
|
@property
|
|
80
62
|
def api_class(self):
|
|
81
63
|
return self.api
|
|
82
64
|
|
|
83
|
-
@property
|
|
84
|
-
def aedt_name(self):
|
|
85
|
-
"""Name to be visualized in AEDT.
|
|
86
|
-
|
|
87
|
-
Returns
|
|
88
|
-
-------
|
|
89
|
-
str
|
|
90
|
-
Name.
|
|
91
|
-
"""
|
|
92
|
-
from System import String
|
|
93
|
-
|
|
94
|
-
val = String("")
|
|
95
|
-
|
|
96
|
-
_, name = self.prim_obj.GetProductProperty(self._app._edb.ProductId.Designer, 1, val)
|
|
97
|
-
name = str(name).strip("'")
|
|
98
|
-
if name == "":
|
|
99
|
-
if str(self.primitive_type) == "Path":
|
|
100
|
-
ptype = "line"
|
|
101
|
-
elif str(self.primitive_type) == "Rectangle":
|
|
102
|
-
ptype = "rect"
|
|
103
|
-
elif str(self.primitive_type) == "Polygon":
|
|
104
|
-
ptype = "poly"
|
|
105
|
-
elif str(self.primitive_type) == "Bondwire":
|
|
106
|
-
ptype = "bwr"
|
|
107
|
-
else:
|
|
108
|
-
ptype = str(self.primitive_type).lower()
|
|
109
|
-
name = "{}_{}".format(ptype, self.id)
|
|
110
|
-
self.prim_obj.SetProductProperty(self._app._edb.ProductId.Designer, 1, name)
|
|
111
|
-
return name
|
|
112
|
-
|
|
113
|
-
@aedt_name.setter
|
|
114
|
-
def aedt_name(self, value):
|
|
115
|
-
self.prim_obj.SetProductProperty(self._app._edb.ProductId.Designer, 1, value)
|
|
116
|
-
|
|
117
65
|
@property
|
|
118
66
|
def api_object(self):
|
|
119
67
|
return self.prim_obj
|
|
@@ -130,10 +78,6 @@ class PrimitiveDotNet:
|
|
|
130
78
|
def circle(self):
|
|
131
79
|
return CircleDotNet(self._app)
|
|
132
80
|
|
|
133
|
-
@property
|
|
134
|
-
def polygon(self):
|
|
135
|
-
return PolygonDotNet(self._app)
|
|
136
|
-
|
|
137
81
|
@property
|
|
138
82
|
def text(self):
|
|
139
83
|
return TextDotNet(self._app)
|
|
@@ -160,15 +104,6 @@ class PrimitiveDotNet:
|
|
|
160
104
|
except TypeError:
|
|
161
105
|
self._app.logger.error("Error setting net object")
|
|
162
106
|
|
|
163
|
-
@property
|
|
164
|
-
def polygon_data(self):
|
|
165
|
-
""":class:`pyedb.dotnet.edb_core.dotnet.database.PolygonDataDotNet`: Outer contour of the Polygon object."""
|
|
166
|
-
return PolygonDataDotNet(self._app, self.prim_obj.GetPolygonData())
|
|
167
|
-
|
|
168
|
-
@polygon_data.setter
|
|
169
|
-
def polygon_data(self, poly):
|
|
170
|
-
return self.prim_obj.SetPolygonData(poly)
|
|
171
|
-
|
|
172
107
|
@property
|
|
173
108
|
def primitive_type(self):
|
|
174
109
|
""":class:`PrimitiveType`: Primitive type of the primitive.
|
|
@@ -583,6 +518,7 @@ class CircleDotNet(PrimitiveDotNet):
|
|
|
583
518
|
|
|
584
519
|
def __init__(self, api, prim_obj=None):
|
|
585
520
|
PrimitiveDotNet.__init__(self, api, prim_obj)
|
|
521
|
+
self._edb_object = prim_obj
|
|
586
522
|
|
|
587
523
|
def create(self, layout, layer, net, center_x, center_y, radius):
|
|
588
524
|
"""Create a circle.
|
|
@@ -772,44 +708,6 @@ class TextDotNet(PrimitiveDotNet):
|
|
|
772
708
|
)
|
|
773
709
|
|
|
774
710
|
|
|
775
|
-
class PolygonDotNet(PrimitiveDotNet):
|
|
776
|
-
"""Class representing a polygon object."""
|
|
777
|
-
|
|
778
|
-
def __init__(self, api, prim_obj=None):
|
|
779
|
-
PrimitiveDotNet.__init__(self, api, prim_obj)
|
|
780
|
-
|
|
781
|
-
def create(self, layout, layer, net, polygon_data):
|
|
782
|
-
"""Create a polygon.
|
|
783
|
-
|
|
784
|
-
Parameters
|
|
785
|
-
----------
|
|
786
|
-
layout : :class:`Layout <ansys.edb.layout.Layout>`
|
|
787
|
-
Layout the polygon will be in.
|
|
788
|
-
layer : str or :class:`Layer <ansys.edb.layer.Layer>`
|
|
789
|
-
Layer this Polygon will be in.
|
|
790
|
-
net : str or :class:`Net <ansys.edb.net.Net>` or None
|
|
791
|
-
Net of the Polygon object.
|
|
792
|
-
polygon_data : :class:`PolygonData <ansys.edb.geometry.PolygonData>`
|
|
793
|
-
The outer contour of the Polygon.
|
|
794
|
-
|
|
795
|
-
Returns
|
|
796
|
-
-------
|
|
797
|
-
:class:`pyedb.dotnet.edb_core.dotnet.primitive.PolygonDotNet`
|
|
798
|
-
Polygon object created.
|
|
799
|
-
"""
|
|
800
|
-
if isinstance(net, NetDotNet):
|
|
801
|
-
net = net.api_object
|
|
802
|
-
return PolygonDotNet(self._app, self.api.Polygon.Create(layout, layer, net, polygon_data))
|
|
803
|
-
|
|
804
|
-
@property
|
|
805
|
-
def can_be_zone_primitive(self):
|
|
806
|
-
""":obj:`bool`: If a polygon can be a zone.
|
|
807
|
-
|
|
808
|
-
Read-Only.
|
|
809
|
-
"""
|
|
810
|
-
return True
|
|
811
|
-
|
|
812
|
-
|
|
813
711
|
class PathDotNet(PrimitiveDotNet):
|
|
814
712
|
"""Class representing a path object."""
|
|
815
713
|
|
|
@@ -866,40 +764,6 @@ class PathDotNet(PrimitiveDotNet):
|
|
|
866
764
|
polygon_data = self._edb.geometry.polygon_data.dotnetobj(convert_py_list_to_net_list(points), False)
|
|
867
765
|
self.prim_obj.SetCenterLine(polygon_data)
|
|
868
766
|
|
|
869
|
-
@property
|
|
870
|
-
def end_cap_style(self):
|
|
871
|
-
"""Get path end cap styles.
|
|
872
|
-
|
|
873
|
-
Returns
|
|
874
|
-
-------
|
|
875
|
-
tuple[
|
|
876
|
-
:class:`PathEndCapType`,
|
|
877
|
-
:class:`PathEndCapType`
|
|
878
|
-
]
|
|
879
|
-
|
|
880
|
-
Returns a tuple of the following format:
|
|
881
|
-
|
|
882
|
-
**(end_cap1, end_cap2)**
|
|
883
|
-
|
|
884
|
-
**end_cap1** : End cap style of path start end cap.
|
|
885
|
-
|
|
886
|
-
**end_cap2** : End cap style of path end end cap.
|
|
887
|
-
"""
|
|
888
|
-
return self._edb_object.GetEndCapStyle()
|
|
889
|
-
|
|
890
|
-
@end_cap_style.setter
|
|
891
|
-
def end_cap_style(self, end_cap1, end_cap2):
|
|
892
|
-
"""Set path end cap styles.
|
|
893
|
-
|
|
894
|
-
Parameters
|
|
895
|
-
----------
|
|
896
|
-
end_cap1: :class:`PathEndCapType`
|
|
897
|
-
End cap style of path start end cap.
|
|
898
|
-
end_cap2: :class:`PathEndCapType`
|
|
899
|
-
End cap style of path end end cap.
|
|
900
|
-
"""
|
|
901
|
-
self._edb_object.SetEndCapStyle(end_cap1, end_cap2)
|
|
902
|
-
|
|
903
767
|
@property
|
|
904
768
|
def get_clip_info(self):
|
|
905
769
|
"""Get data used to clip the path.
|
|
@@ -27,7 +27,6 @@ from pyedb.dotnet.edb_core.dotnet.database import (
|
|
|
27
27
|
NetDotNet,
|
|
28
28
|
)
|
|
29
29
|
from pyedb.dotnet.edb_core.edb_data.padstacks_data import EDBPadstackInstance
|
|
30
|
-
from pyedb.dotnet.edb_core.edb_data.primitives_data import cast
|
|
31
30
|
|
|
32
31
|
|
|
33
32
|
class EDBNetsData(NetDotNet):
|
|
@@ -43,15 +42,6 @@ class EDBNetsData(NetDotNet):
|
|
|
43
42
|
>>> edb_net.name # EDB Object Property
|
|
44
43
|
"""
|
|
45
44
|
|
|
46
|
-
def __getattr__(self, key):
|
|
47
|
-
try:
|
|
48
|
-
return self[key]
|
|
49
|
-
except:
|
|
50
|
-
try:
|
|
51
|
-
return getattr(self.net_object, key)
|
|
52
|
-
except AttributeError:
|
|
53
|
-
raise AttributeError("Attribute not present")
|
|
54
|
-
|
|
55
45
|
def __init__(self, raw_net, core_app):
|
|
56
46
|
self._app = core_app
|
|
57
47
|
self._core_components = core_app.components
|
|
@@ -68,7 +58,7 @@ class EDBNetsData(NetDotNet):
|
|
|
68
58
|
-------
|
|
69
59
|
list of :class:`pyedb.dotnet.edb_core.edb_data.primitives_data.EDBPrimitives`
|
|
70
60
|
"""
|
|
71
|
-
return [
|
|
61
|
+
return [self._app.layout.find_object_by_id(i.GetId()) for i in self.net_object.Primitives]
|
|
72
62
|
|
|
73
63
|
@property
|
|
74
64
|
def padstack_instances(self):
|
|
@@ -26,7 +26,7 @@ import re
|
|
|
26
26
|
import warnings
|
|
27
27
|
|
|
28
28
|
from pyedb.dotnet.clr_module import String
|
|
29
|
-
from pyedb.dotnet.edb_core.cell.primitive import Primitive
|
|
29
|
+
from pyedb.dotnet.edb_core.cell.primitive.primitive import Primitive
|
|
30
30
|
from pyedb.dotnet.edb_core.dotnet.database import PolygonDataDotNet
|
|
31
31
|
from pyedb.dotnet.edb_core.edb_data.edbvalue import EdbValue
|
|
32
32
|
from pyedb.dotnet.edb_core.general import PadGeometryTpe, convert_py_list_to_net_list
|
|
@@ -821,11 +821,10 @@ class EDBPadstack(object):
|
|
|
821
821
|
pos = via.position
|
|
822
822
|
started = False
|
|
823
823
|
if len(self.pad_by_layer[self.via_start_layer].parameters) == 0:
|
|
824
|
-
self.
|
|
825
|
-
|
|
826
|
-
self.via_start_layer,
|
|
827
|
-
via._edb_padstackinstance.GetNet(),
|
|
828
|
-
self.pad_by_layer[self.via_start_layer].polygon_data.edb_api,
|
|
824
|
+
self._ppadstack._pedb.modeler.create_polygon(
|
|
825
|
+
self.pad_by_layer[self.via_start_layer].polygon_data._edb_object,
|
|
826
|
+
layer_name=self.via_start_layer,
|
|
827
|
+
net_name=via._edb_padstackinstance.GetNet().GetName(),
|
|
829
828
|
)
|
|
830
829
|
else:
|
|
831
830
|
self._edb.cell.primitive.circle.create(
|
|
@@ -837,11 +836,10 @@ class EDBPadstack(object):
|
|
|
837
836
|
self._get_edb_value(self.pad_by_layer[self.via_start_layer].parameters_values[0] / 2),
|
|
838
837
|
)
|
|
839
838
|
if len(self.pad_by_layer[self.via_stop_layer].parameters) == 0:
|
|
840
|
-
self.
|
|
841
|
-
|
|
842
|
-
self.via_stop_layer,
|
|
843
|
-
via._edb_padstackinstance.GetNet(),
|
|
844
|
-
self.pad_by_layer[self.via_stop_layer].polygon_data.edb_api,
|
|
839
|
+
self._ppadstack._pedb.modeler.create_polygon(
|
|
840
|
+
self.pad_by_layer[self.via_stop_layer].polygon_data._edb_object,
|
|
841
|
+
layer_name=self.via_stop_layer,
|
|
842
|
+
net_name=via._edb_padstackinstance.GetNet().GetName(),
|
|
845
843
|
)
|
|
846
844
|
else:
|
|
847
845
|
self._edb.cell.primitive.circle.create(
|
|
@@ -1027,7 +1025,7 @@ class EDBPadstack(object):
|
|
|
1027
1025
|
None,
|
|
1028
1026
|
None,
|
|
1029
1027
|
)
|
|
1030
|
-
padstack_instance.SetIsLayoutPin(via.is_pin)
|
|
1028
|
+
padstack_instance._edb_object.SetIsLayoutPin(via.is_pin)
|
|
1031
1029
|
i += 1
|
|
1032
1030
|
via.delete()
|
|
1033
1031
|
self._ppadstack._pedb.logger.info("Created {} new microvias.".format(i))
|
|
@@ -2058,18 +2056,6 @@ class EDBPadstackInstance(Primitive):
|
|
|
2058
2056
|
created_polygon = self._pedb.modeler.create_polygon(path, layer_name)
|
|
2059
2057
|
return created_polygon
|
|
2060
2058
|
|
|
2061
|
-
def get_connected_object_id_set(self):
|
|
2062
|
-
"""Produce a list of all geometries physically connected to a given layout object.
|
|
2063
|
-
|
|
2064
|
-
Returns
|
|
2065
|
-
-------
|
|
2066
|
-
list
|
|
2067
|
-
Found connected objects IDs with Layout object.
|
|
2068
|
-
"""
|
|
2069
|
-
layoutInst = self._edb_padstackinstance.GetLayout().GetLayoutInstance()
|
|
2070
|
-
layoutObjInst = self.object_instance
|
|
2071
|
-
return [loi.GetLayoutObj().GetId() for loi in layoutInst.GetConnectedObjects(layoutObjInst).Items]
|
|
2072
|
-
|
|
2073
2059
|
def get_reference_pins(self, reference_net="GND", search_radius=5e-3, max_limit=0, component_only=True):
|
|
2074
2060
|
"""Search for reference pins using given criteria.
|
|
2075
2061
|
|