|
From: <bma...@us...> - 2015-04-16 15:28:26
|
Revision: 9108
http://sourceforge.net/p/fudaa/svn/9108
Author: bmarchan
Date: 2015-04-16 15:28:24 +0000 (Thu, 16 Apr 2015)
Log Message:
-----------
Graphe3D : Quelques corrections
Modified Paths:
--------------
trunk/framework/ebli-graphe-3D/src/main/java/org/fudaa/ebli/graphe3D/EG3dGraph.java
trunk/framework/ebli-graphe-3D/src/main/java/org/fudaa/ebli/graphe3D/EG3dProjection3dto2d.java
trunk/framework/ebli-graphe-3D/src/main/java/org/fudaa/ebli/graphe3D/data/EG3dDefaultLineModel.java
trunk/framework/ebli-graphe-3D/src/main/java/org/fudaa/ebli/graphe3D/data/EG3dLineModelAbstract.java
trunk/framework/ebli-graphe-3D/src/main/java/org/fudaa/ebli/graphe3D/renderer/EG3dDefaultDataRenderer.java
trunk/framework/ebli-graphe-3D/src/main/java/org/fudaa/ebli/graphe3D/ui/panel/EG3dBtnPanel.java
Modified: trunk/framework/ebli-graphe-3D/src/main/java/org/fudaa/ebli/graphe3D/EG3dGraph.java
===================================================================
--- trunk/framework/ebli-graphe-3D/src/main/java/org/fudaa/ebli/graphe3D/EG3dGraph.java 2015-04-14 09:39:00 UTC (rev 9107)
+++ trunk/framework/ebli-graphe-3D/src/main/java/org/fudaa/ebli/graphe3D/EG3dGraph.java 2015-04-16 15:28:24 UTC (rev 9108)
@@ -11,6 +11,7 @@
import java.awt.Point;
import java.awt.PrintGraphics;
import java.awt.Rectangle;
+import java.awt.RenderingHints;
import java.awt.event.FocusAdapter;
import java.awt.event.FocusEvent;
import java.awt.event.MouseAdapter;
@@ -28,11 +29,11 @@
import javax.swing.JComponent;
+import org.fudaa.ebli.graphe3D.data.EG3dDataModel;
import org.fudaa.ebli.graphe3D.data.EG3dLineModel;
-import org.fudaa.ebli.graphe3D.data.EG3dDataModel;
import org.fudaa.ebli.graphe3D.data.EG3dSurfaceModel;
+import org.fudaa.ebli.graphe3D.data.EG3dSurfaceModel.PlotType;
import org.fudaa.ebli.graphe3D.data.EG3dVertex;
-import org.fudaa.ebli.graphe3D.data.EG3dSurfaceModel.PlotType;
import org.fudaa.ebli.graphe3D.renderer.EG3dDataRenderer;
import org.fudaa.ebli.graphe3D.renderer.EG3dDefaultDataRenderer;
import org.fudaa.ebli.graphe3D.renderer.EG3dDefaultViewRenderer;
@@ -141,14 +142,26 @@
datas.add(_data);
_data.addPropertyChangeListener(surfaceChangesListener);
// _data.addChangeListener(surfaceChangesListener);
- resetZoom();
+ resetBounds();
+
+ repaint();
}
public void removeData(EG3dDataModel _data) {
datas.remove(_data);
_data.removePropertyChangeListener(surfaceChangesListener);
// _data.removeChangeListener(surfaceChangesListener);
+ repaint();
}
+
+ public void removeAllDatas() {
+ for (EG3dDataModel data : datas) {
+ data.removePropertyChangeListener(surfaceChangesListener);
+ }
+ datas.clear();
+
+ repaint();
+ }
public void setViewRenderer(EG3dDefaultViewRenderer _renderer) {
if (viewRenderer!=null)
@@ -159,7 +172,8 @@
projector=_renderer.getProjector();
colors = _renderer.getColorModel();
-
+
+ repaint();
}
public EG3dDefaultViewRenderer getViewRenderer() {
@@ -325,7 +339,6 @@
}
public void propertyChange(java.beans.PropertyChangeEvent pe) {
- resetZoom();
// init();
destroyImage();
}
@@ -367,13 +380,15 @@
}
/**
- * Redefini les zoom du graphe.
+ * Redefini les limites du graphe.
*/
- public void resetZoom() {
+ public void resetBounds() {
xmin=Float.MAX_VALUE;
xmax=Float.MIN_VALUE;
ymin=Float.MAX_VALUE;
ymax=Float.MIN_VALUE;
+ zmin=Float.MAX_VALUE;
+ zmax=Float.MIN_VALUE;
for (EG3dDataModel curve : datas) {
xmin=Math.min(xmin, curve.getXMin());
xmax=Math.max(xmax, curve.getXMax());
@@ -385,90 +400,37 @@
// setRanges(xmin, xmax, ymin, ymax);
}
-
- /**
- * Sets the x and y ranges of calculated surface vertices. The ranges will
- * not affect surface appearance. They affect axes scale appearance.
- *
- * @param xmin
- * the minimum x
- * @param xmax
- * the maximum x
- * @param ymin
- * the minimum y
- * @param ymax
- * the maximum y
- */
-
-// public void setRanges(float xmin, float xmax, float ymin, float ymax) {
-// this.xmin = xmin;
-// this.xmax = xmax;
-// this.ymin = ymin;
-// this.ymax = ymax;
-// }
-
- /**
- * Gets the current x, y, and z ranges.
- *
- * @return array of x,y, and z ranges in order of xmin, xmax, ymin, ymax,
- * zmin, zmax
- */
-
- public float[] getRanges() {
- float[] ranges = new float[6];
-
- ranges[0] = xmin;
- ranges[1] = xmax;
- ranges[2] = ymin;
- ranges[3] = ymax;
- ranges[4] = zmin;
- ranges[5] = zmax;
-
- return ranges;
+
+ public void setRangeX(float _xmin, float _xmax) {
+ xmin=_xmin;
+ xmax=_xmax;
+ repaint();
}
+
+ public float[] getRangeX() {
+ return new float[]{xmin,xmax};
+ }
+
+ public void setRangeY(float _ymin, float _ymax) {
+ ymin=_ymin;
+ ymax=_ymax;
+ repaint();
+ }
+
+ public float[] getRangeY() {
+ return new float[]{ymin,ymax};
+ }
+
+ public void setRangeZ(float _zmin, float _zmax) {
+ zmin=_zmin;
+ zmax=_zmax;
+ repaint();
+ }
+
+ public float[] getRangeZ() {
+ return new float[]{zmin,zmax};
+ }
- /**
- * Sets the data availability flag. If this flag is <code>false</code>, <code>SurfaceCanvas</code> will not generate any surface image, even if
- * the data is available. But it is the programmer's responsiblity to set
- * this flag to <code>false</code> when data is not available.
- *
- * @param avail
- * the availability flag
- */
-
-// public void setDataAvailability(boolean avail) {
-// data_available = avail;
-// is_data_available = avail; // see Handlers for mouse input events
-// // section
-// }
-
- /**
- * Sets the new vertices array of surface.
- *
- * @param surfaceVertex
- * the new vertices array
- * @see #getValuesArray
- */
-
-// public void setValuesArray(EbliGraph3dVertex[][] vertex) {
-// this.surfaceVertex = vertex;
-// }
-
- /**
- * Gets the current vertices array.
- *
- * @return current vertices array
- * @see #setValuesArray
- */
-
-// public EbliGraph3dVertex[][] getValuesArray() {
-// if (!data_available)
-// return null;
-// return surfaceVertex;
-// }
-
-// private boolean is_data_available; // holds the original data availability
- // flag
private boolean dragged; // dragged flag
private int click_x, click_y; // previous mouse cursor position
@@ -516,8 +478,11 @@
*/
public void paintComponent(Graphics g) {
- if ((getBounds().width <= 0) || (getBounds().height <= 0))
+ if ((getBounds().width <= 0) || (getBounds().height <= 0))
return;
+
+ ((Graphics2D)g).setRenderingHint(RenderingHints.KEY_ANTIALIASING,
+ RenderingHints.VALUE_ANTIALIAS_ON);
// backing buffer creation
@@ -1676,8 +1641,8 @@
// model.setDispDivisions(plot_density);
Thread.yield();
- zmin = zi;
- zmax = zx;
+// zmin = zi;
+// zmax = zx;
color_factor = 1f / (zmax - zmin);
// if (!printing) {
@@ -2557,14 +2522,25 @@
}
public void plotLine(EG3dLineModel _curve, EG3dDataRenderer _renderer) {
+ if (_curve.getNbPoints() < 2)
+ return;
+
+ projector.setZRange(zmin, zmax);
+
TraceLigne tl=new TraceLigne();
- Point p2=projector.project(_curve.getX(0), _curve.getY(0), _curve.getZ(0));
+ float xe=xmax-xmin==0 ? 0:20*(_curve.getX(0)-xmin)/(xmax-xmin)-10;
+ float ye=ymax-zmin==0 ? 0:20*(_curve.getY(0)-ymin)/(ymax-ymin)-10;
+ float ze=zmax-zmin==0 ? 0:20*(_curve.getZ(0)-zmin)/(zmax-zmin)-10;
+ Point p2=projector.project(xe, ye, ze);
for (int i=1; i<_curve.getNbPoints(); i++) {
Point p1=p2;
- p2=projector.project(_curve.getX(i), _curve.getY(i), _curve.getZ(i));
- tl.setCouleur(_renderer.getLineColor(i));
- tl.setEpaisseur(_renderer.getLineThickness(i));
- tl.setTypeTrait(_renderer.getLineStyle(i));
+ xe=xmax-xmin==0 ? 0:20*(_curve.getX(i)-xmin)/(xmax-xmin)-10;
+ ye=ymax-zmin==0 ? 0:20*(_curve.getY(i)-ymin)/(ymax-ymin)-10;
+ ze=zmax-zmin==0 ? 0:20*(_curve.getZ(i)-zmin)/(zmax-zmin)-10;
+ p2=projector.project(xe, ye, ze);
+ tl.setCouleur(_renderer.getLineColor(i-1));
+ tl.setEpaisseur(_renderer.getLineThickness(i-1));
+ tl.setTypeTrait(_renderer.getLineStyle(i-1));
tl.dessineTrait((Graphics2D)graphics, p1.x, p1.y, p2.x, p2.y);
}
}
Modified: trunk/framework/ebli-graphe-3D/src/main/java/org/fudaa/ebli/graphe3D/EG3dProjection3dto2d.java
===================================================================
--- trunk/framework/ebli-graphe-3D/src/main/java/org/fudaa/ebli/graphe3D/EG3dProjection3dto2d.java 2015-04-14 09:39:00 UTC (rev 9107)
+++ trunk/framework/ebli-graphe-3D/src/main/java/org/fudaa/ebli/graphe3D/EG3dProjection3dto2d.java 2015-04-16 15:28:24 UTC (rev 9108)
@@ -73,8 +73,10 @@
trans_y = center_y + _2D_trans_y;
}
-
-
+ /**
+ * Rotation suivant Z.
+ * @param angle En degr\xE9s
+ */
public void setRotationAngle(float angle) {
rotation = angle;
sin_rotation = (float)Math.sin(angle * DEGTORAD);
@@ -102,7 +104,10 @@
}
-
+ /**
+ * Rotation suivant Y.
+ * @param angle En degr\xE9s
+ */
public void setElevationAngle(float angle) {
elevation = angle;
sin_elevation = (float)Math.sin(angle * DEGTORAD);
@@ -126,6 +131,10 @@
return cos_elevation;
}
+ /**
+ * Distance de l'oeil \xE0 l'objet.
+ * @param new_distance Pour une perspective cavali\xE8re : Donner une grande distance.
+ */
public void setDistance(float new_distance) {
distance = new_distance;
factor = distance * _2D_scale;
Modified: trunk/framework/ebli-graphe-3D/src/main/java/org/fudaa/ebli/graphe3D/data/EG3dDefaultLineModel.java
===================================================================
--- trunk/framework/ebli-graphe-3D/src/main/java/org/fudaa/ebli/graphe3D/data/EG3dDefaultLineModel.java 2015-04-14 09:39:00 UTC (rev 9107)
+++ trunk/framework/ebli-graphe-3D/src/main/java/org/fudaa/ebli/graphe3D/data/EG3dDefaultLineModel.java 2015-04-16 15:28:24 UTC (rev 9108)
@@ -16,7 +16,7 @@
public void setPoints(List<EG3dVertex> _pts) {
firePropertyChange("points", pts, pts=_pts);
- resetLimits();
+ clearCache();
}
@Override
Modified: trunk/framework/ebli-graphe-3D/src/main/java/org/fudaa/ebli/graphe3D/data/EG3dLineModelAbstract.java
===================================================================
--- trunk/framework/ebli-graphe-3D/src/main/java/org/fudaa/ebli/graphe3D/data/EG3dLineModelAbstract.java 2015-04-14 09:39:00 UTC (rev 9107)
+++ trunk/framework/ebli-graphe-3D/src/main/java/org/fudaa/ebli/graphe3D/data/EG3dLineModelAbstract.java 2015-04-16 15:28:24 UTC (rev 9108)
@@ -11,12 +11,14 @@
*/
public abstract class EG3dLineModelAbstract implements EG3dLineModel {
PropertyChangeSupport support=new PropertyChangeSupport(this.getClass());
- float xmin;
- float xmax;
- float ymin;
- float ymax;
- float zmin;
- float zmax;
+ boolean mustReset_=true;
+
+ protected float xmin;
+ protected float xmax;
+ protected float ymin;
+ protected float ymax;
+ protected float zmin;
+ protected float zmax;
@Override
public void addPropertyChangeListener(PropertyChangeListener listener) {
@@ -59,35 +61,52 @@
zmin=Math.min(zmin, getZ(i));
zmax=Math.max(zmax, getZ(i));
}
+ mustReset_=false;
}
+ public void clearCache() {
+ mustReset_=true;
+ }
+
@Override
public float getXMin() {
+ if (mustReset_)
+ resetLimits();
return xmin;
}
@Override
public float getYMin() {
+ if (mustReset_)
+ resetLimits();
return ymin;
}
@Override
public float getZMin() {
+ if (mustReset_)
+ resetLimits();
return zmin;
}
@Override
public float getXMax() {
+ if (mustReset_)
+ resetLimits();
return xmax;
}
@Override
public float getYMax() {
+ if (mustReset_)
+ resetLimits();
return ymax;
}
@Override
public float getZMax() {
+ if (mustReset_)
+ resetLimits();
return zmax;
}
Modified: trunk/framework/ebli-graphe-3D/src/main/java/org/fudaa/ebli/graphe3D/renderer/EG3dDefaultDataRenderer.java
===================================================================
--- trunk/framework/ebli-graphe-3D/src/main/java/org/fudaa/ebli/graphe3D/renderer/EG3dDefaultDataRenderer.java 2015-04-14 09:39:00 UTC (rev 9107)
+++ trunk/framework/ebli-graphe-3D/src/main/java/org/fudaa/ebli/graphe3D/renderer/EG3dDefaultDataRenderer.java 2015-04-16 15:28:24 UTC (rev 9108)
@@ -15,10 +15,10 @@
* @author Bertrand Marchand (mar...@de...)
*/
public class EG3dDefaultDataRenderer implements EG3dDataRenderer {
- TraceLigneModel lm;
- TraceIconModel im;
- EG3dSurfaceColorModelSet surfColorModel_;
- PropertyChangeSupport property;
+ protected TraceLigneModel lm;
+ protected TraceIconModel im;
+ protected EG3dSurfaceColorModelSet surfColorModel_;
+ protected PropertyChangeSupport property;
public EG3dDefaultDataRenderer() {
this(new TraceLigneModel(),new TraceIconModel());
Modified: trunk/framework/ebli-graphe-3D/src/main/java/org/fudaa/ebli/graphe3D/ui/panel/EG3dBtnPanel.java
===================================================================
--- trunk/framework/ebli-graphe-3D/src/main/java/org/fudaa/ebli/graphe3D/ui/panel/EG3dBtnPanel.java 2015-04-14 09:39:00 UTC (rev 9107)
+++ trunk/framework/ebli-graphe-3D/src/main/java/org/fudaa/ebli/graphe3D/ui/panel/EG3dBtnPanel.java 2015-04-16 15:28:24 UTC (rev 9108)
@@ -363,25 +363,42 @@
}
- public void translate(BuResource resource){
- densityType.setText(resource.getString("Mode densit\xE9"));
- wireframeType.setText(resource.getString("Type Wireframe"));
- contourType.setText(resource.getString("Mode contour"));
- surfaceType.setText(resource.getString("Type Surface"));
- wireframePTType.setText(resource.getString("Type Nuage de points"));
- fogMode.setText(resource.getString("Mode Fog"));
- dualShadeMode.setText(resource.getString("Nuance"));
- grayScaleMode.setText(resource.getString("Nuance de gris"));
- spectrumMode.setText(resource.getString("Mode spectre"));
- hiddenMode.setText(resource.getString("Mode cach\xE9"));
- mesh.setText(resource.getString("Voir le maillage"));
- scaleBox.setText(resource.getString("Redimensionner"));
- btnDisplayGrids.setText(resource.getString("Afficher la grille"));
- btnDisplayZ.setText(resource.getString("Afficher l'axe Z"));
- btnDisplayXY.setText(resource.getString("Afficher les axes X et Y"));
- btnShowBox.setText(resource.getString("Afficher les extr\xE9mit\xE9s"));
-
- }
+ public void translate(BuResource resource) {
+ densityType.setText(resource.getString("Mode densit\xE9"));
+ wireframeType.setText(resource.getString("Type Wireframe"));
+ contourType.setText(resource.getString("Mode contour"));
+ surfaceType.setText(resource.getString("Type Surface"));
+ wireframePTType.setText(resource.getString("Type Nuage de points"));
+ fogMode.setText(resource.getString("Mode Fog"));
+ dualShadeMode.setText(resource.getString("Nuance"));
+ grayScaleMode.setText(resource.getString("Nuance de gris"));
+ spectrumMode.setText(resource.getString("Mode spectre"));
+ hiddenMode.setText(resource.getString("Mode cach\xE9"));
+ mesh.setText(resource.getString("Voir le maillage"));
+ scaleBox.setText(resource.getString("Redimensionner"));
+ btnDisplayGrids.setText(resource.getString("Afficher la grille"));
+ btnDisplayZ.setText(resource.getString("Afficher l'axe Z"));
+ btnDisplayXY.setText(resource.getString("Afficher les axes X et Y"));
+ btnShowBox.setText(resource.getString("Afficher les extr\xE9mit\xE9s"));
+ }
+
+ /**
+ * Affiche ou non les boutons sp\xE9cifiques aux datas surface.
+ * @param _b True : Les boutons sont affich\xE9s.
+ */
+ public void showSurfaceButton(boolean _b) {
+ mesh.setVisible(_b);
+ hiddenMode.setVisible(_b);
+ spectrumMode.setVisible(_b);
+ grayScaleMode.setVisible(_b);
+ dualShadeMode.setVisible(_b);
+ fogMode.setVisible(_b);
+ wireframeType.setVisible(_b);
+ wireframePTType.setVisible(_b);
+ surfaceType.setVisible(_b);
+ contourType.setVisible(_b);
+ densityType.setVisible(_b);
+ }
public JCheckBox getBtnShowBox() {
return btnShowBox;
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|