class CalibratedSettings extends ProjectiveDevice.CalibratedSettings implements Settings {
        public CalibratedSettings() { }
        public CalibratedSettings(ProjectiveDevice.CalibratedSettings settings) {
            super(settings);
            if (settings instanceof CalibratedSettings) {
                si = new SettingsImplementation(((CalibratedSettings)settings).si);
            }
        }
        SettingsImplementation si = new SettingsImplementation() {
            @Override public void firePropertyChange(String propertyName, Object oldValue, Object newValue) {
                CalibratedSettings.this.firePropertyChange(propertyName, oldValue, newValue);
            }
        };

        @Override public String getName() { return si.getName(); }
        @Override public void setName(String name) { si.setName(name); }
        @Override public double getResponseGamma() { return si.getResponseGamma(); }
        @Override public void setResponseGamma(double responseGamma) { si.setResponseGamma(responseGamma); }
//        @Override public double getNominalDistance() { return si.getNominalDistance(); }
//        @Override public void setNominalDistance(double nominalDistance) { si.setNominalDistance(nominalDistance); }

        public int getScreenNumber() { return si.getScreenNumber(); }
        public void setScreenNumber(int screenNumber) { si.setScreenNumber(screenNumber); }
        public long getLatency() { return si.getLatency(); }
        public void setLatency(long latency) { si.setLatency(latency); }
        public String getDescription() { return si.getDescription(); }

        public int getImageWidth() { return si.getImageWidth(); }
        public void setImageWidth(int imageWidth) { si.setImageWidth(imageWidth); }
        public int getImageHeight() { return si.getImageHeight(); }
        public void setImageHeight(int imageHeight) { si.setImageHeight(imageHeight); }
        public int getBitDepth() { return si.getBitDepth(); }
        public void setBitDepth(int bitDepth) { si.setBitDepth(bitDepth); }
        public int getRefreshRate() { return si.getRefreshRate(); }
        public void setRefreshRate(int refreshRate) { si.setRefreshRate(refreshRate); }

        public boolean isUseOpenGL() { return si.isUseOpenGL(); }
        public void setUseOpenGL(boolean useOpenGL) { si.setUseOpenGL(useOpenGL); }
    }

    private Settings settings;
    @Override public ProjectiveDevice.Settings getSettings() {
        return (ProjectiveDevice.Settings)settings;
    }
    public void setSettings(Settings settings) {
        setSettings((ProjectiveDevice.Settings)settings);
    }
    @Override public void setSettings(ProjectiveDevice.Settings settings) {<FILL_FUNCTION_BODY>

        super.setSettings(settings);
        if (settings instanceof ProjectiveDevice.CalibrationSettings) {
            this.settings = new CalibrationSettings((ProjectiveDevice.CalibrationSettings)settings);
        } else if (settings instanceof ProjectiveDevice.CalibratedSettings) {
            this.settings = new CalibratedSettings((ProjectiveDevice.CalibratedSettings)settings);
        } else {
            this.settings = new SettingsImplementation((ProjectiveDevice.Settings)settings);
        }
        if (this.settings.getName() == null || this.settings.getName().length() == 0) {
            this.settings.setName("Projector " + String.format("%2d", this.settings.getScreenNumber()));
        }
    
<methods>public void <init>(java.lang.String) ,public void <init>(java.lang.String, java.io.File) throws org.bytedeco.javacv.ProjectiveDevice.Exception,public void <init>(java.lang.String, java.lang.String) throws org.bytedeco.javacv.ProjectiveDevice.Exception,public void <init>(java.lang.String, FileStorage) throws org.bytedeco.javacv.ProjectiveDevice.Exception,public void <init>(org.bytedeco.javacv.ProjectiveDevice.Settings) throws org.bytedeco.javacv.ProjectiveDevice.Exception,public static double[] distort(double[], double[]) ,public transient double[] distort(double[]) ,public void distort(IplImage, IplImage) ,public IplImage distort(IplImage) ,public CvMat getBackProjectionMatrix(CvMat, double, CvMat) ,public IplImage getDistortMap1() ,public IplImage getDistortMap2() ,public CvMat getFrontoParallelH(double[], CvMat, CvMat) ,public int getMapsPyramidLevel() ,public int[] getRGBColorOrder() ,public CvMat getRectifyingHomography(org.bytedeco.javacv.ProjectiveDevice, CvMat) ,public org.bytedeco.javacv.ProjectiveDevice.Settings getSettings() ,public IplImage getUndistortMap1() ,public IplImage getUndistortMap2() ,public boolean isFixedPointMaps() ,public static double[] normalize(double[], CvMat) ,public static org.bytedeco.javacv.ProjectiveDevice[] read(java.lang.String) throws org.bytedeco.javacv.ProjectiveDevice.Exception,public void readParameters(java.io.File) throws org.bytedeco.javacv.ProjectiveDevice.Exception,public void readParameters(java.lang.String) throws org.bytedeco.javacv.ProjectiveDevice.Exception,public void readParameters(FileStorage) throws org.bytedeco.javacv.ProjectiveDevice.Exception,public void rescale(int, int) ,public void setFixedPointMaps(boolean) ,public void setMapsPyramidLevel(int) ,public void setSettings(org.bytedeco.javacv.ProjectiveDevice.Settings) ,public java.lang.String toString() ,public static double[] undistort(double[], double[]) ,public transient double[] undistort(double[]) ,public void undistort(IplImage, IplImage) ,public IplImage undistort(IplImage) ,public static double[] unnormalize(double[], CvMat) ,public static transient void write(java.lang.String, org.bytedeco.javacv.ProjectiveDevice[][]) ,public static transient void write(java.lang.String, org.bytedeco.javacv.ProjectiveDevice[]) ,public void writeParameters(java.io.File) ,public void writeParameters(java.lang.String) ,public void writeParameters(FileStorage) <variables>private static ThreadLocal<CvMat> B4x3,public CvMat E,public CvMat F,private static ThreadLocal<CvMat> P13x4,private static ThreadLocal<CvMat> P23x4,public CvMat R,private static ThreadLocal<CvMat> R13x3,private static ThreadLocal<CvMat> R23x3,public CvMat T,private static ThreadLocal<CvMat> a4x1,public CvMat additiveLight,public double avgColorErr,public double avgEpipolarErr,public double avgReprojErr,public CvMat cameraMatrix,public CvMat colorMixingMatrix,public java.lang.String colorOrder,public double colorR2,private IplImage[] distortMaps1,private IplImage[] distortMaps2,public CvMat distortionCoeffs,public CvMat extrParams,private boolean fixedPointMaps,public int imageHeight,public int imageWidth,private int mapsPyramidLevel,public double maxEpipolarErr,public double maxReprojErr,private static ThreadLocal<CvMat> relativeR3x3,private static ThreadLocal<CvMat> relativeT3x1,public CvMat reprojErrs,private org.bytedeco.javacv.ProjectiveDevice.Settings settings,private static ThreadLocal<CvMat> t3x1,private static ThreadLocal<CvMat> temp3x3,private IplImage tempImage,private IplImage[] undistortMaps1,private IplImage[] undistortMaps2