@Override public void propertyChange(PropertyChangeEvent evt) { if (!"model".equals(evt.getPropertyName())) { return; } final ImageInfoEditorModel oldModel = (ImageInfoEditorModel) evt.getOldValue(); final ImageInfoEditorModel newModel = (ImageInfoEditorModel) evt.getNewValue(); if (oldModel != null) { oldModel.removeChangeListener(this); } if (newModel != null) { newModel.addChangeListener(this); } updateStxOverlayComponent(); } }
public void computeZoomOutVertical() { getModel().setHistogramViewGain(getModel().getHistogramViewGain() * (1.0 / 1.4)); repaint(); }
private boolean isValidModel() { if (model == null) { return false; } return model.getMinSample() <= model.getMaxSample() && model.getSampleScaling() != null && model.getSampleStx() != null; }
private double getMinHistogramViewBinIndex() { if (!isHistogramAvailable()) { return -1.0; } final double minHistogramSample = model.getMinSample(); final double minHistogramViewSample = model.getMinHistogramViewSample(); if (minHistogramSample != minHistogramViewSample) { final double a = scaleInverse(minHistogramViewSample) - scaleInverse(minHistogramSample); final double b = scaleInverse(model.getMaxSample()) - scaleInverse(minHistogramSample); return (a / b) * model.getHistogramBins().length; } return 0.0; }
@Override public void updateFormModel(ProductSceneView productSceneView) { final ImageInfoEditorModel oldModel = imageInfoEditor.getModel(); final ImageInfo imageInfo = parentForm.getImageInfo(); final ImageInfoEditorModel newModel = new ImageInfoEditorModel1B(imageInfo); imageInfoEditor.setModel(newModel); final RasterDataNode raster = productSceneView.getRaster(); setLogarithmicDisplay(raster, newModel.getImageInfo().isLogScaled()); if (oldModel != null) { newModel.setHistogramViewGain(oldModel.getHistogramViewGain()); newModel.setMinHistogramViewSample(oldModel.getMinHistogramViewSample()); newModel.setMaxHistogramViewSample(oldModel.getMaxHistogramViewSample()); } if (newModel.getSliderSample(0) < newModel.getMinHistogramViewSample() || newModel.getSliderSample(newModel.getSliderCount() - 1) > newModel.getMaxHistogramViewSample()) { imageInfoEditor.computeZoomInToSliderLimits(); } discreteCheckBox.setDiscreteColorsMode(imageInfo.getColorPaletteDef().isDiscrete()); logDisplayButton.setSelected(newModel.getImageInfo().isLogScaled()); parentForm.revalidateToolViewPaneControl(); }
stxOverlayComponent.add(labels); labels.add(new JLabel("Name: " + model.getParameterName())); labels.add(new JLabel("Unit: " + model.getParameterUnit())); final Stx stx = model.getSampleStx(); if (stx == null) { return stxOverlayComponent; labels.add(new JLabel("Min: " + getValueForDisplay(model.getMinSample()))); labels.add(new JLabel("Max: " + getValueForDisplay(model.getMaxSample()))); if (stx.getResolutionLevel() > 0 && model.getSampleScaling() == Scaling.IDENTITY) { final ActionLabel label = new ActionLabel("Rough statistics!"); label.setToolTipText("Click to compute accurate statistics.");
public final void setModel(final ImageInfoEditorModel model) { final ImageInfoEditorModel oldModel = this.model; if (oldModel != model) { this.model = model; deinstallMouseListener(); if (oldModel != null) { oldModel.removeChangeListener(modelCL); } if (this.model != null) { roundFactor = MathUtils.computeRoundFactor(this.model.getMinSample(), this.model.getMaxSample(), 2); installMouseListener(); model.addChangeListener(modelCL); } firePropertyChange(PROPERTY_NAME_MODEL, oldModel, this.model); fireStateChanged(); } if (isShowing()) { repaint(); } }
private double getBinCountInRange(double minSample, double maxSample) { if (!isHistogramAvailable()) { return -1.0; } final double minHistogramSample = model.getMinSample(); final double maxHistogramSample = model.getMaxSample(); if (minSample >= maxHistogramSample || maxSample <= minHistogramSample) { return 0.0; } minSample = Math.max(minSample, minHistogramSample); maxSample = Math.min(maxSample, maxHistogramSample); final double a = scaleInverse(maxSample) - scaleInverse(minSample); final double b = scaleInverse(maxHistogramSample) - scaleInverse(minHistogramSample); return (a / b) * model.getHistogramBins().length; }
private double getDisplayableBinCount() { final double max = Math.min(getMaxSample(), getModel().getMaxHistogramViewSample()); final double min = Math.max(getMinSample(), getModel().getMinHistogramViewSample()); return getBinCountInRange(min, max); }
private int getNearestSliderIndex(int x) { int nearestIndex = INVALID_INDEX; double minDx = Float.MAX_VALUE; double dx = 0.0; for (int i = 0; i < getSliderCount(); i++) { dx = getAbsoluteSliderPos(getSliderSample(i)) - x; if (Math.abs(dx) <= minDx) { nearestIndex = i; minDx = Math.abs(dx); } } // Find correct index for two points at the same, last position if (nearestIndex == getSliderCount() - 1) { final int i = getSliderCount() - 1; if (getAbsoluteSliderPos(getSliderSample(i - 1)) == getAbsoluteSliderPos(getSliderSample(i))) { nearestIndex = dx <= 0.0 ? i : i - 1; } } return nearestIndex; }
private void drawHistogram(Graphics2D g2d) { if (model.isHistogramAvailable()) { final Paint oldPaint = g2d.getPaint(); g2d.setPaint(Color.DARK_GRAY); final int[] histogramBins = model.getHistogramBins(); final double maxHistogramCounts = getMaxVisibleHistogramCounts(histogramBins, 1.0 / 16.0); final double viewBinCount = getHistogramViewBinCount(); final double binsPerPixel = viewBinCount / histoRect.width; final double maxBarHeight = 0.9 * histoRect.height; final double gain = model.getHistogramViewGain(); final double countsScale = (gain * maxBarHeight) / maxHistogramCounts; final Rectangle2D.Double r = new Rectangle2D.Double();
public void compute100Percent() { computeFactors(); setFirstSliderSample(getModel().getMinSample()); setLastSliderSample(getModel().getMaxSample()); partitionSliders(false); computeZoomInToSliderLimits(); }
@Override public void actionPerformed(ActionEvent e) { assert getModel() != null : "getModel() != null"; if (index != INVALID_INDEX && index < getModel().getSliderCount() - 1) { getModel().createSliderAfter(index); } hidePopup(); applyChanges(); } });
private double scaleInverse(double value) { assert model != null; return model.getSampleScaling().scaleInverse(value); }
private double getMinSample() { return getModel().getMinSample(); }
private double getMaxSample() { return getModel().getMaxSample(); }
vc.addProperty(Property.create("sample", getSliderSample(sliderIndex))); vc.getDescriptor("sample").setDisplayName("sample"); vc.getDescriptor("sample").setUnit(getModel().getParameterUnit()); final ValueRange valueRange; if (sliderIndex == 0) {
public void compute95Percent() { final Histogram histogram = new Histogram(getModel().getHistogramBins(), scaleInverse(getModel().getMinSample()), scaleInverse(getModel().getMaxSample())); final Range autoStretchRange = histogram.findRangeFor95Percent(); computeFactors(); setFirstSliderSample(scale(autoStretchRange.getMin())); setLastSliderSample(scale(autoStretchRange.getMax())); partitionSliders(false); computeZoomInToSliderLimits(); }
private double getNormalizedHistogramViewSampleValue(double sample) { final double minVisibleSample = scaleInverse(getModel().getMinHistogramViewSample()); final double maxVisibleSample = scaleInverse(getModel().getMaxHistogramViewSample()); sample = scaleInverse(sample); double delta = maxVisibleSample - minVisibleSample; if (delta == 0 || Double.isNaN(delta)) { delta = 1; } return (sample - minVisibleSample) / delta; }
private boolean isLastSliderDragged() { return getDraggedSliderIndex() == getSliderCount() - 1; }