|
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.
|