docs: def plot(self, color='default', ret=False, ax=None):
          """
          Generates a basic 3D visualization.
    
          :param color: Polygons color.
          :type color: matplotlib color, 'default' or 't' (transparent)
          :param ret: If True, returns the figure. It can be used to add 
              more elements to the plot or to modify it.
          :type ret: bool
          :param ax: If a matplotlib axes given, this method will 
              represent the plot on top of this axes. This is used to
              represent multiple plots from multiple geometries, 
              overlapping them recursively.
          :type ax: mplot3d.Axes3D, None
          :returns: None, axes
          :rtype: mplot3d.Axes3D, bool
          """
          import matplotlib.pylab as plt
          import mpl_toolkits.mplot3d as mplot3d
          
          # Bypass a plot
          if color == False:
              if ax is None: ax = mplot3d.Axes3D(fig=plt.figure())
              return ax
          
          # Clone and extract the information from the object
          obj = self.__class__(**self.get_seed())
          plotable3d = obj.get_plotable3d()
              
          # Domain
          domain = obj.get_domain()
          bound = np.max(domain[1]-domain[0])
          centroid = obj.get_centroid()
          pos = np.vstack((centroid-bound/2, centroid+bound/2))
          
          # Cascade plot?
          if ax is None: # Non cascade
              ax = mplot3d.Axes3D(fig=plt.figure())
          else:
              old_pos = np.array([ax.get_xbound(),
                                  ax.get_ybound(),
                                  ax.get_zbound()]).T
              pos = np.dstack((pos, old_pos))
              pos = np.array([np.min(pos[0, :, :], axis=1),
                              np.max(pos[1, :, :], axis=1)])
              
          # Plot
          if color == 'default': color = 't'
          if color == 't': color = (0,0,0,0)
              
          for polygon in plotable3d:
              polygon.set_facecolor(color)
              polygon.set_edgecolor('k')
              ax.add_collection3d(polygon)
          
          # Axis limits
          ax.set_xlim3d(left=pos[0,0], right=pos[1,0])
          ax.set_ylim3d(bottom=pos[0,1], top=pos[1,1])
          ax.set_zlim3d(bottom=pos[0,2], top=pos[1,2])
          
          if ret: return ax