@@ -127,8 +127,8 @@ def set_3d_properties(self, zs=0, zdir='z'):
127
127
128
128
def draw (self , renderer ):
129
129
xs3d , ys3d , zs3d = self ._verts3d
130
- xs , ys , zs = proj3d .proj_transform (xs3d , ys3d , zs3d , renderer .M )
131
- self .set_data (xs , ys )
130
+ xyz = proj3d .proj_transform (xs3d , ys3d , zs3d , renderer .M )
131
+ self .set_data (xyz [ 0 ], xyz [ 1 ] )
132
132
lines .Line2D .draw (self , renderer )
133
133
self .stale = False
134
134
@@ -271,11 +271,11 @@ def get_facecolor(self):
271
271
def do_3d_projection (self , renderer ):
272
272
s = self ._segment3d
273
273
xs , ys , zs = list (zip (* s ))
274
- vxs , vys , vzs , vis = proj3d .proj_transform_clip (xs , ys , zs , renderer .M )
275
- self ._path2d = mpath .Path (list ( zip ( vxs , vys )) )
274
+ vxyzis = proj3d .proj_transform_clip (xs , ys , zs , renderer .M )
275
+ self ._path2d = mpath .Path (vxyzis [ 0 : 2 ]. T )
276
276
# FIXME: coloring
277
277
self ._facecolor2d = self ._facecolor3d
278
- return min (vzs )
278
+ return min (vxyzis [ 2 ] )
279
279
280
280
def draw (self , renderer ):
281
281
Patch .draw (self , renderer )
@@ -299,11 +299,11 @@ def set_3d_properties(self, path, zs=0, zdir='z'):
299
299
def do_3d_projection (self , renderer ):
300
300
s = self ._segment3d
301
301
xs , ys , zs = list (zip (* s ))
302
- vxs , vys , vzs , vis = proj3d .proj_transform_clip (xs , ys , zs , renderer .M )
303
- self ._path2d = mpath .Path (list ( zip ( vxs , vys )) , self ._code3d )
302
+ vxyzis = proj3d .proj_transform_clip (xs , ys , zs , renderer .M )
303
+ self ._path2d = mpath .Path (vxyzis [ 0 : 2 ]. T , self ._code3d )
304
304
# FIXME: coloring
305
305
self ._facecolor2d = self ._facecolor3d
306
- return min (vzs )
306
+ return min (vxyzis [ 2 ] )
307
307
308
308
def get_patch_verts (patch ):
309
309
"""Return a list of vertices for the path of a patch."""
@@ -379,21 +379,21 @@ def set_3d_properties(self, zs, zdir):
379
379
380
380
def do_3d_projection (self , renderer ):
381
381
xs , ys , zs = self ._offsets3d
382
- vxs , vys , vzs , vis = proj3d .proj_transform_clip (xs , ys , zs , renderer .M )
382
+ vxyzis = proj3d .proj_transform_clip (xs , ys , zs , renderer .M )
383
383
384
- fcs = (zalpha (self ._facecolor3d , vzs ) if self ._depthshade else
384
+ fcs = (zalpha (self ._facecolor3d , vxyzis [ 2 ] ) if self ._depthshade else
385
385
self ._facecolor3d )
386
386
fcs = mcolors .colorConverter .to_rgba_array (fcs , self ._alpha )
387
387
self .set_facecolors (fcs )
388
388
389
- ecs = (zalpha (self ._edgecolor3d , vzs ) if self ._depthshade else
389
+ ecs = (zalpha (self ._edgecolor3d , vxyzis [ 2 ] ) if self ._depthshade else
390
390
self ._edgecolor3d )
391
391
ecs = mcolors .colorConverter .to_rgba_array (ecs , self ._alpha )
392
392
self .set_edgecolors (ecs )
393
- PatchCollection .set_offsets (self , list ( zip ( vxs , vys )) )
393
+ PatchCollection .set_offsets (self , vxyzis [ 0 : 2 ]. T )
394
394
395
- if vzs . size > 0 :
396
- return min (vzs )
395
+ if len ( vxyzis ) > 0 :
396
+ return min (vxyzis [ 2 ] )
397
397
else :
398
398
return np .nan
399
399
@@ -447,22 +447,22 @@ def set_3d_properties(self, zs, zdir):
447
447
448
448
def do_3d_projection (self , renderer ):
449
449
xs , ys , zs = self ._offsets3d
450
- vxs , vys , vzs , vis = proj3d .proj_transform_clip (xs , ys , zs , renderer .M )
450
+ vxyzis = proj3d .proj_transform_clip (xs , ys , zs , renderer .M )
451
451
452
- fcs = (zalpha (self ._facecolor3d , vzs ) if self ._depthshade else
452
+ fcs = (zalpha (self ._facecolor3d , vxyzis [ 2 ] ) if self ._depthshade else
453
453
self ._facecolor3d )
454
454
fcs = mcolors .colorConverter .to_rgba_array (fcs , self ._alpha )
455
455
self .set_facecolors (fcs )
456
456
457
- ecs = (zalpha (self ._edgecolor3d , vzs ) if self ._depthshade else
457
+ ecs = (zalpha (self ._edgecolor3d , vxyzis [ 2 ] ) if self ._depthshade else
458
458
self ._edgecolor3d )
459
459
ecs = mcolors .colorConverter .to_rgba_array (ecs , self ._alpha )
460
460
self .set_edgecolors (ecs )
461
- PathCollection .set_offsets (self , list ( zip ( vxs , vys )) )
461
+ PathCollection .set_offsets (self , vxyzis [ 0 : 2 ]. T )
462
462
463
- if vzs . size > 0 :
464
- return min (vzs )
465
- else :
463
+ if len ( vxyzis ) > 0 :
464
+ return min (vxyzis [ 2 ] )
465
+ else :
466
466
return np .nan
467
467
468
468
@@ -545,7 +545,10 @@ def set_zsort(self, zsort):
545
545
546
546
def get_vector (self , segments3d ):
547
547
"""Optimize points for projection"""
548
+ # Segments 3d are given in shape (n_segments, 3, 3)
549
+ # Flatten them
548
550
xys = segments3d .reshape ((- 1 , 3 )).T
551
+ # Add a fourth dimension with only ones
549
552
ones = np .ones (xys .shape [1 ])
550
553
self ._vec = np .vstack ([xys , ones ])
551
554
@@ -589,8 +592,7 @@ def do_3d_projection(self, renderer):
589
592
self .update_scalarmappable ()
590
593
self ._facecolors3d = self ._facecolors
591
594
592
- # XXX proj_transform_vec can work with arrays only
593
- xys = np .array (proj3d .proj_transform_vec (self ._vec , renderer .M ))
595
+ xys = proj3d .proj_transform_vec (self ._vec , renderer .M )
594
596
xyzlist = np .transpose (xys .T .reshape ((- 1 , 3 , 3 )), axes = [0 , 2 , 1 ])
595
597
596
598
# This extra fuss is to re-order face / edge colors
0 commit comments