📄 contourplot.java
字号:
crosshairState.updateCrosshairY(transY); } } } g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, antiAlias); return; } /** * Draws the visual representation of a single data item. * * @param g2 the graphics device. * @param dataArea the area within which the data is being drawn. * @param info collects information about the drawing. * @param plot the plot (can be used to obtain standard color information etc). * @param domainAxis the domain (horizontal) axis. * @param rangeAxis the range (vertical) axis. * @param colorBar the color bar axis. * @param data the dataset. * @param crosshairState information about crosshairs on a plot. */ public void pointRenderer(Graphics2D g2, Rectangle2D dataArea, PlotRenderingInfo info, ContourPlot plot, ValueAxis domainAxis, ValueAxis rangeAxis, ColorBar colorBar, ContourDataset data, CrosshairState crosshairState) { // setup for collecting optional entity info... RectangularShape entityArea = null; EntityCollection entities = null; if (info != null) { entities = info.getOwner().getEntityCollection(); }// Rectangle2D.Double rect = null;// rect = new Rectangle2D.Double(); RectangularShape rect = new Ellipse2D.Double(); //turn off anti-aliasing when filling rectangles Object antiAlias = g2.getRenderingHint(RenderingHints.KEY_ANTIALIASING); g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_OFF); // if (tooltips!=null) tooltips.clearToolTips(); // reset collection // get the data points Number[] xNumber = data.getXValues(); Number[] yNumber = data.getYValues(); Number[] zNumber = data.getZValues(); double[] x = new double[xNumber.length]; double[] y = new double[yNumber.length]; for (int i = 0; i < x.length; i++) { x[i] = xNumber[i].doubleValue(); y[i] = yNumber[i].doubleValue(); } double transX = 0.0; double transDX = 0.0; double transY = 0.0; double transDY = 0.0; double size = dataArea.getWidth() * this.ptSizePct; for (int k = 0; k < x.length; k++) { transX = domainAxis.valueToJava2D(x[k], dataArea, RectangleEdge.BOTTOM) - 0.5 * size; transY = rangeAxis.valueToJava2D(y[k], dataArea, RectangleEdge.LEFT) - 0.5 * size; transDX = size; transDY = size; rect.setFrame(transX, transY, transDX, transDY); if (zNumber[k] != null) { g2.setPaint(colorBar.getPaint(zNumber[k].doubleValue())); g2.fill(rect); } else if (this.missingPaint != null) { g2.setPaint(this.missingPaint); g2.fill(rect); } entityArea = rect; // add an entity for the item... if (entities != null) { String tip = null; if (getToolTipGenerator() != null) { tip = this.toolTipGenerator.generateToolTip(data, k); } String url = null; // if (getURLGenerator() != null) { //dmo: look at this later // url = getURLGenerator().generateURL(data, series, item); // } //Unlike XYItemRenderer, we need to clone entityArea since it reused. ContourEntity entity = new ContourEntity((RectangularShape) entityArea.clone(), tip, url); entity.setIndex(k); entities.addEntity(entity); } // do we need to update the crosshair values? if (plot.isDomainCrosshairLockedOnData()) { if (plot.isRangeCrosshairLockedOnData()) { // both axes crosshairState.updateCrosshairPoint( x[k], y[k], transX, transY, PlotOrientation.VERTICAL ); } else { // just the horizontal axis... crosshairState.updateCrosshairX(transX); } } else { if (plot.isRangeCrosshairLockedOnData()) { // just the vertical axis... crosshairState.updateCrosshairY(transY); } } } g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, antiAlias); return; } /** * Utility method for drawing a crosshair on the chart (if required). * * @param g2 The graphics device. * @param dataArea The data area. * @param value The coordinate, where to draw the line. * @param stroke The stroke to use. * @param paint The paint to use. */ protected void drawVerticalLine(Graphics2D g2, Rectangle2D dataArea, double value, Stroke stroke, Paint paint) { double xx = getDomainAxis().valueToJava2D(value, dataArea, RectangleEdge.BOTTOM); Line2D line = new Line2D.Double(xx, dataArea.getMinY(), xx, dataArea.getMaxY()); g2.setStroke(stroke); g2.setPaint(paint); g2.draw(line); } /** * Utility method for drawing a crosshair on the chart (if required). * * @param g2 The graphics device. * @param dataArea The data area. * @param value The coordinate, where to draw the line. * @param stroke The stroke to use. * @param paint The paint to use. */ protected void drawHorizontalLine(Graphics2D g2, Rectangle2D dataArea, double value, Stroke stroke, Paint paint) { double yy = getRangeAxis().valueToJava2D(value, dataArea, RectangleEdge.LEFT); Line2D line = new Line2D.Double(dataArea.getMinX(), yy, dataArea.getMaxX(), yy); g2.setStroke(stroke); g2.setPaint(paint); g2.draw(line); } /** * Handles a 'click' on the plot by updating the anchor values... * * @param x x-coordinate, where the click occured. * @param y y-coordinate, where the click occured. * @param info An object for collection dimension information. */ public void handleClick(int x, int y, PlotRenderingInfo info) {/* // set the anchor value for the horizontal axis... ValueAxis hva = getDomainAxis(); if (hva != null) { double hvalue = hva.translateJava2DtoValue((float) x, info.getDataArea()); hva.setAnchorValue(hvalue); setDomainCrosshairValue(hvalue); } // set the anchor value for the vertical axis... ValueAxis vva = this.getRangeAxis(); if (vva != null) { double vvalue = vva.translateJava2DtoValue((float) y, info.getDataArea()); vva.setAnchorValue(vvalue); setRangeCrosshairValue(vvalue); }*/ } /** * Zooms the axis ranges by the specified percentage about the anchor point. * * @param percent The amount of the zoom. */ public void zoom(double percent) { if (percent > 0) { // double range = this.domainAxis.getRange().getLength(); // double scaledRange = range * percent; // domainAxis.setAnchoredRange(scaledRange); // range = this.rangeAxis.getRange().getLength(); // scaledRange = range * percent; // rangeAxis.setAnchoredRange(scaledRange); } else { getRangeAxis().setAutoRange(true); getDomainAxis().setAutoRange(true); } } /** * Returns the plot type as a string. * * @return A short string describing the type of plot. */ public String getPlotType() { return localizationResources.getString("Contour_Plot"); } /** * Returns the range for an axis. * * @param axis the axis. * * @return The range for an axis. */ public Range getDataRange(ValueAxis axis) { if (this.dataset == null) { return null; } Range result = null; if (axis == getDomainAxis()) { result = DatasetUtilities.getDomainExtent(this.dataset); } else if (axis == getRangeAxis()) { result = DatasetUtilities.getRangeExtent(this.dataset); } return result; } /** * Returns the range for the Contours. * * @return The range for the Contours (z-axis). */ public Range getContourDataRange() { Range result = null; ContourDataset data = getDataset(); if (data != null) { Range h = getDomainAxis().getRange(); Range v = getRangeAxis().getRange(); result = this.visibleRange(data, h, v); } return result; } /** * Notifies all registered listeners of a property change. * <P> * One source of property change events is the plot's renderer. * * @param event Information about the property change. */ public void propertyChange(PropertyChangeEvent event) { notifyListeners(new PlotChangeEvent(this)); } /** * Receives notification of a change to the plot's dataset. * <P> * The chart reacts by passing on a chart change event to all registered * listeners. * * @param event Information about the event (not used here). */ public void datasetChanged(DatasetChangeEvent event) { if (this.domainAxis != null) { this.domainAxis.configure(); } if (this.rangeAxis != null) { this.rangeAxis.configure(); } if (this.colorBar != null) { this.colorBar.configure(this); } PlotChangeEvent e = new PlotChangeEvent(this); notifyListeners(e); } /** * Returns the colorbar. * * @return The colorbar. */ public ColorBar getColorBar() { return this.colorBar; } /** * Returns a flag indicating whether or not the domain crosshair is visible. * * @return the flag. */ public boolean isDomainCrosshairVisible() { return this.domainCrosshairVisible; } /** * Sets the flag indicating whether or not the domain crosshair is visible. * * @param flag the new value of the flag. */ public void setDomainCrosshairVisible(boolean flag) { if (this.domainCrosshairVisible != flag) { this.domainCrosshairVisible = flag; notifyListeners(new PlotChangeEvent(this)); } } /** * Returns a flag indicating whether or not the crosshair should "lock-on" * to actual data values. * * @return the flag. */ public boolean isDomainCrosshairLockedOnData() { return this.domainCrosshairLockedOnData; } /** * Sets the flag indicating whether or not the domain crosshair should "lock-on" * to actual data values. * * @param flag the flag. */ public void setDomainCrosshairLockedOnData(boolean flag) { if (this.domainCrosshairLockedOnData != flag) { this.domainCrosshairLockedOnData = flag; notifyListeners(new PlotChangeEvent(this)); } } /** * Returns the domain crosshair value. * * @return The value. */ public double getDomainCrosshairValue() { return this.domainCrosshairValue; } /** * Sets the domain crosshair value. * <P> * Registered listeners are notified that the plot has been modified, but * only if the crosshair is visible. * * @param value the new value. */ public void setDomainCrosshairValue(double value) { setDomainCrosshairValue(value, true); } /** * Sets the domain crosshair value. * <P> * Registered listeners are notified that the axis has been modified, but * only if the crosshair is visible. * * @param value the new value. * @param notify a flag that controls whether or not listeners are notified. */ public void setDomainCrosshairValue(double value, boolean notify) { this.domainCrosshairValue = value; if (isDomainCrosshairVisible() && notify) { notifyListeners(new PlotChangeEvent(this)); } } /** * Returns the Stroke used to draw the crosshair (if visible). * * @return the crosshair stroke. */ public Stroke getDomainCrosshairStroke() { return this.domainCrosshairStroke; } /** * Sets the Stroke used to draw the crosshairs (if visible) and notifies * registered listeners that the axis has been modified. * * @param stroke the new crosshair stroke. */ public void setDomainCrosshairStroke(Stroke stroke) { this.domainCrosshairStroke = stroke; notifyListeners(new PlotChangeEvent(this)); } /** * Returns the domain crosshair color. * * @return the crosshair color. */ public Paint getDomainCrosshairPaint() { return this.domainCrosshairPaint;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -