def METHOD_NAME(self, selection):
    Path.Log.track(selection)
    added = False
    shapes = self.obj.BaseShapes
    for sel in selection:
        job = PathUtils.findParentJob(self.obj)
        base = job.Proxy.resourceClone(job, sel.Object)
        if not base:
            Path.Log.notice(
                (
                    translate("Path", "%s is not a Base Model object of the job %s")
                    + "\n"
                )
                % (sel.Object.Label, job.Label)
            )
            continue
        if base in shapes:
            Path.Log.notice(
                "Base shape %s already in the list".format(sel.Object.Label)
            )
            continue
        if base.isDerivedFrom("Part::Part2DObject"):
            if sel.HasSubObjects:
                # selectively add some elements of the drawing to the Base
                for sub in sel.SubElementNames:
                    if "Vertex" in sub:
                        Path.Log.info("Ignoring vertex")
                    else:
                        self.obj.Proxy.addBase(self.obj, base, sub)
            else:
                # when adding an entire shape to BaseShapes we can take its sub shapes out of Base
                self.obj.Base = [(p, el) for p, el in self.obj.Base if p != base]
                shapes.append(base)
                self.obj.BaseShapes = shapes
            added = True
    if not added:
        # user wants us to engrave an edge of face of a base model
        Path.Log.info("  call default")
        base = self.super().METHOD_NAME(selection)
        added = added or base
    return added