Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 47e644c

Browse files
committed
Don't read 3D properties off the renderer for drawing.
All `Artist`s have a `.axes` attribute from which they can grab any of these things directly.
1 parent ce6ac2d commit 47e644c

File tree

2 files changed

+22
-19
lines changed

2 files changed

+22
-19
lines changed

lib/mpl_toolkits/mplot3d/art3d.py

Lines changed: 14 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -104,7 +104,7 @@ def set_3d_properties(self, z=0, zdir='z'):
104104
@artist.allow_rasterization
105105
def draw(self, renderer):
106106
proj = proj3d.proj_trans_points(
107-
[self._position3d, self._position3d + self._dir_vec], renderer.M)
107+
[self._position3d, self._position3d + self._dir_vec], self.axes.M)
108108
dx = proj[0][1] - proj[0][0]
109109
dy = proj[1][1] - proj[1][0]
110110
angle = math.degrees(math.atan2(dy, dx))
@@ -181,7 +181,7 @@ def get_data_3d(self):
181181
@artist.allow_rasterization
182182
def draw(self, renderer):
183183
xs3d, ys3d, zs3d = self._verts3d
184-
xs, ys, zs = proj3d.proj_transform(xs3d, ys3d, zs3d, renderer.M)
184+
xs, ys, zs = proj3d.proj_transform(xs3d, ys3d, zs3d, self.axes.M)
185185
self.set_data(xs, ys)
186186
super().draw(renderer)
187187
self.stale = False
@@ -269,9 +269,8 @@ def do_3d_projection(self, renderer):
269269
"""
270270
Project the points according to renderer matrix.
271271
"""
272-
xyslist = [
273-
proj3d.proj_trans_points(points, renderer.M) for points in
274-
self._segments3d]
272+
xyslist = [proj3d.proj_trans_points(points, self.axes.M)
273+
for points in self._segments3d]
275274
segments_2d = [np.column_stack([xs, ys]) for xs, ys, zs in xyslist]
276275
LineCollection.set_segments(self, segments_2d)
277276

@@ -319,7 +318,8 @@ def get_facecolor(self):
319318
def do_3d_projection(self, renderer):
320319
s = self._segment3d
321320
xs, ys, zs = zip(*s)
322-
vxs, vys, vzs, vis = proj3d.proj_transform_clip(xs, ys, zs, renderer.M)
321+
vxs, vys, vzs, vis = proj3d.proj_transform_clip(xs, ys, zs,
322+
self.axes.M)
323323
self._path2d = mpath.Path(np.column_stack([vxs, vys]))
324324
# FIXME: coloring
325325
self._facecolor2d = self._facecolor3d
@@ -343,7 +343,8 @@ def set_3d_properties(self, path, zs=0, zdir='z'):
343343
def do_3d_projection(self, renderer):
344344
s = self._segment3d
345345
xs, ys, zs = zip(*s)
346-
vxs, vys, vzs, vis = proj3d.proj_transform_clip(xs, ys, zs, renderer.M)
346+
vxs, vys, vzs, vis = proj3d.proj_transform_clip(xs, ys, zs,
347+
self.axes.M)
347348
self._path2d = mpath.Path(np.column_stack([vxs, vys]), self._code3d)
348349
# FIXME: coloring
349350
self._facecolor2d = self._facecolor3d
@@ -425,7 +426,8 @@ def set_3d_properties(self, zs, zdir):
425426

426427
def do_3d_projection(self, renderer):
427428
xs, ys, zs = self._offsets3d
428-
vxs, vys, vzs, vis = proj3d.proj_transform_clip(xs, ys, zs, renderer.M)
429+
vxs, vys, vzs, vis = proj3d.proj_transform_clip(xs, ys, zs,
430+
self.axes.M)
429431

430432
fcs = (_zalpha(self._facecolor3d, vzs) if self._depthshade else
431433
self._facecolor3d)
@@ -492,7 +494,8 @@ def set_3d_properties(self, zs, zdir):
492494

493495
def do_3d_projection(self, renderer):
494496
xs, ys, zs = self._offsets3d
495-
vxs, vys, vzs, vis = proj3d.proj_transform_clip(xs, ys, zs, renderer.M)
497+
vxs, vys, vzs, vis = proj3d.proj_transform_clip(xs, ys, zs,
498+
self.axes.M)
496499

497500
fcs = (_zalpha(self._facecolor3d, vzs) if self._depthshade else
498501
self._facecolor3d)
@@ -673,7 +676,7 @@ def do_3d_projection(self, renderer):
673676
self.update_scalarmappable()
674677
self._facecolors3d = self._facecolors
675678

676-
txs, tys, tzs = proj3d._proj_transform_vec(self._vec, renderer.M)
679+
txs, tys, tzs = proj3d._proj_transform_vec(self._vec, self.axes.M)
677680
xyzlist = [(txs[sl], tys[sl], tzs[sl]) for sl in self._segslices]
678681

679682
# This extra fuss is to re-order face / edge colors
@@ -709,7 +712,7 @@ def do_3d_projection(self, renderer):
709712
# Return zorder value
710713
if self._sort_zpos is not None:
711714
zvec = np.array([[0], [0], [self._sort_zpos], [1]])
712-
ztrans = proj3d._proj_transform_vec(zvec, renderer.M)
715+
ztrans = proj3d._proj_transform_vec(zvec, self.axes.M)
713716
return ztrans[2][0]
714717
elif tzs.size > 0:
715718
# FIXME: Some results still don't look quite right.

lib/mpl_toolkits/mplot3d/axis3d.py

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -189,7 +189,7 @@ def _get_coord_info(self, renderer):
189189
maxs = maxs + deltas / 4.
190190

191191
vals = mins[0], maxs[0], mins[1], maxs[1], mins[2], maxs[2]
192-
tc = self.axes.tunit_cube(vals, renderer.M)
192+
tc = self.axes.tunit_cube(vals, self.axes.M)
193193
avgz = [tc[p1][2] + tc[p2][2] + tc[p3][2] + tc[p4][2]
194194
for p1, p2, p3, p4 in self._PLANES]
195195
highs = np.array([avgz[2*i] < avgz[2*i+1] for i in range(3)])
@@ -237,8 +237,8 @@ def draw(self, renderer):
237237
edgep2 = edgep1.copy()
238238
edgep2[juggled[1]] = maxmin[juggled[1]]
239239
pep = np.asarray(
240-
proj3d.proj_trans_points([edgep1, edgep2], renderer.M))
241-
centpt = proj3d.proj_transform(*centers, renderer.M)
240+
proj3d.proj_trans_points([edgep1, edgep2], self.axes.M))
241+
centpt = proj3d.proj_transform(*centers, self.axes.M)
242242
self.line.set_data(pep[0], pep[1])
243243
self.line.draw(renderer)
244244

@@ -270,7 +270,7 @@ def draw(self, renderer):
270270
axmask = [True, True, True]
271271
axmask[index] = False
272272
lxyz = move_from_center(lxyz, centers, labeldeltas, axmask)
273-
tlx, tly, tlz = proj3d.proj_transform(*lxyz, renderer.M)
273+
tlx, tly, tlz = proj3d.proj_transform(*lxyz, self.axes.M)
274274
self.label.set_position((tlx, tly))
275275
if self.get_rotate_label(self.label.get_text()):
276276
angle = art3d._norm_text_angle(np.rad2deg(np.arctan2(dy, dx)))
@@ -291,7 +291,7 @@ def draw(self, renderer):
291291
outerindex = 1
292292

293293
pos = move_from_center(outeredgep, centers, labeldeltas, axmask)
294-
olx, oly, olz = proj3d.proj_transform(*pos, renderer.M)
294+
olx, oly, olz = proj3d.proj_transform(*pos, self.axes.M)
295295
self.offsetText.set_text(self.major.formatter.get_offset())
296296
self.offsetText.set_position((olx, oly))
297297
angle = art3d._norm_text_angle(np.rad2deg(np.arctan2(dy, dx)))
@@ -374,11 +374,11 @@ def draw(self, renderer):
374374
pos[tickdir] = (
375375
edgep1[tickdir]
376376
+ info['tick']['outward_factor'] * ticksign * tickdelta)
377-
x1, y1, z1 = proj3d.proj_transform(*pos, renderer.M)
377+
x1, y1, z1 = proj3d.proj_transform(*pos, self.axes.M)
378378
pos[tickdir] = (
379379
edgep1[tickdir]
380380
- info['tick']['inward_factor'] * ticksign * tickdelta)
381-
x2, y2, z2 = proj3d.proj_transform(*pos, renderer.M)
381+
x2, y2, z2 = proj3d.proj_transform(*pos, self.axes.M)
382382

383383
# Get position of label
384384
default_offset = 8. # A rough estimate
@@ -389,7 +389,7 @@ def draw(self, renderer):
389389
axmask[index] = False
390390
pos[tickdir] = edgep1[tickdir]
391391
pos = move_from_center(pos, centers, labeldeltas, axmask)
392-
lx, ly, lz = proj3d.proj_transform(*pos, renderer.M)
392+
lx, ly, lz = proj3d.proj_transform(*pos, self.axes.M)
393393

394394
tick_update_position(tick, (x1, x2), (y1, y2), (lx, ly))
395395
tick.tick1line.set_linewidth(

0 commit comments

Comments
 (0)