Speed up arrayToQPath when connect='pairs'
As discussed earlier, the process of QDataStream >> QPainterPath is quite slow, so this commit makes an improvement on QPainterPath creation for the case of connect='pairs' by using a naive method of moving the path and drawing a line on the path. This was the fastest method identified during testing.
This commit is contained in:
parent
aaae0b9e1c
commit
d62d3b182f
@ -14,8 +14,11 @@ import struct
|
|||||||
import sys
|
import sys
|
||||||
import warnings
|
import warnings
|
||||||
import math
|
import math
|
||||||
|
import functools
|
||||||
|
import itertools
|
||||||
|
|
||||||
import numpy as np
|
import numpy as np
|
||||||
|
from numpy.lib import recfunctions as rfn
|
||||||
from .util.cupy_helper import getCupy
|
from .util.cupy_helper import getCupy
|
||||||
from .util.numba_helper import getNumbaFunctions
|
from .util.numba_helper import getNumbaFunctions
|
||||||
|
|
||||||
@ -1759,8 +1762,18 @@ def arrayToQPath(x, y, connect='all', finiteCheck=True):
|
|||||||
path.addPolygon(polygon)
|
path.addPolygon(polygon)
|
||||||
return path
|
return path
|
||||||
elif eq(connect, 'pairs'):
|
elif eq(connect, 'pairs'):
|
||||||
arr[:]['c'][::2] = 0
|
xs = arr['x'].tolist()
|
||||||
arr[:]['c'][1::2] = 1 # connect every 2nd point to every 1st one
|
ys = arr['y'].tolist()
|
||||||
|
|
||||||
|
lineTo = path.lineTo
|
||||||
|
moveTo = path.moveTo
|
||||||
|
for elementType, x, y in zip(
|
||||||
|
itertools.cycle((moveTo, lineTo)),
|
||||||
|
xs,
|
||||||
|
ys
|
||||||
|
):
|
||||||
|
elementType(x, y)
|
||||||
|
return path
|
||||||
elif eq(connect, 'finite'):
|
elif eq(connect, 'finite'):
|
||||||
# Let's call a point with either x or y being nan is an invalid point.
|
# Let's call a point with either x or y being nan is an invalid point.
|
||||||
# A point will anyway not connect to an invalid point regardless of the
|
# A point will anyway not connect to an invalid point regardless of the
|
||||||
|
Loading…
Reference in New Issue
Block a user