From: <de...@us...> - 2009-10-11 19:10:19
|
Revision: 5228 http://fudaa.svn.sourceforge.net/fudaa/?rev=5228&view=rev Author: deniger Date: 2009-10-11 19:10:04 +0000 (Sun, 11 Oct 2009) Log Message: ----------- Modified Paths: -------------- trunk/framework/ctulu-bu/pom.xml trunk/framework/ctulu-common/pom.xml trunk/framework/ctulu-fu/pom.xml trunk/framework/ctulu-gis/pom.xml trunk/framework/ctulu-ui/pom.xml trunk/framework/ctulu-video/pom.xml trunk/framework/dodico-common/pom.xml trunk/framework/ebli-1d/pom.xml trunk/framework/ebli-2d/pom.xml trunk/framework/ebli-3d/pom.xml trunk/framework/ebli-common/pom.xml trunk/framework/ebli-graphe/pom.xml trunk/framework/ebli-visuallibrary/pom.xml trunk/framework/ebli-visuallibrary/src/main/java/org/fudaa/ebli/visuallibrary/actions/EbliWidgetActionDelete.java trunk/framework/fudaa-common/pom.xml trunk/framework/fudaa-common-courbe/pom.xml trunk/framework/fudaa-common-save/pom.xml trunk/framework/pom.xml Added Paths: ----------- trunk/framework/ebli-3d/src/main/java/org/fudaa/ebli/volume/BLumiere.java trunk/framework/ebli-3d/src/main/java/org/fudaa/ebli/volume/BLumiereDirectionnelle.java trunk/framework/ebli-3d/src/main/java/org/fudaa/ebli/volume/BNuagePoints.java trunk/framework/ebli-3d/src/main/java/org/fudaa/ebli/volume/BObjet2D.java trunk/framework/ebli-3d/src/main/java/org/fudaa/ebli/volume/BTriangles.java trunk/framework/ebli-3d/src/main/java/org/fudaa/ebli/volume/BUnivers.java trunk/framework/ebli-3d/src/main/java/org/fudaa/ebli/volume/BVolume.java trunk/framework/ebli-3d/src/main/java/org/fudaa/ebli/volume/EbliFilleVue3D.java trunk/framework/ebli-3d/src/main/java/org/fudaa/ebli/volume/VolumePreferencesPanel.java trunk/framework/ebli-3d/src/main/java/org/fudaa/ebli/volume/ZVue3DController.java trunk/framework/ebli-3d/src/main/java/org/fudaa/ebli/volume/ZVue3DPanel.java trunk/framework/ebli-3d/src/main/java/org/fudaa/ebli/volume/ZVueAnimAdapter.java trunk/framework/ebli-3d/src/main/java/org/fudaa/ebli/volume/common/BControleAffichageTarget.java trunk/framework/ebli-3d/src/main/java/org/fudaa/ebli/volume/common/BControleLumiereTarget.java trunk/framework/ebli-3d/src/main/java/org/fudaa/ebli/volume/common/BGrilleAbstract.java trunk/framework/ebli-3d/src/main/java/org/fudaa/ebli/volume/common/BTextureTargetInterface.java trunk/framework/ebli-3d/src/main/java/org/fudaa/ebli/volume/common/BUniversInterface.java trunk/framework/ebli-3d/src/main/java/org/fudaa/ebli/volume/common/BVolumeAbstract.java trunk/framework/ebli-3d/src/main/java/org/fudaa/ebli/volume/common/GroupeInterface.java trunk/framework/ebli-3d/src/main/java/org/fudaa/ebli/volume/common/Objet3DInterface.java trunk/framework/ebli-3d/src/main/java/org/fudaa/ebli/volume/controles/BArbreVolume.java trunk/framework/ebli-3d/src/main/java/org/fudaa/ebli/volume/controles/BControleAffichage.java trunk/framework/ebli-3d/src/main/java/org/fudaa/ebli/volume/controles/BControleEchelle.java trunk/framework/ebli-3d/src/main/java/org/fudaa/ebli/volume/controles/BControleLumiere.java trunk/framework/ebli-3d/src/main/java/org/fudaa/ebli/volume/controles/BControleTexture.java trunk/framework/ebli-3d/src/main/java/org/fudaa/ebli/volume/controles/BControleVisible.java trunk/framework/ebli-3d/src/main/java/org/fudaa/ebli/volume/controles/BControleVolume.java trunk/framework/ebli-3d/src/main/java/org/fudaa/ebli/volume/controles/BMagnetoscope.java trunk/framework/ebli-3d/src/main/java/org/fudaa/ebli/volume/controles/BPas.java trunk/framework/ebli-3d/src/main/java/org/fudaa/ebli/volume/controles/BPosition.java trunk/framework/ebli-3d/src/main/java/org/fudaa/ebli/volume/controles/BSelecteurTexture.java trunk/framework/ebli-3d/src/main/java/org/fudaa/ebli/volume/controles/BUniversInteraction.java trunk/framework/ebli-3d/src/main/java/org/fudaa/ebli/volume/controles/BVolumeTransformation.java trunk/framework/ebli-3d/src/main/java/org/fudaa/ebli/volume/controles/TrajectoireCamera.java trunk/framework/ebli-3d/src/main/java/org/fudaa/ebli/volume/controles/TransformTypeIn.java trunk/framework/ebli-3d/src/main/java/org/fudaa/ebli/volume/controles/ZControleEchelle.java trunk/framework/ebli-3d/src/main/java/org/fudaa/ebli/volume/controles/ZControleLumiere.java trunk/framework/ebli-3d/test.txt Modified: trunk/framework/ctulu-bu/pom.xml =================================================================== --- trunk/framework/ctulu-bu/pom.xml 2009-10-11 18:59:48 UTC (rev 5227) +++ trunk/framework/ctulu-bu/pom.xml 2009-10-11 19:10:04 UTC (rev 5228) @@ -1,12 +1,13 @@ <?xml version="1.0" encoding="UTF-8"?> -<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> +<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <parent> - <artifactId>fudaa-framework</artifactId> - <groupId>org.fudaa</groupId> + <groupId>org.fudaa.framework</groupId> + <artifactId>pom</artifactId> <version>1.1-SNAPSHOT</version> </parent> - <groupId>${ctuluGroupId}</groupId> + <groupId>org.fudaa.framework.ctulu</groupId> <artifactId>ctulu-bu</artifactId> <name>ctulu-bu</name> <dependencies> Modified: trunk/framework/ctulu-common/pom.xml =================================================================== --- trunk/framework/ctulu-common/pom.xml 2009-10-11 18:59:48 UTC (rev 5227) +++ trunk/framework/ctulu-common/pom.xml 2009-10-11 19:10:04 UTC (rev 5228) @@ -1,12 +1,13 @@ <?xml version="1.0" encoding="UTF-8"?> -<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> +<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <parent> - <artifactId>fudaa-framework</artifactId> - <groupId>org.fudaa</groupId> + <groupId>org.fudaa.framework</groupId> + <artifactId>pom</artifactId> <version>1.1-SNAPSHOT</version> </parent> - <groupId>${ctuluGroupId}</groupId> + <groupId>org.fudaa.framework.ctulu</groupId> <artifactId>ctulu-common</artifactId> <name>ctulu-common</name> <dependencies> Modified: trunk/framework/ctulu-fu/pom.xml =================================================================== --- trunk/framework/ctulu-fu/pom.xml 2009-10-11 18:59:48 UTC (rev 5227) +++ trunk/framework/ctulu-fu/pom.xml 2009-10-11 19:10:04 UTC (rev 5228) @@ -1,12 +1,12 @@ -<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> - +<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> <modelVersion>4.0.0</modelVersion> <parent> - <groupId>org.fudaa</groupId> - <artifactId>fudaa-framework</artifactId> + <groupId>org.fudaa.framework</groupId> + <artifactId>pom</artifactId> <version>1.1-SNAPSHOT</version> </parent> - <groupId>${ctuluGroupId}</groupId> + <groupId>org.fudaa.framework.ctulu</groupId> <artifactId>ctulu-fu</artifactId> <packaging>jar</packaging> <description>Les package de com.memoire non graphique</description> Modified: trunk/framework/ctulu-gis/pom.xml =================================================================== --- trunk/framework/ctulu-gis/pom.xml 2009-10-11 18:59:48 UTC (rev 5227) +++ trunk/framework/ctulu-gis/pom.xml 2009-10-11 19:10:04 UTC (rev 5228) @@ -1,12 +1,13 @@ <?xml version="1.0" encoding="UTF-8"?> -<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> +<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <parent> - <artifactId>fudaa-framework</artifactId> - <groupId>org.fudaa</groupId> + <groupId>org.fudaa.framework</groupId> + <artifactId>pom</artifactId> <version>1.1-SNAPSHOT</version> </parent> - <groupId>${ctuluGroupId}</groupId> + <groupId>org.fudaa.framework.ctulu</groupId> <artifactId>ctulu-gis</artifactId> <name>ctulu-gis</name> <dependencies> Modified: trunk/framework/ctulu-ui/pom.xml =================================================================== --- trunk/framework/ctulu-ui/pom.xml 2009-10-11 18:59:48 UTC (rev 5227) +++ trunk/framework/ctulu-ui/pom.xml 2009-10-11 19:10:04 UTC (rev 5228) @@ -1,12 +1,13 @@ <?xml version="1.0" encoding="UTF-8"?> -<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> +<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <parent> - <artifactId>fudaa-framework</artifactId> - <groupId>org.fudaa</groupId> + <groupId>org.fudaa.framework</groupId> + <artifactId>pom</artifactId> <version>1.1-SNAPSHOT</version> </parent> - <groupId>${ctuluGroupId}</groupId> + <groupId>org.fudaa.framework.ctulu</groupId> <artifactId>ctulu-ui</artifactId> <name>ctulu-ui</name> <dependencies> Modified: trunk/framework/ctulu-video/pom.xml =================================================================== --- trunk/framework/ctulu-video/pom.xml 2009-10-11 18:59:48 UTC (rev 5227) +++ trunk/framework/ctulu-video/pom.xml 2009-10-11 19:10:04 UTC (rev 5228) @@ -1,19 +1,20 @@ <?xml version="1.0" encoding="UTF-8"?> -<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> +<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <parent> - <artifactId>fudaa-framework</artifactId> - <groupId>org.fudaa</groupId> + <groupId>org.fudaa.framework</groupId> + <artifactId>pom</artifactId> <version>1.1-SNAPSHOT</version> </parent> - <groupId>${ctuluGroupId}</groupId> + <groupId>org.fudaa.framework.ctulu</groupId> <artifactId>ctulu-video</artifactId> <name>ctulu-video</name> <dependencies> <dependency> - <groupId>${ctuluGroupId}</groupId> - <artifactId>ctulu-common</artifactId> - </dependency> + <groupId>${ctuluGroupId}</groupId> + <artifactId>ctulu-common</artifactId> + </dependency> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> Modified: trunk/framework/dodico-common/pom.xml =================================================================== --- trunk/framework/dodico-common/pom.xml 2009-10-11 18:59:48 UTC (rev 5227) +++ trunk/framework/dodico-common/pom.xml 2009-10-11 19:10:04 UTC (rev 5228) @@ -1,12 +1,13 @@ <?xml version="1.0" encoding="UTF-8"?> -<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> +<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <parent> - <artifactId>fudaa-framework</artifactId> - <groupId>org.fudaa</groupId> + <groupId>org.fudaa.framework</groupId> + <artifactId>pom</artifactId> <version>1.1-SNAPSHOT</version> </parent> - <groupId>${dodicoGroupId}</groupId> + <groupId>org.fudaa.framework.dodico</groupId> <artifactId>dodico-common</artifactId> <name>dodico-common</name> <dependencies> Modified: trunk/framework/ebli-1d/pom.xml =================================================================== --- trunk/framework/ebli-1d/pom.xml 2009-10-11 18:59:48 UTC (rev 5227) +++ trunk/framework/ebli-1d/pom.xml 2009-10-11 19:10:04 UTC (rev 5228) @@ -1,12 +1,13 @@ <?xml version="1.0" encoding="UTF-8"?> -<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> +<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <parent> - <artifactId>fudaa-framework</artifactId> - <groupId>org.fudaa</groupId> + <groupId>org.fudaa.framework</groupId> + <artifactId>pom</artifactId> <version>1.1-SNAPSHOT</version> </parent> - <groupId>${ebliGroupId}</groupId> + <groupId>org.fudaa.framework.ebli</groupId> <artifactId>ebli-1d</artifactId> <name>ebli-1d</name> <dependencies> Modified: trunk/framework/ebli-2d/pom.xml =================================================================== --- trunk/framework/ebli-2d/pom.xml 2009-10-11 18:59:48 UTC (rev 5227) +++ trunk/framework/ebli-2d/pom.xml 2009-10-11 19:10:04 UTC (rev 5228) @@ -1,12 +1,13 @@ <?xml version="1.0" encoding="UTF-8"?> -<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> +<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <parent> - <artifactId>fudaa-framework</artifactId> - <groupId>org.fudaa</groupId> + <groupId>org.fudaa.framework</groupId> + <artifactId>pom</artifactId> <version>1.1-SNAPSHOT</version> </parent> - <groupId>${ebliGroupId}</groupId> + <groupId>org.fudaa.framework.ebli</groupId> <artifactId>ebli-2d</artifactId> <name>ebli-2d</name> <dependencies> Modified: trunk/framework/ebli-3d/pom.xml =================================================================== --- trunk/framework/ebli-3d/pom.xml 2009-10-11 18:59:48 UTC (rev 5227) +++ trunk/framework/ebli-3d/pom.xml 2009-10-11 19:10:04 UTC (rev 5228) @@ -1,12 +1,13 @@ <?xml version="1.0" encoding="UTF-8"?> -<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> +<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <parent> - <artifactId>fudaa-framework</artifactId> - <groupId>org.fudaa</groupId> + <groupId>org.fudaa.framework</groupId> + <artifactId>pom</artifactId> <version>1.1-SNAPSHOT</version> </parent> - <groupId>${ebliGroupId}</groupId> + <groupId>org.fudaa.framework.ebli</groupId> <artifactId>ebli-3d</artifactId> <name>ebli-3d</name> <dependencies> Added: trunk/framework/ebli-3d/src/main/java/org/fudaa/ebli/volume/BLumiere.java =================================================================== --- trunk/framework/ebli-3d/src/main/java/org/fudaa/ebli/volume/BLumiere.java (rev 0) +++ trunk/framework/ebli-3d/src/main/java/org/fudaa/ebli/volume/BLumiere.java 2009-10-11 19:10:04 UTC (rev 5228) @@ -0,0 +1,156 @@ +/* + * @creation 1999-12-30 + * @modification $Date: 2006-11-14 09:06:28 $ + * @license GNU General Public License 2 + * @copyright (c)1998-2001 CETMEF 2 bd Gambetta F-60231 Compiegne + * @mail de...@fu... + */ +package org.fudaa.ebli.volume; + +import javax.media.j3d.BranchGroup; + +import org.fudaa.ebli.volume.common.GroupeInterface; +import org.fudaa.ebli.volume.common.Objet3DInterface; + +/** + * @version $Revision: 1.15 $ $Date: 2006-11-14 09:06:28 $ by $Author: deniger $ + * @author Christophe Delhorbe + */ +public abstract class BLumiere extends BranchGroup implements Objet3DInterface { + // l'ID de l'objet + protected int index_; + // son pere + protected GroupeInterface pere_; + // proprietes : + protected boolean visible_; + protected String nom_; + + public BLumiere() { + nom_ = null; + pere_ = null; + index_ = 0; + visible_ = false; + // setCapability(BranchGroup.ALLOW_DETACH); + } + + public boolean isFilaireEditable() { + return false; + } + + public boolean isRapideEditable() { + return false; + } + + /** + * Nomme le volume. + * + * @param _name le nom du volume + */ + public void setName(final String _name) { + nom_ = _name; + } + + /** + * Nom du volume. + * + * @return le nom du volume + */ + public String getName() { + return nom_; + } + + /** + * Renvoie l'indice de l'objet dans le groupe. + * + * @return index_ l'indice (entier) + */ + public int getIndex() { + return index_; + } + + /** + * Mutateur de la propri\xE9t\xE9 index. + * + * @param _index le nouvel indice (entier) + */ + public void setIndex(final int _index) { + index_ = _index; + } + + /** + * @return true si volume visible + */ + public boolean isVisible() { + return visible_; + } + + /** + * Indique si l'objet doit \xEAtre afficher rapidement. + * + * @return vrai si le mode rapide est selectionn\xE9 pour cet objet + */ + public boolean isRapide() { + return false; + } + + /** + * Affiche ou non l'objet sous forme rapide (boite...). + * + * @param _rapide true: le mode d'affichage rapide est selection\xE9 + */ + public void setRapide(final boolean _rapide) {} + + /** + * Renvoie le groupe p\xE8re de l'objet. + * + * @return le groupe p\xE8re + */ + public GroupeInterface getPere() { + return pere_; + } + + /** + * Modifie le p\xE8re de l'objet (= le groupe auquel l'objet appartient). + * + * @param _pere le groupe p\xE8re + */ + public void setPere(final GroupeInterface _pere) { + pere_ = _pere; + } + + /** + * M\xE9thode qui modifie une propri\xE9t\xE9 de l'objet. + * + * @param _name : le nom de la propri\xE9t\xE9 + * @param _value sa nouvelle valeur + */ + public boolean setProperty(final String _name, final Object _value) { + return BVolume.setDefaultProperty(this, _name, _value); + } + boolean destructible_; + + /** + * Indique si l'objet peut \xEAtre supprim\xE9 de la sc\xE8ne. + */ + public boolean isDestructible() { + return destructible_; + } + + /** + * Modifie l'enlevabilit\xE9 de l'objet. + * + * @param _destructible : vrai si l'objet peut \xEAtre d\xE9truit + */ + public void setDestructible(final boolean _destructible) { + destructible_ = _destructible; + } + + /** + * detruit l'objet (il est retir\xE9 de l'arbre). + */ + public void detruire() { + if (isDestructible() && (pere_ != null)) { + pere_.remove(index_); + } + } +} Added: trunk/framework/ebli-3d/src/main/java/org/fudaa/ebli/volume/BLumiereDirectionnelle.java =================================================================== --- trunk/framework/ebli-3d/src/main/java/org/fudaa/ebli/volume/BLumiereDirectionnelle.java (rev 0) +++ trunk/framework/ebli-3d/src/main/java/org/fudaa/ebli/volume/BLumiereDirectionnelle.java 2009-10-11 19:10:04 UTC (rev 5228) @@ -0,0 +1,105 @@ +/* + * @creation 1999-12-30 + * @modification $Date: 2006-11-20 08:40:15 $ + * @license GNU General Public License 2 + * @copyright (c)1998-2001 CETMEF 2 bd Gambetta F-60231 Compiegne + * @mail de...@fu... + */ +package org.fudaa.ebli.volume; + +import java.awt.Color; + +import javax.media.j3d.BoundingSphere; +import javax.media.j3d.Bounds; +import javax.media.j3d.DirectionalLight; +import javax.media.j3d.Light; +import javax.media.j3d.Node; +import javax.vecmath.Color3f; +import javax.vecmath.Point3d; +import javax.vecmath.Vector3f; + +import org.fudaa.ebli.volume.common.BControleLumiereTarget; + +/** + * @version $Revision: 1.10 $ $Date: 2006-11-20 08:40:15 $ by $Author: deniger $ + * @author Christophe Delhorbe + */ +public class BLumiereDirectionnelle extends BLumiere implements BControleLumiereTarget { + DirectionalLight l_; + Vector3f direction_; + protected Color couleur_; + protected double intensite_ = 1; + + public BLumiereDirectionnelle(final Vector3f _vecteur, final Color _couleur) { + couleur_ = _couleur; + direction_ = _vecteur; + l_ = new DirectionalLight(new Color3f(_couleur), _vecteur); + l_.setCapability(Light.ALLOW_STATE_WRITE); + l_.setCapability(Light.ALLOW_STATE_READ); + l_.setCapability(Light.ALLOW_COLOR_WRITE); + l_.setCapability(Light.ALLOW_COLOR_READ); + l_.setCapability(DirectionalLight.ALLOW_DIRECTION_WRITE); + l_.setCapability(DirectionalLight.ALLOW_DIRECTION_READ); + l_.setCapability(Node.ALLOW_BOUNDS_READ); + l_.setCapability(Node.ALLOW_BOUNDS_WRITE); + l_.setCapability(Light.ALLOW_INFLUENCING_BOUNDS_READ); + l_.setCapability(Light.ALLOW_INFLUENCING_BOUNDS_WRITE); + setCapability(ALLOW_AUTO_COMPUTE_BOUNDS_READ); + setCapability(ALLOW_AUTO_COMPUTE_BOUNDS_READ); + l_.setInfluencingBounds(new BoundingSphere(new Point3d(), 100)); + for (int i = 18; i < 20; i++) { + l_.setCapability(i); + } + addChild(l_); + setName("Direction"); + } + + public void setBounds(final Bounds _b) { + l_.setInfluencingBounds(_b); + } + + public BoundingSphere getLightBounds() { + return (BoundingSphere) l_.getInfluencingBounds(); + } + + public void setVisible(final boolean _visible) { + l_.setEnable(_visible); + visible_ = _visible; + } + + public Vector3f getDirection() { + return direction_; + } + + public void setDirection(final Vector3f _direction) { + try { + direction_ = _direction; + l_.setDirection(direction_); + } catch (final Exception ex) {} + } + + public Color getCouleur() { + return couleur_; + } + + public void setCouleur(final Color _couleur) { + couleur_ = _couleur; + l_.setColor(new Color3f(couleur_)); + } + + public void setIntensite(final double _intensite) { + intensite_ = _intensite; + float red, green, blue; + red = (float) (couleur_.getRed() * intensite_ / 255); + green = (float) (couleur_.getGreen() * intensite_ / 255); + blue = (float) (couleur_.getBlue() * intensite_ / 255); + try { + l_.setColor(new Color3f(red, green, blue)); + } catch (final Exception ex) {} + } + + public double getIntensite() { + return intensite_; + } + +} Added: trunk/framework/ebli-3d/src/main/java/org/fudaa/ebli/volume/BNuagePoints.java =================================================================== --- trunk/framework/ebli-3d/src/main/java/org/fudaa/ebli/volume/BNuagePoints.java (rev 0) +++ trunk/framework/ebli-3d/src/main/java/org/fudaa/ebli/volume/BNuagePoints.java 2009-10-11 19:10:04 UTC (rev 5228) @@ -0,0 +1,78 @@ +/* + * @file BNuagePoints.java + * @creation 1999-11-29 + * @modification $Date: 2006-07-13 13:35:48 $ + * @license GNU General Public License 2 + * @copyright (c)1998-2001 CETMEF 2 bd Gambetta F-60231 Compiegne + * @mail de...@fu... + */ +package org.fudaa.ebli.volume; + +import javax.media.j3d.*; +import javax.vecmath.Color3f; +import javax.vecmath.Point3d; +import javax.vecmath.Vector3d; + +/** + * @version $Revision: 1.13 $ $Date: 2006-07-13 13:35:48 $ by $Author: deniger $ + * @author Christophe Delhorbe + */ +public class BNuagePoints extends BGrille { + private int npoints_; + + public BNuagePoints() { + super(); + npoints_ = 0; + } + + public BNuagePoints(final String _s) { + super(_s); + npoints_ = 0; + } + + public void setGeometrie(final Point3d[] _points) { + /* for (int i = 0; i < _points.length; i++) { + _points[i].x = _points[i].x / ParametresVolumes.ECHELLE; + _points[i].y = _points[i].y / ParametresVolumes.ECHELLE; + _points[i].z = _points[i].z / ParametresVolumes.ECHELLE; + // System.out.println("Point "+points[i]); + }*/ + bbox_=new BoundingBox(); + bbox_.combine(_points); + final Point3d low = new Point3d(); + final Point3d up = new Point3d(); + bbox_.getLower(low); + bbox_.getUpper(up); + npoints_ = _points.length; + final PointArray pointarray = new PointArray(npoints_, GeometryArray.COORDINATES | GeometryArray.COLOR_3); + pointarray.setCoordinates(0, _points); + for (int i = 0; i < npoints_; i++) { + pointarray.setColor(i, new Color3f(1f, 1f, 1f)); + } + pointarray.setCapability(GeometryArray.ALLOW_COLOR_READ); + pointarray.setCapability(GeometryArray.ALLOW_COLOR_WRITE); + shape_.setGeometry(pointarray); + final PolygonAttributes pa = new PolygonAttributes(); + pa.setCapability(PolygonAttributes.ALLOW_MODE_READ); + pa.setCapability(PolygonAttributes.ALLOW_MODE_WRITE); + pa.setPolygonMode(PolygonAttributes.POLYGON_LINE); + pa.setCullFace(PolygonAttributes.CULL_NONE); + pa.setBackFaceNormalFlip(true); + final Appearance ap = new Appearance(); + ap.setPolygonAttributes(pa); + boiteEnglobante_ = new com.sun.j3d.utils.geometry.Box((float) (up.x - low.x) / 2, (float) (up.y - low.y) / 2, + (float) (up.z - low.z) / 2, ap); + final TransformGroup bTg = new TransformGroup(); + final Transform3D t3d = new Transform3D(); + t3d.set(new Vector3d((up.x - low.x) / 2, (float) (up.y - low.y) / 2, -(float) (up.z - low.z) / 2)); + bTg.setTransform(t3d); + bTg.addChild(boiteEnglobante_); + switch_.addChild(bTg); + /*for (int i = 0; i < _points.length; i++) { + _points[i].x = _points[i].x * ParametresVolumes.ECHELLE; + _points[i].y = _points[i].y * ParametresVolumes.ECHELLE; + _points[i].z = _points[i].z * ParametresVolumes.ECHELLE; + // System.out.println("Point "+points[i]); + }*/ + } +} Added: trunk/framework/ebli-3d/src/main/java/org/fudaa/ebli/volume/BObjet2D.java =================================================================== --- trunk/framework/ebli-3d/src/main/java/org/fudaa/ebli/volume/BObjet2D.java (rev 0) +++ trunk/framework/ebli-3d/src/main/java/org/fudaa/ebli/volume/BObjet2D.java 2009-10-11 19:10:04 UTC (rev 5228) @@ -0,0 +1,140 @@ +/* + * @creation 1999-12-30 + * @modification $Date: 2006-11-14 09:06:29 $ + * @license GNU General Public License 2 + * @copyright (c)1998-2001 CETMEF 2 bd Gambetta F-60231 Compiegne + * @mail de...@fu... + */ +package org.fudaa.ebli.volume; + +import java.awt.Canvas; +import java.beans.PropertyChangeListener; +import java.lang.reflect.Method; + +import org.fudaa.ebli.volume.common.GroupeInterface; +import org.fudaa.ebli.volume.common.Objet3DInterface; + +/** + * @version $Revision: 1.13 $ $Date: 2006-11-14 09:06:29 $ by $Author: deniger $ + * @author Christophe Delhorbe + */ +public abstract class BObjet2D extends Canvas implements PropertyChangeListener, Objet3DInterface { + private int index_; + private String nom_; + private GroupeInterface pere_; + private boolean rapide_; + + /** + * Nomme le volume. + * + * @param _nom le nouveau nom du volume + */ + public void setName(final String _nom) { + nom_ = _nom; + } + + public boolean isFilaireEditable() { + return true; + } + + public boolean isRapideEditable() { + return true; + } + + /** + * Renvoie le nom du volume. + * + * @return le nom du volume + */ + public String getName() { + return nom_; + } + + /** + * Renvoie l'indice de l'objet dans le groupe. + * + * @return l'indice + */ + public int getIndex() { + return index_; + } + + /** + * Modifie l'indice de l'objet dans le groupe. + * + * @param _index le nouvel indice + */ + public void setIndex(final int _index) { + index_ = _index; + } + + public boolean isRapide() { + return rapide_; + } + + public void setRapide(final boolean _rapide) { + rapide_ = _rapide; + } + + public GroupeInterface getPere() { + return pere_; + } + + public void setPere(final GroupeInterface _pere) { + pere_ = _pere; + } + + public boolean setProperty(final String _name, final Object _value) { + boolean res = false; + try { + final String n = "set" + _name.substring(0, 1).toUpperCase() + _name.substring(1); + Class z = _value.getClass(); + try { + z = (Class) (z.getField("TYPE").get(z)); + } catch (final Exception ey) {} + Class[] c = null; + Method m = null; + do { + c = new Class[] { z }; + try { + m = getClass().getMethod(n, c); + } catch (final Exception ey) {} + z = z.getSuperclass(); + } while ((m == null) && (z != null)); + final Object[] o = new Object[] { _value }; + if (m != null) { + m.invoke(this, o); + res = true; + } + } catch (final Exception ex) {} + return res; + } + private boolean destructible_; + + /** + * Indique si l'objet peut etre supprime de la scene. + * + * @return vrai si l'objet peut etre detruit + */ + public boolean isDestructible() { + return destructible_; + } + + /** + * Modifie le caractere suppressible de l'objet. + * + * @param _destructible indique si l'objet peut etre detruit + */ + public void setDestructible(final boolean _destructible) { + destructible_ = _destructible; + } + + /** + * Detruit l'objet. Il est retire de l'arbre. + */ + public void detruire() { + if (isDestructible() && (pere_ != null)) { + pere_.remove(index_); + } + } +} Added: trunk/framework/ebli-3d/src/main/java/org/fudaa/ebli/volume/BTriangles.java =================================================================== --- trunk/framework/ebli-3d/src/main/java/org/fudaa/ebli/volume/BTriangles.java (rev 0) +++ trunk/framework/ebli-3d/src/main/java/org/fudaa/ebli/volume/BTriangles.java 2009-10-11 19:10:04 UTC (rev 5228) @@ -0,0 +1,126 @@ +/* + * @creation 2000-02-04 + * @modification $Date: 2006-07-13 13:35:48 $ + * @license GNU General Public License 2 + * @copyright (c)1998-2001 CETMEF 2 bd Gambetta F-60231 Compiegne + * @mail de...@fu... + */ +package org.fudaa.ebli.volume; +import java.awt.Color; + +import javax.media.j3d.*; +import javax.vecmath.Color3f; +import javax.vecmath.Color4f; +import javax.vecmath.Point3d; +import javax.vecmath.Point3f; +import javax.vecmath.Vector3d; +/** + * @version $Revision: 1.12 $ $Date: 2006-07-13 13:35:48 $ by $Author: deniger $ + * @author Christophe Delhorbe + */ +public class BTriangles extends BGrille { +/* private int npoints_; + private TriangleArray geometrie_;*/ + public BTriangles() { + super(); + /*npoints_= 0; + geometrie_= null;*/ + } + public BTriangles(final String _s) { + super(_s); +/* npoints_= 0;*/ + } + public void setGeometrie(final TriangleArray _geometrie) { + _geometrie.setCapability(Geometry.ALLOW_INTERSECT); + _geometrie.setCapability(GeometryArray.ALLOW_COLOR_READ); + _geometrie.setCapability(GeometryArray.ALLOW_COLOR_WRITE); + _geometrie.setCapability(GeometryArray.ALLOW_COUNT_READ); + _geometrie.setCapability(GeometryArray.ALLOW_COORDINATE_READ); + _geometrie.setCapability(GeometryArray.ALLOW_COORDINATE_WRITE); +// geometrie_= _geometrie; + shape_.setGeometry(_geometrie); + calculeBBox(); + final Point3d low= new Point3d(); + final Point3d up= new Point3d(); + bbox_.getLower(low); + bbox_.getUpper(up); + // Appearance ap=shape_.getAppearance(); + final PolygonAttributes pa= new PolygonAttributes(); + pa.setCapability(PolygonAttributes.ALLOW_MODE_READ); + pa.setCapability(PolygonAttributes.ALLOW_MODE_WRITE); + pa.setPolygonMode(PolygonAttributes.POLYGON_LINE); + pa.setCullFace(PolygonAttributes.CULL_NONE); + pa.setBackFaceNormalFlip(true); + final ColoringAttributes ca= new ColoringAttributes(); + ca.setColor(new Color3f(1f, 0f, 0f)); + final Appearance ap= new Appearance(); + ap.setPolygonAttributes(pa); + ap.setColoringAttributes(ca); + // ap.getPolygonAttributes().setPolygonMode(PolygonAttributes.POLYGON_LINE); + boiteEnglobante_= + new com.sun.j3d.utils.geometry.Box( + (float) (up.x - low.x) / 2, + (float) (up.y - low.y) / 2, + (float) (up.z - low.z) / 2, + ap); + final TransformGroup bTg= new TransformGroup(); + final Transform3D t3d= new Transform3D(); + t3d.set( + new Vector3d((low.x + up.x) / 2, (low.y + up.y) / 2, (low.z + up.z) / 2)); + bTg.setTransform(t3d); + bTg.addChild(boiteEnglobante_); + switch_.addChild(bTg); + // centre(); + } + public void setGeometrie(final int _nbNds, final Point3d[] _noeuds) { + final Color[] c= new Color[_nbNds]; + for (int i= 0; i < _nbNds; i++) { + c[i]= Color.white; + } + setGeometrie(_nbNds, _noeuds, c); + } + public void setGeometrie(final int _nbNds, final Point3d[] _noeuds, final Color[] _c) { + /*for (int i= 0; i < _nbNds; i++) { + _noeuds[i].x= _noeuds[i].x / ParametresVolumes.ECHELLE; + _noeuds[i].y= _noeuds[i].y / ParametresVolumes.ECHELLE; + _noeuds[i].z= _noeuds[i].z / ParametresVolumes.ECHELLE; + }*/ + bbox_=new BoundingBox(); + bbox_.combine(_noeuds); + final Point3f[] texpoints= new Point3f[_nbNds]; + for (int i= 0; i < _nbNds; i++) { + texpoints[i]= + new Point3f( + (float) ((_noeuds[i].x + getBoite().o_.x_) + / (getBoite().e_.x_ - getBoite().o_.x_)), + (float) ((_noeuds[i].y + getBoite().o_.y_) + / (getBoite().e_.y_ - getBoite().o_.y_)), + (float)_noeuds[i].z); + } + /* System.out.println("Generation des normales..."); + GeometryInfo geo=new GeometryInfo(GeometryInfo.TRIANGLE_ARRAY); + geo.setCoordinates(noeuds); + new NormalGenerator().generateNormals(geo); + System.out.println("...OK!"); + */ + final TriangleArray ta= + new TriangleArray( + _nbNds, + GeometryArray.COORDINATES | GeometryArray.COLOR_4 // |TriangleArray.NORMALS + | GeometryArray.TEXTURE_COORDINATE_3); + final Color4f[] couleurs= new Color4f[_nbNds]; + for (int i= 0; i < _nbNds; i++) { + couleurs[i]= + new Color4f( + (float)_c[i].getRed() / 255, + (float)_c[i].getGreen() / 255, + (float)_c[i].getBlue() / 255, + (float)_c[i].getAlpha() / 255); + } + ta.setCoordinates(0, _noeuds); + // ta.setNormals(0,geo.getNormals()); + ta.setColors(0, couleurs); + ta.setTextureCoordinates(0, texpoints); + setGeometrie(ta); + } +} Added: trunk/framework/ebli-3d/src/main/java/org/fudaa/ebli/volume/BUnivers.java =================================================================== --- trunk/framework/ebli-3d/src/main/java/org/fudaa/ebli/volume/BUnivers.java (rev 0) +++ trunk/framework/ebli-3d/src/main/java/org/fudaa/ebli/volume/BUnivers.java 2009-10-11 19:10:04 UTC (rev 5228) @@ -0,0 +1,641 @@ +/* + * @creation 11 mai 2006 + * @modification $Date: 2007-05-22 14:19:03 $ + * @license GNU General Public License 2 + * @copyright (c)1998-2001 CETMEF 2 bd Gambetta F-60231 Compiegne + * @mail de...@fu... + */ +package org.fudaa.ebli.volume; + +import java.awt.Color; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import java.beans.PropertyChangeListener; +import java.beans.PropertyChangeSupport; +import java.util.Enumeration; +import java.util.List; + +import javax.media.j3d.*; +import javax.vecmath.AxisAngle4d; +import javax.vecmath.Color3f; +import javax.vecmath.Point3d; +import javax.vecmath.Vector3d; + +import org.fudaa.ebli.commun.EbliLib; +import org.fudaa.ebli.geometrie.GrBoite; +import org.fudaa.ebli.volume.common.BUniversInterface; + +/** + * @author fred deniger + * @version $Id: BUnivers.java,v 1.22 2007-05-22 14:19:03 deniger Exp $ + */ +public class BUnivers extends VirtualUniverse implements BUniversInterface { + + BCanvas3D canvas_; + + class TimerListener implements ActionListener { + long time_ = System.currentTimeMillis(); + + public void actionPerformed(final ActionEvent _evt) { + canvas_.stopRenderer(); + final List v = BUnivers.this.volumes_.getTousEnfants(); + for (int idx = 0; idx < v.size(); idx++) { + ((BVolume) v.get(idx)).actualise(time_ - System.currentTimeMillis()); + } + canvas_.startRenderer(); + } + } + + // trois constantes pour definir les axes de transformation + public final static int X = 0; + + public final static int Y = 1; + public final static int Z = 2; + + // le pere de tous les groupes + private BGroupeStandard groupe_; + // le pere de tous les objets : non private pour etre acceder depuis un thread sans artifact + // le pere de toutes les lumieres + // Position de la camera, pour affichage + private Vector3d position_; + private javax.swing.Timer timer_; + private TransformGroup transformU_; + // la vue en cours + private int vue_; + // le fond + // les quatre vues + private Transform3D[] vues_; + Background background_; + BGroupeLumiere lumieres_; + PropertyChangeSupport support_; + Locale locale_; + + BGroupeVolume volumes_; + + public BUnivers() { + this(new BCanvas3D(null)); + } + + public BUnivers(final BCanvas3D _canvas) { + canvas_ = _canvas; + locale_ = new Locale(this); + final ViewPlatform camera = new ViewPlatform(); + final BranchGroup viewGroup = new BranchGroup(); + final TransformGroup viewTg = new TransformGroup(); + viewTg.setCapability(TransformGroup.ALLOW_TRANSFORM_READ); + viewTg.setCapability(TransformGroup.ALLOW_TRANSFORM_WRITE); + viewTg.setCapability(Node.ALLOW_LOCAL_TO_VWORLD_READ); + viewTg.addChild(camera); + viewGroup.addChild(viewTg); + + final PhysicalBody body = new PhysicalBody(); + final PhysicalEnvironment env = new PhysicalEnvironment(); + + final View view = new View(); + view.setPhysicalBody(body); + view.setPhysicalEnvironment(env); + view.setBackClipDistance(100); + view.setFrontClipDistance(.1); + view.addCanvas3D(canvas_); + view.attachViewPlatform(camera); + transformU_ = viewTg; + position_ = new Vector3d(); + viewGroup.setCapability(BranchGroup.ALLOW_DETACH); + locale_.addBranchGraph(viewGroup); + } + + private void buildFond(Color3f _c) { + if (background_ == null) { + background_ = _c == null ? new Background(0F, 0F, 0F) : new Background(_c); + background_.setCapability(Background.ALLOW_COLOR_WRITE); + background_.setCapability(Background.ALLOW_COLOR_READ); + background_.setCapability(Background.ALLOW_APPLICATION_BOUNDS_READ); + background_.setCapability(Background.ALLOW_APPLICATION_BOUNDS_WRITE); + // background_.setApplicationBounds(new BoundingSphere(new Point3d(0, 0, 0), 1E12)); + background_.setBoundsAutoCompute(true); + + final BranchGroup fond = new BranchGroup(); + fond.addChild(background_); + fond.setCapability(BranchGroup.ALLOW_DETACH); + addBranchGraph(fond); + } + } + + /** + * Ajoute une Branche \xE0 l'arbre de la scene, apres l'avoir compil\xE9e. + * + * @param _bg BranchGroup \xE0 ajouter + */ + public void addBranchGraph(final BranchGroup _bg) { + if (!_bg.isCompiled()) { + _bg.compile(); + } + + locale_.addBranchGraph(_bg); + } + + public void addObjet(final BVolume _v) { + volumes_.add(_v); + } + + public void addPropertyChangeListener(final PropertyChangeListener _l) { + if (support_ == null) { + support_ = new PropertyChangeSupport(this); + } + support_.addPropertyChangeListener(_l); + } + + public void addPropertyChangeListener(final String _propr, final PropertyChangeListener _l) { + if (support_ == null) { + support_ = new PropertyChangeSupport(this); + } + support_.addPropertyChangeListener(_propr, _l); + } + + /** + * met en route ou arrete le timer. + */ + public void animate(final boolean _b) { + if (_b) { + if (timer_ == null) { + timer_ = new javax.swing.Timer(100, new TimerListener()); + } + timer_.start(); + } else if (timer_ != null) { + timer_.stop(); + } + } + + /** + * detruit le groupe d'objet racine. A modifier par la suite: essaie de contourner les bugs de Java3D. Voir le site + * http://wiki.java.net/bin/view/Javadesktop/Java3DApplicationDevelopment#Releasing_Canvas3D_View_and_Virt + */ + public void destroy() { + for (final Enumeration e = getLocale().getAllBranchGraphs(); e.hasMoreElements();) { + ((BranchGroup) e.nextElement()).detach(); + } + BranchGroup emptyGroup = new BranchGroup(); + emptyGroup.setCapability(BranchGroup.ALLOW_DETACH); + locale_.addBranchGraph(emptyGroup); + locale_.removeBranchGraph(emptyGroup); + emptyGroup = null; + try { + getCanvas3D().stopRenderer(); + getCanvas3D().setVisible(false); + try { + getCanvas3D().setOffScreenBuffer(null); + } catch (final RuntimeException _evt) { + + } + final View view = getCanvas3D().getView(); + view.removeAllCanvas3Ds(); + try { + view.attachViewPlatform(null); + } catch (final RuntimeException _evt) { + + } + groupe_.detruire(); + + removeAllLocales(); + com.sun.j3d.utils.universe.Viewer.clearViewerMap(); + } catch (final RuntimeException _evt) { + + } + } + + public void freeze(final boolean _b) { + getCanvas3D().freeze(_b); + } + + public BCanvas3D getCanvas3D() { + return canvas_; + } + + public TransformGroup getObjectTransformGroup() { + return volumes_.getTransformGroup(); + } + + /** + * Renvoie l'objet racine de la scene. + * + * @return le p\xE8re de tous les objets. + */ + public BGroupeStandard getRoot() { + return groupe_; + } + + /** + * Renvoie tous les volumes de la scene (descends dans les groupes de volumes). + * + * @return vecteur contenant tous les volumes. + */ + public List getTousEnfants() { + return groupe_.getTousEnfants(); + } + + public TransformGroup getTransformGroup() { + return transformU_; + } + + /** + * renvoie la position et l'orientation de la camera. + */ + public Transform3D[] getUniversTransforms() { + final Transform3D[] t = new Transform3D[2]; + t[0] = new Transform3D(); + transformU_.getTransform(t[0]); + t[1] = new Transform3D(); + volumes_.getTransformGroup().getTransform(t[1]); + return t; + } + + public int getVue() { + return vue_; + } + + public final static int SUD = 0; + public final static int EST = 1; + public final static int NORD = 2; + public final static int OUEST = 3; + public final static int DESSUS = 4; + + public final static String[] getVues() { + return new String[] { EbliLib.getS("Sud"), EbliLib.getS("Est"), EbliLib.getS("Nord"), EbliLib.getS("Ouest"), + EbliLib.getS("Dessus") }; + } + + double zmid_; + + private void updateFond(GrBoite _boite) { + buildFond(null); + if (_boite == null) return; + double maxDist = Math.max(Math.max(_boite.getDeltaX(), _boite.getDeltaY()), _boite.getDeltaZ()); + background_.setApplicationBounds(new BoundingSphere(new Point3d(_boite.getMidX(), _boite.getMidY(), _boite + .getMidZ()), maxDist * 20)); + } + + public void init() { + if (vues_ == null) { + vues_ = new Transform3D[5]; + } + for (int idx = 0; idx < vues_.length; idx++) { + vues_[idx] = new Transform3D(); + } + // on cree une nouvelle boite. + final GrBoite boite = volumes_.getBoite(); + // on calcule les future coordonn\xE9es de la camera. + final double midX = boite.getMidX(); + final double deltaX = boite.getDeltaX(); + final double midY = boite.getMidY(); + zmid_ = boite.getMidZ(); + final double deltaY = boite.getDeltaY(); + updateFond(boite); + + volumes_.getTransformGroup().setTransform(new Transform3D()); + + // l'angle de vision + final double angleCamera = getCanvas3D().getView().getFieldOfView(); + final double maxL = Math.max(deltaX, deltaY); + + final double z = 0.5 * maxL / Math.tan(angleCamera / 2) + (boite.e_.z_ * echelle_); + // on suppose qu'une \xE9chelle de 20 est le max pour z + final double zForClip = 0.5 * maxL / Math.tan(angleCamera / 2) + (boite.e_.z_ * echelle_ * 20); + final double backClip = Math.hypot(maxL , zForClip); + getCanvas3D().getView().setBackClipDistance(Math.abs(backClip)); + // conseille par la javadoc de java3D + getCanvas3D().getView().setFrontClipDistance(backClip / 100); + // getCanvas3D().getView().setFrontClipDistance(Math.abs(backClip)/4000); + // L'angle pour la vue perspective + // final double anglePersp = Math.toRadians(50); + // VUE SUD + // on positionne en y pour respecte l'angle de la perspective et + // et la distance du milieu de la scene + // on se place en bas de la scene : nord + /******************************************************************************************************************* + * <pre> + * A + * |\ E + * | \ | + * | \ | + * |_ _\|_________________________________ + * B C D + * yMoins deltaY/2 + * </pre> + ******************************************************************************************************************/ + // l'angle CAD est l'angle de la camera + // l'angle BAC est alpha1 + // l'angle CDA est b\xE9ta + // AED sont align\xE9s + // BCD sont a l'attitude zmin + // ||EC|| vaut deltaZ + // ||AC||=dminForX + // la camera se trouve en A et on veut quelle soit au dessus du zmax donc ||EC||=deltaZ et que l'on voit les bords + // du projet: donc AC=dminForX. + // dminForX =distance entre le milieu de la scene et la camera + // calcule afin que l'on puisse voir les bords des X + double ac = deltaX / (2 * Math.tan(angleCamera / 2)); + + // double beta = Math.atan(boite.getDeltaZ() / deltaY); + final double alpha1 = Math.toRadians(70); + // puis pour la boite + ac += boite.getDeltaZ() / Math.cos(alpha1); + double yMoins = Math.sin(alpha1) * ac; + + double yA = boite.o_.y_ - yMoins; + double zA = (boite.o_.z_ * echelle_) + (Math.cos(alpha1) * ac); + + // on peut calculer le z qui se place au milieu des z et qui prend en compte + // l'angle de la perspective et la distance par rapport au milieu + + Transform3D t3d2; + // angle pour le faire regarder vers le bas + // SUD + // transformU_.getTransform(vues_[SUD]); + double alphaCam = alpha1 + angleCamera / 4; + vues_[SUD].setTranslation(new Vector3d(midX, yA/* + z / 4 */, zA)); + vues_[SUD].setRotation(new AxisAngle4d(1, 0, 0, alphaCam)); + // pour le nord on passe de l'autre cote + yA = boite.e_.y_ + yMoins; + vues_[NORD].setTranslation(new Vector3d(midX, yA/* + z / 4 */, zA)); + vues_[NORD].setRotation(new AxisAngle4d(1, 0, 0, -alphaCam)); + t3d2 = new Transform3D(); + // oblige pour remettre la cam\xE9ra dans le bon sens + t3d2.setRotation(new AxisAngle4d(0, 0, 1, Math.PI)); + vues_[NORD].mul(t3d2); + + // DESSUS simple .... + vues_[DESSUS].set(new Vector3d(midX, midY, z)); + + // EST, OUEST:meme combat que nord sud + // dans ce cas, il suffit de tourner la camera de + ou - pi/2 selon Z + // pour l'est et l'ouest + ac = deltaY / (2 * Math.tan(angleCamera / 2)); + ac += boite.getDeltaZ() / Math.cos(alpha1); + // beta = Math.atan(boite.getDeltaZ() / (deltaX / 2)); + // alpha1 = Math.PI / 2 - beta - angleCamera; + yMoins = Math.sin(alpha1) * ac; + double xA = boite.e_.x_ + yMoins; + zA = (boite.o_.z_ * echelle_) + Math.cos(alpha1) * ac; + alphaCam = alpha1 + angleCamera / 2; + vues_[EST].setTranslation(new Vector3d(xA, midY, zA)); + vues_[EST].setRotation(new AxisAngle4d(0, 0, 1, Math.PI / 2)); + t3d2 = new Transform3D(); + t3d2.setRotation(new AxisAngle4d(1, 0, 0, alphaCam)); + vues_[EST].mul(t3d2); + xA = boite.o_.x_ - yMoins; + vues_[OUEST].setTranslation(new Vector3d(xA, midY, zA)); + vues_[OUEST].setRotation(new AxisAngle4d(0, 0, 1, -Math.PI / 2)); + t3d2 = new Transform3D(); + t3d2.setRotation(new AxisAngle4d(1, 0, 0, alphaCam)); + vues_[OUEST].mul(t3d2); + + transformU_.setTransform(getCurrentCamera()); + // vues_[3].setRotation(new AxisAngle4d(1,0,0,Math.PI/2)); + } + + /** + * Tourne les objets sur un des axes d'origine. + * + * @param _axe axe de rotation (X,Y ou Z) + * @param _valeur angle, en radians + */ + public void orbital(final int _axe, final double _valeur) { + // on procede comme pour la translation sauf que la transformation est + // appliqu\xE9e \xE0 objets_ (pere de tous les objets) plutot qu'a la camera. + final Transform3D t3d = new Transform3D(); + volumes_.getTransformGroup().getTransform(t3d); + final Transform3D t3d2 = new Transform3D(); + AxisAngle4d v = new AxisAngle4d(); + switch (_axe) { + case X: + v = new AxisAngle4d(1, 0, 0, _valeur); + break; + // penser que la camera a ete tourn\xE9 de PI/2 suivant l'axe X -> echange des axes Y et Z + case Y: + v = new AxisAngle4d(0, 0, -1, _valeur); + break; + case Z: + v = new AxisAngle4d(0, -1, 0, _valeur); + break; + default: + } + t3d2.setRotation(v); + // on applique cette transformation AVANT les autres + t3d2.mul(t3d); + volumes_.getTransformGroup().setTransform(t3d2); + } + + public void removeBranchGraph(final BranchGroup _bg) { + getLocale().removeBranchGraph(_bg); + + } + + public void removePropertyChangeListener(final PropertyChangeListener _l) { + if (support_ != null) { + support_.removePropertyChangeListener(_l); + } + } + + public void removePropertyChangeListener(final String _propr, final PropertyChangeListener _l) { + if (support_ != null) { + support_.removePropertyChangeListener(_propr, _l); + } + } + + public void repaintCanvas() { + getCanvas3D().repaint(); + } + + /** + * Tourne la camera sur un axe. + * + * @param _axe axe de rotation (X,Y ou Z) + * @param _valeur angle, en radians + */ + public void rotation(final int _axe, final double _valeur) { + // On procede comme pour la translation, sauf qu'il n'est pas necessaire d'envoier un + // PropertyChangeEvent: la position ne change pas + final Transform3D t3d = new Transform3D(); + transformU_.getTransform(t3d); + final Transform3D t3d2 = new Transform3D(); + // AxisAngle: vecteur 4*1 qui stocke l'axe de rotation et l'angle en radians + AxisAngle4d v = null; + switch (_axe) { + case X: + v = new AxisAngle4d(1, 0, 0, _valeur); + break; + case Y: + v = new AxisAngle4d(0, 1, 0, _valeur); + break; + case Z: + v = new AxisAngle4d(0, 0, 1, _valeur); + break; + default: + } + if (v == null) { + return; + } + t3d2.setRotation(v); + t3d.mul(t3d2); + transformU_.setTransform(t3d); + getCurrentCamera().set(t3d); + } + + double echelle_ = 1f; + + protected void updateEchelle(final double _newEchelle) { + if (_newEchelle == echelle_) { + return; + } + final GrBoite boite = getBoite(); + + final Transform3D t3d = new Transform3D(); + transformU_.getTransform(t3d); + final Vector3d trans = new Vector3d(); + t3d.get(trans); + final double deltaInit = trans.z - boite.o_.z_ * echelle_; + trans.z = boite.o_.z_ * _newEchelle + deltaInit; + t3d.setTranslation(trans); + transformU_.setTransform(t3d); + for (final Enumeration en = lumieres_.getAllChildren(); en.hasMoreElements();) { + final Object obj = en.nextElement(); + if (obj instanceof BLumiereDirectionnelle) { + final BLumiereDirectionnelle calque = (BLumiereDirectionnelle) obj; + final BoundingSphere b = calque.getLightBounds(); + final Point3d center = new Point3d(); + b.getCenter(center); + center.z = boite.e_.z_ * _newEchelle; + b.setCenter(center); + } + } + echelle_ = _newEchelle; + + // init(); + // getCurrentCamera().set(t3d); + } + + public void scale(final double _scale) { + final Vector3d pos = new Vector3d(); + getCurrentCamera().get(pos); + final double deltaZ = -(pos.z - zmid_) / 5; + translation(Z, deltaZ); + } + + private Transform3D getCurrentCamera() { + return vues_[vue_]; + } + + public GrBoite getBoite() { + return volumes_ == null ? null : volumes_.getBoite(); + } + + /** + * Fixe la couleur du fond. + */ + public void setBackground(final Color _c) { + background_.setColor(new Color3f(_c)); + // getCanvas3D().waitForSwap(); + } + + public void setImmediateBackground(final Color _c) { + if (background_ == null) buildFond(new Color3f(_c)); + else + background_.setColor(new Color3f(_c)); + } + + public Color getBackground() { + Color3f c3f = new Color3f(); + background_.getColor(c3f); + return c3f.get(); + } + + /** + * Change l'affichage de la sc\xE8ne : choix entre rapidit\xE9 et apparence. + * + * @params _rapide : mode rapide? ( =affichage d\xE9t\xE9rior\xE9) + */ + public void setRapide(final boolean _rapide) { + groupe_.setRapide(_rapide); + } + + public void setRoot(final BGroupeStandard _root) { + buildFond(new Color3f(Color.WHITE)); + if (groupe_ != null) { + getLocale().removeBranchGraph(volumes_); + getLocale().removeBranchGraph(lumieres_); + } + groupe_ = _root; + volumes_ = _root.getGroupeVolume(); + lumieres_ = _root.getGroupeLumiere(); + addBranchGraph(volumes_); + addBranchGraph(lumieres_); + } + + public void setUniversTransform(final Transform3D _t) { + transformU_.setTransform(_t); + } + + /** + * positione la camera. + */ + public void setUniversTransforms(final Transform3D[] _t) { + transformU_.setTransform(_t[0]); + volumes_.getTransformGroup().setTransform(_t[1]); + } + + public void setVue(final int _vue) { + if (vues_[_vue] != null) { + transformU_.setTransform(vues_[_vue]); + vue_ = _vue; + } + } + + /** + * Translate la camera sur un axe. + * + * @param _axe axe de translation (X,Y ou Z) + * @param _valeur longueur de la translation en metres + */ + public void translation(final int _axe, final double _valeur) { + // on cree une nouvelle transformation + final Transform3D t3d = new Transform3D(); + // o\xF9 l'on stocke celle de la camera + transformU_.getTransform(t3d); + // on stocke l'ancien vecteur position de la camera + final Vector3d oldPosition = new Vector3d(); + t3d.get(oldPosition); + final Transform3D t3d2 = new Transform3D(); + Vector3d v = new Vector3d(); + switch (_axe) { + case X: + v = new Vector3d(_valeur, 0, 0); + break; + case Y: + v = new Vector3d(0, _valeur, 0); + break; + case Z: + v = new Vector3d(0, 0, _valeur); + break; + default: + } + // on stocke la translation dans une nouvelle matrice de transformation + t3d2.setTranslation(v); + // on multiplie l'ancienne matrice par la nouvelle + // t3d.mul(t3d2); + t3d.mul(t3d2); + // on prend le nouveau vecteur position + t3d.get(position_); + // on envoie un PropertyChanceEvent pour raffraichir l'affichage de la position de la camera + if (support_ != null) { + support_.firePropertyChange("position", oldPosition, position_); + } + // on remplace l'ancienne matrice par la nouvelle -> la camera s'est d\xE9plac\xE9e + transformU_.setTransform(t3d); + getCurrentCamera().set(t3d); + } + + public Locale getLocale() { + return locale_; + } + +} Added: trunk/framework/ebli-3d/src/main/java/org/fudaa/ebli/volume/BVolume.java =================================================================== --- trunk/framework/ebli-3d/src/main/java/org/fudaa/ebli/volume/BVolume.java (rev 0) +++ trunk/framework/ebli-3d/src/main/java/org/fudaa/ebli/volume/BVolume.java 2009-10-11 19:10:04 UTC (rev 5228) @@ -0,0 +1,402 @@ +/* + * @creation 1999-11-29 + * @modification $Date: 2006-11-14 09:06:28 $ + * @license GNU General Public License 2 + * @copyright (c)1998-2001 CETMEF 2 bd Gambetta F-60231 Compiegne + * @mail de...@fu... + */ +package org.fudaa.ebli.volume; + +import java.beans.PropertyChangeEvent; +import java.beans.PropertyChangeListener; +import java.beans.PropertyChangeSupport; +import java.lang.reflect.Method; + +import javax.media.j3d.BranchGroup; +import javax.media.j3d.Group; +import javax.media.j3d.Node; +import javax.media.j3d.Transform3D; +import javax.media.j3d.TransformGroup; +import javax.vecmath.Vector3d; + +import org.fudaa.ebli.controle.BSelecteurTargetInterface; +import org.fudaa.ebli.geometrie.GrBoite; +import org.fudaa.ebli.geometrie.GrPoint; +import org.fudaa.ebli.volume.common.BVolumeAbstract; +import org.fudaa.ebli.volume.common.GroupeInterface; + +/** + * @version $Revision: 1.16 $ $Date: 2006-11-14 09:06:28 $ by $Author: deniger $ + * @author Christophe Delhorbe + */ +public abstract class BVolume extends BVolumeAbstract implements PropertyChangeListener, BSelecteurTargetInterface { + + private boolean destructible_; + + protected PropertyChangeSupport support_; + // la boite englobante + protected GrBoite boite_; + // l'ID de l'objet + protected int index_; + protected String nom_; + // son pere + protected GroupeInterface pere_; + protected boolean rapide_; + // la matrice de transformation + protected TransformGroup tg_; + + // proprietes : + protected boolean visible_; + + /** + * Constructeur de BVolume. Cree toute l'arborescence de l'objet et initialise une apparence par defaut. + */ + public BVolume() { + nom_ = null; + pere_ = null; + index_ = 0; + visible_ = false; + rapide_ = false; + boite_ = new GrBoite(); + setCapability(BranchGroup.ALLOW_DETACH); + tg_ = new TransformGroup(); + tg_.setCapability(TransformGroup.ALLOW_TRANSFORM_READ); + tg_.setCapability(TransformGroup.ALLOW_TRANSFORM_WRITE); + tg_.setCapability(Group.ALLOW_CHILDREN_WRITE); + tg_.setCapability(Group.ALLOW_CHILDREN_READ); + tg_.setCapability(Group.ALLOW_CHILDREN_EXTEND); + tg_.setCapability(Node.ALLOW_LOCAL_TO_VWORLD_READ); + addChild(tg_); + } + + /** + * Cree un BVolume de nom s. + * + * @param _nom le nom du volume + */ + public BVolume(final String _nom) { + this(); + setName(_nom); + } + + + + public void actualise(final long _t) { + // System.out.println(getName()+" : je m'actualise!"); + } + + public void addPropertyChangeListener(final String _s, final PropertyChangeListener _l) { + if (support_ == null) { + support_ = new PropertyChangeSupport(this); + } + support_.addPropertyChangeListener(_s, _l); + + } + + public void calculeBBox() {} + + /** + * Detruit l'objet (il est retire de l'arbre). + */ + public void detruire() { + if (isDestructible() && (pere_ != null)) { + pere_.remove(index_); + }... [truncated message content] |