/* JWildfire - an image and animation processor written in Java Copyright (C) 1995-2017 Andreas Maschke This is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This software is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this software; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jwildfire.create.tina.swing; import java.awt.Color; import java.io.File; import java.lang.reflect.Field; import java.util.ArrayList; import java.util.List; import javax.swing.JColorChooser; import javax.swing.JComboBox; import javax.swing.JFileChooser; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.JSlider; import javax.swing.JTabbedPane; import javax.swing.event.ChangeEvent; import org.jwildfire.base.Prefs; import org.jwildfire.base.Tools; import org.jwildfire.create.tina.animate.AnimationService; import org.jwildfire.create.tina.base.BGColorType; import org.jwildfire.create.tina.base.Flame; import org.jwildfire.create.tina.base.PostSymmetryType; import org.jwildfire.create.tina.base.Stereo3dColor; import org.jwildfire.create.tina.base.Stereo3dMode; import org.jwildfire.create.tina.base.Stereo3dPreview; import org.jwildfire.create.tina.base.motion.MotionCurve; import org.jwildfire.create.tina.base.solidrender.DistantLight; import org.jwildfire.create.tina.base.solidrender.LightDiffFunc; import org.jwildfire.create.tina.base.solidrender.MaterialSettings; import org.jwildfire.create.tina.base.solidrender.ReflectionMapping; import org.jwildfire.create.tina.base.solidrender.ShadowType; import org.jwildfire.create.tina.base.solidrender.SolidRenderSettings; import org.jwildfire.create.tina.palette.RGBColor; import org.jwildfire.create.tina.randomgradient.AllRandomGradientGenerator; import org.jwildfire.create.tina.render.GammaCorrectionFilter; import org.jwildfire.create.tina.render.dof.DOFBlurShapeType; import org.jwildfire.create.tina.render.filter.FilterKernelType; import org.jwildfire.create.tina.render.filter.FilteringType; import org.jwildfire.create.tina.variation.RessourceManager; import org.jwildfire.image.SimpleImage; import org.jwildfire.image.WFImage; import org.jwildfire.swing.ImageFileChooser; import com.l2fprod.common.beans.editor.FilePropertyEditor; import com.l2fprod.common.util.ResourceManager; public class FlameControlsDelegate extends AbstractControlsDelegate { private final List<DOFParamControl> dofParamControls; private static class DOFParamControl { private final JWFNumberField editField; private final JSlider slider; private final JLabel label; public DOFParamControl(JWFNumberField pEditField, JSlider pSlider, JLabel pLabel) { editField = pEditField; slider = pSlider; label = pLabel; } public void setVisible(boolean pVisible) { editField.setVisible(pVisible); slider.setVisible(pVisible); label.setVisible(pVisible); } public void setLabel(String pLabel) { label.setText(pLabel); } } public FlameControlsDelegate(TinaController pOwner, TinaControllerData pData, JPanel pRootPanel) { super(pOwner, pData, pRootPanel, true); dofParamControls = initDofParamControls(pData); } private List<DOFParamControl> initDofParamControls(TinaControllerData pData) { List<DOFParamControl> res = new ArrayList<DOFParamControl>(); res.add(new DOFParamControl(pData.dofDOFParam1REd, pData.dofDOFParam1Slider, pData.dofDOFParam1Lbl)); res.add(new DOFParamControl(pData.dofDOFParam2REd, pData.dofDOFParam2Slider, pData.dofDOFParam2Lbl)); res.add(new DOFParamControl(pData.dofDOFParam3REd, pData.dofDOFParam3Slider, pData.dofDOFParam3Lbl)); res.add(new DOFParamControl(pData.dofDOFParam4REd, pData.dofDOFParam4Slider, pData.dofDOFParam4Lbl)); res.add(new DOFParamControl(pData.dofDOFParam5REd, pData.dofDOFParam5Slider, pData.dofDOFParam5Lbl)); res.add(new DOFParamControl(pData.dofDOFParam6REd, pData.dofDOFParam6Slider, pData.dofDOFParam6Lbl)); return res; } @Override public String getEditingTitle(JWFNumberField sender) { return "flame property \"" + sender.getLinkedLabelControl().getText() + "\""; } @Override public MotionCurve getCurveToEdit(String pPropName) { if ("altitude".equals(pPropName)) { return getSolidRenderingSelectedLight().getAltitudeCurve(); } else if ("azimuth".equals(pPropName)) { return getSolidRenderingSelectedLight().getAzimuthCurve(); } return AnimationService.getPropertyCurve(owner.getCurrFlame(), pPropName); } @Override public double getInitialValue(String pPropName) { return AnimationService.getPropertyValue(owner.getCurrFlame(), pPropName); } @Override public boolean isEnabled() { return owner.getCurrFlame() != null; } public List<JWFNumberField> getMotionControls() { List<JWFNumberField> res = new ArrayList<JWFNumberField>(); res.add(data.cameraRollREd); res.add(data.cameraPitchREd); res.add(data.cameraYawREd); res.add(data.cameraPerspectiveREd); res.add(data.cameraCentreXREd); res.add(data.cameraCentreYREd); res.add(data.cameraZoomREd); res.add(data.pixelsPerUnitREd); res.add(data.camPosXREd); res.add(data.camPosYREd); res.add(data.camPosZREd); res.add(data.brightnessREd); res.add(data.contrastREd); res.add(data.whiteLevelREd); res.add(data.vibrancyREd); res.add(data.saturationREd); res.add(data.gammaREd); res.add(data.gammaThresholdREd); res.add(data.cameraDOFREd); res.add(data.cameraDOFAreaREd); res.add(data.cameraDOFExponentREd); res.add(data.camZREd); res.add(data.dimishZREd); res.add(data.focusXREd); res.add(data.focusYREd); res.add(data.focusZREd); res.add(data.dofDOFScaleREd); res.add(data.dofDOFAngleREd); res.add(data.dofDOFFadeREd); res.add(data.dofDOFParam1REd); res.add(data.dofDOFParam2REd); res.add(data.dofDOFParam3REd); res.add(data.dofDOFParam4REd); res.add(data.dofDOFParam5REd); res.add(data.dofDOFParam6REd); res.add(data.tinaSolidRenderingLightAltitudeREd); res.add(data.tinaSolidRenderingLightAzimuthREd); return res; } public void enableControls() { enableControl(data.cameraRollREd, false); enableControl(data.cameraPitchREd, false); enableControl(data.cameraYawREd, false); enableControl(data.cameraPerspectiveREd, false); enableControl(data.cameraCentreXREd, false); enableControl(data.cameraCentreYREd, false); enableControl(data.cameraZoomREd, false); enableControl(data.pixelsPerUnitREd, false); enableControl(data.camPosXREd, false); enableControl(data.camPosYREd, false); enableControl(data.camPosZREd, false); enableControl(data.bgTransparencyCBx, false); enableControl(data.backgroundColorTypeCmb, false); enableControl(data.foregroundOpacityField, false); enableControl(data.motionBlurLengthField, false); enableControl(data.motionBlurTimeStepField, false); enableControl(data.motionBlurDecayField, false); enableControl(data.flameFPSField, false); enableControl(data.brightnessREd, false); enableControl(data.contrastREd, false); enableControl(data.whiteLevelREd, false); enableControl(data.vibrancyREd, false); enableControl(data.saturationREd, false); enableControl(data.gammaREd, false); enableControl(data.gammaThresholdREd, false); enableControl(data.lowDensityBrightnessREd, false); enableControl(data.balanceRedREd, false); enableControl(data.balanceGreenREd, false); enableControl(data.balanceBlueREd, false); enableControl(data.dofDOFShapeCmb, false); setupDOFParamsControls((DOFBlurShapeType) data.dofDOFShapeCmb.getSelectedItem()); enableControl(data.dofDOFScaleREd, false); enableControl(data.dofDOFAngleREd, false); enableControl(data.dofDOFFadeREd, false); enableControl(data.dofDOFParam1REd, false); enableControl(data.dofDOFParam2REd, false); enableControl(data.dofDOFParam3REd, false); enableControl(data.dofDOFParam4REd, false); enableControl(data.dofDOFParam5REd, false); enableControl(data.dofDOFParam6REd, false); enableStereo3dUI(); enableFilterUI(); enablePostSymmetryUI(); enableDOFUI(); enableSolidRenderUI(); } private void enableSolidRenderUI() { boolean disabled = getCurrFlame() == null || !getCurrFlame().getSolidRenderSettings().isSolidRenderingEnabled(); boolean hasLights = getCurrFlame() != null && getCurrFlame().getSolidRenderSettings().getLights().size() > 0; boolean hasMaterials = getCurrFlame() != null && getCurrFlame().getSolidRenderSettings().getMaterials().size() > 0; boolean aoEnabled = !disabled && getCurrFlame().getSolidRenderSettings().isAoEnabled(); boolean shadowEnabled = !disabled && ShadowType.areShadowsEnabled(getCurrFlame().getSolidRenderSettings().getShadowType()); enableControl(data.tinaSolidRenderingAOIntensityREd, disabled || !aoEnabled); enableControl(data.tinaSolidRenderingAOSearchRadiusREd, disabled || !aoEnabled); enableControl(data.tinaSolidRenderingAOBlurRadiusREd, disabled || !aoEnabled); enableControl(data.tinaSolidRenderingAOFalloffREd, disabled || !aoEnabled); enableControl(data.tinaSolidRenderingAORadiusSamplesREd, disabled || !aoEnabled); enableControl(data.tinaSolidRenderingAOAzimuthSamplesREd, disabled || !aoEnabled); enableControl(data.tinaSolidRenderingAOAffectDiffuseREd, disabled || !aoEnabled); enableControl(data.tinaSolidRenderingShadowTypeCmb, disabled); enableControl(data.tinaSolidRenderingShadowmapSizeCmb, disabled || !shadowEnabled); enableControl(data.tinaSolidRenderingShadowSmoothRadiusREd, disabled || !shadowEnabled || !ShadowType.SMOOTH.equals(getCurrFlame().getSolidRenderSettings().getShadowType())); enableControl(data.tinaSolidRenderingShadowmapBiasREd, disabled || !shadowEnabled); enableControl(data.tinaSolidRenderingEnableAOCBx, disabled); enableControl(data.resetSolidRenderingAmbientShadowOptionsBtn, disabled); enableControl(data.resetSolidRenderingHardShadowOptionsBtn, disabled); enableControl(data.resetSolidRenderingMaterialsBtn, disabled); enableControl(data.resetSolidRenderingLightsBtn, disabled); enableControl(data.tinaSolidRenderingSelectedLightCmb, disabled || !hasLights); enableControl(data.tinaSolidRenderingAddLightBtn, disabled); enableControl(data.tinaSolidRenderingDeleteLightBtn, disabled || !hasLights); enableControl(data.tinaSolidRenderingLightAltitudeREd, disabled || !hasLights); enableControl(data.tinaSolidRenderingLightAzimuthREd, disabled || !hasLights); enableControl(data.tinaSolidRenderingLightColorBtn, disabled || !hasLights); enableControl(data.tinaSolidRenderingLightCastShadowsCBx, disabled || !hasLights); enableControl(data.tinaSolidRenderingLightIntensityREd, disabled || !hasLights); enableControl(data.tinaSolidRenderingShadowIntensityREd, disabled || !hasLights); enableControl(data.tinaSolidRenderingSelectedMaterialCmb, disabled || !hasMaterials); enableControl(data.tinaSolidRenderingAddMaterialBtn, disabled); enableControl(data.tinaSolidRenderingDeleteMaterialBtn, disabled || !hasMaterials); enableControl(data.tinaSolidRenderingMaterialDiffuseREd, disabled || !hasMaterials); enableControl(data.tinaSolidRenderingMaterialAmbientREd, disabled || !hasMaterials); enableControl(data.tinaSolidRenderingMaterialSpecularREd, disabled || !hasMaterials); enableControl(data.tinaSolidRenderingMaterialSpecularSharpnessREd, disabled || !hasMaterials); enableControl(data.tinaSolidRenderingMaterialSpecularColorBtn, disabled || !hasMaterials); enableControl(data.tinaSolidRenderingMaterialDiffuseResponseCmb, disabled || !hasMaterials); enableControl(data.tinaSolidRenderingMaterialReflectionMapIntensityREd, disabled || !hasMaterials); enableControl(data.tinaSolidRenderingMaterialReflMapBtn, disabled || !hasMaterials); enableControl(data.tinaSolidRenderingMaterialReflectionMappingCmb, disabled || !hasMaterials); enableControl(data.tinaSolidRenderingMaterialSelectReflMapBtn, disabled || !hasMaterials); enableControl(data.tinaSolidRenderingMaterialRemoveReflMapBtn, disabled || !hasMaterials); enableBokehPanels(); enableControl(data.resetPostBokehSettingsBtn, disabled); enableControl(data.postBokehIntensityREd, disabled); enableControl(data.postBokehBrightnessREd, disabled); enableControl(data.postBokehSizeREd, disabled); enableControl(data.postBokehActivationREd, disabled); enableControl(data.postBokehFilterKernelCmb, disabled); } private void enableStereo3dUI() { Stereo3dMode stereo3dMode = (Stereo3dMode) data.stereo3dModeCmb.getSelectedItem(); enableControl(data.stereo3dModeCmb, false); enableControl(data.stereo3dAngleREd, Stereo3dMode.NONE.equals(stereo3dMode)); enableControl(data.stereo3dEyeDistREd, Stereo3dMode.NONE.equals(stereo3dMode)); enableControl(data.stereo3dFocalOffsetREd, Stereo3dMode.NONE.equals(stereo3dMode)); enableControl(data.stereo3dLeftEyeColorCmb, !Stereo3dMode.ANAGLYPH.equals(stereo3dMode)); enableControl(data.stereo3dRightEyeColorCmb, !Stereo3dMode.ANAGLYPH.equals(stereo3dMode)); enableControl(data.stereo3dInterpolatedImageCountREd, !Stereo3dMode.INTERPOLATED_IMAGES.equals(stereo3dMode)); enableControl(data.stereo3dPreviewCmb, Stereo3dMode.NONE.equals(stereo3dMode)); enableControl(data.stereo3dSwapSidesCBx, Stereo3dMode.NONE.equals(stereo3dMode)); } private Flame getCurrFlame() { return owner.getCurrFlame(); } private boolean isNoRefresh() { return owner.isNoRefresh(); } private void setNoRefresh(boolean pNoRefresh) { owner.setNoRefresh(pNoRefresh); } private void flameSliderChanged(JSlider pSlider, JWFNumberField pTextField, String pProperty, double pSliderScale, boolean pAllowUseCache) { if (isNoRefresh() || getCurrFlame() == null) return; setNoRefresh(true); try { double propValue = pSlider.getValue() / pSliderScale; pTextField.setText(Tools.doubleToString(propValue)); Class<?> cls = getCurrFlame().getClass(); Field field; try { field = cls.getDeclaredField(pProperty); field.setAccessible(true); Class<?> fieldCls = field.getType(); if (fieldCls == double.class || fieldCls == Double.class) { field.setDouble(getCurrFlame(), propValue); } else if (fieldCls == int.class || fieldCls == Integer.class) { field.setInt(getCurrFlame(), Tools.FTOI(propValue)); } else { throw new IllegalStateException(); } } catch (Throwable ex) { ex.printStackTrace(); } owner.refreshFlameImage(true, false, 1, true, pAllowUseCache); } finally { setNoRefresh(false); } } public void cameraYawSlider_stateChanged(ChangeEvent e) { flameSliderChanged(data.cameraYawSlider, data.cameraYawREd, "camYaw", 1.0, false); } public void cameraPerspectiveSlider_stateChanged(ChangeEvent e) { flameSliderChanged(data.cameraPerspectiveSlider, data.cameraPerspectiveREd, "camPerspective", TinaController.SLIDER_SCALE_PERSPECTIVE, false); } public void cameraPitchSlider_stateChanged(ChangeEvent e) { flameSliderChanged(data.cameraPitchSlider, data.cameraPitchREd, "camPitch", 1.0, false); } public void xFormAntialiasAmountSlider_changed() { flameSliderChanged(data.xFormAntialiasAmountSlider, data.xFormAntialiasAmountREd, "antialiasAmount", TinaController.SLIDER_SCALE_COLOR, false); } public void xFormAntialiasRadiusSlider_changed() { flameSliderChanged(data.xFormAntialiasRadiusSlider, data.xFormAntialiasRadiusREd, "antialiasRadius", TinaController.SLIDER_SCALE_COLOR, false); } public void xFormAntialiasAmountREd_changed() { flameTextFieldChanged(data.xFormAntialiasAmountSlider, data.xFormAntialiasAmountREd, "antialiasAmount", TinaController.SLIDER_SCALE_COLOR, false); } public void xFormAntialiasRadiusREd_changed() { flameTextFieldChanged(data.xFormAntialiasRadiusSlider, data.xFormAntialiasRadiusREd, "antialiasRadius", TinaController.SLIDER_SCALE_COLOR, false); } public void focusZSlider_stateChanged(ChangeEvent e) { flameSliderChanged(data.focusZSlider, data.focusZREd, "focusZ", TinaController.SLIDER_SCALE_ZPOS, false); } public void focusXSlider_stateChanged(ChangeEvent e) { flameSliderChanged(data.focusXSlider, data.focusXREd, "focusX", TinaController.SLIDER_SCALE_ZPOS, false); } public void focusYSlider_stateChanged(ChangeEvent e) { flameSliderChanged(data.focusYSlider, data.focusYREd, "focusY", TinaController.SLIDER_SCALE_ZPOS, false); } public void diminishZSlider_stateChanged(ChangeEvent e) { flameSliderChanged(data.dimishZSlider, data.dimishZREd, "dimishZ", TinaController.SLIDER_SCALE_ZPOS, false); } public void camZSlider_stateChanged(ChangeEvent e) { flameSliderChanged(data.camZSlider, data.camZREd, "camZ", TinaController.SLIDER_SCALE_ZPOS, false); } public void cameraDOFSlider_stateChanged(ChangeEvent e) { flameSliderChanged(data.cameraDOFSlider, data.cameraDOFREd, "camDOF", TinaController.SLIDER_SCALE_DOF, false); } public void cameraDOFAreaSlider_stateChanged(ChangeEvent e) { flameSliderChanged(data.cameraDOFAreaSlider, data.cameraDOFAreaREd, "camDOFArea", TinaController.SLIDER_SCALE_DOF_AREA, false); } public void cameraDOFExponentSlider_stateChanged(ChangeEvent e) { flameSliderChanged(data.cameraDOFExponentSlider, data.cameraDOFExponentREd, "camDOFExponent", TinaController.SLIDER_SCALE_DOF_EXPONENT, false); } public void cameraRollSlider_stateChanged(ChangeEvent e) { flameSliderChanged(data.cameraRollSlider, data.cameraRollREd, "camRoll", 1.0, false); } public void cameraCentreYSlider_stateChanged(ChangeEvent e) { flameSliderChanged(data.cameraCentreYSlider, data.cameraCentreYREd, "centreY", TinaController.SLIDER_SCALE_CENTRE, false); } public void cameraCentreXSlider_stateChanged(ChangeEvent e) { flameSliderChanged(data.cameraCentreXSlider, data.cameraCentreXREd, "centreX", TinaController.SLIDER_SCALE_CENTRE, false); } public void cameraZoomSlider_stateChanged(ChangeEvent e) { flameSliderChanged(data.cameraZoomSlider, data.cameraZoomREd, "camZoom", TinaController.SLIDER_SCALE_ZOOM, false); } public void brightnessSlider_stateChanged(ChangeEvent e) { flameSliderChanged(data.brightnessSlider, data.brightnessREd, "brightness", TinaController.SLIDER_SCALE_BRIGHTNESS_CONTRAST_VIBRANCY, true); } public void vibrancySlider_stateChanged(ChangeEvent e) { flameSliderChanged(data.vibrancySlider, data.vibrancyREd, "vibrancy", TinaController.SLIDER_SCALE_BRIGHTNESS_CONTRAST_VIBRANCY, true); } public void lowDensityBrightnessSlider_stateChanged(ChangeEvent e) { flameSliderChanged(data.lowDensityBrightnessSlider, data.lowDensityBrightnessREd, "lowDensityBrightness", TinaController.SLIDER_SCALE_BRIGHTNESS_CONTRAST_VIBRANCY, true); } public void balanceRedSlider_stateChanged(ChangeEvent e) { flameSliderChanged(data.balanceRedSlider, data.balanceRedREd, "balanceRed", TinaController.SLIDER_SCALE_BRIGHTNESS_CONTRAST_VIBRANCY, true); } public void balanceGreenSlider_stateChanged(ChangeEvent e) { flameSliderChanged(data.balanceGreenSlider, data.balanceGreenREd, "balanceGreen", TinaController.SLIDER_SCALE_BRIGHTNESS_CONTRAST_VIBRANCY, true); } public void balanceBlueSlider_stateChanged(ChangeEvent e) { flameSliderChanged(data.balanceBlueSlider, data.balanceBlueREd, "balanceBlue", TinaController.SLIDER_SCALE_BRIGHTNESS_CONTRAST_VIBRANCY, true); } public void saturationSlider_stateChanged(ChangeEvent e) { flameSliderChanged(data.saturationSlider, data.saturationREd, "saturation", TinaController.SLIDER_SCALE_BRIGHTNESS_CONTRAST_VIBRANCY, true); } public void filterRadiusSlider_stateChanged(ChangeEvent e) { flameSliderChanged(data.filterRadiusSlider, data.filterRadiusREd, "spatialFilterRadius", TinaController.SLIDER_SCALE_FILTER_RADIUS, false); owner.refreshFilterKernelPreviewImg(); } public void filterSharpnessSlider_stateChanged(ChangeEvent e) { flameSliderChanged(data.tinaFilterSharpnessSlider, data.tinaFilterSharpnessREd, "spatialFilterSharpness", TinaController.SLIDER_SCALE_FILTER_RADIUS, false); } public void filterLowDensitySlider_stateChanged(ChangeEvent e) { flameSliderChanged(data.tinaFilterLowDensitySlider, data.tinaFilterLowDensityREd, "spatialFilterLowDensity", TinaController.SLIDER_SCALE_FILTER_RADIUS, false); } public void gammaThresholdSlider_stateChanged(ChangeEvent e) { flameSliderChanged(data.gammaThresholdSlider, data.gammaThresholdREd, "gammaThreshold", TinaController.SLIDER_SCALE_GAMMA_THRESHOLD, true); } public void vibrancyREd_changed() { flameTextFieldChanged(data.vibrancySlider, data.vibrancyREd, "vibrancy", TinaController.SLIDER_SCALE_BRIGHTNESS_CONTRAST_VIBRANCY, true); } public void lowDensityBrightnessREd_changed() { flameTextFieldChanged(data.lowDensityBrightnessSlider, data.lowDensityBrightnessREd, "lowDensityBrightness", TinaController.SLIDER_SCALE_BRIGHTNESS_CONTRAST_VIBRANCY, true); } public void balanceRedREd_changed() { flameTextFieldChanged(data.balanceRedSlider, data.balanceRedREd, "balanceRed", TinaController.SLIDER_SCALE_BRIGHTNESS_CONTRAST_VIBRANCY, true); } public void balanceGreenREd_changed() { flameTextFieldChanged(data.balanceGreenSlider, data.balanceGreenREd, "balanceGreen", TinaController.SLIDER_SCALE_BRIGHTNESS_CONTRAST_VIBRANCY, true); } public void balanceBlueREd_changed() { flameTextFieldChanged(data.balanceBlueSlider, data.balanceBlueREd, "balanceBlue", TinaController.SLIDER_SCALE_BRIGHTNESS_CONTRAST_VIBRANCY, true); } public void saturationREd_changed() { flameTextFieldChanged(data.saturationSlider, data.saturationREd, "saturation", TinaController.SLIDER_SCALE_BRIGHTNESS_CONTRAST_VIBRANCY, true); } public void pixelsPerUnitSlider_stateChanged(ChangeEvent e) { flameSliderChanged(data.pixelsPerUnitSlider, data.pixelsPerUnitREd, "pixelsPerUnit", 1.0, false); } private void flameTextFieldChanged(JSlider pSlider, JWFNumberField pTextField, String pProperty, double pSliderScale, boolean pAllowUseCache) { if (isNoRefresh()) { return; } if (getCurrFlame() == null) { return; } setNoRefresh(true); try { double propValue = Tools.stringToDouble(pTextField.getText()); pSlider.setValue(Tools.FTOI(propValue * pSliderScale)); Class<?> cls = getCurrFlame().getClass(); Field field; try { field = cls.getDeclaredField(pProperty); field.setAccessible(true); Class<?> fieldCls = field.getType(); if (fieldCls == double.class || fieldCls == Double.class) { field.setDouble(getCurrFlame(), propValue); } else if (fieldCls == int.class || fieldCls == Integer.class) { field.setInt(getCurrFlame(), Tools.FTOI(propValue)); } else { throw new IllegalStateException(); } } catch (Throwable ex) { ex.printStackTrace(); } owner.refreshFlameImage(true, false, 1, true, pAllowUseCache); } finally { setNoRefresh(false); } } public void cameraCentreYREd_changed() { flameTextFieldChanged(data.cameraCentreYSlider, data.cameraCentreYREd, "centreY", TinaController.SLIDER_SCALE_CENTRE, false); } public void cameraCentreXREd_changed() { flameTextFieldChanged(data.cameraCentreXSlider, data.cameraCentreXREd, "centreX", TinaController.SLIDER_SCALE_CENTRE, false); } public void cameraZoomREd_changed() { flameTextFieldChanged(data.cameraZoomSlider, data.cameraZoomREd, "camZoom", TinaController.SLIDER_SCALE_ZOOM, false); } public void filterRadiusREd_changed() { flameTextFieldChanged(data.filterRadiusSlider, data.filterRadiusREd, "spatialFilterRadius", TinaController.SLIDER_SCALE_FILTER_RADIUS, false); owner.refreshFilterKernelPreviewImg(); } public void filterSharpnessREd_changed() { flameTextFieldChanged(data.tinaFilterSharpnessSlider, data.tinaFilterSharpnessREd, "spatialFilterSharpness", TinaController.SLIDER_SCALE_FILTER_RADIUS, false); } public void filterLowDensityREd_changed() { flameTextFieldChanged(data.tinaFilterLowDensitySlider, data.tinaFilterLowDensityREd, "spatialFilterLowDensity", TinaController.SLIDER_SCALE_FILTER_RADIUS, false); } public void gammaREd_changed() { flameTextFieldChanged(data.gammaSlider, data.gammaREd, "gamma", TinaController.SLIDER_SCALE_GAMMA, true); } public void gammaThresholdREd_changed() { flameTextFieldChanged(data.gammaThresholdSlider, data.gammaThresholdREd, "gammaThreshold", TinaController.SLIDER_SCALE_GAMMA_THRESHOLD, true); } public void contrastREd_changed() { flameTextFieldChanged(data.contrastSlider, data.contrastREd, "contrast", TinaController.SLIDER_SCALE_BRIGHTNESS_CONTRAST_VIBRANCY, true); } public void whiteLevelREd_changed() { flameTextFieldChanged(data.whiteLevelSlider, data.whiteLevelREd, "whiteLevel", 1.0, true); } public void gammaSlider_stateChanged(ChangeEvent e) { flameSliderChanged(data.gammaSlider, data.gammaREd, "gamma", TinaController.SLIDER_SCALE_GAMMA, true); } public void pixelsPerUnitREd_changed() { flameTextFieldChanged(data.pixelsPerUnitSlider, data.pixelsPerUnitREd, "pixelsPerUnit", 1.0, false); } public void brightnessREd_changed() { flameTextFieldChanged(data.brightnessSlider, data.brightnessREd, "brightness", TinaController.SLIDER_SCALE_BRIGHTNESS_CONTRAST_VIBRANCY, true); } public void contrastSlider_stateChanged(ChangeEvent e) { flameSliderChanged(data.contrastSlider, data.contrastREd, "contrast", TinaController.SLIDER_SCALE_BRIGHTNESS_CONTRAST_VIBRANCY, true); } public void whiteLevelSlider_stateChanged(ChangeEvent e) { flameSliderChanged(data.whiteLevelSlider, data.whiteLevelREd, "whiteLevel", 1.0, true); } public void cameraRollREd_changed() { flameTextFieldChanged(data.cameraRollSlider, data.cameraRollREd, "camRoll", 1.0, false); } public void cameraPitchREd_changed() { flameTextFieldChanged(data.cameraPitchSlider, data.cameraPitchREd, "camPitch", 1.0, false); } public void cameraYawREd_changed() { flameTextFieldChanged(data.cameraYawSlider, data.cameraYawREd, "camYaw", 1.0, false); } public void cameraPerspectiveREd_changed() { flameTextFieldChanged(data.cameraPerspectiveSlider, data.cameraPerspectiveREd, "camPerspective", TinaController.SLIDER_SCALE_PERSPECTIVE, false); } public void focusXREd_changed() { flameTextFieldChanged(data.focusXSlider, data.focusXREd, "focusX", TinaController.SLIDER_SCALE_ZPOS, false); } public void focusYREd_changed() { flameTextFieldChanged(data.focusYSlider, data.focusYREd, "focusY", TinaController.SLIDER_SCALE_ZPOS, false); } public void focusZREd_changed() { flameTextFieldChanged(data.focusZSlider, data.focusZREd, "focusZ", TinaController.SLIDER_SCALE_ZPOS, false); } public void diminishZREd_changed() { flameTextFieldChanged(data.dimishZSlider, data.dimishZREd, "dimishZ", TinaController.SLIDER_SCALE_ZPOS, false); } public void cameraDOFREd_changed() { flameTextFieldChanged(data.cameraDOFSlider, data.cameraDOFREd, "camDOF", TinaController.SLIDER_SCALE_DOF, false); } public void camZREd_changed() { flameTextFieldChanged(data.camZSlider, data.camZREd, "camZ", TinaController.SLIDER_SCALE_ZPOS, false); } public void cameraDOFAreaREd_changed() { flameTextFieldChanged(data.cameraDOFAreaSlider, data.cameraDOFAreaREd, "camDOFArea", TinaController.SLIDER_SCALE_DOF_AREA, false); } public void cameraDOFExponentREd_changed() { flameTextFieldChanged(data.cameraDOFExponentSlider, data.cameraDOFExponentREd, "camDOFExponent", TinaController.SLIDER_SCALE_DOF_EXPONENT, false); } public void enableDOFUI() { boolean newDOF = getCurrFlame() != null ? getCurrFlame().isNewCamDOF() : false; data.newDOFCBx.setEnabled(getCurrFlame() != null); data.mouseTransformEditFocusPointButton.setEnabled(newDOF); data.focusXREd.setEnabled(newDOF); data.focusXSlider.setEnabled(newDOF); data.focusYREd.setEnabled(newDOF); data.focusYSlider.setEnabled(newDOF); data.focusZREd.setEnabled(newDOF); data.focusZSlider.setEnabled(newDOF); data.cameraDOFAreaREd.setEnabled(newDOF); data.cameraDOFAreaSlider.setEnabled(newDOF); data.cameraDOFExponentREd.setEnabled(newDOF); data.cameraDOFExponentSlider.setEnabled(newDOF); data.camZREd.setEnabled(getCurrFlame() != null); data.camZSlider.setEnabled(getCurrFlame() != null); data.dimishZREd.setEnabled(getCurrFlame() != null); data.dimishZSlider.setEnabled(getCurrFlame() != null); } public void enablePostSymmetryUI() { boolean enabled = getCurrFlame() != null; boolean pointSymmEnabled = enabled && PostSymmetryType.POINT.equals(getCurrFlame().getPostSymmetryType()); boolean axisSymmEnabled = enabled && (PostSymmetryType.X_AXIS.equals(getCurrFlame().getPostSymmetryType()) || PostSymmetryType.Y_AXIS.equals(getCurrFlame().getPostSymmetryType())); enableControl(data.postSymmetryTypeCmb, false); enableControl(data.postSymmetryDistanceREd, !axisSymmEnabled); enableControl(data.postSymmetryRotationREd, !axisSymmEnabled); enableControl(data.postSymmetryOrderREd, !pointSymmEnabled); enableControl(data.postSymmetryCentreXREd, !axisSymmEnabled && !pointSymmEnabled); enableControl(data.postSymmetryCentreYREd, !axisSymmEnabled && !pointSymmEnabled); } public void enableBGColorUI() { boolean enabled = getCurrFlame() != null && (BGColorType.GRADIENT_2X2.equals(getCurrFlame().getBgColorType()) || BGColorType.GRADIENT_2X2_C.equals(getCurrFlame().getBgColorType())); data.backgroundColorIndicatorBtn.setEnabled(enabled); data.backgroundColorURIndicatorBtn.setEnabled(enabled); data.backgroundColorLLIndicatorBtn.setEnabled(enabled); data.backgroundColorLRIndicatorBtn.setEnabled(enabled); data.backgroundColorCCIndicatorBtn.setEnabled(getCurrFlame() != null && (BGColorType.SINGLE_COLOR.equals(getCurrFlame().getBgColorType()) || BGColorType.GRADIENT_2X2_C.equals(getCurrFlame().getBgColorType()))); } public void enableFilterUI() { enableControl(data.tinaFilterTypeCmb, false); boolean filterDisabled = data.tinaFilterTypeCmb.getSelectedItem() == null; enableControl(data.filterKernelCmb, filterDisabled); enableControl(data.filterRadiusREd, filterDisabled); boolean adapativeOptionsDisabled = !FilteringType.ADAPTIVE.equals(data.tinaFilterTypeCmb.getSelectedItem()); enableControl(data.tinaFilterIndicatorCBx, adapativeOptionsDisabled); enableControl(data.tinaFilterLowDensityREd, adapativeOptionsDisabled); enableControl(data.tinaFilterIndicatorCBx, adapativeOptionsDisabled); enableControl(data.tinaSpatialOversamplingREd, false); enableControl(data.tinaPostNoiseFilterCheckBox, false); enableControl(data.tinaPostNoiseThresholdField, !data.tinaPostNoiseFilterCheckBox.isSelected()); } public void refreshFlameValues() { boolean oldNoRefrsh = isNoRefresh(); setNoRefresh(true); try { refreshReflMapColorIndicator(); refreshSolidRenderingSelectedLightCmb(); refreshSolidRenderingSelectedMaterialCmb(); data.camPosXREd.setText(Tools.doubleToString(getCurrFlame().getCamPosX())); data.camPosXSlider.setValue(Tools.FTOI(getCurrFlame().getCamPosX() * TinaController.SLIDER_SCALE_CENTRE)); data.camPosYREd.setText(Tools.doubleToString(getCurrFlame().getCamPosY())); data.camPosYSlider.setValue(Tools.FTOI(getCurrFlame().getCamPosY() * TinaController.SLIDER_SCALE_CENTRE)); data.camPosZREd.setText(Tools.doubleToString(getCurrFlame().getCamPosZ())); data.camPosZSlider.setValue(Tools.FTOI(getCurrFlame().getCamPosZ() * TinaController.SLIDER_SCALE_CENTRE)); data.cameraPerspectiveREd.setText(Tools.doubleToString(getCurrFlame().getCamPerspective())); data.cameraPerspectiveSlider.setValue(Tools.FTOI(getCurrFlame().getCamPerspective() * TinaController.SLIDER_SCALE_PERSPECTIVE)); data.cameraZoomREd.setText(Tools.doubleToString(getCurrFlame().getCamZoom())); data.cameraZoomSlider.setValue(Tools.FTOI(getCurrFlame().getCamZoom() * TinaController.SLIDER_SCALE_ZOOM)); data.cameraDOFREd.setText(Tools.doubleToString(getCurrFlame().getCamDOF())); data.cameraDOFSlider.setValue(Tools.FTOI(getCurrFlame().getCamDOF() * TinaController.SLIDER_SCALE_DOF)); data.cameraDOFAreaREd.setText(Tools.doubleToString(getCurrFlame().getCamDOFArea())); data.cameraDOFAreaSlider.setValue(Tools.FTOI(getCurrFlame().getCamDOFArea() * TinaController.SLIDER_SCALE_DOF_AREA)); data.cameraDOFExponentREd.setText(Tools.doubleToString(getCurrFlame().getCamDOFExponent())); data.cameraDOFExponentSlider.setValue(Tools.FTOI(getCurrFlame().getCamDOFExponent() * TinaController.SLIDER_SCALE_DOF_EXPONENT)); data.camZREd.setText(Tools.doubleToString(getCurrFlame().getCamZ())); data.camZSlider.setValue(Tools.FTOI(getCurrFlame().getCamZ() * TinaController.SLIDER_SCALE_ZPOS)); data.newDOFCBx.setSelected(getCurrFlame().isNewCamDOF()); data.brightnessREd.setText(Tools.doubleToString(getCurrFlame().getBrightness())); data.brightnessSlider.setValue(Tools.FTOI(getCurrFlame().getBrightness() * TinaController.SLIDER_SCALE_BRIGHTNESS_CONTRAST_VIBRANCY)); data.saturationREd.setText(Tools.doubleToString(getCurrFlame().getSaturation())); data.saturationSlider.setValue(Tools.FTOI(getCurrFlame().getSaturation() * TinaController.SLIDER_SCALE_BRIGHTNESS_CONTRAST_VIBRANCY)); data.contrastREd.setText(Tools.doubleToString(getCurrFlame().getContrast())); data.contrastSlider.setValue(Tools.FTOI(getCurrFlame().getContrast() * TinaController.SLIDER_SCALE_BRIGHTNESS_CONTRAST_VIBRANCY)); data.whiteLevelREd.setText(Tools.doubleToString(getCurrFlame().getWhiteLevel())); data.whiteLevelSlider.setValue(Tools.FTOI(getCurrFlame().getWhiteLevel())); data.vibrancyREd.setText(Tools.doubleToString(getCurrFlame().getVibrancy())); data.vibrancySlider.setValue(Tools.FTOI(getCurrFlame().getVibrancy() * TinaController.SLIDER_SCALE_BRIGHTNESS_CONTRAST_VIBRANCY)); data.gammaREd.setText(Tools.doubleToString(getCurrFlame().getGamma())); data.gammaSlider.setValue(Tools.FTOI(getCurrFlame().getGamma() * TinaController.SLIDER_SCALE_GAMMA)); data.filterRadiusREd.setText(Tools.doubleToString(getCurrFlame().getSpatialFilterRadius())); data.filterRadiusSlider.setValue(Tools.FTOI(getCurrFlame().getSpatialFilterRadius() * TinaController.SLIDER_SCALE_FILTER_RADIUS)); data.tinaFilterSharpnessREd.setText(Tools.doubleToString(getCurrFlame().getSpatialFilterSharpness())); data.tinaFilterSharpnessSlider.setValue(Tools.FTOI(getCurrFlame().getSpatialFilterSharpness() * TinaController.SLIDER_SCALE_FILTER_RADIUS)); data.tinaFilterLowDensityREd.setText(Tools.doubleToString(getCurrFlame().getSpatialFilterLowDensity())); data.tinaFilterLowDensitySlider.setValue(Tools.FTOI(getCurrFlame().getSpatialFilterLowDensity() * TinaController.SLIDER_SCALE_FILTER_RADIUS)); data.tinaFilterIndicatorCBx.setSelected(getCurrFlame().isSpatialFilterIndicator()); data.tinaFilterTypeCmb.setSelectedItem(getCurrFlame().getSpatialFilteringType()); fillFilterKernelCmb(getCurrFlame().getSpatialFilteringType()); data.filterKernelCmb.setSelectedItem(getCurrFlame().getSpatialFilterKernel()); enableFilterUI(); data.lowDensityBrightnessREd.setText(Tools.doubleToString(getCurrFlame().getLowDensityBrightness())); data.lowDensityBrightnessSlider.setValue(Tools.FTOI(getCurrFlame().getLowDensityBrightness() * TinaController.SLIDER_SCALE_BRIGHTNESS_CONTRAST_VIBRANCY)); data.balanceRedREd.setText(Tools.doubleToString(getCurrFlame().getBalanceRed())); data.balanceRedSlider.setValue(Tools.FTOI(getCurrFlame().getBalanceRed() * TinaController.SLIDER_SCALE_BRIGHTNESS_CONTRAST_VIBRANCY)); data.balanceGreenREd.setText(Tools.doubleToString(getCurrFlame().getBalanceGreen())); data.balanceGreenSlider.setValue(Tools.FTOI(getCurrFlame().getBalanceGreen() * TinaController.SLIDER_SCALE_BRIGHTNESS_CONTRAST_VIBRANCY)); data.balanceBlueREd.setText(Tools.doubleToString(getCurrFlame().getBalanceBlue())); data.balanceBlueSlider.setValue(Tools.FTOI(getCurrFlame().getBalanceBlue() * TinaController.SLIDER_SCALE_BRIGHTNESS_CONTRAST_VIBRANCY)); data.tinaSpatialOversamplingREd.setText(String.valueOf(getCurrFlame().getSpatialOversampling())); data.tinaSpatialOversamplingSlider.setValue(getCurrFlame().getSpatialOversampling()); data.tinaPostNoiseFilterCheckBox.setSelected(getCurrFlame().isPostNoiseFilter()); data.tinaPostNoiseThresholdField.setText(String.valueOf(getCurrFlame().getPostNoiseFilterThreshold())); data.tinaPostNoiseThresholdSlider.setValue(Tools.FTOI(getCurrFlame().getPostNoiseFilterThreshold() * TinaController.SLIDER_SCALE_POST_NOISE_FILTER_THRESHOLD)); data.foregroundOpacityField.setText(String.valueOf(getCurrFlame().getForegroundOpacity())); data.foregroundOpacitySlider.setValue(Tools.FTOI(getCurrFlame().getForegroundOpacity() * TinaController.SLIDER_SCALE_POST_NOISE_FILTER_THRESHOLD)); data.gammaThresholdREd.setText(String.valueOf(getCurrFlame().getGammaThreshold())); data.gammaThresholdSlider.setValue(Tools.FTOI(getCurrFlame().getGammaThreshold() * TinaController.SLIDER_SCALE_GAMMA_THRESHOLD)); data.bgTransparencyCBx.setSelected(getCurrFlame().isBGTransparency()); data.backgroundColorTypeCmb.setSelectedItem(getCurrFlame().getBgColorType()); enableBGColorUI(); data.xFormAntialiasAmountREd.setText(Tools.doubleToString(getCurrFlame().getAntialiasAmount())); data.xFormAntialiasAmountSlider.setValue(Tools.FTOI(getCurrFlame().getAntialiasAmount() * TinaController.SLIDER_SCALE_COLOR)); data.xFormAntialiasRadiusREd.setText(Tools.doubleToString(getCurrFlame().getAntialiasRadius())); data.xFormAntialiasRadiusSlider.setValue(Tools.FTOI(getCurrFlame().getAntialiasRadius() * TinaController.SLIDER_SCALE_COLOR)); data.motionBlurLengthField.setText(String.valueOf(getCurrFlame().getMotionBlurLength())); data.motionBlurLengthSlider.setValue(getCurrFlame().getMotionBlurLength()); data.motionBlurTimeStepField.setText(Tools.doubleToString(getCurrFlame().getMotionBlurTimeStep())); data.motionBlurTimeStepSlider.setValue(Tools.FTOI(getCurrFlame().getMotionBlurTimeStep() * TinaController.SLIDER_SCALE_COLOR)); data.motionBlurDecayField.setText(Tools.doubleToString(getCurrFlame().getMotionBlurDecay())); data.motionBlurDecaySlider.setValue(Tools.FTOI(getCurrFlame().getMotionBlurDecay() * TinaController.SLIDER_SCALE_ZOOM)); data.flameFPSField.setValue(getCurrFlame().getFps()); data.postSymmetryTypeCmb.setSelectedItem(getCurrFlame().getPostSymmetryType()); enablePostSymmetryUI(); data.postSymmetryDistanceREd.setText(Tools.doubleToString(getCurrFlame().getPostSymmetryDistance())); data.postSymmetryDistanceSlider.setValue(Tools.FTOI(getCurrFlame().getPostSymmetryDistance() * TinaController.SLIDER_SCALE_CENTRE)); data.postSymmetryRotationREd.setText(Tools.doubleToString(getCurrFlame().getPostSymmetryRotation())); data.postSymmetryRotationSlider.setValue(Tools.FTOI(getCurrFlame().getPostSymmetryRotation())); data.postSymmetryOrderREd.setText(String.valueOf(getCurrFlame().getPostSymmetryOrder())); data.postSymmetryOrderSlider.setValue(Tools.FTOI(getCurrFlame().getPostSymmetryOrder())); data.postSymmetryCentreXREd.setText(Tools.doubleToString(getCurrFlame().getPostSymmetryCentreX())); data.postSymmetryCentreXSlider.setValue(Tools.FTOI(getCurrFlame().getPostSymmetryCentreX() * TinaController.SLIDER_SCALE_CENTRE)); data.postSymmetryCentreYREd.setText(Tools.doubleToString(getCurrFlame().getPostSymmetryCentreY())); data.postSymmetryCentreYSlider.setValue(Tools.FTOI(getCurrFlame().getPostSymmetryCentreY() * TinaController.SLIDER_SCALE_CENTRE)); data.stereo3dModeCmb.setSelectedItem(getCurrFlame().getStereo3dMode()); enableStereo3dUI(); data.stereo3dAngleREd.setText(Tools.doubleToString(getCurrFlame().getStereo3dAngle())); data.stereo3dAngleSlider.setValue(Tools.FTOI(getCurrFlame().getStereo3dAngle() * TinaController.SLIDER_SCALE_GAMMA_THRESHOLD)); data.stereo3dEyeDistREd.setText(Tools.doubleToString(getCurrFlame().getStereo3dEyeDist())); data.stereo3dEyeDistSlider.setValue(Tools.FTOI(getCurrFlame().getStereo3dEyeDist() * TinaController.SLIDER_SCALE_GAMMA_THRESHOLD)); data.stereo3dFocalOffsetREd.setText(Tools.doubleToString(getCurrFlame().getStereo3dFocalOffset())); data.stereo3dFocalOffsetSlider.setValue(Tools.FTOI(getCurrFlame().getStereo3dFocalOffset() * TinaController.SLIDER_SCALE_GAMMA_THRESHOLD)); data.stereo3dLeftEyeColorCmb.setSelectedItem(getCurrFlame().getStereo3dLeftEyeColor()); data.stereo3dRightEyeColorCmb.setSelectedItem(getCurrFlame().getStereo3dRightEyeColor()); data.stereo3dInterpolatedImageCountREd.setText(String.valueOf(getCurrFlame().getStereo3dInterpolatedImageCount())); data.stereo3dInterpolatedImageCountSlider.setValue(Tools.FTOI(getCurrFlame().getStereo3dInterpolatedImageCount())); data.stereo3dPreviewCmb.setSelectedItem(getCurrFlame().getStereo3dPreview()); data.stereo3dSwapSidesCBx.setSelected(getCurrFlame().isStereo3dSwapSides()); data.postBlurRadiusSlider.setValue(Tools.FTOI(getCurrFlame().getPostBlurRadius())); data.postBlurRadiusREd.setText(Tools.doubleToString(getCurrFlame().getPostBlurRadius())); data.postBlurFadeSlider.setValue(Tools.FTOI(getCurrFlame().getPostBlurFade() * TinaController.SLIDER_SCALE_AMBIENT)); data.postBlurFadeREd.setText(Tools.doubleToString(getCurrFlame().getPostBlurFade())); data.postBlurFallOffSlider.setValue(Tools.FTOI(getCurrFlame().getPostBlurFallOff() * TinaController.SLIDER_SCALE_AMBIENT)); data.postBlurFallOffREd.setText(Tools.doubleToString(getCurrFlame().getPostBlurFallOff())); data.tinaZBufferScaleREd.setText(Tools.doubleToString(getCurrFlame().getZBufferScale())); data.tinaZBufferScaleSlider.setValue(Tools.FTOI(getCurrFlame().getZBufferScale() * TinaController.SLIDER_SCALE_CENTRE)); setupDOFParamsControls(getCurrFlame().getCamDOFShape()); data.dofDOFShapeCmb.setSelectedItem(getCurrFlame().getCamDOFShape()); refreshBokehParams(); refreshSolidRenderSettingsUI(); } finally { setNoRefresh(oldNoRefrsh); } refreshVisualCamValues(); } private void refreshSolidRenderingSelectedMaterialCmb() { refreshSelectItemCmb(getCurrFlame().getSolidRenderSettings().getMaterials(), data.tinaSolidRenderingSelectedMaterialCmb, "Material "); } private void refreshSelectItemCmb(List<?> items, JComboBox cmb, String itemPrefix) { boolean oldNoRefresh = isNoRefresh(); setNoRefresh(true); try { if (items.size() != cmb.getItemCount()) { int selected = cmb.getSelectedIndex(); cmb.removeAllItems(); for (int i = 0; i < items.size(); i++) { cmb.addItem(itemPrefix + String.valueOf(i)); } if (selected < 0 && items.size() > 0) { selected = 0; } else if (selected >= items.size()) { selected = items.size() - 1; } cmb.setSelectedIndex(selected); } } finally { setNoRefresh(oldNoRefresh); } } private void refreshSolidRenderingSelectedLightCmb() { refreshSelectItemCmb(getCurrFlame().getSolidRenderSettings().getLights(), data.tinaSolidRenderingSelectedLightCmb, "Light "); } private int getSolidRenderingSelectedLightIndex() { return data.tinaSolidRenderingSelectedLightCmb.getSelectedIndex(); } private DistantLight getSolidRenderingSelectedLight() { Flame flame = getCurrFlame(); if (flame != null) { SolidRenderSettings settings = flame.getSolidRenderSettings(); int idx = getSolidRenderingSelectedLightIndex(); if (idx >= 0 && idx < settings.getLights().size()) { return settings.getLights().get(idx); } } return null; } private int getSolidRenderingSelectedMaterialIndex() { return data.tinaSolidRenderingSelectedMaterialCmb.getSelectedIndex(); } private MaterialSettings getSolidRenderingSelectedMaterial() { Flame flame = getCurrFlame(); if (flame != null) { SolidRenderSettings settings = flame.getSolidRenderSettings(); int idx = getSolidRenderingSelectedMaterialIndex(); if (idx >= 0 && idx < settings.getMaterials().size()) { return settings.getMaterials().get(idx); } } return null; } private void refreshSolidRenderLightColorIndicator() { DistantLight light = getSolidRenderingSelectedLight(); Color color = (light != null) ? new Color(Tools.roundColor(light.getRed() * GammaCorrectionFilter.COLORSCL), Tools.roundColor(light.getGreen() * GammaCorrectionFilter.COLORSCL), Tools.roundColor(light.getBlue() * GammaCorrectionFilter.COLORSCL)) : Color.BLACK; data.tinaSolidRenderingLightColorBtn.setBackground(color); } private void refreshSolidRenderMaterialSpecularColorIndicator() { MaterialSettings material = getSolidRenderingSelectedMaterial(); Color color = (material != null) ? new Color(Tools.roundColor(material.getPhongRed() * GammaCorrectionFilter.COLORSCL), Tools.roundColor(material.getPhongGreen() * GammaCorrectionFilter.COLORSCL), Tools.roundColor(material.getPhongBlue() * GammaCorrectionFilter.COLORSCL)) : Color.BLACK; data.tinaSolidRenderingMaterialSpecularColorBtn.setBackground(color); } private void refreshSolidRenderSettingsUI() { refreshSolidRenderingGlobals(); refreshSolidRenderingLightControls(); refreshSolidRenderingMaterialControls(); } private void enableBokehPanels() { if (getCurrFlame() != null) { SolidRenderSettings settings = getCurrFlame().getSolidRenderSettings(); ((JTabbedPane) data.bokehSettingsPnl.getParent()).setEnabledAt(1, !settings.isSolidRenderingEnabled()); data.bokehSettingsPnl.setEnabled(!settings.isSolidRenderingEnabled()); ((JTabbedPane) data.bokehSettingsPnl.getParent()).setEnabledAt(2, settings.isSolidRenderingEnabled()); data.bokehSettingsPnl.setEnabled(settings.isSolidRenderingEnabled()); } } private void refreshSolidRenderingGlobals() { enableBokehPanels(); SolidRenderSettings settings = getCurrFlame().getSolidRenderSettings(); data.solidRenderingToggleBtn.setSelected(settings.isSolidRenderingEnabled()); data.tinaSolidRenderingEnableAOCBx.setSelected(settings.isAoEnabled()); data.tinaSolidRenderingAOIntensityREd.setText(Tools.doubleToString(settings.getAoIntensity())); data.tinaSolidRenderingAOIntensitySlider.setValue(Tools.FTOI(settings.getAoIntensity() * TinaController.SLIDER_SCALE_CENTRE)); data.tinaSolidRenderingAOSearchRadiusREd.setText(Tools.doubleToString(settings.getAoSearchRadius())); data.tinaSolidRenderingAOSearchRadiusSlider.setValue(Tools.FTOI(settings.getAoSearchRadius() * TinaController.SLIDER_SCALE_CENTRE)); data.tinaSolidRenderingAOBlurRadiusREd.setText(Tools.doubleToString(settings.getAoBlurRadius())); data.tinaSolidRenderingAOBlurRadiusSlider.setValue(Tools.FTOI(settings.getAoBlurRadius() * TinaController.SLIDER_SCALE_CENTRE)); data.tinaSolidRenderingAOFalloffREd.setText(Tools.doubleToString(settings.getAoFalloff())); data.tinaSolidRenderingAOFalloffSlider.setValue(Tools.FTOI(settings.getAoFalloff() * TinaController.SLIDER_SCALE_CENTRE)); data.tinaSolidRenderingAORadiusSamplesREd.setText(Tools.doubleToString(settings.getAoRadiusSamples())); data.tinaSolidRenderingAORadiusSamplesSlider.setValue(Tools.FTOI(settings.getAoRadiusSamples())); data.tinaSolidRenderingAOAzimuthSamplesREd.setText(Tools.doubleToString(settings.getAoAzimuthSamples())); data.tinaSolidRenderingAOAzimuthSamplesSlider.setValue(Tools.FTOI(settings.getAoAzimuthSamples())); data.tinaSolidRenderingAOAffectDiffuseREd.setText(Tools.doubleToString(settings.getAoAffectDiffuse())); data.tinaSolidRenderingAOAffectDiffuseSlider.setValue(Tools.FTOI(settings.getAoAffectDiffuse() * TinaController.SLIDER_SCALE_CENTRE)); data.tinaSolidRenderingShadowTypeCmb.setSelectedItem(settings.getShadowType()); data.tinaSolidRenderingShadowmapSizeCmb.setSelectedItem(String.valueOf(settings.getShadowmapSize())); if (data.tinaSolidRenderingShadowmapSizeCmb.getSelectedIndex() < 0) { data.tinaSolidRenderingShadowmapSizeCmb.setSelectedIndex(0); } data.tinaSolidRenderingShadowSmoothRadiusREd.setText(Tools.doubleToString(settings.getShadowSmoothRadius())); data.tinaSolidRenderingShadowSmoothRadiusSlider.setValue(Tools.FTOI(settings.getShadowSmoothRadius() * TinaController.SLIDER_SCALE_CENTRE)); data.tinaSolidRenderingShadowmapBiasREd.setText(Tools.doubleToString(settings.getShadowmapBias())); data.tinaSolidRenderingShadowmapBiasSlider.setValue(Tools.FTOI(settings.getShadowmapBias() * TinaController.SLIDER_SCALE_CENTRE)); data.postBokehIntensityREd.setText(Tools.doubleToString(settings.getPostBokehIntensity())); data.postBokehIntensitySlider.setValue(Tools.FTOI(settings.getPostBokehIntensity() * TinaController.SLIDER_SCALE_CENTRE)); data.postBokehBrightnessREd.setText(Tools.doubleToString(settings.getPostBokehBrightness())); data.postBokehBrightnessSlider.setValue(Tools.FTOI(settings.getPostBokehBrightness() * TinaController.SLIDER_SCALE_CENTRE)); data.postBokehSizeREd.setText(Tools.doubleToString(settings.getPostBokehSize())); data.postBokehSizeSlider.setValue(Tools.FTOI(settings.getPostBokehSize() * TinaController.SLIDER_SCALE_CENTRE)); data.postBokehActivationREd.setText(Tools.doubleToString(settings.getPostBokehActivation())); data.postBokehActivationSlider.setValue(Tools.FTOI(settings.getPostBokehActivation() * TinaController.SLIDER_SCALE_CENTRE)); data.postBokehFilterKernelCmb.setSelectedItem(settings.getPostBokehFilterKernel()); } private void refreshSolidRenderingMaterialControls() { MaterialSettings material = getSolidRenderingSelectedMaterial(); if (material != null) { data.tinaSolidRenderingMaterialDiffuseREd.setText(Tools.doubleToString(material.getDiffuse())); data.tinaSolidRenderingMaterialDiffuseSlider.setValue(Tools.FTOI(material.getDiffuse() * TinaController.SLIDER_SCALE_CENTRE)); data.tinaSolidRenderingMaterialAmbientREd.setText(Tools.doubleToString(material.getAmbient())); data.tinaSolidRenderingMaterialAmbientSlider.setValue(Tools.FTOI(material.getAmbient() * TinaController.SLIDER_SCALE_CENTRE)); data.tinaSolidRenderingMaterialSpecularREd.setText(Tools.doubleToString(material.getPhong())); data.tinaSolidRenderingMaterialSpecularSlider.setValue(Tools.FTOI(material.getPhong() * TinaController.SLIDER_SCALE_CENTRE)); data.tinaSolidRenderingMaterialSpecularSharpnessREd.setText(Tools.doubleToString(material.getPhongSize())); data.tinaSolidRenderingMaterialSpecularSharpnessSlider.setValue(Tools.FTOI(material.getPhongSize() * TinaController.SLIDER_SCALE_CENTRE)); data.tinaSolidRenderingMaterialDiffuseResponseCmb.setSelectedItem(material.getLightDiffFunc()); data.tinaSolidRenderingMaterialReflectionMapIntensityREd.setText(Tools.doubleToString(material.getReflMapIntensity())); data.tinaSolidRenderingMaterialReflectionMapIntensitySlider.setValue(Tools.FTOI(material.getReflMapIntensity() * TinaController.SLIDER_SCALE_CENTRE)); data.tinaSolidRenderingMaterialReflectionMappingCmb.setSelectedItem(material.getReflectionMapping()); } refreshSolidRenderMaterialSpecularColorIndicator(); } private void refreshLightPosControls(DistantLight light) { data.tinaSolidRenderingLightAltitudeREd.setText(Tools.doubleToString(light.getAltitude())); data.tinaSolidRenderingLightAltitudeSlider.setValue(Tools.FTOI(light.getAltitude() * TinaController.SLIDER_SCALE_CENTRE)); data.tinaSolidRenderingLightAzimuthREd.setText(Tools.doubleToString(light.getAzimuth())); data.tinaSolidRenderingLightAzimuthSlider.setValue(Tools.FTOI(light.getAzimuth() * TinaController.SLIDER_SCALE_CENTRE)); } private void refreshSolidRenderingLightControls() { DistantLight light = getSolidRenderingSelectedLight(); if (light != null) { refreshLightPosControls(light); data.tinaSolidRenderingLightCastShadowsCBx.setSelected(light.isCastShadows()); data.tinaSolidRenderingLightIntensityREd.setText(Tools.doubleToString(light.getIntensity())); data.tinaSolidRenderingLightIntensitySlider.setValue(Tools.FTOI(light.getIntensity() * TinaController.SLIDER_SCALE_CENTRE)); data.tinaSolidRenderingShadowIntensityREd.setText(Tools.doubleToString(light.getShadowIntensity())); data.tinaSolidRenderingShadowIntensitySlider.setValue(Tools.FTOI(light.getShadowIntensity() * TinaController.SLIDER_SCALE_CENTRE)); } refreshSolidRenderLightColorIndicator(); } private void refreshBokehParams() { data.dofDOFScaleREd.setText(Tools.doubleToString(getCurrFlame().getCamDOFScale())); data.dofDOFScaleSlider.setValue(Tools.FTOI(getCurrFlame().getCamDOFScale() * TinaController.SLIDER_SCALE_ZOOM)); data.dofDOFAngleREd.setText(Tools.doubleToString(getCurrFlame().getCamDOFAngle())); data.dofDOFAngleSlider.setValue(Tools.FTOI(getCurrFlame().getCamDOFAngle() * TinaController.SLIDER_SCALE_ZOOM)); data.dofDOFFadeREd.setText(Tools.doubleToString(getCurrFlame().getCamDOFFade())); data.dofDOFFadeSlider.setValue(Tools.FTOI(getCurrFlame().getCamDOFFade() * TinaController.SLIDER_SCALE_ZOOM)); data.dofDOFParam1REd.setText(Tools.doubleToString(getCurrFlame().getCamDOFParam1())); data.dofDOFParam1Slider.setValue(Tools.FTOI(getCurrFlame().getCamDOFParam1() * TinaController.SLIDER_SCALE_ZOOM)); data.dofDOFParam2REd.setText(Tools.doubleToString(getCurrFlame().getCamDOFParam2())); data.dofDOFParam2Slider.setValue(Tools.FTOI(getCurrFlame().getCamDOFParam2() * TinaController.SLIDER_SCALE_ZOOM)); data.dofDOFParam3REd.setText(Tools.doubleToString(getCurrFlame().getCamDOFParam3())); data.dofDOFParam3Slider.setValue(Tools.FTOI(getCurrFlame().getCamDOFParam3() * TinaController.SLIDER_SCALE_ZOOM)); data.dofDOFParam4REd.setText(Tools.doubleToString(getCurrFlame().getCamDOFParam4())); data.dofDOFParam4Slider.setValue(Tools.FTOI(getCurrFlame().getCamDOFParam4() * TinaController.SLIDER_SCALE_ZOOM)); data.dofDOFParam5REd.setText(Tools.doubleToString(getCurrFlame().getCamDOFParam5())); data.dofDOFParam5Slider.setValue(Tools.FTOI(getCurrFlame().getCamDOFParam5() * TinaController.SLIDER_SCALE_ZOOM)); data.dofDOFParam6REd.setText(Tools.doubleToString(getCurrFlame().getCamDOFParam6())); data.dofDOFParam6Slider.setValue(Tools.FTOI(getCurrFlame().getCamDOFParam6() * TinaController.SLIDER_SCALE_ZOOM)); } private void setupDOFParamsControls(DOFBlurShapeType pShapeType) { List<String> paramNames = pShapeType.getDOFBlurShape().getParamNames(); for (int i = 0; i < dofParamControls.size(); i++) { DOFParamControl ctrl = dofParamControls.get(i); if (i < paramNames.size()) { String name = paramNames.get(i); name = name.substring(0, 1).toUpperCase() + name.substring(1, name.length()); ctrl.setLabel(name); ctrl.setVisible(true); } else { ctrl.setVisible(false); } } } public void refreshVisualCamValues() { boolean oldNoRefrsh = isNoRefresh(); setNoRefresh(true); try { data.cameraRollREd.setText(Tools.doubleToString(getCurrFlame().getCamRoll())); data.cameraRollSlider.setValue(Tools.FTOI(getCurrFlame().getCamRoll())); data.cameraPitchREd.setText(Tools.doubleToString(getCurrFlame().getCamPitch())); data.cameraPitchSlider.setValue(Tools.FTOI(getCurrFlame().getCamPitch())); data.cameraYawREd.setText(Tools.doubleToString(getCurrFlame().getCamYaw())); data.cameraYawSlider.setValue(Tools.FTOI(getCurrFlame().getCamYaw())); data.cameraCentreXREd.setText(Tools.doubleToString(getCurrFlame().getCentreX())); data.cameraCentreXSlider.setValue(Tools.FTOI(getCurrFlame().getCentreX() * TinaController.SLIDER_SCALE_CENTRE)); data.cameraCentreYREd.setText(Tools.doubleToString(getCurrFlame().getCentreY())); data.cameraCentreYSlider.setValue(Tools.FTOI(getCurrFlame().getCentreY() * TinaController.SLIDER_SCALE_CENTRE)); data.pixelsPerUnitREd.setText(Tools.doubleToString(getCurrFlame().getPixelsPerUnit())); data.pixelsPerUnitSlider.setValue(Tools.FTOI(getCurrFlame().getPixelsPerUnit())); data.focusXREd.setText(Tools.doubleToString(getCurrFlame().getFocusX())); data.focusXSlider.setValue(Tools.FTOI(getCurrFlame().getFocusX() * TinaController.SLIDER_SCALE_ZPOS)); data.focusYREd.setText(Tools.doubleToString(getCurrFlame().getFocusY())); data.focusYSlider.setValue(Tools.FTOI(getCurrFlame().getFocusY() * TinaController.SLIDER_SCALE_ZPOS)); data.focusZREd.setText(Tools.doubleToString(getCurrFlame().getFocusZ())); data.focusZSlider.setValue(Tools.FTOI(getCurrFlame().getFocusZ() * TinaController.SLIDER_SCALE_ZPOS)); data.dimishZREd.setText(Tools.doubleToString(getCurrFlame().getDimishZ())); data.dimishZSlider.setValue(Tools.FTOI(getCurrFlame().getDimishZ() * TinaController.SLIDER_SCALE_ZPOS)); } finally { setNoRefresh(oldNoRefrsh); } } public void motionBlurLengthREd_changed() { flameTextFieldChanged(data.motionBlurLengthSlider, data.motionBlurLengthField, "motionBlurLength", 1.0, false); } public void flameFPSField_changed() { if (isNoRefresh() || getCurrFlame() == null) { return; } getCurrFlame().setFps(data.flameFPSField.getIntValue()); } public void motionBlurLengthSlider_changed(ChangeEvent e) { flameSliderChanged(data.motionBlurLengthSlider, data.motionBlurLengthField, "motionBlurLength", 1.0, false); } public void motionBlurTimeStepREd_changed() { flameTextFieldChanged(data.motionBlurTimeStepSlider, data.motionBlurTimeStepField, "motionBlurTimeStep", TinaController.SLIDER_SCALE_COLOR, false); } public void motionBlurTimeStepSlider_changed(ChangeEvent e) { flameSliderChanged(data.motionBlurTimeStepSlider, data.motionBlurTimeStepField, "motionBlurTimeStep", TinaController.SLIDER_SCALE_COLOR, false); } public void motionBlurDecayREd_changed() { flameTextFieldChanged(data.motionBlurDecaySlider, data.motionBlurDecayField, "motionBlurDecay", TinaController.SLIDER_SCALE_ZOOM, false); } public void motionBlurDecaySlider_changed(ChangeEvent e) { flameSliderChanged(data.motionBlurDecaySlider, data.motionBlurDecayField, "motionBlurDecay", TinaController.SLIDER_SCALE_ZOOM, false); } public void postSymmetryCmb_changed() { if (!isNoRefresh()) { Flame flame = getCurrFlame(); if (flame != null) { owner.saveUndoPoint(); flame.setPostSymmetryType((PostSymmetryType) data.postSymmetryTypeCmb.getSelectedItem()); enablePostSymmetryUI(); owner.refreshFlameImage(true, false, 1, true, false); } } } public void postSymmetryDistanceREd_changed() { flameTextFieldChanged(data.postSymmetryDistanceSlider, data.postSymmetryDistanceREd, "postSymmetryDistance", TinaController.SLIDER_SCALE_CENTRE, false); } public void postSymmetryDistanceSlider_changed(ChangeEvent e) { flameSliderChanged(data.postSymmetryDistanceSlider, data.postSymmetryDistanceREd, "postSymmetryDistance", TinaController.SLIDER_SCALE_CENTRE, false); } public void postSymmetryRotationREd_changed() { flameTextFieldChanged(data.postSymmetryRotationSlider, data.postSymmetryRotationREd, "postSymmetryRotation", 1.0, false); } public void postSymmetryRotationSlider_changed(ChangeEvent e) { flameSliderChanged(data.postSymmetryRotationSlider, data.postSymmetryRotationREd, "postSymmetryRotation", 1.0, false); } public void postSymmetryCentreXREd_changed() { flameTextFieldChanged(data.postSymmetryCentreXSlider, data.postSymmetryCentreXREd, "postSymmetryCentreX", TinaController.SLIDER_SCALE_CENTRE, false); } public void postSymmetryCentreXSlider_changed(ChangeEvent e) { flameSliderChanged(data.postSymmetryCentreXSlider, data.postSymmetryCentreXREd, "postSymmetryCentreX", TinaController.SLIDER_SCALE_CENTRE, false); } public void postSymmetryCentreYREd_changed() { flameTextFieldChanged(data.postSymmetryCentreYSlider, data.postSymmetryCentreYREd, "postSymmetryCentreY", TinaController.SLIDER_SCALE_CENTRE, false); } public void postSymmetryCentreYSlider_changed(ChangeEvent e) { flameSliderChanged(data.postSymmetryCentreYSlider, data.postSymmetryCentreYREd, "postSymmetryCentreY", TinaController.SLIDER_SCALE_CENTRE, false); } public void postSymmetryOrderREd_changed() { flameTextFieldChanged(data.postSymmetryOrderSlider, data.postSymmetryOrderREd, "postSymmetryOrder", 1.0, false); } public void postSymmetryOrderSlider_changed(ChangeEvent e) { flameSliderChanged(data.postSymmetryOrderSlider, data.postSymmetryOrderREd, "postSymmetryOrder", 1.0, false); } public void stereo3dModeCmb_changed() { if (!isNoRefresh()) { Flame flame = getCurrFlame(); if (flame != null) { owner.saveUndoPoint(); flame.setStereo3dMode((Stereo3dMode) data.stereo3dModeCmb.getSelectedItem()); enableStereo3dUI(); owner.refreshFlameImage(true, false, 1, true, false); } } } public void stereo3dLeftEyeColorCmb_changed() { if (!isNoRefresh()) { Flame flame = getCurrFlame(); if (flame != null) { owner.saveUndoPoint(); flame.setStereo3dLeftEyeColor((Stereo3dColor) data.stereo3dLeftEyeColorCmb.getSelectedItem()); owner.refreshFlameImage(true, false, 1, true, false); } } } public void stereo3dRightEyeColorCmb_changed() { if (!isNoRefresh()) { Flame flame = getCurrFlame(); if (flame != null) { owner.saveUndoPoint(); flame.setStereo3dRightEyeColor((Stereo3dColor) data.stereo3dRightEyeColorCmb.getSelectedItem()); owner.refreshFlameImage(true, false, 1, true, false); } } } public void stereo3dAngleREd_changed() { flameTextFieldChanged(data.stereo3dAngleSlider, data.stereo3dAngleREd, "stereo3dAngle", TinaController.SLIDER_SCALE_GAMMA_THRESHOLD, false); } public void stereo3dAngleSlider_changed(ChangeEvent e) { flameSliderChanged(data.stereo3dAngleSlider, data.stereo3dAngleREd, "stereo3dAngle", TinaController.SLIDER_SCALE_GAMMA_THRESHOLD, false); } public void stereo3dEyeDistREd_changed() { flameTextFieldChanged(data.stereo3dEyeDistSlider, data.stereo3dEyeDistREd, "stereo3dEyeDist", TinaController.SLIDER_SCALE_GAMMA_THRESHOLD, false); } public void stereo3dEyeDistSlider_changed(ChangeEvent e) { flameSliderChanged(data.stereo3dEyeDistSlider, data.stereo3dEyeDistREd, "stereo3dEyeDist", TinaController.SLIDER_SCALE_GAMMA_THRESHOLD, false); } public void stereo3dFocalOffsetREd_changed() { flameTextFieldChanged(data.stereo3dFocalOffsetSlider, data.stereo3dFocalOffsetREd, "stereo3dFocalOffset", TinaController.SLIDER_SCALE_GAMMA_THRESHOLD, false); } public void stereo3dFocalOffsetSlider_changed(ChangeEvent e) { flameSliderChanged(data.stereo3dFocalOffsetSlider, data.stereo3dFocalOffsetREd, "stereo3dFocalOffset", TinaController.SLIDER_SCALE_GAMMA_THRESHOLD, false); } public void stereo3dInterpolatedImageCountREd_changed() { flameTextFieldChanged(data.stereo3dInterpolatedImageCountSlider, data.stereo3dInterpolatedImageCountREd, "stereo3dInterpolatedImageCount", 1.0, false); } public void stereo3dInterpolatedImageCountSlider_changed(ChangeEvent e) { flameSliderChanged(data.stereo3dInterpolatedImageCountSlider, data.stereo3dInterpolatedImageCountREd, "stereo3dInterpolatedImageCount", 1.0, false); } public void stereo3dPreviewCmb_changed() { if (!isNoRefresh()) { Flame flame = getCurrFlame(); if (flame != null) { owner.saveUndoPoint(); flame.setStereo3dPreview((Stereo3dPreview) data.stereo3dPreviewCmb.getSelectedItem()); enableStereo3dUI(); owner.refreshFlameImage(true, false, 1, true, false); } } } public void stereo3dSwapSidesCBx_changed() { Flame flame = getCurrFlame(); if (flame != null) { boolean swap = data.stereo3dSwapSidesCBx.isSelected(); if (swap != flame.isStereo3dSwapSides()) { owner.saveUndoPoint(); flame.setStereo3dSwapSides(swap); owner.refreshFlameImage(true, false, 1, true, false); } } } public void camPosXSlider_stateChanged(ChangeEvent e) { flameSliderChanged(data.camPosXSlider, data.camPosXREd, "camPosX", TinaController.SLIDER_SCALE_CENTRE, false); } public void camPosYSlider_stateChanged(ChangeEvent e) { flameSliderChanged(data.camPosYSlider, data.camPosYREd, "camPosY", TinaController.SLIDER_SCALE_CENTRE, false); } public void camPosZSlider_stateChanged(ChangeEvent e) { flameSliderChanged(data.camPosZSlider, data.camPosZREd, "camPosZ", TinaController.SLIDER_SCALE_CENTRE, false); } public void camPosXREd_changed() { flameTextFieldChanged(data.camPosXSlider, data.camPosXREd, "camPosX", TinaController.SLIDER_SCALE_CENTRE, false); } public void camPosYREd_changed() { flameTextFieldChanged(data.camPosYSlider, data.camPosYREd, "camPosY", TinaController.SLIDER_SCALE_CENTRE, false); } public void camPosZREd_changed() { flameTextFieldChanged(data.camPosZSlider, data.camPosZREd, "camPosZ", TinaController.SLIDER_SCALE_CENTRE, false); } public void dofDOFShapeCmb_changed() { if (!isNoRefresh()) { Flame flame = getCurrFlame(); if (flame != null) { owner.saveUndoPoint(); DOFBlurShapeType shape = (DOFBlurShapeType) data.dofDOFShapeCmb.getSelectedItem(); flame.setCamDOFShape(shape); shape.getDOFBlurShape().setDefaultParams(getCurrFlame()); setupDOFParamsControls(getCurrFlame().getCamDOFShape()); refreshBokehParams(); owner.refreshFlameImage(true, false, 1, true, false); } } } public void dofDOFScaleSlider_stateChanged(ChangeEvent e) { flameSliderChanged(data.dofDOFScaleSlider, data.dofDOFScaleREd, "camDOFScale", TinaController.SLIDER_SCALE_ZOOM, false); } public void dofDOFScaleREd_changed() { flameTextFieldChanged(data.dofDOFScaleSlider, data.dofDOFScaleREd, "camDOFScale", TinaController.SLIDER_SCALE_ZOOM, false); } public void dofDOFAngleSlider_stateChanged(ChangeEvent e) { flameSliderChanged(data.dofDOFAngleSlider, data.dofDOFAngleREd, "camDOFAngle", TinaController.SLIDER_SCALE_ZOOM, false); } public void dofDOFAngleREd_changed() { flameTextFieldChanged(data.dofDOFAngleSlider, data.dofDOFAngleREd, "camDOFAngle", TinaController.SLIDER_SCALE_ZOOM, false); } public void dofDOFFadeSlider_stateChanged(ChangeEvent e) { flameSliderChanged(data.dofDOFFadeSlider, data.dofDOFFadeREd, "camDOFFade", TinaController.SLIDER_SCALE_ZOOM, false); } public void dofDOFFadeREd_changed() { flameTextFieldChanged(data.dofDOFFadeSlider, data.dofDOFFadeREd, "camDOFFade", TinaController.SLIDER_SCALE_ZOOM, false); } public void dofDOFParam1Slider_stateChanged(ChangeEvent e) { flameSliderChanged(data.dofDOFParam1Slider, data.dofDOFParam1REd, "camDOFParam1", TinaController.SLIDER_SCALE_ZOOM, false); } public void dofDOFParam1REd_changed() { flameTextFieldChanged(data.dofDOFParam1Slider, data.dofDOFParam1REd, "camDOFParam1", TinaController.SLIDER_SCALE_ZOOM, false); } public void dofDOFParam2Slider_stateChanged(ChangeEvent e) { flameSliderChanged(data.dofDOFParam2Slider, data.dofDOFParam2REd, "camDOFParam2", TinaController.SLIDER_SCALE_ZOOM, false); } public void dofDOFParam2REd_changed() { flameTextFieldChanged(data.dofDOFParam2Slider, data.dofDOFParam2REd, "camDOFParam2", TinaController.SLIDER_SCALE_ZOOM, false); } public void dofDOFParam3Slider_stateChanged(ChangeEvent e) { flameSliderChanged(data.dofDOFParam3Slider, data.dofDOFParam3REd, "camDOFParam3", TinaController.SLIDER_SCALE_ZOOM, false); } public void dofDOFParam3REd_changed() { flameTextFieldChanged(data.dofDOFParam3Slider, data.dofDOFParam3REd, "camDOFParam3", TinaController.SLIDER_SCALE_ZOOM, false); } public void dofDOFParam4Slider_stateChanged(ChangeEvent e) { flameSliderChanged(data.dofDOFParam4Slider, data.dofDOFParam4REd, "camDOFParam4", TinaController.SLIDER_SCALE_ZOOM, false); } public void dofDOFParam4REd_changed() { flameTextFieldChanged(data.dofDOFParam4Slider, data.dofDOFParam4REd, "camDOFParam4", TinaController.SLIDER_SCALE_ZOOM, false); } public void dofDOFParam5Slider_stateChanged(ChangeEvent e) { flameSliderChanged(data.dofDOFParam5Slider, data.dofDOFParam5REd, "camDOFParam5", TinaController.SLIDER_SCALE_ZOOM, false); } public void dofDOFParam5REd_changed() { flameTextFieldChanged(data.dofDOFParam5Slider, data.dofDOFParam5REd, "camDOFParam5", TinaController.SLIDER_SCALE_ZOOM, false); } public void dofDOFParam6Slider_stateChanged(ChangeEvent e) { flameSliderChanged(data.dofDOFParam6Slider, data.dofDOFParam6REd, "camDOFParam6", TinaController.SLIDER_SCALE_ZOOM, false); } public void dofDOFParam6REd_changed() { flameTextFieldChanged(data.dofDOFParam6Slider, data.dofDOFParam6REd, "camDOFParam6", TinaController.SLIDER_SCALE_ZOOM, false); } public void spatialOversamplingSlider_stateChanged(ChangeEvent e) { flameSliderChanged(data.tinaSpatialOversamplingSlider, data.tinaSpatialOversamplingREd, "spatialOversampling", 1.0, false); owner.refreshFilterKernelPreviewImg(); } public void spatialOversamplingREd_changed() { flameTextFieldChanged(data.tinaSpatialOversamplingSlider, data.tinaSpatialOversamplingREd, "spatialOversampling", 1.0, false); owner.refreshFilterKernelPreviewImg(); } public void flameTransparencyCbx_changed() { if (!isNoRefresh()) { Flame flame = getCurrFlame(); if (flame != null) { owner.saveUndoPoint(); flame.setBGTransparency(data.bgTransparencyCBx.isSelected()); enableControls(); } } } public void postNoiseFilterCheckBox_changed() { if (!isNoRefresh()) { Flame flame = getCurrFlame(); if (flame != null) { owner.saveUndoPoint(); flame.setPostNoiseFilter(data.tinaPostNoiseFilterCheckBox.isSelected()); enableControls(); } } } public void filterIndicatorCheckBox_changed() { if (!isNoRefresh()) { Flame flame = getCurrFlame(); if (flame != null) { owner.saveUndoPoint(); flame.setSpatialFilterIndicator(data.tinaFilterIndicatorCBx.isSelected()); owner.refreshFlameImage(true, false, 1, true, true); } } } public void postNoiseFilterThresholdSlider_stateChanged(ChangeEvent e) { flameSliderChanged(data.tinaPostNoiseThresholdSlider, data.tinaPostNoiseThresholdField, "postNoiseFilterThreshold", TinaController.SLIDER_SCALE_POST_NOISE_FILTER_THRESHOLD, false); } public void postNoiseFilterThresholdREd_changed() { flameTextFieldChanged(data.tinaPostNoiseThresholdSlider, data.tinaPostNoiseThresholdField, "postNoiseFilterThreshold", TinaController.SLIDER_SCALE_POST_NOISE_FILTER_THRESHOLD, false); } public void foregroundOpacitySlider_stateChanged(ChangeEvent e) { flameSliderChanged(data.foregroundOpacitySlider, data.foregroundOpacityField, "foregroundOpacity", TinaController.SLIDER_SCALE_POST_NOISE_FILTER_THRESHOLD, true); } public void foregroundOpacityREd_changed() { flameTextFieldChanged(data.foregroundOpacitySlider, data.foregroundOpacityField, "foregroundOpacity", TinaController.SLIDER_SCALE_POST_NOISE_FILTER_THRESHOLD, true); } public void postBlurRadiusREd_changed() { flameTextFieldChanged(data.postBlurRadiusSlider, data.postBlurRadiusREd, "postBlurRadius", 1.0, false); } public void postBlurRadiusSlider_changed() { flameSliderChanged(data.postBlurRadiusSlider, data.postBlurRadiusREd, "postBlurRadius", 1.0, false); } public void zBufferScaleREd_changed() { flameTextFieldChanged(data.tinaZBufferScaleSlider, data.tinaZBufferScaleREd, "zBufferScale", TinaController.SLIDER_SCALE_CENTRE, true); } public void zBufferScaleSlider_changed() { flameSliderChanged(data.tinaZBufferScaleSlider, data.tinaZBufferScaleREd, "zBufferScale", TinaController.SLIDER_SCALE_CENTRE, false); } public void postBlurFadeREd_changed() { flameTextFieldChanged(data.postBlurFadeSlider, data.postBlurFadeREd, "postBlurFadeRadius", TinaController.SLIDER_SCALE_AMBIENT, false); } public void postBlurFadeSlider_changed() { flameSliderChanged(data.postBlurFadeSlider, data.postBlurFadeREd, "postBlurFadeRadius", TinaController.SLIDER_SCALE_AMBIENT, false); } public void postBlurFallOffSlider_changed() { flameTextFieldChanged(data.postBlurFallOffSlider, data.postBlurFallOffREd, "postBlurFallOffRadius", TinaController.SLIDER_SCALE_AMBIENT, false); } public void postBlurFallOffREd_changed() { flameSliderChanged(data.postBlurFallOffSlider, data.postBlurFallOffREd, "postBlurFallOffRadius", TinaController.SLIDER_SCALE_AMBIENT, false); } public void solidRenderingCBx_changed() { if (!isNoRefresh()) { Flame flame = getCurrFlame(); if (flame != null) { owner.saveUndoPoint(); flame.getSolidRenderSettings().setSolidRenderingEnabled(data.solidRenderingToggleBtn.isSelected()); if (data.solidRenderingToggleBtn.isSelected()) { flame.setDefaultSolidRenderingSettings(); refreshFlameValues(); } enableControls(); owner.refreshFlameImage(true, false, 1, true, false); } } } public void solidRenderingEnableAOCBx_changed() { if (!isNoRefresh()) { Flame flame = getCurrFlame(); if (flame != null) { owner.saveUndoPoint(); flame.getSolidRenderSettings().setAoEnabled(data.tinaSolidRenderingEnableAOCBx.isSelected()); enableControls(); owner.refreshFlameImage(true, false, 1, true, false); } } } public void randomizeLightPosition() { if (!isNoRefresh()) { DistantLight light = getSolidRenderingSelectedLight(); if (light != null) { owner.saveUndoPoint(); light.setCastShadows(data.tinaSolidRenderingLightCastShadowsCBx.isSelected()); light.setAltitude((0.5 - Math.random()) * 60.0); light.setAzimuth((0.5 - Math.random()) * 40.0); refreshLightPosControls(light); owner.refreshFlameImage(true, false, 1, true, !areShadowsEnabled()); } } } public void solidRenderingLightCastShadowsCBx_changed() { if (!isNoRefresh()) { DistantLight light = getSolidRenderingSelectedLight(); if (light != null) { owner.saveUndoPoint(); light.setCastShadows(data.tinaSolidRenderingLightCastShadowsCBx.isSelected()); enableControls(); owner.refreshFlameImage(true, false, 1, true, true); } } } public void solidRenderingMaterialSpecularColorBtn_clicked() { MaterialSettings material = getSolidRenderingSelectedMaterial(); if (material != null) { owner.undoManager.saveUndoPoint(getCurrFlame()); ResourceManager rm = ResourceManager.all(FilePropertyEditor.class); String title = rm.getString("ColorPropertyEditor.title"); Color selectedColor = JColorChooser.showDialog(rootPanel, title, new Color(Tools.roundColor(material.getPhongRed() * GammaCorrectionFilter.COLORSCL), Tools.roundColor(material.getPhongGreen() * GammaCorrectionFilter.COLORSCL), Tools.roundColor(material.getPhongBlue() * GammaCorrectionFilter.COLORSCL))); if (selectedColor != null) { material.setPhongRed((double) selectedColor.getRed() / GammaCorrectionFilter.COLORSCL); material.setPhongGreen((double) selectedColor.getGreen() / GammaCorrectionFilter.COLORSCL); material.setPhongBlue((double) selectedColor.getBlue() / GammaCorrectionFilter.COLORSCL); owner.refreshFlameImage(true, false, 1, true, true); refreshSolidRenderMaterialSpecularColorIndicator(); } } } public void randomizeLightColor() { DistantLight light = getSolidRenderingSelectedLight(); if (light != null) { owner.undoManager.saveUndoPoint(getCurrFlame()); List<RGBColor> rndColors = new AllRandomGradientGenerator().generateKeyFrames(7); RGBColor rndColor = rndColors.get((int) (Math.random() * rndColors.size())); Color selectedColor = new Color(rndColor.getRed(), rndColor.getGreen(), rndColor.getBlue()); setLightColor(light, selectedColor); } } public void solidRenderingLightColorBtn_clicked() { DistantLight light = getSolidRenderingSelectedLight(); if (light != null) { owner.undoManager.saveUndoPoint(getCurrFlame()); ResourceManager rm = ResourceManager.all(FilePropertyEditor.class); String title = rm.getString("ColorPropertyEditor.title"); Color selectedColor = JColorChooser.showDialog(rootPanel, title, new Color(Tools.roundColor(light.getRed() * GammaCorrectionFilter.COLORSCL), Tools.roundColor(light.getGreen() * GammaCorrectionFilter.COLORSCL), Tools.roundColor(light.getBlue() * GammaCorrectionFilter.COLORSCL))); setLightColor(light, selectedColor); } } private void setLightColor(DistantLight light, Color selectedColor) { if (selectedColor != null) { light.setRed((double) selectedColor.getRed() / GammaCorrectionFilter.COLORSCL); light.setGreen((double) selectedColor.getGreen() / GammaCorrectionFilter.COLORSCL); light.setBlue((double) selectedColor.getBlue() / GammaCorrectionFilter.COLORSCL); owner.refreshFlameImage(true, false, 1, true, true); refreshSolidRenderLightColorIndicator(); } } public void solidRenderingSelectedMaterialCmb_changed() { refreshSolidRenderingMaterialControls(); } public void solidRenderingSelectedLightCmb_changed() { refreshSolidRenderingLightControls(); } public void solidRenderingAddLightBtn_clicked() { getCurrFlame().getSolidRenderSettings().addLight(); setNoRefresh(true); try { refreshSolidRenderingSelectedLightCmb(); data.tinaSolidRenderingSelectedLightCmb.setSelectedIndex(getCurrFlame().getSolidRenderSettings().getLights().size() - 1); } finally { setNoRefresh(false); } refreshSolidRenderingLightControls(); enableSolidRenderUI(); owner.refreshFlameImage(true, false, 1, true, true); } public void solidRenderingDeleteLightBtn_clicked() { getCurrFlame().getSolidRenderSettings().getLights().remove(data.tinaSolidRenderingSelectedLightCmb.getSelectedIndex()); setNoRefresh(true); try { refreshSolidRenderingSelectedLightCmb(); if (getCurrFlame().getSolidRenderSettings().getLights().size() > 0) { data.tinaSolidRenderingSelectedLightCmb.setSelectedIndex(0); } } finally { setNoRefresh(false); } refreshSolidRenderingLightControls(); enableSolidRenderUI(); owner.refreshFlameImage(true, false, 1, true, true); } public void solidRenderingResetLightsBtn_clicked() { setNoRefresh(true); try { getCurrFlame().getSolidRenderSettings().setupDefaultLights(); refreshSolidRenderingSelectedLightCmb(); data.tinaSolidRenderingSelectedLightCmb.setSelectedIndex(0); } finally { setNoRefresh(false); } refreshSolidRenderingLightControls(); enableSolidRenderUI(); owner.refreshFlameImage(true, false, 1, true, true); } public void solidRenderingResetHardShadowsBtn_clicked() { setNoRefresh(true); try { getCurrFlame().getSolidRenderSettings().setupDefaultHardShadowOptions(); } finally { setNoRefresh(false); } refreshSolidRenderingGlobals(); enableSolidRenderUI(); owner.refreshFlameImage(true, false, 1, true, true); } public void solidRenderingResetAmbientShadowsBtn_clicked() { setNoRefresh(true); try { getCurrFlame().getSolidRenderSettings().setupDefaultAmbientShadowOptions(); } finally { setNoRefresh(false); } refreshSolidRenderingGlobals(); enableSolidRenderUI(); owner.refreshFlameImage(true, false, 1, true, true); } public void solidRenderingAddMaterialBtn_clicked() { getCurrFlame().getSolidRenderSettings().addMaterial(); setNoRefresh(true); try { refreshSolidRenderingSelectedMaterialCmb(); data.tinaSolidRenderingSelectedMaterialCmb.setSelectedIndex(getCurrFlame().getSolidRenderSettings().getMaterials().size() - 1); } finally { setNoRefresh(false); } refreshSolidRenderingMaterialControls(); enableSolidRenderUI(); owner.refreshFlameImage(true, false, 1, true, true); } public void solidRenderingDeleteMaterialBtn_clicked() { getCurrFlame().getSolidRenderSettings().getMaterials().remove(data.tinaSolidRenderingSelectedMaterialCmb.getSelectedIndex()); setNoRefresh(true); try { refreshSolidRenderingSelectedMaterialCmb(); if (getCurrFlame().getSolidRenderSettings().getMaterials().size() > 0) { data.tinaSolidRenderingSelectedMaterialCmb.setSelectedIndex(0); } } finally { setNoRefresh(false); } refreshSolidRenderingMaterialControls(); enableSolidRenderUI(); owner.refreshFlameImage(true, false, 1, true, true); } public void solidRenderingResetMaterialsBtn_clicked() { setNoRefresh(true); try { getCurrFlame().getSolidRenderSettings().setupDefaultMaterials(); refreshSolidRenderingSelectedMaterialCmb(); data.tinaSolidRenderingSelectedMaterialCmb.setSelectedIndex(0); } finally { setNoRefresh(false); } refreshSolidRenderingMaterialControls(); enableSolidRenderUI(); owner.refreshFlameImage(true, false, 1, true, true); } public void solidRenderingMaterialDiffuseResponseCmb_changed() { if (!isNoRefresh()) { MaterialSettings material = getSolidRenderingSelectedMaterial(); if (material != null) { owner.saveUndoPoint(); material.setLightDiffFunc((LightDiffFunc) data.tinaSolidRenderingMaterialDiffuseResponseCmb.getSelectedItem()); owner.refreshFlameImage(true, false, 1, true, true); } } } public void solidRenderingMaterialReflectionMappingCmb_changed() { if (!isNoRefresh()) { MaterialSettings material = getSolidRenderingSelectedMaterial(); if (material != null) { owner.saveUndoPoint(); material.setReflectionMapping((ReflectionMapping) data.tinaSolidRenderingMaterialReflectionMappingCmb.getSelectedItem()); owner.refreshFlameImage(true, false, 1, true, true); } } } private void textFieldChanged(String property, Object value, double propValue, boolean pAllowUseCache) { Class<?> cls = value.getClass(); try { Field field = cls.getDeclaredField(property); field.setAccessible(true); Class<?> fieldCls = field.getType(); if (fieldCls == double.class || fieldCls == Double.class) { field.setDouble(value, propValue); } else if (fieldCls == int.class || fieldCls == Integer.class) { field.setInt(value, Tools.FTOI(propValue)); } else { throw new IllegalStateException(); } } catch (Throwable ex) { ex.printStackTrace(); } owner.refreshFlameImage(true, false, 1, true, pAllowUseCache); } private void solidRenderingTextFieldChanged(JSlider pSlider, JWFNumberField pTextField, String pProperty, double pSliderScale, boolean pAllowUseCache) { if (isNoRefresh() || getCurrFlame() == null) return; setNoRefresh(true); try { double propValue = Tools.stringToDouble(pTextField.getText()); pSlider.setValue(Tools.FTOI(propValue * pSliderScale)); Object value = getCurrFlame().getSolidRenderSettings(); textFieldChanged(pProperty, value, propValue, pAllowUseCache); } finally { setNoRefresh(false); } } private void solidRenderingSliderChanged(JSlider pSlider, JWFNumberField pTextField, String pProperty, double pSliderScale, boolean pAllowUseCache) { if (isNoRefresh() || getCurrFlame() == null) return; setNoRefresh(true); try { double propValue = pSlider.getValue() / pSliderScale; pTextField.setText(Tools.doubleToString(propValue)); Object value = getCurrFlame().getSolidRenderSettings(); textFieldChanged(pProperty, value, propValue, pAllowUseCache); } finally { setNoRefresh(false); } } private void solidRenderingMaterialTextFieldChanged(JSlider pSlider, JWFNumberField pTextField, String pProperty, double pSliderScale, boolean pAllowUseCache) { if (isNoRefresh() || getCurrFlame() == null) return; int idx = getRenderSettingsMaterialIdx(); if (idx < 0 || idx >= getCurrFlame().getSolidRenderSettings().getMaterials().size()) return; setNoRefresh(true); try { double propValue = Tools.stringToDouble(pTextField.getText()); pSlider.setValue(Tools.FTOI(propValue * pSliderScale)); Object value = getCurrFlame().getSolidRenderSettings().getMaterials().get(idx); textFieldChanged(pProperty, value, propValue, pAllowUseCache); } finally { setNoRefresh(false); } } private void solidRenderingMaterialSliderChanged(JSlider pSlider, JWFNumberField pTextField, String pProperty, double pSliderScale, boolean pAllowUseCache) { if (isNoRefresh() || getCurrFlame() == null) return; int idx = getRenderSettingsMaterialIdx(); if (idx < 0 || idx >= getCurrFlame().getSolidRenderSettings().getMaterials().size()) return; setNoRefresh(true); try { double propValue = pSlider.getValue() / pSliderScale; pTextField.setText(Tools.doubleToString(propValue)); Object value = getCurrFlame().getSolidRenderSettings().getMaterials().get(idx); textFieldChanged(pProperty, value, propValue, pAllowUseCache); } finally { setNoRefresh(false); } } private void solidRenderingLightTextFieldChanged(JSlider pSlider, JWFNumberField pTextField, String pProperty, double pSliderScale, boolean pAllowUseCache) { if (isNoRefresh() || getCurrFlame() == null) return; int idx = getRenderSettingsLightIdx(); if (idx < 0 || idx >= getCurrFlame().getSolidRenderSettings().getLights().size()) return; setNoRefresh(true); try { double propValue = Tools.stringToDouble(pTextField.getText()); pSlider.setValue(Tools.FTOI(propValue * pSliderScale)); Object value = getCurrFlame().getSolidRenderSettings().getLights().get(idx); textFieldChanged(pProperty, value, propValue, pAllowUseCache); } finally { setNoRefresh(false); } } private int getRenderSettingsLightIdx() { return data.tinaSolidRenderingSelectedLightCmb.getSelectedIndex(); } private void solidRenderingLightSliderChanged(JSlider pSlider, JWFNumberField pTextField, String pProperty, double pSliderScale, boolean pAllowUseCache) { if (isNoRefresh() || getCurrFlame() == null) return; int idx = getRenderSettingsLightIdx(); if (idx < 0 || idx >= getCurrFlame().getSolidRenderSettings().getLights().size()) return; setNoRefresh(true); try { double propValue = pSlider.getValue() / pSliderScale; pTextField.setText(Tools.doubleToString(propValue)); Object value = getCurrFlame().getSolidRenderSettings().getLights().get(idx); textFieldChanged(pProperty, value, propValue, pAllowUseCache); } finally { setNoRefresh(false); } } private int getRenderSettingsMaterialIdx() { return data.tinaSolidRenderingSelectedMaterialCmb.getSelectedIndex(); } public void solidRenderingMaterialDiffuseREd_changed() { solidRenderingMaterialTextFieldChanged(data.tinaSolidRenderingMaterialDiffuseSlider, data.tinaSolidRenderingMaterialDiffuseREd, "diffuse", TinaController.SLIDER_SCALE_CENTRE, true); } public void solidRenderingAOIntensityREd_changed() { solidRenderingTextFieldChanged(data.tinaSolidRenderingAOIntensitySlider, data.tinaSolidRenderingAOIntensityREd, "aoIntensity", TinaController.SLIDER_SCALE_CENTRE, true); } public void solidRenderingAOSearchRadiusREd_changed() { solidRenderingTextFieldChanged(data.tinaSolidRenderingAOSearchRadiusSlider, data.tinaSolidRenderingAOSearchRadiusREd, "aoSearchRadius", TinaController.SLIDER_SCALE_CENTRE, false); } public void solidRenderingAOBlurRadiusREd_changed() { solidRenderingTextFieldChanged(data.tinaSolidRenderingAOBlurRadiusSlider, data.tinaSolidRenderingAOBlurRadiusREd, "aoBlurRadius", TinaController.SLIDER_SCALE_CENTRE, false); } public void solidRenderingAOFalloffREd_changed() { solidRenderingTextFieldChanged(data.tinaSolidRenderingAOFalloffSlider, data.tinaSolidRenderingAOFalloffREd, "aoFalloff", TinaController.SLIDER_SCALE_CENTRE, false); } public void solidRenderingAORadiusSamplesREd_changed() { solidRenderingTextFieldChanged(data.tinaSolidRenderingAORadiusSamplesSlider, data.tinaSolidRenderingAORadiusSamplesREd, "aoRadiusSamples", 1.0, false); } public void solidRenderingAOAzimuthSamplesREd_changed() { solidRenderingTextFieldChanged(data.tinaSolidRenderingAOAzimuthSamplesSlider, data.tinaSolidRenderingAOAzimuthSamplesREd, "aoAzimuthSamples", 1.0, false); } public void solidRenderingAOAffectDiffuseREd_changed() { solidRenderingTextFieldChanged(data.tinaSolidRenderingAOAffectDiffuseSlider, data.tinaSolidRenderingAOAffectDiffuseREd, "aoAffectDiffuse", TinaController.SLIDER_SCALE_CENTRE, false); } public void solidRenderingMaterialAmbientREd_changed() { solidRenderingMaterialTextFieldChanged(data.tinaSolidRenderingMaterialAmbientSlider, data.tinaSolidRenderingMaterialAmbientREd, "ambient", TinaController.SLIDER_SCALE_CENTRE, true); } public void solidRenderingMaterialSpecularREd_changed() { solidRenderingMaterialTextFieldChanged(data.tinaSolidRenderingMaterialSpecularSlider, data.tinaSolidRenderingMaterialSpecularREd, "phong", TinaController.SLIDER_SCALE_CENTRE, true); } public void solidRenderingMaterialSpecularSharpnessREd_changed() { solidRenderingMaterialTextFieldChanged(data.tinaSolidRenderingMaterialSpecularSharpnessSlider, data.tinaSolidRenderingMaterialSpecularSharpnessREd, "phongSize", TinaController.SLIDER_SCALE_CENTRE, true); } public void solidRenderingLightAltitudeREd_changed() { solidRenderingLightTextFieldChanged(data.tinaSolidRenderingLightAltitudeSlider, data.tinaSolidRenderingLightAltitudeREd, "altitude", TinaController.SLIDER_SCALE_CENTRE, !areShadowsEnabled()); } public void solidRenderingLightAzimuthREd_changed() { solidRenderingLightTextFieldChanged(data.tinaSolidRenderingLightAzimuthSlider, data.tinaSolidRenderingLightAzimuthREd, "azimuth", TinaController.SLIDER_SCALE_CENTRE, !areShadowsEnabled()); } public void solidRenderingLightIntensityREd_changed() { solidRenderingLightTextFieldChanged(data.tinaSolidRenderingLightIntensitySlider, data.tinaSolidRenderingLightIntensityREd, "intensity", TinaController.SLIDER_SCALE_CENTRE, true); } public void solidRenderingShadowIntensityREd_changed() { solidRenderingLightTextFieldChanged(data.tinaSolidRenderingShadowIntensitySlider, data.tinaSolidRenderingShadowIntensityREd, "shadowIntensity", TinaController.SLIDER_SCALE_CENTRE, false); } public void solidRenderingAOIntensitySlider_stateChanged(ChangeEvent e) { solidRenderingSliderChanged(data.tinaSolidRenderingAOIntensitySlider, data.tinaSolidRenderingAOIntensityREd, "aoIntensity", TinaController.SLIDER_SCALE_CENTRE, true); } public void solidRenderingAOAffectDiffuseSlider_stateChanged(ChangeEvent e) { solidRenderingSliderChanged(data.tinaSolidRenderingAOAffectDiffuseSlider, data.tinaSolidRenderingAOAffectDiffuseREd, "aoAffectDiffuse", TinaController.SLIDER_SCALE_CENTRE, false); } public void solidRenderingAOSearchRadiusSlider_stateChanged(ChangeEvent e) { solidRenderingSliderChanged(data.tinaSolidRenderingAOSearchRadiusSlider, data.tinaSolidRenderingAOSearchRadiusREd, "aoSearchRadius", TinaController.SLIDER_SCALE_CENTRE, false); } public void solidRenderingAOBlurRadiusSlider_stateChanged(ChangeEvent e) { solidRenderingSliderChanged(data.tinaSolidRenderingAOBlurRadiusSlider, data.tinaSolidRenderingAOBlurRadiusREd, "aoBlurRadius", TinaController.SLIDER_SCALE_CENTRE, false); } public void solidRenderingAOFalloffSlider_stateChanged(ChangeEvent e) { solidRenderingSliderChanged(data.tinaSolidRenderingAOFalloffSlider, data.tinaSolidRenderingAOFalloffREd, "aoFalloff", TinaController.SLIDER_SCALE_CENTRE, false); } public void solidRenderingAORadiusSamplesSlider_stateChanged(ChangeEvent e) { solidRenderingSliderChanged(data.tinaSolidRenderingAORadiusSamplesSlider, data.tinaSolidRenderingAORadiusSamplesREd, "aoRadiusSamples", 1.0, false); } public void solidRenderingAOAzimuthSamplesSlider_stateChanged(ChangeEvent e) { solidRenderingSliderChanged(data.tinaSolidRenderingAOAzimuthSamplesSlider, data.tinaSolidRenderingAOAzimuthSamplesREd, "aoAzimuthSamples", 1.0, false); } public void solidRenderingMaterialDiffuseSlider_stateChanged(ChangeEvent e) { solidRenderingMaterialSliderChanged(data.tinaSolidRenderingMaterialDiffuseSlider, data.tinaSolidRenderingMaterialDiffuseREd, "diffuse", TinaController.SLIDER_SCALE_CENTRE, true); } public void solidRenderingMaterialAmbientSlider_stateChanged(ChangeEvent e) { solidRenderingMaterialSliderChanged(data.tinaSolidRenderingMaterialAmbientSlider, data.tinaSolidRenderingMaterialAmbientREd, "ambient", TinaController.SLIDER_SCALE_CENTRE, true); } public void solidRenderingMaterialSpecularSlider_stateChanged(ChangeEvent e) { solidRenderingMaterialSliderChanged(data.tinaSolidRenderingMaterialSpecularSlider, data.tinaSolidRenderingMaterialSpecularREd, "phong", TinaController.SLIDER_SCALE_CENTRE, true); } public void solidRenderingMaterialSpecularSharpnessSlider_stateChanged(ChangeEvent e) { solidRenderingMaterialSliderChanged(data.tinaSolidRenderingMaterialSpecularSharpnessSlider, data.tinaSolidRenderingMaterialSpecularSharpnessREd, "phongSize", TinaController.SLIDER_SCALE_CENTRE, true); } public void solidRenderingLightAltitudeSlider_stateChanged(ChangeEvent e) { solidRenderingLightSliderChanged(data.tinaSolidRenderingLightAltitudeSlider, data.tinaSolidRenderingLightAltitudeREd, "altitude", TinaController.SLIDER_SCALE_CENTRE, !areShadowsEnabled()); } private boolean areShadowsEnabled() { Flame flame = getCurrFlame(); return flame != null && flame.getSolidRenderSettings().isSolidRenderingEnabled() && !ShadowType.OFF.equals(flame.getSolidRenderSettings().getShadowType()); } public void solidRenderingLightAzimuthSlider_stateChanged(ChangeEvent e) { solidRenderingLightSliderChanged(data.tinaSolidRenderingLightAzimuthSlider, data.tinaSolidRenderingLightAzimuthREd, "azimuth", TinaController.SLIDER_SCALE_CENTRE, !areShadowsEnabled()); } public void solidRenderingLightIntensitySlider_stateChanged(ChangeEvent e) { solidRenderingLightSliderChanged(data.tinaSolidRenderingLightIntensitySlider, data.tinaSolidRenderingLightIntensityREd, "intensity", TinaController.SLIDER_SCALE_CENTRE, true); } public void solidRenderingShadowIntensitySlider_stateChanged(ChangeEvent e) { solidRenderingLightSliderChanged(data.tinaSolidRenderingShadowIntensitySlider, data.tinaSolidRenderingShadowIntensityREd, "shadowIntensity", TinaController.SLIDER_SCALE_CENTRE, false); } public void solidRenderingMaterialRemoveReflMapBtn_clicked() { MaterialSettings material = getSolidRenderingSelectedMaterial(); if (material != null) { owner.saveUndoPoint(); material.setReflMapFilename(null); refreshReflMapColorIndicator(); owner.refreshFlameImage(true, false, 1, true, true); } } public void solidRenderingMaterialSelectReflMapBtn_clicked() { MaterialSettings material = getSolidRenderingSelectedMaterial(); if (material != null) { JFileChooser chooser = new ImageFileChooser(Tools.FILEEXT_PNG); if (Prefs.getPrefs().getInputImagePath() != null) { try { if (getCurrFlame().getBGImageFilename().length() > 0) { chooser.setSelectedFile(new File(getCurrFlame().getBGImageFilename())); } else { chooser.setCurrentDirectory(new File(Prefs.getPrefs().getInputImagePath())); } } catch (Exception ex) { ex.printStackTrace(); } } if (chooser.showOpenDialog(owner.getFlamePanel()) == JFileChooser.APPROVE_OPTION) { File file = chooser.getSelectedFile(); try { String filename = file.getAbsolutePath(); WFImage img = RessourceManager.getImage(filename); if (img.getImageWidth() < 2 || img.getImageHeight() < 2 || !(img instanceof SimpleImage)) { throw new Exception("Invalid image"); } Prefs.getPrefs().setLastInputImageFile(file); owner.saveUndoPoint(); material.setReflMapFilename(filename); refreshReflMapColorIndicator(); owner.refreshFlameImage(true, false, 1, true, false); } catch (Throwable ex) { owner.errorHandler.handleError(ex); } } } } private void refreshReflMapColorIndicator() { MaterialSettings material = getSolidRenderingSelectedMaterial(); Color color = Color.BLACK; if (material != null && material.getReflMapFilename() != null && !material.getReflMapFilename().isEmpty()) { try { WFImage img = RessourceManager.getImage(material.getReflMapFilename()); if (img instanceof SimpleImage) { SimpleImage sImg = (SimpleImage) img; int samples = 6; int dx = sImg.getImageWidth() / samples; int dy = sImg.getImageHeight() / samples; double r = 0.0, g = 0.0, b = 0.0; for (int x = 0; x < sImg.getImageWidth(); x += dx) { for (int y = 0; y < sImg.getImageHeight(); y += dy) { r += sImg.getRValue(x, y); g += sImg.getGValue(x, y); b += sImg.getBValue(x, y); } } color = new Color(Tools.roundColor(r / (samples * samples)), Tools.roundColor(g / (samples * samples)), Tools.roundColor(b / (samples * samples))); } else { color = Color.RED; } } catch (Exception e) { e.printStackTrace(); } } data.tinaSolidRenderingMaterialReflMapBtn.setBackground(color); } public void solidRenderingMaterialReflectionMapIntensityREd_changed() { solidRenderingMaterialTextFieldChanged(data.tinaSolidRenderingMaterialReflectionMapIntensitySlider, data.tinaSolidRenderingMaterialReflectionMapIntensityREd, "reflMapIntensity", TinaController.SLIDER_SCALE_CENTRE, true); } public void solidRenderingMaterialReflectionMapIntensitySlider_stateChanged(ChangeEvent e) { solidRenderingMaterialSliderChanged(data.tinaSolidRenderingMaterialReflectionMapIntensitySlider, data.tinaSolidRenderingMaterialReflectionMapIntensityREd, "reflMapIntensity", TinaController.SLIDER_SCALE_CENTRE, true); } public void solidRenderingShadowTypeCmb_changed() { if (!isNoRefresh()) { Flame flame = getCurrFlame(); if (flame != null) { SolidRenderSettings settings = flame.getSolidRenderSettings(); owner.saveUndoPoint(); settings.setShadowType((ShadowType) data.tinaSolidRenderingShadowTypeCmb.getSelectedItem()); enableControls(); owner.refreshFlameImage(true, false, 1, true, false); } } } public void solidRenderingShadowmapSizeCmb_changed() { if (!isNoRefresh()) { Flame flame = getCurrFlame(); if (flame != null) { SolidRenderSettings settings = flame.getSolidRenderSettings(); owner.saveUndoPoint(); settings.setShadowmapSize(Integer.parseInt((String) data.tinaSolidRenderingShadowmapSizeCmb.getSelectedItem())); owner.refreshFlameImage(true, false, 1, true, false); } } } public void solidRenderingShadowSmoothRadiusREd_changed() { solidRenderingTextFieldChanged(data.tinaSolidRenderingShadowSmoothRadiusSlider, data.tinaSolidRenderingShadowSmoothRadiusREd, "shadowSmoothRadius", TinaController.SLIDER_SCALE_CENTRE, false); } public void solidRenderingShadowmapBiasREd_changed() { solidRenderingTextFieldChanged(data.tinaSolidRenderingShadowmapBiasSlider, data.tinaSolidRenderingShadowmapBiasREd, "shadowmapBias", TinaController.SLIDER_SCALE_CENTRE, false); } public void solidRenderingShadowmapBiasSlider_stateChanged(ChangeEvent e) { solidRenderingSliderChanged(data.tinaSolidRenderingShadowmapBiasSlider, data.tinaSolidRenderingShadowmapBiasREd, "shadowmapBias", TinaController.SLIDER_SCALE_CENTRE, false); } public void solidRenderingShadowSmoothRadiusSlider_stateChanged(ChangeEvent e) { solidRenderingSliderChanged(data.tinaSolidRenderingShadowSmoothRadiusSlider, data.tinaSolidRenderingShadowSmoothRadiusREd, "shadowSmoothRadius", TinaController.SLIDER_SCALE_CENTRE, false); } public void solidRenderingPostBokehActivationSlider_stateChanged(ChangeEvent e) { solidRenderingSliderChanged(data.postBokehActivationSlider, data.postBokehActivationREd, "postBokehActivation", TinaController.SLIDER_SCALE_CENTRE, true); } public void solidRenderingPostBokehSizeREd_changed() { solidRenderingTextFieldChanged(data.postBokehSizeSlider, data.postBokehSizeREd, "postBokehSize", TinaController.SLIDER_SCALE_CENTRE, true); } public void solidRenderingPostBokehBrightnessSlider_stateChanged(ChangeEvent e) { solidRenderingSliderChanged(data.postBokehBrightnessSlider, data.postBokehBrightnessREd, "postBokehBrightness", TinaController.SLIDER_SCALE_CENTRE, true); } public void solidRenderingPostBokehIntensityREd_changed() { solidRenderingTextFieldChanged(data.postBokehIntensitySlider, data.postBokehIntensityREd, "postBokehIntensity", TinaController.SLIDER_SCALE_CENTRE, true); } public void solidRenderingPostBokehSizeSlider_stateChanged(ChangeEvent e) { solidRenderingSliderChanged(data.postBokehSizeSlider, data.postBokehSizeREd, "postBokehSize", TinaController.SLIDER_SCALE_CENTRE, true); } public void solidRenderingPostBokehIntensitySlider_stateChanged(ChangeEvent e) { solidRenderingSliderChanged(data.postBokehIntensitySlider, data.postBokehIntensityREd, "postBokehIntensity", TinaController.SLIDER_SCALE_CENTRE, true); } public void solidRenderingPostBokehFilterKernelCmb_changed() { if (!isNoRefresh()) { Flame flame = getCurrFlame(); if (flame != null) { SolidRenderSettings settings = flame.getSolidRenderSettings(); owner.saveUndoPoint(); settings.setPostBokehFilterKernel((FilterKernelType) data.postBokehFilterKernelCmb.getSelectedItem()); } } } public void solidRenderingPostBokehBrightnessREd_changed() { solidRenderingTextFieldChanged(data.postBokehBrightnessSlider, data.postBokehBrightnessREd, "postBokehBrightness", TinaController.SLIDER_SCALE_CENTRE, true); } public void solidRenderingPostBokehActivationREd_changed() { solidRenderingTextFieldChanged(data.postBokehActivationSlider, data.postBokehActivationREd, "postBokehActivation", TinaController.SLIDER_SCALE_CENTRE, true); } public void fillFilterKernelCmb(FilteringType filteringType) { data.filterKernelCmb.removeAllItems(); switch (filteringType) { case GLOBAL_SHARPENING: for (FilterKernelType kernel : FilterKernelType.getSharpeningFilters()) { data.filterKernelCmb.addItem(kernel); } break; case GLOBAL_SMOOTHING: for (FilterKernelType kernel : FilterKernelType.getSmoothingFilters()) { data.filterKernelCmb.addItem(kernel); } break; case ADAPTIVE: for (FilterKernelType kernel : FilterKernelType.getAdapativeFilters()) { data.filterKernelCmb.addItem(kernel); } break; } } }