from mapteksdk.data import Topology, spatial_filters
from mapteksdk.operations import object_pick
from mapteksdk.project import Project

def main(project: Project):
    extent_source = object_pick(
        object_types=(Topology), label="Pick object to provide the extent"
    )
    object_oid = object_pick(object_types=(Topology,), label="Pick object to filter")

    with project.edit(object_oid) as data_object:
        spatial_filter = spatial_filters.inside_object_extent(
            extent_source
        )
        matched_primitives = spatial_filter.filter(data_object)

        if hasattr(data_object, "point_colours"):
            data_object.point_colours[matched_primitives] = [220, 220, 0, 255]
        elif hasattr(data_object, "block_colours"):
            data_object.block_colours[matched_primitives] = [220, 220, 0, 255]
        else:
            # This should be unreachable, as the call to `filter()` should
            # have failed in this case.
            raise RuntimeError("Unable to filter object!")

if __name__ == "__main__":
    with Project() as main_project:
        with main_project.undo():
            main(main_project)