| 651 | return self._path2d |
| 652 | |
| 653 | def do_3d_projection(self): |
| 654 | s = self._segment3d |
| 655 | xs0, ys0, zs0 = zip(*s) |
| 656 | mask = _scale_invalid_mask(xs0, ys0, zs0, self.axes) |
| 657 | if self._axlim_clip: |
| 658 | mask |= _viewlim_mask(xs0, ys0, zs0, self.axes) |
| 659 | if np.any(mask): |
| 660 | xs, ys, zs = np.ma.array(zip(*s), |
| 661 | dtype=float, mask=mask).filled(np.nan) |
| 662 | else: |
| 663 | xs, ys, zs = xs0, ys0, zs0 |
| 664 | vxs, vys, vzs, vis = proj3d._scale_proj_transform_clip(xs, ys, zs, self.axes) |
| 665 | self._path2d = mpath.Path(np.ma.column_stack([vxs, vys])) |
| 666 | return min(vzs) |
| 667 | |
| 668 | |
| 669 | class PathPatch3D(Patch3D): |