Right now CollectionIndexer and CollectionFeature are used for fancy indexing of Graphics in a GraphicCollection, such as LineCollection. However I have found that this indexing, since we're using lists and for loops a lot, becomes very slow with thousands of world objects.
# very slow, 16 seconds to change 1,000
for g in contours[ixs_visible].graphics:
if not g.visible:
g.visible = True
for g in contours[ixs_hide].graphics:
if g.visible:
g.visible = False
However if we just use a numpy array of graphics instead of a tuple then it is MUCH faster:
# very fast, 10 ms to change 1,000 on an RX 470
for g in contours.graphics[ixs_visible]:
if not g.visible:
g.visible = True
for g in contours.graphics[ixs_hide]:
if g.visible:
g.visible = False
We can set the array as read-only by setting the writeable flag: https://numpy.org/doc/stable/reference/generated/numpy.ndarray.flags.html#numpy.ndarray.flags
Could create a new class that uses numpy array of Graphics to parse feature changes etc., basically have CollectionIndexer use the numpy array of graphics.
Right now
CollectionIndexerandCollectionFeatureare used for fancy indexing of Graphics in aGraphicCollection, such asLineCollection. However I have found that this indexing, since we're using lists and for loops a lot, becomes very slow with thousands of world objects.However if we just use a numpy array of graphics instead of a tuple then it is MUCH faster:
We can set the array as read-only by setting the writeable flag: https://numpy.org/doc/stable/reference/generated/numpy.ndarray.flags.html#numpy.ndarray.flags
Could create a new class that uses numpy array of Graphics to parse feature changes etc., basically have
CollectionIndexeruse the numpy array of graphics.