docs: def Plot_Impact_3DPoly(T, Leg="", ax=None, Ang=_def.TorPAng,
                         AngUnit=_def.TorPAngUnit, Pdict=_def.TorP3DFilld,
                         dLeg=_def.TorLegd,
                         draw=True, fs=None, wintit=_wintit, Test=True):
      """ Plotting the toroidal projection of a Ves instance
  
      D. VEZINET, Aug. 2014
      Inputs :
          T           A Ves instance
          Leg         A str (the legend label to be used if T is not a Ves instance)
          ax          A plt.Axes instance (if given) on which to plot the projection space, otherwise ('None') a new figure/axes is created
          Dict        A dictionnary specifying the style of the boundary polygon plot
          dLeg        A dictionnary specifying the style of the legend box
      Outputs :
          ax          The plt.Axes instance on which the poloidal plot was performed
      """
  
      if Test:
          assert T.Id.Cls in ['Ves','Struct'] or (isinstance(T,tuple) and len(T)==3), "Arg T must be Ves instance or tuple with (Theta,pP,pN) 3 ndarrays !"
          assert isinstance(ax,Axes3D) or ax is None, "Arg ax must be a Axes instance !"
          assert type(Pdict) is dict, "Arg Pdict must be a dictionary !"
          assert type(dLeg) is dict or dLeg is None, "Arg dLeg must be a dictionary !"
          assert Ang in ['theta','xi'], "Arg Ang must be in ['theta','xi'] !"
          assert AngUnit in ['rad','deg'], "Arg AngUnit must be in ['rad','deg'] !"
      if ax is None:
          ax = _def.Plot_Impact_DefAxes('3D', fs=fs, wintit=wintit)
      handles, labels = ax.get_legend_handles_labels()
      if isinstance(T,Ves):
          Leg = T.Id.NameLTX
          Theta, pP, pN = T._Imp_EnvTheta, T._Imp_EnvMinMax[0,:], T._Imp_EnvMinMax[1,:]
      else:
          assert isinstance(T[0],np.ndarray) and isinstance(T[1],np.ndarray) and isinstance(T[2],np.ndarray), "Args Theta, pP and pN should be np.ndarrays !"
          assert T[0].shape==T[1].shape==T[2].shape, "Args Theta, pP and pN must have same shape !"
          Theta, pP, pN = T
      AngName = r"$\theta$"
      if Ang=='xi':
          Theta, pP, pN = _GG.ConvertImpact_Theta2Xi(Theta, pP, pN)
          AngName = r"$\xi$"
      yDoUp, zDoUp = ax.get_ylim(), ax.get_zlim()
      x = np.outer(Theta.flatten(),np.ones(zDoUp.shape))
      yP = np.outer(pP.flatten(),np.ones(zDoUp.shape))
      yN = np.outer(pN.flatten(),np.ones(zDoUp.shape))
      z = np.outer(np.ones(pP.flatten().shape),zDoUp)
      ax.plot_surface(x,yP,z,rstride=1,cstride=1,label=Leg,**Pdict)
      ax.plot_surface(x,yN,z,rstride=1,cstride=1,label=Leg,**Pdict)
      proxy = plt.Rectangle((0,0),1,1, fc=Pdict['color'])
      handles.append(proxy)
      labels.append(Leg)
      ax.set_xticks([0,np.pi/4.,np.pi/2.,3.*np.pi/4.,np.pi])
      ax.set_zticks([-np.pi/2.,-np.pi/4.,0.,np.pi/4.,np.pi/2.])
      if AngUnit=='rad':
          ax.set_xticklabels([r"$0$",r"$\pi/4$",r"$\pi/2$",r"$3\pi/4$",r"$\pi$"])
          ax.set_zticklabels([r"$-\pi/2$",r"$-\pi/4$",r"$0$",r"$\pi/4$",r"$\pi/2$"])
          AngUnit = r"$(rad.)$"
      elif AngUnit=='deg':
          ax.set_xticklabels([r"$0$",r"$90$",r"$180$",r"$270$",r"$360$"])
          ax.set_zticklabels([r"$-180$",r"$-90$",r"$0$",r"$90$",r"$180$"])
          AngUnit = r"$(deg.)$"
      ax.set_xlabel(AngName+r" "+AngUnit)
      ax.set_zlabel(r"$\phi$ "+AngUnit)
      if not dLeg is None:
          ax.legend(handles,labels,**dLeg)
      if draw:
          ax.figure.canvas.draw()
      return ax