diff --git a/pyaedt/edb_core/EDB_Data.py b/pyaedt/edb_core/EDB_Data.py index 83698bf0154..11cd4216a64 100644 --- a/pyaedt/edb_core/EDB_Data.py +++ b/pyaedt/edb_core/EDB_Data.py @@ -412,6 +412,11 @@ def layer_name(self, val): else: raise AttributeError("Value inserted not found. Input has to be layer name or layer object.") + @aedt_exception_handler + def delete(self): + """Delete this primtive.""" + self.primitive_object.Delete() + class EDBLayer(object): """Manages EDB functionalities for a layer. @@ -1949,6 +1954,31 @@ def delete_padstack_instance(self): """Delete this padstack instance.""" self._edb_padstackinstance.Delete() + @aedt_exception_handler + def in_voids(self, net_name=None, layer_name=None): + """Check if this padstack instance is in any void. + + Parameters + ---------- + net_name : str + Net name of the voids to be checked. + layer_name : str + Layer name of the voids to be checked. + Returns + ------- + list + List of the voids includes this padstack instance. + """ + x_pos = self._pedb.edb_value(self.position[0]) + y_pos = self._pedb.edb_value(self.position[1]) + point_data = self._pedb.core_primitives._edb.Geometry.PointData(x_pos, y_pos) + + voids = [] + for prim in self._pedb.core_primitives.get_primitives(net_name, layer_name, is_void=True): + if prim.primitive_object.GetPolygonData().PointInPolygon(point_data): + voids.append(prim) + return voids + class EDBPinInstances(object): """Manages EDB functionalities in instances. diff --git a/pyaedt/edb_core/layout.py b/pyaedt/edb_core/layout.py index 4d760f53b34..86dbd0e1ded 100644 --- a/pyaedt/edb_core/layout.py +++ b/pyaedt/edb_core/layout.py @@ -536,6 +536,43 @@ def create_polygon(self, main_shape, layer_name, voids=[], net_name=""): self._primitives_by_layer[layer_name] = [polygon] return polygon + @aedt_exception_handler + def get_primitives(self, net_name=None, layer_name=None, prim_type=None, is_void=False): + """Get primitives by conditions. + + Parameters + ---------- + net_name : str, optional + Set filter on net_name. Default is `None"`. + layer_name : str, optional + Set filter on layer_name. Default is `None"`. + prim_type : str, optional + Set filter on primitive type. Default is `None"`. + is_void : bool + Set filter on is_void. Default is 'False' + Returns + ------- + list + List of filtered primitives + """ + prims = [] + for el in self.primitives: + if not el.type: + continue + if net_name: + if not el.net_name == net_name: + continue + if layer_name: + if not el.layer_name == layer_name: + continue + if prim_type: + if not el.type == prim_type: + continue + if not el.is_void == is_void: + continue + prims.append(el) + return prims + @aedt_exception_handler def fix_circle_void_for_clipping(self): """Fix issues when circle void are clipped due to a bug in EDB.