@Override
 public PhotoOverlay clone() {
   PhotoOverlay copy;
   copy = ((PhotoOverlay) super.clone());
   copy.viewVolume = ((viewVolume == null) ? null : ((ViewVolume) viewVolume.clone()));
   copy.imagePyramid = ((imagePyramid == null) ? null : ((ImagePyramid) imagePyramid.clone()));
   copy.point = ((point == null) ? null : ((Point) point.clone()));
   copy.photoOverlaySimpleExtension =
       new ArrayList<Object>((getPhotoOverlaySimpleExtension().size()));
   for (Object iter : photoOverlaySimpleExtension) {
     copy.photoOverlaySimpleExtension.add(iter);
   }
   copy.photoOverlayObjectExtension =
       new ArrayList<AbstractObject>((getPhotoOverlayObjectExtension().size()));
   for (AbstractObject iter : photoOverlayObjectExtension) {
     copy.photoOverlayObjectExtension.add(iter.clone());
   }
   return copy;
 }
 @Override
 public int hashCode() {
   final int prime = 31;
   int result = super.hashCode();
   long temp;
   temp = Double.doubleToLongBits(rotation);
   result = ((prime * result) + ((int) (temp ^ (temp >>> (32)))));
   result = ((prime * result) + ((viewVolume == null) ? 0 : viewVolume.hashCode()));
   result = ((prime * result) + ((imagePyramid == null) ? 0 : imagePyramid.hashCode()));
   result = ((prime * result) + ((point == null) ? 0 : point.hashCode()));
   result = ((prime * result) + ((shape == null) ? 0 : shape.hashCode()));
   result =
       ((prime * result)
           + ((photoOverlaySimpleExtension == null) ? 0 : photoOverlaySimpleExtension.hashCode()));
   result =
       ((prime * result)
           + ((photoOverlayObjectExtension == null) ? 0 : photoOverlayObjectExtension.hashCode()));
   return result;
 }
 @Override
 public boolean equals(Object obj) {
   if (this == obj) {
     return true;
   }
   if (obj == null) {
     return false;
   }
   if (super.equals(obj) == false) {
     return false;
   }
   if ((obj instanceof PhotoOverlay) == false) {
     return false;
   }
   PhotoOverlay other = ((PhotoOverlay) obj);
   if (rotation != other.rotation) {
     return false;
   }
   if (viewVolume == null) {
     if (other.viewVolume != null) {
       return false;
     }
   } else {
     if (viewVolume.equals(other.viewVolume) == false) {
       return false;
     }
   }
   if (imagePyramid == null) {
     if (other.imagePyramid != null) {
       return false;
     }
   } else {
     if (imagePyramid.equals(other.imagePyramid) == false) {
       return false;
     }
   }
   if (point == null) {
     if (other.point != null) {
       return false;
     }
   } else {
     if (point.equals(other.point) == false) {
       return false;
     }
   }
   if (shape == null) {
     if (other.shape != null) {
       return false;
     }
   } else {
     if (shape.equals(other.shape) == false) {
       return false;
     }
   }
   if (photoOverlaySimpleExtension == null) {
     if (other.photoOverlaySimpleExtension != null) {
       return false;
     }
   } else {
     if (photoOverlaySimpleExtension.equals(other.photoOverlaySimpleExtension) == false) {
       return false;
     }
   }
   if (photoOverlayObjectExtension == null) {
     if (other.photoOverlayObjectExtension != null) {
       return false;
     }
   } else {
     if (photoOverlayObjectExtension.equals(other.photoOverlayObjectExtension) == false) {
       return false;
     }
   }
   return true;
 }