code: def to_3D(self, transform=None):
          
          # if there is a stored 'to_3D' transform in metadata use it
          if transform is None and 'to_3D' in self.metadata:
              transform = self.metadata['to_3D']
  
          # copy vertices and stack with zeros from (n, 2) to (n, 3)
          vertices = np.column_stack((copy.deepcopy(self.vertices),
                                      np.zeros(len(self.vertices))))
          if transform is not None:
              vertices = transformations.transform_points(vertices,
                                                          transform)
          # make sure everything is deep copied
          path_3D = Path3D(entities=copy.deepcopy(self.entities),
                           vertices=vertices,
                           metadata=copy.deepcopy(self.metadata))
          return path_3D
docs: Convert 2D path to 3D path on the XY plane.
  
          Parameters
          -------------
          transform : (4, 4) float
              If passed, will transform vertices.
              If not passed and 'to_3D' is in metadata
              that transform will be used.
  
          Returns
          -----------
          path_3D: Path3D version of current path