|
From: <de...@us...> - 2012-12-14 18:09:09
|
Revision: 8137
http://fudaa.svn.sourceforge.net/fudaa/?rev=8137&view=rev
Author: deniger
Date: 2012-12-14 18:09:03 +0000 (Fri, 14 Dec 2012)
Log Message:
-----------
Added Paths:
-----------
trunk/soft/fudaa-mesh/src/main/java/org/fudaa/fudaa/meshviewer/layer/MvIsoLayerQuickPainter.java
trunk/soft/fudaa-mesh/src/main/java/org/fudaa/fudaa/meshviewer/layer/MvIsoModelDefault.java
trunk/soft/fudaa-mesh/src/main/java/org/fudaa/fudaa/meshviewer/layer/MvIsoModelInterface.java
Added: trunk/soft/fudaa-mesh/src/main/java/org/fudaa/fudaa/meshviewer/layer/MvIsoLayerQuickPainter.java
===================================================================
--- trunk/soft/fudaa-mesh/src/main/java/org/fudaa/fudaa/meshviewer/layer/MvIsoLayerQuickPainter.java (rev 0)
+++ trunk/soft/fudaa-mesh/src/main/java/org/fudaa/fudaa/meshviewer/layer/MvIsoLayerQuickPainter.java 2012-12-14 18:09:03 UTC (rev 8137)
@@ -0,0 +1,234 @@
+/*
+ GPL 2
+ */
+package org.fudaa.fudaa.meshviewer.layer;
+
+import com.vividsolutions.jts.geom.Envelope;
+import java.awt.Color;
+import java.awt.Graphics2D;
+import java.awt.Polygon;
+import java.awt.RenderingHints;
+import org.fudaa.ctulu.CtuluListSelection;
+import org.fudaa.ebli.commun.EbliLib;
+import org.fudaa.ebli.geometrie.GrBoite;
+import org.fudaa.ebli.geometrie.GrMorphisme;
+import org.fudaa.ebli.geometrie.GrPoint;
+import org.fudaa.ebli.palette.BPalettePlage;
+import org.fudaa.ebli.trace.TraceIsoInterface;
+import org.fudaa.ebli.trace.TraceIsoLignesAvecPlages;
+import org.fudaa.ebli.trace.TraceIsoPlageInterface;
+import org.fudaa.ebli.trace.TraceIsoSurfacesAvecPlages;
+import org.fudaa.ebli.trace.TraceLigneModel;
+
+/**
+ *
+ * @author Frederic Deniger
+ */
+public class MvIsoLayerQuickPainter {
+
+ private boolean traceIsoLine;
+ private double[] value;
+ private MvIsoModelInterface model;
+ private TraceIsoPlageInterface paletteCouleur;
+ private TraceLigneModel ligneModel;
+ private int alpha;
+ private boolean isAntaliasing;
+
+ public MvIsoModelInterface getModel() {
+ return model;
+ }
+
+ public void setModel(MvIsoModelInterface model) {
+ this.model = model;
+ }
+
+ public boolean isTraceIsoLine() {
+ return traceIsoLine;
+ }
+
+ public void setTraceIsoLine(boolean traceIsoLine) {
+ this.traceIsoLine = traceIsoLine;
+ }
+
+ public TraceIsoPlageInterface getPaletteCouleur() {
+ return paletteCouleur;
+ }
+
+ public void setPaletteCouleur(TraceIsoPlageInterface paletteCouleur) {
+ this.paletteCouleur = paletteCouleur;
+ }
+
+ public TraceLigneModel getLigneModel() {
+ return ligneModel;
+ }
+
+ public void setLigneModel(TraceLigneModel ligneModel) {
+ this.ligneModel = ligneModel;
+ }
+
+ public int getAlpha() {
+ return alpha;
+ }
+
+ public void setAlpha(int alpha) {
+ this.alpha = alpha;
+ }
+
+ public boolean isIsAntaliasing() {
+ return isAntaliasing;
+ }
+
+ public void setIsAntaliasing(boolean isAntaliasing) {
+ this.isAntaliasing = isAntaliasing;
+ }
+
+ /**
+ * Contructeur du calque.
+ *
+ * @param _m le modele de donnees
+ */
+ public MvIsoLayerQuickPainter(final MvIsoModelInterface _m) {
+ this.model = _m;
+ }
+
+ private boolean isLineAllPaintedByNode(int minX, int maxX, int minY, int maxY, int[] x, int[] y, int nbPt) {
+ if (maxX - minX == 0 && maxY - minY < nbPt) {
+ boolean[] dots = new boolean[maxY - minY + 1];
+ for (int i = 0; i < nbPt; i++) {
+ dots[y[i] - minY] = true;
+ }
+ return isAllTrue(dots);
+
+ }
+ if (maxX - minX < nbPt && maxY - minY == 0) {
+ boolean[] dots = new boolean[maxX - minX + 1];
+ for (int i = 0; i < nbPt; i++) {
+ dots[x[i] - minX] = true;
+ }
+ return isAllTrue(dots);
+ }
+ return false;
+ }
+
+ private boolean isAllTrue(boolean[] dots) {
+ for (int i = 0; i < dots.length; i++) {
+ if (!dots[i]) {
+ return false;
+ }
+ }
+ return true;
+ }
+
+ public void paintDonnees(int width, int height, final Graphics2D _g, final GrMorphisme _versEcran, final GrMorphisme _versReel, final GrBoite _clipReel) {
+
+ int idxElt;
+ TraceIsoInterface isos = null;
+ // TrIsoTraceSurface isos = null;
+ boolean keepAntialias = false;
+ MvIsoModelInterface modelToUse = model;
+ if (traceIsoLine) {
+ isos = new TraceIsoLignesAvecPlages(paletteCouleur, alpha, ligneModel);
+ keepAntialias = true;
+ } else {
+ isos = new TraceIsoSurfacesAvecPlages(paletteCouleur, alpha);
+ }
+ // pour les surfaces, on voudrait eviter d'utiliser l'anticrenelage
+ if (!keepAntialias && isAntaliasing) {
+ final RenderingHints renderingHints = _g.getRenderingHints();
+ renderingHints.put(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_OFF);
+ renderingHints.put(RenderingHints.KEY_TEXT_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_OFF);
+ _g.setRenderingHints(renderingHints);
+ }
+
+ final int n = modelToUse.getNbElt();
+ int[] x = null;
+ int[] y = null;
+ GrPoint pt = new GrPoint();
+ int w = width + 1;
+ CtuluListSelection memory = new CtuluListSelection(w * height);
+ Envelope envReel = _clipReel.getEnv();
+ for (idxElt = 0; idxElt < n; idxElt++) {
+ if (!modelToUse.isPainted(idxElt)) {
+ continue;
+ }
+
+ final int nbPt = modelToUse.getNbPt(idxElt);
+ Envelope envelopeElement = modelToUse.getEnvelopeForElement(idxElt);
+
+ if (!envReel.intersects(envelopeElement)) {
+ continue;
+ }
+ if (x == null || x.length < nbPt) {
+ x = new int[nbPt];
+ }
+ if (y == null || y.length < nbPt) {
+ y = new int[nbPt];
+ }
+ boolean isOnlyOnePoint = true;
+ int maxX = -1;
+ int minX = Integer.MAX_VALUE;
+ int maxY = -1;
+ int minY = Integer.MAX_VALUE;
+ for (int iPt = 0; iPt < nbPt; iPt++) {
+ pt.x_ = modelToUse.getX(idxElt, iPt);
+ pt.y_ = modelToUse.getY(idxElt, iPt);
+ pt.z_ = 0;
+ pt.autoApplique(_versEcran);
+ final int xi = (int) pt.x_;
+ final int yi = (int) pt.y_;
+ x[iPt] = xi;
+ y[iPt] = yi;
+ if (iPt > 0 && isOnlyOnePoint) {
+ isOnlyOnePoint = (xi == x[iPt - 1] && yi == y[iPt - 1]);
+ }
+ maxX = Math.max(maxX, xi);
+ maxY = Math.max(maxY, yi);
+ minX = Math.min(minX, xi);
+ minY = Math.min(minY, yi);
+ }
+ // Trace des isosurfaces / Isolignes (dans la couleur du fond si les isocouleurs sont
+ // tracees).
+ if (isos != null) {
+ if (isOnlyOnePoint) {
+ int idxDone = x[0] + y[0] * w;
+ if (idxDone >= 0 && !memory.isSelected(idxDone)) {
+ memory.add(idxDone);
+ double value = modelToUse.getDatatFor(idxElt, 0);
+ final Color c = paletteCouleur == null ? null : ((BPalettePlage) paletteCouleur).getColorFor(value);
+ if (c != null) {
+ _g.setColor(EbliLib.getAlphaColor(c, alpha));
+ _g.drawLine(x[0], y[0], x[0], y[0]);
+ }
+ }
+ } else if (isLineAllPaintedByNode(minX, maxX, minY, maxY, x, y, nbPt)) {
+ for (int iPt = 0; iPt < nbPt; iPt++) {
+ int idxDone = x[iPt] + y[iPt] * w;
+ if (idxDone >= 0 && !memory.isSelected(idxDone)) {
+ memory.add(idxDone);
+ double value = modelToUse.getDatatFor(idxElt, iPt);
+ final Color c = EbliLib.getAlphaColor(paletteCouleur == null ? null : ((BPalettePlage) paletteCouleur).getColorFor(
+ value), alpha);
+ if (c != null) {
+ _g.setColor(c);
+ _g.drawLine(x[iPt], y[iPt], x[iPt], y[iPt]);
+ }
+ }
+
+ }
+ } else {
+ value = modelToUse.fillWithData(idxElt, value);
+ if (value != null) {
+ final Polygon p = new Polygon(x, y, nbPt);
+ isos.draw(_g, p, value);
+ for (int iPoly = 0; iPoly < nbPt; iPoly++) {
+ final int memoryIndex = x[iPoly] + y[iPoly] * w;
+ if (memoryIndex >= 0) {
+ memory.add(memoryIndex);
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+}
Added: trunk/soft/fudaa-mesh/src/main/java/org/fudaa/fudaa/meshviewer/layer/MvIsoModelDefault.java
===================================================================
--- trunk/soft/fudaa-mesh/src/main/java/org/fudaa/fudaa/meshviewer/layer/MvIsoModelDefault.java (rev 0)
+++ trunk/soft/fudaa-mesh/src/main/java/org/fudaa/fudaa/meshviewer/layer/MvIsoModelDefault.java 2012-12-14 18:09:03 UTC (rev 8137)
@@ -0,0 +1,77 @@
+/*
+ GPL 2
+ */
+package org.fudaa.fudaa.meshviewer.layer;
+
+import java.io.IOException;
+import org.fudaa.ctulu.CtuluVariable;
+import org.fudaa.dodico.ef.EfElement;
+import org.fudaa.dodico.ef.EfGridData;
+import org.fudaa.fudaa.meshviewer.model.MvElementModelDefault;
+
+/**
+ * une implementation par defaut.
+ *
+ * @author Frederic Deniger
+ */
+public class MvIsoModelDefault extends MvElementModelDefault implements MvIsoModelInterface {
+
+ private EfGridData data;
+ private CtuluVariable var;
+ private int tIdx;
+
+ public MvIsoModelDefault(EfGridData data) {
+ super(data.getGrid());
+ this.data = data;
+ }
+
+ public EfGridData getData() {
+ return data;
+ }
+
+ public void setData(EfGridData data) {
+ this.data = data;
+ }
+
+ public CtuluVariable getVar() {
+ return var;
+ }
+
+ public void setVar(CtuluVariable var) {
+ this.var = var;
+ }
+
+ public int gettIdx() {
+ return tIdx;
+ }
+
+ public void settIdx(int tIdx) {
+ this.tIdx = tIdx;
+ }
+
+ @Override
+ public double[] fillWithData(int _idxElement, double[] _l) {
+ final EfElement el = data.getGrid().getElement(_idxElement);
+ final int n = el.getPtNb();
+ double[] r = _l;
+ if ((r == null) || (r.length != n)) {
+ r = new double[n];
+ }
+ try {
+ for (int i = 0; i < n; i++) {
+ r[i] = data.getData(var, tIdx, el.getPtIndex(i));
+ }
+ } catch (IOException iOException) {
+ }
+ return r;
+ }
+
+ @Override
+ public double getDatatFor(int idxElt, int idxPtOnElt) {
+ try {
+ return data.getData(var, tIdx, data.getGrid().getElement(idxElt).getPtIndex(idxPtOnElt));
+ } catch (IOException iOException) {
+ }
+ return 0;
+ }
+}
Added: trunk/soft/fudaa-mesh/src/main/java/org/fudaa/fudaa/meshviewer/layer/MvIsoModelInterface.java
===================================================================
--- trunk/soft/fudaa-mesh/src/main/java/org/fudaa/fudaa/meshviewer/layer/MvIsoModelInterface.java (rev 0)
+++ trunk/soft/fudaa-mesh/src/main/java/org/fudaa/fudaa/meshviewer/layer/MvIsoModelInterface.java 2012-12-14 18:09:03 UTC (rev 8137)
@@ -0,0 +1,69 @@
+/**
+ * @creation 21 d\xE9c. 2004
+ * @modification $Date: 2007-06-05 09:01:14 $
+ * @license GNU General Public License 2
+ * @copyright (c)1998-2001 CETMEF 2 bd Gambetta F-60231 Compiegne
+ * @mail fud...@li...
+ */
+package org.fudaa.fudaa.meshviewer.layer;
+
+import com.vividsolutions.jts.geom.Envelope;
+import org.fudaa.dodico.ef.EfGridInterface;
+import org.fudaa.ebli.calque.ZModelePolygone;
+
+/**
+ * @author Fred Deniger
+ * @version $Id: MvIsoModelInterface.java,v 1.4 2007-06-05 09:01:14 deniger Exp $
+ */
+public interface MvIsoModelInterface extends ZModelePolygone {
+
+ /**
+ * @return le nombre d'element
+ */
+ int getNbElt();
+
+ EfGridInterface getGrid();
+
+ public Envelope getEnvelopeForElement(int idxElt);
+
+ /**
+ *
+ * @param idxElt
+ * @return
+ */
+ int getNbPt(int idxElt);
+
+ /**
+ *
+ * @param idxElt
+ * @param idxPtInElt
+ * @return x value
+ */
+ double getX(int idxElt, int idxPtInElt);
+
+ /**
+ *
+ * @param idxElt
+ * @param idxPtInElt
+ * @return
+ */
+ double getY(int idxElt, int idxPtInElt);
+
+ /**
+ *
+ * @param idxElt
+ * @return true if the element must be painted
+ */
+ @Override
+ boolean isPainted(int idxElt);
+
+ double[] fillWithData(final int _idxElement, final double[] _l);
+
+ /**
+ *
+ * @param idxElt
+ * @param idxPtOnElt the index in the mesh.
+ * @return the value
+ */
+ public double getDatatFor(int idxElt, int idxPtOnElt);
+}
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <de...@us...> - 2013-01-15 00:17:38
|
Revision: 8210
http://fudaa.svn.sourceforge.net/fudaa/?rev=8210&view=rev
Author: deniger
Date: 2013-01-15 00:17:30 +0000 (Tue, 15 Jan 2013)
Log Message:
-----------
Ajout support filtre de points
Modified Paths:
--------------
trunk/soft/fudaa-mesh/src/main/java/org/fudaa/fudaa/meshviewer/layer/MvElementLayer.java
trunk/soft/fudaa-mesh/src/main/java/org/fudaa/fudaa/meshviewer/layer/MvIsoLayerQuickPainter.java
Modified: trunk/soft/fudaa-mesh/src/main/java/org/fudaa/fudaa/meshviewer/layer/MvElementLayer.java
===================================================================
--- trunk/soft/fudaa-mesh/src/main/java/org/fudaa/fudaa/meshviewer/layer/MvElementLayer.java 2013-01-15 00:16:59 UTC (rev 8209)
+++ trunk/soft/fudaa-mesh/src/main/java/org/fudaa/fudaa/meshviewer/layer/MvElementLayer.java 2013-01-15 00:17:30 UTC (rev 8210)
@@ -54,12 +54,12 @@
* @version $Id: MvElementLayer.java,v 1.31.6.1 2008-02-20 10:11:50 bmarchan Exp $
*/
public class MvElementLayer extends ZCalquePolygone implements MvLayerGrid {
-
+
public MvElementLayer() {
super();
iconModel_ = null;
}
-
+
public final static int[] getSelectedEdgeIdx(final EfGridVolumeInterface _grid, final CtuluListSelectionInterface _select) {
if (_grid == null || _select == null) {
return null;
@@ -76,7 +76,7 @@
Arrays.sort(res);
return res;
}
-
+
public final static int[] getSelectedEdgeIdx(final EfGridVolumeInterface _grid, final int[] _select) {
if (_grid == null || _select == null) {
return null;
@@ -90,7 +90,7 @@
Arrays.sort(res);
return res;
}
-
+
@Override
public int[] getSelectedEdgeIdx() {
if (((MvElementModel) modele_).getGrid() instanceof EfGridVolumeInterface) {
@@ -98,7 +98,7 @@
}
return null;
}
-
+
@Override
public boolean isSelectionEdgeEmpty() {
return isSelectionEmpty();
@@ -110,12 +110,12 @@
public MvElementLayer(final MvElementModel _modele) {
super(_modele);
}
-
+
@Override
public EbliFindActionInterface getFinder() {
return new MvFindActionNodeElt(this);
}
-
+
@Override
public EbliFindExpressionContainerInterface getExpressionContainer() {
final EbliFindExpressionContainerInterface i = ((MvElementModel) modele_).getExpressionContainer();
@@ -124,7 +124,7 @@
/**
* Ne dessine que les donn\xE9es.
- *
+ *
* @param _g le graphics cible
*/
@Override
@@ -138,7 +138,6 @@
final int nombre = modele_.getNombre();
// pour ne pas modifier le model par defaut
final TraceIcon icone = iconModel_ == null ? null : new TraceIcon(new TraceIconModel(iconModel_));
- final GrBoite bPoly = new GrBoite();
int incrementPt = 1;
final TraceLigne tl = new TraceLigne(new TraceLigneModel(ligneModel_));
if (isAttenue()) {
@@ -152,9 +151,9 @@
if (icone != null) {
icone.setCouleur(EbliLib.getAlphaColor(icone.getCouleur(), alpha_));
}
-
+
}
-
+
final MvElementModel model = (MvElementModel) modele_;
final boolean containsFr = model.getFrNbFrontier() > 0;
Envelope envReel = _clipReel.getEnv();
@@ -164,6 +163,7 @@
GrPoint pt = new GrPoint();
int w = getWidth() + 1;
CtuluListSelection memory = new CtuluListSelection(w * getHeight());
+
for (int idxElement = 0; idxElement < nombre; idxElement++) {
if (!model.isPainted(idxElement)) {
continue;
@@ -180,23 +180,23 @@
if (y == null || y.length < nbPt) {
y = new int[nbPt];
}
- boolean isOnlyOnePoint = true;
+ boolean eltIsOnePoint = true;
for (int iPt = 0; iPt < nbPt; iPt++) {
pt.x_ = model.getX(idxElement, iPt);
pt.y_ = model.getY(idxElement, iPt);
pt.z_ = 0;
- pt.autoApplique(_versEcran);
+ pt.autoApplique2D(_versEcran);
final int xi = (int) pt.x_;
final int yi = (int) pt.y_;
x[iPt] = xi;
y[iPt] = yi;
- if (iPt > 0 && isOnlyOnePoint) {
- isOnlyOnePoint = (xi == x[iPt - 1] && yi == y[iPt - 1]);
+ if (iPt > 0 && eltIsOnePoint) {
+ eltIsOnePoint = (xi == x[iPt - 1] && yi == y[iPt - 1]);
}
}
-
+
updateTrace(icone == null ? null : icone.getModel(), tl.getModel(), idxElement);
- if (isOnlyOnePoint) {
+ if (eltIsOnePoint) {
int idxDone = x[0] + y[0] * w;
if (idxDone >= 0 && !memory.isSelected(idxDone)) {
memory.add(idxDone);
@@ -216,7 +216,16 @@
if (icone != null) {
icone.paintIconCentre(this, _g, x[ptOri], y[ptOri]);
}
- tl.dessineTrait(_g, x[ptOri], y[ptOri], x[j], y[j]);
+ boolean onePoint = (x[ptOri] == x[j]) && (y[ptOri] == y[j]);
+ if (onePoint) {
+ int idxToDo = x[j] + y[j] * w;
+ if (!memory.isSelected(idxToDo)) {
+ tl.dessineTrait(_g, x[ptOri], y[ptOri], x[j], y[j]);
+ memory.add(idxToDo);
+ }
+ } else {
+ tl.dessineTrait(_g, x[ptOri], y[ptOri], x[j], y[j]);
+ }
}
ptOri = j;
idxFrom = idxTo;
@@ -233,38 +242,40 @@
if (idxFrom > idxTo) {
model.point(idxFrom, ptOri);
model.point(idxTo, ptDest);
- ptDest.autoApplique(versEcran);
- ptOri.autoApplique(versEcran);
- if (icone != null) {
- icone.paintIconCentre(this, _g, ptOri.x_, ptOri.y_);
+ if (_clipReel.intersectXYBoite(ptOri.x_, ptOri.y_, ptDest.x_, ptDest.y_)) {
+ ptDest.autoApplique2D(versEcran);
+ ptOri.autoApplique2D(versEcran);
+ if (icone != null) {
+ icone.paintIconCentre(this, _g, ptOri.x_, ptOri.y_);
+ }
+ tl.dessineTrait(_g, ptOri.x_, ptOri.y_, ptDest.x_, ptDest.y_);
}
- tl.dessineTrait(_g, ptOri.x_, ptOri.y_, ptDest.x_, ptDest.y_);
}
idxFrom = idxTo;
}
-
+
}
}
-
+
@Override
public int[] getSelectedElementIdx() {
return selection_ == null ? null : selection_.getSelectedIndex();
}
-
+
@Override
public int[] getSelectedObjectInTable() {
return getSelectedElementIdx();
}
-
+
protected EfGridInterface getGrid() {
return ((MvElementModel) modele_).getGrid();
}
-
+
@Override
public CtuluListSelection selection(final GrPoint _pt, final int _tolerance) {
return getGrid().getIndex() == null ? super.selection(_pt, _tolerance) : selectionFromIndex(_pt, _tolerance);
}
-
+
public CtuluListSelection selectionFromIndex(final LinearRing _poly, final int _mode) {
if (Fu.DEBUG && FuLog.isDebug()) {
FuLog.debug("FMV: layer select from index");
@@ -286,10 +297,10 @@
r.add(idx);
}
}
-
+
return r;
}
-
+
private CtuluListSelection selectionFromIndex(final GrPoint _pt, final int _tolerance) {
if (Fu.DEBUG && FuLog.isDebug()) {
FuLog.debug("FMV: layer select from index");
@@ -299,12 +310,12 @@
// grid.getIndex().query(EfIndexVisitorNearestNode.getEnvelope(_pt.x_, _pt.y_, toleranceReel), visitor);
// return visitor.getSelection();
}
-
+
@Override
public CtuluListSelection selection(final LinearRing _polySelection, final int _mode) {
return getGrid().getIndex() == null ? super.selection(_polySelection, _mode) : selectionFromIndex(_polySelection, _mode);
}
-
+
@Override
public int[] getSelectedPtIdx() {
if (!isSelectionEmpty()) {
@@ -320,7 +331,7 @@
}
return null;
}
-
+
@Override
public GrBoite getDomaineOnSelected() {
if (isSelectionEmpty()) {
@@ -343,30 +354,30 @@
// ajusteZoomOnSelected(r);
return r;
}
-
+
public boolean isConfigurable() {
return true;
}
-
+
public boolean isFontModifiable() {
return false;
}
-
+
@Override
public boolean isPaletteModifiable() {
return false;
}
-
+
@Override
public boolean isSelectionElementEmpty() {
return isSelectionEmpty();
}
-
+
@Override
public boolean isSelectionPointEmpty() {
return isSelectionEmpty();
}
-
+
@Override
public void paintIcon(final Component _c, final Graphics _g, final int _x, final int _y) {
super.paintIcon(_c, _g, _x, _y);
@@ -391,4 +402,4 @@
_g.drawLine(x1, y1, x3, y3);
_g.drawLine(x1, y1, x4, y4);
}
-}
\ No newline at end of file
+}
Modified: trunk/soft/fudaa-mesh/src/main/java/org/fudaa/fudaa/meshviewer/layer/MvIsoLayerQuickPainter.java
===================================================================
--- trunk/soft/fudaa-mesh/src/main/java/org/fudaa/fudaa/meshviewer/layer/MvIsoLayerQuickPainter.java 2013-01-15 00:16:59 UTC (rev 8209)
+++ trunk/soft/fudaa-mesh/src/main/java/org/fudaa/fudaa/meshviewer/layer/MvIsoLayerQuickPainter.java 2013-01-15 00:17:30 UTC (rev 8210)
@@ -132,6 +132,10 @@
} else {
isos = new TraceIsoSurfacesAvecPlages(paletteCouleur, alpha);
}
+ GrBoite clipEcran = _clipReel.applique(_versEcran);
+ isos.setRapide(rapide);
+ isos.setDimension(width, height);
+ isos.setClipEcran(clipEcran);
// pour les surfaces, on voudrait eviter d'utiliser l'anticrenelage
if (!keepAntialias && isAntaliasing) {
final RenderingHints renderingHints = _g.getRenderingHints();
@@ -147,6 +151,7 @@
int w = width + 1;
CtuluListSelection memory = new CtuluListSelection(w * height);
Envelope envReel = _clipReel.getEnv();
+
for (idxElt = 0; idxElt < n; idxElt++) {
if (!modelToUse.isPainted(idxElt)) {
continue;
@@ -155,7 +160,7 @@
final int nbPt = modelToUse.getNbPt(idxElt);
Envelope envelopeElement = modelToUse.getEnvelopeForElement(idxElt);
- if (!envReel.intersects(envelopeElement)) {
+ if (!envelopeElement.intersects(envReel)) {
continue;
}
if (x == null || x.length < nbPt) {
@@ -189,31 +194,34 @@
// Trace des isosurfaces / Isolignes (dans la couleur du fond si les isocouleurs sont
// tracees).
if (isos != null) {
- if (isOnlyOnePoint) {
- int idxDone = x[0] + y[0] * w;
- if (idxDone >= 0 && !memory.isSelected(idxDone)) {
- memory.add(idxDone);
- double value = modelToUse.getDatatFor(idxElt, 0);
- final Color c = paletteCouleur == null ? null : ((BPalettePlage) paletteCouleur).getColorFor(value);
- if (c != null) {
- _g.setColor(EbliLib.getAlphaColor(c, alpha));
- _g.drawLine(x[0], y[0], x[0], y[0]);
- }
- }
- } else if (isLineAllPaintedByNode(minX, maxX, minY, maxY, x, y, nbPt)) {
- for (int iPt = 0; iPt < nbPt; iPt++) {
- int idxDone = x[iPt] + y[iPt] * w;
+ if (!traceIsoLine && isOnlyOnePoint) {
+ if (clipEcran.contientXY(x[0], y[0])) {
+ int idxDone = x[0] + y[0] * w;
if (idxDone >= 0 && !memory.isSelected(idxDone)) {
memory.add(idxDone);
- double value = modelToUse.getDatatFor(idxElt, iPt);
- final Color c = EbliLib.getAlphaColor(paletteCouleur == null ? null : ((BPalettePlage) paletteCouleur).getColorFor(
- value), alpha);
+ double value = modelToUse.getDatatFor(idxElt, 0);
+ final Color c = paletteCouleur == null ? null : ((BPalettePlage) paletteCouleur).getColorFor(value);
if (c != null) {
- _g.setColor(c);
- _g.drawLine(x[iPt], y[iPt], x[iPt], y[iPt]);
+ _g.setColor(EbliLib.getAlphaColor(c, alpha));
+ _g.drawLine(x[0], y[0], x[0], y[0]);
}
}
-
+ }
+ } else if (!traceIsoLine && isLineAllPaintedByNode(minX, maxX, minY, maxY, x, y, nbPt)) {
+ for (int iPt = 0; iPt < nbPt; iPt++) {
+ if (clipEcran.contientXY(x[iPt], y[iPt])) {
+ int idxDone = x[iPt] + y[iPt] * w;
+ if (idxDone >= 0 && !memory.isSelected(idxDone)) {
+ memory.add(idxDone);
+ double value = modelToUse.getDatatFor(idxElt, iPt);
+ final Color c = EbliLib.getAlphaColor(paletteCouleur == null ? null : ((BPalettePlage) paletteCouleur).getColorFor(
+ value), alpha);
+ if (c != null) {
+ _g.setColor(c);
+ _g.drawLine(x[iPt], y[iPt], x[iPt], y[iPt]);
+ }
+ }
+ }
}
} else {
value = modelToUse.fillWithData(idxElt, value);
@@ -231,4 +239,9 @@
}
}
}
+ boolean rapide;
+
+ public void setRapide(boolean rapide) {
+ this.rapide = rapide;
+ }
}
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|