Skip to content

Bug located in ... #1297

Open
Open
@Knam-Ansys

Description

@Knam-Ansys

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

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions