Open
Description
Before submitting the issue
- I have searched among the existing issues
- I am using a Python virtual environment
Description of the bug
edb.modeler.unite_polygons_on_layer() function does not work well now.
They change net name after merging it.
I used below code that fixed the issue.
I made it by claude. It would be good if it helps you resolving the issue.
I tested on 2025 R1.
def fixed_unite_polygons_on_layer(self, layer_name=None, delete_padstack_gemometries=False, net_names_list=[]):
"""Fixed version of unite_polygons_on_layer"""
if isinstance(layer_name, str):
layer_name = [layer_name]
if not layer_name:
layer_name = list(self._pedb.stackup.signal_layers.keys())
for lay in layer_name:
self._logger.info("Uniting Objects on layer %s.", lay)
poly_by_nets = {}
delete_list = []
if lay in list(self.polygons_by_layer.keys()):
for poly in self.polygons_by_layer[lay]:
poly = poly._edb_object
net_name = poly.GetNet().GetName()
if net_name:
if net_name not in poly_by_nets:
poly_by_nets[net_name] = []
poly_by_nets[net_name].append(poly)
for current_net, polygons in poly_by_nets.items():
if current_net in net_names_list or not net_names_list:
list_polygon_data = []
all_voids = []
current_delete_list = []
for poly in polygons:
list_polygon_data.append(poly.GetPolygonData())
current_delete_list.append(poly)
all_voids.append(poly.Voids)
if list_polygon_data:
united_polygons = self._edb.geometry.polygon_data.unite(
convert_py_list_to_net_list(list_polygon_data)
)
for united_item in united_polygons:
for voids in all_voids:
for void in voids:
if int(united_item.GetIntersectionType(void.GetPolygonData())) == 2:
united_item.AddHole(void.GetPolygonData())
self.create_polygon(
united_item,
layer_name=lay,
voids=[],
net_name=current_net
)
delete_list.extend(current_delete_list)
for poly in delete_list:
poly.Delete()
if delete_padstack_gemometries:
self._logger.info("Deleting Padstack Definitions")
for pad in self._pedb.padstacks.definitions:
p1 = self._pedb.padstacks.definitions[pad].edb_padstack.GetData()
if len(p1.GetLayerNames()) > 1:
self._pedb.padstacks.remove_pads_from_padstack(pad)
return True
Steps To Reproduce
[]
Which Operating System are you using?
Windows
Which Python version are you using?
3.7
Installed packages
pyedb