Java tutorial
/* * To change this license header, choose License Headers in Project Properties. * To change this template file, choose Tools | Templates * and open the template in the editor. */ package editeurpanovisu; import com.drew.imaging.ImageMetadataReader; import com.drew.imaging.ImageProcessingException; import com.drew.metadata.Directory; import com.drew.metadata.Metadata; import static editeurpanovisu.GestionnaireInterfaceController.strNomfichierHS; import static editeurpanovisu.GestionnaireInterfaceController.strNomfichierHSHTML; import static editeurpanovisu.GestionnaireInterfaceController.strNomfichierHSImage; import static editeurpanovisu.GestionnaireInterfaceController.strTypeHS; import static editeurpanovisu.GestionnaireInterfaceController.strTypeHSHTML; import static editeurpanovisu.GestionnaireInterfaceController.strTypeHSImage; import java.awt.MouseInfo; import java.awt.Point; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStreamReader; import java.io.OutputStreamWriter; import java.io.UnsupportedEncodingException; import java.math.BigDecimal; import java.net.MalformedURLException; import java.net.URL; import java.net.URLConnection; import java.nio.file.Files; import java.nio.file.StandardCopyOption; import java.util.ArrayList; import java.util.Arrays; import java.util.List; import java.util.Locale; import java.util.Optional; import java.util.ResourceBundle; import java.util.logging.Level; import java.util.logging.Logger; import javafx.animation.KeyFrame; import javafx.animation.Timeline; import javafx.application.Application; import javafx.application.Platform; import javafx.beans.property.DoubleProperty; import javafx.beans.property.SimpleDoubleProperty; import javafx.beans.value.ObservableValue; import javafx.collections.FXCollections; import javafx.collections.ObservableList; import javafx.concurrent.Task; import javafx.event.ActionEvent; import javafx.geometry.Insets; import javafx.geometry.Orientation; import javafx.geometry.Pos; import javafx.geometry.Rectangle2D; import javafx.geometry.Side; import javafx.scene.Cursor; import javafx.scene.Node; import javafx.scene.Scene; import javafx.scene.control.Alert; import javafx.scene.control.Alert.AlertType; import javafx.scene.control.Button; import javafx.scene.control.ButtonType; import javafx.scene.control.CheckBox; import javafx.scene.control.ChoiceDialog; import javafx.scene.control.ColorPicker; import javafx.scene.control.ComboBox; import javafx.scene.control.Label; import javafx.scene.control.ListView; import javafx.scene.control.Menu; import javafx.scene.control.MenuBar; import javafx.scene.control.MenuButton; import javafx.scene.control.MenuItem; import javafx.scene.control.ProgressBar; import javafx.scene.control.RadioButton; import javafx.scene.control.ScrollPane; import javafx.scene.control.Separator; import javafx.scene.control.SeparatorMenuItem; import javafx.scene.control.Slider; import javafx.scene.control.Tab; import javafx.scene.control.TabPane; import javafx.scene.control.TextField; import javafx.scene.control.TextInputDialog; import javafx.scene.control.Toggle; import javafx.scene.control.ToggleGroup; import javafx.scene.control.ToolBar; import javafx.scene.control.Tooltip; import javafx.scene.image.Image; import javafx.scene.image.ImageView; import javafx.scene.image.PixelReader; import javafx.scene.image.PixelWriter; import javafx.scene.image.WritableImage; import javafx.scene.input.DragEvent; import javafx.scene.input.Dragboard; import javafx.scene.input.KeyCode; import javafx.scene.input.KeyCodeCombination; import javafx.scene.input.KeyCombination; import javafx.scene.input.MouseButton; import javafx.scene.input.MouseEvent; import javafx.scene.input.TransferMode; import javafx.scene.layout.AnchorPane; import javafx.scene.layout.Background; import javafx.scene.layout.BackgroundFill; import javafx.scene.layout.CornerRadii; import javafx.scene.layout.HBox; import javafx.scene.layout.Pane; import javafx.scene.layout.VBox; import javafx.scene.paint.Color; import javafx.scene.shape.Circle; import javafx.scene.shape.Line; import javafx.scene.shape.Polygon; import javafx.scene.shape.Rectangle; import javafx.scene.shape.StrokeLineCap; import javafx.scene.shape.StrokeLineJoin; import javafx.scene.shape.StrokeType; import javafx.scene.text.Font; import javafx.scene.text.TextAlignment; import javafx.scene.web.WebEngine; import javafx.scene.web.WebView; import javafx.stage.DirectoryChooser; import javafx.stage.FileChooser; import javafx.stage.Screen; import javafx.stage.Stage; import javafx.stage.WindowEvent; import javafx.util.Duration; import jfxtras.labs.scene.control.BigDecimalField; import org.apache.commons.imaging.ImageReadException; /** * Editeur de visites virtuelles * * @author LANG Laurent */ public class EditeurPanovisu extends Application { private static boolean netIsAvailable() { try { final URL url = new URL("http://www.google.com"); final URLConnection conn = url.openConnection(); conn.connect(); return true; } catch (MalformedURLException e) { throw new RuntimeException(e); } catch (IOException e) { return false; } } /** * @return the strStyleCSS */ public static String getStrStyleCSS() { return strStyleCSS; } /** * @param aStrStyleCSS the strStyleCSS to set */ public static void setStrStyleCSS(String aStrStyleCSS) { strStyleCSS = aStrStyleCSS; } /** * @return the strCodesLanguesTraduction */ public static String[] getStrCodesLanguesTraduction() { return strCodesLanguesTraduction; } /** * @return the strLanguesTraduction */ public static String[] getStrLanguesTraduction() { return strLanguesTraduction; } /** * @return the strCurrentDir */ public static String getStrCurrentDir() { return strCurrentDir; } /** * @param aStrCurrentDir the strCurrentDir to set */ public static void setStrCurrentDir(String aStrCurrentDir) { strCurrentDir = aStrCurrentDir; } /** * @return the locale */ public static Locale getLocale() { return locale; } /** * @param aLocale the locale to set */ public static void setLocale(Locale aLocale) { locale = aLocale; } /** * @return the iNumHTML */ public static int getiNumHTML() { return iNumHTML; } /** * @param aiNumHTML the iNumHTML to set */ public static void setiNumHTML(int aiNumHTML) { iNumHTML = aiNumHTML; } /** * @return the panoramiquesProjet */ public static Panoramique[] getPanoramiquesProjet() { return panoramiquesProjet; } /** * @param aPanoramiquesProjet the panoramiquesProjet to set */ public static void setPanoramiquesProjet(Panoramique[] aPanoramiquesProjet) { panoramiquesProjet = aPanoramiquesProjet; } /** * @return the plans */ public static Plan[] getPlans() { return plans; } /** * @param aPlans the plans to set */ public static void setPlans(Plan[] aPlans) { plans = aPlans; } /** * @return the iNombrePanoramiques */ public static int getiNombrePanoramiques() { return iNombrePanoramiques; } /** * @param aiNombrePanoramiques the iNombrePanoramiques to set */ public static void setiNombrePanoramiques(int aiNombrePanoramiques) { iNombrePanoramiques = aiNombrePanoramiques; } /** * @return the iNombrePanoramiquesFichier */ public static int getiNombrePanoramiquesFichier() { return iNombrePanoramiquesFichier; } /** * @param aiNombrePanoramiquesFichier the iNombrePanoramiquesFichier to set */ public static void setiNombrePanoramiquesFichier(int aiNombrePanoramiquesFichier) { iNombrePanoramiquesFichier = aiNombrePanoramiquesFichier; } /** * @return the iNombrePlans */ public static int getiNombrePlans() { return iNombrePlans; } /** * @param aiNombrePlans the iNombrePlans to set */ public static void setiNombrePlans(int aiNombrePlans) { iNombrePlans = aiNombrePlans; } /** * @return the iPanoActuel */ public static int getiPanoActuel() { return iPanoActuel; } /** * @param aiPanoActuel the iPanoActuel to set */ public static void setiPanoActuel(int aiPanoActuel) { iPanoActuel = aiPanoActuel; } /** * @return the strPanoListeVignette */ public static String getStrPanoListeVignette() { return strPanoListeVignette; } /** * @param aStrPanoListeVignette the strPanoListeVignette to set */ public static void setStrPanoListeVignette(String aStrPanoListeVignette) { strPanoListeVignette = aStrPanoListeVignette; } /** * @return the tabPlan */ public static Tab getTabPlan() { return tabPlan; } /** * @param aTabPlan the tabPlan to set */ public static void setTabPlan(Tab aTabPlan) { tabPlan = aTabPlan; } /** * @return the strSystemeExploitation */ public static String getStrSystemeExploitation() { return strSystemeExploitation; } /** * @param aStrSystemeExploitation the strSystemeExploitation to set */ public static void setStrSystemeExploitation(String aStrSystemeExploitation) { strSystemeExploitation = aStrSystemeExploitation; } /** * * @return si le systme est Mac OS */ public static Boolean isMac() { if (getStrSystemeExploitation().contains("Mac")) { setiDecalageMac(-30); } return getStrSystemeExploitation().contains("Mac"); } /** * * @return si le systme est Linux */ public static Boolean isLinux() { return getStrSystemeExploitation().contains("Linux"); } /** * * @return si le systme est Windows */ public static Boolean isWindows() { return getStrSystemeExploitation().contains("Windows"); } /** * @return the strTooltipStyle */ public static String getStrTooltipStyle() { return strTooltipStyle; } /** * @return the strRepertAppli */ public static String getStrRepertAppli() { return strRepertAppli; } /** * @param aStrRepertAppli the strRepertAppli to set */ public static void setStrRepertAppli(String aStrRepertAppli) { strRepertAppli = aStrRepertAppli; } /** * @return the strRepertTemp */ public static String getStrRepertTemp() { return strRepertTemp; } /** * @param aStrRepertTemp the strRepertTemp to set */ public static void setStrRepertTemp(String aStrRepertTemp) { strRepertTemp = aStrRepertTemp; } /** * @return the strRepertPanos */ public static String getStrRepertPanos() { return strRepertPanos; } /** * @param aStrRepertPanos the strRepertPanos to set */ public static void setStrRepertPanos(String aStrRepertPanos) { strRepertPanos = aStrRepertPanos; } /** * @return the strRepertHSImages */ public static String getStrRepertHSImages() { return strRepertHSImages; } /** * @param aStrRepertHSImages the strRepertHSImages to set */ public static void setStrRepertHSImages(String aStrRepertHSImages) { strRepertHSImages = aStrRepertHSImages; } /** * @return the strRepertoireProjet */ public static String getStrRepertoireProjet() { return strRepertoireProjet; } /** * @param aStrRepertoireProjet the strRepertoireProjet to set */ public static void setStrRepertoireProjet(String aStrRepertoireProjet) { strRepertoireProjet = aStrRepertoireProjet; } /** * @return the bDejaSauve */ public static boolean isbDejaSauve() { return bDejaSauve; } /** * @param abDejaSauve the bDejaSauve to set */ public static void setbDejaSauve(boolean abDejaSauve) { bDejaSauve = abDejaSauve; } /** * @return the stPrincipal */ public static Stage getStPrincipal() { return stPrincipal; } /** * @param aStPrincipal the stPrincipal to set */ public static void setStPrincipal(Stage aStPrincipal) { stPrincipal = aStPrincipal; } /** * @return the gestionnaireInterface */ public static GestionnaireInterfaceController getGestionnaireInterface() { return gestionnaireInterface; } /** * @param aGestionnaireInterface the gestionnaireInterface to set */ public static void setGestionnaireInterface(GestionnaireInterfaceController aGestionnaireInterface) { gestionnaireInterface = aGestionnaireInterface; } /** * @return the gestionnairePlan */ public static GestionnairePlanController getGestionnairePlan() { return gestionnairePlan; } /** * @param aGestionnairePlan the gestionnairePlan to set */ public static void setGestionnairePlan(GestionnairePlanController aGestionnairePlan) { gestionnairePlan = aGestionnairePlan; } /** * @return the mniAjouterPlan */ public static MenuItem getMniAjouterPlan() { return mniAjouterPlan; } /** * @param aMniAjouterPlan the mniAjouterPlan to set */ public static void setMniAjouterPlan(MenuItem aMniAjouterPlan) { mniAjouterPlan = aMniAjouterPlan; } /** * @return the mniAffichagePlan */ public static MenuItem getMniAffichagePlan() { return mniAffichagePlan; } /** * @param aMniAffichagePlan the mniAffichagePlan to set */ public static void setMniAffichagePlan(MenuItem aMniAffichagePlan) { mniAffichagePlan = aMniAffichagePlan; } /** * @return the ivAjouterPlan */ public static ImageView getIvAjouterPlan() { return ivAjouterPlan; } /** * @param aIvAjouterPlan the ivAjouterPlan to set */ public static void setIvAjouterPlan(ImageView aIvAjouterPlan) { ivAjouterPlan = aIvAjouterPlan; } /** * @return the tabInterface */ public static Tab getTabInterface() { return tabInterface; } /** * @param aTabInterface the tabInterface to set */ public static void setTabInterface(Tab aTabInterface) { tabInterface = aTabInterface; } /** * @return the apAttends */ public static AnchorPane getApAttends() { return apAttends; } /** * @param apAttends1 the apAttends to set */ public static void setApAttends(AnchorPane apAttends1) { apAttends = apAttends1; } /** * @return the strBingAPIKey */ public static String getStrBingAPIKey() { return strBingAPIKey; } /** * @param strBingAPIKey1 Cl API de Bing */ public static void setStrBingAPIKey(String strBingAPIKey1) { strBingAPIKey = strBingAPIKey1; } /** * @return the bAutoRotationDemarre */ public static boolean isbAutoRotationDemarre() { return bAutoRotationDemarre; } /** * @param abAutoRotationDemarre the bAutoRotationDemarre to set */ public static void setbAutoRotationDemarre(boolean abAutoRotationDemarre) { bAutoRotationDemarre = abAutoRotationDemarre; } /** * @return the iAutoRotationVitesse */ public static int getiAutoRotationVitesse() { return iAutoRotationVitesse; } /** * @param aiAutoRotationVitesse the iAutoRotationVitesse to set */ public static void setiAutoRotationVitesse(int aiAutoRotationVitesse) { iAutoRotationVitesse = aiAutoRotationVitesse; } /** * @return the bAutoTourDemarre */ public static boolean isbAutoTourDemarre() { return bAutoTourDemarre; } /** * @param abAutoTourDemarre the bAutoTourDemarre to set */ public static void setbAutoTourDemarre(boolean abAutoTourDemarre) { bAutoTourDemarre = abAutoTourDemarre; } /** * @return the iAutoTourVitesse */ public static int getiAutoTourLimite() { return iAutoTourLimite; } /** * @param aiAutoTourLimite the iAutoTourVitesse to set */ public static void setiAutoTourLimite(int aiAutoTourLimite) { iAutoTourLimite = aiAutoTourLimite; } /** * @return the strAutoTourType */ public static String getStrAutoTourType() { return strAutoTourType; } /** * @param aStrAutoTourType the strAutoTourType to set */ public static void setStrAutoTourType(String aStrAutoTourType) { strAutoTourType = aStrAutoTourType; } /** * @return the bPetitePlaneteDemarrage */ public static boolean isbPetitePlaneteDemarrage() { return bPetitePlaneteDemarrage; } /** * @param abPetitePlaneteDemarrage the bPetitePlaneteDemarrage to set */ public static void setbPetitePlaneteDemarrage(boolean abPetitePlaneteDemarrage) { bPetitePlaneteDemarrage = abPetitePlaneteDemarrage; } /** * @return the bIntroPetitePlanete */ public static boolean isbIntroPetitePlanete() { return bIntroPetitePlanete; } /** * @param abIntroPetitePlanete the bIntroPetitePlanete to set */ public static void setbIntroPetitePlanete(boolean abIntroPetitePlanete) { bIntroPetitePlanete = abIntroPetitePlanete; } /** * @return the poGeolocalisation */ public static PaneOutil getPoGeolocalisation() { return poGeolocalisation; } /** * @param aPoGeolocalisation the poGeolocalisation to set */ public static void setPoGeolocalisation(PaneOutil aPoGeolocalisation) { poGeolocalisation = aPoGeolocalisation; } /** * @return the bInternet */ public static boolean isbInternet() { return bInternet; } /** * @param abInternet the bInternet to set */ public static void setbInternet(boolean abInternet) { bInternet = abInternet; } /** * @return the iDecalageMac */ public static int getiDecalageMac() { return iDecalageMac; } /** * @param aiDecalageMac the iDecalageMac to set */ public static void setiDecalageMac(int aiDecalageMac) { iDecalageMac = aiDecalageMac; } /** * @return the vbChoixPanoramique */ public static VBox getVbChoixPanoramique() { return vbChoixPanoramique; } /** * @param aVbChoixPanoramique the vbChoixPanoramique to set */ public static void setVbChoixPanoramique(VBox aVbChoixPanoramique) { vbChoixPanoramique = aVbChoixPanoramique; } /** * @return the apPVIS */ public static AnchorPane getApPVIS() { return apPVIS; } /** * @param aApPVIS the apPVIS to set */ public static void setApPVIS(AnchorPane aApPVIS) { apPVIS = aApPVIS; } /** * @return the apAR */ public static AnchorPane getApAR() { return apAR; } /** * @param aApAR the apAR to set */ public static void setApAR(AnchorPane aApAR) { apAR = aApAR; } /** * @return the apPPAN */ public static AnchorPane getApPPAN() { return apPPAN; } /** * @param aApPPAN the apPPAN to set */ public static void setApPPAN(AnchorPane aApPPAN) { apPPAN = aApPPAN; } /** * @return the apGEO */ public static AnchorPane getApGEO() { return apGEO; } /** * @param aApGEO the apGEO to set */ public static void setApGEO(AnchorPane aApGEO) { apGEO = aApGEO; } /** * @return the apVISU */ public static AnchorPane getApVISU() { return apVISU; } /** * @param aApVISU the apVISU to set */ public static void setApVISU(AnchorPane aApVISU) { apVISU = aApVISU; } /** * @return the apHS */ public static AnchorPane getApHS() { return apHS; } /** * @param aApHS the apHS to set */ public static void setApHS(AnchorPane aApHS) { apHS = aApHS; } /** * @return the iAutoTourDemarrage */ public static int getiAutoTourDemarrage() { return iAutoTourDemarrage; } /** * @param aiAutoTourDemarrage the iAutoTourDemarrage to set */ public static void setiAutoTourDemarrage(int aiAutoTourDemarrage) { iAutoTourDemarrage = aiAutoTourDemarrage; } /** * @return the scnPrincipale */ public static Scene getScnPrincipale() { return scnPrincipale; } /** * @param aScnPrincipale the scnPrincipale to set */ public static void setScnPrincipale(Scene aScnPrincipale) { scnPrincipale = aScnPrincipale; } /** * @return the iNumDiapo */ public static int getiNumDiapo() { return iNumDiapo; } /** * @param aiNumDiapo the iNumDiapo to set */ public static void setiNumDiapo(int aiNumDiapo) { iNumDiapo = aiNumDiapo; } /** * @return the iNumImages */ public static int getiNumImages() { return iNumImages; } /** * @param aiNumImages the iNumImages to set */ public static void setiNumImages(int aiNumImages) { iNumImages = aiNumImages; } /** * @return the iNumPoints */ public static int getiNumPoints() { return iNumPoints; } /** * @param aiNumPoints the iNumPoints to set */ public static void setiNumPoints(int aiNumPoints) { iNumPoints = aiNumPoints; } /** * @return the iNombreDiapo */ public static int getiNombreDiapo() { return iNombreDiapo; } /** * @param aiNombreDiapo the iNombreDiapo to set */ public static void setiNombreDiapo(int aiNombreDiapo) { iNombreDiapo = aiNombreDiapo; } /** * @return the afficheLoupe */ public static boolean isAfficheLoupe() { return afficheLoupe; } /** * @param aAfficheLoupe the afficheLoupe to set */ public static void setAfficheLoupe(boolean aAfficheLoupe) { afficheLoupe = aAfficheLoupe; } /** * @return the iTailleLoupe */ public static int getiTailleLoupe() { return iTailleLoupe; } /** * @param aiTailleLoupe the iTailleLoupe to set */ public static void setiTailleLoupe(int aiTailleLoupe) { if (aiTailleLoupe < iTailleLoupeMin) { iTailleLoupe = iTailleLoupeMin; } else if (aiTailleLoupe > iTailleLoupeMax) { iTailleLoupe = iTailleLoupeMax; } else { iTailleLoupe = aiTailleLoupe; } } /** * @return the strTypeFichierTransf */ public static String getStrTypeFichierTransf() { return strTypeFichierTransf; } /** * @param aStrTypeFichierTransf the strTypeFichierTransf to set */ public static void setStrTypeFichierTransf(String aStrTypeFichierTransf) { strTypeFichierTransf = aStrTypeFichierTransf; } /** * @return the largeurE2C */ public static double getLargeurE2C() { return largeurE2C; } /** * @param aLargeurE2C the largeurE2C to set */ public static void setLargeurE2C(double aLargeurE2C) { largeurE2C = aLargeurE2C; } /** * @return the hauteurE2C */ public static double getHauteurE2C() { return hauteurE2C; } /** * @param aHauteurE2C the hauteurE2C to set */ public static void setHauteurE2C(double aHauteurE2C) { hauteurE2C = aHauteurE2C; } /** * @return the bNetteteTransf */ public static boolean isbNetteteTransf() { return bNetteteTransf; } /** * @param abNetteteTransf the bNetteteTransf to set */ public static void setbNetteteTransf(boolean abNetteteTransf) { bNetteteTransf = abNetteteTransf; } /** * @return the niveauNetteteTransf */ public static double getNiveauNetteteTransf() { return niveauNetteteTransf; } /** * @param aNiveauNetteteTransf the niveauNetteteTransf to set */ public static void setNiveauNetteteTransf(double aNiveauNetteteTransf) { niveauNetteteTransf = aNiveauNetteteTransf; } /** * dfinit les ancrages des formes (cercle, rectangle, polygone) pour les * barres personnalises */ private static class AncreForme extends Circle { private final DoubleProperty dpX, dpY; /** * * @param color * @param dpX * @param dpY */ AncreForme(Color color, DoubleProperty dpX, DoubleProperty dpY) { super(dpX.get(), dpY.get(), 2); setFill(color.deriveColor(1, 1, 1, 0.5)); setStroke(color); setStrokeWidth(2); setStrokeType(StrokeType.OUTSIDE); setCursor(Cursor.HAND); this.dpX = dpX; this.dpY = dpY; dpX.bind(centerXProperty()); dpY.bind(centerYProperty()); enableDrag(); } /** * */ private void enableDrag() { final Delta dragDelta = new Delta(); setOnMousePressed((mouseEvent) -> { dragDelta.x = getCenterX() - mouseEvent.getX(); dragDelta.y = getCenterY() - mouseEvent.getY(); getScene().setCursor(Cursor.MOVE); }); setOnMouseReleased((mouseEvent) -> { getScene().setCursor(Cursor.HAND); }); setOnMouseDragged((mouseEvent) -> { double newX = mouseEvent.getX() + dragDelta.x; if (newX > 0 && newX < getScene().getWidth()) { setCenterX(newX); } double newY = mouseEvent.getY() + dragDelta.y; if (newY > 0 && newY < getScene().getHeight()) { setCenterY(newY); } }); setOnMouseEntered((mouseEvent) -> { if (!mouseEvent.isPrimaryButtonDown()) { getScene().setCursor(Cursor.HAND); } }); setOnMouseExited((mouseEvent) -> { if (!mouseEvent.isPrimaryButtonDown()) { getScene().setCursor(Cursor.DEFAULT); } }); } /** * dfinit un couple de coordonnes */ private class Delta { double x, y; } } private static VBox vbRacine; private static AnchorPane apPanovisu; final public static double largeurOutils = 380d; private static final ImageView ivLoupe = new ImageView(); private static final AnchorPane apLoupe = new AnchorPane(); private static int iTailleLoupe = 140; private static final int iTailleLoupeMin = 100; private static final int iTailleLoupeMax = 200; private static String strPositLoupe = "gauche"; private static boolean afficheLoupe; private static double positLoupeX; private static double positLoupeY; private static String strTypeFichierTransf = "jpg"; private static double largeurE2C = 600; private static double hauteurE2C = 400; private static boolean bNetteteTransf = false; private static double niveauNetteteTransf = 0.2; private static int iNumeroPanoChoisitHS; private static String strNomPanoChoisitHS; private static int iDecalageMac = 0; private static CheckBox cbAutoRotationDemarrage; private static CheckBox cbIntroPetitePlanete; private static BigDecimalField bdfAutoRotationVitesse; private static CheckBox cbAutoTourDemarrage; private static Slider slMinLat; private static Slider slMaxLat; private static Slider slMinFov; private static Slider slMaxFov; private static CheckBox cbMinLat; private static CheckBox cbMaxLat; private static Line ligNadir; private static Line ligZenith; public static Diaporama[] diaporamas = new Diaporama[100]; private static int iNombreDiapo = 0; private static BigDecimalField bdfAutoTourLimite; private static BigDecimalField bdfAutoTourDemarrage; private static ComboBox cbAutoTourType; private static ComboBox cbAutoRotationVitesse; static private boolean bIntroPetitePlanete = false; static private boolean bAutoRotationDemarre = false; static private int iAutoRotationVitesse = 30; static private boolean bAutoTourDemarre = false; static private int iAutoTourLimite = 1; private static int iAutoTourDemarrage = 0; static private String strAutoTourType = "tours"; static private boolean bPetitePlaneteDemarrage = true; static private PaneOutil poGeolocalisation; public static String strStyleCSS = "clair"; private static final String[] strCodesLanguesTraduction = { "fr_FR", "en_EN", "de_DE", "pt_BR" }; private static final String[] strLanguesTraduction = { "Franais", "English", "Deutsch", "Portugus" }; private static String strCurrentDir = ""; /** * Dfinition de la langue locale par dfaut fr_FR */ private static Locale locale = new Locale("fr", "FR"); private static ResourceBundle rbLocalisation; private static Label lblDragDrop; static private PopUpDialogController popUp; static private ImageView ivImagePanoramique; private static AnchorPane apVisuPano; private static Image imgPanoRetaille2; static private Label lblLong, lblLat; static private AnchorPane apPanneauPrincipal; static private AnchorPane apListeImagesPanoramiques; static private AnchorPane apVignettesPano; static private Rectangle rectVignettePano; final static private int iLargeurVignettes = 180; static private HBox hbCoordonnees; static private int iNumPoints = 0; static private int iNumImages = 0; static private boolean dejaCharge = false; private static int iNumHTML = 0; private static int iNumDiapo = 0; private static Panoramique[] panoramiquesProjet = new Panoramique[100]; private static Plan[] plans = new Plan[20]; private static int iNombrePanoramiques = 0; private static int iNombrePanoramiquesFichier = 0; static private ProgressBar pbarAvanceChargement; static public MenuBar mbarPrincipal = new MenuBar(); static public ToolBar bbarPrincipal = new ToolBar(); static public HBox hbBarreBouton; static public TabPane tpEnvironnement; static public AnchorPane apEnvironnement; private static int iNombrePlans = 0; private static int iPanoActuel = 0; static private File fileProjet; private static String strPanoListeVignette = ""; static private Pane panePanoramique; private static VBox vbChoixPanoramique; static private VBox vbOutils; static private Tab tabVisite; static private AnchorPane apAttends; static private Label lblCharge; static private Label lblNiveaux; static private Tab tabInterface; private static Tab tabPlan; private static Scene scnPrincipale; private static final AnchorPane apWebview = new AnchorPane(); static private ScrollPane spVuePanoramique; static private ScrollPane spPanneauOutils; static private double largeurMax; static private boolean bEstCharge = false; static private boolean bRepertSauveChoisi = false; static private String strPanoEntree = ""; private static String strSystemeExploitation = ""; private static final String strTooltipStyle = ""; static private boolean bDragDrop = false; static private String strTitreVisite = ""; private static final AnchorPane apVisuPanoramique = new AnchorPane(); private static AnchorPane apParametresVisite; private static NavigateurPanoramique navigateurPanoramique; private static String strBingAPIKey = ""; private static VBox vbVisuHotspots; private static AnchorPane apVisuHS; private static boolean bInternet; private static AnchorPane apOpenLayers; private static PaneOutil apHS1; /* Panel Creation Barre Navigation */ private static AnchorPane apCreationBarre; private static AnchorPane apCreationDiaporama; static private AnchorPane apImgBarrePersonnalisee; static private AnchorPane apZoneBarrePersonnalisee; private static Button btnAjouteZone; static private Image imgBarrePersonnalisee; private static boolean bRecommenceZone = false; static private int iNombreZones; private static int iNombrePointsZone; private static double x1Zone, y1Zone; static private String strRepertBarrePersonnalisee = ""; private static String strTypeZone = ""; private static String strNomFichierShp = ""; private static final ZoneTelecommande[] zones = new ZoneTelecommande[25]; private static final double[] pointsPolyZone = new double[200]; private static boolean bPleinEcranPanoramique = false; private static final String[] strTouchesBarre = { "Haut/Up", "Droite/Right", "Bas/Down", "Gauche/Left", "Zoom +", "Zoom -", "Info", "Aide/Help", "Rotation", "mode Souris/Mouse", "Plein Ecran/Fullscreen", "Lien/Link 1", "Lien/Link 2", "zone 1", "zone 2", "zone 3", "zone 4", "zone 5", "zone 6", "zone 7", "zone 8", "zone 9", "zone 10" }; private static final String[] strCodeBarre = { "telUp", "telRight", "telDown", "telLeft", "telZoomPlus", "telZoomMoins", "telInfo", "telAide", "telRotation", "telSouris", "telFS", "telLien-1", "telLien-2", "area-1", "area-2", "area-3", "area-4", "area-5", "area-6", "area-7", "area-8", "area-9", "area-10" }; /** * Rpertoires de l'application */ private static String strRepertAppli = ""; private static String strRepertTemp = ""; static private String strRepertPanos = ""; static private String strRepertHSImages = ""; /** * Rpertoire de sauvegarde du projet */ private static String strRepertoireProjet = ""; /** * Rpertoire du fichier de configuration */ static public File fileRepertConfig; final static private ComboBox cbListeChoixPanoramique = new ComboBox(); private static AnchorPane apListePanoTriable; private static final OrdrePanoramique ordPano = new OrdrePanoramique(); static private Label lblChoixPanoramique; static private boolean bPanoCharge = false; static private String strPanoAffiche = ""; private static boolean bDejaSauve = true; private static Stage stPrincipal; private static final String[] strHistoFichiers = new String[10]; static private int nombreHistoFichiers = 0; static private File fileHistoFichiers; private static String strTexteHisto = ""; public static String strNumVersion = ""; private static int iHauteurInterface; private static int iLargeurInterface; public static NavigateurOpenLayers navigateurOpenLayers; private static GestionnaireInterfaceController gestionnaireInterface = new GestionnaireInterfaceController(); private static GestionnairePlanController gestionnairePlan = new GestionnairePlanController(); private static GestionnaireDiaporamaController gestDiapo; static private Menu mnuDerniersProjets = new Menu(); private static Menu mnuPanoramique = new Menu(); private static Menu mnuTransformation = new Menu(); private static Menu mnuModeles = new Menu(); private static MenuButton btnMnuPanoramique = new MenuButton(); private static MenuButton btnMnuTransformation = new MenuButton(); private static MenuButton btnMnuModeles = new MenuButton(); private static MenuItem mniCube2EquiTransformation; private static MenuItem mniEqui2CubeTransformation; private static MenuItem mniOutilsBarre; private static MenuItem mniOutilsDiaporama; private static MenuItem mniOutilsLoupe; private static MenuItem mniConfigTransformation; private static MenuItem mniChargerModele; private static MenuItem mniSauverModele; private static MenuItem mniAPropos; private static MenuItem mniAide; private static MenuItem mniNouveauProjet; private static MenuItem mniSauveProjet; private static MenuItem mniAjouterPano; private static MenuItem mniAjouterPlan; private static MenuItem mniFermerProjet; private static MenuItem mniSauveSousProjet; private static MenuItem mniVisiteGenere; private static MenuItem mniChargeProjet; private static MenuItem mniAffichageVisite; private static MenuItem mniAffichageInterface; private static MenuItem mniAffichagePlan; private static ImageView ivNouveauProjet; private static ImageView ivSauveProjet; private static ImageView ivChargeProjet; private static ImageView ivVisiteGenere; private static ImageView ivAjouterPano; private static ImageView ivAjouterPlan; private static ImageView ivCube2Equi; private static ImageView ivEqui2Cube; private static TextField tfLongitude; private static TextField tfLatitude; private static String strOrdrePanos; /** * Elment barre d'outils */ private static AnchorPane apPVIS; /** * Elment barre d'outils */ private static AnchorPane apAR; /** * Elment barre d'outils */ private static AnchorPane apPPAN; /** * Elment barre d'outils */ private static AnchorPane apGEO; /** * Elment barre d'outils */ private static AnchorPane apVISU; /** * Elment barre d'outils */ private static AnchorPane apHS; /** * * @throws IOException Exception d'entre sortie */ private static void genereVisite() throws IOException { if (!bRepertSauveChoisi) { setStrRepertoireProjet(getStrCurrentDir()); } if (!isbDejaSauve()) { projetSauve(); } if (isbDejaSauve()) { String strHTMLRepert = getStrRepertTemp() + "/pagesHTML"; File fileHTMLRepert = new File(strHTMLRepert); if (!fileHTMLRepert.exists()) { fileHTMLRepert.mkdirs(); } deleteDirectory(getStrRepertTemp() + "/panovisu/images"); File fileImagesRepert = new File(getStrRepertTemp() + "/panovisu/images"); if (!fileImagesRepert.exists()) { fileImagesRepert.mkdirs(); } File fileBoutonRepert = new File(getStrRepertTemp() + "/panovisu/images/navigation"); if (!fileBoutonRepert.exists()) { fileBoutonRepert.mkdirs(); } File fileBoussoleRepert = new File(getStrRepertTemp() + "/panovisu/images/boussoles"); if (!fileBoussoleRepert.exists()) { fileBoussoleRepert.mkdirs(); } copieRepertoire(getStrRepertAppli() + File.separator + "panovisu/images/boussoles", fileBoussoleRepert.getAbsolutePath()); File filePlanRepert = new File(getStrRepertTemp() + "/panovisu/images/plan"); if (!filePlanRepert.exists()) { filePlanRepert.mkdirs(); } copieRepertoire(getStrRepertAppli() + File.separator + "panovisu/images/plan", filePlanRepert.getAbsolutePath()); File fileReseauRepert = new File(getStrRepertTemp() + "/panovisu/images/reseaux"); if (!fileReseauRepert.exists()) { fileReseauRepert.mkdirs(); } copieRepertoire(getStrRepertAppli() + File.separator + "panovisu/images/reseaux", fileReseauRepert.getAbsolutePath()); File fileInterfaceRepert = new File(getStrRepertTemp() + "/panovisu/images/interface"); if (!fileInterfaceRepert.exists()) { fileInterfaceRepert.mkdirs(); } copieRepertoire(getStrRepertAppli() + File.separator + "panovisu/images/interface", fileInterfaceRepert.getAbsolutePath()); File fileMARepert = new File(getStrRepertTemp() + "/panovisu/images/MA"); if (!fileMARepert.exists()) { fileMARepert.mkdirs(); } File fileHotspotsRepert = new File(getStrRepertTemp() + "/panovisu/images/hotspots"); if (!fileHotspotsRepert.exists()) { fileHotspotsRepert.mkdirs(); } if (getGestionnaireInterface().getStrVisibiliteBarrePersonnalisee().equals("oui")) { File fileTelecommandeRepert = new File(getStrRepertTemp() + "/panovisu/images/telecommande"); if (!fileTelecommandeRepert.exists()) { fileTelecommandeRepert.mkdirs(); } ReadWriteImage.writePng(getGestionnaireInterface().getWiBarrePersonnaliseeCouleur(), getStrRepertTemp() + "/panovisu/images/telecommande" + File.separator + "telecommande.png", false, 0.f); copieFichierRepertoire(getStrRepertAppli() + "/theme/telecommandes" + File.separator + "fs.png", getStrRepertTemp() + "/panovisu/images/telecommande"); copieFichierRepertoire(getStrRepertAppli() + "/theme/telecommandes" + File.separator + "fs2.png", getStrRepertTemp() + "/panovisu/images/telecommande"); copieFichierRepertoire(getStrRepertAppli() + "/theme/telecommandes" + File.separator + "souris.png", getStrRepertTemp() + "/panovisu/images/telecommande"); copieFichierRepertoire( getStrRepertAppli() + "/theme/telecommandes" + File.separator + "souris2.png", getStrRepertTemp() + "/panovisu/images/telecommande"); copieFichierRepertoire(getStrRepertAppli() + "/theme/telecommandes" + File.separator + "aide.png", getStrRepertTemp() + "/panovisu/images/telecommande"); copieFichierRepertoire(getStrRepertAppli() + "/theme/telecommandes" + File.separator + "info.png", getStrRepertTemp() + "/panovisu/images/telecommande"); copieFichierRepertoire( getStrRepertAppli() + "/theme/telecommandes" + File.separator + "rotation.png", getStrRepertTemp() + "/panovisu/images/telecommande"); copieFichierRepertoire(getStrRepertAppli() + "/theme/telecommandes" + File.separator + "zoomin.png", getStrRepertTemp() + "/panovisu/images/telecommande"); copieFichierRepertoire( getStrRepertAppli() + "/theme/telecommandes" + File.separator + "zoomout.png", getStrRepertTemp() + "/panovisu/images/telecommande"); } copieFichierRepertoire(getStrRepertAppli() + "/theme" + File.separator + "chargement.gif", getStrRepertTemp() + "/panovisu/images"); copieFichierRepertoire(getStrRepertAppli() + File.separator + "panovisu" + File.separator + "images" + File.separator + "aide_souris.png", getStrRepertTemp() + "/panovisu/images"); copieFichierRepertoire(getStrRepertAppli() + File.separator + "panovisu" + File.separator + "images" + File.separator + "fermer.png", getStrRepertTemp() + "/panovisu/images"); copieFichierRepertoire(getStrRepertAppli() + File.separator + "panovisu" + File.separator + "images" + File.separator + "precedent.png", getStrRepertTemp() + "/panovisu/images"); copieFichierRepertoire(getStrRepertAppli() + File.separator + "panovisu" + File.separator + "images" + File.separator + "suivant.png", getStrRepertTemp() + "/panovisu/images"); for (int i = 0; i < getGestionnaireInterface().getiNombreImagesBouton() - 2; i++) { ReadWriteImage.writePng( getGestionnaireInterface().getWiNouveauxBoutons()[i], fileBoutonRepert.getAbsolutePath() + File.separator + getGestionnaireInterface().getStrNomImagesBoutons()[i], false, 0.f); } if (!strTypeHS.equals("gif")) { ReadWriteImage.writePng( getGestionnaireInterface() .getWiNouveauxBoutons()[getGestionnaireInterface().getiNombreImagesBouton() - 2], fileHotspotsRepert.getAbsolutePath() + File.separator + "hotspot.png", false, 0.f); } else { copieFichierRepertoire(getStrRepertAppli() + "/theme/hotspots" + File.separator + strNomfichierHS, fileHotspotsRepert.getAbsolutePath() + File.separator); } if (!strTypeHSImage.equals("gif")) { ReadWriteImage.writePng( getGestionnaireInterface() .getWiNouveauxBoutons()[getGestionnaireInterface().getiNombreImagesBouton() - 1], fileHotspotsRepert.getAbsolutePath() + File.separator + "hotspotImage.png", false, 0.f); } else { copieFichierRepertoire( getStrRepertAppli() + "/theme/photos" + File.separator + strNomfichierHSImage, fileHotspotsRepert.getAbsolutePath() + File.separator); } if (!strTypeHSHTML.equals("gif")) { ReadWriteImage.writePng( getGestionnaireInterface().getWiNouveauxBoutons()[getGestionnaireInterface() .getiNombreImagesBouton()], fileHotspotsRepert.getAbsolutePath() + File.separator + "hotspotHTML.png", false, 0.f); } else { copieFichierRepertoire(getStrRepertAppli() + "/theme/html" + File.separator + strNomfichierHSHTML, fileHotspotsRepert.getAbsolutePath() + File.separator); } ReadWriteImage.writePng(getGestionnaireInterface().getWiNouveauxMasque(), fileMARepert.getAbsolutePath() + File.separator + "MA.png", false, 0.f); if (getGestionnaireInterface().isbAfficheCarte()) { File filemarqueursOL = new File(getStrRepertTemp() + "/panovisu/images/marqueursOL"); if (!filemarqueursOL.exists()) { filemarqueursOL.mkdirs(); } copieFichierRepertoire( getStrRepertAppli() + File.separator + "theme" + File.separator + "marqueursOL" + File.separator + "marqueur.png", getStrRepertTemp() + File.separator + "panovisu/images/marqueursOL"); copieFichierRepertoire( getStrRepertAppli() + File.separator + "theme" + File.separator + "marqueursOL" + File.separator + "home.png", getStrRepertTemp() + File.separator + "panovisu/images/marqueursOL"); copieFichierRepertoire( getStrRepertAppli() + File.separator + "theme" + File.separator + "marqueursOL" + File.separator + "marqueurActif.png", getStrRepertTemp() + File.separator + "panovisu/images/marqueursOL"); } if (getGestionnaireInterface().isbAfficheBoutonVisiteAuto()) { File filemarqueursAT = new File(getStrRepertTemp() + "/panovisu/images/visiteAutomatique"); if (!filemarqueursAT.exists()) { filemarqueursAT.mkdirs(); } copieFichierRepertoire( getStrRepertAppli() + File.separator + "theme" + File.separator + "visiteAutomatique" + File.separator + "playAutoTour.png", getStrRepertTemp() + File.separator + "panovisu/images/visiteAutomatique"); copieFichierRepertoire( getStrRepertAppli() + File.separator + "theme" + File.separator + "visiteAutomatique" + File.separator + "pauseAutoTour.png", getStrRepertTemp() + File.separator + "panovisu/images/visiteAutomatique"); } File fileXMLRepert = new File(getStrRepertTemp() + File.separator + "xml"); if (!fileXMLRepert.exists()) { fileXMLRepert.mkdirs(); } File fileCSSRepert = new File(getStrRepertTemp() + File.separator + "css"); if (!fileCSSRepert.exists()) { fileCSSRepert.mkdirs(); } File fileJsRepert = new File(getStrRepertTemp() + File.separator + "js"); if (!fileJsRepert.exists()) { fileJsRepert.mkdirs(); } String strContenuFichier; File fileXML; String strChargeImages = ""; int iPanoEntree = Integer.parseInt(ordPano.getStrPanos().get(0)); strPanoEntree = getPanoramiquesProjet()[iPanoEntree].getStrNomFichier() .substring( getPanoramiquesProjet()[iPanoEntree].getStrNomFichier().lastIndexOf(File.separator) + 1, getPanoramiquesProjet()[iPanoEntree].getStrNomFichier().length()) .split("\\.")[0]; for (int ii = 0; ii < ordPano.getStrPanos().size(); ii++) { int i = Integer.parseInt(ordPano.getStrPanos().get(ii)); String strHTMLPanoRepert = strHTMLRepert + "/" + i; File fileHTMLPanoRepert = new File(strHTMLPanoRepert); if (!fileHTMLPanoRepert.exists()) { fileHTMLPanoRepert.mkdirs(); } String strFichierPano = "panos/panovisu" + i; if (getPanoramiquesProjet()[i].getStrTypePanoramique().equals(Panoramique.CUBE)) { strChargeImages += " images[" + i + "]=\"" + strFichierPano + "_f.jpg\"\n"; strChargeImages += " images[" + i + "]=\"" + strFichierPano + "_b.jpg\"\n"; strChargeImages += " images[" + i + "]=\"" + strFichierPano + "_u.jpg\"\n"; strChargeImages += " images[" + i + "]=\"" + strFichierPano + "_d.jpg\"\n"; strChargeImages += " images[" + i + "]=\"" + strFichierPano + "_r.jpg\"\n"; strChargeImages += " images[" + i + "]=\"" + strFichierPano + "_l.jpg\"\n"; } else { strChargeImages += " images[" + i + "]=\"" + strFichierPano + ".jpg\"\n"; } String strIntroPetitePlanete = (isbIntroPetitePlanete()) ? "oui" : "non"; String strAutorotation = (isbAutoRotationDemarre()) ? "oui" : "non"; String strAutoTour = (isbAutoTourDemarre()) ? "oui" : "non"; String strAutoTourBouton = (getGestionnaireInterface().isbAfficheBoutonVisiteAuto()) ? "oui" : "non"; String strAffInfo = (getPanoramiquesProjet()[i].isAfficheInfo()) ? "oui" : "non"; String strAffTitre = (getGestionnaireInterface().isbAfficheTitre()) ? "oui" : "non"; String strTitreAdpte = (getGestionnaireInterface().isbTitreAdapte()) ? "oui" : "non"; double regX; double zN; if (getPanoramiquesProjet()[i].getStrTypePanoramique().equals(Panoramique.SPHERE)) { regX = Math.round(((getPanoramiquesProjet()[i].getRegardX() - 180) % 360) * 10) / 10; zN = Math.round(((getPanoramiquesProjet()[i].getZeroNord() - 180) % 360) * 10) / 10; } else { regX = Math.round(((getPanoramiquesProjet()[i].getRegardX() + 90) % 360) * 10) / 10; zN = Math.round(((getPanoramiquesProjet()[i].getZeroNord() + 90) % 360) * 10) / 10; } Color coulTitre = Color.valueOf(getGestionnaireInterface().getStrCouleurFondTitre()); int iRouge = (int) (coulTitre.getRed() * 255.d); int iBleu = (int) (coulTitre.getBlue() * 255.d); int iVert = (int) (coulTitre.getGreen() * 255.d); String strCoulFondTitre = "rgba(" + iRouge + "," + iVert + "," + iBleu + "," + getGestionnaireInterface().getTitreOpacite() + ")"; strContenuFichier = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" + "<!--\n" + " Visite gnre par l'diteur panoVisu \n" + "\n" + " Cration L.LANG le monde 360 : http://lemondea360.fr\n" + "\n" + " fichier image : " + getPanoramiquesProjet()[i].getStrNomFichier() + "\n" + "\n" + "-->\n" + "\n" + "\n" + "<scene>\n" + " <pano \n" + " image=\"" + strFichierPano + "\"\n"; if (getGestionnaireInterface().isbAfficheTitre() && getGestionnaireInterface().isbTitreVisite() && getGestionnaireInterface().isbTitrePanoramique()) { String strTit = ""; TextField tfVisite = (TextField) getVbChoixPanoramique().lookup("#titreVisite"); if (!tfVisite.getText().equals("")) { strTit = tfVisite.getText(); } strContenuFichier += " afftitre=\"oui\"\n" + " titre=\"" + strTit + "\"\n" + " titre2=\"" + getPanoramiquesProjet()[i].getStrTitrePanoramique() + "\"\n"; } else if (getGestionnaireInterface().isbAfficheTitre() && getGestionnaireInterface().isbTitreVisite()) { String strTit = ""; TextField tfVisite = (TextField) getVbChoixPanoramique().lookup("#titreVisite"); if (!tfVisite.getText().equals("")) { strTit = tfVisite.getText(); } strContenuFichier += " afftitre=\"oui\"\n" + " titre=\"" + strTit + "\"\n"; } else if (getGestionnaireInterface().isbAfficheTitre() && getGestionnaireInterface().isbTitrePanoramique()) { String strTit = ""; TextField tfVisite = (TextField) getVbChoixPanoramique().lookup("#titreVisite"); if (!tfVisite.getText().equals("")) { strTit = tfVisite.getText(); } strContenuFichier += " afftitre=\"oui\"\n" + " titre2=\"" + getPanoramiquesProjet()[i].getStrTitrePanoramique() + "\"\n"; } else { strContenuFichier += " afftitre=\"non\"\n"; } int taillePolice2 = (int) Math.round( Double.parseDouble(getGestionnaireInterface().getStrTitrePoliceTaille()) * 3.d / 4.d); strContenuFichier += " titrePosition=\"" + getGestionnaireInterface().getStrTitrePosition() + "\"\n" + " titreDecalage=\"" + Math.round(getGestionnaireInterface().getTitreDecalage()) + "px\"\n" + " titrePolice=\"" + getGestionnaireInterface().getStrTitrePoliceNom() + "\"\n" + " titreTaillePolice=\"" + Math.round(Double.parseDouble(getGestionnaireInterface().getStrTitrePoliceTaille())) + "px\"\n" + " titreTaillePolice2=\"" + taillePolice2 + "px\"\n" + " titreCalque=\"" + getGestionnaireInterface().getiCalqueTitre() + "\"\n"; if (getGestionnaireInterface().isbTitreAdapte()) { strContenuFichier += " titreTaille=\"adapte\"\n"; } else { strContenuFichier += " titreTaille=\"" + Math.round(getGestionnaireInterface().getTitreTaille()) + "%\"\n"; } strContenuFichier += " titreFond=\"" + strCoulFondTitre + "\"\n" + " titreCouleur=\"" + getGestionnaireInterface().getStrCouleurTitre() + "\"\n" + " type=\"" + getPanoramiquesProjet()[i].getStrTypePanoramique() + "\"\n" + " multiReso=\"oui\"\n" + " nombreNiveaux=\"" + getPanoramiquesProjet()[i].getNombreNiveaux() + "\"\n" + " zeroNord=\"" + zN + "\"\n" + " regardX=\"" + regX + "\"\n" + " regardY=\"" + Math.round((getPanoramiquesProjet()[i].getRegardY() * 1000) + 0.002) / 1000 + "\"\n" + " minFOV=\"" + Math.round((getPanoramiquesProjet()[i].getFovMin() * 200)) / 100 + "\"\n" + " maxFOV=\"" + Math.round((getPanoramiquesProjet()[i].getFovMax() * 200)) / 100 + "\"\n" + " champVisuel=\"" + Math.round((getPanoramiquesProjet()[i].getChampVisuel() + 0.002) * 1000) / 1000 + "\"\n"; if (getPanoramiquesProjet()[i].getMinLat() != -1000 && getPanoramiquesProjet()[i].isbMinLat()) { strContenuFichier += " minLat=\"" + Math.round((getPanoramiquesProjet()[i].getMinLat() + 0.002) * 1000) / 1000 + "\"\n"; } if (getPanoramiquesProjet()[i].getMaxLat() != 1000 && getPanoramiquesProjet()[i].isbMaxLat()) { strContenuFichier += " maxLat=\"" + Math.round((getPanoramiquesProjet()[i].getMaxLat() + 0.002) * 1000) / 1000 + "\"\n"; } strContenuFichier += " autorotation=\"" + strAutorotation + "\"\n" + " vitesseAR=\"" + getiAutoRotationVitesse() + "\"\n" + " autotour=\"" + strAutoTour + "\"\n" + " atBouton=\"" + strAutoTourBouton + "\"\n" + " atBoutonTaille=\"" + getGestionnaireInterface().getTailleBoutonVisiteAuto() + "\"\n" + " atBoutonPositionX=\"" + getGestionnaireInterface().getStrPositionXBoutonVisiteAuto() + "\"\n" + " atBoutonPositionY=\"" + getGestionnaireInterface().getStrPositionYBoutonVisiteAuto() + "\"\n" + " atBoutonOffsetX=\"" + getGestionnaireInterface().getOffsetXBoutonVisiteAuto() + "\"\n" + " atBoutonOffsetY=\"" + getGestionnaireInterface().getOffsetYBoutonVisiteAuto() + "\"\n" + " atCalque=\"" + getGestionnaireInterface().getiCalqueVisiteAuto() + "\"\n" + " typeAT=\"" + getStrAutoTourType() + "\"\n" + " limiteAT=\"" + getiAutoTourLimite() + "\"\n" + " demarrageAT=\"" + getiAutoTourDemarrage() + "\"\n" + " affinfo=\"" + strAffInfo + "\"\n"; if (getPanoramiquesProjet()[i].getStrNomFichier() .substring(getPanoramiquesProjet()[i].getStrNomFichier().lastIndexOf(File.separator) + 1, getPanoramiquesProjet()[i].getStrNomFichier().length()) .split("\\.")[0].equals(strPanoEntree) && isbPetitePlaneteDemarrage()) { strContenuFichier += " petitePlanete=\"" + strIntroPetitePlanete + "\"\n"; } if (getPanoramiquesProjet()[i].getStrNomFichier() .substring(getPanoramiquesProjet()[i].getStrNomFichier().lastIndexOf(File.separator) + 1, getPanoramiquesProjet()[i].getStrNomFichier().length()) .split("\\.")[0].equals(strPanoEntree) && getGestionnaireInterface().isbReplieDemarragePlan()) { strContenuFichier += " repliePlan=\"oui\"\n"; } if (getPanoramiquesProjet()[i].getStrNomFichier() .substring(getPanoramiquesProjet()[i].getStrNomFichier().lastIndexOf(File.separator) + 1, getPanoramiquesProjet()[i].getStrNomFichier().length()) .split("\\.")[0].equals(strPanoEntree) && getGestionnaireInterface().isbReplieDemarrageCarte()) { strContenuFichier += " replieCarte=\"oui\"\n"; } if (getPanoramiquesProjet()[i].getStrNomFichier() .substring(getPanoramiquesProjet()[i].getStrNomFichier().lastIndexOf(File.separator) + 1, getPanoramiquesProjet()[i].getStrNomFichier().length()) .split("\\.")[0].equals(strPanoEntree) && getGestionnaireInterface().isbReplieDemarrageVignettes()) { strContenuFichier += " replieVignettes=\"oui\"\n"; } strContenuFichier += " />\n"; if (getGestionnaireInterface().getStrVisibiliteBarreClassique().equals("oui")) { strContenuFichier += " <!--Dfinition de la Barre de navigation-->\n" + " <boutons \n" + " styleBoutons=\"navigation\"\n" + " couleur=\"rgba(255,255,255,0)\"\n" + " bordure=\"rgba(255,255,255,0)\"\n" + " deplacements=\"" + getGestionnaireInterface().getStrDeplacementsBarreClassique() + "\" \n" + " zoom=\"" + getGestionnaireInterface().getStrZoomBarreClassique() + "\" \n" + " outils=\"" + getGestionnaireInterface().getStrOutilsBarreClassique() + "\"\n" + " fs=\"" + getGestionnaireInterface().getStrPleinEcranBarreClassique() + "\" \n" + " souris=\"" + getGestionnaireInterface().getStrSourisBarreClassique() + "\" \n" + " rotation=\"" + getGestionnaireInterface().getStrRotationBarreClassique() + "\" \n" + " positionX=\"" + getGestionnaireInterface().getStrPositionBarreClassique().split(":")[1] + "\"\n" + " positionY=\"" + getGestionnaireInterface().getStrPositionBarreClassique().split(":")[0] + "\" \n" + " barreCCalque=\"" + getGestionnaireInterface().getiCalqueBarreClassique() + "\"\n" + " dX=\"" + getGestionnaireInterface().getOffsetXBarreClassique() + "\" \n" + " dY=\"" + getGestionnaireInterface().getOffsetYBarreClassique() + "\"\n" + " espacement=\"" + Math.round(getGestionnaireInterface().getEspacementBarreClassique()) + "\"\n" + " visible=\"" + getGestionnaireInterface().getStrVisibiliteBarreClassique() + "\"\n" + " />\n"; } if (getGestionnaireInterface().getStrVisibiliteBarrePersonnalisee().equals("oui")) { strContenuFichier += "<!-- Barre de Navigation Personnalise -->\n\n" + " <telecommande\n" + " fs=\"" + getGestionnaireInterface().getStrPleinEcranBarrePersonnalisee() + "\" \n" + " souris=\"" + getGestionnaireInterface().getStrSourisBarrePersonnalisee() + "\" \n" + " rotation=\"" + getGestionnaireInterface().getStrRotationBarrePersonnalisee() + "\" \n" + " info=\"" + getGestionnaireInterface().getStrInfoBarrePersonnalisee() + "\"\n" + " aide=\"" + getGestionnaireInterface().getStrAideBarrePersonnalisee() + "\"\n" + " positionX=\"" + getGestionnaireInterface().getStrPositionBarrePersonnalisee().split(":")[1] + "\"\n" + " positionY=\"" + getGestionnaireInterface().getStrPositionBarrePersonnalisee().split(":")[0] + "\" \n" + " taille=\"" + getGestionnaireInterface().getTailleBarrePersonnalisee() + "\"\n" + " tailleBouton=\"" + getGestionnaireInterface().getTailleIconesBarrePersonnalisee() + "\"\n" + " dX=\"" + getGestionnaireInterface().getOffsetXBarrePersonnalisee() + "\" \n" + " dY=\"" + getGestionnaireInterface().getOffsetYBarrePersonnalisee() + "\"\n" + " barrePCalque=\"" + getGestionnaireInterface().getiCalqueBarrePersonnalisee() + "\"\n" + " lien1=\"" + getGestionnaireInterface().getStrLien1BarrePersonnalisee() + "\"\n" + " lien2=\"" + getGestionnaireInterface().getStrLien2BarrePersonnalisee() + "\"\n" + " visible=\"oui\">\n"; for (int ij = 0; ij < getGestionnaireInterface().getiNombreZonesBarrePersonnalisee(); ij++) { strContenuFichier += " <zoneNavPerso " + "id=\"" + getGestionnaireInterface().getZonesBarrePersonnalisee()[ij].getStrIdZone() + "\" " + "alt=\"\" title=\"\" " + "shape=\"" + getGestionnaireInterface().getZonesBarrePersonnalisee()[ij].getStrTypeZone() + "\" " + "coords=\"" + getGestionnaireInterface().getZonesBarrePersonnalisee()[ij] .getStrCoordonneesZone() + "\"" + " />\n"; } strContenuFichier += " </telecommande>\n" + ""; } if (getGestionnaireInterface().isbAfficheBoussole()) { String strAiguille = (getGestionnaireInterface().isbAiguilleMobileBoussole()) ? "oui" : "non"; strContenuFichier += "<!-- Boussole -->\n" + " <boussole \n" + " affiche=\"oui\"\n" + " image=\"" + getGestionnaireInterface().getStrImageBoussole() + "\"\n" + " taille=\"" + getGestionnaireInterface().getTailleBoussole() + "\"\n" + " positionY=\"" + getGestionnaireInterface().getStrPositionBoussole().split(":")[0] + "\"\n" + " positionX=\"" + getGestionnaireInterface().getStrPositionBoussole().split(":")[1] + "\"\n" + " opacite=\"" + getGestionnaireInterface().getOpaciteBoussole() + "\"\n" + " dX=\"" + getGestionnaireInterface().getOffsetXBoussole() + "\"\n" + " dY=\"" + getGestionnaireInterface().getOffsetYBoussole() + "\"\n" + " boussoleCalque=\"" + getGestionnaireInterface().getiCalqueBoussole() + "\"\n" + " aiguille=\"" + strAiguille + "\"\n" + " />\n"; } if (getGestionnaireInterface().isbFenetreInfoPersonnalise()) { String strImgInfoURL = "images/" + getGestionnaireInterface().getStrFenetreInfoImage().substring( getGestionnaireInterface().getStrFenetreInfoImage().lastIndexOf(File.separator) + 1, getGestionnaireInterface().getStrFenetreInfoImage().length()); strContenuFichier += "<!-- Fentre info personnalise -->\n" + " <fenetreInfo \n" + " affiche=\"oui\"\n" + " image=\"" + strImgInfoURL + "\"\n" + " taille=\"" + getGestionnaireInterface().getFenetreInfoTaille() + "\"\n" + " opacite=\"" + getGestionnaireInterface().getFenetreInfoOpacite() + "\"\n" + " dX=\"" + Math.round(getGestionnaireInterface().getFenetreInfoPosX() * 10) / 10 + "\"\n" + " dY=\"" + Math.round(getGestionnaireInterface().getFenetreInfoPosY() * 10) / 10 + "\"\n" + " URL=\"" + getGestionnaireInterface().getStrFenetreURL() + "\"\n" + " texteURL=\"" + getGestionnaireInterface().getStrFenetreTexteURL() + "\"\n" + " couleurURL=\"" + getGestionnaireInterface().getStrFenetreURLCouleur() + "\"\n" + " TailleURL=\"" + Math.round(getGestionnaireInterface().getFenetrePoliceTaille() * 10) / 10 + "\"\n" + " URLdX=\"" + Math.round(getGestionnaireInterface().getFenetreURLPosX() * 10) / 10 + "\"\n" + " URLdY=\"" + Math.round(getGestionnaireInterface().getFenetreURLPosY() * 10) / 10 + "\"\n" + " />\n"; } if (getGestionnaireInterface().isbFenetreAidePersonnalise()) { String strImgAideURL = "images/" + getGestionnaireInterface().getStrFenetreAideImage().substring( getGestionnaireInterface().getStrFenetreAideImage().lastIndexOf(File.separator) + 1, getGestionnaireInterface().getStrFenetreAideImage().length()); strContenuFichier += "<!-- Fentre Aide personnalise -->\n" + " <fenetreAide \n" + " affiche=\"oui\"\n" + " image=\"" + strImgAideURL + "\"\n" + " taille=\"" + getGestionnaireInterface().getFenetreAideTaille() + "\"\n" + " opacite=\"" + getGestionnaireInterface().getFenetreAideOpacite() + "\"\n" + " dX=\"" + getGestionnaireInterface().getFenetreAidePosX() + "\"\n" + " dY=\"" + getGestionnaireInterface().getFenetreAidePosY() + "\"\n" + " />\n"; } if (getGestionnaireInterface().isbAfficheMenuContextuel()) { String strPrecSuiv = (getGestionnaireInterface().isbAffichePrecSuivMC()) ? "oui" : "non"; String strPlanet = (getGestionnaireInterface().isbAffichePlanetNormalMC()) ? "oui" : "non"; String strPers1 = (getGestionnaireInterface().isbAffichePersMC1()) ? "oui" : "non"; String strPers2 = (getGestionnaireInterface().isbAffichePersMC2()) ? "oui" : "non"; strContenuFichier += "<!-- MenuContextuel -->\n" + " <menuContextuel \n" + " affiche=\"oui\"\n" + " precSuiv=\"" + strPrecSuiv + "\"\n" + " planete=\"" + strPlanet + "\"\n" + " pers1=\"" + strPers1 + "\"\n" + " lib1=\"" + getGestionnaireInterface().getStrPersLib1() + "\"\n" + " url1=\"" + getGestionnaireInterface().getStrPersURL1() + "\"\n" + " pers2=\"" + strPers2 + "\"\n" + " lib2=\"" + getGestionnaireInterface().getStrPersLib2() + "\"\n" + " url2=\"" + getGestionnaireInterface().getStrPersURL2() + "\"\n" + " />\n"; } int iPanoSuivant = (ii == ordPano.getStrPanos().size() - 1) ? 0 : ii + 1; int iPanoPrecedent = (ii == 0) ? ordPano.getStrPanos().size() - 1 : ii - 1; String strNomPano = "panovisu" + iPanoSuivant; String strPanoSuivant = "xml/" + strNomPano + ".xml"; strNomPano = "panovisu" + iPanoPrecedent; String strPanoPrecedent = "xml/" + strNomPano + ".xml"; strContenuFichier += "<!-- Bouton Suivant Precedent -->\n" + " <suivantPrecedent\n" + " suivPrecCalque=\"" + getGestionnaireInterface().getiCalqueSuivPrec() + "\"\n" + " suivant=\"" + strPanoSuivant + "\" \n" + " precedent=\"" + strPanoPrecedent + "\" \n"; if (getGestionnaireInterface().isbSuivantPrecedent()) { strContenuFichier += " afficheSuivantPrecedent=\"oui\" \n"; } strContenuFichier += " /> \n" + ""; String strbAffichemasque = (getGestionnaireInterface().isbAfficheMasque()) ? "oui" : "non"; String strNavigation = (getGestionnaireInterface().isbMasqueNavigation()) ? "oui" : "non"; String strBoussole = (getGestionnaireInterface().isbMasqueBoussole()) ? "oui" : "non"; String strTitre = (getGestionnaireInterface().isbMasqueTitre()) ? "oui" : "non"; String strPlan = (getGestionnaireInterface().isbMasquePlan()) ? "oui" : "non"; String strReseaux = (getGestionnaireInterface().isbMasqueReseaux()) ? "oui" : "non"; String strVignettes = (getGestionnaireInterface().isbMasqueVignettes()) ? "oui" : "non"; String strCombo = (getGestionnaireInterface().isbMasqueCombo()) ? "oui" : "non"; String strSuivPrec = (getGestionnaireInterface().isbMasqueSuivPrec()) ? "oui" : "non"; String strHotspots = (getGestionnaireInterface().isbMasqueHotspots()) ? "oui" : "non"; strContenuFichier += "<!-- Bouton de Masquage -->\n" + " <marcheArret \n" + " affiche=\"" + strbAffichemasque + "\"\n" + " image=\"MA.png\"\n" + " taille=\"" + getGestionnaireInterface().getTailleMasque() + "\"\n" + " positionY=\"" + getGestionnaireInterface().getStrPositionMasque().split(":")[0] + "\"\n" + " positionX=\"" + getGestionnaireInterface().getStrPositionMasque().split(":")[1] + "\"\n" + " opacite=\"" + getGestionnaireInterface().getOpaciteMasque() + "\"\n" + " dX=\"" + getGestionnaireInterface().getdXMasque() + "\"\n" + " dY=\"" + getGestionnaireInterface().getdYMasque() + "\"\n" + " navigation=\"" + strNavigation + "\"\n" + " boussole=\"" + strBoussole + "\"\n" + " titre=\"" + strTitre + "\"\n" + " plan=\"" + strPlan + "\"\n" + " reseaux=\"" + strReseaux + "\"\n" + " masquageCalque=\"" + getGestionnaireInterface().getiCalqueMasquage() + "\"\n" + " vignettes=\"" + strVignettes + "\"\n" + " combo=\"" + strCombo + "\"\n" + " suivPrec=\"" + strSuivPrec + "\"\n" + " hotspots=\"" + strHotspots + "\"\n" + " />\n"; if (getGestionnaireInterface().isbAfficheReseauxSociaux()) { String strTwitter = (getGestionnaireInterface().isbReseauxSociauxTwitter()) ? "oui" : "non"; String strGoogle = (getGestionnaireInterface().isbReseauxSociauxGoogle()) ? "oui" : "non"; String strFacebook = (getGestionnaireInterface().isbReseauxSociauxFacebook()) ? "oui" : "non"; String strEmail = (getGestionnaireInterface().isbReseauxSociauxEmail()) ? "oui" : "non"; strContenuFichier += "<!-- Rseaux Sociaux -->\n" + " <reseauxSociaux \n" + " affiche=\"oui\"\n" + " taille=\"" + getGestionnaireInterface().getTailleReseauxSociaux() + "\"\n" + " positionY=\"" + getGestionnaireInterface().getStrPositionReseauxSociaux().split(":")[0] + "\"\n" + " positionX=\"" + getGestionnaireInterface().getStrPositionReseauxSociaux().split(":")[1] + "\"\n" + " opacite=\"" + getGestionnaireInterface().getOpaciteReseauxSociaux() + "\"\n" + " dX=\"" + getGestionnaireInterface().getdXReseauxSociaux() + "\"\n" + " dY=\"" + getGestionnaireInterface().getdYReseauxSociaux() + "\"\n" + " partageCalque=\"" + getGestionnaireInterface().getiCalquePartage() + "\"\n" + " twitter=\"" + strTwitter + "\"\n" + " google=\"" + strGoogle + "\"\n" + " facebook=\"" + strFacebook + "\"\n" + " email=\"" + strEmail + "\"\n" + " />\n"; } if (getGestionnaireInterface().isbAfficheVignettes()) { int iRougeVig = (int) (Color.valueOf(getGestionnaireInterface().getStrCouleurFondVignettes()) .getRed() * 255.d); int iBleuVig = (int) (Color.valueOf(getGestionnaireInterface().getStrCouleurFondVignettes()) .getBlue() * 255.d); int iVertVig = (int) (Color.valueOf(getGestionnaireInterface().getStrCouleurFondVignettes()) .getGreen() * 255.d); String strCoulVig = "rgba(" + iRougeVig + "," + iVertVig + "," + iBleuVig + "," + getGestionnaireInterface().getOpaciteVignettes() + ")"; String strAfficheVignettes = (getGestionnaireInterface().isbAfficheVignettes()) ? "oui" : "non"; strContenuFichier += "<!-- Barre des vignettes -->" + " <vignettes \n" + " affiche=\"" + strAfficheVignettes + "\"\n" + " tailleImage=\"" + getGestionnaireInterface().getTailleImageVignettes() + "\"\n" + " fondCouleur=\"" + strCoulVig + "\"\n" + " texteCouleur=\"" + getGestionnaireInterface().getStrCouleurTexteVignettes() + "\"\n" + " opacite=\"1.0\"\n" + " vignettesCalque=\"" + getGestionnaireInterface().getiCalqueVignettes() + "\"\n" + " position=\"" + getGestionnaireInterface().getStrPositionVignettes() + "\"\n" + " >\n"; for (int jj = 0; jj < ordPano.getStrPanos().size(); jj++) { int j = Integer.parseInt(ordPano.getStrPanos().get(jj)); String strNomPan1 = getPanoramiquesProjet()[j].getStrNomFichier(); String strFichier = "panovisu" + j + "Vignette.jpg"; String strXML = "panovisu" + j + ".xml"; ReadWriteImage.writeJpeg(getPanoramiquesProjet()[j].getImgVignettePanoramique(), getStrRepertTemp() + "/panos/" + strFichier, 1.0f, false, 0.0f); strContenuFichier += " <imageVignette \n" + " image=\"panos/" + strFichier + "\"\n" + " xml=\"xml/" + strXML + "\"\n" + " infoBulle=\"" + getPanoramiquesProjet()[j].getStrTitrePanoramique() + "\"\n" + " />\n"; } strContenuFichier += " </vignettes> \n" + ""; } if (getGestionnaireInterface().isbAfficheComboMenu()) { String strAfficheComboMenu = (getGestionnaireInterface().isbAfficheComboMenu()) ? "oui" : "non"; TextField tfTitreVisite = (TextField) getVbChoixPanoramique().lookup("#titreVisite"); String strTitreVisite1 = tfTitreVisite.getText(); strContenuFichier += "<!-- Barre des comboMenu -->" + " <comboMenu \n" + " affiche=\"" + strAfficheComboMenu + "\"\n" + " positionX=\"" + getGestionnaireInterface().getStrPositionXComboMenu() + "\"\n" + " positionY=\"" + getGestionnaireInterface().getStrPositionYComboMenu() + "\"\n" + " dX=\"" + getGestionnaireInterface().getOffsetXComboMenu() + "\"\n" + " comboCalque=\"" + getGestionnaireInterface().getiCalqueMenuPanoramiques() + "\"\n" + " dY=\"" + getGestionnaireInterface().getOffsetYComboMenu() + "\"\n" + " >\n"; for (int jj = 0; jj < ordPano.getStrPanos().size(); jj++) { int j = Integer.parseInt(ordPano.getStrPanos().get(jj)); String strNomPan2 = getPanoramiquesProjet()[j].getStrNomFichier(); String strFichier = "panovisu" + j + "Vignette.jpg"; String strXML = "panovisu" + j + ".xml"; ReadWriteImage.writeJpeg(getPanoramiquesProjet()[j].getImgVignettePanoramique(), getStrRepertTemp() + "/panos/" + strFichier, 1.0f, false, 0.0f); strContenuFichier += " <imageComboMenu \n"; if (getGestionnaireInterface().isbAfficheComboMenuImages()) { strContenuFichier += " image=\"panos/" + strFichier + "\"\n"; } if (i == j) { strContenuFichier += " selectionne=\"selected\"\n"; } strContenuFichier += " xml=\"xml/" + strXML + "\"\n" + " titre=\"" + getPanoramiquesProjet()[j].getStrTitrePanoramique() + "\"\n" + " sousTitre=\"" + strTitreVisite1 + "\"\n" + " />\n"; } strContenuFichier += " </comboMenu> \n" + ""; } strContenuFichier += " <!--Dfinition des hotspots--> \n" + " <hotspots>\n"; for (int j = 0; j < getPanoramiquesProjet()[i].getNombreHotspots(); j++) { HotSpot HS = getPanoramiquesProjet()[i].getHotspot(j); double longit; if (getPanoramiquesProjet()[i].getStrTypePanoramique().equals(Panoramique.SPHERE)) { longit = HS.getLongitude() - 180; } else { longit = HS.getLongitude() + 90; } String strAnime = (HS.isAnime()) ? "true" : "false"; strContenuFichier += " <point \n" + " type=\"panoramique\"\n" + " long=\"" + longit + "\"\n" + " lat=\"" + HS.getLatitude() + "\"\n" + " tailleHS=\"" + getGestionnaireInterface().getiTailleHotspotsPanoramique() + "px\"\n"; if (!strTypeHS.equals("gif")) { strContenuFichier += " image=\"panovisu/images/hotspots/hotspot.png\"\n"; } else { String strNomHSGif = strNomfichierHS .substring(strNomfichierHS.lastIndexOf(File.separator) + 1); strContenuFichier += " image=\"panovisu/images/hotspots/" + strNomHSGif + "\"\n"; } strContenuFichier += " xml=\"xml/panovisu" + HS.getNumeroPano() + ".xml\"\n"; if (HS.getRegardX() != 1000) { strContenuFichier += " regardX=\"" + HS.getRegardX() + "\"\n"; } if (HS.getRegardY() != 1000) { strContenuFichier += " regardY=\"" + HS.getRegardY() + "\"\n"; } if (HS.getChampVisuel() != 0) { strContenuFichier += " champVisuel=\"" + HS.getChampVisuel() + "\"\n"; } strContenuFichier += " info=\"" + HS.getStrInfo().replace("<", "<").replace(">", ">").replace("\"", """) + "\"\n" + " anime=\"" + strAnime + "\"\n" + " />\n"; } for (int j = 0; j < getPanoramiquesProjet()[i].getNombreHotspotHTML(); j++) { HotspotHTML HS = getPanoramiquesProjet()[i].getHotspotHTML(j); String strUrlHTML; if (!HS.isbLienExterieur()) { HS.creeHTML(strHTMLPanoRepert + "/page" + j); strUrlHTML = "pagesHTML/" + i + "/page" + j + "/index.html"; } else { strUrlHTML = HS.getStrURLExterieure(); } Color coulTitreHTML = Color.valueOf(HS.getStrCouleurHTML()); iRouge = (int) (coulTitreHTML.getRed() * 255.d); iBleu = (int) (coulTitreHTML.getBlue() * 255.d); iVert = (int) (coulTitreHTML.getGreen() * 255.d); String strCoulHTML = "rgba(" + iRouge + "," + iVert + "," + iBleu + "," + Math.round(HS.getOpaciteHTML() * 100.d) / 100.d + ")"; double longit; if (getPanoramiquesProjet()[i].getStrTypePanoramique().equals(Panoramique.SPHERE)) { longit = HS.getLongitude() - 180; } else { longit = HS.getLongitude() + 90; } String strAnime = (HS.isAnime()) ? "true" : "false"; strContenuFichier += " <point \n" + " type=\"html\"\n" + " long=\"" + longit + "\"\n" + " lat=\"" + HS.getLatitude() + "\"\n" + " tailleHS=\"" + getGestionnaireInterface().getiTailleHotspotsHTML() + "px\"\n"; if (!strTypeHSHTML.equals("gif")) { strContenuFichier += " image=\"panovisu/images/hotspots/hotspotHTML.png\"\n"; } else { String strNomHSGif = strNomfichierHSHTML .substring(strNomfichierHSHTML.lastIndexOf(File.separator) + 1); strContenuFichier += " image=\"panovisu/images/hotspots/" + strNomHSGif + "\"\n"; } strContenuFichier += " url=\"" + strUrlHTML + "\"\n" + " info=\"" + HS.getStrInfo().replace("<", "<").replace(">", ">").replace("\"", """) + "\"\n" + " taille=\"" + Math.round(HS.getLargeurHTML()) + "px\"\n" + " position=\"" + HS.getStrPositionHTML() + "\"\n" + " couleur=\"" + strCoulHTML + "\"\n" + " anime=\"" + strAnime + "\"\n" + " />\n"; } for (int j = 0; j < getPanoramiquesProjet()[i].getiNombreHotspotDiapo(); j++) { HotspotDiaporama HS = getPanoramiquesProjet()[i].getHotspotDiapo(j); String strUrlHTML; strUrlHTML = "diaporama/diapo" + HS.getiNumDiapo() + ".html"; Color coulTitreHTML = Color.valueOf(diaporamas[HS.getiNumDiapo()].getStrCouleurFondDiaporama()); iRouge = (int) (coulTitreHTML.getRed() * 255.d); iBleu = (int) (coulTitreHTML.getBlue() * 255.d); iVert = (int) (coulTitreHTML.getGreen() * 255.d); String strCoulHTML = "rgba(" + iRouge + "," + iVert + "," + iBleu + "," + Math.round(diaporamas[HS.getiNumDiapo()].getOpaciteDiaporama() * 100.d) / 100.d + ")"; double longit; if (getPanoramiquesProjet()[i].getStrTypePanoramique().equals(Panoramique.SPHERE)) { longit = HS.getLongitude() - 180; } else { longit = HS.getLongitude() + 90; } String strAnime = (HS.isbAnime()) ? "true" : "false"; strContenuFichier += " <point \n" + " type=\"html\"\n" + " long=\"" + longit + "\"\n" + " lat=\"" + HS.getLatitude() + "\"\n" + " tailleHS=\"" + getGestionnaireInterface().getiTailleHotspotsImage() + "px\"\n"; if (!strTypeHSImage.equals("gif")) { strContenuFichier += " image=\"panovisu/images/hotspots/hotspotImage.png\"\n"; } else { String strNomHSGif = strNomfichierHSImage .substring(strNomfichierHSImage.lastIndexOf(File.separator) + 1); strContenuFichier += " image=\"panovisu/images/hotspots/" + strNomHSGif + "\"\n"; } strContenuFichier += " url=\"" + strUrlHTML + "\"\n" + " taille=\"90%\"\n" + " info=\"" + HS.getStrInfo().replace("<", "<").replace(">", ">").replace("\"", """) + "\"\n" + " couleur=\"" + strCoulHTML + "\"\n" + " anime=\"" + strAnime + "\"\n" + " />\n"; } for (int j = 0; j < getPanoramiquesProjet()[i].getNombreHotspotImage(); j++) { HotspotImage HS = getPanoramiquesProjet()[i].getHotspotImage(j); String strCouleurFondImage = HS.getStrCouleurFond(); if (strCouleurFondImage.equals("")) { strCouleurFondImage = "#" + getGestionnaireInterface().getCouleurFondTheme().toString().substring(2, 8); } double opaciteImage = HS.getOpacite(); if (opaciteImage == -1) { opaciteImage = getGestionnaireInterface().getOpaciteTheme(); } Color coulImage = Color.valueOf(strCouleurFondImage); iRouge = (int) (coulImage.getRed() * 255.d); iBleu = (int) (coulImage.getBlue() * 255.d); iVert = (int) (coulImage.getGreen() * 255.d); String strCoulImage = "rgba(" + iRouge + "," + iVert + "," + iBleu + "," + Math.round(opaciteImage * 100.d) / 100.d + ")"; double longit; if (getPanoramiquesProjet()[i].getStrTypePanoramique().equals(Panoramique.SPHERE)) { longit = HS.getLongitude() - 180; } else { longit = HS.getLongitude() + 90; } String strAnime = (HS.isAnime()) ? "true" : "false"; strContenuFichier += " <point \n" + " type=\"image\"\n" + " long=\"" + longit + "\"\n" + " lat=\"" + HS.getLatitude() + "\"\n" + " tailleHS=\"" + getGestionnaireInterface().getiTailleHotspotsImage() + "px\"\n"; if (!strTypeHSImage.equals("gif")) { strContenuFichier += " image=\"panovisu/images/hotspots/hotspotImage.png\"\n"; } else { String strNomHSGif = strNomfichierHSImage .substring(strNomfichierHSImage.lastIndexOf(File.separator) + 1); strContenuFichier += " image=\"panovisu/images/hotspots/" + strNomHSGif + "\"\n"; } strContenuFichier += " img=\"images/" + HS.getStrLienImg() + "\"\n" + " info=\"" + HS.getStrInfo().replace("<", "<").replace(">", ">").replace("\"", """) + "\"\n" + " couleur=\"" + strCoulImage + "\"\n" + " anime=\"" + strAnime + "\"\n" + " />\n"; } strContenuFichier += " </hotspots>\n"; strContenuFichier += "\n" + "<!-- Dfinition des images de fond -->\n" + "\n"; if (getGestionnaireInterface().getiNombreImagesFond() > 0) { for (int k = 0; k < getGestionnaireInterface().getiNombreImagesFond(); k++) { ImageFond imgFond = getGestionnaireInterface().getImagesFond()[k]; String strImgFond = "images/" + imgFond.getStrFichierImage().substring( imgFond.getStrFichierImage().lastIndexOf(File.separator) + 1, imgFond.getStrFichierImage().length()); String strMasquable = (imgFond.isMasquable()) ? "oui" : "non"; strContenuFichier += " <imageFond\n" + " fichier=\"" + strImgFond + "\"\n" + " posX=\"" + imgFond .getStrPosX() + "\" \n" + " posY=\"" + imgFond.getStrPosY() + "\" \n" + " offsetX=\"" + imgFond.getOffsetX() + "\" \n" + " offsetY=\"" + imgFond.getOffsetY() + "\" \n" + " tailleX=\"" + imgFond.getTailleX() + "\" \n" + " tailleY=\"" + imgFond.getTailleY() + "\" \n" + " opacite=\"" + imgFond.getOpacite() + "\" \n" + " cible=\"" + imgFond.getStrCible() + "\" \n" + " calque=\"" + imgFond.getiCalqueImage() + "\"\n" + " masquable=\"" + strMasquable + "\" \n" + " url=\"" + imgFond.getStrUrl() + "\" \n" + " infobulle=\"" + imgFond.getStrInfobulle() .replace("<", "<").replace(">", ">").replace("\"", """) + "\" \n" + " />\n" + ""; } } if (getGestionnaireInterface().isbAffichePlan() && getPanoramiquesProjet()[i].isAffichePlan()) { int iNumPlan = getPanoramiquesProjet()[i].getNumeroPlan(); Plan planPano = getPlans()[iNumPlan]; iRouge = (int) (getGestionnaireInterface().getCouleurFondPlan().getRed() * 255.d); iBleu = (int) (getGestionnaireInterface().getCouleurFondPlan().getBlue() * 255.d); iVert = (int) (getGestionnaireInterface().getCouleurFondPlan().getGreen() * 255.d); String strAfficheRadar = (getGestionnaireInterface().isbAfficheRadar()) ? "oui" : "non"; String strCoulFond = "rgba(" + iRouge + "," + iVert + "," + iBleu + "," + getGestionnaireInterface().getOpacitePlan() + ")"; strContenuFichier += " <plan\n" + " affiche=\"oui\" \n" + " image=\"images/" + planPano.getStrImagePlan() + "\"\n" + " largeur=\"" + getGestionnaireInterface().getLargeurPlan() + "\"\n" + " position=\"" + getGestionnaireInterface().getStrPositionPlan() + "\"\n" + " couleurFond=\"" + strCoulFond + "\"\n" + " couleurTexte=\"#" + getGestionnaireInterface().getStrCouleurTextePlan() + "\"\n" + " nord=\"" + planPano.getDirectionNord() + "\"\n" + " planCalque=\"" + getGestionnaireInterface().getiCalquePlan() + "\"\n" + " boussolePosition=\"" + planPano.getStrPosition() + "\"\n" + " boussoleX=\"" + planPano.getPositionX() + "\"\n" + " boussoleY=\"" + planPano.getPositionX() + "\"\n" + " radarAffiche=\"" + strAfficheRadar + "\"\n" + " radarTaille=\"" + Math.round(getGestionnaireInterface().getTailleRadar()) + "\"\n" + " radarCouleurFond=\"#" + getGestionnaireInterface().getStrCouleurFondRadar() + "\"\n" + " radarCouleurLigne=\"#" + getGestionnaireInterface().getStrCouleurLigneRadar() + "\"\n" + " radarOpacite=\"" + Math.round(getGestionnaireInterface().getOpaciteRadar() * 100.d) / 100.d + "\"\n" + " >\n"; for (int iPoint = 0; iPoint < planPano.getNombreHotspots(); iPoint++) { double posX = planPano.getHotspot(iPoint).getLongitude() * getGestionnaireInterface().getLargeurPlan(); double posY = planPano.getHotspot(iPoint).getLatitude() * planPano.getHauteurPlan() * getGestionnaireInterface().getLargeurPlan() / planPano.getLargeurPlan(); if (planPano.getHotspot(iPoint).getNumeroPano() == i) { strContenuFichier += " <pointPlan\n" + " positX=\"" + posX + "\"\n" + " positY=\"" + posY + "\"\n" + " xml=\"actif\"\n" + " /> \n"; } else { strContenuFichier += " <pointPlan\n" + " positX=\"" + posX + "\"\n" + " positY=\"" + posY + "\"\n" + " xml=\"xml/panovisu" + planPano.getHotspot(iPoint).getNumeroPano() + ".xml\"\n" + " texte=\"" + planPano.getHotspot(iPoint).getStrInfo() + "\"\n" + " /> \n"; } } strContenuFichier += " </plan>\n"; } if (getGestionnaireInterface().isbAfficheCarte()) { iRouge = (int) (getGestionnaireInterface().getCouleurFondCarte().getRed() * 255.d); iBleu = (int) (getGestionnaireInterface().getCouleurFondCarte().getBlue() * 255.d); iVert = (int) (getGestionnaireInterface().getCouleurFondCarte().getGreen() * 255.d); String strAfficheRadarCarte = (getGestionnaireInterface().isbAfficheRadarCarte()) ? "oui" : "non"; String strCoulFond = "rgba(" + iRouge + "," + iVert + "," + iBleu + "," + getGestionnaireInterface().getOpaciteCarte() + ")"; CoordonneesGeographiques coords; if (getGestionnaireInterface().getCoordCentreCarte() != null) { coords = getGestionnaireInterface().getCoordCentreCarte(); } else { coords = getGestionnaireInterface().navigateurCarteOL.recupereCoordonnees(); } strContenuFichier += " <carte\n" + " affiche=\"oui\" \n" + " largeur=\"" + getGestionnaireInterface().getLargeurCarte() + "\"\n" + " hauteur=\"" + getGestionnaireInterface().getHauteurCarte() + "\"\n" + " zoom=\"" + (getGestionnaireInterface().getiFacteurZoomCarte() + 1) + "\"\n" + " coordCentreLong=\"" + coords.getLongitude() + "\"\n" + " coordCentreLat=\"" + coords.getLatitude() + "\"\n" + " nomLayer=\"" + getGestionnaireInterface().getStrNomLayers() + "\"\n" + " position=\"" + getGestionnaireInterface().getStrPositionCarte() + "\"\n" + " carteCalque=\"" + getGestionnaireInterface().getiCalqueCarte() + "\"\n" + " bingAPIKey=\"" + getStrBingAPIKey() + "\"\n" + " couleurFond=\"" + strCoulFond + "\"\n" + " couleurTexte=\"#" + getGestionnaireInterface().getStrCouleurTexteCarte() + "\"\n" + " radarCarteAffiche=\"" + strAfficheRadarCarte + "\"\n" + " radarCarteTaille=\"" + Math.round(getGestionnaireInterface().getTailleRadarCarte()) + "\"\n" + " radarCarteCouleurFond=\"#" + getGestionnaireInterface().getStrCouleurFondRadarCarte() + "\"\n" + " radarCarteCouleurLigne=\"#" + getGestionnaireInterface().getStrCouleurLigneRadarCarte() + "\"\n" + " radarCarteOpacite=\"" + Math.round(getGestionnaireInterface().getOpaciteRadarCarte() * 100.d) / 100.d + "\"\n" + " >\n"; for (int iPoint2 = 0; iPoint2 < getiNombrePanoramiques(); iPoint2++) { if (getPanoramiquesProjet()[iPoint2].getMarqueurGeolocatisation() != null) { double posX = getPanoramiquesProjet()[iPoint2].getMarqueurGeolocatisation() .getLongitude(); double posY = getPanoramiquesProjet()[iPoint2].getMarqueurGeolocatisation() .getLatitude(); String strFichierPano2 = getPanoramiquesProjet()[iPoint2].getStrNomFichier() .substring( getPanoramiquesProjet()[iPoint2].getStrNomFichier() .lastIndexOf(File.separator) + 1, getPanoramiquesProjet()[iPoint2].getStrNomFichier().length()) .split("\\.")[0]; String strHTML = "<span style='font-family : Verdana,Arial,sans-serif;font-weight:bold;font-size : 12px;'>" + getPanoramiquesProjet()[iPoint2].getStrTitrePanoramique() + "</span>"; strHTML = strHTML.replace("<", "<").replace(">", ">"); String strFichierXML = "panovisu" + iPoint2; if (iPoint2 == i) { strContenuFichier += " <pointCarte\n" + " positX=\"" + posX + "\"\n" + " positY=\"" + posY + "\"\n" + " xml=\"actif\"\n" + " image=\"panos/" + strFichierXML + "Vignette.jpg\"\n" + " html=\"" + strHTML + "\"\n" + " /> \n"; } else { strContenuFichier += " <pointCarte\n" + " positX=\"" + posX + "\"\n" + " positY=\"" + posY + "\"\n" + " xml=\"xml/" + strFichierXML + ".xml\"\n" + " image=\"panos/" + strFichierXML + "Vignette.jpg\"\n" + " html=\"" + strHTML + "\"\n" + " /> \n"; } } } strContenuFichier += " </carte>\n"; } strContenuFichier += "</scene>\n"; String strFichPano = getPanoramiquesProjet()[i].getStrNomFichier(); String strNomXMLFile = "panovisu" + i + ".xml"; fileXML = new File(fileXMLRepert + File.separator + strNomXMLFile); fileXML.setWritable(true); OutputStreamWriter oswFichierXML = new OutputStreamWriter(new FileOutputStream(fileXML), "UTF-8"); try (BufferedWriter bwFichierXML = new BufferedWriter(oswFichierXML)) { bwFichierXML.write(strContenuFichier); } } Rectangle2D tailleEcran = Screen.getPrimary().getBounds(); int iHauteur = (int) tailleEcran.getHeight() - 200; String strTitreVis = "Panovisu - visualiseur 100% html5 (three.js)"; TextField tfVisite = (TextField) getVbChoixPanoramique().lookup("#titreVisite"); if (!tfVisite.getText().equals("")) { strTitreVis = tfVisite.getText(); } String strNomPano1 = getPanoramiquesProjet()[0].getStrNomFichier(); String strFPano1 = "panos/" + strNomPano1.substring(strNomPano1.lastIndexOf(File.separator) + 1, strNomPano1.lastIndexOf(".")) + "Vignette.jpg"; String strFichierHTML = "<!DOCTYPE html>\n" + "<html lang=\"fr\">\n" + " <head>\n" + " <title>" + strTitreVis + "</title>\n" + " <meta charset=\"utf-8\">\n" + " <meta name=\"viewport\" content=\"width=device-width, user-scalable=no, minimum-scale=1.0, maximum-scale=1.0\">\n" + " <link rel=\"stylesheet\" media=\"screen\" href=\"panovisu/libs/jquerymenu/jquery.contextMenu.css\" type=\"text/css\"/>\n" + " <link rel=\"stylesheet\" type=\"text/css\" href=\"panovisu/css/msdropdown/dd.css\" />\n" + " <meta name=\"url\" property=\"og:url\" content=\"\" />\n" + " <meta property=\"og:title\" name=\"twitter:title\" content=\"" + strTitreVis + "\" />\n" + " <meta itemprop=\"description\" property=\"og:description\" name=\"twitter:description\" content=\"Une page cre avec panoVisu Editeur : 100% Libre 100% HTML5\" />\n" + " <meta name=\"img\" property=\"og:image\" itemprop=\"image primaryImageOfPage\" content=\"./" + strFPano1 + "\" />\n" + " <script type=\"text/javascript\" src=\"panovisu/libs/openlayers/OpenLayers.js\"></script>\n" + " <script type=\"text/javascript\" src=\"panovisu/libs/openlayers/OpenStreetMap.js\"></script>\n" + " <script src=\"http://maps.google.com/maps/api/js?v=3.5&sensor=false\" style=\"\"></script>\n" + " <script src=\"http://maps.gstatic.com/maps-api-v3/api/js/20/13/intl/fr_ALL/main.js\"></script>\n" + " <style>\n" + " .olControlLayerSwitcher\n" + " {\n" + " font-family: Verdana,Arial,sans-serif!important;\n" + " margin-top: 3px;\n" + " margin-left: 3px;\n" + " margin-bottom: 3px;\n" + " font-size: 10pt!important;\n" + " color: white;\n" + " background-color: transparent;\n" + " z-index: 10000;\n" + " background-color: #999!important;\n" + " color : #ff0!important;\n" + " max-width: 180px!important;\n" + " opacity: 0.95!important;\n" + " }\n" + " .olControlLayerSwitcher .layersDiv\n" + " {\n" + " padding-top: 5px;\n" + " padding-left: 10px;\n" + " padding-bottom: 5px;\n" + " padding-right: 10px;\n" + " background-color: #aaa!important;\n" + " color : #fff!important;\n" + " font-family: Verdana,Arial,sans-serif!important;\n" + " font-size: 10pt!important;\n" + " font-weight: normal!important;\n" + " max-width: 180px!important;\n" + " overflow: hidden!important;\n" + " opacity: 0.95!important;\n" + " } \n" + "\n" + " #infoBulle {\n" + " background: " + getGestionnaireInterface().strCouleurFondInfoBulle + ";\n" + " border-top: " + getGestionnaireInterface().iTailleBordureTop + "px solid " + getGestionnaireInterface().strCouleurBordureInfoBulle + ";\n" + " border-bottom: " + getGestionnaireInterface().iTailleBordureBottom + "px solid " + getGestionnaireInterface().strCouleurBordureInfoBulle + ";\n" + " border-left: " + getGestionnaireInterface().iTailleBordureLeft + "px solid " + getGestionnaireInterface().strCouleurBordureInfoBulle + ";\n" + " border-right: " + getGestionnaireInterface().iTailleBordureRight + "px solid " + getGestionnaireInterface().strCouleurBordureInfoBulle + ";\n" + " padding: 3px 10px;\n" + " opacity: " + Math.round(getGestionnaireInterface().opaciteInfoBulle * 10) / 10.0 + ";\n" + " color : " + getGestionnaireInterface().strCouleurTexteInfoBulle + ";\n" + " font-family: " + getGestionnaireInterface().strPoliceInfoBulle + ",Arial,sans-serif!important; \n" + " border-radius: " + getGestionnaireInterface().iArrondiTL + "px " + getGestionnaireInterface().iArrondiTR + "px " + getGestionnaireInterface().iArrondiBR + "px " + getGestionnaireInterface().iArrondiBL + "px; \n"; if (getGestionnaireInterface().bOmbreInfoBulle) { strFichierHTML += " box-shadow: 5px 5px 10px #444;\n"; } strFichierHTML += " font-size : " + getGestionnaireInterface().taillePoliceInfoBulle + "px; \n" + " z-index : 10000000;\n" + " } \n" + "\n" + " </style>\n" + "" + " </head>\n" + " <body style='background-color:#777; margin-top: 8px; margin-bottom: 2px;overflow: hidden;'>\n" + " <header>\n" + "\n" + " </header>\n" + " <article style=\"height : " + iHauteur + "px;\">\n" + " <div style='background-color : #777' id=\"pano\">\n" + " </div>\n" + " </article>\n" + " <script src=\"panovisu/panovisuInit.js\"></script>\n" + " <script src=\"panovisu/panovisu.js\"></script>\n" + " <script>\n" + "\n" + " $(function() {\n" + " $('meta[name=img]').attr('content', document.location.href+\"" + strFPano1 + "\");\n" + " $('meta[name=url]').attr('content', document.location.href);\n" + " $(window).resize(function(){\n" + " $(\"article\").height($(window).height()-17);\n" + " $(\"#pano\").height($(window).height()-17);\n" + " })\n" + " $(\"article\").height($(window).height()-17);\n" + " $(\"#pano\").height($(window).height()-17);\n" + " ajoutePano({\n" + " langue : \"" + getLocale().toString() + "\",\n" + " panoramique: \"pano\",\n" + " minFOV: " + (navigateurPanoramique.getMinFov() * 2) + ",\n" + " maxFOV: " + (navigateurPanoramique.getMaxFov() * 2) + ",\n" + " fenX: \"100%\",\n" + " fenY: \"100%\",\n" + " xml: \"xml/PANO.xml\"\n" + " });\n" + " $(\".reseauSocial-twitter\").on(\"click\", function() {\n" + " window.open(\n" + " \"https://twitter.com/share?url=\" + document.location.href\n" + " );\n" + " return false;\n" + " });\n" + " $(\".reseauSocial-fb\").on(\"click\", function() {\n" + " url=\"http://www.facebook.com/sharer.php?s=100&p[url]=\" + encodeURIComponent(document.location.href)\n" + " + \"&p[images][0]=\" + encodeURIComponent(document.location.href + \"" + strFPano1 + "\")\n" + " + \"&p[title]=\" + encodeURIComponent(\"" + strTitreVis + "\")\n" + " + \"&p[summary]=\" + encodeURIComponent(\"Une page cre avec panoVisu Editeur : 100% Libre 100% HTML5\");\n" + " window.open(url);\n" + " return false;\n" + " });\n" + " $(\".reseauSocial-google\").on(\"click\", function() {\n" + " window.open(\n" + " \"https://plus.google.com/share?url=\" + document.location.href + \"&hl=fr\"\n" + " );\n" + " return false;\n" + " });\n" + " $(\".reseauSocial-email\").attr(\"href\",\"mailto:?body=\" + document.location.href + \"&hl=fr\");\n" + " });\n" + " </script>\n" + " </body>\n" + "</html>\n"; int i = Integer.parseInt(ordPano.getStrPanos().get(0)); strFichierHTML = strFichierHTML.replace("PANO", "panovisu" + i); File fileIndexHTML = new File(getStrRepertTemp() + File.separator + "index.html"); fileIndexHTML.setWritable(true); OutputStreamWriter oswFichierHTML = new OutputStreamWriter(new FileOutputStream(fileIndexHTML), "UTF-8"); try (BufferedWriter bwFichierHTML = new BufferedWriter(oswFichierHTML)) { bwFichierHTML.write(strFichierHTML); } DirectoryChooser dcRepertChoix = new DirectoryChooser(); dcRepertChoix.setTitle("Choix du repertoire de sauvegarde de la visite"); File fileRepert = new File(EditeurPanovisu.getStrRepertoireProjet()); dcRepertChoix.setInitialDirectory(fileRepert); File fileRepertVisite = dcRepertChoix.showDialog(null); if (fileRepertVisite != null) { String strNomRepertVisite = fileRepertVisite.getAbsolutePath(); copieRepertoire(getStrRepertTemp(), strNomRepertVisite); Alert alert = new Alert(AlertType.INFORMATION); alert.setHeaderText(null); alert.setTitle(rbLocalisation.getString("main.dialog.generationVisite")); alert.setContentText( rbLocalisation.getString("main.dialog.generationVisiteMessage") + strNomRepertVisite); alert.showAndWait(); Application app = new Application() { @Override public void start(Stage stage) { } }; app.getHostServices().showDocument(strNomRepertVisite + File.separator + "index.html"); } } else { Alert alert = new Alert(AlertType.ERROR); alert.setTitle(rbLocalisation.getString("main.dialog.generationVisite")); alert.setHeaderText(null); alert.setContentText(rbLocalisation.getString("main.dialog.generationVisiteMessageErreur")); alert.showAndWait(); } } /** * * /** * * @param strFichierImage fichier image charger * @param strRepertoire rpertoire de sauvegarde * @param iNumPanoXML numro pour la gnration des fichiers * "panovisu"+iNumPanoXML+".jpg" * @param strNomFichierSauvegarde nom du fichier de sauvegarde * @param iNumero numro d'ordre du pano dans la liste charger * @param iTotal nombre de panos charger * @return nombre de niveaux */ private static int iCreeNiveauxImageEqui(String strFichierImage, String strNomFichierSauvegarde, String strRepertoire, int iNumPanoXML, int iNumero, int iTotal) { Platform.runLater(() -> { lblNiveaux.setText("Cration niveau principal"); }); double tailleNiv0 = 512.d; String strExtension = strFichierImage.substring(strFichierImage.length() - 3, strFichierImage.length()); Image imgPano = null; if (strExtension.equals("tif")) { try { imgPano = ReadWriteImage.readTiff(strFichierImage); if (imgPano.getWidth() > 8192) { imgPano = ReadWriteImage.resizeImage(imgPano, 8192, 4096); } } catch (ImageReadException | IOException ex) { Logger.getLogger(EditeurPanovisu.class.getName()).log(Level.SEVERE, null, ex); } } else { imgPano = new Image("file:" + strFichierImage); if (imgPano.getWidth() > 8192) { imgPano = new Image("file:" + strFichierImage, 8192, 4096, true, true); } } String strNomPano = strNomFichierSauvegarde .substring(strNomFichierSauvegarde.lastIndexOf(File.separator) + 1, strNomFichierSauvegarde.length()) .split("\\.")[0] + ".jpg"; String strFicImage = strRepertoire + File.separator + "panovisu" + iNumPanoXML + ".jpg"; try { ReadWriteImage.writeJpeg(imgPano, strFicImage, 0.95f, true, 0.25f); } catch (IOException ex) { Logger.getLogger(EditeurPanovisu.class.getName()).log(Level.SEVERE, null, ex); } int iNombreNiveaux = 0; if (imgPano != null) { double tailleImage = imgPano.getWidth(); strFichierImage = strFicImage; iNombreNiveaux = (int) (Math.log(tailleImage / tailleNiv0) / Math.log(2.d)) + 1; int iNbNiv = iNombreNiveaux; for (int i = 0; i < iNombreNiveaux; i++) { int ii = i; int iNombreNiv2 = iNombreNiveaux; Platform.runLater(() -> { lblNiveaux.setText("Cration niveau " + ii + "/" + (iNbNiv - 1)); pbarAvanceChargement.setProgress( ((double) (iNumero - 1) + 1.d / 3.d + 1.d / 3.d * ((double) ii) / iNombreNiv2) / (double) iTotal); }); try { double tailleNiveau = tailleImage * Math.pow(2.d, i) / Math.pow(2.d, iNombreNiveaux); if (strExtension.equals("tif")) { try { imgPano = ReadWriteImage.readTiff(strFichierImage); imgPano = ReadWriteImage.resizeImage(imgPano, (int) tailleNiveau, (int) tailleNiveau / 2); } catch (ImageReadException ex) { Logger.getLogger(EditeurPanovisu.class.getName()).log(Level.SEVERE, null, ex); } } else { imgPano = new Image("file:" + strFichierImage, Math.round(tailleNiveau * 2.d) / 2.d, Math.round(tailleNiveau / 2.d), true, true); } String strRepNiveau = strRepertoire + File.separator + "niveau" + i; File fileRepert = new File(strRepNiveau); if (!fileRepert.exists()) { fileRepert.mkdirs(); } strNomPano = strNomFichierSauvegarde.substring( strNomFichierSauvegarde.lastIndexOf(File.separator) + 1, strNomFichierSauvegarde.length()); strNomPano = strNomPano .substring(strNomPano.lastIndexOf(File.separator) + 1, strNomPano.length()) .split("\\.")[0] + ".jpg"; strFicImage = strRepNiveau + File.separator + "panovisu" + iNumPanoXML + ".jpg"; if (i < iNombreNiveaux - 1) { ReadWriteImage.writeJpeg(imgPano, strFicImage, 0.7f, true, 0.1f); } else { ReadWriteImage.writeJpeg(imgPano, strFicImage, 0.95f, true, 0.25f); } } catch (IOException ex) { Logger.getLogger(EditeurPanovisu.class.getName()).log(Level.SEVERE, null, ex); } } } return iNombreNiveaux; } /** * * @param strFichierImage fichier image charger * @param strRepertoire rpertoire de sauvegarde * @param iNumPanoXML numro pour la gnration des fichiers * @param strFace face calcule * @return */ private static int iCreeNiveauxImageCube(String strFichierImage, String strRepertoire, int iNumPanoXML, String strFace) { Platform.runLater(() -> { lblNiveaux.setText("Cration face : " + strFace + " niveau principal"); }); String strSuffixe = ""; switch (strFace) { case "dessus": strSuffixe = "_u"; break; case "dessous": strSuffixe = "_d"; break; case "droite": strSuffixe = "_r"; break; case "gauche": strSuffixe = "_l"; break; case "devant": strSuffixe = "_f"; break; case "derriere": strSuffixe = "_b"; break; } double tailleNiv0 = 256.d; String strExtension = strFichierImage.substring(strFichierImage.length() - 3, strFichierImage.length()); Image imgPano = null; if (strExtension.equals("tif")) { try { imgPano = ReadWriteImage.readTiff(strFichierImage); if (imgPano.getWidth() > 4096) { imgPano = ReadWriteImage.resizeImage(imgPano, 4096, 4096); } } catch (ImageReadException | IOException ex) { Logger.getLogger(EditeurPanovisu.class.getName()).log(Level.SEVERE, null, ex); } } else { imgPano = new Image("file:" + strFichierImage); if (imgPano.getWidth() > 4096) { imgPano = new Image("file:" + strFichierImage, 4096, 4096, true, true); } } String strNomPano = strFichierImage.substring(strFichierImage.lastIndexOf(File.separator) + 1, strFichierImage.length()); String strFicImage = strRepertoire + File.separator + "panovisu" + iNumPanoXML + strSuffixe + ".jpg"; try { ReadWriteImage.writeJpeg(imgPano, strFicImage, 0.85f, true, 0.3f); } catch (IOException ex) { Logger.getLogger(EditeurPanovisu.class.getName()).log(Level.SEVERE, null, ex); } int iNombreNiveaux = 0; if (imgPano != null) { double tailleImage = imgPano.getWidth(); iNombreNiveaux = (int) (Math.log(tailleImage / tailleNiv0) / Math.log(2.d)) + 1; int nbNiv = iNombreNiveaux; for (int i = 0; i < iNombreNiveaux; i++) { try { int ii = i; Platform.runLater(() -> { lblNiveaux.setText("Cration face : " + strFace + " niveau " + ii + "/" + (nbNiv - 1)); }); double tailleNiveau = tailleImage * Math.pow(2.d, i) / Math.pow(2.d, iNombreNiveaux); if (strExtension.equals("tif")) { try { imgPano = ReadWriteImage.readTiff(strFichierImage); imgPano = ReadWriteImage.resizeImage(imgPano, (int) tailleNiveau, (int) tailleNiveau); } catch (ImageReadException ex) { Logger.getLogger(EditeurPanovisu.class.getName()).log(Level.SEVERE, null, ex); } } else { imgPano = new Image("file:" + strFichierImage, tailleNiveau, tailleNiveau, true, true); } String strRepNiveau = strRepertoire + File.separator + "niveau" + i; File fileRepert = new File(strRepNiveau); if (!fileRepert.exists()) { fileRepert.mkdirs(); } strNomPano = strFichierImage.substring(strFichierImage.lastIndexOf(File.separator) + 1, strFichierImage.length()); strFicImage = strRepNiveau + File.separator + "panovisu" + iNumPanoXML + strSuffixe + ".jpg"; ReadWriteImage.writeJpeg(imgPano, strFicImage, 0.7f, true, 0.1f); } catch (IOException ex) { Logger.getLogger(EditeurPanovisu.class.getName()).log(Level.SEVERE, null, ex); } } } return iNombreNiveaux; } /** * * @throws InterruptedException Exception interruption */ private static void panoramiquesAjouter() throws InterruptedException { FileChooser fileChooser = new FileChooser(); FileChooser.ExtensionFilter extFilterImage = new FileChooser.ExtensionFilter( "Fichiers Image (JPG,BMP,TIFF)", "*.jpg", "*.bmp", "*.tif"); FileChooser.ExtensionFilter extFilterJpeg = new FileChooser.ExtensionFilter("Fichiers JPEG (*.jpg)", "*.jpg"); FileChooser.ExtensionFilter extFilterBmp = new FileChooser.ExtensionFilter("Fichiers BMP (*.bmp)", "*.bmp"); FileChooser.ExtensionFilter extFilterTiff = new FileChooser.ExtensionFilter("Fichiers TIFF (*.tif)", "*.tif"); File fileRepert = new File(getStrCurrentDir() + File.separator); fileChooser.setInitialDirectory(fileRepert); fileChooser.getExtensionFilters().addAll(extFilterJpeg, extFilterTiff, extFilterBmp, extFilterImage); List<File> listFichiers = fileChooser.showOpenMultipleDialog(null); if (listFichiers != null) { getApAttends().setVisible(true); mbarPrincipal.setDisable(true); bbarPrincipal.setDisable(true); hbBarreBouton.setDisable(true); pbarAvanceChargement.setProgress(-1); tpEnvironnement.setDisable(true); int i = 0; File[] fileLstFich1 = new File[listFichiers.size()]; String[] typeFich1 = new String[listFichiers.size()]; for (File fileFichier : listFichiers) { fileLstFich1[i] = fileFichier; i++; } int iNb = i; lblDragDrop.setVisible(false); Task taskTraitementChargeFichiers; taskTraitementChargeFichiers = tskChargeListeFichiers(fileLstFich1, iNb); Thread thrChargeFichiers = new Thread(taskTraitementChargeFichiers); thrChargeFichiers.setDaemon(true); thrChargeFichiers.start(); } } /** * * @param listFichiers liste des fichiers charger * @param iNb nombre de fichiers charger * @return Task */ public static Task tskChargeListeFichiers(final File[] listFichiers, int iNb) { return new Task() { @Override protected Object call() throws Exception { int i = 0; File[] fileLstFich1 = new File[listFichiers.length]; String[] strTypeFich1 = new String[listFichiers.length]; for (int jj = 0; jj < iNb; jj++) { File fileFichier = listFichiers[jj]; String strNomfich = fileFichier.getAbsolutePath(); String strExtension = strNomfich.substring(strNomfich.lastIndexOf(".") + 1, strNomfich.length()) .toLowerCase(); if (strExtension.equals("jpg") || strExtension.equals("bmp") || strExtension.equals("tif")) { Image imgPano = null; if (strExtension.equals("tif")) { try { imgPano = ReadWriteImage.readTiff(fileFichier.getAbsolutePath()); } catch (ImageReadException | IOException ex) { Logger.getLogger(EditeurPanovisu.class.getName()).log(Level.SEVERE, null, ex); } } else { imgPano = new Image("file:" + fileFichier.getAbsolutePath()); } strTypeFich1[i] = ""; if (imgPano != null) { if (imgPano.getWidth() == 2 * imgPano.getHeight()) { fileLstFich1[i] = fileFichier; strTypeFich1[i] = Panoramique.SPHERE; i++; } if (imgPano.getWidth() == imgPano.getHeight()) { String strNom = fileFichier.getAbsolutePath().substring(0, fileFichier.getAbsolutePath().length() - 6); boolean bTrouveFichier = false; for (int j = 0; j < i; j++) { String strNom1 = ""; if (fileLstFich1[j].getAbsolutePath().length() == fileFichier.getAbsolutePath() .length()) { strNom1 = fileLstFich1[j].getAbsolutePath().substring(0, fileFichier.getAbsolutePath().length() - 6); } if (strNom.equals(strNom1)) { bTrouveFichier = true; } } if (!bTrouveFichier) { fileLstFich1[i] = fileFichier; strTypeFich1[i] = Panoramique.CUBE; i++; } } } } } File[] fileLstFich = new File[i]; System.arraycopy(fileLstFich1, 0, fileLstFich, 0, i); for (int ii = 0; ii < fileLstFich.length; ii++) { File fileFichier1 = fileLstFich[ii]; int iNumP = ii + 1; Platform.runLater(() -> { lblCharge.setText( "pano " + iNumP + "/" + fileLstFich.length + " : " + fileFichier1.getPath()); lblNiveaux.setText(""); pbarAvanceChargement.setProgress((double) (iNumP - 1) / (double) fileLstFich.length); }); setbDejaSauve(false); mniSauveProjet.setDisable(false); setStrCurrentDir(fileFichier1.getParent()); File fileImageRepert = new File(getStrRepertTemp() + File.separator + "panos"); if (!fileImageRepert.exists()) { fileImageRepert.mkdirs(); } setStrRepertPanos(fileImageRepert.getAbsolutePath()); ajoutePanoramiqueProjet(fileFichier1.getPath(), strTypeFich1[ii], iNumP, fileLstFich.length); } return true; } @Override protected void succeeded() { getStPrincipal().setTitle(getStPrincipal().getTitle().replace(" *", "") + " *"); super.succeeded(); cbListeChoixPanoramique.getItems().clear(); apVignettesPano.getChildren().clear(); for (int i = 0; i < getiNombrePanoramiques(); i++) { String strFichierPano = getPanoramiquesProjet()[i].getStrNomFichier(); String strNomPano = strFichierPano.substring(strFichierPano.lastIndexOf(File.separator) + 1, strFichierPano.length()); cbListeChoixPanoramique.getItems().add(strNomPano); String strExtension = getPanoramiquesProjet()[i].getStrNomFichier().substring( getPanoramiquesProjet()[i].getStrNomFichier().length() - 3, getPanoramiquesProjet()[i].getStrNomFichier().length()); ImageView ivVignettePano = new ImageView( getPanoramiquesProjet()[i].getImgVignettePanoramique()); ivVignettePano.setPreserveRatio(true); ivVignettePano.setFitWidth(iLargeurVignettes); ivVignettePano.setLayoutX(5); ivVignettePano.setLayoutY((iLargeurVignettes / 2 + 10) * i + 10); ivVignettePano.setCursor(Cursor.HAND); int iNumero = i; ivVignettePano.setOnMouseClicked((e) -> { affichePanoChoisit(iNumero); }); ivVignettePano.setOnMouseDragEntered((e) -> { ivVignettePano.setLayoutX(3); ivVignettePano.setStyle("-fx-border-color : #fff;" + "-fx-border-width : 2px;" + "-fx-border-style :solid;"); }); ivVignettePano.setOnMouseDragExited((e) -> { ivVignettePano.setLayoutX(5); ivVignettePano.setStyle("-fx-border-color : rgba(0,0,0,0);" + "-fx-border-width : 0px;" + "-fx-border-style :none;"); }); apVignettesPano.getChildren().add(ivVignettePano); } apVignettesPano.getChildren().add(rectVignettePano); getVbChoixPanoramique().setVisible(true); ivImagePanoramique.setImage(getPanoramiquesProjet()[getiPanoActuel()].getImgPanoramique()); ivImagePanoramique.setSmooth(true); retireAffichageLigne(); dejaCharge = false; retireAffichageHotSpots(); retireAffichagePointsHotSpots(); setiNumPoints(0); ajouteAffichageLignes(); cbListeChoixPanoramique.setValue(cbListeChoixPanoramique.getItems().get(getiPanoActuel())); affichePoV(getPanoramiquesProjet()[getiPanoActuel()].getRegardX(), getPanoramiquesProjet()[getiPanoActuel()].getRegardY(), getPanoramiquesProjet()[getiPanoActuel()].getChampVisuel()); afficheNord(getPanoramiquesProjet()[getiPanoActuel()].getZeroNord()); installeEvenements(); ivVisiteGenere.setOpacity(1.0); ivVisiteGenere.setDisable(false); getGestionnaireInterface().rafraichit(); affichePanoChoisit(getiPanoActuel()); bPanoCharge = true; cbListeChoixPanoramique.setValue(cbListeChoixPanoramique.getItems().get(getiPanoActuel())); getApAttends().setVisible(false); mbarPrincipal.setDisable(false); bbarPrincipal.setDisable(false); hbBarreBouton.setDisable(false); tpEnvironnement.setDisable(false); ordPano.ajouteNouveauxPanos(); apListePanoTriable = ordPano.getApListePanoramiques(); apListePanoTriable.setMaxHeight(apListePanoTriable.getPrefHeight()); apListePanoTriable.setMinHeight(apListePanoTriable.getPrefHeight()); apListePanoTriable.setVisible(true); apParametresVisite.getChildren().remove(apListePanoTriable); apParametresVisite.getChildren().add(apListePanoTriable); apListePanoTriable.setLayoutX(40); apListePanoTriable.setLayoutY(130); apParametresVisite.setPrefHeight(120 + apListePanoTriable.getPrefHeight() + 20); if (apParametresVisite.isVisible()) { apParametresVisite.setMinHeight(120 + apListePanoTriable.getPrefHeight() + 20); apParametresVisite.setMaxHeight(120 + apListePanoTriable.getPrefHeight() + 20); } rafraichitListePano(); } }; } /** * */ private static void planAjouter() { FileChooser fileChooser = new FileChooser(); FileChooser.ExtensionFilter extFilterJpeg = new FileChooser.ExtensionFilter("Fichiers JPEG (*.jpg)", "*.jpg"); FileChooser.ExtensionFilter extFilterBmp = new FileChooser.ExtensionFilter("Fichiers BMP (*.bmp)", "*.bmp"); FileChooser.ExtensionFilter extFilterPng = new FileChooser.ExtensionFilter("Fichiers PNG (*.png)", "*.png"); File repert = new File(getStrCurrentDir() + File.separator); fileChooser.setInitialDirectory(repert); fileChooser.getExtensionFilters().addAll(extFilterJpeg, extFilterPng, extFilterBmp); File fileFichierPlan = fileChooser.showOpenDialog(null); if (fileFichierPlan != null) { getPlans()[getiNombrePlans()] = new Plan(); getPlans()[getiNombrePlans()].setStrImagePlan(fileFichierPlan.getName()); getPlans()[getiNombrePlans()].setStrLienPlan(fileFichierPlan.getAbsolutePath()); File fileRepertoirePlan = new File(getStrRepertTemp() + File.separator + "images"); if (!fileRepertoirePlan.exists()) { fileRepertoirePlan.mkdirs(); } try { copieFichierRepertoire(fileFichierPlan.getAbsolutePath(), fileRepertoirePlan.getAbsolutePath()); } catch (IOException ex) { Logger.getLogger(EditeurPanovisu.class.getName()).log(Level.SEVERE, null, ex); } getGestionnairePlan().ajouterPlan(); setiNombrePlans(getiNombrePlans() + 1); } } /** * */ private static void clickBtnValidePano() { TextField tfTitrePano = (TextField) getScnPrincipale().lookup("#txttitrepano"); if (tfTitrePano != null) { getPanoramiquesProjet()[getiPanoActuel()].setStrTitrePanoramique(tfTitrePano.getText()); Label lblTitre = (Label) apParametresVisite.lookup("#lvTitre" + iPanoActuel); if (lblTitre != null) { lblTitre.setText(tfTitrePano.getText().toUpperCase()); } for (int i = 0; i < ordPano.getCellulesPanoramiques().size(); i++) { if (ordPano.getCellulesPanoramiques().get(i).getiNumPano() == iPanoActuel) { ordPano.getCellulesPanoramiques().get(i).setStrTitrePanoramique(tfTitrePano.getText()); } } } } /** * * @throws IOException Exception d'entre sortie * @throws InterruptedException Exception interruption */ private static void projetCharge() throws IOException, InterruptedException { if (!bRepertSauveChoisi) { setStrRepertoireProjet(getStrCurrentDir()); } ButtonType reponse = null; ButtonType buttonTypeOui = new ButtonType(rbLocalisation.getString("main.oui")); ButtonType buttonTypeNon = new ButtonType(rbLocalisation.getString("main.non")); ButtonType buttonTypeAnnule = new ButtonType(rbLocalisation.getString("main.annuler")); if (!isbDejaSauve()) { Alert alert = new Alert(AlertType.CONFIRMATION); alert.setHeaderText(null); alert.setTitle(rbLocalisation.getString("main.dialog.chargeProjet")); alert.setContentText(rbLocalisation.getString("main.dialog.chargeProjetMessage")); alert.getButtonTypes().clear(); alert.getButtonTypes().setAll(buttonTypeOui, buttonTypeNon, buttonTypeAnnule); Optional<ButtonType> actReponse = alert.showAndWait(); reponse = actReponse.get(); } if (reponse == buttonTypeOui) { try { projetSauve(); } catch (IOException ex) { Logger.getLogger(EditeurPanovisu.class.getName()).log(Level.SEVERE, null, ex); } } if ((reponse == buttonTypeOui) || (reponse == buttonTypeNon) || (reponse == null)) { panePanoramique.getChildren().clear(); panePanoramique.getChildren().add(ivImagePanoramique); getApAttends().setVisible(true); mbarPrincipal.setDisable(true); bbarPrincipal.setDisable(true); hbBarreBouton.setDisable(true); tpEnvironnement.setDisable(true); setbDejaSauve(true); FileChooser fcRepertChoix = new FileChooser(); FileChooser.ExtensionFilter extFilter = new FileChooser.ExtensionFilter("fichier panoVisu (*.pvu)", "*.pvu"); fcRepertChoix.getExtensionFilters().add(extFilter); File fileRepert = new File(getStrRepertoireProjet() + File.separator); fcRepertChoix.setInitialDirectory(fileRepert); fileProjet = null; fileProjet = fcRepertChoix.showOpenDialog(getStPrincipal()); if (fileProjet != null) { getStPrincipal().setTitle( "Panovisu v" + strNumVersion.split("-")[0] + " : " + fileProjet.getAbsolutePath()); lblDragDrop.setVisible(false); setStrRepertoireProjet(fileProjet.getParent()); ajouteFichierHisto(fileProjet.getAbsolutePath()); bRepertSauveChoisi = true; deleteDirectory(getStrRepertTemp()); String strRepertPanovisu = getStrRepertTemp() + File.separator + "panovisu"; File fileRptPanovisu = new File(strRepertPanovisu); fileRptPanovisu.mkdirs(); copieRepertoire(getStrRepertAppli() + File.separator + "panovisu", strRepertPanovisu); mnuPanoramique.setDisable(false); btnMnuPanoramique.setDisable(false); ivAjouterPano.setDisable(false); ivAjouterPano.setOpacity(1.0); ivSauveProjet.setDisable(false); ivSauveProjet.setOpacity(1.0); ivVisiteGenere.setDisable(false); ivVisiteGenere.setOpacity(1.0); getVbChoixPanoramique().setVisible(false); mniSauveProjet.setDisable(false); mniSauveSousProjet.setDisable(false); mniVisiteGenere.setDisable(false); setiNumPoints(0); setiNumImages(0); setiNombreDiapo(0); diaporamas = new Diaporama[100]; setiNumHTML(0); ivImagePanoramique.setImage(null); cbListeChoixPanoramique.getItems().clear(); try { String strTexte; try (BufferedReader brFichierPVU = new BufferedReader( new InputStreamReader(new FileInputStream(fileProjet), "UTF-8"))) { strTexte = ""; String strLigneTexte; setiNombrePanoramiquesFichier(0); while ((strLigneTexte = brFichierPVU.readLine()) != null) { if (strLigneTexte.contains("Panoramique=>")) { setiNombrePanoramiquesFichier(getiNombrePanoramiquesFichier() + 1); } strTexte += strLigneTexte + "\n"; } } Task taskAnalysePVU; taskAnalysePVU = tskAnalyseFichierPVU(strTexte); Thread thrAnalysePVU = new Thread(taskAnalysePVU); thrAnalysePVU.setDaemon(true); thrAnalysePVU.start(); } catch (FileNotFoundException ex) { Logger.getLogger(EditeurPanovisu.class.getName()).log(Level.SEVERE, null, ex); } } } } /** * * @param nomFich nom du fichier ajouter dans l'historique des fichiers * ouverts */ private static void ajouteFichierHisto(String nomFich) { if (nombreHistoFichiers > 10) { nombreHistoFichiers = 10; } int iTrouve = -1; for (int i = 0; i < nombreHistoFichiers; i++) { if (strHistoFichiers[i].equals(nomFich)) { iTrouve = i; } } if (iTrouve == -1) { for (int i = nombreHistoFichiers; i >= 0; i--) { if (i < 9) { strHistoFichiers[i + 1] = strHistoFichiers[i]; } } strHistoFichiers[0] = nomFich; if (nombreHistoFichiers < 10) { nombreHistoFichiers++; } } else { for (int i = iTrouve - 1; i >= 0; i--) { if (i < 9) { strHistoFichiers[i + 1] = strHistoFichiers[i]; } } strHistoFichiers[0] = nomFich; } mnuDerniersProjets.getItems().clear(); for (int i = 0; i < nombreHistoFichiers; i++) { if (strHistoFichiers[i] != null) { MenuItem mniDerniersFichiers = new MenuItem(strHistoFichiers[i]); mnuDerniersProjets.getItems().add(mniDerniersFichiers); mniDerniersFichiers.setOnAction((e) -> { MenuItem mniFichier = (MenuItem) e.getSource(); try { try { projetChargeNom(mniFichier.getText()); } catch (InterruptedException ex) { Logger.getLogger(EditeurPanovisu.class.getName()).log(Level.SEVERE, null, ex); } } catch (IOException ex) { Logger.getLogger(EditeurPanovisu.class.getName()).log(Level.SEVERE, null, ex); } }); } } } /** * * @param strNomFich nom du fichier charger * @throws IOException Exception d'entre sortie * @throws InterruptedException Exception interruption */ private static void projetChargeNom(String strNomFich) throws IOException, InterruptedException { File fileProjet1 = new File(strNomFich); if (fileProjet1.exists()) { ButtonType reponse = null; ButtonType buttonTypeOui = new ButtonType(rbLocalisation.getString("main.oui")); ButtonType buttonTypeNon = new ButtonType(rbLocalisation.getString("main.non")); ButtonType buttonTypeAnnule = new ButtonType(rbLocalisation.getString("main.annuler")); if (!isbDejaSauve()) { Alert alert = new Alert(AlertType.CONFIRMATION); alert.setTitle(rbLocalisation.getString("main.dialog.chargeProjet")); alert.setHeaderText(null); alert.setContentText(rbLocalisation.getString("main.dialog.chargeProjetMessage")); alert.getButtonTypes().clear(); alert.getButtonTypes().setAll(buttonTypeOui, buttonTypeNon, buttonTypeAnnule); Optional<ButtonType> actReponse = alert.showAndWait(); reponse = actReponse.get(); } if (reponse == buttonTypeOui) { try { projetSauve(); } catch (IOException ex) { Logger.getLogger(EditeurPanovisu.class.getName()).log(Level.SEVERE, null, ex); } } if ((reponse == buttonTypeOui) || (reponse == buttonTypeNon) || (reponse == null)) { panePanoramique.getChildren().clear(); panePanoramique.getChildren().add(ivImagePanoramique); getApAttends().setVisible(true); mbarPrincipal.setDisable(true); bbarPrincipal.setDisable(true); hbBarreBouton.setDisable(true); tpEnvironnement.setDisable(true); lblDragDrop.setVisible(false); setbDejaSauve(true); fileProjet = fileProjet1; ajouteFichierHisto(fileProjet.getAbsolutePath()); getStPrincipal().setTitle( "Panovisu v" + strNumVersion.split("-")[0] + " : " + fileProjet.getAbsolutePath()); setStrRepertoireProjet(fileProjet.getParent()); bRepertSauveChoisi = true; deleteDirectory(getStrRepertTemp()); String strRepertPanovisu = getStrRepertTemp() + File.separator + "panovisu"; File fileRptPanovisu = new File(strRepertPanovisu); fileRptPanovisu.mkdirs(); copieRepertoire(getStrRepertAppli() + File.separator + "panovisu", strRepertPanovisu); mnuPanoramique.setDisable(false); btnMnuPanoramique.setDisable(false); ivAjouterPano.setDisable(false); ivAjouterPano.setOpacity(1.0); ivSauveProjet.setDisable(false); ivSauveProjet.setOpacity(1.0); ivVisiteGenere.setDisable(false); ivVisiteGenere.setOpacity(1.0); getVbChoixPanoramique().setVisible(false); mniSauveProjet.setDisable(false); mniSauveSousProjet.setDisable(false); mniVisiteGenere.setDisable(false); setiNumPoints(0); setiNumImages(0); setiNumHTML(0); ivImagePanoramique.setImage(null); cbListeChoixPanoramique.getItems().clear(); try { String strTexte; try (BufferedReader br = new BufferedReader( new InputStreamReader(new FileInputStream(fileProjet), "UTF-8"))) { strTexte = ""; String strLigneTexte; setiNombrePanoramiquesFichier(0); while ((strLigneTexte = br.readLine()) != null) { if (strLigneTexte.contains("Panoramique=>")) { setiNombrePanoramiquesFichier(getiNombrePanoramiquesFichier() + 1); } strTexte += strLigneTexte + "\n"; } } Task taskAnalysePVU; taskAnalysePVU = tskAnalyseFichierPVU(strTexte); Thread thrAnalysePVU = new Thread(taskAnalysePVU); thrAnalysePVU.setDaemon(true); thrAnalysePVU.start(); } catch (FileNotFoundException ex) { Logger.getLogger(EditeurPanovisu.class.getName()).log(Level.SEVERE, null, ex); } } } } /** * * @throws IOException Exception d'entre sortie */ private static void sauveFichierProjet() throws IOException { setStrRepertoireProjet(fileProjet.getParent()); bRepertSauveChoisi = true; File fileFichierProjet = new File(fileProjet.getAbsolutePath()); if (!fileFichierProjet.exists()) { fileFichierProjet.createNewFile(); } setbDejaSauve(true); getStPrincipal() .setTitle("Panovisu v" + strNumVersion.split("-")[0] + " : " + fileProjet.getAbsolutePath()); String strContenuFichier = ""; TextField tfVisite = (TextField) getVbChoixPanoramique().lookup("#titreVisite"); if (!tfVisite.getText().equals("")) { strContenuFichier += "[titreVisite=>" + tfVisite.getText() + "]\n"; } if (!strPanoEntree.equals("")) { strContenuFichier += "[PanoEntree=>" + strPanoEntree + "]\n"; } strContenuFichier += "[introLP=>" + isbIntroPetitePlanete() + "]\n"; strContenuFichier += "[arDemarre=>" + isbAutoRotationDemarre() + "]\n"; strContenuFichier += "[arVitesse=>" + getiAutoRotationVitesse() + "]\n"; strContenuFichier += "[atDemarre=>" + isbAutoTourDemarre() + "]\n"; strContenuFichier += "[atVitesse=>" + getiAutoTourLimite() + "]\n"; strContenuFichier += "[atDemarrage=>" + getiAutoTourDemarrage() + "]\n"; strContenuFichier += "[atType=>" + getStrAutoTourType() + "]\n"; strOrdrePanos = ""; ordPano.getStrPanos().stream().forEach((strOrd) -> { strOrdrePanos += strOrd + ","; }); strOrdrePanos = strOrdrePanos.substring(0, strOrdrePanos.length() - 1); strContenuFichier += "[OrdrePanos=>" + strOrdrePanos + "]\n"; for (int i = 0; i < getiNombrePanoramiques(); i++) { strContenuFichier += "[Panoramique=>" + "fichier:" + strEncodeFichier(getPanoramiquesProjet()[i].getStrNomFichier()) + ";nb:" + getPanoramiquesProjet()[i].getNombreHotspots() + ";nbImg:" + getPanoramiquesProjet()[i].getNombreHotspotImage() + ";nbHTML:" + getPanoramiquesProjet()[i].getNombreHotspotHTML() + ";nbDiapo:" + getPanoramiquesProjet()[i].getiNombreHotspotDiapo() + ";titre:" + getPanoramiquesProjet()[i].getStrTitrePanoramique() + "" + ";type:" + getPanoramiquesProjet()[i].getStrTypePanoramique() + ";afficheInfo:" + getPanoramiquesProjet()[i].isAfficheInfo() + ";afficheTitre:" + getPanoramiquesProjet()[i].isAfficheTitre() + ";regardX:" + getPanoramiquesProjet()[i].getRegardX() + ";regardY:" + getPanoramiquesProjet()[i].getRegardY() + ";minLat:" + getPanoramiquesProjet()[i].getMinLat() + ";maxLat:" + getPanoramiquesProjet()[i].getMaxLat() + ";bMinLat:" + getPanoramiquesProjet()[i].isbMinLat() + ";bMaxLat:" + getPanoramiquesProjet()[i].isbMaxLat() + ";fov:" + (getPanoramiquesProjet()[i].getChampVisuel() * 2) + ";minfov:" + (getPanoramiquesProjet()[i].getFovMin() * 2) + ";maxfov:" + (getPanoramiquesProjet()[i].getFovMax() * 2) + ";zeroNord:" + getPanoramiquesProjet()[i].getZeroNord() + ";affichePlan:" + getPanoramiquesProjet()[i].isAffichePlan() + ";numeroPlan:" + getPanoramiquesProjet()[i].getNumeroPlan(); if (getPanoramiquesProjet()[i].getMarqueurGeolocatisation() != null) { strContenuFichier += ";longitudeGeo:" + getPanoramiquesProjet()[i].getMarqueurGeolocatisation().getLongitude() + ";latitudeGeo:" + getPanoramiquesProjet()[i].getMarqueurGeolocatisation().getLatitude(); } strContenuFichier += "]\n"; for (int j = 0; j < getPanoramiquesProjet()[i].getNombreHotspots(); j++) { HotSpot HS = getPanoramiquesProjet()[i].getHotspot(j); strContenuFichier += " [hotspot==>" + "longitude:" + HS.getLongitude() + ";latitude:" + HS.getLatitude() + ";image:" + HS.getStrFichierImage() + ";xml:" + HS.getStrFichierXML() + ";numXML:" + HS.getNumeroPano() + ";info:" + HS.getStrInfo().replace(";", "&pv").replace(":", "&dp") + ";anime:" + HS.isAnime(); if (HS.getRegardX() != 1000) { strContenuFichier += ";regardX:" + HS.getRegardX(); } if (HS.getRegardY() != 1000) { strContenuFichier += ";regardY:" + HS.getRegardY(); } if (HS.getChampVisuel() != 0) { strContenuFichier += ";champVisuel:" + (HS.getChampVisuel() * 2); } strContenuFichier += "]\n"; } for (int j = 0; j < getPanoramiquesProjet()[i].getNombreHotspotImage(); j++) { HotspotImage HS = getPanoramiquesProjet()[i].getHotspotImage(j); strContenuFichier += " [hotspotImage==>" + "longitude:" + HS.getLongitude() + ";latitude:" + HS.getLatitude() + ";image:" + HS.getStrFichierImage() + ";img:" + HS.getStrLienImg() + ";urlImg:" + HS.getStrUrlImage() + ";couleur:" + HS.getStrCouleurFond() + ";opacite:" + HS.getOpacite() + ";info:" + HS.getStrInfo().replace(";", "&pv").replace(":", "&dp") + ";anime:" + HS.isAnime() + "]\n"; } for (int j = 0; j < getPanoramiquesProjet()[i].getiNombreHotspotDiapo(); j++) { HotspotDiaporama HS = getPanoramiquesProjet()[i].getHotspotDiapo(j); strContenuFichier += " [hotspotDiapo==>" + "longitude:" + HS.getLongitude() + ";latitude:" + HS.getLatitude() + ";numDiapo:" + HS.getiNumDiapo() + ";info:" + HS.getStrInfo().replace(";", "&pv").replace(":", "&dp") + ";anime:" + HS.isbAnime() + "]\n"; } for (int j = 0; j < getPanoramiquesProjet()[i].getNombreHotspotHTML(); j++) { HotspotHTML HS = getPanoramiquesProjet()[i].getHotspotHTML(j); strContenuFichier += " [hotspotHTML==>" + "longitude:" + HS.getLongitude() + ";latitude:" + HS.getLatitude() + ";lienExterieur:" + HS.isbLienExterieur() + ";url:" + HS.getStrURLExterieure() + ";info:" + HS.getStrInfo().replace(";", "&pv").replace(":", "&dp") + ";anime:" + HS.isAnime() + ";position:" + HS.getStrPositionHTML() + ";couleur:" + HS.getStrCouleurHTML() + ";opacite:" + HS.getOpaciteHTML() + ";largeur:" + HS.getLargeurHTML() + "]\n"; } } for (int i = 0; i < getiNombreDiapo(); i++) { strContenuFichier += "[Diaporama=>" + "nom:" + diaporamas[i].getStrNomDiaporama() + ";fichier:" + diaporamas[i].getStrFichierDiaporama() + ";opacite:" + diaporamas[i].getOpaciteDiaporama() + ";nbImages:" + diaporamas[i].getiNombreImages() + ";delai:" + diaporamas[i].getDelaiDiaporama() + ";coul:" + diaporamas[i].getStrCouleurFondDiaporama() + "]\n"; for (int j = 0; j < diaporamas[i].getiNombreImages(); j++) { strContenuFichier += " [imageDiapo==>" + "fichierImage:" + diaporamas[i].getStrFichiersImage(j) + ";fichiers:" + diaporamas[i].getStrFichiers(j) + ";libelles:" + diaporamas[i].getStrLibellesImages(j).replace("\n", ""); strContenuFichier += "]\n"; } } strContenuFichier += "[Interface=>\n" + getGestionnaireInterface().strGetTemplate() + "]\n"; strContenuFichier += getGestionnairePlan().getTemplate(); for (int i = 0; i < getiNombrePanoramiques(); i++) { for (int j = 0; j < getPanoramiquesProjet()[i].getNombreHotspotHTML(); j++) { if (!panoramiquesProjet[i].getHotspotHTML(j).isbLienExterieur()) { HotspotHTML HS = getPanoramiquesProjet()[i].getHotspotHTML(j); strContenuFichier += "[pageHTML=>" + "numPano:" + i + "\n" + "numHSHTML:" + j + "\n" + "texteHTML:" + HS.getStrTexteHTML().replace("\n", "&nl").replace(":", "&dp").replace(";", "&pv") + "\n" + "numImages:" + HS.getiNombreImages() + "\n"; for (int k = 0; k < HS.getiNombreImages(); k++) { strContenuFichier += "imagePath:" + HS.getImagesEditeur()[k].getStrImagePath() + "\n"; } strContenuFichier += "]\n"; } } } fileProjet.setWritable(true); OutputStreamWriter oswFichierPVU = new OutputStreamWriter(new FileOutputStream(fileProjet), "UTF-8"); try (BufferedWriter bwFichierPVU = new BufferedWriter(oswFichierPVU)) { bwFichierPVU.write(strContenuFichier); } Alert alert = new Alert(AlertType.INFORMATION); alert.setTitle(rbLocalisation.getString("main.dialog.sauveProjet")); alert.setHeaderText(null); alert.setContentText(rbLocalisation.getString("main.dialog.sauveProjetMessage")); alert.showAndWait(); } /** * * @throws IOException Exception d'entre sortie */ private static void sauveHistoFichiers() throws IOException { File fileFichConfig = new File( EditeurPanovisu.fileRepertConfig.getAbsolutePath() + File.separator + "derniersprojets.cfg"); if (!fileFichConfig.exists()) { fileFichConfig.createNewFile(); } fileFichConfig.setWritable(true); String strContenuFichier = ""; for (int i = 0; i < nombreHistoFichiers; i++) { strContenuFichier += strHistoFichiers[i] + "\n"; } OutputStreamWriter oswFichierHisto = null; try { oswFichierHisto = new OutputStreamWriter(new FileOutputStream(fileFichConfig), "UTF-8"); } catch (IOException ex) { Logger.getLogger(ConfigDialogController.class.getName()).log(Level.SEVERE, null, ex); } BufferedWriter bwFichierHisto = new BufferedWriter(oswFichierHisto); try { bwFichierHisto.write(strContenuFichier); } catch (IOException ex) { Logger.getLogger(ConfigDialogController.class.getName()).log(Level.SEVERE, null, ex); } try { bwFichierHisto.close(); } catch (IOException ex) { Logger.getLogger(ConfigDialogController.class.getName()).log(Level.SEVERE, null, ex); } } /** * * @throws IOException Exception d'entre sortie */ private static void projetSauve() throws IOException { if (!bRepertSauveChoisi) { setStrRepertoireProjet(getStrCurrentDir()); } if (fileProjet == null) { FileChooser fcRepertChoix = new FileChooser(); FileChooser.ExtensionFilter extFilter = new FileChooser.ExtensionFilter("fichier panoVisu (*.pvu)", "*.pvu"); fcRepertChoix.getExtensionFilters().add(extFilter); File repert = new File(getStrRepertoireProjet() + File.separator); fcRepertChoix.setInitialDirectory(repert); fileProjet = fcRepertChoix.showSaveDialog(null); } if (fileProjet != null) { sauveFichierProjet(); ajouteFichierHisto(fileProjet.getAbsolutePath()); } } /** * * @throws IOException Exception d'entre sortie */ private static void projetSauveSous() throws IOException { if (!bRepertSauveChoisi) { setStrRepertoireProjet(getStrCurrentDir()); } FileChooser fcRepertChoix = new FileChooser(); FileChooser.ExtensionFilter extFilter = new FileChooser.ExtensionFilter("fichier panoVisu (*.pvu)", "*.pvu"); fcRepertChoix.getExtensionFilters().add(extFilter); File fileRepert = new File(getStrRepertoireProjet() + File.separator); fcRepertChoix.setInitialDirectory(fileRepert); fileProjet = fcRepertChoix.showSaveDialog(null); if (fileProjet != null) { sauveFichierProjet(); ajouteFichierHisto(fileProjet.getAbsolutePath()); } } /** * */ private static void aideapropos() { try { popUp.affichePopup(); } catch (Exception ex) { Logger.getLogger(EditeurPanovisu.class.getName()).log(Level.SEVERE, null, ex); } } /** * * @throws IOException Exception d'entre sortie exception */ private static void projetsFermer() throws IOException { try { sauvePreferences(); } catch (IOException ex) { Logger.getLogger(EditeurPanovisu.class.getName()).log(Level.SEVERE, null, ex); } ButtonType reponse = null; ButtonType buttonTypeOui = new ButtonType(rbLocalisation.getString("main.oui")); ButtonType buttonTypeNon = new ButtonType(rbLocalisation.getString("main.non")); ButtonType buttonTypeAnnule = new ButtonType(rbLocalisation.getString("main.annuler")); if (!isbDejaSauve()) { Alert alert = new Alert(AlertType.CONFIRMATION); alert.setTitle(rbLocalisation.getString("main.dialog.quitterApplication")); alert.setHeaderText(null); alert.setContentText(rbLocalisation.getString("main.dialog.chargeProjetMessage")); alert.getButtonTypes().clear(); alert.getButtonTypes().setAll(buttonTypeOui, buttonTypeNon, buttonTypeAnnule); Optional<ButtonType> actReponse = alert.showAndWait(); } if (reponse == buttonTypeOui) { try { projetSauve(); } catch (IOException ex) { Logger.getLogger(EditeurPanovisu.class.getName()).log(Level.SEVERE, null, ex); } } if ((reponse == buttonTypeOui) || (reponse == buttonTypeNon) || (reponse == null)) { sauveHistoFichiers(); deleteDirectory(getStrRepertTemp()); File fileTemp = new File(getStrRepertTemp()); fileTemp.delete(); Platform.exit(); } } /** * */ private static void projetsNouveau() { ButtonType reponse = null; ButtonType buttonTypeOui = new ButtonType(rbLocalisation.getString("main.oui")); ButtonType buttonTypeNon = new ButtonType(rbLocalisation.getString("main.non")); ButtonType buttonTypeAnnule = new ButtonType(rbLocalisation.getString("main.annuler")); if (!isbDejaSauve()) { Alert alert = new Alert(AlertType.CONFIRMATION); alert.setTitle(rbLocalisation.getString("main.dialog.nouveauProjet")); alert.setHeaderText(null); alert.setContentText(rbLocalisation.getString("main.dialog.chargeProjetMessage")); alert.getButtonTypes().clear(); alert.getButtonTypes().setAll(buttonTypeOui, buttonTypeNon, buttonTypeAnnule); Optional<ButtonType> actReponse = alert.showAndWait(); reponse = actReponse.get(); } if (reponse == buttonTypeOui) { try { projetSauve(); } catch (IOException ex) { Logger.getLogger(EditeurPanovisu.class.getName()).log(Level.SEVERE, null, ex); } } if ((reponse == buttonTypeOui) || (reponse == buttonTypeNon) || (reponse == null)) { apVignettesPano.getChildren().clear(); strPanoEntree = ""; deleteDirectory(getStrRepertTemp()); String strRepertPanovisu = getStrRepertTemp() + File.separator + "panovisu"; File fileRptPanovisu = new File(strRepertPanovisu); fileRptPanovisu.mkdirs(); copieRepertoire(getStrRepertAppli() + File.separator + "panovisu", strRepertPanovisu); mnuPanoramique.setDisable(false); btnMnuPanoramique.setDisable(false); ivAjouterPano.setDisable(false); ivAjouterPano.setOpacity(1.0); ivSauveProjet.setDisable(false); ivSauveProjet.setOpacity(1.0); mniSauveProjet.setDisable(false); mniSauveSousProjet.setDisable(false); mniVisiteGenere.setDisable(false); fileProjet = null; getVbChoixPanoramique().setVisible(false); setPanoramiquesProjet(new Panoramique[50]); setiNombrePanoramiques(0); retireAffichageLigne(); dejaCharge = false; retireAffichageHotSpots(); retireAffichagePointsHotSpots(); setiNumPoints(0); setiNumImages(0); setiNumHTML(0); getGestionnaireInterface().setiNombreImagesFond(0); getGestionnairePlan().setiPlanActuel(-1); ivImagePanoramique.setImage(null); cbListeChoixPanoramique.getItems().clear(); lblDragDrop.setVisible(true); Node nodAncienNord = (Node) panePanoramique.lookup("#Nord"); if (nodAncienNord != null) { panePanoramique.getChildren().remove(nodAncienNord); } Node nodAncienPoV = (Node) panePanoramique.lookup("#PoV"); if (nodAncienPoV != null) { panePanoramique.getChildren().remove(nodAncienPoV); } getGestionnairePlan().getLblDragDropPlan().setVisible(true); setiNombrePlans(0); setPlans(new Plan[100]); getGestionnairePlan().creeInterface(iLargeurInterface, iHauteurInterface - 60); Pane panePanneauPlan = getGestionnairePlan().getPaneInterface(); getMniAffichagePlan().setDisable(true); getTabPlan().setDisable(true); getTabPlan().setContent(panePanneauPlan); spVuePanoramique.setOnDragOver((DragEvent event) -> { Dragboard dbFichiersPanoramiques = event.getDragboard(); if (dbFichiersPanoramiques.hasFiles()) { event.acceptTransferModes(TransferMode.ANY); } else { event.consume(); } }); spVuePanoramique.setOnDragDropped((DragEvent event) -> { Platform.runLater(() -> { getApAttends().setVisible(true); }); Dragboard dbFichiersPanoramiques = event.getDragboard(); boolean bSucces = false; if (dbFichiersPanoramiques.hasFiles()) { getApAttends().setVisible(true); mbarPrincipal.setDisable(true); bbarPrincipal.setDisable(true); hbBarreBouton.setDisable(true); tpEnvironnement.setDisable(true); pbarAvanceChargement.setProgress(-1); bSucces = true; String strFichierPath = null; File[] fileList = new File[100]; int i = 0; for (File filePano : dbFichiersPanoramiques.getFiles()) { strFichierPath = filePano.getAbsolutePath(); fileList[i] = filePano; i++; } int iNb = i; if (fileList != null) { lblDragDrop.setVisible(false); Task taskChargeFichiers; taskChargeFichiers = tskChargeListeFichiers(fileList, iNb); Thread thChargeFichiers = new Thread(taskChargeFichiers); thChargeFichiers.setDaemon(true); thChargeFichiers.start(); } } event.setDropCompleted(bSucces); event.consume(); }); apVignettesPano.getChildren().add(rectVignettePano); rectVignettePano.setVisible(false); } } /** * * @param iNombre * @return */ private String strGenereChaineAleatoire(int iNombre) { String strChaine = ""; String strChaine1 = "abcdefghijklmnopqrstuvwxyz0123456789"; for (int i = 0; i < iNombre; i++) { int iNumChar = (int) (Math.random() * 36.0f); strChaine += strChaine1.substring(iNumChar, iNumChar + 1); } return strChaine; } /** * * @param strEmplacement */ static public void deleteDirectory(String strEmplacement) { File path = new File(strEmplacement); if (path.exists()) { File[] fileFichiers = path.listFiles(); for (File fileFichier : fileFichiers) { if (fileFichier.isDirectory()) { deleteDirectory(fileFichier.getAbsolutePath()); } fileFichier.delete(); } } } public static void rafraichitListePano() { apVignettesPano.getChildren().clear(); cbListeChoixPanoramique.getItems().clear(); for (int i = 0; i < getiNombrePanoramiques(); i++) { String strFichierPano = getPanoramiquesProjet()[i].getStrNomFichier(); String strNomPano = strFichierPano.substring(strFichierPano.lastIndexOf(File.separator) + 1, strFichierPano.length()); cbListeChoixPanoramique.getItems().add(strNomPano); } for (int ii = 0; ii < ordPano.getStrPanos().size(); ii++) { int i = Integer.parseInt(ordPano.getStrPanos().get(ii)); ImageView ivVignettePano = new ImageView(getPanoramiquesProjet()[i].getImgPanoRect()); ivVignettePano.setPreserveRatio(true); ivVignettePano.setFitWidth(iLargeurVignettes); ivVignettePano.setLayoutX(5); ivVignettePano.setLayoutY((iLargeurVignettes / 2 + 10) * ii + 10); ivVignettePano.setCursor(Cursor.HAND); int iNumero = i; ivVignettePano.setOnMouseClicked((e) -> { affichePanoChoisit(iNumero); }); ivVignettePano.setOnMouseDragEntered((e) -> { ivVignettePano.setLayoutX(3); ivVignettePano.setStyle( "-fx-border-color : #fff;" + "-fx-border-width : 2px;" + "-fx-border-style :solid;"); }); ivVignettePano.setOnMouseDragExited((e) -> { ivVignettePano.setLayoutX(5); ivVignettePano.setStyle("-fx-border-color : rgba(0,0,0,0);" + "-fx-border-width : 0px;" + "-fx-border-style :none;"); }); apVignettesPano.getChildren().add(ivVignettePano); } int iPano = -1; int ii = 0; for (String stNumPano : ordPano.getStrPanos()) { if (Integer.parseInt(stNumPano) == getiPanoActuel()) { iPano = ii; } ii++; } rectVignettePano.setLayoutY((iLargeurVignettes / 2 + 10) * iPano + 10); rectVignettePano.setVisible(true); apVignettesPano.getChildren().add(rectVignettePano); cbListeChoixPanoramique.setValue(cbListeChoixPanoramique.getItems().get(getiPanoActuel())); } private static String suprimeEspaceFin(String strChaine) { while (strChaine.length() >= 0 && strChaine.endsWith(" ")) { strChaine = strChaine.substring(0, strChaine.length() - 1); } return strChaine; } static String[] strEncode = { "&lbrack", "&rbrack", "&pv", "&sp" }; static String[] strDecode = { "[", "]", ";", " " }; private static String strEncodeFichier(String strFichier) { for (int i = 0; i < strEncode.length; i++) { strFichier = strFichier.replace(strDecode[i], strEncode[i]); } return strFichier; } private static String strDecodeFichier(String strFichier) { for (int i = 0; i < strEncode.length; i++) { strFichier = strFichier.replace(strEncode[i], strDecode[i]); } return strFichier; } /** * * @param strLigComplete * @return */ public static Task tskAnalyseFichierPVU(final String strLigComplete) { return new Task() { @Override protected Object call() throws Exception { strPanoEntree = ""; strOrdrePanos = ""; setiNombrePanoramiques(0); String strLigneComplete = strLigComplete.replace("[", "|"); String strLignes[] = strLigneComplete.split("\\|", 500); String strLigne; String[] strElementsLigne; String[] strTypeElement; int iNbHS = 0; int iNbImg = 0; int iNbHTML = 0; int iNbHSDiapo = 0; int iNbHsplan = 0; int iNbImages = 0; setiNombrePlans(-1); for (int ikk = 1; ikk < strLignes.length; ikk++) { strLigne = strLignes[ikk]; strElementsLigne = strLigne.split(";", 25); strTypeElement = strElementsLigne[0].split(">", 2); strTypeElement[0] = strTypeElement[0].replace(" ", "").replace("=", "").replace("[", ""); strElementsLigne[0] = strTypeElement[1]; if ("Panoramique".equals(strTypeElement[0])) { for (int i = 0; i < strElementsLigne.length; i++) { strElementsLigne[i] = strElementsLigne[i].replace("]", "").replace("\n", ""); String[] strValeur = strElementsLigne[i].split(":", 2); if (strValeur.length == 1) { strValeur[1] = ""; } switch (strValeur[0]) { case "fichier": String nmFich = strDecodeFichier(strValeur[1]); File fileImgPano = new File(nmFich); if (!fileImgPano.exists()) { fileImgPano = new File(getStrRepertAppli() + File.separator + "images" + File.separator + "pasImage.jpg"); } int iNumPano = getiNombrePanoramiques() + 1; Platform.runLater(() -> { lblCharge.setText("pano " + iNumPano + "/" + getiNombrePanoramiquesFichier() + " : " + nmFich); lblNiveaux.setText(""); pbarAvanceChargement.setProgress( (double) (iNumPano - 1) / (double) getiNombrePanoramiquesFichier()); }); File fileImageRepert = new File(getStrRepertTemp() + File.separator + "panos"); if (!fileImageRepert.exists()) { fileImageRepert.mkdirs(); } setStrRepertPanos(fileImageRepert.getAbsolutePath()); String strFichierPano = fileImgPano.getPath(); String strExtension = strFichierPano.substring(strFichierPano.length() - 3, strFichierPano.length()); Image imgPano = null; if ("tif".equals(strExtension)) { try { imgPano = ReadWriteImage.readTiff(strFichierPano); } catch (IOException ex) { Logger.getLogger(EditeurPanovisu.class.getName()).log(Level.SEVERE, null, ex); } } else { imgPano = new Image("file:" + strFichierPano); } if (imgPano != null) { if (imgPano.getWidth() == imgPano.getHeight()) { ajoutePanoramiqueProjet(nmFich, Panoramique.CUBE, iNumPano, getiNombrePanoramiquesFichier()); } else { ajoutePanoramiqueProjet(nmFich, Panoramique.SPHERE, iNumPano, getiNombrePanoramiquesFichier()); } } break; case "titre": if (!strValeur[1].equals("null")) { getPanoramiquesProjet()[getiPanoActuel()].setStrTitrePanoramique(strValeur[1]); } else { getPanoramiquesProjet()[getiPanoActuel()].setStrTitrePanoramique(""); } break; case "type": getPanoramiquesProjet()[getiPanoActuel()].setStrTypePanoramique(strValeur[1]); break; case "afficheInfo": getPanoramiquesProjet()[getiPanoActuel()] .setAfficheInfo(strValeur[1].equals("true")); break; case "afficheTitre": getPanoramiquesProjet()[getiPanoActuel()] .setAfficheTitre(strValeur[1].equals("true")); break; case "nb": iNbHS = Integer.parseInt(strValeur[1]); break; case "nbImg": iNbImg = Integer.parseInt(strValeur[1]); break; case "nbHTML": iNbHTML = Integer.parseInt(strValeur[1]); break; case "nbDiapo": iNbHSDiapo = Integer.parseInt(strValeur[1]); break; case "regardX": getPanoramiquesProjet()[getiPanoActuel()] .setRegardX(Double.parseDouble(strValeur[1])); break; case "regardY": getPanoramiquesProjet()[getiPanoActuel()] .setRegardY(Double.parseDouble(strValeur[1])); break; case "minLat": getPanoramiquesProjet()[getiPanoActuel()] .setMinLat(Double.parseDouble(strValeur[1])); break; case "maxLat": getPanoramiquesProjet()[getiPanoActuel()] .setMaxLat(Double.parseDouble(strValeur[1])); break; case "bMinLat": getPanoramiquesProjet()[getiPanoActuel()].setbMinLat(strValeur[1].equals("true")); break; case "bMaxLat": getPanoramiquesProjet()[getiPanoActuel()].setbMaxLat(strValeur[1].equals("true")); break; case "fov": getPanoramiquesProjet()[getiPanoActuel()] .setChampVisuel(Double.parseDouble(strValeur[1]) / 2.0); break; case "minfov": getPanoramiquesProjet()[getiPanoActuel()] .setFovMin(Double.parseDouble(strValeur[1])); break; case "maxfov": getPanoramiquesProjet()[getiPanoActuel()] .setFovMax(Double.parseDouble(strValeur[1])); break; case "zeroNord": getPanoramiquesProjet()[getiPanoActuel()] .setZeroNord(Double.parseDouble(strValeur[1])); break; case "numeroPlan": getPanoramiquesProjet()[getiPanoActuel()] .setNumeroPlan(Integer.parseInt(strValeur[1].replace(" ", ""))); break; case "longitudeGeo": getPanoramiquesProjet()[getiPanoActuel()] .setMarqueurGeolocatisation(new CoordonneesGeographiques()); getPanoramiquesProjet()[getiPanoActuel()].getMarqueurGeolocatisation() .setLongitude(Double.parseDouble(strValeur[1])); break; case "latitudeGeo": getPanoramiquesProjet()[getiPanoActuel()].getMarqueurGeolocatisation() .setLatitude(Double.parseDouble(strValeur[1])); break; case "affichePlan": getPanoramiquesProjet()[getiPanoActuel()] .setAffichePlan(strValeur[1].equals("true")); break; default: break; } } for (int jj = 0; jj < iNbHS; jj++) { ikk++; strLigne = strLignes[ikk]; strElementsLigne = strLigne.split(";", 10); strTypeElement = strElementsLigne[0].split(">", 2); strTypeElement[0] = strTypeElement[0].replace(" ", "").replace("=", "").replace("[", ""); strElementsLigne[0] = strTypeElement[1]; HotSpot HS = new HotSpot(); for (int i = 0; i < strElementsLigne.length; i++) { strElementsLigne[i] = strElementsLigne[i].replace("]", ""); String[] strValeur = strElementsLigne[i].split(":", 2); switch (strValeur[0]) { case "longitude": HS.setLongitude(Double.parseDouble(strValeur[1])); break; case "latitude": HS.setLatitude(Double.parseDouble(strValeur[1])); break; case "regardX": HS.setRegardX(Double.parseDouble(strValeur[1])); break; case "regardY": HS.setRegardY(Double.parseDouble(strValeur[1])); break; case "champVisuel": HS.setChampVisuel(Double.parseDouble(strValeur[1]) / 2.0); break; case "image": if ("null".equals(strValeur[1])) { HS.setStrFichierImage(null); } else { HS.setStrFichierImage(strValeur[1]); } break; case "info": if ("null".equals(strValeur[1])) { HS.setStrInfo(null); } else { HS.setStrInfo(strValeur[1].replace("&pv", ";").replace("&dp", ":") .replace("&ds", "#")); } break; case "xml": if ("null".equals(strValeur[1])) { HS.setStrFichierXML(null); } else { HS.setStrFichierXML(strValeur[1]); } break; case "numXML": HS.setNumeroPano(Integer.parseInt(strValeur[1])); break; case "anime": HS.setAnime(strValeur[1].equals("true")); break; } } getPanoramiquesProjet()[getiPanoActuel()].addHotspot(HS); } for (int jj = 0; jj < iNbImg; jj++) { ikk++; strLigne = strLignes[ikk]; strElementsLigne = strLigne.split(";", 10); strTypeElement = strElementsLigne[0].split(">", 2); strTypeElement[0] = strTypeElement[0].replace(" ", "").replace("=", "").replace("[", ""); strElementsLigne[0] = strTypeElement[1]; HotspotImage HS = new HotspotImage(); for (int i = 0; i < strElementsLigne.length; i++) { strElementsLigne[i] = strElementsLigne[i].replace("]", ""); String[] strValeur = strElementsLigne[i].split(":", 2); switch (strValeur[0]) { case "longitude": HS.setLongitude(Double.parseDouble(strValeur[1])); break; case "latitude": HS.setLatitude(Double.parseDouble(strValeur[1])); break; case "image": if ("null".equals(strValeur[1])) { HS.setStrFichierImage(null); } else { HS.setStrFichierImage(strValeur[1]); } break; case "couleur": if ("null".equals(strValeur[1])) { HS.setStrCouleurFond(""); } else { HS.setStrCouleurFond(strValeur[1]); } break; case "opacite": if ("null".equals(strValeur[1])) { HS.setOpacite(-1); } else { HS.setOpacite(Double.parseDouble(strValeur[1])); } break; case "info": if ("null".equals(strValeur[1])) { HS.setStrInfo(null); } else { HS.setStrInfo(strValeur[1].replace("&pv", ";").replace("&dp", ":") .replace("&ds", "#")); } break; case "img": if ("null".equals(strValeur[1])) { HS.setStrLienImg(null); } else { HS.setStrLienImg(strValeur[1]); } break; case "urlImg": if ("null".equals(strValeur[1])) { HS.setStrUrlImage(null); } else { HS.setStrUrlImage(strValeur[1]); } String nmFich = strValeur[1]; File imgPano = new File(nmFich); File imageRepert = new File(getStrRepertTemp() + File.separator + "images"); if (!imageRepert.exists()) { imageRepert.mkdirs(); } setStrRepertPanos(imageRepert.getAbsolutePath()); try { if (imgPano.exists()) { copieFichierRepertoire(imgPano.getPath(), getStrRepertPanos()); } else { String strExtension = imgPano.getPath() .substring(imgPano.getPath().lastIndexOf(".") + 1); String nomFichier = getStrRepertAppli() + File.separator + "images" + File.separator + "imagePasTrouvee." + strExtension; copieFichierRepertoire(nomFichier, getStrRepertPanos()); String strFich = imgPano.getPath() .substring(imgPano.getPath().lastIndexOf(File.separator)); File fFichier = new File(getStrRepertTemp() + File.separator + "images" + File.separator + "imagePasTrouvee." + strExtension); File fNouvFichier = new File(getStrRepertTemp() + File.separator + "images" + File.separator + strFich); fFichier.renameTo(fNouvFichier); } } catch (IOException ex) { Logger.getLogger(EditeurPanovisu.class.getName()).log(Level.SEVERE, null, ex); } break; case "anime": HS.setAnime(strValeur[1].equals("true")); break; } } getPanoramiquesProjet()[getiPanoActuel()].addHotspotImage(HS); } for (int jj = 0; jj < iNbHSDiapo; jj++) { ikk++; strLigne = strLignes[ikk]; strElementsLigne = strLigne.split(";", 10); strTypeElement = strElementsLigne[0].split(">", 2); strTypeElement[0] = strTypeElement[0].replace(" ", "").replace("=", "").replace("[", ""); strElementsLigne[0] = strTypeElement[1]; HotspotDiaporama HS = new HotspotDiaporama(); for (int i = 0; i < strElementsLigne.length; i++) { strElementsLigne[i] = strElementsLigne[i].replace("]", ""); String[] strValeur = strElementsLigne[i].split(":", 2); switch (strValeur[0]) { case "longitude": HS.setLongitude(Double.parseDouble(strValeur[1])); break; case "latitude": HS.setLatitude(Double.parseDouble(strValeur[1])); break; case "info": if ("null".equals(strValeur[1])) { HS.setStrInfo(null); } else { HS.setStrInfo(strValeur[1].replace("&pv", ";").replace("&dp", ":") .replace("&ds", "#")); } break; case "numDiapo": HS.setiNumDiapo(Integer.parseInt(strValeur[1])); break; case "anime": HS.setbAnime(strValeur[1].equals("true")); break; } } getPanoramiquesProjet()[getiPanoActuel()].addHotspotDiapo(HS); } for (int jj = 0; jj < iNbHTML; jj++) { ikk++; strLigne = strLignes[ikk]; strElementsLigne = strLigne.split(";", 10); strTypeElement = strElementsLigne[0].split(">", 2); strTypeElement[0] = strTypeElement[0].replace(" ", "").replace("=", "").replace("[", ""); strElementsLigne[0] = strTypeElement[1]; HotspotHTML HS = new HotspotHTML(); for (int i = 0; i < strElementsLigne.length; i++) { strElementsLigne[i] = strElementsLigne[i].replace("]", ""); String[] strValeur = strElementsLigne[i].split(":", 2); switch (strValeur[0]) { case "longitude": HS.setLongitude(Double.parseDouble(strValeur[1])); break; case "latitude": HS.setLatitude(Double.parseDouble(strValeur[1])); break; case "lienExterieur": HS.setbLienExterieur(strValeur[1].equals("true")); break; case "url": HS.setStrURLExterieure(strValeur[1]); break; case "info": if ("null".equals(strValeur[1])) { HS.setStrInfo(null); } else { HS.setStrInfo(strValeur[1].replace("&pv", ";").replace("&dp", ":") .replace("&ds", "#")); } break; case "anime": HS.setAnime(strValeur[1].equals("true")); break; case "position": HS.setStrPositionHTML(strValeur[1]); break; case "couleur": HS.setStrCouleurHTML(strValeur[1]); break; case "opacite": HS.setOpaciteHTML(Double.parseDouble(strValeur[1])); break; case "largeur": HS.setLargeurHTML(Double.parseDouble(strValeur[1])); break; } } getPanoramiquesProjet()[getiPanoActuel()].addHotspotHTML(HS); } } if ("Diaporama".equals(strTypeElement[0])) { diaporamas[getiNombreDiapo()] = new Diaporama(); for (int i = 0; i < strElementsLigne.length; i++) { strElementsLigne[i] = strElementsLigne[i].replace("]", "").replace("\n", ""); String[] strValeur = strElementsLigne[i].split(":", 2); if (strValeur.length == 1) { strValeur[1] = ""; } switch (strValeur[0]) { case "nom": diaporamas[getiNombreDiapo()].setStrNomDiaporama(strValeur[1]); break; case "fichier": if (!strValeur[1].equals("null")) { diaporamas[getiNombreDiapo()].setStrFichierDiaporama(strValeur[1]); } else { diaporamas[getiNombreDiapo()].setStrFichierDiaporama(""); } break; case "nbImages": iNbImages = Integer.parseInt(strValeur[1]); break; case "opacite": diaporamas[getiNombreDiapo()].setOpaciteDiaporama(Double.parseDouble(strValeur[1])); break; case "delai": diaporamas[getiNombreDiapo()].setDelaiDiaporama(Double.parseDouble(strValeur[1])); break; case "coul": diaporamas[getiNombreDiapo()].setStrCouleurFondDiaporama( suprimeEspaceFin(strValeur[1].replace("\n", ""))); break; default: break; } } for (int jj = 0; jj < iNbImages; jj++) { ikk++; strLigne = strLignes[ikk]; strElementsLigne = strLigne.split(";", 10); strTypeElement = strElementsLigne[0].split(">", 2); strTypeElement[0] = strTypeElement[0].replace(" ", "").replace("=", "").replace("[", ""); strElementsLigne[0] = strTypeElement[1]; for (int i = 0; i < strElementsLigne.length; i++) { strElementsLigne[i] = strElementsLigne[i].replace("]", ""); String[] strValeur = strElementsLigne[i].split(":", 2); if (strValeur.length == 1) { strValeur[1] = ""; } switch (strValeur[0]) { case "fichierImage": diaporamas[getiNombreDiapo()].setStrFichiersImage(strValeur[1], jj); break; case "fichiers": diaporamas[getiNombreDiapo()].setStrFichiers(strValeur[1], jj); break; case "libelles": diaporamas[getiNombreDiapo()].setStrLibellesImages( suprimeEspaceFin(strValeur[1].replace("\n", "")).replace("\n", ""), jj); break; } } diaporamas[getiNombreDiapo()].setiNombreImages(jj + 1); } setiNombreDiapo(getiNombreDiapo() + 1); } if ("Plan".equals(strTypeElement[0])) { for (int i = 0; i < strElementsLigne.length; i++) { strElementsLigne[i] = strElementsLigne[i].replace("]", ""); String[] strValeur = strElementsLigne[i].split(":", 2); switch (strValeur[0]) { case "lienImage": setiNombrePlans(getiNombrePlans() + 1); getPlans()[getiNombrePlans()] = new Plan(); getPlans()[getiNombrePlans()].setStrLienPlan(strValeur[1]); File fileRepertoirePlan = new File(getStrRepertTemp() + File.separator + "images"); if (!fileRepertoirePlan.exists()) { fileRepertoirePlan.mkdirs(); } try { copieFichierRepertoire(getPlans()[getiNombrePlans()].getStrLienPlan(), fileRepertoirePlan.getAbsolutePath()); } catch (IOException ex) { Logger.getLogger(EditeurPanovisu.class.getName()).log(Level.SEVERE, null, ex); } break; case "image": getPlans()[getiNombrePlans()].setStrImagePlan(strValeur[1]); break; case "titre": if (!strValeur[1].equals("'null'")) { getPlans()[getiNombrePlans()].setTitrePlan(strValeur[1]); } else { getPlans()[getiNombrePlans()].setTitrePlan(""); } break; case "nb": iNbHsplan = Integer.parseInt(strValeur[1]); break; case "position": getPlans()[getiNombrePlans()].setStrPosition(strValeur[1]); break; case "positionX": getPlans()[getiNombrePlans()].setPositionX(Double.parseDouble(strValeur[1])); break; case "positionY": getPlans()[getiNombrePlans()].setPositionY(Double.parseDouble(strValeur[1])); break; case "directionNord": getPlans()[getiNombrePlans()].setDirectionNord(Double.parseDouble(strValeur[1])); break; default: break; } } for (int jj = 0; jj < iNbHsplan; jj++) { ikk++; strLigne = strLignes[ikk]; strElementsLigne = strLigne.split(";", 15); strTypeElement = strElementsLigne[0].split(">", 2); strTypeElement[0] = strTypeElement[0].replace(" ", "").replace("=", "").replace("[", ""); strElementsLigne[0] = strTypeElement[1]; HotSpot HS = new HotSpot(); for (int i = 0; i < strElementsLigne.length; i++) { strElementsLigne[i] = strElementsLigne[i].replace("]", ""); String[] strValeur = strElementsLigne[i].split(":", 2); switch (strValeur[0]) { case "longitude": HS.setLongitude(Double.parseDouble(strValeur[1])); break; case "latitude": HS.setLatitude(Double.parseDouble(strValeur[1])); break; case "image": if ("null".equals(strValeur[1])) { HS.setStrFichierImage(null); } else { HS.setStrFichierImage(strValeur[1]); } break; case "info": if ("null".equals(strValeur[1])) { HS.setStrInfo(null); } else { HS.setStrInfo(strValeur[1]); } break; case "xml": if ("null".equals(strValeur[1])) { HS.setStrFichierXML(null); } else { HS.setStrFichierXML(strValeur[1]); } break; case "numeroPano": HS.setNumeroPano( Integer.parseInt(strValeur[1].replace("\n", "").replace(" ", ""))); break; case "anime": HS.setAnime(strValeur[1].equals("true")); break; } } getPlans()[getiNombrePlans()].addHotspot(HS); } } if ("Interface".equals(strTypeElement[0])) { String[] strElts = strElementsLigne[0].replace("]", "").split("\n"); List<String> strListTemplate = new ArrayList<>(); for (String strTexte : strElts) { if (!strTexte.equals("")) { strListTemplate.add(strTexte); } } getGestionnaireInterface().setTemplate(strListTemplate); } if ("PanoEntree".equals(strTypeElement[0])) { strPanoEntree = strElementsLigne[0].split("]")[0]; } if ("introLP".equals(strTypeElement[0])) { setbIntroPetitePlanete(strElementsLigne[0].split("]")[0].equals("true")); } if ("arDemarre".equals(strTypeElement[0])) { setbAutoRotationDemarre(strElementsLigne[0].split("]")[0].equals("true")); } if ("arVitesse".equals(strTypeElement[0])) { setiAutoRotationVitesse(Integer.parseInt(strElementsLigne[0].split("]")[0])); } if ("atDemarre".equals(strTypeElement[0])) { setbAutoTourDemarre(strElementsLigne[0].split("]")[0].equals("true")); } if ("atVitesse".equals(strTypeElement[0])) { setiAutoTourLimite(Integer.parseInt(strElementsLigne[0].split("]")[0])); } if ("atDemarrage".equals(strTypeElement[0])) { setiAutoTourDemarrage(Integer.parseInt(strElementsLigne[0].split("]")[0])); } if ("atType".equals(strTypeElement[0])) { setStrAutoTourType(strElementsLigne[0].split("]")[0]); } if ("OrdrePanos".equals(strTypeElement[0])) { strOrdrePanos = strElementsLigne[0].split("]")[0]; } if ("titreVisite".equals(strTypeElement[0])) { strTitreVisite = strElementsLigne[0].split("]")[0]; } if ("pageHTML".equals(strTypeElement[0])) { String[] strLignesCommande = strElementsLigne[0].split("]")[0].split("\n"); int inPano = 0; int inHSHTML = 0; int inImage = 0; for (String strLigneCommande : strLignesCommande) { String strCommande = strLigneCommande.split(":", 2)[0]; String strVal = strLigneCommande.split(":", 2)[1].replace("&nl", "\n") .replace("&pv", ";").replace("&dp", ":"); switch (strCommande) { case "numPano": inPano = Integer.parseInt(strVal); break; case "numHSHTML": inHSHTML = Integer.parseInt(strVal); break; case "texteHTML": getPanoramiquesProjet()[inPano].getHotspotHTML(inHSHTML).setStrTexteHTML(strVal); break; case "imagePath": ImageEditeurHTML imageEdit = new ImageEditeurHTML(); imageEdit.setStrImagePath(strVal); panoramiquesProjet[inPano].getHotspotHTML(inHSHTML) .getImagesEditeur()[inImage] = imageEdit; inImage++; getPanoramiquesProjet()[inPano].getHotspotHTML(inHSHTML).setiNombreImages(inImage); break; } } } } for (int i = 0; i < getiNombreDiapo(); i++) { } return true; } @Override protected void succeeded() { super.succeeded(); getVbChoixPanoramique().setVisible(true); setiNombrePlans(getiNombrePlans() + 1); if (getiNombrePlans() != 0) { int iNbPlans1 = getiNombrePlans(); for (int i = 0; i < iNbPlans1; i++) { setiNombrePlans(i); getGestionnairePlan().ajouterPlan(); } setiNombrePlans(getiNombrePlans() + 1); } for (int i = 0; i < getiNombrePanoramiques(); i++) { for (int j = 0; j < getPanoramiquesProjet()[i].getNombreHotspots(); j++) { if (getPanoramiquesProjet()[i].getHotspot(j).getNumeroPano() != -1) { String strFichPano = getPanoramiquesProjet()[getPanoramiquesProjet()[i].getHotspot(j) .getNumeroPano()].getStrNomFichier(); strFichPano = strFichPano .substring(strFichPano.lastIndexOf(File.separator) + 1, strFichPano.length()) .split("\\.")[0] + ".xml"; getPanoramiquesProjet()[i].getHotspot(j).setStrFichierXML(strFichPano); } else { String strNomFichier = getPanoramiquesProjet()[i].getHotspot(j).getStrFichierXML() .split("\\.")[0]; for (int k = 0; k < getiNombrePanoramiques(); k++) { String strFichPano = getPanoramiquesProjet()[k].getStrNomFichier(); strFichPano = strFichPano.substring(strFichPano.lastIndexOf(File.separator) + 1, strFichPano.length()).split("\\.")[0]; if (strFichPano.equals(strNomFichier)) { getPanoramiquesProjet()[i].getHotspot(j).setNumeroPano(k); } } } } } for (int i = 0; i < getiNombreDiapo(); i++) { try { creeDiaporamaHTML(diaporamas[i], i); } catch (IOException ex) { Logger.getLogger(EditeurPanovisu.class.getName()).log(Level.SEVERE, null, ex); } } try { getGestionnaireInterface().afficheTemplate(); setbDejaSauve(true); } catch (IOException ex) { Logger.getLogger(EditeurPanovisu.class.getName()).log(Level.SEVERE, null, ex); } if (apListePanoTriable != null) { apParametresVisite.getChildren().remove(apListePanoTriable); } if (strOrdrePanos.equals((""))) { ordPano.creeListe(); } else { ordPano.creeListe(strOrdrePanos); } apListePanoTriable = ordPano.getApListePanoramiques(); apListePanoTriable.setLayoutX(40); apListePanoTriable.setLayoutY(130); apListePanoTriable.setVisible(true); apParametresVisite.setPrefHeight(120 + apListePanoTriable.getPrefHeight() + 20); apParametresVisite.getChildren().add(apListePanoTriable); if (apParametresVisite.isVisible()) { apParametresVisite.setMinHeight(120 + apListePanoTriable.getPrefHeight() + 20); apParametresVisite.setMaxHeight(120 + apListePanoTriable.getPrefHeight() + 20); } getGestionnaireInterface().rafraichit(); setiPanoActuel(Integer.parseInt(ordPano.getStrPanos().get(0))); rafraichitListePano(); affichePanoChoisit(getiPanoActuel()); bPanoCharge = true; getVbChoixPanoramique().setVisible(true); cbListeChoixPanoramique.setValue(cbListeChoixPanoramique.getItems().get(0)); TextField tfVisite = (TextField) getVbChoixPanoramique().lookup("#titreVisite"); tfVisite.setText(strTitreVisite); getApAttends().setVisible(false); mbarPrincipal.setDisable(false); bbarPrincipal.setDisable(false); hbBarreBouton.setDisable(false); tpEnvironnement.setDisable(false); cbIntroPetitePlanete.setSelected(isbIntroPetitePlanete()); cbAutoRotationDemarrage.setSelected(isbAutoRotationDemarre()); bdfAutoRotationVitesse.setNumber(new BigDecimal(getiAutoRotationVitesse())); switch (getiAutoRotationVitesse()) { case 10: cbAutoRotationVitesse.getSelectionModel().select(0); break; case 20: cbAutoRotationVitesse.getSelectionModel().select(1); break; case 30: cbAutoRotationVitesse.getSelectionModel().select(2); break; default: cbAutoRotationVitesse.getSelectionModel().select(3); break; } cbAutoTourDemarrage.setSelected(isbAutoTourDemarre()); bdfAutoTourLimite.setNumber(new BigDecimal(getiAutoTourLimite())); bdfAutoTourDemarrage.setNumber(new BigDecimal(getiAutoTourDemarrage())); switch (getStrAutoTourType()) { case "tours": cbAutoTourType.getSelectionModel().select(0); break; case "secondes": cbAutoTourType.getSelectionModel().select(1); break; } rafraichitListePano(); creeVignettesHS(); } }; } private static void creeVignettesHS() { NavigateurPanoramique navigPano1 = new NavigateurPanoramique( getPanoramiquesProjet()[0].getImgVisuPanoramique(), 0, 0, 300, 150, false); AnchorPane apVisuPanoHS = new AnchorPane(navigPano1.affichePano()); for (int i = 0; i < iNombrePanoramiques; i++) { for (int j = 0; j < getPanoramiquesProjet()[i].getNombreHotspots(); j++) { int iNumPanoChoisitHS = -1; if (!getPanoramiquesProjet()[i].getHotspot(j).getStrFichierXML().equals("")) { for (int ii1 = 0; ii1 < getiNombrePanoramiques(); ii1++) { String strFichPano = getPanoramiquesProjet()[ii1].getStrNomFichier(); String strNomXMLFile = strFichPano .substring(strFichPano.lastIndexOf(File.separator) + 1, strFichPano.length()) .split("\\.")[0] + ".xml"; if (strNomXMLFile.equals(getPanoramiquesProjet()[i].getHotspot(j).getStrFichierXML())) { iNumPanoChoisitHS = ii1; } } Image img = getPanoramiquesProjet()[iNumPanoChoisitHS].getImgVisuPanoramique(); navigPano1.setImagePanoramique("", img); navigPano1.setLongitude(getPanoramiquesProjet()[i].getHotspot(j).getRegardX()); navigPano1.setLatitude(getPanoramiquesProjet()[i].getHotspot(j).getRegardY()); navigPano1.setFov(getPanoramiquesProjet()[i].getHotspot(j).getChampVisuel()); getPanoramiquesProjet()[i].getHotspot(j).setImgVueHs(navigPano1.captureEcranHS()); } } } apVisuPanoHS.setVisible(false); } /** * * @throws IOException Exception d'entre sortie */ private static void lisFichierConfig() throws IOException { File fileFichierConfig = new File(fileRepertConfig.getAbsolutePath() + File.separator + "panovisu.cfg"); if (fileFichierConfig.exists()) { try { String strTexte; try (BufferedReader FichierConfig = new BufferedReader( new InputStreamReader(new FileInputStream(fileFichierConfig), "UTF-8"))) { String strLangue = "fr"; String strPays = "FR"; String strRepert = getStrRepertAppli(); String strAPI = ""; while ((strTexte = FichierConfig.readLine()) != null) { String tpe = strTexte.split("=")[0]; String valeur; if (strTexte.split("=").length > 1) { valeur = strTexte.split("=")[1]; } else { valeur = ""; } switch (tpe) { case "langue": strLangue = valeur; break; case "pays": strPays = valeur; break; case "repert": strRepert = valeur; break; case "bingAPIKey": strAPI = valeur; break; case "style": setStrStyleCSS(valeur); break; } } setLocale(new Locale(strLangue, strPays)); rbLocalisation = ResourceBundle.getBundle("editeurpanovisu.i18n.PanoVisu", getLocale()); File fileRepert1 = new File(strRepert); if (fileRepert1.exists()) { setStrRepertoireProjet(strRepert); setStrCurrentDir(strRepert); bRepertSauveChoisi = true; } else { setStrRepertoireProjet(getStrRepertAppli()); setStrCurrentDir(getStrRepertAppli()); } setStrBingAPIKey(strAPI); File f = new File("css/" + getStrStyleCSS() + ".css"); getScnPrincipale().getStylesheets().add("file:///" + f.getAbsolutePath().replace("\\", "/")); } } catch (FileNotFoundException ex) { Logger.getLogger(EditeurPanovisu.class.getName()).log(Level.SEVERE, null, ex); } } else { fileFichierConfig.createNewFile(); setLocale(new Locale("fr", "FR")); File f = new File("css/clair.css"); getScnPrincipale().getStylesheets().add("file:///" + f.getAbsolutePath().replace("\\", "/")); setStrRepertoireProjet(getStrRepertAppli()); String strContenuFichier = "langue=" + getLocale().toString().split("_")[0] + "\n"; strContenuFichier += "pays=" + getLocale().toString().split("_")[1] + "\n"; strContenuFichier += "repert=" + getStrRepertoireProjet() + "\n"; strContenuFichier += "style=clair\n"; fileFichierConfig.setWritable(true); OutputStreamWriter oswFichierConfig = null; try { oswFichierConfig = new OutputStreamWriter(new FileOutputStream(fileFichierConfig), "UTF-8"); } catch (IOException ex) { Logger.getLogger(ConfigDialogController.class.getName()).log(Level.SEVERE, null, ex); } BufferedWriter bwFichierConfig = new BufferedWriter(oswFichierConfig); try { bwFichierConfig.write(strContenuFichier); } catch (IOException ex) { Logger.getLogger(ConfigDialogController.class.getName()).log(Level.SEVERE, null, ex); } try { bwFichierConfig.close(); } catch (IOException ex) { Logger.getLogger(ConfigDialogController.class.getName()).log(Level.SEVERE, null, ex); } } } /** * * @param strEmplacement rpertoire origine * @param strRepertoire rpertoire cible */ static public void copieRepertoire(String strEmplacement, String strRepertoire) { File fileRepert2 = new File(strRepertoire); if (!fileRepert2.exists()) { fileRepert2.mkdirs(); } File filePath = new File(strEmplacement); if (filePath.exists()) { File[] fileFichiers = filePath.listFiles(); for (File fileFichier : fileFichiers) { try { if (fileFichier.isDirectory()) { String strRep1 = fileFichier.getAbsolutePath() .substring(fileFichier.getAbsolutePath().lastIndexOf(File.separator) + 1); strRep1 = strRepertoire + File.separator + strRep1; copieRepertoire(fileFichier.getAbsolutePath(), strRep1); } else { copieFichierRepertoire(fileFichier.getAbsolutePath(), strRepertoire); } } catch (IOException ex) { Logger.getLogger(EditeurPanovisu.class.getName()).log(Level.SEVERE, null, ex); } } } } /** * * @param strFichier * @param strRepertoire * @throws FileNotFoundException Exception fichier non trouv * @throws IOException Exception d'entre sortie */ static public void copieFichierRepertoire(String strFichier, String strRepertoire) throws FileNotFoundException, IOException { File fileFrom = new File(strFichier); File fileTo = new File( strRepertoire + File.separator + strFichier.substring(strFichier.lastIndexOf(File.separator) + 1)); Files.copy(fileFrom.toPath(), fileTo.toPath(), StandardCopyOption.REPLACE_EXISTING); } /** * */ private static void retireAffichageHotSpots() { Pane paneLabels = (Pane) vbVisuHotspots.lookup("#labels"); vbVisuHotspots.getChildren().remove(paneLabels); dejaCharge = false; } /** * */ private static void retireAffichagePointsHotSpots() { for (int i = 0; i < getiNumPoints(); i++) { Node nodePoint = (Node) panePanoramique.lookup("#point" + i); panePanoramique.getChildren().remove(nodePoint); } for (int i = 0; i < getiNumImages(); i++) { Node nodePoint = (Node) panePanoramique.lookup("#img" + i); panePanoramique.getChildren().remove(nodePoint); } for (int i = 0; i < getiNumHTML(); i++) { Node nodePoint = (Node) panePanoramique.lookup("#html" + i); panePanoramique.getChildren().remove(nodePoint); } for (int i = 0; i < getiNumDiapo(); i++) { Node nodePoint = (Node) panePanoramique.lookup("#dia" + i); panePanoramique.getChildren().remove(nodePoint); } } /** * Retourne la liste des panoramiques sous forme de chaine spars par des * points virgule * * @return la liste des panos */ private static String strListePano() { String strListe = ""; if (getiNombrePanoramiques() == 0) { return null; } else { for (int i = 0; i < getiNombrePanoramiques(); i++) { String strFichierPano = getPanoramiquesProjet()[i].getStrNomFichier(); String strNomPano = strFichierPano.substring(strFichierPano.lastIndexOf(File.separator) + 1, strFichierPano.length()); String[] strNPano = strNomPano.split("\\."); strListe += strNPano[0]; if (i < getiNombrePanoramiques() - 1) { strListe += ";"; } } return strListe; } } /** * * @param iNumHS * @return */ private static AnchorPane apAfficherListePanosVignettes(int iNumHS) { NavigateurPanoramique navigateurPano2; AnchorPane apVisuPanoHS; iNumeroPanoChoisitHS = -1; if (!getPanoramiquesProjet()[getiPanoActuel()].getHotspot(iNumHS).getStrFichierXML().equals("")) { for (int ii1 = 0; ii1 < getiNombrePanoramiques(); ii1++) { String strFichPano = getPanoramiquesProjet()[ii1].getStrNomFichier(); String strNomXMLFile = strFichPano .substring(strFichPano.lastIndexOf(File.separator) + 1, strFichPano.length()) .split("\\.")[0] + ".xml"; if (strNomXMLFile .equals(getPanoramiquesProjet()[getiPanoActuel()].getHotspot(iNumHS).getStrFichierXML())) { iNumeroPanoChoisitHS = ii1; strNomPanoChoisitHS = getPanoramiquesProjet()[ii1].getStrNomFichier(); } } navigateurPano2 = new NavigateurPanoramique( getPanoramiquesProjet()[iNumeroPanoChoisitHS].getImgVisuPanoramique(), 0, 0, 400, 200, true); if (getPanoramiquesProjet()[getiPanoActuel()].getHotspot(iNumHS).getRegardX() != -1000) { navigateurPano2.setChoixLongitude( getPanoramiquesProjet()[getiPanoActuel()].getHotspot(iNumHS).getRegardX()); } else { navigateurPano2.setChoixLongitude(0); } navigateurPano2.setLongitude(navigateurPano2.getChoixLongitude()); if (getPanoramiquesProjet()[getiPanoActuel()].getHotspot(iNumHS).getRegardY() != -1000) { navigateurPano2.setChoixLatitude( getPanoramiquesProjet()[getiPanoActuel()].getHotspot(iNumHS).getRegardY()); } else { navigateurPano2.setChoixLatitude(0); } navigateurPano2.setLatitude(navigateurPano2.getChoixLatitude()); if (getPanoramiquesProjet()[getiPanoActuel()].getHotspot(iNumHS).getChampVisuel() != 0) { navigateurPano2 .setChoixFov(getPanoramiquesProjet()[getiPanoActuel()].getHotspot(iNumHS).getChampVisuel()); } else { navigateurPano2.setChoixFov(50); } navigateurPano2.setFov(navigateurPano2.getChoixFov()); apVisuPanoHS = navigateurPano2.affichePano(); apVisuPanoHS.setDisable(false); } else { navigateurPano2 = new NavigateurPanoramique( getPanoramiquesProjet()[getiPanoActuel()].getImgVisuPanoramique(), 0, 0, 400, 200, true); apVisuPanoHS = navigateurPano2.affichePano(); apVisuPanoHS.setDisable(true); } AnchorPane aplistePano = new AnchorPane(); aplistePano.setOpacity(1); Pane paneFond = new Pane(); paneFond.setOnMouseClicked((mouseEvent) -> { mouseEvent.consume(); }); paneFond.setStyle("-fx-background-color : #bbb;"); paneFond.setPrefWidth(540); paneFond.setPrefHeight(((getiNombrePanoramiques() - 2) / 4 + 1) * 65 + 10 + 320); paneFond.setMinWidth(540); paneFond.setMinHeight(70); aplistePano.getChildren().add(paneFond); aplistePano.setStyle("-fx-backgroung-color : #bbb;"); int ij = 0; ImageView[] ivPano; ivPano = new ImageView[getiNombrePanoramiques()]; double xPos; double yPos; int iRow = 0; Button btnValide = new Button("Ok"); btnValide.setPrefWidth(80); btnValide.setLayoutX(paneFond.getPrefWidth() - 100); btnValide.setLayoutY(paneFond.getPrefHeight() - 30); paneFond.getChildren().add(btnValide); btnValide.setOnMouseClicked((mouseEvent) -> { if (iNumeroPanoChoisitHS != -1) { panePanoramique.setCursor(Cursor.CROSSHAIR); panePanoramique.setOnMouseClicked((me1) -> { gereSourisPanoramique(me1); }); setStrPanoListeVignette(strNomPanoChoisitHS); if (getPanoramiquesProjet()[iNumeroPanoChoisitHS].getStrTitrePanoramique() != null) { String strTexteHS = getPanoramiquesProjet()[iNumeroPanoChoisitHS].getStrTitrePanoramique(); TextField tfTxtHS = (TextField) vbOutils.lookup("#txtHS" + iNumHS); tfTxtHS.setText(strTexteHS); } double latitude = Math.round(navigateurPano2.getChoixLatitude() * 10) / 10.d; double longitude = Math.round(navigateurPano2.getChoixLongitude() * 10) / 10.d - 180; double fov = Math.round(navigateurPano2.getChoixFov() * 10) / 10.d; longitude = longitude % 360; longitude = longitude < 0 ? longitude + 360 : longitude; longitude = longitude > 180 ? longitude - 360 : longitude; getPanoramiquesProjet()[getiPanoActuel()].getHotspot(iNumHS).setNumeroPano(iNumeroPanoChoisitHS); getPanoramiquesProjet()[getiPanoActuel()].getHotspot(iNumHS).setRegardX(longitude - 180); getPanoramiquesProjet()[getiPanoActuel()].getHotspot(iNumHS).setRegardY(latitude); getPanoramiquesProjet()[getiPanoActuel()].getHotspot(iNumHS).setChampVisuel(fov); getPanoramiquesProjet()[getiPanoActuel()].getHotspot(iNumHS) .setImgVueHs(navigateurPano2.getImgVignetteHS()); ComboBox cbPanos = (ComboBox) vbOutils.lookup("#cbpano" + iNumHS); cbPanos.getSelectionModel().select(iNumeroPanoChoisitHS); aplistePano.setVisible(false); } mouseEvent.consume(); }); for (int i = 0; i < getiNombrePanoramiques(); i++) { int iNumeroPano1 = i; String strNomPano = getPanoramiquesProjet()[i].getStrNomFichier(); ivPano[ij] = new ImageView(getPanoramiquesProjet()[i].getImgVignettePanoramique()); ivPano[ij].setFitWidth(120); ivPano[ij].setFitHeight(60); ivPano[ij].setSmooth(true); int iCol = ij % 4; iRow = ij / 4; xPos = iCol * 130 + 25; yPos = iRow * 65 + 15; ivPano[ij].setLayoutX(xPos); ivPano[ij].setLayoutY(yPos); ivPano[ij].setCursor(Cursor.HAND); ivPano[ij].setStyle("-fx-background-color : #ccc;"); Tooltip tltpPano = new Tooltip( strNomPano.substring(strNomPano.lastIndexOf(File.separator) + 1, strNomPano.lastIndexOf("."))); tltpPano.setStyle(getStrTooltipStyle()); Tooltip.install(ivPano[ij], tltpPano); ivPano[ij].setOnMouseClicked((mouseEvent) -> { iNumeroPanoChoisitHS = iNumeroPano1; strNomPanoChoisitHS = getPanoramiquesProjet()[iNumeroPanoChoisitHS].getStrNomFichier(); navigateurPano2.setImagePanoramique( getPanoramiquesProjet()[iNumeroPanoChoisitHS].getStrNomFichier(), getPanoramiquesProjet()[iNumeroPanoChoisitHS].getImgVisuPanoramique()); navigateurPano2.setLongitude(getPanoramiquesProjet()[iNumeroPanoChoisitHS].getRegardX() - 180); navigateurPano2.setLatitude(getPanoramiquesProjet()[iNumeroPanoChoisitHS].getRegardY()); navigateurPano2.setFov(getPanoramiquesProjet()[iNumeroPanoChoisitHS].getChampVisuel()); navigateurPano2.affiche(); apVisuPanoHS.setDisable(false); }); aplistePano.getChildren().add(ivPano[ij]); ij++; } int iTaille = (iRow + 1) * 65 + 5; apVisuPanoHS.setLayoutY(iTaille + 10); iTaille += 320; apVisuPanoHS.setLayoutX((540 - apVisuPanoHS.getPrefWidth()) / 2.d); aplistePano.setPrefWidth(540); aplistePano.setPrefHeight(iTaille); aplistePano.setMinWidth(540); aplistePano.setMinHeight(iTaille); aplistePano.getChildren().add(apVisuPanoHS); ImageView ivClose = new ImageView( new Image("file:" + getStrRepertAppli() + File.separator + "images/ferme.png", 20, 20, true, true)); ivClose.setLayoutX(2); ivClose.setLayoutY(5); ivClose.setCursor(Cursor.HAND); aplistePano.getChildren().add(ivClose); ivClose.setOnMouseClicked((mouseEvent) -> { panePanoramique.setCursor(Cursor.CROSSHAIR); panePanoramique.setOnMouseClicked((mouseEvent1) -> { gereSourisPanoramique(mouseEvent1); }); setStrPanoListeVignette(""); aplistePano.setVisible(false); mouseEvent.consume(); }); return aplistePano; } /** * */ private static void valideHS() { for (int i = 0; i < getPanoramiquesProjet()[getiPanoActuel()].getNombreHotspots(); i++) { ComboBox cbPanos = (ComboBox) vbOutils.lookup("#cbpano" + i); TextField tfTexteHS = (TextField) vbOutils.lookup("#txtHS" + i); if (tfTexteHS != null) { getPanoramiquesProjet()[getiPanoActuel()].getHotspot(i).setStrInfo(tfTexteHS.getText()); } if (cbPanos != null) { getPanoramiquesProjet()[getiPanoActuel()].getHotspot(i) .setStrFichierXML(cbPanos.getValue() + ".xml"); getPanoramiquesProjet()[getiPanoActuel()].getHotspot(i) .setNumeroPano(cbPanos.getSelectionModel().getSelectedIndex()); } CheckBox cbAnime = (CheckBox) vbOutils.lookup("#anime" + i); if (cbAnime != null) { getPanoramiquesProjet()[getiPanoActuel()].getHotspot(i).setAnime(cbAnime.isSelected()); } } for (int i = 0; i < getPanoramiquesProjet()[getiPanoActuel()].getNombreHotspotImage(); i++) { TextField tfTexteHS = (TextField) vbOutils.lookup("#txtHSImage" + i); if (tfTexteHS != null) { getPanoramiquesProjet()[getiPanoActuel()].getHotspotImage(i).setStrInfo(tfTexteHS.getText()); } CheckBox cbAnime = (CheckBox) vbOutils.lookup("#animeImage" + i); if (cbAnime != null) { getPanoramiquesProjet()[getiPanoActuel()].getHotspotImage(i).setAnime(cbAnime.isSelected()); } } for (int i = 0; i < getPanoramiquesProjet()[getiPanoActuel()].getNombreHotspotHTML(); i++) { TextField tfTexteHS = (TextField) vbOutils.lookup("#txtHSHTML" + i); if (tfTexteHS != null) { getPanoramiquesProjet()[getiPanoActuel()].getHotspotHTML(i).setStrInfo(tfTexteHS.getText()); } CheckBox cbAnime = (CheckBox) vbOutils.lookup("#animeHTML" + i); if (cbAnime != null) { getPanoramiquesProjet()[getiPanoActuel()].getHotspotHTML(i).setAnime(cbAnime.isSelected()); } } for (int i = 0; i < getPanoramiquesProjet()[getiPanoActuel()].getiNombreHotspotDiapo(); i++) { TextField tfTexteHS = (TextField) vbOutils.lookup("#txtDIA" + i); if (tfTexteHS != null) { getPanoramiquesProjet()[getiPanoActuel()].getHotspotDiapo(i).setStrInfo(tfTexteHS.getText()); } CheckBox cbAnime = (CheckBox) vbOutils.lookup("#animeDIA" + i); if (cbAnime != null) { getPanoramiquesProjet()[getiPanoActuel()].getHotspotDiapo(i).setbAnime(cbAnime.isSelected()); } } } /** * * @param strLstPano * @param iNumPano * @return */ public static Pane paneAffichageHS(String strLstPano, int iNumPano) { Pane paneHotSpots = new Pane(); paneHotSpots.setTranslateY(10); paneHotSpots.setTranslateX(10); VBox vbHotspots = new VBox(5); paneHotSpots.getChildren().add(vbHotspots); Label lblPoint; int io; for (io = 0; io < getPanoramiquesProjet()[iNumPano].getNombreHotspots(); io++) { Label lblSep = new Label(" "); Label lblSep1 = new Label(" "); VBox vbPanneauHS = new VBox(); double deplacement = 0; vbPanneauHS.setLayoutX(deplacement); Pane paneHsPanoramique = new Pane(vbPanneauHS); paneHsPanoramique.setPrefHeight(300); paneHsPanoramique.setMinHeight(300); paneHsPanoramique.setMaxHeight(300); int iNum1 = io; Timeline timBouge = new Timeline(new KeyFrame(Duration.millis(500), (ActionEvent event) -> { Circle c1 = (Circle) panePanoramique.lookup("#point" + iNum1); if (c1 != null) { if (c1.getFill() == Color.RED) { c1.setFill(Color.YELLOW); c1.setStroke(Color.RED); } else { c1.setFill(Color.RED); c1.setStroke(Color.YELLOW); } } })); timBouge.setCycleCount(Timeline.INDEFINITE); timBouge.pause(); paneHsPanoramique.setOnMouseEntered((e) -> { timBouge.play(); }); paneHsPanoramique.setOnMouseExited((e) -> { timBouge.pause(); Circle c1 = (Circle) panePanoramique.lookup("#point" + iNum1); if (c1 != null) { c1.setFill(Color.YELLOW); c1.setStroke(Color.RED); } }); paneHsPanoramique .setStyle("-fx-border-color : #777777;-fx-border-width : 1px;-fx-border-radius : 3px;"); paneHsPanoramique.setId("HS" + io); lblPoint = new Label("Point #" + (io + 1)); lblPoint.setPadding(new Insets(5, 10, 5, 5)); lblPoint.setTranslateX(-deplacement); lblPoint.getStyleClass().add("titreOutil"); Separator sepHotspots = new Separator(Orientation.HORIZONTAL); sepHotspots.setTranslateX(-deplacement); sepHotspots.setPrefWidth(321); sepHotspots.setTranslateX(2); paneHsPanoramique.setPrefWidth(325); vbPanneauHS.getChildren().addAll(lblPoint, sepHotspots); if (strLstPano != null) { Label lblLien = new Label(rbLocalisation.getString("main.panoramiqueDestination")); lblLien.setTranslateX(10); ComboBox cbDestPano = new ComboBox(); String[] strListe = strLstPano.split(";"); cbDestPano.getItems().addAll(Arrays.asList(strListe)); int iNum11 = getPanoramiquesProjet()[iNumPano].getHotspot(io).getNumeroPano(); cbDestPano.setTranslateX(10); cbDestPano.setId("cbpano" + io); cbDestPano.getSelectionModel().select(iNum11); cbDestPano.getSelectionModel().selectedIndexProperty().addListener((ov, t, t1) -> { valideHS(); if (dejaCharge) { dejaCharge = false; retireAffichageHotSpots(); Pane affHS1 = paneAffichageHS(strListePano(), iNumPano); affHS1.setId("labels"); vbVisuHotspots.getChildren().add(affHS1); } }); if (iNum11 != -1) { int iNumPan = iNum11; ImageView ivAfficheVignettePano = new ImageView( getPanoramiquesProjet()[iNum11].getImgPanoRect()); ivAfficheVignettePano.setPreserveRatio(true); ivAfficheVignettePano.setFitWidth(300); ivAfficheVignettePano.setLayoutY(10); ivAfficheVignettePano.setCursor(Cursor.HAND); ivAfficheVignettePano.setOnMouseClicked((e) -> { affichePanoChoisit(iNumPan); }); AnchorPane apVisuVignettePano = new AnchorPane(ivAfficheVignettePano); apVisuVignettePano.setPrefHeight(170); apVisuVignettePano.setTranslateX(10); vbPanneauHS.getChildren().addAll(lblLien, cbDestPano, apVisuVignettePano, lblSep); } else { vbPanneauHS.getChildren().addAll(lblLien, cbDestPano, lblSep); } } Label lblTexteHS = new Label(rbLocalisation.getString("main.texteHotspot")); lblTexteHS.setTranslateX(10); TextField tfTexteHS = new TextField(); if (getPanoramiquesProjet()[iNumPano].getHotspot(io).getStrInfo() != null) { tfTexteHS.setText(getPanoramiquesProjet()[iNumPano].getHotspot(io).getStrInfo()); } tfTexteHS.textProperty().addListener((final ObservableValue<? extends String> observable, final String oldValue, final String newValue) -> { valideHS(); }); tfTexteHS.setId("txtHS" + io); tfTexteHS.setPrefSize(200, 25); tfTexteHS.setMaxSize(200, 20); tfTexteHS.setTranslateX(60); vbPanneauHS.getChildren().addAll(lblTexteHS, tfTexteHS, lblSep1); vbHotspots.getChildren().addAll(paneHsPanoramique, lblSep); } int iNbHS = io; int iTaillePane = io * 325; for (io = 0; io < getPanoramiquesProjet()[iNumPano].getNombreHotspotImage(); io++) { Label lblSep = new Label(" "); Label lblSep1 = new Label(" "); VBox vbPanneauHsImage = new VBox(); Pane paneHsImage = new Pane(vbPanneauHsImage); int iNum = io; Timeline timBouge = new Timeline(new KeyFrame(Duration.millis(500), (ActionEvent event) -> { Circle c1 = (Circle) panePanoramique.lookup("#img" + iNum); if (c1 != null) { if (c1.getFill() == Color.BLUE) { c1.setFill(Color.YELLOW); c1.setStroke(Color.BLUE); } else { c1.setFill(Color.BLUE); c1.setStroke(Color.YELLOW); } } })); timBouge.setCycleCount(Timeline.INDEFINITE); timBouge.pause(); paneHsImage.setOnMouseEntered((e) -> { timBouge.play(); }); paneHsImage.setOnMouseExited((e) -> { Circle c1 = (Circle) panePanoramique.lookup("#img" + iNum); if (c1 != null) { c1.setFill(Color.BLUE); c1.setStroke(Color.YELLOW); } timBouge.pause(); }); paneHsImage.setStyle("-fx-border-color : #777777;-fx-border-width : 1px;-fx-border-radius : 3px;"); paneHsImage.setId("HSImg" + io); lblPoint = new Label("Image #" + (io + 1)); lblPoint.setPadding(new Insets(5, 10, 5, 5)); lblPoint.getStyleClass().add("titreOutil"); Separator sepHS = new Separator(Orientation.HORIZONTAL); sepHS.setPrefWidth(321); sepHS.setTranslateX(2); paneHsImage.setPrefWidth(325); vbPanneauHsImage.getChildren().addAll(lblPoint, sepHS); Label lblLien = new Label(rbLocalisation.getString("main.imageChoisie")); lblLien.setTranslateX(10); String strF1XML = getPanoramiquesProjet()[iNumPano].getHotspotImage(io).getStrLienImg(); Image imgChoisie = new Image( "file:" + getStrRepertTemp() + File.separator + "images" + File.separator + strF1XML); ImageView ivChoisie = new ImageView(imgChoisie); ivChoisie.setTranslateX(100); ivChoisie.setFitWidth(100); ivChoisie.setFitHeight(imgChoisie.getHeight() / imgChoisie.getWidth() * 100); vbPanneauHsImage.getChildren().addAll(lblLien, ivChoisie, lblSep); Label lblTexteHS = new Label(rbLocalisation.getString("main.texteHotspot")); lblTexteHS.setTranslateX(10); TextField tfTexteHS = new TextField(); if (getPanoramiquesProjet()[iNumPano].getHotspotImage(io).getStrInfo() != null) { tfTexteHS.setText(getPanoramiquesProjet()[iNumPano].getHotspotImage(io).getStrInfo()); } tfTexteHS.textProperty().addListener((final ObservableValue<? extends String> observable, final String oldValue, final String newValue) -> { valideHS(); }); tfTexteHS.setId("txtHSImage" + io); tfTexteHS.setPrefSize(200, 25); tfTexteHS.setMaxSize(200, 20); tfTexteHS.setTranslateX(60); vbPanneauHsImage.getChildren().addAll(lblTexteHS, tfTexteHS, lblSep1); Label lblCoulFond = new Label(rbLocalisation.getString("diapo.couleurFond")); lblCoulFond.setTranslateX(10); Label lblOpacite = new Label(rbLocalisation.getString("diapo.opacite")); lblOpacite.setTranslateX(10); if (getPanoramiquesProjet()[iNumPano].getHotspotImage(io).getStrCouleurFond().equals("")) { getPanoramiquesProjet()[iNumPano].getHotspotImage(io).setStrCouleurFond( "#" + getGestionnaireInterface().getCouleurFondTheme().toString().substring(2, 8)); } ColorPicker cpCouleurFond = new ColorPicker( Color.valueOf(getPanoramiquesProjet()[iNumPano].getHotspotImage(io).getStrCouleurFond())); if (getPanoramiquesProjet()[iNumPano].getHotspotImage(io).getOpacite() == -1) { getPanoramiquesProjet()[iNumPano].getHotspotImage(io) .setOpacite(getGestionnaireInterface().getOpaciteTheme()); } cpCouleurFond.setTranslateX(100); int i = io; cpCouleurFond.valueProperty().addListener((ov, av, nv) -> { if (getiNombrePanoramiques() != 0) { setbDejaSauve(false); getStPrincipal().setTitle(getStPrincipal().getTitle().replace(" *", "") + " *"); } getPanoramiquesProjet()[iNumPano].getHotspotImage(i) .setStrCouleurFond("#" + cpCouleurFond.getValue().toString().substring(2, 8)); }); Slider slOpacite = new Slider(0, 1, getPanoramiquesProjet()[iNumPano].getHotspotImage(io).getOpacite()); slOpacite.valueProperty().addListener((ov, av, nv) -> { if (getiNombrePanoramiques() != 0) { setbDejaSauve(false); getStPrincipal().setTitle(getStPrincipal().getTitle().replace(" *", "") + " *"); } getPanoramiquesProjet()[iNumPano].getHotspotImage(i).setOpacite(slOpacite.getValue()); }); slOpacite.setTranslateX(100); slOpacite.setPrefWidth(130); slOpacite.setMinWidth(130); slOpacite.setMaxWidth(130); vbPanneauHsImage.getChildren().addAll(lblCoulFond, cpCouleurFond, lblOpacite, slOpacite); vbHotspots.getChildren().addAll(paneHsImage, lblSep); iTaillePane += 225 + ivChoisie.getFitHeight(); paneHsImage.setPrefHeight(200 + ivChoisie.getFitHeight()); paneHsImage.setMinHeight(200 + ivChoisie.getFitHeight()); paneHsImage.setMaxHeight(200 + ivChoisie.getFitHeight()); } iNbHS += io; for (io = 0; io < getPanoramiquesProjet()[iNumPano].getNombreHotspotHTML(); io++) { Label lblSep = new Label(" "); int iNum = io; VBox vbPanneauHS = new VBox(); Pane paneHsHtml = new Pane(vbPanneauHS); Timeline timBouge = new Timeline(new KeyFrame(Duration.millis(500), (ActionEvent event) -> { Circle c1 = (Circle) panePanoramique.lookup("#html" + iNum); if (c1 != null) { if (c1.getFill() == Color.DARKGREEN) { c1.setFill(Color.YELLOWGREEN); c1.setStroke(Color.DARKGREEN); } else { c1.setFill(Color.DARKGREEN); c1.setStroke(Color.YELLOWGREEN); } } })); timBouge.setCycleCount(Timeline.INDEFINITE); timBouge.pause(); paneHsHtml.setOnMouseEntered((e) -> { timBouge.play(); }); paneHsHtml.setOnMouseExited((e) -> { timBouge.pause(); Circle c1 = (Circle) panePanoramique.lookup("#html" + iNum); if (c1 != null) { c1.setFill(Color.DARKGREEN); c1.setStroke(Color.YELLOWGREEN); } }); paneHsHtml.setStyle("-fx-border-color : #777777;-fx-border-width : 1px;-fx-border-radius : 3px;"); paneHsHtml.setId("HSHTML" + io); lblPoint = new Label("Hotspot HTML #" + (io + 1)); lblPoint.setPadding(new Insets(5, 10, 5, 5)); lblPoint.getStyleClass().add("titreOutil"); Separator sepHS = new Separator(Orientation.HORIZONTAL); sepHS.setPrefWidth(321); sepHS.setTranslateX(2); paneHsHtml.setPrefWidth(325); Label lblTexteHS = new Label(rbLocalisation.getString("main.texteHotspot")); lblTexteHS.setTranslateX(10); TextField tfTexteHS = new TextField(); if (getPanoramiquesProjet()[iNumPano].getHotspotHTML(io).getStrInfo() != null) { tfTexteHS.setText(getPanoramiquesProjet()[iNumPano].getHotspotHTML(io).getStrInfo()); } tfTexteHS.textProperty().addListener((final ObservableValue<? extends String> observable, final String oldValue, final String newValue) -> { valideHS(); }); tfTexteHS.setId("txtHSHTML" + io); tfTexteHS.setPrefSize(200, 25); tfTexteHS.setMaxSize(200, 20); tfTexteHS.setTranslateX(60); vbPanneauHS.getChildren().addAll(lblPoint, sepHS, lblTexteHS, tfTexteHS); Button btnEditeHSHTML = new Button(rbLocalisation.getString("main.editeHTML")); btnEditeHSHTML.setPrefWidth(80); btnEditeHSHTML.setTranslateX(paneHsHtml.getPrefWidth() - btnEditeHSHTML.getPrefWidth() - 10); vbPanneauHS.getChildren().addAll(btnEditeHSHTML); btnEditeHSHTML.setOnAction((e) -> { EditeurHTML editHTML = new EditeurHTML(); HotspotHTML HS = getPanoramiquesProjet()[iNumPano].getHotspotHTML(iNum); editHTML.setHsHTML(HS); Rectangle2D tailleEcran = Screen.getPrimary().getBounds(); int iHauteur = (int) tailleEcran.getHeight() - 100; int iLargeur = (int) tailleEcran.getWidth() - 100; editHTML.affiche(iLargeur, iHauteur); editHTML.addPropertyChangeListener("bValide", (ev) -> { if (ev.getNewValue().toString().equals("true")) { getPanoramiquesProjet()[iNumPano].setHotspotHTML(editHTML.getHsHTML(), iNum); dejaCharge = false; retireAffichageHotSpots(); Pane affHS1 = paneAffichageHS(strListePano(), iNumPano); affHS1.setId("labels"); vbVisuHotspots.getChildren().add(affHS1); } }); }); vbHotspots.getChildren().addAll(paneHsHtml, lblSep); paneHsHtml.setPrefHeight(120); paneHsHtml.setMinHeight(120); paneHsHtml.setMaxHeight(120); iTaillePane += 145; } iNbHS += io; for (io = 0; io < getPanoramiquesProjet()[iNumPano].getiNombreHotspotDiapo(); io++) { Label lblSep = new Label(" "); int iNum = io; VBox vbPanneauHS = new VBox(); Pane paneHsDiapo = new Pane(vbPanneauHS); Timeline timBouge = new Timeline(new KeyFrame(Duration.millis(500), (ActionEvent event) -> { Circle c1 = (Circle) panePanoramique.lookup("#dia" + iNum); if (c1 != null) { if (c1.getFill() == Color.TURQUOISE) { c1.setFill(Color.ORANGE); c1.setStroke(Color.TURQUOISE); } else { c1.setFill(Color.TURQUOISE); c1.setStroke(Color.ORANGE); } } })); timBouge.setCycleCount(Timeline.INDEFINITE); timBouge.pause(); paneHsDiapo.setOnMouseEntered((e) -> { timBouge.play(); }); paneHsDiapo.setOnMouseExited((e) -> { timBouge.pause(); Circle c1 = (Circle) panePanoramique.lookup("#html" + iNum); if (c1 != null) { c1.setFill(Color.TURQUOISE); c1.setStroke(Color.ORANGE); } }); paneHsDiapo.setStyle("-fx-border-color : #777777;-fx-border-width : 1px;-fx-border-radius : 3px;"); paneHsDiapo.setId("DIAPO" + io); lblPoint = new Label("Hotspot Diaporama #" + (io + 1)); lblPoint.setPadding(new Insets(5, 10, 5, 5)); lblPoint.getStyleClass().add("titreOutil"); Separator sepHS = new Separator(Orientation.HORIZONTAL); sepHS.setPrefWidth(321); sepHS.setTranslateX(2); paneHsDiapo.setPrefWidth(325); Label lblTexteHS = new Label(rbLocalisation.getString("main.texteHotspot")); lblTexteHS.setTranslateX(10); TextField tfTexteHS = new TextField(); if (getPanoramiquesProjet()[iNumPano].getHotspotDiapo(io).getStrInfo() != null) { tfTexteHS.setText(getPanoramiquesProjet()[iNumPano].getHotspotDiapo(io).getStrInfo()); } tfTexteHS.textProperty().addListener((final ObservableValue<? extends String> observable, final String oldValue, final String newValue) -> { valideHS(); }); tfTexteHS.setId("txtDIA" + io); tfTexteHS.setPrefSize(200, 25); tfTexteHS.setMaxSize(200, 20); tfTexteHS.setTranslateX(60); vbPanneauHS.getChildren().addAll(lblPoint, sepHS, lblTexteHS, tfTexteHS); ComboBox cbListeDiapo = new ComboBox(); for (int i = 0; i < getiNombreDiapo(); i++) { cbListeDiapo.getItems().add(diaporamas[i].getStrNomDiaporama()); } cbListeDiapo.getSelectionModel() .select(getPanoramiquesProjet()[iNumPano].getHotspotDiapo(io).getiNumDiapo()); int iii = io; cbListeDiapo.getSelectionModel().selectedIndexProperty().addListener((ov, av, nv) -> { getPanoramiquesProjet()[iNumPano].getHotspotDiapo(iii).setiNumDiapo((int) nv); }); cbListeDiapo.setTranslateX(60); vbPanneauHS.getChildren().addAll(cbListeDiapo); //Ajouter Liste Diaporamas vbHotspots.getChildren().addAll(paneHsDiapo, lblSep); paneHsDiapo.setPrefHeight(120); paneHsDiapo.setMinHeight(120); paneHsDiapo.setMaxHeight(120); iTaillePane += 145; } valideHS(); iNbHS += io; dejaCharge = true; paneHotSpots.setPrefHeight(iTaillePane); paneHotSpots.setMinHeight(iTaillePane); paneHotSpots.setMaxHeight(iTaillePane); paneHotSpots.setId("labels"); apVisuHS.setPrefHeight(paneHotSpots.getPrefHeight()); apVisuHS.setMinHeight(paneHotSpots.getPrefHeight()); apVisuHS.setMaxHeight(paneHotSpots.getPrefHeight()); vbVisuHotspots.setPrefHeight(paneHotSpots.getPrefHeight()); vbVisuHotspots.setMinHeight(paneHotSpots.getPrefHeight()); vbVisuHotspots.setMaxHeight(paneHotSpots.getPrefHeight()); return paneHotSpots; } /** * */ private static void ajouteAffichageHotspots() { Pane paneLabels = (Pane) vbVisuHotspots.lookup("#labels"); vbVisuHotspots.getChildren().remove(paneLabels); dejaCharge = false; paneLabels = paneAffichageHS(strListePano(), getiPanoActuel()); paneLabels.setId("labels"); vbVisuHotspots.getChildren().add(paneLabels); setiNumPoints(getPanoramiquesProjet()[getiPanoActuel()].getNombreHotspots()); setiNumImages(getPanoramiquesProjet()[getiPanoActuel()].getNombreHotspotImage()); setiNumHTML(getPanoramiquesProjet()[getiPanoActuel()].getNombreHotspotHTML()); if (apHS1.getApOutil().isVisible()) { PaneOutil.deplieReplie(apHS1.getApOutil(), apHS1.getIvBtnPlusOutil()); PaneOutil.deplieReplie(apHS1.getApOutil(), apHS1.getIvBtnPlusOutil()); } } /** * * @return */ private static ScrollPane spAfficheLegende() { double positionX; double positionY; AnchorPane apLegende = new AnchorPane(); ScrollPane spLegende = new ScrollPane(apLegende); spLegende.getStyleClass().add("legendePane"); apLegende.setMinWidth(1000); apLegende.setMinHeight(150); apLegende.setPrefWidth(1000); apLegende.setPrefHeight(150); apLegende.setMaxWidth(1000); apLegende.setMaxHeight(150); positionY = (spVuePanoramique.getPrefHeight() - apLegende.getPrefHeight() - 15); Circle circPoint = new Circle(30, 20, 5); circPoint.setFill(Color.YELLOW); circPoint.setStroke(Color.RED); circPoint.setCursor(Cursor.DEFAULT); Circle circPoint2 = new Circle(30, 40, 5); circPoint2.setFill(Color.BLUE); circPoint2.setStroke(Color.YELLOW); circPoint2.setCursor(Cursor.DEFAULT); Circle circPoint3 = new Circle(30, 60, 5); circPoint3.setFill(Color.GREEN); circPoint3.setStroke(Color.YELLOW); circPoint3.setCursor(Cursor.DEFAULT); Polygon polygonCroix = new Polygon(); polygonCroix.getPoints().addAll(new Double[] { 15.0, 2.0, 2.0, 2.0, 2.0, 15.0, -2.0, 15.0, -2.0, 2.0, -15.0, 2.0, -15.0, -2.0, -2.0, -2.0, -2.0, -15.0, 2.0, -15.0, 2.0, -2.0, 15.0, -2.0 }); polygonCroix.setStrokeLineJoin(StrokeLineJoin.MITER); polygonCroix.setFill(Color.BLUEVIOLET); polygonCroix.setStroke(Color.YELLOW); polygonCroix.setId("PoV"); polygonCroix.setLayoutX(500); polygonCroix.setLayoutY(20); Label lblHS = new Label(rbLocalisation.getString("main.legendeHS")); Label lblHSImage = new Label(rbLocalisation.getString("main.legendeHSImage")); Label lblHSHTML = new Label(rbLocalisation.getString("main.legendeHSHTML")); Label lblPoV = new Label(rbLocalisation.getString("main.legendePoV")); Label lblNord = new Label(rbLocalisation.getString("main.legendeNord")); Line lineNord = new Line(500, 45, 500, 65); lineNord.setStroke(Color.RED); lineNord.setStrokeWidth(3); lblHS.setLayoutX(50); lblHS.setLayoutY(15); lblHSImage.setLayoutX(50); lblHSImage.setLayoutY(35); lblHSHTML.setLayoutX(50); lblHSHTML.setLayoutY(55); lblPoV.setLayoutX(520); lblPoV.setLayoutY(15); lblNord.setLayoutX(520); lblNord.setLayoutY(55); apLegende.getChildren().addAll(lblHS, circPoint, lblHSImage, circPoint2, lblHSHTML, circPoint3, lblPoV, polygonCroix, lblNord, lineNord); apLegende.setId("legende"); apLegende.setVisible(true); if (largeurMax - 50 < 1004) { spLegende.setPrefWidth(largeurMax - 50); spLegende.setMaxWidth(largeurMax - 50); positionX = 25; } else { spLegende.setPrefWidth(1004); spLegende.setMaxWidth(1004); positionX = (largeurMax - 1004) / 2.d; } spLegende.setLayoutX(positionX); spLegende.setLayoutY(positionY); spLegende.setVbarPolicy(ScrollPane.ScrollBarPolicy.NEVER); spLegende.setHbarPolicy(ScrollPane.ScrollBarPolicy.AS_NEEDED); return spLegende; } /** * * @param i * @param longitude * @param latitude */ private static void afficheHS(int i, double longitude, double latitude) { double largeur = ivImagePanoramique.getFitWidth(); double X = (longitude + 180.0d) * largeur / 360.0d + ivImagePanoramique.getLayoutX(); double Y = (90.0d - latitude) * largeur / 360.0d; Circle circPoint = new Circle(X, Y, 5); circPoint.setFill(Color.YELLOW); circPoint.setStroke(Color.RED); circPoint.setId("point" + i); circPoint.setCursor(Cursor.DEFAULT); panePanoramique.getChildren().add(circPoint); Tooltip tltpHotSpot = new Tooltip("point #" + (i + 1)); tltpHotSpot.setStyle(getStrTooltipStyle()); Tooltip.install(circPoint, tltpHotSpot); circPoint.setOnDragDetected((mouseEvent1) -> { circPoint.setFill(Color.RED); circPoint.setStroke(Color.YELLOW); bDragDrop = true; mouseEvent1.consume(); }); circPoint.setOnMouseDragged((mouseEvent1) -> { double XX = mouseEvent1.getX() - ivImagePanoramique.getLayoutX(); if (XX < 0) { XX = 0; } if (XX > ivImagePanoramique.getFitWidth()) { XX = ivImagePanoramique.getFitWidth(); } circPoint.setCenterX(XX + ivImagePanoramique.getLayoutX()); double YY = mouseEvent1.getY(); if (YY < 0) { YY = 0; } if (YY > ivImagePanoramique.getFitHeight()) { YY = ivImagePanoramique.getFitHeight(); } circPoint.setCenterY(YY); afficheLoupe(XX, YY); mouseEvent1.consume(); }); circPoint.setOnMouseReleased((mouseEvent1) -> { String strChPoint = circPoint.getId(); strChPoint = strChPoint.substring(5, strChPoint.length()); int iNumeroPoint = Integer.parseInt(strChPoint); double X1 = mouseEvent1.getSceneX(); double Y1 = mouseEvent1.getSceneY(); double mouseX = X1 - ivImagePanoramique.getLayoutX(); if (mouseX < 0) { mouseX = 0; } if (mouseX > ivImagePanoramique.getFitWidth()) { mouseX = ivImagePanoramique.getFitWidth(); } double mouseY = Y1 - panePanoramique.getLayoutY() - 130 - getiDecalageMac(); if (mouseY < 0) { mouseY = 0; } if (mouseY > ivImagePanoramique.getFitHeight()) { mouseY = ivImagePanoramique.getFitHeight(); } double longit, lat; double larg = ivImagePanoramique.getFitWidth(); String strLong, strLat; longit = 360.0f * mouseX / larg - 180; lat = 90.0d - 2.0f * mouseY / larg * 180.0f; getPanoramiquesProjet()[getiPanoActuel()].getHotspot(iNumeroPoint).setLatitude(lat); getPanoramiquesProjet()[getiPanoActuel()].getHotspot(iNumeroPoint).setLongitude(longit); circPoint.setFill(Color.YELLOW); circPoint.setStroke(Color.RED); mouseEvent1.consume(); }); circPoint.setOnMouseClicked((mouseEvent1) -> { String strPoint = circPoint.getId(); strPoint = strPoint.substring(5, strPoint.length()); int numeroPoint = Integer.parseInt(strPoint); Node nodePoint; nodePoint = (Node) panePanoramique.lookup("#point" + strPoint); if (mouseEvent1.isControlDown()) { setbDejaSauve(false); getStPrincipal().setTitle(getStPrincipal().getTitle().replace(" *", "") + " *"); panePanoramique.getChildren().remove(nodePoint); for (int io = numeroPoint + 1; io < getiNumPoints(); io++) { nodePoint = (Node) panePanoramique.lookup("#point" + Integer.toString(io)); nodePoint.setId("point" + Integer.toString(io - 1)); } /** * on retire les anciennes indication de HS */ dejaCharge = false; retireAffichageHotSpots(); setiNumPoints(getiNumPoints() - 1); getPanoramiquesProjet()[getiPanoActuel()].removeHotspot(numeroPoint); /** * On les cre les nouvelles */ ajouteAffichageHotspots(); mouseEvent1.consume(); valideHS(); } else { if (!bDragDrop) { if (getiNombrePanoramiques() > 1) { AnchorPane apListePanoVig = apAfficherListePanosVignettes(numeroPoint); double positX = (panePanoramique.getPrefWidth() - apListePanoVig.getPrefWidth()) / 2.d; double positY = (panePanoramique.getPrefHeight() - apListePanoVig.getPrefHeight()) / 2.d; apListePanoVig.setLayoutX(positX); apListePanoVig.setLayoutY(positY); apPanneauPrincipal.getChildren().add(apListePanoVig); } } else { bDragDrop = false; } valideHS(); mouseEvent1.consume(); } }); } /** * * @param i * @param longitude * @param latitude */ private static void afficheHSImage(int i, double longitude, double latitude) { double largeur = ivImagePanoramique.getFitWidth(); double X = (longitude + 180.0d) * largeur / 360.0d + ivImagePanoramique.getLayoutX(); double Y = (90.0d - latitude) * largeur / 360.0d; Circle circPoint = new Circle(X, Y, 5); circPoint.setFill(Color.BLUE); circPoint.setStroke(Color.YELLOW); circPoint.setId("img" + i); circPoint.setCursor(Cursor.DEFAULT); panePanoramique.getChildren().add(circPoint); Tooltip tltpHSImage = new Tooltip("image #" + (i + 1)); tltpHSImage.setStyle(getStrTooltipStyle()); Tooltip.install(circPoint, tltpHSImage); circPoint.setOnDragDetected((mouseEvent1) -> { circPoint.setFill(Color.YELLOW); circPoint.setStroke(Color.BLUE); bDragDrop = true; mouseEvent1.consume(); }); circPoint.setOnMouseDragged((mouseEvent1) -> { double XX = mouseEvent1.getX() - ivImagePanoramique.getLayoutX(); if (XX < 0) { XX = 0; } if (XX > ivImagePanoramique.getFitWidth()) { XX = ivImagePanoramique.getFitWidth(); } circPoint.setCenterX(XX + ivImagePanoramique.getLayoutX()); double YY = mouseEvent1.getY(); if (YY < 0) { YY = 0; } if (YY > ivImagePanoramique.getFitHeight()) { YY = ivImagePanoramique.getFitHeight(); } circPoint.setCenterY(YY); afficheLoupe(XX, YY); mouseEvent1.consume(); }); circPoint.setOnMouseReleased((mouseEvent1) -> { String strPoint = circPoint.getId(); strPoint = strPoint.substring(3, strPoint.length()); int iNumeroPoint = Integer.parseInt(strPoint); double X1 = mouseEvent1.getSceneX(); double Y1 = mouseEvent1.getSceneY(); double mouseX = X1 - ivImagePanoramique.getLayoutX(); if (mouseX < 0) { mouseX = 0; } if (mouseX > ivImagePanoramique.getFitWidth()) { mouseX = ivImagePanoramique.getFitWidth(); } double mouseY = Y1 - panePanoramique.getLayoutY() - 130 - getiDecalageMac(); if (mouseY < 0) { mouseY = 0; } if (mouseY > ivImagePanoramique.getFitHeight()) { mouseY = ivImagePanoramique.getFitHeight(); } double longit, lat; double larg = ivImagePanoramique.getFitWidth(); String strLong, strLat; longit = 360.0f * mouseX / larg - 180; lat = 90.0d - 2.0f * mouseY / larg * 180.0f; getPanoramiquesProjet()[getiPanoActuel()].getHotspotImage(iNumeroPoint).setLatitude(lat); getPanoramiquesProjet()[getiPanoActuel()].getHotspotImage(iNumeroPoint).setLongitude(longit); circPoint.setFill(Color.BLUE); circPoint.setStroke(Color.YELLOW); mouseEvent1.consume(); }); circPoint.setOnMouseClicked((mouseEvent1) -> { String strPoint = circPoint.getId(); strPoint = strPoint.substring(3, strPoint.length()); int iNum = Integer.parseInt(strPoint); Node nodePointImage; nodePointImage = (Node) panePanoramique.lookup("#img" + strPoint); if (mouseEvent1.isControlDown()) { valideHS(); setbDejaSauve(false); getStPrincipal().setTitle(getStPrincipal().getTitle().replace(" *", "") + " *"); panePanoramique.getChildren().remove(nodePointImage); for (int io = iNum + 1; io < getiNumImages(); io++) { nodePointImage = (Node) panePanoramique.lookup("#img" + Integer.toString(io)); nodePointImage.setId("img" + Integer.toString(io - 1)); } /** * on retire les anciennes indication de HS */ retireAffichageHotSpots(); setiNumImages(getiNumImages() - 1); getPanoramiquesProjet()[getiPanoActuel()].removeHotspotImage(iNum); /** * On les cre les nouvelles */ ajouteAffichageHotspots(); mouseEvent1.consume(); } else { if (!bDragDrop) { File fileRepert; if (getStrRepertHSImages().equals("")) { fileRepert = new File(getStrCurrentDir() + File.separator); } else { fileRepert = new File(getStrRepertHSImages()); } FileChooser fileChooser = new FileChooser(); FileChooser.ExtensionFilter extFilterImages = new FileChooser.ExtensionFilter( "Fichiers Images (jpg, bmp, png)", "*.jpg", "*.bmp", "*.png"); fileChooser.setInitialDirectory(fileRepert); fileChooser.getExtensionFilters().addAll(extFilterImages); File fileFichierImage = fileChooser.showOpenDialog(null); if (fileFichierImage != null) { setStrRepertHSImages(fileFichierImage.getParent()); HotspotImage HS = getPanoramiquesProjet()[getiPanoActuel()].getHotspotImage(iNum); HS.setStrUrlImage(fileFichierImage.getAbsolutePath()); HS.setStrLienImg(fileFichierImage.getName()); HS.setStrInfo(fileFichierImage.getName().split("\\.")[0]); File fileRepertImage = new File(getStrRepertTemp() + File.separator + "images"); if (!fileRepertImage.exists()) { fileRepertImage.mkdirs(); } try { copieFichierRepertoire(fileFichierImage.getAbsolutePath(), fileRepertImage.getAbsolutePath()); } catch (IOException ex) { Logger.getLogger(EditeurPanovisu.class.getName()).log(Level.SEVERE, null, ex); } getPanoramiquesProjet()[getiPanoActuel()].setHotspotImage(HS, iNum); retireAffichageHotSpots(); Pane affHS1 = paneAffichageHS(strListePano(), getiPanoActuel()); affHS1.setId("labels"); vbVisuHotspots.getChildren().add(affHS1); } } else { bDragDrop = false; } mouseEvent1.consume(); } }); } /** * * @param i * @param longitude * @param latitude */ private static void afficheHSDiapo(int i, double longitude, double latitude) { double largeur = ivImagePanoramique.getFitWidth(); double X = (longitude + 180.0d) * largeur / 360.0d + ivImagePanoramique.getLayoutX(); double Y = (90.0d - latitude) * largeur / 360.0d; Circle circPoint = new Circle(X, Y, 5); circPoint.setFill(Color.TURQUOISE); circPoint.setStroke(Color.ORANGE); circPoint.setId("dia" + i); circPoint.setCursor(Cursor.DEFAULT); panePanoramique.getChildren().add(circPoint); Tooltip tltpHSImage = new Tooltip("Diaporama #" + (i + 1)); tltpHSImage.setStyle(getStrTooltipStyle()); Tooltip.install(circPoint, tltpHSImage); circPoint.setOnDragDetected((mouseEvent1) -> { circPoint.setFill(Color.ORANGE); circPoint.setStroke(Color.TURQUOISE); bDragDrop = true; mouseEvent1.consume(); }); circPoint.setOnMouseDragged((mouseEvent1) -> { double XX = mouseEvent1.getX() - ivImagePanoramique.getLayoutX(); if (XX < 0) { XX = 0; } if (XX > ivImagePanoramique.getFitWidth()) { XX = ivImagePanoramique.getFitWidth(); } circPoint.setCenterX(XX + ivImagePanoramique.getLayoutX()); double YY = mouseEvent1.getY(); if (YY < 0) { YY = 0; } if (YY > ivImagePanoramique.getFitHeight()) { YY = ivImagePanoramique.getFitHeight(); } circPoint.setCenterY(YY); afficheLoupe(XX, YY); mouseEvent1.consume(); }); circPoint.setOnMouseReleased((mouseEvent1) -> { String strPoint = circPoint.getId(); strPoint = strPoint.substring(3, strPoint.length()); int iNumeroPoint = Integer.parseInt(strPoint); double X1 = mouseEvent1.getSceneX(); double Y1 = mouseEvent1.getSceneY(); double mouseX = X1 - ivImagePanoramique.getLayoutX(); if (mouseX < 0) { mouseX = 0; } if (mouseX > ivImagePanoramique.getFitWidth()) { mouseX = ivImagePanoramique.getFitWidth(); } double mouseY = Y1 - panePanoramique.getLayoutY() - 130 - getiDecalageMac(); if (mouseY < 0) { mouseY = 0; } if (mouseY > ivImagePanoramique.getFitHeight()) { mouseY = ivImagePanoramique.getFitHeight(); } double longit, lat; double larg = ivImagePanoramique.getFitWidth(); String strLong, strLat; longit = 360.0f * mouseX / larg - 180; lat = 90.0d - 2.0f * mouseY / larg * 180.0f; getPanoramiquesProjet()[getiPanoActuel()].getHotspotDiapo(iNumeroPoint).setLatitude(lat); getPanoramiquesProjet()[getiPanoActuel()].getHotspotDiapo(iNumeroPoint).setLongitude(longit); circPoint.setFill(Color.TURQUOISE); circPoint.setStroke(Color.ORANGE); mouseEvent1.consume(); }); circPoint.setOnMouseClicked((mouseEvent1) -> { String strPoint = circPoint.getId(); strPoint = strPoint.substring(3, strPoint.length()); int iNum = Integer.parseInt(strPoint); Node nodePointDiapo; nodePointDiapo = (Node) panePanoramique.lookup("#dia" + strPoint); if (mouseEvent1.isControlDown()) { valideHS(); setbDejaSauve(false); getStPrincipal().setTitle(getStPrincipal().getTitle().replace(" *", "") + " *"); panePanoramique.getChildren().remove(nodePointDiapo); for (int io = iNum + 1; io < getiNumDiapo(); io++) { nodePointDiapo = (Node) panePanoramique.lookup("#dia" + Integer.toString(io)); nodePointDiapo.setId("dia" + Integer.toString(io - 1)); } /** * on retire les anciennes indication de HS */ retireAffichageHotSpots(); setiNumDiapo(getiNumDiapo() - 1); getPanoramiquesProjet()[getiPanoActuel()].removeHotspotdiapo(iNum); /** * On les cre les nouvelles */ ajouteAffichageHotspots(); mouseEvent1.consume(); } else { if (!bDragDrop) { List<String> choixDiapo1 = new ArrayList<>(); for (int ii = 0; ii < getiNombreDiapo(); ii++) { choixDiapo1.add(diaporamas[ii].getStrNomDiaporama()); } ChoiceDialog<String> dialog1 = new ChoiceDialog<>( diaporamas[getPanoramiquesProjet()[getiPanoActuel()].getHotspotDiapo(iNum) .getiNumDiapo()].getStrNomDiaporama(), choixDiapo1); dialog1.setTitle(rbLocalisation.getString("main.choixDiapo")); dialog1.setHeaderText(null); dialog1.setContentText(rbLocalisation.getString("main.diapos")); // Traditional way to get the response value. Optional<String> result1 = dialog1.showAndWait(); if (result1.isPresent()) { boolean bTrouve = false; int iTrouve = -1; for (int ii = 0; ii < getiNombreDiapo(); ii++) { if (diaporamas[ii].getStrNomDiaporama().equals(result1.get())) { bTrouve = true; iTrouve = ii; } } if (bTrouve) { retireAffichageHotSpots(); getPanoramiquesProjet()[getiPanoActuel()].getHotspotDiapo(iNum).setiNumDiapo(iTrouve); valideHS(); ajouteAffichageHotspots(); } } } else { bDragDrop = false; } mouseEvent1.consume(); } }); } /** * * @param i * @param longitude * @param latitude */ private static void afficheHSHTML(int i, double longitude, double latitude) { double largeur = ivImagePanoramique.getFitWidth(); double X = (longitude + 180.0d) * largeur / 360.0d + ivImagePanoramique.getLayoutX(); double Y = (90.0d - latitude) * largeur / 360.0d; Circle circPoint = new Circle(X, Y, 5); circPoint.setFill(Color.DARKGREEN); circPoint.setStroke(Color.YELLOWGREEN); circPoint.setId("html" + i); circPoint.setCursor(Cursor.DEFAULT); panePanoramique.getChildren().add(circPoint); Tooltip tltpHSImage = new Tooltip("HTML #" + (i + 1)); tltpHSImage.setStyle(getStrTooltipStyle()); Tooltip.install(circPoint, tltpHSImage); circPoint.setOnDragDetected((mouseEvent1) -> { circPoint.setFill(Color.YELLOWGREEN); circPoint.setStroke(Color.DARKGREEN); bDragDrop = true; mouseEvent1.consume(); }); circPoint.setOnMouseDragged((mouseEvent1) -> { double XX = mouseEvent1.getX() - ivImagePanoramique.getLayoutX(); if (XX < 0) { XX = 0; } if (XX > ivImagePanoramique.getFitWidth()) { XX = ivImagePanoramique.getFitWidth(); } circPoint.setCenterX(XX + ivImagePanoramique.getLayoutX()); double YY = mouseEvent1.getY(); if (YY < 0) { YY = 0; } if (YY > ivImagePanoramique.getFitHeight()) { YY = ivImagePanoramique.getFitHeight(); } circPoint.setCenterY(YY); afficheLoupe(XX, YY); mouseEvent1.consume(); }); circPoint.setOnMouseReleased((mouseEvent1) -> { String strPoint = circPoint.getId(); strPoint = strPoint.substring(4, strPoint.length()); int iNumeroPoint = Integer.parseInt(strPoint); double X1 = mouseEvent1.getSceneX(); double Y1 = mouseEvent1.getSceneY(); double mouseX = X1 - ivImagePanoramique.getLayoutX(); if (mouseX < 0) { mouseX = 0; } if (mouseX > ivImagePanoramique.getFitWidth()) { mouseX = ivImagePanoramique.getFitWidth(); } double mouseY = Y1 - panePanoramique.getLayoutY() - 130 - getiDecalageMac(); if (mouseY < 0) { mouseY = 0; } if (mouseY > ivImagePanoramique.getFitHeight()) { mouseY = ivImagePanoramique.getFitHeight(); } double longit, lat; double larg = ivImagePanoramique.getFitWidth(); String strLong, strLat; longit = 360.0f * mouseX / larg - 180; lat = 90.0d - 2.0f * mouseY / larg * 180.0f; getPanoramiquesProjet()[getiPanoActuel()].getHotspotHTML(iNumeroPoint).setLatitude(lat); getPanoramiquesProjet()[getiPanoActuel()].getHotspotHTML(iNumeroPoint).setLongitude(longit); circPoint.setFill(Color.DARKGREEN); circPoint.setStroke(Color.YELLOWGREEN); mouseEvent1.consume(); }); circPoint.setOnMouseClicked((mouseEvent1) -> { String strPoint = circPoint.getId(); strPoint = strPoint.substring(4, strPoint.length()); int iNum = Integer.parseInt(strPoint); Node nodePointImage; nodePointImage = (Node) panePanoramique.lookup("#html" + strPoint); if (mouseEvent1.isControlDown()) { valideHS(); setbDejaSauve(false); getStPrincipal().setTitle(getStPrincipal().getTitle().replace(" *", "") + " *"); panePanoramique.getChildren().remove(nodePointImage); for (int io = iNum + 1; io < getiNumImages(); io++) { nodePointImage = (Node) panePanoramique.lookup("#html" + Integer.toString(io)); nodePointImage.setId("img" + Integer.toString(io - 1)); } /** * on retire les anciennes indication de HS */ retireAffichageHotSpots(); setiNumHTML(getiNumHTML() - 1); getPanoramiquesProjet()[getiPanoActuel()].removeHotspotHTML(iNum); /** * On les cre les nouvelles */ ajouteAffichageHotspots(); mouseEvent1.consume(); } else { if (!bDragDrop) { EditeurHTML editHTML = new EditeurHTML(); HotspotHTML HS = getPanoramiquesProjet()[getiPanoActuel()].getHotspotHTML(iNum); editHTML.setHsHTML(HS); Rectangle2D tailleEcran = Screen.getPrimary().getBounds(); int iHauteur = (int) tailleEcran.getHeight() - 100; int iLargeur = (int) tailleEcran.getWidth() - 100; editHTML.affiche(iLargeur, iHauteur); editHTML.addPropertyChangeListener("bValide", (ev) -> { if (ev.getNewValue().toString().equals("true")) { getPanoramiquesProjet()[getiPanoActuel()].setHotspotHTML(editHTML.getHsHTML(), iNum); dejaCharge = false; retireAffichageHotSpots(); Pane affHS1 = paneAffichageHS(strListePano(), getiPanoActuel()); affHS1.setId("labels"); vbVisuHotspots.getChildren().add(affHS1); } }); } else { bDragDrop = false; } mouseEvent1.consume(); } }); } /** * */ private static void ajouteAffichagePointsHotspots() { for (int i = 0; i < getPanoramiquesProjet()[getiPanoActuel()].getNombreHotspots(); i++) { double longitude = getPanoramiquesProjet()[getiPanoActuel()].getHotspot(i).getLongitude(); double latitude = getPanoramiquesProjet()[getiPanoActuel()].getHotspot(i).getLatitude(); afficheHS(i, longitude, latitude); } setiNumPoints(getPanoramiquesProjet()[getiPanoActuel()].getNombreHotspots()); } /** * */ private static void ajouteAffichagePointsHotspotsImage() { for (int i = 0; i < getPanoramiquesProjet()[getiPanoActuel()].getNombreHotspotImage(); i++) { double longitude = getPanoramiquesProjet()[getiPanoActuel()].getHotspotImage(i).getLongitude(); double latitude = getPanoramiquesProjet()[getiPanoActuel()].getHotspotImage(i).getLatitude(); afficheHSImage(i, longitude, latitude); } setiNumImages(getPanoramiquesProjet()[getiPanoActuel()].getNombreHotspotImage()); } /** * */ private static void ajouteAffichagePointsHotspotsDiapo() { for (int i = 0; i < getPanoramiquesProjet()[getiPanoActuel()].getiNombreHotspotDiapo(); i++) { double longitude = getPanoramiquesProjet()[getiPanoActuel()].getHotspotDiapo(i).getLongitude(); double latitude = getPanoramiquesProjet()[getiPanoActuel()].getHotspotDiapo(i).getLatitude(); afficheHSDiapo(i, longitude, latitude); } setiNumDiapo(getPanoramiquesProjet()[getiPanoActuel()].getiNombreHotspotDiapo()); } /** * */ private static void ajouteAffichagePointsHotspotsHTML() { for (int i = 0; i < getPanoramiquesProjet()[getiPanoActuel()].getNombreHotspotHTML(); i++) { double longitude = getPanoramiquesProjet()[getiPanoActuel()].getHotspotHTML(i).getLongitude(); double latitude = getPanoramiquesProjet()[getiPanoActuel()].getHotspotHTML(i).getLatitude(); afficheHSHTML(i, longitude, latitude); } setiNumHTML(getPanoramiquesProjet()[getiPanoActuel()].getNombreHotspotHTML()); } /** * */ private void sauveFichiers() throws IOException { if (!isbDejaSauve()) { projetSauve(); } } /** * * @param X * @param Y */ private static void panoChoixRegard(double X, double Y) { if (X > 0 && X < ivImagePanoramique.getFitWidth()) { double mouseX = X; double mouseY = Y - panePanoramique.getLayoutY() - 130; double largeur = ivImagePanoramique.getFitWidth(); double regardX = 360.0f * mouseX / largeur - 180; double regardY = 90.0d - 2.0f * mouseY / largeur * 180.0f; getPanoramiquesProjet()[getiPanoActuel()].setRegardX(regardX); getPanoramiquesProjet()[getiPanoActuel()].setRegardY(regardY); navigateurPanoramique.setLongitude(regardX - 180); navigateurPanoramique.setLatitude(regardY); navigateurPanoramique.setFov(getPanoramiquesProjet()[getiPanoActuel()].getChampVisuel()); navigateurPanoramique.affiche(); affichePoV(regardX, regardY, getPanoramiquesProjet()[getiPanoActuel()].getChampVisuel()); } } /** * * @param X */ private static void panoChoixNord(double X) { if (X > 0 && X < ivImagePanoramique.getFitWidth()) { double mouseX = X; double largeur = ivImagePanoramique.getFitWidth(); double regardX = 360.0f * mouseX / largeur - 180; getPanoramiquesProjet()[getiPanoActuel()].setZeroNord(regardX); navigateurPanoramique.setPositNord(regardX - 180); navigateurPanoramique.affiche(); afficheNord(regardX); } } /** * * @param longitude */ private static void afficheNord(double longitude) { double largeur = ivImagePanoramique.getFitWidth(); double X = (longitude + 180.0d) * largeur / 360.0d + ivImagePanoramique.getLayoutX(); Node nodeAncienNord = (Node) panePanoramique.lookup("#Nord"); if (nodeAncienNord != null) { panePanoramique.getChildren().remove(nodeAncienNord); } Line lineNord = new Line(0, 0, 0, ivImagePanoramique.getFitHeight()); lineNord.setCursor(Cursor.DEFAULT); lineNord.setLayoutX(X); lineNord.setStroke(Color.RED); lineNord.setStrokeWidth(4); lineNord.setId("Nord"); lineNord.setOnDragDetected((mouseEvent1) -> { lineNord.setStroke(Color.BLUEVIOLET); bDragDrop = true; mouseEvent1.consume(); }); lineNord.setOnMouseDragged((me1) -> { double XX = me1.getSceneX() - ivImagePanoramique.getLayoutX(); if (XX < 0) { XX = 0; } if (XX > ivImagePanoramique.getFitWidth()) { XX = ivImagePanoramique.getFitWidth(); } lineNord.setLayoutX(XX + ivImagePanoramique.getLayoutX()); me1.consume(); double YY = me1.getY(); afficheLoupe(XX, YY); }); lineNord.setOnMouseReleased((me1) -> { double X1 = me1.getSceneX(); double mouseX1 = X1 - ivImagePanoramique.getLayoutX(); if (mouseX1 < 0) { mouseX1 = 0; } if (mouseX1 > ivImagePanoramique.getFitWidth()) { mouseX1 = ivImagePanoramique.getFitWidth(); } double regardX = 360.0f * mouseX1 / largeur - 180; navigateurPanoramique.setPositNord(regardX - 180); navigateurPanoramique.affiche(); getPanoramiquesProjet()[getiPanoActuel()].setZeroNord(regardX); lineNord.setStroke(Color.RED); me1.consume(); }); panePanoramique.getChildren().add(lineNord); } /** * Affiche la croix reprsentant le point de vue * * @param longitude longitude * @param latitude latitude * @param fov Champ de vision */ private static void affichePoV(double longitude, double latitude, double fov) { double largeur = ivImagePanoramique.getFitWidth(); double X = (longitude + 180.0d) * largeur / 360.0d + ivImagePanoramique.getLayoutX(); double Y = (90.0d - latitude) * largeur / 360.0d; Node nodeAncienPoV = (Node) panePanoramique.lookup("#PoV"); if (nodeAncienPoV != null) { panePanoramique.getChildren().remove(nodeAncienPoV); } Polygon plgPoV = new Polygon(); plgPoV.getPoints().addAll(new Double[] { 20.0, 2.0, 2.0, 2.0, 2.0, 20.0, -2.0, 20.0, -2.0, 2.0, -20.0, 2.0, -20.0, -2.0, -2.0, -2.0, -2.0, -20.0, 2.0, -20.0, 2.0, -2.0, 20.0, -2.0 }); plgPoV.setStrokeLineJoin(StrokeLineJoin.MITER); plgPoV.setFill(Color.BLUEVIOLET); plgPoV.setStroke(Color.YELLOW); plgPoV.setId("PoV"); plgPoV.setLayoutX(X); plgPoV.setLayoutY(Y); plgPoV.setCursor(Cursor.DEFAULT); plgPoV.setOnDragDetected((mouseEvent1) -> { plgPoV.setFill(Color.YELLOW); plgPoV.setStroke(Color.BLUEVIOLET); bDragDrop = true; mouseEvent1.consume(); }); plgPoV.setOnMouseDragged((mouseEvent1) -> { double XX = mouseEvent1.getSceneX() - ivImagePanoramique.getLayoutX(); if (XX < 0) { XX = 0; } if (XX > ivImagePanoramique.getFitWidth()) { XX = ivImagePanoramique.getFitWidth(); } plgPoV.setLayoutX(XX + ivImagePanoramique.getLayoutX()); double YY = mouseEvent1.getSceneY() - panePanoramique.getLayoutY() - 130 - getiDecalageMac(); if (YY < 0) { YY = 0; } if (YY > ivImagePanoramique.getFitHeight()) { YY = ivImagePanoramique.getFitHeight(); } plgPoV.setLayoutY(YY); afficheLoupe(XX, YY); mouseEvent1.consume(); }); plgPoV.setOnMouseReleased((mouseEvent1) -> { double X1 = mouseEvent1.getSceneX(); double Y1 = mouseEvent1.getSceneY(); double mouseX1 = X1 - ivImagePanoramique.getLayoutX(); if (mouseX1 < 0) { mouseX1 = 0; } if (mouseX1 > ivImagePanoramique.getFitWidth()) { mouseX1 = ivImagePanoramique.getFitWidth(); } double mouseY1 = Y1 - panePanoramique.getLayoutY() - 130 - getiDecalageMac(); if (mouseY1 < 0) { mouseY1 = 0; } if (mouseY1 > ivImagePanoramique.getFitHeight()) { mouseY1 = ivImagePanoramique.getFitHeight(); } double regardX = 360.0f * mouseX1 / largeur - 180; double regardY = 90.0d - 2.0f * mouseY1 / largeur * 180.0f; navigateurPanoramique.setLongitude(regardX - 180); navigateurPanoramique.setLatitude(regardY); navigateurPanoramique.setFov(fov); navigateurPanoramique.affiche(); getPanoramiquesProjet()[getiPanoActuel()].setRegardX(regardX); getPanoramiquesProjet()[getiPanoActuel()].setRegardY(regardY); plgPoV.setFill(Color.BLUEVIOLET); plgPoV.setStroke(Color.YELLOW); mouseEvent1.consume(); }); panePanoramique.getChildren().add(plgPoV); } /** * * @param X * @param Y */ private static void panoMouseClic(double X, double Y) { if (getiNombrePanoramiques() > 1) { valideHS(); setbDejaSauve(false); getStPrincipal().setTitle(getStPrincipal().getTitle().replace(" *", "") + " *"); double mouseX = X; double mouseY = Y - panePanoramique.getLayoutY() - 130 - getiDecalageMac(); if (X > 0 && X < ivImagePanoramique.getFitWidth()) { double longitude, latitude; double largeur = ivImagePanoramique.getFitWidth(); String strLong, strLat; longitude = 360.0f * mouseX / largeur - 180; latitude = 90.0d - 2.0f * mouseY / largeur * 180.0f; Circle circPoint = new Circle(mouseX + ivImagePanoramique.getLayoutX(), mouseY, 5); circPoint.setFill(Color.YELLOW); circPoint.setStroke(Color.RED); circPoint.setId("point" + getiNumPoints()); circPoint.setCursor(Cursor.DEFAULT); panePanoramique.getChildren().add(circPoint); Tooltip tltpPoint = new Tooltip("point n" + (getiNumPoints() + 1)); tltpPoint.setStyle(getStrTooltipStyle()); Tooltip.install(circPoint, tltpPoint); HotSpot HS = new HotSpot(); HS.setLongitude(longitude); HS.setLatitude(latitude); getPanoramiquesProjet()[getiPanoActuel()].addHotspot(HS); retireAffichageHotSpots(); dejaCharge = false; Pane paneAfficheHS1 = paneAffichageHS(strListePano(), getiPanoActuel()); paneAfficheHS1.setId("labels"); vbVisuHotspots.getChildren().add(paneAfficheHS1); spPanneauOutils.setVvalue(spPanneauOutils.getVvalue() + 300); setiNumPoints(getiNumPoints() + 1); if (getiNombrePanoramiques() > 1) { AnchorPane apListePanoVig = apAfficherListePanosVignettes( getPanoramiquesProjet()[getiPanoActuel()].getNombreHotspots() - 1); double positX = (panePanoramique.getPrefWidth() - apListePanoVig.getPrefWidth()) / 2.d; double positY = (panePanoramique.getPrefHeight() - apListePanoVig.getPrefHeight()) / 2.d; apListePanoVig.setLayoutX(positX); apListePanoVig.setLayoutY(positY); apPanneauPrincipal.getChildren().add(apListePanoVig); valideHS(); } circPoint.setOnDragDetected((mouseEvent1) -> { String strPoint = circPoint.getId(); strPoint = strPoint.substring(5, strPoint.length()); int numeroPoint = Integer.parseInt(strPoint); Node nodePoint; nodePoint = (Node) panePanoramique.lookup("#point" + strPoint); circPoint.setFill(Color.RED); circPoint.setStroke(Color.YELLOW); bDragDrop = true; mouseEvent1.consume(); }); circPoint.setOnMouseDragged((mouseEvent1) -> { double XX = mouseEvent1.getX() - ivImagePanoramique.getLayoutX(); if (XX < 0) { XX = 0; } if (XX > ivImagePanoramique.getFitWidth()) { XX = ivImagePanoramique.getFitWidth(); } circPoint.setCenterX(XX + ivImagePanoramique.getLayoutX()); double YY = mouseEvent1.getY(); if (YY < 0) { YY = 0; } if (YY > ivImagePanoramique.getFitHeight()) { YY = ivImagePanoramique.getFitHeight(); } circPoint.setCenterY(YY); afficheLoupe(XX, YY); mouseEvent1.consume(); }); circPoint.setOnMouseReleased((mouseEvent1) -> { setbDejaSauve(false); getStPrincipal().setTitle(getStPrincipal().getTitle().replace(" *", "") + " *"); String strPoint = circPoint.getId(); strPoint = strPoint.substring(5, strPoint.length()); int iNumeroPoint = Integer.parseInt(strPoint); double X1 = mouseEvent1.getSceneX(); double Y1 = mouseEvent1.getSceneY(); double mouseX1 = X1 - ivImagePanoramique.getLayoutX(); if (mouseX1 < 0) { mouseX1 = 0; } if (mouseX1 > ivImagePanoramique.getFitWidth()) { mouseX1 = ivImagePanoramique.getFitWidth(); } double mouseY1 = Y1 - panePanoramique.getLayoutY() - 130 - getiDecalageMac(); if (mouseY1 < 0) { mouseY1 = 0; } if (mouseY1 > ivImagePanoramique.getFitHeight()) { mouseY1 = ivImagePanoramique.getFitHeight(); } double longit, lat; double larg = ivImagePanoramique.getFitWidth(); longit = 360.0f * mouseX1 / larg - 180; lat = 90.0d - 2.0f * mouseY1 / larg * 180.0f; getPanoramiquesProjet()[getiPanoActuel()].getHotspot(iNumeroPoint).setLatitude(lat); getPanoramiquesProjet()[getiPanoActuel()].getHotspot(iNumeroPoint).setLongitude(longit); circPoint.setFill(Color.YELLOW); circPoint.setStroke(Color.RED); mouseEvent1.consume(); }); circPoint.setOnMouseClicked((mouseEvent1) -> { if (mouseEvent1.isControlDown()) { setbDejaSauve(false); getStPrincipal().setTitle(getStPrincipal().getTitle().replace(" *", "") + " *"); String strPoint = circPoint.getId(); strPoint = strPoint.substring(5, strPoint.length()); int iNumeroPoint = Integer.parseInt(strPoint); Node nodePoint; nodePoint = (Node) panePanoramique.lookup("#point" + strPoint); panePanoramique.getChildren().remove(nodePoint); for (int io = iNumeroPoint + 1; io < getiNumPoints(); io++) { nodePoint = (Node) panePanoramique.lookup("#point" + Integer.toString(io)); nodePoint.setId("point" + Integer.toString(io - 1)); } /** * on retire les anciennes indication de HS */ retireAffichageHotSpots(); setiNumPoints(getiNumPoints() - 1); getPanoramiquesProjet()[getiPanoActuel()].removeHotspot(iNumeroPoint); /** * On les cre les nouvelles */ ajouteAffichageHotspots(); valideHS(); mouseEvent1.consume(); } else { if (!bDragDrop) { setbDejaSauve(false); getStPrincipal().setTitle(getStPrincipal().getTitle().replace(" *", "") + " *"); String strPoint = circPoint.getId(); strPoint = strPoint.substring(5, strPoint.length()); int iNumeroPoint = Integer.parseInt(strPoint); if (getiNombrePanoramiques() > 1) { AnchorPane apListePanoVig = apAfficherListePanosVignettes(iNumeroPoint); double positX = (panePanoramique.getPrefWidth() - apListePanoVig.getPrefWidth()) / 2.d; double positY = (panePanoramique.getPrefHeight() - apListePanoVig.getPrefHeight()) / 2.d; apListePanoVig.setLayoutX(positX); apListePanoVig.setLayoutY(positY); apPanneauPrincipal.getChildren().add(apListePanoVig); } } else { bDragDrop = false; } valideHS(); mouseEvent1.consume(); } }); } } } /** * * @param X * @param Y */ private static void panoAjouteImage(double X, double Y) { if (X > 0 && X < ivImagePanoramique.getFitWidth()) { valideHS(); setbDejaSauve(false); getStPrincipal().setTitle(getStPrincipal().getTitle().replace(" *", "") + " *"); double mouseX = X; double mouseY = Y - panePanoramique.getLayoutY() - 130 - getiDecalageMac(); double longitude, latitude; double largeur = ivImagePanoramique.getFitWidth(); longitude = 360.0f * mouseX / largeur - 180; latitude = 90.0d - 2.0f * mouseY / largeur * 180.0f; Circle circPoint = new Circle(mouseX + ivImagePanoramique.getLayoutX(), mouseY, 5); circPoint.setFill(Color.BLUE); circPoint.setStroke(Color.YELLOW); circPoint.setId("img" + getiNumImages()); circPoint.setCursor(Cursor.DEFAULT); panePanoramique.getChildren().add(circPoint); Tooltip tltpImage = new Tooltip("image n " + (getiNumImages() + 1)); tltpImage.setStyle(getStrTooltipStyle()); Tooltip.install(circPoint, tltpImage); File fileRepert; if (getStrRepertHSImages().equals("")) { fileRepert = new File(getStrCurrentDir() + File.separator); } else { fileRepert = new File(getStrRepertHSImages()); } FileChooser fileChooser = new FileChooser(); FileChooser.ExtensionFilter extFilterImages = new FileChooser.ExtensionFilter( "Fichiers Images (jpg, bmp, png)", "*.jpg", "*.bmp", "*.png"); fileChooser.setInitialDirectory(fileRepert); fileChooser.getExtensionFilters().addAll(extFilterImages); File fileFichierImage = fileChooser.showOpenDialog(null); if (fileFichierImage != null) { setStrRepertHSImages(fileFichierImage.getParent()); setiNumImages(getiNumImages() + 1); HotspotImage HS = new HotspotImage(); HS.setLongitude(longitude); HS.setLatitude(latitude); HS.setStrUrlImage(fileFichierImage.getAbsolutePath()); HS.setStrLienImg(fileFichierImage.getName()); HS.setStrInfo(fileFichierImage.getName().split("\\.")[0]); File fileRepertImage = new File(getStrRepertTemp() + File.separator + "images"); if (!fileRepertImage.exists()) { fileRepertImage.mkdirs(); } try { copieFichierRepertoire(fileFichierImage.getAbsolutePath(), fileRepertImage.getAbsolutePath()); } catch (IOException ex) { Logger.getLogger(EditeurPanovisu.class.getName()).log(Level.SEVERE, null, ex); } getPanoramiquesProjet()[getiPanoActuel()].addHotspotImage(HS); retireAffichageHotSpots(); dejaCharge = false; Pane affHS1 = paneAffichageHS(strListePano(), getiPanoActuel()); affHS1.setId("labels"); vbVisuHotspots.getChildren().add(affHS1); spPanneauOutils.setVvalue(spPanneauOutils.getVvalue() + 300); } else { String strPoint = circPoint.getId(); strPoint = strPoint.substring(3, strPoint.length()); Node nodeImage = (Node) panePanoramique.lookup("#img" + strPoint); panePanoramique.getChildren().remove(nodeImage); } valideHS(); circPoint.setOnDragDetected((mouseEvent1) -> { circPoint.setFill(Color.YELLOW); circPoint.setStroke(Color.BLUE); bDragDrop = true; mouseEvent1.consume(); }); circPoint.setOnMouseDragged((mouseEvent1) -> { double XX = mouseEvent1.getX() - ivImagePanoramique.getLayoutX(); if (XX < 0) { XX = 0; } if (XX > ivImagePanoramique.getFitWidth()) { XX = ivImagePanoramique.getFitWidth(); } circPoint.setCenterX(XX + ivImagePanoramique.getLayoutX()); double YY = mouseEvent1.getY(); if (YY < 0) { YY = 0; } if (YY > ivImagePanoramique.getFitHeight()) { YY = ivImagePanoramique.getFitHeight(); } circPoint.setCenterY(YY); afficheLoupe(XX, YY); mouseEvent1.consume(); }); circPoint.setOnMouseReleased((mouseEvent1) -> { setbDejaSauve(false); getStPrincipal().setTitle(getStPrincipal().getTitle().replace(" *", "") + " *"); String strPoint = circPoint.getId(); strPoint = strPoint.substring(3, strPoint.length()); int iNumeroPoint = Integer.parseInt(strPoint); double X1 = mouseEvent1.getSceneX(); double Y1 = mouseEvent1.getSceneY(); double mouseX1 = X1 - ivImagePanoramique.getLayoutX(); if (mouseX1 < 0) { mouseX1 = 0; } if (mouseX1 > ivImagePanoramique.getFitWidth()) { mouseX1 = ivImagePanoramique.getFitWidth(); } double mouseY1 = Y1 - panePanoramique.getLayoutY() - 130 - getiDecalageMac(); if (mouseY1 < 0) { mouseY1 = 0; } if (mouseY1 > ivImagePanoramique.getFitHeight()) { mouseY1 = ivImagePanoramique.getFitHeight(); } double longit, lat; double larg = ivImagePanoramique.getFitWidth(); longit = 360.0f * mouseX1 / larg - 180; lat = 90.0d - 2.0f * mouseY1 / larg * 180.0f; getPanoramiquesProjet()[getiPanoActuel()].getHotspotImage(iNumeroPoint).setLatitude(lat); getPanoramiquesProjet()[getiPanoActuel()].getHotspotImage(iNumeroPoint).setLongitude(longit); circPoint.setFill(Color.BLUE); circPoint.setStroke(Color.YELLOW); mouseEvent1.consume(); }); circPoint.setOnMouseClicked((mouseEvent1) -> { String strPoint = circPoint.getId(); strPoint = strPoint.substring(3, strPoint.length()); int iNum = Integer.parseInt(strPoint); if (mouseEvent1.isControlDown()) { setbDejaSauve(false); getStPrincipal().setTitle(getStPrincipal().getTitle().replace(" *", "") + " *"); Node nodeImage; nodeImage = (Node) panePanoramique.lookup("#img" + strPoint); panePanoramique.getChildren().remove(nodeImage); for (int io = iNum + 1; io < getiNumImages(); io++) { nodeImage = (Node) panePanoramique.lookup("#img" + Integer.toString(io)); nodeImage.setId("img" + Integer.toString(io - 1)); } /** * on retire les anciennes indication de HS */ retireAffichageHotSpots(); setiNumImages(getiNumImages() - 1); getPanoramiquesProjet()[getiPanoActuel()].removeHotspotImage(iNum); /** * On les cre les nouvelles */ ajouteAffichageHotspots(); } else { if (!bDragDrop) { setbDejaSauve(false); getStPrincipal().setTitle(getStPrincipal().getTitle().replace(" *", "") + " *"); File fileRepert1; if (getStrRepertHSImages().equals("")) { fileRepert1 = new File(getStrCurrentDir() + File.separator); } else { fileRepert1 = new File(getStrRepertHSImages()); } FileChooser fileChooser1 = new FileChooser(); FileChooser.ExtensionFilter extFilterImages1 = new FileChooser.ExtensionFilter( "Fichiers Images (jpg, bmp, png)", "*.jpg", "*.bmp", "*.png"); fileChooser1.setInitialDirectory(fileRepert1); fileChooser1.getExtensionFilters().addAll(extFilterImages1); File fileFichierImage1 = fileChooser1.showOpenDialog(null); if (fileFichierImage1 != null) { setStrRepertHSImages(fileFichierImage1.getParent()); HotspotImage HS = getPanoramiquesProjet()[getiPanoActuel()].getHotspotImage(iNum); HS.setStrUrlImage(fileFichierImage1.getAbsolutePath()); HS.setStrLienImg(fileFichierImage1.getName()); HS.setStrInfo(fileFichierImage1.getName().split("\\.")[0]); File fileRepertImage = new File(getStrRepertTemp() + File.separator + "images"); if (!fileRepertImage.exists()) { fileRepertImage.mkdirs(); } try { copieFichierRepertoire(fileFichierImage1.getAbsolutePath(), fileRepertImage.getAbsolutePath()); } catch (IOException ex) { Logger.getLogger(EditeurPanovisu.class.getName()).log(Level.SEVERE, null, ex); } getPanoramiquesProjet()[getiPanoActuel()].setHotspotImage(HS, iNum); retireAffichageHotSpots(); dejaCharge = false; Pane affHS1 = paneAffichageHS(strListePano(), getiPanoActuel()); affHS1.setId("labels"); vbVisuHotspots.getChildren().add(affHS1); } } else { bDragDrop = false; } } valideHS(); mouseEvent1.consume(); }); } } /** * * @param X * @param Y */ private static void panoAjouteHTML(double X, double Y) { if (X > 0 && X < ivImagePanoramique.getFitWidth()) { valideHS(); setbDejaSauve(false); getStPrincipal().setTitle(getStPrincipal().getTitle().replace(" *", "") + " *"); double mouseX = X; double mouseY = Y - panePanoramique.getLayoutY() - 130 - getiDecalageMac(); double longitude, latitude; double largeur = ivImagePanoramique.getFitWidth(); longitude = 360.0f * mouseX / largeur - 180; latitude = 90.0d - 2.0f * mouseY / largeur * 180.0f; Circle circPoint = new Circle(mouseX + ivImagePanoramique.getLayoutX(), mouseY, 5); circPoint.setFill(Color.DARKGREEN); circPoint.setStroke(Color.YELLOWGREEN); circPoint.setId("html" + getiNumHTML()); circPoint.setCursor(Cursor.DEFAULT); panePanoramique.getChildren().add(circPoint); Tooltip tltpImage = new Tooltip("HTML n " + (getiNumHTML() + 1)); tltpImage.setStyle(getStrTooltipStyle()); Tooltip.install(circPoint, tltpImage); EditeurHTML editHTML = new EditeurHTML(); HotspotHTML HS = new HotspotHTML(); editHTML.setHsHTML(HS); HS.setLongitude(longitude); HS.setLatitude(latitude); Rectangle2D tailleEcran = Screen.getPrimary().getBounds(); int iHauteur = (int) tailleEcran.getHeight() - 100; int iLargeur = (int) tailleEcran.getWidth() - 100; editHTML.affiche(iLargeur, iHauteur); editHTML.addPropertyChangeListener("bValide", (e) -> { if (e.getNewValue().toString().equals("true")) { setiNumHTML(getiNumHTML() + 1); getPanoramiquesProjet()[getiPanoActuel()].addHotspotHTML(editHTML.getHsHTML()); retireAffichageHotSpots(); dejaCharge = false; Pane affHS1 = paneAffichageHS(strListePano(), getiPanoActuel()); affHS1.setId("labels"); vbVisuHotspots.getChildren().add(affHS1); spPanneauOutils.setVvalue(spPanneauOutils.getVvalue() + 145); } }); editHTML.addPropertyChangeListener("bAnnule", (e) -> { if (e.getNewValue().toString().equals("true")) { String strPoint = circPoint.getId(); strPoint = strPoint.substring(4, strPoint.length()); Node nodeImage = (Node) panePanoramique.lookup("#html" + strPoint); panePanoramique.getChildren().remove(nodeImage); } }); valideHS(); circPoint.setOnDragDetected((mouseEvent1) -> { circPoint.setFill(Color.YELLOWGREEN); circPoint.setStroke(Color.DARKGREEN); bDragDrop = true; mouseEvent1.consume(); }); circPoint.setOnMouseDragged((mouseEvent1) -> { double XX = mouseEvent1.getX() - ivImagePanoramique.getLayoutX(); if (XX < 0) { XX = 0; } if (XX > ivImagePanoramique.getFitWidth()) { XX = ivImagePanoramique.getFitWidth(); } circPoint.setCenterX(XX + ivImagePanoramique.getLayoutX()); double YY = mouseEvent1.getY(); if (YY < 0) { YY = 0; } if (YY > ivImagePanoramique.getFitHeight()) { YY = ivImagePanoramique.getFitHeight(); } circPoint.setCenterY(YY); afficheLoupe(XX, YY); mouseEvent1.consume(); }); circPoint.setOnMouseReleased((mouseEvent1) -> { setbDejaSauve(false); getStPrincipal().setTitle(getStPrincipal().getTitle().replace(" *", "") + " *"); String strPoint = circPoint.getId(); strPoint = strPoint.substring(4, strPoint.length()); int iNumeroPoint = Integer.parseInt(strPoint); double X1 = mouseEvent1.getSceneX(); double Y1 = mouseEvent1.getSceneY(); double mouseX1 = X1 - ivImagePanoramique.getLayoutX(); if (mouseX1 < 0) { mouseX1 = 0; } if (mouseX1 > ivImagePanoramique.getFitWidth()) { mouseX1 = ivImagePanoramique.getFitWidth(); } double mouseY1 = Y1 - panePanoramique.getLayoutY() - 130 - getiDecalageMac(); if (mouseY1 < 0) { mouseY1 = 0; } if (mouseY1 > ivImagePanoramique.getFitHeight()) { mouseY1 = ivImagePanoramique.getFitHeight(); } double longit, lat; double larg = ivImagePanoramique.getFitWidth(); longit = 360.0f * mouseX1 / larg - 180; lat = 90.0d - 2.0f * mouseY1 / larg * 180.0f; getPanoramiquesProjet()[getiPanoActuel()].getHotspotHTML(iNumeroPoint).setLatitude(lat); getPanoramiquesProjet()[getiPanoActuel()].getHotspotHTML(iNumeroPoint).setLongitude(longit); circPoint.setFill(Color.DARKGREEN); circPoint.setStroke(Color.YELLOWGREEN); mouseEvent1.consume(); }); circPoint.setOnMouseClicked((mouseEvent1) -> { String strPoint = circPoint.getId(); strPoint = strPoint.substring(4, strPoint.length()); int iNum = Integer.parseInt(strPoint); if (mouseEvent1.isControlDown()) { setbDejaSauve(false); getStPrincipal().setTitle(getStPrincipal().getTitle().replace(" *", "") + " *"); Node nodeImage; nodeImage = (Node) panePanoramique.lookup("#html" + strPoint); panePanoramique.getChildren().remove(nodeImage); for (int io = iNum + 1; io < getiNumHTML(); io++) { nodeImage = (Node) panePanoramique.lookup("#html" + Integer.toString(io)); nodeImage.setId("html" + Integer.toString(io - 1)); } /** * on retire les anciennes indication de HS */ retireAffichageHotSpots(); setiNumHTML(getiNumHTML() - 1); getPanoramiquesProjet()[getiPanoActuel()].removeHotspotHTML(iNum); /** * On les cre les nouvelles */ ajouteAffichageHotspots(); } else { if (!bDragDrop) { setbDejaSauve(false); getStPrincipal().setTitle(getStPrincipal().getTitle().replace(" *", "") + " *"); EditeurHTML editHTML1 = new EditeurHTML(); HotspotHTML HS1 = getPanoramiquesProjet()[getiPanoActuel()].getHotspotHTML(iNum); editHTML1.setHsHTML(HS1); Rectangle2D tailleEcran1 = Screen.getPrimary().getBounds(); int iHauteur1 = (int) tailleEcran1.getHeight() - 100; int iLargeur1 = (int) tailleEcran1.getWidth() - 100; editHTML1.affiche(iLargeur1, iHauteur1); editHTML1.addPropertyChangeListener("bValide", (ev) -> { if (ev.getNewValue().toString().equals("true")) { getPanoramiquesProjet()[getiPanoActuel()].setHotspotHTML(editHTML1.getHsHTML(), iNum); retireAffichageHotSpots(); dejaCharge = false; Pane affHS1 = paneAffichageHS(strListePano(), getiPanoActuel()); affHS1.setId("labels"); vbVisuHotspots.getChildren().add(affHS1); apVisuHS.setPrefHeight(affHS1.getPrefHeight()); } }); } else { bDragDrop = false; } mouseEvent1.consume(); } valideHS(); mouseEvent1.consume(); }); } } /** * * @param X * @param Y */ private static void panoAjouteDiaporama(double X, double Y) { if (X > 0 && X < ivImagePanoramique.getFitWidth()) { valideHS(); setbDejaSauve(false); getStPrincipal().setTitle(getStPrincipal().getTitle().replace(" *", "") + " *"); double mouseX = X; double mouseY = Y - panePanoramique.getLayoutY() - 130 - getiDecalageMac(); double longitude, latitude; double largeur = ivImagePanoramique.getFitWidth(); longitude = 360.0f * mouseX / largeur - 180; latitude = 90.0d - 2.0f * mouseY / largeur * 180.0f; Circle circPoint = new Circle(mouseX + ivImagePanoramique.getLayoutX(), mouseY, 5); circPoint.setFill(Color.TURQUOISE); circPoint.setStroke(Color.ORANGE); circPoint.setId("dia" + getiNumDiapo()); circPoint.setCursor(Cursor.DEFAULT); panePanoramique.getChildren().add(circPoint); Tooltip tltpImage = new Tooltip("Diaporama n " + (getiNumDiapo() + 1)); tltpImage.setStyle(getStrTooltipStyle()); Tooltip.install(circPoint, tltpImage); HotspotDiaporama HS = new HotspotDiaporama(); HS.setLongitude(longitude); HS.setLatitude(latitude); List<String> choixDiapo = new ArrayList<>(); for (int i = 0; i < getiNombreDiapo(); i++) { choixDiapo.add(diaporamas[i].getStrNomDiaporama()); } ChoiceDialog<String> dialog = new ChoiceDialog<>(diaporamas[0].getStrNomDiaporama(), choixDiapo); dialog.setTitle(rbLocalisation.getString("main.choixDiapo")); dialog.setHeaderText(null); dialog.setContentText(rbLocalisation.getString("main.diapos")); Optional<String> result = dialog.showAndWait(); if (result.isPresent()) { boolean bTrouve = false; int iTrouve = -1; for (int i = 0; i < getiNombreDiapo(); i++) { if (diaporamas[i].getStrNomDiaporama().equals(result.get())) { bTrouve = true; iTrouve = i; } } if (bTrouve) { HS.setiNumDiapo(iTrouve); retireAffichageHotSpots(); getPanoramiquesProjet()[getiPanoActuel()].addHotspotDiapo(HS); setiNumDiapo(getiNumDiapo() + 1); valideHS(); dejaCharge = false; Pane affHS1 = paneAffichageHS(strListePano(), getiPanoActuel()); affHS1.setId("labels"); vbVisuHotspots.getChildren().add(affHS1); spPanneauOutils.setVvalue(spPanneauOutils.getVvalue() + 145); } } circPoint.setOnDragDetected((mouseEvent1) -> { circPoint.setFill(Color.ORANGE); circPoint.setStroke(Color.TURQUOISE); bDragDrop = true; mouseEvent1.consume(); }); circPoint.setOnMouseDragged((mouseEvent1) -> { double XX = mouseEvent1.getX() - ivImagePanoramique.getLayoutX(); if (XX < 0) { XX = 0; } if (XX > ivImagePanoramique.getFitWidth()) { XX = ivImagePanoramique.getFitWidth(); } circPoint.setCenterX(XX + ivImagePanoramique.getLayoutX()); double YY = mouseEvent1.getY(); if (YY < 0) { YY = 0; } if (YY > ivImagePanoramique.getFitHeight()) { YY = ivImagePanoramique.getFitHeight(); } circPoint.setCenterY(YY); afficheLoupe(XX, YY); mouseEvent1.consume(); }); circPoint.setOnMouseReleased((mouseEvent1) -> { setbDejaSauve(false); getStPrincipal().setTitle(getStPrincipal().getTitle().replace(" *", "") + " *"); String strPoint = circPoint.getId(); strPoint = strPoint.substring(3, strPoint.length()); int iNumeroPoint = Integer.parseInt(strPoint); double X1 = mouseEvent1.getSceneX(); double Y1 = mouseEvent1.getSceneY(); double mouseX1 = X1 - ivImagePanoramique.getLayoutX(); if (mouseX1 < 0) { mouseX1 = 0; } if (mouseX1 > ivImagePanoramique.getFitWidth()) { mouseX1 = ivImagePanoramique.getFitWidth(); } double mouseY1 = Y1 - panePanoramique.getLayoutY() - 130 - getiDecalageMac(); if (mouseY1 < 0) { mouseY1 = 0; } if (mouseY1 > ivImagePanoramique.getFitHeight()) { mouseY1 = ivImagePanoramique.getFitHeight(); } double longit, lat; double larg = ivImagePanoramique.getFitWidth(); longit = 360.0f * mouseX1 / larg - 180; lat = 90.0d - 2.0f * mouseY1 / larg * 180.0f; getPanoramiquesProjet()[getiPanoActuel()].getHotspotDiapo(iNumeroPoint).setLatitude(lat); getPanoramiquesProjet()[getiPanoActuel()].getHotspotDiapo(iNumeroPoint).setLongitude(longit); circPoint.setFill(Color.TURQUOISE); circPoint.setStroke(Color.ORANGE); mouseEvent1.consume(); }); circPoint.setOnMouseClicked((mouseEvent1) -> { String strPoint = circPoint.getId(); strPoint = strPoint.substring(3, strPoint.length()); int iNum = Integer.parseInt(strPoint); if (mouseEvent1.isControlDown()) { setbDejaSauve(false); getStPrincipal().setTitle(getStPrincipal().getTitle().replace(" *", "") + " *"); Node nodeImage; nodeImage = (Node) panePanoramique.lookup("#dia" + strPoint); panePanoramique.getChildren().remove(nodeImage); for (int io = iNum + 1; io < getiNumDiapo(); io++) { nodeImage = (Node) panePanoramique.lookup("#dia" + Integer.toString(io)); nodeImage.setId("dia" + Integer.toString(io - 1)); Tooltip tltpImage1 = new Tooltip("Diaporama n " + io); tltpImage1.setStyle(getStrTooltipStyle()); Tooltip.install(nodeImage, tltpImage1); } /** * on retire les anciennes indication de HS */ retireAffichageHotSpots(); setiNumDiapo(getiNumDiapo() - 1); getPanoramiquesProjet()[getiPanoActuel()].removeHotspotdiapo(iNum); /** * On les cre les nouvelles */ ajouteAffichageHotspots(); } else { if (!bDragDrop) { setbDejaSauve(false); getStPrincipal().setTitle(getStPrincipal().getTitle().replace(" *", "") + " *"); List<String> choixDiapo1 = new ArrayList<>(); for (int i = 0; i < getiNombreDiapo(); i++) { choixDiapo1.add(diaporamas[i].getStrNomDiaporama()); } ChoiceDialog<String> dialog1 = new ChoiceDialog<>( diaporamas[getPanoramiquesProjet()[getiPanoActuel()].getHotspotDiapo(iNum) .getiNumDiapo()].getStrNomDiaporama(), choixDiapo1); dialog1.setTitle(rbLocalisation.getString("main.choixDiapo")); dialog1.setHeaderText(null); dialog1.setContentText(rbLocalisation.getString("main.diapos")); Optional<String> result1 = dialog1.showAndWait(); if (result1.isPresent()) { boolean bTrouve = false; int iTrouve = -1; for (int i = 0; i < getiNombreDiapo(); i++) { if (diaporamas[i].getStrNomDiaporama().equals(result1.get())) { bTrouve = true; iTrouve = i; } } if (bTrouve) { retireAffichageHotSpots(); getPanoramiquesProjet()[getiPanoActuel()].getHotspotDiapo(iNum) .setiNumDiapo(iTrouve); valideHS(); ajouteAffichageHotspots(); } } } else { bDragDrop = false; } mouseEvent1.consume(); } valideHS(); mouseEvent1.consume(); }); } } /** * * @param mouseEvent */ private static void gereSourisPanoramique(MouseEvent mouseEvent) { if (mouseEvent.getButton() == MouseButton.SECONDARY) { if (mouseEvent.isShiftDown()) { panoChoixNord(mouseEvent.getSceneX() - ivImagePanoramique.getLayoutX()); mouseEvent.consume(); } else if (mouseEvent.isControlDown()) { } else { panoChoixRegard(mouseEvent.getSceneX() - ivImagePanoramique.getLayoutX(), mouseEvent.getSceneY() - getiDecalageMac()); mouseEvent.consume(); } } if (mouseEvent.getButton() == MouseButton.PRIMARY) { if (!(mouseEvent.isControlDown()) && bEstCharge) { if (!bDragDrop) { panePanoramique.setCursor(Cursor.DEFAULT); panePanoramique.setOnMouseClicked((me) -> { }); Circle c1 = new Circle(mouseEvent.getSceneX(), mouseEvent.getSceneY() - panePanoramique.getLayoutY() - 130 - getiDecalageMac(), 3); panePanoramique.getChildren().add(c1); ListView<String> lvMenuChoixTypeHotspot = new ListView<>(); double tailleFenetre = 70; if (getiNombrePanoramiques() > 1) { lvMenuChoixTypeHotspot.getItems().add("Panoramique"); tailleFenetre += 20; } lvMenuChoixTypeHotspot.getItems().add("Image"); if (getiNombreDiapo() > 0) { lvMenuChoixTypeHotspot.getItems().add("Diaporama"); tailleFenetre += 20; } lvMenuChoixTypeHotspot.getItems().add("HTML"); lvMenuChoixTypeHotspot.getItems().add("Annuler"); lvMenuChoixTypeHotspot.setMaxHeight(tailleFenetre); lvMenuChoixTypeHotspot.setPrefHeight(tailleFenetre); lvMenuChoixTypeHotspot.setMinHeight(tailleFenetre); lvMenuChoixTypeHotspot.setPrefWidth(120); lvMenuChoixTypeHotspot.setCursor(Cursor.DEFAULT); lvMenuChoixTypeHotspot.setLayoutX(mouseEvent.getSceneX()); lvMenuChoixTypeHotspot.setLayoutY( mouseEvent.getSceneY() - panePanoramique.getLayoutY() - 104 - getiDecalageMac()); panePanoramique.getChildren().add(lvMenuChoixTypeHotspot); lvMenuChoixTypeHotspot.getSelectionModel().selectedItemProperty() .addListener((ov, ancValeur, nouvValeur) -> { panePanoramique.getChildren().remove(lvMenuChoixTypeHotspot); panePanoramique.getChildren().remove(c1); switch (nouvValeur) { case "Panoramique": panoMouseClic(mouseEvent.getSceneX() - ivImagePanoramique.getLayoutX(), mouseEvent.getSceneY()); break; case "Image": panoAjouteImage(mouseEvent.getSceneX() - ivImagePanoramique.getLayoutX(), mouseEvent.getSceneY()); break; case "HTML": panoAjouteHTML(mouseEvent.getSceneX() - ivImagePanoramique.getLayoutX(), mouseEvent.getSceneY()); break; case "Diaporama": panoAjouteDiaporama(mouseEvent.getSceneX() - ivImagePanoramique.getLayoutX(), mouseEvent.getSceneY()); break; case "Annuler": break; } panePanoramique.setCursor(Cursor.CROSSHAIR); panePanoramique.setOnMouseClicked((me) -> { gereSourisPanoramique(me); }); }); } else { bDragDrop = false; } } } } private static void afficheLoupe(double x, double y) { positLoupeX = x; positLoupeY = y; if (x < getiTailleLoupe() + 50 && y < getiTailleLoupe() + 50 && strPositLoupe.equals("gauche")) { apLoupe.setLayoutX(ivImagePanoramique.getFitWidth() - getiTailleLoupe() + 5); strPositLoupe = "droite"; } if (x > ivImagePanoramique.getFitWidth() - getiTailleLoupe() - 35 && y < getiTailleLoupe() + 50 && strPositLoupe.equals("droite")) { apLoupe.setLayoutX(35); strPositLoupe = "gauche"; } double facteur = 8000 / ivImagePanoramique.getFitWidth(); double xx1 = (x * facteur); double yy1 = (y * facteur); ivLoupe.setClip(new Circle(xx1, yy1, getiTailleLoupe() / 2)); ivLoupe.setLayoutX(-xx1 + getiTailleLoupe() / 2 + 10); ivLoupe.setLayoutY(-yy1 + getiTailleLoupe() / 2 + 10); } /** * */ private static void installeEvenements() { /** * */ getScnPrincipale().widthProperty().addListener( (ObservableValue<? extends Number> observableValue, Number oldSceneWidth, Number newSceneWidth) -> { if ((double) newSceneWidth < 1280) { } double largeur = (double) newSceneWidth - largeurOutils - 20; apPanovisu.setLayoutX((double) newSceneWidth - largeurOutils); spVuePanoramique.setPrefWidth(largeur); spVuePanoramique.setBackground( new Background(new BackgroundFill(Color.BLUE, CornerRadii.EMPTY, Insets.EMPTY))); gestionnaireInterface.getApVis().setPrefWidth((double) newSceneWidth - largeurOutils - 20); if ((double) newSceneWidth - largeurOutils - 20 < gestionnaireInterface.getApVis() .getMaxWidth()) { gestionnaireInterface.getApVis().setMinWidth((double) newSceneWidth - largeurOutils - 20); } if ((double) newSceneWidth - largeurOutils - 20 < gestionnairePlan.getApPlan().getMaxWidth()) { gestionnairePlan.getApPlan().setMinWidth((double) newSceneWidth - largeurOutils - 20); } gestionnairePlan.getApPlan().setPrefWidth((double) newSceneWidth - largeurOutils - 20); }); /** * */ getScnPrincipale().heightProperty().addListener((ObservableValue<? extends Number> observableValue, Number oldSceneHeight, Number newSceneHeight) -> { spVuePanoramique.setPrefHeight((double) newSceneHeight - 130.0d - getiDecalageMac()); spPanneauOutils.setPrefHeight((double) newSceneHeight - 130.0d - getiDecalageMac()); spVuePanoramique .setBackground(new Background(new BackgroundFill(Color.BLUE, CornerRadii.EMPTY, Insets.EMPTY))); if ((double) newSceneHeight - 130.0d - getiDecalageMac() < gestionnaireInterface.getSpOutils() .getMaxHeight()) { gestionnaireInterface.getSpOutils() .setMinHeight((double) newSceneHeight - 130.0d - getiDecalageMac()); } gestionnaireInterface.getSpOutils().setPrefHeight((double) newSceneHeight - 130.0d - getiDecalageMac()); gestionnairePlan.getSpOutils().setPrefHeight((double) newSceneHeight - 130 - getiDecalageMac()); if ((double) newSceneHeight - 130 - getiDecalageMac() < gestionnairePlan.getSpOutils().getMaxHeight()) { gestionnairePlan.getSpOutils().setMinHeight((double) newSceneHeight - 130 - getiDecalageMac()); } }); getScnPrincipale().setOnKeyPressed((clavierEvt) -> { //System.out.println("Code clavier : " + clavierEvt.getCode()); if (clavierEvt.isControlDown()) { if (clavierEvt.getText().toLowerCase().equals("l")) { clavierEvt.consume(); setAfficheLoupe(!isAfficheLoupe()); apLoupe.setVisible(isAfficheLoupe()); Point p = MouseInfo.getPointerInfo().getLocation(); if (p.x < getiTailleLoupe() + 80 && p.y < getiTailleLoupe() + 160) { apLoupe.setLayoutX(ivImagePanoramique.getFitWidth() - getiTailleLoupe() + 5); apLoupe.setLayoutY(35); strPositLoupe = "droite"; } else { apLoupe.setLayoutX(35); apLoupe.setLayoutY(35); strPositLoupe = "gauche"; } } } if (clavierEvt.getText().equals("+")) { setiTailleLoupe(getiTailleLoupe() + 10); creeLoupe(); afficheLoupe(positLoupeX, positLoupeY); } if (clavierEvt.getText().equals("-")) { setiTailleLoupe(getiTailleLoupe() - 10); creeLoupe(); afficheLoupe(positLoupeX, positLoupeY); } }); /** * */ panePanoramique.setOnMouseClicked((mouseEvent) -> { gereSourisPanoramique(mouseEvent); }); /** * */ panePanoramique.setOnMouseMoved((mouseEvent) -> { if (bEstCharge) { double mouseX = mouseEvent.getSceneX() - ivImagePanoramique.getLayoutX(); if (mouseX < 0) { mouseX = 0; } if (mouseX > ivImagePanoramique.getFitWidth()) { mouseX = ivImagePanoramique.getFitWidth(); } double mouseY = mouseEvent.getSceneY() - panePanoramique.getLayoutY() - 130 - getiDecalageMac(); if (mouseY < 0) { mouseY = 0; } if (mouseY > ivImagePanoramique.getFitHeight()) { mouseY = ivImagePanoramique.getFitHeight(); } double longitude, latitude; double largeur = ivImagePanoramique.getFitWidth() * panePanoramique.getScaleX(); longitude = 360.0f * mouseX / largeur - 180; latitude = 90.0d - 2.0f * mouseY / largeur * 180.0f; String strLong = "Long : " + String.format("%.1f", longitude); String strLat = "Lat : " + String.format("%.1f", latitude); lblLong.setText(strLong); lblLat.setText(strLat); afficheLoupe(mouseX, mouseY); } }); cbListeChoixPanoramique.valueProperty().addListener((ov, ancienneValeur, nouvelleValeur) -> { if (nouvelleValeur != null) { if (!(nouvelleValeur.equals(strPanoAffiche))) { valideHS(); strPanoAffiche = nouvelleValeur.toString(); } } }); } /** * */ private static void ajouteAffichageLignes() { double largeur = ivImagePanoramique.getFitWidth(); double hauteur = largeur / 2.0d; Line lineCoordonnees; int iX, iY; int iNl = 0; for (int i = -180; i < 180; i += 10) { iX = (int) (largeur / 2.0f + largeur / 360.0f * (float) i + ivImagePanoramique.getLayoutX()); lineCoordonnees = new Line(iX, 0, iX, hauteur); lineCoordonnees.setId("ligne" + iNl); iNl++; lineCoordonnees.setStroke(Color.ORANGE); if (i == 0) { lineCoordonnees.setStroke(Color.WHITE); lineCoordonnees.setStrokeWidth(0.5); } else { if ((i % 20) == 0) { lineCoordonnees.setStroke(Color.WHITE); lineCoordonnees.setStrokeWidth(0.25); } else { lineCoordonnees.setStroke(Color.GRAY); lineCoordonnees.setStrokeWidth(0.25); } } panePanoramique.getChildren().add(lineCoordonnees); } for (int i = -90; i < 90; i += 10) { iY = (int) (hauteur / 2.0f + hauteur / 180.0f * (float) i); lineCoordonnees = new Line(ivImagePanoramique.getLayoutX(), iY, largeur + ivImagePanoramique.getLayoutX(), iY); lineCoordonnees.setId("ligne" + iNl); iNl++; if (i == 0) { lineCoordonnees.setStroke(Color.WHITE); lineCoordonnees.setStrokeWidth(0.5); } else { if ((i % 20) == 0) { lineCoordonnees.setStroke(Color.WHITE); lineCoordonnees.setStrokeWidth(0.25); } else { lineCoordonnees.setStroke(Color.GRAY); lineCoordonnees.setStrokeWidth(0.25); } } panePanoramique.getChildren().add(lineCoordonnees); } } /** * */ private static void retireAffichageLigne() { int i = 0; Node nodeLigne; do { nodeLigne = (Node) panePanoramique.lookup("#ligne" + i); if (nodeLigne != null) { panePanoramique.getChildren().remove(nodeLigne); } i++; } while (nodeLigne != null); } /** * */ private static void creeLoupe() { apLoupe.getChildren().clear(); if (strPositLoupe.equals("gauche")) { apLoupe.setLayoutX(35); } if (strPositLoupe.equals("droite")) { apLoupe.setLayoutX(ivImagePanoramique.getFitWidth() - getiTailleLoupe() + 5); } apLoupe.setLayoutY(35); Line lig1 = new Line(getiTailleLoupe() / 2 + 10, 10, getiTailleLoupe() / 2 + 10, getiTailleLoupe() + 10); lig1.setStroke(Color.GOLD); Line lig2 = new Line(10, getiTailleLoupe() / 2 + 10, getiTailleLoupe() + 10, getiTailleLoupe() / 2 + 10); lig2.setStroke(Color.GOLD); Circle circ1 = new Circle(getiTailleLoupe() / 2 + 10, getiTailleLoupe() / 2 + 10, getiTailleLoupe() / 2 + 6); circ1.setStroke(Color.GOLDENROD); circ1.setFill(Color.GOLDENROD); Circle circ2 = new Circle(getiTailleLoupe() / 2 + 10, getiTailleLoupe() / 2 + 10, getiTailleLoupe() / 2 + 5); circ2.setStroke(Color.GOLD); circ2.setFill(Color.GOLD); Circle circ3 = new Circle(getiTailleLoupe() / 2 + 10, getiTailleLoupe() / 2 + 10, getiTailleLoupe() / 2 + 2); circ3.setStroke(Color.GOLDENROD); circ3.setFill(Color.GOLDENROD); Circle circ4 = new Circle(getiTailleLoupe() / 2 + 10, getiTailleLoupe() / 2 + 10, getiTailleLoupe() / 2); circ4.setStroke(Color.BLACK); circ4.setFill(Color.BLACK); apLoupe.getChildren().addAll(circ1, circ2, circ3, circ4, ivLoupe, lig1, lig2); apLoupe.setOnMouseMoved((me) -> { if (strPositLoupe.equals("gauche")) { apLoupe.setLayoutX(ivImagePanoramique.getFitWidth() - getiTailleLoupe() + 5); strPositLoupe = "droite"; } if (strPositLoupe.equals("droite")) { apLoupe.setLayoutX(35); strPositLoupe = "gauche"; } }); apLoupe.setOnMouseEntered((me) -> { if (strPositLoupe.equals("gauche")) { apLoupe.setLayoutX(ivImagePanoramique.getFitWidth() - getiTailleLoupe() + 5); strPositLoupe = "droite"; } if (strPositLoupe.equals("droite")) { apLoupe.setLayoutX(35); strPositLoupe = "gauche"; } }); } /** * + * * @param iNumPanochoisi */ @SuppressWarnings("empty-statement") public static void affichePanoChoisit(int iNumPanochoisi) { ivImagePanoramique.setImage(getPanoramiquesProjet()[iNumPanochoisi].getImgPanoramique()); Node nodeLegende = (Node) apPanneauPrincipal.lookup("#legende"); nodeLegende.setVisible(true); retireAffichagePointsHotSpots(); retireAffichageHotSpots(); retireAffichageLigne(); setiPanoActuel(iNumPanochoisi); if (getPanoramiquesProjet()[iNumPanochoisi].getStrTypePanoramique().equals(Panoramique.CUBE)) { ivLoupe.setImage(getPanoramiquesProjet()[iNumPanochoisi].getImgCubeEqui()); } else { String strFicImage = getStrRepertPanos() + File.separator + "panovisu" + iNumPanochoisi + ".jpg"; ivLoupe.setImage(new Image("file:" + strFicImage)); ivLoupe.setSmooth(true); ivLoupe.setPreserveRatio(true); ivLoupe.setFitWidth(8000); } ivLoupe.setClip(new Circle(4000, 2000, getiTailleLoupe() / 2)); ivLoupe.setLayoutX(-4000 + getiTailleLoupe() / 2 + 10); ivLoupe.setLayoutY(-2000 + getiTailleLoupe() / 2 + 10); apLoupe.setPrefSize(getiTailleLoupe() + 20, getiTailleLoupe() + 20); apLoupe.setMinSize(getiTailleLoupe() + 20, getiTailleLoupe() + 20); apLoupe.setMaxSize(getiTailleLoupe() + 20, getiTailleLoupe() + 20); //apLoupe.setStyle("-fx-border-width : 2px;-fx-background-color : blue;-fx-border-color :darkblue;"); creeLoupe(); panePanoramique.setOnMouseEntered((me) -> { if (isAfficheLoupe()) { apLoupe.setVisible(true); } }); panePanoramique.setOnMouseExited((me) -> { apLoupe.setVisible(false); }); setiNumPoints(0); if (navigateurPanoramique == null) { Rectangle2D tailleEcran = Screen.getPrimary().getBounds(); int iHauteur; if (isMac()) { iHauteur = (int) tailleEcran.getHeight() - 230; } else { iHauteur = (int) tailleEcran.getHeight() - 170; } int iLargeur = (int) tailleEcran.getWidth() - 20; apVisuPanoramique.getChildren().clear(); Pane paneFond = new Pane(); paneFond.setPrefSize(24, 24); Image imgExpand = new Image("file:" + getStrRepertAppli() + "/images/expand.png", 32, 24, false, true); Image imgShrink = new Image("file:" + getStrRepertAppli() + "/images/shrink.png", 32, 24, false, true); ImageView ivExpShrk = new ImageView(imgExpand); paneFond.setLayoutX(10); paneFond.setLayoutY(10); paneFond.getChildren().add(ivExpShrk); navigateurPanoramique = new NavigateurPanoramique( getPanoramiquesProjet()[iNumPanochoisi].getImgVisuPanoramique(), 10.d, 10.d, 340, 170); apVisuPano = navigateurPanoramique.affichePano(); navigateurPanoramique.addPropertyChangeListener("positNord", (e) -> { double longitude = Math.round(Double.parseDouble(e.getNewValue().toString()) * 10) / 10.d - 180; longitude = longitude % 360; longitude = longitude < 0 ? longitude + 360 : longitude; longitude = longitude > 180 ? longitude - 360 : longitude; getPanoramiquesProjet()[getiPanoActuel()].setZeroNord(longitude); afficheNord(longitude); }); navigateurPanoramique.addPropertyChangeListener("choixLatitude", (e) -> { double latitude = Math.round(navigateurPanoramique.getChoixLatitude() * 10) / 10.d; double longitude = Math.round(navigateurPanoramique.getChoixLongitude() * 10) / 10.d - 180; double fov = Math.round(navigateurPanoramique.getChoixFov() * 10) / 10.d; longitude = longitude % 360; longitude = longitude < 0 ? longitude + 360 : longitude; longitude = longitude > 180 ? longitude - 360 : longitude; getPanoramiquesProjet()[getiPanoActuel()].setRegardX(longitude); getPanoramiquesProjet()[getiPanoActuel()].setRegardY(latitude); getPanoramiquesProjet()[getiPanoActuel()].setChampVisuel(fov); affichePoV(longitude, latitude, fov); }); navigateurPanoramique.addPropertyChangeListener("choixLongitude", (e) -> { double latitude = Math.round(navigateurPanoramique.getChoixLatitude() * 10) / 10.d; double longitude = Math.round(navigateurPanoramique.getChoixLongitude() * 10) / 10.d - 180; double fov = Math.round(navigateurPanoramique.getChoixFov() * 10) / 10.d; longitude = longitude % 360; longitude = longitude < 0 ? longitude + 360 : longitude; longitude = longitude > 180 ? longitude - 360 : longitude; getPanoramiquesProjet()[getiPanoActuel()].setRegardX(longitude); getPanoramiquesProjet()[getiPanoActuel()].setRegardY(latitude); getPanoramiquesProjet()[getiPanoActuel()].setChampVisuel(fov); affichePoV(longitude, latitude, fov); }); navigateurPanoramique.addPropertyChangeListener("choixFov", (e) -> { double latitude = Math.round(navigateurPanoramique.getChoixLatitude() * 10) / 10.d; double longitude = Math.round(navigateurPanoramique.getChoixLongitude() * 10) / 10.d - 180; double fov = Math.round(navigateurPanoramique.getChoixFov() * 10) / 10.d; longitude = longitude % 360; longitude = longitude < 0 ? longitude + 360 : longitude; longitude = longitude > 180 ? longitude - 360 : longitude; getPanoramiquesProjet()[getiPanoActuel()].setRegardX(longitude); getPanoramiquesProjet()[getiPanoActuel()].setRegardY(latitude); getPanoramiquesProjet()[getiPanoActuel()].setChampVisuel(fov); affichePoV(longitude, latitude, fov); }); navigateurPanoramique.setPositNord(getPanoramiquesProjet()[iNumPanochoisi].getZeroNord() - 180); navigateurPanoramique.setLongitude(getPanoramiquesProjet()[iNumPanochoisi].getRegardX() - 180); navigateurPanoramique.setLatitude(getPanoramiquesProjet()[iNumPanochoisi].getRegardY()); navigateurPanoramique.setFov(getPanoramiquesProjet()[iNumPanochoisi].getChampVisuel()); navigateurPanoramique.setChoixLatitude(navigateurPanoramique.getLatitude()); navigateurPanoramique.setChoixLongitude(navigateurPanoramique.getLongitude()); navigateurPanoramique.setChoixFov(navigateurPanoramique.getFov()); apVisuPano.getChildren().add(paneFond); apVisuPanoramique.getChildren().addAll(apVisuPano); paneFond.setOnMouseClicked((ev) -> { if (bPleinEcranPanoramique) { navigateurPanoramique.changeTaille(340, 200); apVisuPano.getChildren().add(paneFond); ivExpShrk.setImage(imgExpand); apEnvironnement.getChildren().remove(apVisuPano); apVisuPanoramique.getChildren().add(apVisuPano); bPleinEcranPanoramique = false; mbarPrincipal.setDisable(false); bbarPrincipal.setDisable(false); hbBarreBouton.setDisable(false); tpEnvironnement.setDisable(false); } else { bPleinEcranPanoramique = true; navigateurPanoramique.changeTaille(iLargeur, iHauteur); ivExpShrk.setImage(imgShrink); apVisuPano.getChildren().add(paneFond); apVisuPanoramique.getChildren().remove(apVisuPano); apEnvironnement.getChildren().add(apVisuPano); mbarPrincipal.setDisable(true); bbarPrincipal.setDisable(true); hbBarreBouton.setDisable(true); tpEnvironnement.setDisable(true); } }); navigateurPanoramique.affiche(); } else { navigateurPanoramique.setImagePanoramique(getPanoramiquesProjet()[iNumPanochoisi].getStrNomFichier(), getPanoramiquesProjet()[iNumPanochoisi].getImgVisuPanoramique()); navigateurPanoramique.setPositNord(getPanoramiquesProjet()[iNumPanochoisi].getZeroNord() - 180); navigateurPanoramique.setLongitude(getPanoramiquesProjet()[iNumPanochoisi].getRegardX() - 180); navigateurPanoramique.setLatitude(getPanoramiquesProjet()[iNumPanochoisi].getRegardY()); navigateurPanoramique.setFov(getPanoramiquesProjet()[iNumPanochoisi].getChampVisuel()); navigateurPanoramique.affiche(); } if (getPanoramiquesProjet()[iNumPanochoisi].getMarqueurGeolocatisation() != null) { tfLatitude.setText(CoordonneesGeographiques .toDMS(getPanoramiquesProjet()[iNumPanochoisi].getMarqueurGeolocatisation().getLatitude())); tfLongitude.setText(CoordonneesGeographiques .toDMS(getPanoramiquesProjet()[iNumPanochoisi].getMarqueurGeolocatisation().getLongitude())); getPoGeolocalisation().setbValide(true); } else { if (isbInternet()) { tfLatitude.setText(""); tfLongitude.setText(""); getPoGeolocalisation().setbValide(false); } } ajouteAffichagePointsHotspots(); ajouteAffichagePointsHotspotsImage(); ajouteAffichagePointsHotspotsHTML(); ajouteAffichagePointsHotspotsDiapo(); ajouteAffichageHotspots(); affichePoV(getPanoramiquesProjet()[iNumPanochoisi].getRegardX(), getPanoramiquesProjet()[iNumPanochoisi].getRegardY(), getPanoramiquesProjet()[iNumPanochoisi].getChampVisuel()); afficheNord(getPanoramiquesProjet()[iNumPanochoisi].getZeroNord()); ajouteAffichageLignes(); afficheInfoPano(); cbListeChoixPanoramique.setValue(cbListeChoixPanoramique.getItems().get(getiPanoActuel())); int iPano = -1; int ii = 0; for (String stNumPano : ordPano.getStrPanos()) { if (Integer.parseInt(stNumPano) == iNumPanochoisi) { iPano = ii; } ii++; } rectVignettePano.setLayoutY((iLargeurVignettes / 2 + 10) * iPano + 10); rectVignettePano.setVisible(true); cbMinLat.setSelected(getPanoramiquesProjet()[iNumPanochoisi].isbMinLat()); cbMaxLat.setSelected(getPanoramiquesProjet()[iNumPanochoisi].isbMaxLat()); if (cbMinLat.isSelected()) { slMinLat.setValue(getPanoramiquesProjet()[iNumPanochoisi].getMinLat()); } else { slMinLat.setValue(-90); } if (cbMaxLat.isSelected()) { slMaxLat.setValue(getPanoramiquesProjet()[iNumPanochoisi].getMaxLat()); } else { slMaxLat.setValue(90); } slMinFov.setValue(getPanoramiquesProjet()[iNumPanochoisi].getFovMin()); slMaxFov.setValue(getPanoramiquesProjet()[iNumPanochoisi].getFovMax()); navigateurPanoramique.setMaxFov(getPanoramiquesProjet()[iNumPanochoisi].getFovMax()); navigateurPanoramique.setMinFov(getPanoramiquesProjet()[iNumPanochoisi].getFovMin()); double largeurImage1 = panePanoramique.getPrefWidth(); double X11 = ivImagePanoramique.getLayoutX(); double Y1 = (90.0d - (double) slMinLat.getValue()) * largeurImage1 / 360.0d; ligNadir.setStartX(X11); ligNadir.setStartY(Y1); ligNadir.setEndX(X11 + largeurImage1); ligNadir.setEndY(Y1); Y1 = (90.0d - (double) (double) slMaxLat.getValue()) * largeurImage1 / 360.0d; ligZenith.setStartX(X11); ligZenith.setStartY(Y1); ligZenith.setEndX(X11 + largeurImage1); ligZenith.setEndY(Y1); panePanoramique.getChildren().remove(ligNadir); panePanoramique.getChildren().remove(ligZenith); panePanoramique.getChildren().addAll(ligNadir, ligZenith); } /** * */ private static void afficheInfoPano() { TextField tfTitrePano = (TextField) getScnPrincipale().lookup("#txttitrepano"); if (getPanoramiquesProjet()[getiPanoActuel()].getStrTitrePanoramique() != null) { tfTitrePano.setText(getPanoramiquesProjet()[getiPanoActuel()].getStrTitrePanoramique()); } else { tfTitrePano.setText(""); } } /** * * @param imgRect * @param iRapport * @return image transforme Mercator */ private static Image imgTransformationImage(Image imgRect, int iRapport) { int iLargeur = (int) imgRect.getWidth() / iRapport; int iHauteur = iLargeur / 2 / iRapport; WritableImage imgMercator = new WritableImage(iLargeur, iHauteur); PixelReader prRect = imgRect.getPixelReader(); PixelWriter pwMercator = imgMercator.getPixelWriter(); for (int i = 0; i < iLargeur; i++) { for (int j = 0; j < iHauteur; j++) { double phi = Math.asin(2.d * (iHauteur / 2.d - j) / iHauteur); int y2 = (int) (iHauteur * iRapport * (0.5d - phi / Math.PI)); if (y2 >= iHauteur * iRapport) { y2 = iHauteur * iRapport - 1; } Color clPixel = prRect.getColor(i * iRapport, y2 * iRapport); pwMercator.setColor(i, j, clPixel); } } return imgMercator; } /** * * @param strFichierPano * @param typePano * @param iNumero * @param iTotal * @throws InterruptedException Exception interruption */ @SuppressWarnings("empty-statement") private static void ajoutePanoramiqueProjet(String strFichierPano, String typePano, int iNumero, int iTotal) throws InterruptedException { bPanoCharge = true; bEstCharge = true; Panoramique panoCree = new Panoramique(); if (typePano.equals(Panoramique.SPHERE)) { File jpegFile = new File(strFichierPano); if (!jpegFile.exists()) { jpegFile = new File( getStrRepertAppli() + File.separator + "images" + File.separator + "pasImage.jpg"); } try { Metadata metadata = ImageMetadataReader.readMetadata(jpegFile); for (Directory directory : metadata.getDirectories()) { System.out.println("Directory: " + directory.getName()); for (String error : directory.getErrors()) { System.out.println("> error: " + error); } directory.getTags().stream().forEach((tag) -> { System.out.println("> tag: " + tag.getTagName() + " = " + tag.getDescription()); }); } } catch (ImageProcessingException | IOException ex) { Logger.getLogger(EditeurPanovisu.class.getName()).log(Level.SEVERE, null, ex); } panoCree.setStrNomFichier(strFichierPano); int iNombreNiveaux = iCreeNiveauxImageEqui(jpegFile.getAbsolutePath(), strFichierPano, getStrRepertPanos(), getiNombrePanoramiques(), iNumero, iTotal); Platform.runLater(() -> { lblNiveaux.setText("Cration visualisation panoramique"); pbarAvanceChargement.setProgress((double) (iNumero - 1) / (double) iTotal + 0.666 / iTotal); }); panoCree.setStrNomFichier(strFichierPano); Image imgPano3 = null; Image imgPano4 = null; Image imgPano5 = null; String strExtension = jpegFile.getAbsolutePath().substring(jpegFile.getAbsolutePath().length() - 3, jpegFile.getAbsolutePath().length()); if ("tif".equals(strExtension)) { try { imgPanoRetaille2 = ReadWriteImage.readTiff(jpegFile.getAbsolutePath()); imgPanoRetaille2 = ReadWriteImage.resizeImage(imgPanoRetaille2, 1200, 600); String nomVignette = jpegFile.getAbsolutePath().substring(0, jpegFile.getAbsolutePath().lastIndexOf(".")) + "Vignette.jpg"; File ficVig = new File(nomVignette); if (ficVig.exists()) { imgPano3 = new Image("file:" + nomVignette, 300, 150, true, true, true); imgPano4 = ReadWriteImage.readTiff(jpegFile.getAbsolutePath()); imgPano4 = ReadWriteImage.resizeImage(imgPano4, 300, 150); imgPano5 = ReadWriteImage.resizeImage(imgPano4, 70, 35); } else { imgPano3 = ReadWriteImage.readTiff(jpegFile.getAbsolutePath()); imgPano3 = ReadWriteImage.resizeImage(imgPano3, 300, 150); imgPano5 = ReadWriteImage.resizeImage(imgPano3, 70, 35); imgPano4 = imgPano3; } panoCree.setImgVisuPanoramique( imgTransformationImage(ReadWriteImage.readTiff(jpegFile.getAbsolutePath()), 2)); } catch (ImageReadException | IOException ex) { Logger.getLogger(EditeurPanovisu.class.getName()).log(Level.SEVERE, null, ex); } } else { imgPanoRetaille2 = new Image("file:" + jpegFile.getAbsolutePath(), 1200, 600, true, true, true); imgPano5 = new Image("file:" + jpegFile.getAbsolutePath(), 70, 35, true, true, true); imgPano4 = new Image("file:" + jpegFile.getAbsolutePath(), 300, 150, true, true, true); imgPano3 = imgPano4; String nomVignette = jpegFile.getAbsolutePath().substring(0, jpegFile.getAbsolutePath().lastIndexOf(".")) + "Vignette.jpg"; File ficVig = new File(nomVignette); if (ficVig.exists()) { imgPano3 = new Image("file:" + nomVignette, 300, 150, true, true, true); } panoCree.setImgVisuPanoramique( imgTransformationImage(new Image("file:" + jpegFile.getAbsolutePath()), 2)); } panoCree.setImgPanoramique(imgPanoRetaille2); panoCree.setNombreNiveaux(iNombreNiveaux); panoCree.setImgVignettePanoramique(imgPano3); panoCree.setImgPanoRect(imgPano4); panoCree.setImgPanoRectListe(imgPano5); panoCree.setStrTypePanoramique(Panoramique.SPHERE); } if (typePano.equals(Panoramique.CUBE)) { panoCree.setStrNomFichier(strFichierPano); panoCree.setStrNomFichier(strFichierPano); String strNom = strFichierPano.substring(0, strFichierPano.length() - 6); String strExtension = strFichierPano.substring(strFichierPano.length() - 3, strFichierPano.length()); Image imgTop = null; Image imgBottom = null; Image imgLeft = null; Image imgRight = null; Image imgFront = null; Image imgBehind = null; if (strExtension.equals("bmp")) { imgTop = new Image("file:" + strNom + "_u.bmp"); imgBottom = new Image("file:" + strNom + "_d.bmp"); imgLeft = new Image("file:" + strNom + "_l.bmp"); imgRight = new Image("file:" + strNom + "_r.bmp"); imgFront = new Image("file:" + strNom + "_f.bmp"); imgBehind = new Image("file:" + strNom + "_b.bmp"); } if (strExtension.equals("jpg")) { imgTop = new Image("file:" + strNom + "_u.jpg"); imgBottom = new Image("file:" + strNom + "_d.jpg"); imgLeft = new Image("file:" + strNom + "_l.jpg"); imgRight = new Image("file:" + strNom + "_r.jpg"); imgFront = new Image("file:" + strNom + "_f.jpg"); imgBehind = new Image("file:" + strNom + "_b.jpg"); } if (strExtension.equals("tif")) { try { imgTop = ReadWriteImage.readTiff(strNom + "_u.tif"); imgBottom = ReadWriteImage.readTiff(strNom + "_d.tif"); imgLeft = ReadWriteImage.readTiff(strNom + "_l.tif"); imgRight = ReadWriteImage.readTiff(strNom + "_r.tif"); imgFront = ReadWriteImage.readTiff(strNom + "_f.tif"); imgBehind = ReadWriteImage.readTiff(strNom + "_b.tif"); } catch (ImageReadException | IOException ex) { Logger.getLogger(EditeurPanovisu.class.getName()).log(Level.SEVERE, null, ex); } } Image imgEquiRectangulaire = TransformationsPanoramique.cube2rect(imgFront, imgLeft, imgRight, imgBehind, imgTop, imgBottom, 1200); Image imgEquiRectangulaire2 = TransformationsPanoramique.cube2rect(imgFront, imgLeft, imgRight, imgBehind, imgTop, imgBottom, 8000); panoCree.setImgCubeEqui(imgEquiRectangulaire2); Image imgVignetteEquiRectangulaire = TransformationsPanoramique.cube2rect(imgFront, imgLeft, imgRight, imgBehind, imgTop, imgBottom, 300); Image imgPano5 = TransformationsPanoramique.cube2rect(imgFront, imgLeft, imgRight, imgBehind, imgTop, imgBottom, 70); panoCree.setImgPanoramique(imgEquiRectangulaire); Platform.runLater(() -> { lblNiveaux.setText("Cration visualisation panoramique"); pbarAvanceChargement.setProgress(((double) (iNumero - 1) + 1.d / 3.d) / iTotal); }); panoCree.setImgVisuPanoramique(imgTransformationImage(imgEquiRectangulaire2, 1)); int iNombreNiveaux = iCreeNiveauxImageCube(strNom + "_u." + strExtension, getStrRepertPanos(), getiNombrePanoramiques(), "dessus"); Platform.runLater(() -> { pbarAvanceChargement.setProgress(((double) (iNumero - 1) + 4.d / 9.d) / (double) iTotal); }); iCreeNiveauxImageCube(strNom + "_d." + strExtension, getStrRepertPanos(), getiNombrePanoramiques(), "dessous"); Platform.runLater(() -> { pbarAvanceChargement.setProgress(((double) (iNumero - 1) + 5.d / 9.d) / (double) iTotal); }); iCreeNiveauxImageCube(strNom + "_l." + strExtension, getStrRepertPanos(), getiNombrePanoramiques(), "gauche"); Platform.runLater(() -> { pbarAvanceChargement.setProgress(((double) (iNumero - 1) + 2.d / 3.d) / (double) iTotal); }); iCreeNiveauxImageCube(strNom + "_r." + strExtension, getStrRepertPanos(), getiNombrePanoramiques(), "droite"); Platform.runLater(() -> { pbarAvanceChargement.setProgress(((double) (iNumero - 1) + 7.d / 9.d) / (double) iTotal); }); iCreeNiveauxImageCube(strNom + "_f." + strExtension, getStrRepertPanos(), getiNombrePanoramiques(), "devant"); Platform.runLater(() -> { pbarAvanceChargement.setProgress(((double) (iNumero - 1) + 8.d / 9.d) / (double) iTotal); }); iCreeNiveauxImageCube(strNom + "_b." + strExtension, getStrRepertPanos(), getiNombrePanoramiques(), "derriere"); Platform.runLater(() -> { pbarAvanceChargement.setProgress(((double) (iNumero)) / (double) iTotal); }); String nomVignette = strFichierPano.substring(0, strFichierPano.lastIndexOf(".")) + "Vignette.jpg"; File ficVig = new File(nomVignette); Image imgPano3; Image imgPano4; if (ficVig.exists()) { imgPano3 = new Image("file:" + nomVignette, 300, 150, true, true, true); imgPano4 = imgVignetteEquiRectangulaire; } else { imgPano3 = imgVignetteEquiRectangulaire; imgPano4 = imgPano3; } panoCree.setNombreNiveaux(iNombreNiveaux); panoCree.setImgVignettePanoramique(imgPano3); panoCree.setImgPanoRect(imgPano4); panoCree.setImgPanoRectListe(imgPano5); panoCree.setStrTypePanoramique(Panoramique.CUBE); } panoCree.setRegardX(0.0d); panoCree.setRegardY(0.0d); panoCree.setAfficheInfo(true); panoCree.setAfficheTitre(true); panoCree.setStrTitrePanoramique(""); getPanoramiquesProjet()[getiNombrePanoramiques()] = panoCree; setiPanoActuel(getiNombrePanoramiques()); setiNombrePanoramiques(getiNombrePanoramiques() + 1); } @SuppressWarnings("empty-statement") private static void rechargePanoramiqueProjet(String strFichierPano, String typePano) throws InterruptedException { bPanoCharge = true; bEstCharge = true; if (typePano.equals(Panoramique.SPHERE)) { File imageFile = new File(strFichierPano); if (!imageFile.exists()) { imageFile = new File( getStrRepertAppli() + File.separator + "images" + File.separator + "pasImage.jpg"); } try { Metadata metadata = ImageMetadataReader.readMetadata(imageFile); for (Directory directory : metadata.getDirectories()) { System.out.println("Directory: " + directory.getName()); // Log all errors. for (String error : directory.getErrors()) { System.out.println("> error: " + error); } // Log all tags. directory.getTags().stream().forEach((tag) -> { System.out.println("> tag: " + tag.getTagName() + " = " + tag.getDescription()); }); } } catch (ImageProcessingException | IOException ex) { Logger.getLogger(EditeurPanovisu.class.getName()).log(Level.SEVERE, null, ex); } getPanoramiquesProjet()[getiPanoActuel()].setStrNomFichier(strFichierPano); int iNum = getiPanoActuel(); int iNombreNiveaux = iCreeNiveauxImageEqui(imageFile.getAbsolutePath(), strFichierPano, getStrRepertPanos(), iNum, 0, 0); Image imgPano3 = null; Image imgPano4 = null; Image imgPano5 = null; String strExtension = imageFile.getAbsolutePath().substring(imageFile.getAbsolutePath().length() - 3, imageFile.getAbsolutePath().length()); if ("tif".equals(strExtension)) { try { imgPanoRetaille2 = ReadWriteImage.readTiff(imageFile.getAbsolutePath()); imgPanoRetaille2 = ReadWriteImage.resizeImage(imgPanoRetaille2, 1200, 600); String nomVignette = imageFile.getAbsolutePath().substring(0, imageFile.getAbsolutePath().lastIndexOf(".")) + "Vignette.jpg"; File ficVig = new File(nomVignette); if (ficVig.exists()) { imgPano3 = new Image("file:" + nomVignette, 300, 150, true, true, true); imgPano4 = ReadWriteImage.readTiff(imageFile.getAbsolutePath()); imgPano4 = ReadWriteImage.resizeImage(imgPano4, 300, 150); imgPano5 = ReadWriteImage.resizeImage(imgPano4, 70, 35); } else { imgPano3 = ReadWriteImage.readTiff(imageFile.getAbsolutePath()); imgPano3 = ReadWriteImage.resizeImage(imgPano3, 300, 150); imgPano4 = imgPano3; imgPano5 = ReadWriteImage.resizeImage(imgPano3, 70, 35); } getPanoramiquesProjet()[getiPanoActuel()].setImgVisuPanoramique( imgTransformationImage(ReadWriteImage.readTiff(imageFile.getAbsolutePath()), 2)); } catch (ImageReadException | IOException ex) { Logger.getLogger(EditeurPanovisu.class.getName()).log(Level.SEVERE, null, ex); } } else { imgPanoRetaille2 = new Image("file:" + imageFile.getAbsolutePath(), 1200, 600, true, true, true); imgPano5 = new Image("file:" + imageFile.getAbsolutePath(), 70, 35, true, true, true); String nomVignette = imageFile.getAbsolutePath().substring(0, imageFile.getAbsolutePath().lastIndexOf(".")) + "Vignette.jpg"; File ficVig = new File(nomVignette); if (ficVig.exists()) { imgPano3 = new Image("file:" + nomVignette, 300, 150, true, true, true); imgPano4 = new Image("file:" + imageFile.getAbsolutePath(), 300, 150, true, true, true); } else { imgPano3 = new Image("file:" + imageFile.getAbsolutePath(), 300, 150, true, true, true); imgPano4 = imgPano3; } getPanoramiquesProjet()[getiPanoActuel()].setImgVisuPanoramique( imgTransformationImage(new Image("file:" + imageFile.getAbsolutePath()), 2)); } getPanoramiquesProjet()[getiPanoActuel()].setImgPanoramique(imgPanoRetaille2); getPanoramiquesProjet()[getiPanoActuel()].setNombreNiveaux(iNombreNiveaux); getPanoramiquesProjet()[getiPanoActuel()].setImgVignettePanoramique(imgPano3); getPanoramiquesProjet()[getiPanoActuel()].setImgPanoRect(imgPano4); getPanoramiquesProjet()[getiPanoActuel()].setImgPanoRectListe(imgPano5); getPanoramiquesProjet()[getiPanoActuel()].setStrTypePanoramique(Panoramique.SPHERE); } if (typePano.equals(Panoramique.CUBE)) { getPanoramiquesProjet()[getiPanoActuel()].setStrNomFichier(strFichierPano); String strNom = strFichierPano.substring(0, strFichierPano.length() - 6); String strExtension = strFichierPano.substring(strFichierPano.length() - 3, strFichierPano.length()); Image imgTop = null; Image imgBottom = null; Image imgLeft = null; Image imgRight = null; Image imgFront = null; Image imgBehind = null; if (strExtension.equals("bmp")) { imgTop = new Image("file:" + strNom + "_u.bmp"); imgBottom = new Image("file:" + strNom + "_d.bmp"); imgLeft = new Image("file:" + strNom + "_l.bmp"); imgRight = new Image("file:" + strNom + "_r.bmp"); imgFront = new Image("file:" + strNom + "_f.bmp"); imgBehind = new Image("file:" + strNom + "_b.bmp"); } if (strExtension.equals("jpg")) { imgTop = new Image("file:" + strNom + "_u.jpg"); imgBottom = new Image("file:" + strNom + "_d.jpg"); imgLeft = new Image("file:" + strNom + "_l.jpg"); imgRight = new Image("file:" + strNom + "_r.jpg"); imgFront = new Image("file:" + strNom + "_f.jpg"); imgBehind = new Image("file:" + strNom + "_b.jpg"); } if (strExtension.equals("tif")) { try { imgTop = ReadWriteImage.readTiff(strNom + "_u.tif"); imgBottom = ReadWriteImage.readTiff(strNom + "_d.tif"); imgLeft = ReadWriteImage.readTiff(strNom + "_l.tif"); imgRight = ReadWriteImage.readTiff(strNom + "_r.tif"); imgFront = ReadWriteImage.readTiff(strNom + "_f.tif"); imgBehind = ReadWriteImage.readTiff(strNom + "_b.tif"); } catch (ImageReadException | IOException ex) { Logger.getLogger(EditeurPanovisu.class.getName()).log(Level.SEVERE, null, ex); } } Image imgEquiRectangulaire = TransformationsPanoramique.cube2rect(imgFront, imgLeft, imgRight, imgBehind, imgTop, imgBottom, 1200); Image imgEquiRectangulaire2 = TransformationsPanoramique.cube2rect(imgFront, imgLeft, imgRight, imgBehind, imgTop, imgBottom, 4096); Image imgVignetteEquiRectangulaire = TransformationsPanoramique.cube2rect(imgFront, imgLeft, imgRight, imgBehind, imgTop, imgBottom, 300); Image imgPano5 = TransformationsPanoramique.cube2rect(imgFront, imgLeft, imgRight, imgBehind, imgTop, imgBottom, 70); getPanoramiquesProjet()[getiPanoActuel()].setImgPanoramique(imgEquiRectangulaire); getPanoramiquesProjet()[getiPanoActuel()] .setImgVisuPanoramique(imgTransformationImage(imgEquiRectangulaire2, 1)); int iNum = getiPanoActuel(); int iNombreNiveaux = iCreeNiveauxImageCube(strNom + "_u." + strExtension, getStrRepertPanos(), iNum, "dessus"); iCreeNiveauxImageCube(strNom + "_d." + strExtension, getStrRepertPanos(), iNum, "dessous"); iCreeNiveauxImageCube(strNom + "_l." + strExtension, getStrRepertPanos(), iNum, "gauche"); iCreeNiveauxImageCube(strNom + "_r." + strExtension, getStrRepertPanos(), iNum, "droite"); iCreeNiveauxImageCube(strNom + "_f." + strExtension, getStrRepertPanos(), iNum, "devant"); iCreeNiveauxImageCube(strNom + "_b." + strExtension, getStrRepertPanos(), iNum, "derriere"); String nomVignette = strFichierPano.substring(0, strFichierPano.lastIndexOf(".")) + "Vignette.jpg"; File ficVig = new File(nomVignette); Image imgPano3; Image imgPano4; if (ficVig.exists()) { imgPano3 = new Image("file:" + nomVignette, 300, 150, true, true, true); imgPano4 = imgVignetteEquiRectangulaire; } else { imgPano3 = imgVignetteEquiRectangulaire; imgPano4 = imgPano3; } getPanoramiquesProjet()[getiPanoActuel()].setNombreNiveaux(iNombreNiveaux); getPanoramiquesProjet()[getiPanoActuel()].setImgVignettePanoramique(imgPano3); getPanoramiquesProjet()[getiPanoActuel()].setImgPanoRect(imgPano4); getPanoramiquesProjet()[getiPanoActuel()].setImgPanoRectListe(imgPano5); getPanoramiquesProjet()[getiPanoActuel()].setStrTypePanoramique(Panoramique.CUBE); } } /** * */ private static void transformationCube2Equi() { EquiCubeDialogController C2EController = new EquiCubeDialogController(); try { C2EController.afficheFenetre(EquiCubeDialogController.CUBE2QUI); } catch (Exception ex) { Logger.getLogger(EditeurPanovisu.class.getName()).log(Level.SEVERE, null, ex); } } /** * */ private static void transformationEqui2Cube() { EquiCubeDialogController E2CController = new EquiCubeDialogController(); try { E2CController.afficheFenetre(EquiCubeDialogController.EQUI2CUBE); } catch (Exception ex) { Logger.getLogger(EditeurPanovisu.class.getName()).log(Level.SEVERE, null, ex); } } /** * * @throws IOException Exception d'entre sortie */ private static void modeleSauver() throws IOException { File fileTemplate; FileChooser fcRepertChoix = new FileChooser(); FileChooser.ExtensionFilter extFilter = new FileChooser.ExtensionFilter("fichier Modle panoVisu (*.tpl)", "*.tpl"); fcRepertChoix.getExtensionFilters().add(extFilter); File fileRepert = new File(getStrRepertAppli() + File.separator + "templates"); if (!fileRepert.exists()) { fileRepert.mkdirs(); } fcRepertChoix.setInitialDirectory(fileRepert); fileTemplate = fcRepertChoix.showSaveDialog(null); if (fileTemplate != null) { String strContenuFichier = getGestionnaireInterface().strGetTemplate(); fileTemplate.setWritable(true); OutputStreamWriter oswTemplate = new OutputStreamWriter(new FileOutputStream(fileTemplate), "UTF-8"); try (BufferedWriter bwTemplate = new BufferedWriter(oswTemplate)) { bwTemplate.write(strContenuFichier); } Alert alert = new Alert(AlertType.INFORMATION); alert.setTitle(rbLocalisation.getString("main.dialog.sauveModele")); alert.setHeaderText(null); alert.setContentText(rbLocalisation.getString("main.dialog.sauveModeleMessage")); alert.showAndWait(); } } /** * * @throws IOException Exception d'entre sortie */ private static void modeleCharger() throws IOException { FileChooser fileRepertChoix = new FileChooser(); FileChooser.ExtensionFilter extFilter = new FileChooser.ExtensionFilter("fichier panoVisu (*.tpl)", "*.tpl"); fileRepertChoix.getExtensionFilters().add(extFilter); File repert = new File(getStrRepertAppli() + File.separator + "templates"); fileRepertChoix.setInitialDirectory(repert); File filetemplate = fileRepertChoix.showOpenDialog(getStPrincipal()); if (filetemplate != null) { try { List<String> strListTemplate = new ArrayList<>(); BufferedReader brTemplate = new BufferedReader( new InputStreamReader(new FileInputStream(filetemplate), "UTF-8")); String strLigneTexte; while ((strLigneTexte = brTemplate.readLine()) != null) { strListTemplate.add(strLigneTexte); } getGestionnaireInterface().setbTemplate(true); getGestionnaireInterface().setTemplate(strListTemplate); boolean bSauve = isbDejaSauve(); getGestionnaireInterface().afficheTemplate(); setbDejaSauve(bSauve); if (bSauve) { getStPrincipal().setTitle(getStPrincipal().getTitle().replace(" *", "")); } else { getStPrincipal().setTitle(getStPrincipal().getTitle().replace(" *", "") + " *"); } getGestionnaireInterface().setbTemplate(false); } catch (FileNotFoundException ex) { Logger.getLogger(EditeurPanovisu.class.getName()).log(Level.SEVERE, null, ex); } } } /** * * @param iNumZone numro de la zone * @param points liste de points du polygone * @return ancres du polygone */ private static ObservableList<AncreForme> olCreeAncresPourPolygone(int iNumZone, final ObservableList<Double> points) { ObservableList<AncreForme> olAnchors = FXCollections.observableArrayList(); for (int i = 0; i < points.size(); i += 2) { final int idx = i; DoubleProperty xProperty = new SimpleDoubleProperty(points.get(i)); DoubleProperty yProperty = new SimpleDoubleProperty(points.get(i + 1)); xProperty.addListener((ObservableValue<? extends Number> ov, Number oldX, Number x) -> { points.set(idx, (double) x); String chaine = ""; chaine = points.stream().map((point) -> point.toString() + ",").reduce(chaine, String::concat); chaine = chaine.substring(0, chaine.length() - 1); zones[iNumZone].setStrCoordonneesZone(chaine); }); yProperty.addListener((ObservableValue<? extends Number> ov, Number oldY, Number y) -> { points.set(idx + 1, (double) y); String chaine = ""; chaine = points.stream().map((point) -> point.toString() + ",").reduce(chaine, String::concat); chaine = chaine.substring(0, chaine.length() - 1); zones[iNumZone].setStrCoordonneesZone(chaine); }); olAnchors.add(new AncreForme(Color.GOLD, xProperty, yProperty)); } return olAnchors; } /** * * @param iNumZone numro de la zone * @param cercle cercle concern * @return ancres cercles */ private static ObservableList<AncreForme> olCreeAncresPourCercle(int iNumZone, Circle cercle) { ObservableList<AncreForme> olAnchors = FXCollections.observableArrayList(); DoubleProperty xProperty1 = new SimpleDoubleProperty(cercle.getCenterX()); DoubleProperty yProperty1 = new SimpleDoubleProperty(cercle.getCenterY()); olAnchors.add(new AncreForme(Color.GOLD, xProperty1, yProperty1)); DoubleProperty xProperty2 = new SimpleDoubleProperty(cercle.getCenterX() + cercle.getRadius()); DoubleProperty yProperty2 = new SimpleDoubleProperty(cercle.getCenterY()); final AncreForme ancRayon = new AncreForme(Color.BLUEVIOLET, xProperty2, yProperty2); olAnchors.add(ancRayon); xProperty1.addListener((ObservableValue<? extends Number> ov, Number oldX, Number x) -> { double dX = (double) x - cercle.getCenterX(); double rayon = Math.sqrt(Math.pow(cercle.getCenterX() - xProperty2.get(), 2.d) + Math.pow(cercle.getCenterY() - yProperty2.get(), 2.d)); cercle.setCenterX((double) x); ancRayon.setCenterX(ancRayon.getCenterX() + dX); String chaine = Math.round(cercle.getCenterX() * 10) / 10 + "," + Math.round(cercle.getCenterY() * 10) / 10 + "," + Math.round(rayon * 10) / 10; zones[iNumZone].setStrCoordonneesZone(chaine); }); yProperty1.addListener((ObservableValue<? extends Number> ov, Number oldY, Number y) -> { double dY = -cercle.getCenterY() + (double) y; double rayon = Math.sqrt(Math.pow(cercle.getCenterX() - xProperty2.get(), 2.d) + Math.pow(cercle.getCenterY() - yProperty2.get(), 2.d)); cercle.setCenterY((double) y); ancRayon.setCenterY(ancRayon.getCenterY() + dY); String chaine = Math.round(cercle.getCenterX() * 10) / 10 + "," + Math.round(cercle.getCenterY() * 10) / 10 + "," + Math.round(rayon * 10) / 10; zones[iNumZone].setStrCoordonneesZone(chaine); }); xProperty2.addListener((ObservableValue<? extends Number> ov, Number oldX, Number x) -> { double rayon = Math.sqrt(Math.pow(cercle.getCenterX() - (double) x, 2.d) + Math.pow(cercle.getCenterY() - yProperty2.get(), 2.d)); cercle.setRadius(rayon); String chaine = Math.round(cercle.getCenterX() * 10) / 10 + "," + Math.round(cercle.getCenterY() * 10) / 10 + "," + Math.round(rayon * 10) / 10; zones[iNumZone].setStrCoordonneesZone(chaine); }); yProperty2.addListener((ObservableValue<? extends Number> ov, Number oldY, Number y) -> { double rayon = Math.sqrt(Math.pow(cercle.getCenterX() - xProperty2.get(), 2.d) + Math.pow(cercle.getCenterY() - (double) y, 2.d)); cercle.setRadius(rayon); String chaine = Math.round(cercle.getCenterX() * 10) / 10 + "," + Math.round(cercle.getCenterY() * 10) / 10 + "," + Math.round(rayon * 10) / 10; zones[iNumZone].setStrCoordonneesZone(chaine); }); return olAnchors; } /** * * @param iNumZone numero de la zone * @param rect rectangle concern * @return ancres rectangle */ private static ObservableList<AncreForme> olCreeAncresPourRectangle(int iNumZone, Rectangle rect) { ObservableList<AncreForme> olAnchors = FXCollections.observableArrayList(); DoubleProperty xProperty1 = new SimpleDoubleProperty(rect.getX()); DoubleProperty yProperty1 = new SimpleDoubleProperty(rect.getY()); DoubleProperty xProperty2 = new SimpleDoubleProperty(rect.getWidth() + rect.getX()); DoubleProperty yProperty2 = new SimpleDoubleProperty(rect.getHeight() + rect.getY()); olAnchors.add(new AncreForme(Color.GOLD, xProperty1, yProperty1)); AncreForme ancrePoint2 = new AncreForme(Color.BLUEVIOLET, xProperty2, yProperty2); olAnchors.add(ancrePoint2); xProperty1.addListener((ObservableValue<? extends Number> ov, Number oldX, Number x) -> { double dX = -rect.getX() + (double) x; rect.setX((double) x); ancrePoint2.setCenterX(ancrePoint2.getCenterX() + dX); String chaine = Math.round(rect.getX() * 10) / 10 + "," + Math.round(rect.getY() * 10) / 10 + "," + Math.round((rect.getX() + rect.getWidth()) * 10) / 10 + "," + Math.round((rect.getY() + rect.getHeight()) * 10) / 10; zones[iNumZone].setStrCoordonneesZone(chaine); }); yProperty1.addListener((ObservableValue<? extends Number> ov, Number oldY, Number y) -> { double dY = -rect.getY() + (double) y; rect.setY((double) y); ancrePoint2.setCenterY(ancrePoint2.getCenterY() + dY); String chaine = Math.round(rect.getX() * 10) / 10 + "," + Math.round(rect.getY() * 10) / 10 + "," + Math.round((rect.getX() + rect.getWidth()) * 10) / 10 + "," + Math.round((rect.getY() + rect.getHeight()) * 10) / 10; zones[iNumZone].setStrCoordonneesZone(chaine); }); xProperty2.addListener((ObservableValue<? extends Number> ov, Number oldX, Number x) -> { rect.setWidth((double) x - rect.getX()); String chaine = Math.round(rect.getX() * 10) / 10 + "," + Math.round(rect.getY() * 10) / 10 + "," + Math.round((rect.getX() + rect.getWidth()) * 10) / 10 + "," + Math.round((rect.getY() + rect.getHeight()) * 10) / 10; zones[iNumZone].setStrCoordonneesZone(chaine); }); yProperty2.addListener((ObservableValue<? extends Number> ov, Number oldY, Number y) -> { rect.setHeight((double) y - rect.getY()); String chaine = Math.round(rect.getX() * 10) / 10 + "," + Math.round(rect.getY() * 10) / 10 + "," + Math.round((rect.getX() + rect.getWidth()) * 10) / 10 + "," + Math.round((rect.getY() + rect.getHeight()) * 10) / 10; zones[iNumZone].setStrCoordonneesZone(chaine); }); return olAnchors; } /** * * @param iLargeur * @param iHauteur * @param bMasqueZones * @param strIdZone * @param mouseEvent */ private static void choixZone(int iLargeur, int iHauteur, boolean bMasqueZones, String strIdZone, MouseEvent mouseEvent) { ComboBox cbTouchesBarre = new ComboBox(); cbTouchesBarre.getItems().clear(); for (int i = 0; i < strTouchesBarre.length; i++) { cbTouchesBarre.getItems().add(i, strTouchesBarre[i]); } cbTouchesBarre.setLayoutX(200); cbTouchesBarre.setLayoutX(40); final int iNumeroZone = Integer.parseInt(strIdZone.split("-")[1]); if (mouseEvent.getButton().equals(MouseButton.PRIMARY)) { if (mouseEvent.getClickCount() == 2) { for (int ij = iNumeroZone; ij < iNombreZones - 1; ij++) { zones[ij] = zones[ij + 1]; } iNombreZones--; afficheBarrePersonnalisee(iLargeur, iHauteur, bMasqueZones); } else { afficheBarrePersonnalisee(iLargeur, iHauteur, bMasqueZones); apZoneBarrePersonnalisee.getChildren().clear(); apZoneBarrePersonnalisee.getChildren().add(cbTouchesBarre); ZoneTelecommande zone = zones[iNumeroZone]; int index = -1; for (int ij = 0; ij < strCodeBarre.length; ij++) { if (strCodeBarre[ij].equals(zone.getStrIdZone())) { index = ij; } } if (index != -1) { cbTouchesBarre.getSelectionModel().select(index); } cbTouchesBarre.valueProperty().addListener((ov, ancienneValeur, nouvelleValeur) -> { if (nouvelleValeur != null) { String strId = strCodeBarre[cbTouchesBarre.getSelectionModel().getSelectedIndex()]; zones[iNumeroZone].setStrIdZone(strId); } }); Label lblTypeBarre = new Label(zone.getStrTypeZone()); lblTypeBarre.setLayoutX(20); lblTypeBarre.setLayoutY(40); Label lblCoordsBarre = new Label(zone.getStrCoordonneesZone()); lblCoordsBarre.setLayoutX(20); lblCoordsBarre.setLayoutY(70); lblCoordsBarre.setPrefWidth(260); lblCoordsBarre.setMaxWidth(260); lblCoordsBarre.setWrapText(true); apZoneBarrePersonnalisee.getChildren().addAll(lblTypeBarre, lblCoordsBarre); switch (zone.getStrTypeZone()) { case "poly": Polygon poly = (Polygon) apImgBarrePersonnalisee.lookup("#" + strIdZone); poly.setFill(Color.rgb(255, 0, 0, 0.5)); poly.setStroke(Color.YELLOW); apImgBarrePersonnalisee.getChildren() .addAll(olCreeAncresPourPolygone(iNumeroZone, poly.getPoints())); break; case "rect": Rectangle rect = (Rectangle) apImgBarrePersonnalisee.lookup("#" + strIdZone); rect.setFill(Color.rgb(255, 0, 0, 0.5)); rect.setStroke(Color.YELLOW); apImgBarrePersonnalisee.getChildren().addAll(olCreeAncresPourRectangle(iNumeroZone, rect)); break; case "circle": Circle cercle = (Circle) apImgBarrePersonnalisee.lookup("#" + strIdZone); cercle.setFill(Color.rgb(255, 0, 0, 0.5)); cercle.setStroke(Color.YELLOW); apImgBarrePersonnalisee.getChildren().addAll(olCreeAncresPourCercle(iNumeroZone, cercle)); break; } } } } /** * * @param iLargeur * @param iHauteur * @param bMasqueZones */ private static void afficheBarrePersonnalisee(int iLargeur, int iHauteur, boolean bMasqueZones) { apImgBarrePersonnalisee.getChildren().clear(); apZoneBarrePersonnalisee.getChildren().clear(); ImageView ivBarrePersonnalisee = new ImageView(imgBarrePersonnalisee); apImgBarrePersonnalisee.getChildren().add(ivBarrePersonnalisee); apImgBarrePersonnalisee.setPrefWidth(imgBarrePersonnalisee.getWidth()); apImgBarrePersonnalisee.setPrefHeight(imgBarrePersonnalisee.getHeight()); apImgBarrePersonnalisee.setCursor(Cursor.CROSSHAIR); apImgBarrePersonnalisee.setLayoutX((iLargeur - 300 - apImgBarrePersonnalisee.getPrefWidth()) / 2.d); apImgBarrePersonnalisee.setLayoutY((iHauteur - apImgBarrePersonnalisee.getPrefHeight()) / 2.d); if ((iNombreZones > 0) && !bMasqueZones) { for (int i = 0; i < iNombreZones; i++) { ZoneTelecommande zone = zones[i]; String[] strPoints = zone.getStrCoordonneesZone().split(","); double[] points = new double[strPoints.length]; for (int ij = 0; ij < strPoints.length; ij++) { points[ij] = Double.parseDouble(strPoints[ij]); } final String strIdZone = zone.getStrTypeZone() + "-" + i; switch (zone.getStrTypeZone()) { case "circle": Circle cercle = new Circle(points[0], points[1], points[2]); cercle.setFill(Color.rgb(255, 255, 0, 0.5)); cercle.setStroke(Color.FORESTGREEN); cercle.setCursor(Cursor.DEFAULT); apImgBarrePersonnalisee.getChildren().add(cercle); cercle.setId(strIdZone); cercle.setOnMouseClicked((t) -> { choixZone(iLargeur, iHauteur, bMasqueZones, strIdZone, t); t.consume(); }); break; case "rect": double largRect = points[2] - points[0]; double hautRect = points[3] - points[1]; Rectangle rect = new Rectangle(points[0], points[1], largRect, hautRect); rect.setFill(Color.rgb(255, 255, 0, 0.5)); rect.setStroke(Color.FORESTGREEN); rect.setCursor(Cursor.DEFAULT); apImgBarrePersonnalisee.getChildren().add(rect); rect.setId(strIdZone); rect.setOnMouseClicked((t) -> { choixZone(iLargeur, iHauteur, bMasqueZones, strIdZone, t); t.consume(); }); break; case "poly": Polygon poly = new Polygon(points); poly.setFill(Color.rgb(255, 255, 0, 0.5)); poly.setStroke(Color.FORESTGREEN); poly.setStrokeWidth(3); poly.setCursor(Cursor.DEFAULT); poly.setStrokeLineCap(StrokeLineCap.ROUND); poly.setId(strIdZone); apImgBarrePersonnalisee.getChildren().add(poly); poly.setOnMouseClicked((t) -> { choixZone(iLargeur, iHauteur, bMasqueZones, strIdZone, t); t.consume(); }); break; } } } } /** * * @param iLargeur * @param iHauteur * @param bMasqueZones */ private static void ajouterZone(int iLargeur, int iHauteur, boolean bMasqueZones) { if (iNombreZones == -1) { iNombreZones = 0; } final ZoneTelecommande zone = new ZoneTelecommande(); strTypeZone = "poly"; zone.setStrTypeZone(strTypeZone); iNombrePointsZone = 0; bRecommenceZone = false; apZoneBarrePersonnalisee.getChildren().clear(); Button btnAnnuler = new Button(rbLocalisation.getString("main.annuler"), new ImageView(new Image("file:" + getStrRepertAppli() + "/images/annule.png"))); Button btnValider = new Button(rbLocalisation.getString("main.valider"), new ImageView(new Image("file:" + getStrRepertAppli() + "/images/valide.png"))); btnValider.setLayoutX(180); btnValider.setLayoutY(170); btnAnnuler.setLayoutX(80); btnAnnuler.setLayoutY(170); ToggleGroup tgTypeZone = new ToggleGroup(); Label lblTypeZone = new Label(rbLocalisation.getString("main.typeZone")); lblTypeZone.setLayoutX(20); lblTypeZone.setLayoutY(10); RadioButton rbCercleZone = new RadioButton(rbLocalisation.getString("main.cercle")); rbCercleZone.setLayoutX(20); rbCercleZone.setLayoutY(40); rbCercleZone.setUserData("circle"); rbCercleZone.setToggleGroup(tgTypeZone); RadioButton rbRectZone = new RadioButton(rbLocalisation.getString("main.rectangle")); rbRectZone.setLayoutX(120); rbRectZone.setLayoutY(40); rbRectZone.setUserData("rect"); rbRectZone.setToggleGroup(tgTypeZone); RadioButton rbPolyZone = new RadioButton(rbLocalisation.getString("main.polygone")); rbPolyZone.setLayoutX(220); rbPolyZone.setLayoutY(40); rbPolyZone.setUserData("poly"); rbPolyZone.setToggleGroup(tgTypeZone); rbPolyZone.setSelected(true); ComboBox cbTouchesBarre = new ComboBox(); cbTouchesBarre.getItems().clear(); for (int i = 0; i < strTouchesBarre.length; i++) { cbTouchesBarre.getItems().add(i, strTouchesBarre[i]); } cbTouchesBarre.setLayoutX(50); cbTouchesBarre.setLayoutY(110); afficheBarrePersonnalisee(iLargeur, iHauteur, bMasqueZones); AnchorPane apCreeZone = new AnchorPane(); apCreeZone.setStyle("-fx-background-color : rgba(0,0,0,0.1)"); apCreeZone.setPrefWidth(imgBarrePersonnalisee.getWidth()); apCreeZone.setPrefHeight(imgBarrePersonnalisee.getHeight()); apCreeZone.setCursor(Cursor.CROSSHAIR); apImgBarrePersonnalisee.getChildren().add(apCreeZone); apZoneBarrePersonnalisee.getChildren().addAll(lblTypeZone, rbCercleZone, rbRectZone, rbPolyZone, cbTouchesBarre, btnAnnuler, btnValider); apCreeZone.setOnMouseClicked((t) -> { rbCercleZone.setDisable(true); rbRectZone.setDisable(true); rbPolyZone.setDisable(true); iNombrePointsZone++; switch (strTypeZone) { case "rect": if (iNombrePointsZone == 1) { apCreeZone.getChildren().clear(); x1Zone = t.getX(); y1Zone = t.getY(); Circle cercle = new Circle(t.getX(), t.getY(), 4); cercle.setFill(Color.rgb(255, 0, 0, 0.5)); cercle.setStroke(Color.YELLOW); apCreeZone.getChildren().add(cercle); } if (iNombrePointsZone == 2) { apCreeZone.getChildren().clear(); Rectangle rect = new Rectangle(x1Zone, y1Zone, t.getX() - x1Zone, t.getY() - y1Zone); rect.setFill(Color.rgb(255, 0, 0, 0.5)); rect.setStroke(Color.YELLOW); apCreeZone.getChildren().add(rect); String chaine = Math.round(x1Zone * 10) / 10 + "," + Math.round(y1Zone * 10) / 10 + "," + Math.round(t.getX() * 10) / 10 + "," + Math.round(t.getY() * 10) / 10; zone.setStrCoordonneesZone(chaine); iNombrePointsZone = 0; } break; case "circle": if (iNombrePointsZone == 1) { apCreeZone.getChildren().clear(); x1Zone = t.getX(); y1Zone = t.getY(); Circle cercle = new Circle(t.getX(), t.getY(), 4); cercle.setFill(Color.rgb(255, 0, 0, 0.5)); cercle.setStroke(Color.YELLOW); apCreeZone.getChildren().add(cercle); } if (iNombrePointsZone == 2) { apCreeZone.getChildren().clear(); double rayon = Math.sqrt(Math.pow(x1Zone - t.getX(), 2.d) + Math.pow(y1Zone - t.getY(), 2.d)); Circle cercle = new Circle(x1Zone, y1Zone, rayon); cercle.setFill(Color.rgb(255, 0, 0, 0.5)); cercle.setStroke(Color.YELLOW); apCreeZone.getChildren().add(cercle); String chaine = Math.round(x1Zone * 10) / 10 + "," + Math.round(y1Zone * 10) / 10 + "," + Math.round(rayon * 10) / 10; zone.setStrCoordonneesZone(chaine); iNombrePointsZone = 0; } break; case "poly": if (bRecommenceZone) { bRecommenceZone = false; iNombrePointsZone = 1; } if (iNombrePointsZone == 1) { apCreeZone.getChildren().clear(); x1Zone = t.getX(); y1Zone = t.getY(); Circle cercle = new Circle(t.getX(), t.getY(), 4); cercle.setFill(Color.rgb(255, 0, 0, 0.5)); cercle.setStroke(Color.YELLOW); apCreeZone.getChildren().add(cercle); pointsPolyZone[(iNombrePointsZone - 1) * 2] = t.getX(); pointsPolyZone[(iNombrePointsZone - 1) * 2 + 1] = t.getY(); } if (iNombrePointsZone == 2) { apCreeZone.getChildren().clear(); Line ligne = new Line(x1Zone, y1Zone, t.getX(), t.getY()); ligne.setStroke(Color.YELLOW); apCreeZone.getChildren().add(ligne); pointsPolyZone[(iNombrePointsZone - 1) * 2] = t.getX(); pointsPolyZone[(iNombrePointsZone - 1) * 2 + 1] = t.getY(); } if (iNombrePointsZone > 2) { pointsPolyZone[(iNombrePointsZone - 1) * 2] = t.getX(); pointsPolyZone[(iNombrePointsZone - 1) * 2 + 1] = t.getY(); apCreeZone.getChildren().clear(); Polygon poly = new Polygon(); for (int i = 0; i < iNombrePointsZone; i++) { poly.getPoints().addAll(pointsPolyZone[i * 2], pointsPolyZone[i * 2 + 1]); } poly.setFill(Color.rgb(255, 0, 0, 0.5)); poly.setStroke(Color.YELLOW); apCreeZone.getChildren().add(poly); } if (t.getClickCount() == 2) { String chaine = ""; for (int i = 0; i < iNombrePointsZone; i++) { if (i != 0) { chaine += ","; } chaine += Math.round(pointsPolyZone[i * 2] * 10) / 10 + "," + Math.round(pointsPolyZone[i * 2 + 1] * 10) / 10; } zone.setStrCoordonneesZone(chaine); bRecommenceZone = true; } break; } }); apCreeZone.setOnMouseMoved((t) -> { switch (strTypeZone) { case "rect": if (iNombrePointsZone == 1) { apCreeZone.getChildren().clear(); Rectangle rect = new Rectangle(x1Zone, y1Zone, t.getX() - x1Zone, t.getY() - y1Zone); rect.setFill(Color.rgb(255, 0, 0, 0.5)); rect.setStroke(Color.YELLOW); apCreeZone.getChildren().add(rect); } break; case "circle": if (iNombrePointsZone == 1) { apCreeZone.getChildren().clear(); double rayon = Math.sqrt(Math.pow(x1Zone - t.getX(), 2.d) + Math.pow(y1Zone - t.getY(), 2.d)); Circle cercle = new Circle(x1Zone, y1Zone, rayon); cercle.setFill(Color.rgb(255, 0, 0, 0.5)); cercle.setStroke(Color.YELLOW); apCreeZone.getChildren().add(cercle); } break; case "poly": if (!bRecommenceZone) { if (iNombrePointsZone == 1) { apCreeZone.getChildren().clear(); Line ligne = new Line(x1Zone, y1Zone, t.getX(), t.getY()); ligne.setStroke(Color.YELLOW); apCreeZone.getChildren().add(ligne); } if (iNombrePointsZone > 1) { apCreeZone.getChildren().clear(); Polygon poly = new Polygon(); for (int i = 0; i < iNombrePointsZone; i++) { poly.getPoints().addAll(pointsPolyZone[i * 2], pointsPolyZone[i * 2 + 1]); } poly.getPoints().addAll(t.getX(), t.getY()); poly.setFill(Color.rgb(255, 0, 0, 0.5)); poly.setStroke(Color.YELLOW); apCreeZone.getChildren().add(poly); } } break; } }); btnValider.setOnMouseClicked((t) -> { if (strTypeZone.equals("poly")) { String strChaine = ""; for (int i = 0; i < iNombrePointsZone; i++) { if (i != 0) { strChaine += ","; } strChaine += Math.round(pointsPolyZone[i * 2] * 10) / 10 + "," + Math.round(pointsPolyZone[i * 2 + 1] * 10) / 10; } zone.setStrCoordonneesZone(strChaine); } zones[iNombreZones] = zone; iNombreZones++; afficheBarrePersonnalisee(iLargeur, iHauteur, bMasqueZones); btnAjouteZone.setDisable(false); }); btnAnnuler.setOnMouseClicked((t) -> { afficheBarrePersonnalisee(iLargeur, iHauteur, bMasqueZones); btnAjouteZone.setDisable(false); }); cbTouchesBarre.valueProperty().addListener((ov, strAncienneValeur, strNouvelleValeur) -> { if (strNouvelleValeur != null) { String strId = strCodeBarre[cbTouchesBarre.getSelectionModel().getSelectedIndex()]; zone.setStrIdZone(strId); } }); tgTypeZone.selectedToggleProperty() .addListener((ObservableValue<? extends Toggle> ov, Toggle old_toggle, Toggle new_toggle) -> { if (tgTypeZone.getSelectedToggle() != null) { strTypeZone = tgTypeZone.getSelectedToggle().getUserData().toString(); zone.setStrTypeZone(strTypeZone); } }); } /** * * @param fichShp * @throws FileNotFoundException Exception fichier non trouv * @throws IOException Exception d'entre sortie */ @SuppressWarnings("null") private static void sauverBarre(String fichShp) throws FileNotFoundException, IOException { OutputStreamWriter oswFichierBarre = null; try { String strZones = ""; for (int i = 0; i < iNombreZones; i++) { ZoneTelecommande zone = zones[i]; strZones += "[area=>id:" + zone.getStrIdZone() + ";"; strZones += "shape:" + zone.getStrTypeZone() + ";"; strZones += "coords:" + zone.getStrCoordonneesZone() + "]\n"; } File fileIndexHTML = new File(fichShp); if (!fileIndexHTML.exists()) { fileIndexHTML.createNewFile(); } fileIndexHTML.setWritable(true); oswFichierBarre = new OutputStreamWriter(new FileOutputStream(fileIndexHTML), "UTF-8"); try (BufferedWriter bwFichierBarre = new BufferedWriter(oswFichierBarre)) { bwFichierBarre.write(strZones); } } catch (UnsupportedEncodingException ex) { Logger.getLogger(EditeurPanovisu.class.getName()).log(Level.SEVERE, null, ex); } finally { try { oswFichierBarre.close(); } catch (IOException ex) { Logger.getLogger(EditeurPanovisu.class.getName()).log(Level.SEVERE, null, ex); } } } private static void creeDiaporamaHTML(Diaporama diapo, int iNumero) throws IOException { String strDiapoRepert = getStrRepertTemp() + "/diaporama"; File fileDiapoRepert = new File(strDiapoRepert); if (!fileDiapoRepert.exists()) { fileDiapoRepert.mkdirs(); copieRepertoire(getStrRepertAppli() + File.separator + "diaporama", fileDiapoRepert.getAbsolutePath()); } String strImageDiapoRepert = getStrRepertTemp() + "/diaporama/images"; File fileImagesDiapoRepert = new File(strImageDiapoRepert); if (!fileImagesDiapoRepert.exists()) { fileImagesDiapoRepert.mkdirs(); } String strVignetteDiapoRepert = getStrRepertTemp() + "/diaporama/vignettes"; File fileVignetteDiapoRepert = new File(strVignetteDiapoRepert); if (!fileVignetteDiapoRepert.exists()) { fileVignetteDiapoRepert.mkdirs(); } for (int i = 0; i < diapo.getiNombreImages(); i++) { copieFichierRepertoire(diapo.getStrFichiersImage(i), strImageDiapoRepert); Image img = new Image("file:" + diapo.getStrFichiersImage(i), 400, 300, true, true); ReadWriteImage.writeJpeg(img, fileVignetteDiapoRepert + File.separator + diapo.getStrFichiers(i), 0.75f, false, 0); } String strDiapoNom = "diapo" + iNumero + ".html"; int intervalle = (int) (diapo.getDelaiDiaporama() * 1000); String strContenuHTML = "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n" + "\n" + "<html xmlns=\"http://www.w3.org/1999/xhtml\" xml:lang=\"en\" lang=\"en\">\n" + "\n" + " <!--\n" + " Supersized - Fullscreen Slideshow jQuery Plugin\n" + " Version : 3.2.7\n" + " Site : www.buildinternet.com/project/supersized\n" + " \n" + " Author : Sam Dunn\n" + " Company : One Mighty Roar (www.onemightyroar.com)\n" + " License : MIT License / GPL License\n" + " -->\n" + "\n" + " <head>\n" + "\n" + " <title>Supersized - Full Screen Background Slideshow jQuery Plugin</title>\n" + " <meta http-equiv=\"content-type\" content=\"text/html; charset=UTF-8\" />\n" + "\n" + " <link rel=\"stylesheet\" href=\"css/supersized.css\" type=\"text/css\" media=\"screen\" />\n" + " <link rel=\"stylesheet\" href=\"theme/supersized.shutter.css\" type=\"text/css\" media=\"screen\" />\n" + "\n" + " <script type=\"text/javascript\" src=\"https://ajax.googleapis.com/ajax/libs/jquery/1.6.1/jquery.min.js\"></script>\n" + " <script type=\"text/javascript\" src=\"js/jquery.easing.min.js\"></script>\n" + "\n" + " <script type=\"text/javascript\" src=\"js/supersized.3.2.7.min.js\"></script>\n" + " <script type=\"text/javascript\" src=\"theme/supersized.shutter.min.js\"></script>\n" + "\n" + " <script type=\"text/javascript\">\n" + "\n" + " jQuery(function ($) {\n" + "\n" + " $.supersized({\n" + " // Functionality\n" + " slideshow: 1, // Slideshow on/off\n" + " autoplay: 1, // Slideshow starts playing automatically\n" + " start_slide: 1, // Start slide (0 is random)\n" + " stop_loop: 0, // Pauses slideshow on last slide\n" + " random: 0, // Randomize slide order (Ignores start slide)\n" + " slide_interval: " + intervalle + ", // Length between transitions\n" + " transition: 1, // 0-None, 1-Fade, 2-Slide Top, 3-Slide Right, 4-Slide Bottom, 5-Slide Left, 6-Carousel Right, 7-Carousel Left\n" + " transition_speed: 1200, // Speed of transition\n" + " new_window: 1, // Image links open in new window/tab\n" + " pause_hover: 0, // Pause slideshow on hover\n" + " keyboard_nav: 1, // Keyboard navigation on/off\n" + " performance: 2, // 0-Normal, 1-Hybrid speed/quality, 2-Optimizes image quality, 3-Optimizes transition speed // (Only works for Firefox/IE, not Webkit)\n" + " image_protect: 1, // Disables image dragging and right click with Javascript\n" + "\n" + " // Size & Position \n" + " min_width: 0, // Min width allowed (in pixels)\n" + " min_height: 0, // Min height allowed (in pixels)\n" + " vertical_center: 1, // Vertically center background\n" + " horizontal_center: 1, // Horizontally center background\n" + " fit_always: 1, // Image will never exceed browser width or height (Ignores min. dimensions)\n" + " fit_portrait: 1, // Portrait images will not exceed browser height\n" + " fit_landscape: 0, // Landscape images will not exceed browser width\n" + "\n" + " // Components \n" + " slide_links: 'blank', // Individual links for each slide (Options: false, 'num', 'name', 'blank')\n" + " thumb_links: 1, // Individual thumb links for each slide\n" + " thumbnail_navigation: 0, // Thumbnail navigation\n" + " slides: [// Slideshow Images\n"; for (int i = 0; i < diapo.getiNombreImages(); i++) { strContenuHTML += " {" + "image: 'images/" + diapo.getStrFichiers(i) + "', " + "title: '" + diapo.getStrLibellesImages(i).replace("'", "'").replace("<", "<").replace(">", ">") .replace("\"", """) + "', " + "thumb: 'vignettes/" + diapo.getStrFichiers(i) + "', " + "url: ''" + "},\n"; } strContenuHTML += " ],\n" + " // Theme Options \n" + " progress_bar: 1, // Timer for each slide \n" + " mouse_scrub: 0\n" + "\n" + " });\n" + " });\n" + "\n" + " </script>\n" + " <style type=\"text/css\">\n" + " #prevslide,#nextslide,#controls,#controls-wrapper,#progress-back,#thumb-tray{\n" + " opacity : 0.4;\n" + " transition : 0.5 ease;\n" + " }\n" + " #supersized li{\n" + " background: " + diapo.getStrCouleurFondDiaporama() + ";\n" + " }\n" + " </style>\n" + "\n" + " </head>\n" + "\n" + " <body>\n" + "\n" + "\n" + " <!--Thumbnail Navigation-->\n" + " <div id=\"prevthumb\"></div>\n" + " <div id=\"nextthumb\"></div>\n" + "\n" + " <!--Arrow Navigation-->\n" + " <a id=\"prevslide\" class=\"load-item\"></a>\n" + " <a id=\"nextslide\" class=\"load-item\"></a>\n" + "\n" + " <div id=\"thumb-tray\" class=\"load-item\">\n" + " <div id=\"thumb-back\"></div>\n" + " <div id=\"thumb-forward\"></div>\n" + " </div>\n" + "\n" + " <!--Time Bar-->\n" + "<!-- <div id=\"progress-back\" class=\"load-item\">\n" + " <div id=\"progress-bar\"></div>\n" + " </div>-->\n" + "\n" + " <!--Control Bar-->\n" + " <div id=\"controls-wrapper\" class=\"load-item\">\n" + " <div id=\"controls\">\n" + "\n" + " <a id=\"play-button\"><img id=\"pauseplay\" src=\"img/pause.png\"/></a>\n" + "\n" + " <!--Slide counter-->\n" + " <div id=\"slidecounter\">\n" + " <span class=\"slidenumber\"></span> / <span class=\"totalslides\"></span>\n" + " </div>\n" + "\n" + " <!--Slide captions displayed here-->\n" + " <div id=\"slidecaption\"></div>\n" + "\n" + " <!--Thumb Tray button-->\n" + " <a id=\"tray-button\"><img id=\"tray-arrow\" src=\"img/button-tray-up.png\"/></a>\n" + "\n" + " <!--Navigation-->\n" + " <!-- <ul id=\"slide-list\"></ul>-->\n" + "\n" + " </div>\n" + " </div>\n" + " <script type=\"text/javascript\">\n" + " $(function () {\n" + " $(\"body\").mouseover(function () {\n" + " $(\"#prevslide,#nextslide\").css({opacity: 0.6});\n" + " $(\"#controls-wrapper\").css({opacity: 0.8});\n" + " $(\"#thumb-tray,#controls,#progress-back\").css({opacity: 1.0});\n" + " })\n" + " $(\"body\").mouseout(function () {\n" + " $(\"#prevslide,#nextslide\").css({opacity: 0.2});\n" + " $(\"#progress-back,#thumb-tray,#controls,#controls-wrapper\").css({opacity: 0.0});\n" + " });\n" + " });\n" + " </script>\n" + "\n" + " </body>\n" + "</html>"; File fileIndexHTML = new File(strDiapoRepert + File.separator + strDiapoNom); fileIndexHTML.setWritable(true); OutputStreamWriter oswFichierHTML = new OutputStreamWriter(new FileOutputStream(fileIndexHTML), "UTF-8"); try (BufferedWriter bwFichierHTML = new BufferedWriter(oswFichierHTML)) { bwFichierHTML.write(strContenuHTML); } } static final WebView browser = new WebView(); static final WebEngine webEngine = browser.getEngine(); public static void creerEditerDiaporama(String strDiaporama) { apCreationDiaporama.getChildren().clear(); apCreationDiaporama.setStyle("-fx-background-color : -fx-base;" + "-fx-border-color: derive(-fx-base,10%);" + "-fx-effect: dropshadow( three-pass-box , rgba(0,0,0,0.5) , 8, 0.0 , 0 , 8 );" + "-fx-border-width: 1px;"); mbarPrincipal.setDisable(true); bbarPrincipal.setDisable(true); hbBarreBouton.setDisable(true); tpEnvironnement.setDisable(true); Rectangle2D tailleEcran = Screen.getPrimary().getBounds(); int iLargeurEcran = (int) tailleEcran.getWidth(); int iHauteurEcran = (int) tailleEcran.getHeight() - 100; final int iLargeur = 800; final int iHauteur = 630; Label lblNomDiapo = new Label(rbLocalisation.getString("main.nomDiapo")); lblNomDiapo.setLayoutX(30); lblNomDiapo.setLayoutY(45); ComboBox cbListeDiapo = new ComboBox(); cbListeDiapo.setLayoutX(150); cbListeDiapo.setLayoutY(40); cbListeDiapo.setValue(""); for (int i = 0; i < getiNombreDiapo(); i++) { cbListeDiapo.getItems().add(diaporamas[i].getStrNomDiaporama()); } Button btnNouveauDiapo = new Button(rbLocalisation.getString("diapo.nouveau")); btnNouveauDiapo.setLayoutX(iLargeur - 330); btnNouveauDiapo.setLayoutY(20); btnNouveauDiapo.setPrefSize(140, 60); Button btnEffaceDiapo = new Button(rbLocalisation.getString("diapo.efface")); btnEffaceDiapo.setLayoutX(iLargeur - 170); btnEffaceDiapo.setLayoutY(20); btnEffaceDiapo.setPrefSize(140, 60); gestDiapo = new GestionnaireDiaporamaController(); gestDiapo.initDiaporama(); apCreationDiaporama.getChildren().addAll(lblNomDiapo, cbListeDiapo, btnEffaceDiapo, btnNouveauDiapo, gestDiapo.apDiaporama); apCreationDiaporama.setPrefWidth(iLargeur); apCreationDiaporama.setMinWidth(iLargeur); apCreationDiaporama.setMaxWidth(iLargeur); apCreationDiaporama.setPrefHeight(iHauteur); apCreationDiaporama.setMinHeight(iHauteur); apCreationDiaporama.setMaxHeight(iHauteur); apCreationDiaporama.setLayoutX((iLargeurEcran - iLargeur) / 2); apCreationDiaporama.setLayoutY((iHauteurEcran - iHauteur) / 2); apCreationDiaporama.setVisible(true); gestDiapo.addPropertyChangeListener("valideDiapo", (e) -> { mbarPrincipal.setDisable(false); bbarPrincipal.setDisable(false); hbBarreBouton.setDisable(false); tpEnvironnement.setDisable(false); apCreationDiaporama.setVisible(false); gestDiapo.diapoSauve = true; boolean bTrouve = false; int iTrouve = -1; for (int i = 0; i < getiNombreDiapo(); i++) { if (diaporamas[i].getStrNomDiaporama().equals(cbListeDiapo.getValue())) { bTrouve = true; iTrouve = i; } } if (bTrouve) { diaporamas[iTrouve] = gestDiapo.getDiaporama(); try { creeDiaporamaHTML(diaporamas[iTrouve], iTrouve); } catch (IOException ex) { Logger.getLogger(EditeurPanovisu.class.getName()).log(Level.SEVERE, null, ex); } } gestDiapo.reInit(new Diaporama()); }); gestDiapo.addPropertyChangeListener("visualiseDiapo", (e) -> { try { creeDiaporamaHTML(gestDiapo.getDiaporama(), -1); } catch (IOException ex) { Logger.getLogger(EditeurPanovisu.class.getName()).log(Level.SEVERE, null, ex); } String strNomFichier = getStrRepertTemp() + File.separator + "diaporama" + File.separator + "diapo-1.html"; webEngine.load("file:///" + strNomFichier); apWebview.getChildren().clear(); browser.setPrefSize(apWebview.getPrefWidth() - 20, apWebview.getPrefHeight() - 50); browser.setTranslateX(10); browser.setTranslateY(10); apWebview.getChildren().add(browser); Button btnOk = new Button("Ok"); btnOk.setPrefSize(100, 20); btnOk.setLayoutX(apWebview.getPrefWidth() - 110); btnOk.setLayoutY(apWebview.getPrefHeight() - 30); apWebview.getChildren().add(btnOk); apWebview.setVisible(true); btnOk.setOnMouseClicked((me) -> { apWebview.setVisible(false); apWebview.getChildren().clear(); }); }); gestDiapo.addPropertyChangeListener("annuleDiapo", (e) -> { mbarPrincipal.setDisable(false); bbarPrincipal.setDisable(false); hbBarreBouton.setDisable(false); tpEnvironnement.setDisable(false); apCreationDiaporama.setVisible(false); gestDiapo.diapoSauve = true; gestDiapo.reInit(new Diaporama()); }); cbListeDiapo.valueProperty().addListener((ov, old_val, new_val) -> { if (new_val != null) { ButtonType reponse = null; ButtonType buttonTypeOui = new ButtonType(rbLocalisation.getString("main.oui")); ButtonType buttonTypeNon = new ButtonType(rbLocalisation.getString("main.non")); if (!gestDiapo.diapoSauve) { Alert alert = new Alert(AlertType.CONFIRMATION); alert.setTitle(rbLocalisation.getString("diapo.sauver")); alert.setHeaderText(null); alert.setContentText(rbLocalisation.getString("diapo.sauverTexte")); alert.getButtonTypes().clear(); alert.getButtonTypes().setAll(buttonTypeOui, buttonTypeNon); Optional<ButtonType> actReponse = alert.showAndWait(); reponse = actReponse.get(); } if (reponse == buttonTypeOui) { boolean bTrouve = false; int iTrouve = -1; for (int i = 0; i < getiNombreDiapo(); i++) { if (diaporamas[i].getStrNomDiaporama().equals(old_val)) { bTrouve = true; iTrouve = i; } } if (bTrouve) { diaporamas[iTrouve] = gestDiapo.getDiaporama(); try { creeDiaporamaHTML(diaporamas[iTrouve], iTrouve); } catch (IOException ex) { Logger.getLogger(EditeurPanovisu.class.getName()).log(Level.SEVERE, null, ex); } } } gestDiapo.diapoSauve = true; boolean bTrouve = false; int iTrouve = -1; for (int i = 0; i < getiNombreDiapo(); i++) { if (diaporamas[i].getStrNomDiaporama().equals(new_val)) { bTrouve = true; iTrouve = i; } } if (bTrouve) { gestDiapo.setbDisabled(false); gestDiapo.reInit(diaporamas[iTrouve]); } } }); btnNouveauDiapo.setOnMouseClicked((me) -> { ButtonType reponse = null; ButtonType buttonTypeOui = new ButtonType(rbLocalisation.getString("main.oui")); ButtonType buttonTypeNon = new ButtonType(rbLocalisation.getString("main.non")); if (!gestDiapo.diapoSauve) { Alert alert = new Alert(AlertType.CONFIRMATION); alert.setTitle(rbLocalisation.getString("diapo.sauver")); alert.setHeaderText(null); alert.setContentText(rbLocalisation.getString("diapo.sauverTexte")); alert.getButtonTypes().clear(); alert.getButtonTypes().setAll(buttonTypeOui, buttonTypeNon); Optional<ButtonType> actReponse = alert.showAndWait(); reponse = actReponse.get(); } if (reponse == buttonTypeOui) { gestDiapo.diapoSauve = true; boolean bTrouve = false; int iTrouve = -1; for (int i = 0; i < getiNombreDiapo(); i++) { if (diaporamas[i].getStrNomDiaporama().equals(cbListeDiapo.getValue())) { bTrouve = true; iTrouve = i; } } if (bTrouve) { diaporamas[iTrouve] = gestDiapo.getDiaporama(); try { creeDiaporamaHTML(diaporamas[iTrouve], iTrouve); } catch (IOException ex) { Logger.getLogger(EditeurPanovisu.class.getName()).log(Level.SEVERE, null, ex); } } } TextInputDialog dialog = new TextInputDialog(""); dialog.setTitle(rbLocalisation.getString("main.nomDiapo")); dialog.setHeaderText(null); dialog.setContentText(rbLocalisation.getString("diapo.entrerNom")); Optional<String> resultat = dialog.showAndWait(); if (resultat.isPresent()) { String nomDiapo = resultat.get(); boolean bTrouve = false; for (int i = 0; i < getiNombreDiapo(); i++) { if (diaporamas[i].getStrNomDiaporama().equals(nomDiapo)) { bTrouve = true; } } if (!bTrouve) { diaporamas[getiNombreDiapo()] = new Diaporama(); diaporamas[getiNombreDiapo()].setStrNomDiaporama(nomDiapo); cbListeDiapo.getItems().add(nomDiapo); cbListeDiapo.setValue(nomDiapo); gestDiapo.setbDisabled(false); gestDiapo.reInit(diaporamas[getiNombreDiapo()]); setiNombreDiapo(getiNombreDiapo() + 1); } else { Alert alert = new Alert(AlertType.ERROR); alert.setTitle(rbLocalisation.getString("diapo.erreur")); alert.setHeaderText(null); alert.setContentText(rbLocalisation.getString("diapo.erreurNom")); alert.showAndWait(); } } }); } /** * * @param strNomFichierBarre */ public static void creerEditerBarre(String strNomFichierBarre) { apCreationBarre.getChildren().clear(); apCreationBarre.setStyle("-fx-background-color : -fx-base;" + "-fx-border-color: derive(-fx-base,10%);" + "-fx-effect: dropshadow( three-pass-box , rgba(0,0,0,0.5) , 8, 0.0 , 0 , 8 );" + "-fx-border-width: 1px;"); AnchorPane apOutilsBarre = new AnchorPane(); Button btnAnnulerBarre = new Button(rbLocalisation.getString("main.quitter"), new ImageView(new Image("file:" + getStrRepertAppli() + "/images/annule.png"))); final Button btnSauverBarre = new Button(rbLocalisation.getString("main.sauver"), new ImageView( new Image("file:" + getStrRepertAppli() + "/images/sauveProjet.png", 24, 24, true, true, true))); Rectangle2D tailleEcran = Screen.getPrimary().getBounds(); btnAjouteZone = new Button(rbLocalisation.getString("main.ajouteZone"), new ImageView( new Image("file:" + getStrRepertAppli() + "/images/btn+.png", 24, 24, true, true, true))); apImgBarrePersonnalisee = new AnchorPane(); apImgBarrePersonnalisee.getChildren().clear(); apZoneBarrePersonnalisee = new AnchorPane(); apZoneBarrePersonnalisee.getChildren().clear(); apZoneBarrePersonnalisee.setLayoutX(0); apZoneBarrePersonnalisee.setLayoutY(150); apZoneBarrePersonnalisee.setPrefWidth(300); apZoneBarrePersonnalisee.setPrefHeight(200); int iLargeurEcran = (int) tailleEcran.getWidth(); int iHauteurEcran = (int) tailleEcran.getHeight() - 100; final int iLargeur = 1200; final int iHauteur = 600; mbarPrincipal.setDisable(true); bbarPrincipal.setDisable(true); hbBarreBouton.setDisable(true); tpEnvironnement.setDisable(true); apCreationBarre.setPrefWidth(iLargeur); apCreationBarre.setMinWidth(iLargeur); apCreationBarre.setMaxWidth(iLargeur); apCreationBarre.setPrefHeight(iHauteur); apCreationBarre.setMinHeight(iHauteur); apCreationBarre.setMaxHeight(iHauteur); apCreationBarre.setLayoutX((iLargeurEcran - iLargeur) / 2); apCreationBarre.setLayoutY((iHauteurEcran - iHauteur) / 2); apCreationBarre.setVisible(true); Label lblBarrePersonnalisee = new Label(rbLocalisation.getString("main.creeBarrePersonnalisee")); lblBarrePersonnalisee.setMinWidth(iLargeur - 10); lblBarrePersonnalisee.setAlignment(Pos.CENTER); lblBarrePersonnalisee.setStyle("-fx-background-color : #777;"); lblBarrePersonnalisee.setTextFill(Color.WHITE); lblBarrePersonnalisee.setLayoutX(5); lblBarrePersonnalisee.setLayoutY(10); lblBarrePersonnalisee.setFont(Font.font(14)); apCreationBarre.getChildren().add(lblBarrePersonnalisee); apOutilsBarre.setPrefWidth(300); apOutilsBarre.setMinWidth(300); apOutilsBarre.setMaxWidth(300); apOutilsBarre.setPrefHeight(iHauteur - 50); apOutilsBarre.setMinHeight(iHauteur - 50); apOutilsBarre.setMaxHeight(iHauteur - 50); apOutilsBarre.setLayoutX(iLargeur - 302); apOutilsBarre.setLayoutY(50); apOutilsBarre.setStyle( "-fx-background-color : -fx-background;-fx-border-width : 1px;-fx-border-color : transparent transparent transparent -fx-outer-border;"); btnAnnulerBarre.setPrefWidth(120); btnAnnulerBarre.setLayoutX(30); btnAnnulerBarre.setLayoutY(iHauteur - 90); btnSauverBarre.setPrefWidth(120); btnSauverBarre.setLayoutX(160); btnSauverBarre.setLayoutY(iHauteur - 90); btnSauverBarre.setDisable(true); Label lblChargeImage = new Label(rbLocalisation.getString("main.chargeImage")); lblChargeImage.setLayoutX(20); lblChargeImage.setLayoutY(10); TextField tfChargeImage = new TextField(""); tfChargeImage.setDisable(true); tfChargeImage.setPrefWidth(200); tfChargeImage.setLayoutX(50); tfChargeImage.setLayoutY(40); Button btnChargeImage = new Button("..."); btnChargeImage.setLayoutX(260); btnChargeImage.setLayoutY(40); final CheckBox cbMasqueZones = new CheckBox(rbLocalisation.getString("main.masqueZones")); cbMasqueZones.setDisable(true); cbMasqueZones.setLayoutX(20); cbMasqueZones.setLayoutY(70); btnAjouteZone.setLayoutX(130); btnAjouteZone.setLayoutY(110); btnAjouteZone.setDisable(true); apOutilsBarre.getChildren().addAll(lblChargeImage, tfChargeImage, btnChargeImage, cbMasqueZones, btnAjouteZone, apZoneBarrePersonnalisee, btnAnnulerBarre, btnSauverBarre); apCreationBarre.getChildren().addAll(apImgBarrePersonnalisee, apOutilsBarre); if (!strNomFichierBarre.equals("")) { lblChargeImage.setVisible(false); tfChargeImage.setVisible(false); btnChargeImage.setVisible(false); String strNomFichier = strNomFichierBarre; strNomFichier = strNomFichier.substring(0, strNomFichier.length() - 4); strNomFichierShp = strNomFichier + ".shp"; String strNomFichierPng = strNomFichier + ".png"; File fichPng = new File(strNomFichierPng); if (fichPng.exists()) { try { btnAjouteZone.setDisable(false); imgBarrePersonnalisee = new Image("file:" + fichPng); iNombreZones = getGestionnaireInterface().lisFichierShp(strNomFichierShp, zones); btnSauverBarre.setDisable(false); if (iNombreZones > 0) { cbMasqueZones.setDisable(false); } afficheBarrePersonnalisee(iLargeur, iHauteur, false); } catch (IOException ex) { Logger.getLogger(EditeurPanovisu.class.getName()).log(Level.SEVERE, null, ex); } } } btnAnnulerBarre.setOnMouseClicked((t) -> { mbarPrincipal.setDisable(false); bbarPrincipal.setDisable(false); hbBarreBouton.setDisable(false); tpEnvironnement.setDisable(false); apCreationBarre.setVisible(false); }); btnAjouteZone.setOnMouseClicked((t) -> { btnAjouteZone.setDisable(true); ajouterZone(iLargeur, iHauteur, false); }); btnChargeImage.setOnMouseClicked((t) -> { strRepertBarrePersonnalisee = getStrRepertAppli() + "/theme/telecommandes"; File fileRepert; fileRepert = new File(strRepertBarrePersonnalisee); FileChooser fileChooser = new FileChooser(); FileChooser.ExtensionFilter efShpFilter = new FileChooser.ExtensionFilter( "Fichiers barre personnalise (SHP)", "*.shp", "*.png"); fileChooser.setInitialDirectory(fileRepert); fileChooser.getExtensionFilters().addAll(efShpFilter); File fileFichierImage = fileChooser.showOpenDialog(null); if (fileFichierImage != null) { String strNomFichier = fileFichierImage.getAbsolutePath(); strNomFichier = strNomFichier.substring(0, strNomFichier.length() - 4); strNomFichierShp = strNomFichier + ".shp"; String strNomFichierPng = strNomFichier + ".png"; File fileFichierPng = new File(strNomFichierPng); if (fileFichierPng.exists()) { try { btnAjouteZone.setDisable(false); imgBarrePersonnalisee = new Image("file:" + fileFichierPng); iNombreZones = getGestionnaireInterface().lisFichierShp(strNomFichierShp, zones); btnSauverBarre.setDisable(false); if (iNombreZones > 0) { cbMasqueZones.setDisable(false); } afficheBarrePersonnalisee(iLargeur, iHauteur, false); } catch (IOException ex) { Logger.getLogger(EditeurPanovisu.class.getName()).log(Level.SEVERE, null, ex); } } } }); btnSauverBarre.setOnMouseClicked((t) -> { try { sauverBarre(strNomFichierShp); getGestionnaireInterface().chargeBarrePersonnalisee(strNomFichierBarre); } catch (IOException ex) { Logger.getLogger(EditeurPanovisu.class.getName()).log(Level.SEVERE, null, ex); } }); cbMasqueZones.selectedProperty() .addListener((ObservableValue<? extends Boolean> ov, Boolean old_val, Boolean new_val) -> { afficheBarrePersonnalisee(iLargeur, iHauteur, new_val); }); } /** * * @param stPrimaryStage panel d'environnement * * @throws Exception Exceptions */ private void creeEnvironnement(Stage stPrimaryStage) throws Exception { creeEnvironnement(stPrimaryStage, 800, 600); } /** * * @param vbRacine panel d'installation du menu * @throws Exception Exceptions */ private static void creeMenu(VBox vbRacine) throws Exception { VBox vbMonPanneau = new VBox(); vbMonPanneau.setPrefHeight(80); vbMonPanneau.setPrefWidth(3000); mbarPrincipal.setMinHeight(29); mbarPrincipal.setPrefHeight(29); mbarPrincipal.setMaxHeight(29); mbarPrincipal.setPrefWidth(3000); if (isMac()) { mbarPrincipal.setUseSystemMenuBar(true); } /* Menu projets */ Menu mnuProjet = new Menu(rbLocalisation.getString("projets")); mbarPrincipal.getMenus().add(mnuProjet); mniNouveauProjet = new MenuItem(rbLocalisation.getString("nouveauProjet")); mniNouveauProjet.setAccelerator(new KeyCodeCombination(KeyCode.N, KeyCombination.SHORTCUT_DOWN)); mnuProjet.getItems().add(mniNouveauProjet); mniChargeProjet = new MenuItem(rbLocalisation.getString("ouvrirProjet")); mniChargeProjet.setAccelerator(new KeyCodeCombination(KeyCode.O, KeyCombination.SHORTCUT_DOWN)); mnuProjet.getItems().add(mniChargeProjet); mniSauveProjet = new MenuItem(rbLocalisation.getString("sauverProjet")); mniSauveProjet.setDisable(true); mniSauveProjet.setAccelerator(new KeyCodeCombination(KeyCode.S, KeyCombination.SHORTCUT_DOWN)); mnuProjet.getItems().add(mniSauveProjet); mniSauveSousProjet = new MenuItem(rbLocalisation.getString("sauverProjetSous")); mniSauveSousProjet.setDisable(true); mniSauveSousProjet.setAccelerator( new KeyCodeCombination(KeyCode.S, KeyCombination.SHORTCUT_DOWN, KeyCodeCombination.SHIFT_DOWN)); mnuProjet.getItems().add(mniSauveSousProjet); mnuDerniersProjets = new Menu(rbLocalisation.getString("derniersProjets")); mnuProjet.getItems().add(mnuDerniersProjets); fileHistoFichiers = new File(fileRepertConfig.getAbsolutePath() + File.separator + "derniersprojets.cfg"); nombreHistoFichiers = 0; if (fileHistoFichiers.exists()) { try (BufferedReader brHistoFichiers = new BufferedReader( new InputStreamReader(new FileInputStream(fileHistoFichiers), "UTF-8"))) { while ((strTexteHisto = brHistoFichiers.readLine()) != null) { MenuItem menuDerniersFichiers = new MenuItem(strTexteHisto); mnuDerniersProjets.getItems().add(menuDerniersFichiers); strHistoFichiers[nombreHistoFichiers] = strTexteHisto; nombreHistoFichiers++; menuDerniersFichiers.setOnAction((e) -> { MenuItem mniSousMenu = (MenuItem) e.getSource(); try { try { projetChargeNom(mniSousMenu.getText()); } catch (InterruptedException ex) { Logger.getLogger(EditeurPanovisu.class.getName()).log(Level.SEVERE, null, ex); } } catch (IOException ex) { Logger.getLogger(EditeurPanovisu.class.getName()).log(Level.SEVERE, null, ex); } }); } } } SeparatorMenuItem sepMenu1 = new SeparatorMenuItem(); mnuProjet.getItems().add(sepMenu1); mniFermerProjet = new MenuItem(rbLocalisation.getString("quitterApplication")); mniFermerProjet.setAccelerator(new KeyCodeCombination(KeyCode.A, KeyCombination.SHORTCUT_DOWN)); mnuProjet.getItems().add(mniFermerProjet); /* Menu affichage */ Menu mnuAffichage = new Menu(rbLocalisation.getString("affichage")); mbarPrincipal.getMenus().add(mnuAffichage); mniAffichageVisite = new MenuItem(rbLocalisation.getString("main.creationVisite")); mniAffichageVisite.setAccelerator(new KeyCodeCombination(KeyCode.DIGIT1, KeyCombination.SHORTCUT_DOWN)); mnuAffichage.getItems().add(mniAffichageVisite); mniAffichageInterface = new MenuItem(rbLocalisation.getString("main.creationInterface")); mniAffichageInterface.setAccelerator(new KeyCodeCombination(KeyCode.DIGIT2, KeyCombination.SHORTCUT_DOWN)); mnuAffichage.getItems().add(mniAffichageInterface); setMniAffichagePlan(new MenuItem(rbLocalisation.getString("main.tabPlan"))); getMniAffichagePlan().setAccelerator(new KeyCodeCombination(KeyCode.DIGIT3, KeyCombination.SHORTCUT_DOWN)); getMniAffichagePlan().setDisable(true); mnuAffichage.getItems().add(getMniAffichagePlan()); mniOutilsLoupe = new MenuItem(rbLocalisation.getString("main.loupe")); mniOutilsLoupe.setAccelerator(new KeyCodeCombination(KeyCode.L, KeyCombination.SHORTCUT_DOWN)); mnuAffichage.getItems().add(mniOutilsLoupe); SeparatorMenuItem sep3 = new SeparatorMenuItem(); mnuAffichage.getItems().add(sep3); mniConfigTransformation = new MenuItem(rbLocalisation.getString("affichageConfiguration")); mnuAffichage.getItems().add(mniConfigTransformation); /* Menu panoramiques */ mnuPanoramique = new Menu(rbLocalisation.getString("panoramiques")); mnuPanoramique.setDisable(true); mbarPrincipal.getMenus().add(mnuPanoramique); mniAjouterPano = new MenuItem(rbLocalisation.getString("ajouterPanoramiques")); mniAjouterPano.setAccelerator(new KeyCodeCombination(KeyCode.A, KeyCombination.SHORTCUT_DOWN)); mnuPanoramique.getItems().add(mniAjouterPano); setMniAjouterPlan(new MenuItem(rbLocalisation.getString("ajouterPlan"))); getMniAjouterPlan().setAccelerator(new KeyCodeCombination(KeyCode.P, KeyCombination.SHORTCUT_DOWN)); mnuPanoramique.getItems().add(getMniAjouterPlan()); getMniAjouterPlan().setDisable(true); SeparatorMenuItem sep2 = new SeparatorMenuItem(); mnuPanoramique.getItems().add(sep2); mniVisiteGenere = new MenuItem(rbLocalisation.getString("genererVisite")); mniVisiteGenere.setDisable(true); mniVisiteGenere.setAccelerator(new KeyCodeCombination(KeyCode.V, KeyCombination.SHORTCUT_DOWN)); mnuPanoramique.getItems().add(mniVisiteGenere); /* Menu Modles */ mnuModeles = new Menu(rbLocalisation.getString("menuModele")); mbarPrincipal.getMenus().add(mnuModeles); mniChargerModele = new MenuItem(rbLocalisation.getString("modeleCharger")); mnuModeles.getItems().add(mniChargerModele); mniSauverModele = new MenuItem(rbLocalisation.getString("modeleSauver")); mnuModeles.getItems().add(mniSauverModele); /* Menu transformations */ mnuTransformation = new Menu(rbLocalisation.getString("outils")); mbarPrincipal.getMenus().add(mnuTransformation); mniEqui2CubeTransformation = new MenuItem(rbLocalisation.getString("outilsEqui2Cube")); mnuTransformation.getItems().add(mniEqui2CubeTransformation); mniCube2EquiTransformation = new MenuItem(rbLocalisation.getString("outilsCube2Equi")); mnuTransformation.getItems().add(mniCube2EquiTransformation); SeparatorMenuItem sep6 = new SeparatorMenuItem(); mnuTransformation.getItems().add(sep6); mniOutilsBarre = new MenuItem(rbLocalisation.getString("outilsBarre")); mniOutilsBarre.setAccelerator(new KeyCodeCombination(KeyCode.B, KeyCombination.SHORTCUT_DOWN)); mnuTransformation.getItems().add(mniOutilsBarre); mniOutilsDiaporama = new MenuItem(rbLocalisation.getString("outilsDiaporama")); mniOutilsDiaporama.setAccelerator(new KeyCodeCombination(KeyCode.D, KeyCombination.SHORTCUT_DOWN)); mnuTransformation.getItems().add(mniOutilsDiaporama); /* Menu Aide */ Menu mnuAide = new Menu(rbLocalisation.getString("aide")); mbarPrincipal.getMenus().add(mnuAide); mniAide = new MenuItem(rbLocalisation.getString("aideAide")); mniAide.setAccelerator(new KeyCodeCombination(KeyCode.H, KeyCombination.SHORTCUT_DOWN)); mnuAide.getItems().add(mniAide); SeparatorMenuItem sep4 = new SeparatorMenuItem(); mnuAide.getItems().add(sep4); mniAPropos = new MenuItem(rbLocalisation.getString("aideAPropos")); mnuAide.getItems().add(mniAPropos); // // } // /* barre de boutons */ hbBarreBouton = new HBox(); hbBarreBouton.getStyleClass().add("menuBarreOutils1"); hbBarreBouton.setPrefHeight(50); hbBarreBouton.setMinHeight(50); hbBarreBouton.setPrefWidth(3000); /* Bouton nouveau Projet */ ScrollPane spBtnNouvprojet = new ScrollPane(); spBtnNouvprojet.getStyleClass().add("menuBarreOutils"); spBtnNouvprojet.setHbarPolicy(ScrollPane.ScrollBarPolicy.NEVER); spBtnNouvprojet.setPrefHeight(35); spBtnNouvprojet.setMaxHeight(35); spBtnNouvprojet.setPadding(new Insets(2)); spBtnNouvprojet.setPrefWidth(35); HBox.setMargin(spBtnNouvprojet, new Insets(5, 15, 0, 15)); ivNouveauProjet = new ImageView( new Image("file:" + getStrRepertAppli() + File.separator + "images/nouveauProjet.png")); spBtnNouvprojet.setContent(ivNouveauProjet); Tooltip tltpNouveauProjet = new Tooltip(rbLocalisation.getString("nouveauProjet")); tltpNouveauProjet.setStyle(getStrTooltipStyle()); spBtnNouvprojet.setTooltip(tltpNouveauProjet); hbBarreBouton.getChildren().add(spBtnNouvprojet); /* Bouton ouvrir Projet */ ScrollPane spBtnOuvrirProjet = new ScrollPane(); spBtnOuvrirProjet.getStyleClass().add("menuBarreOutils"); spBtnOuvrirProjet.setHbarPolicy(ScrollPane.ScrollBarPolicy.NEVER); spBtnOuvrirProjet.setPrefHeight(35); spBtnOuvrirProjet.setMaxHeight(35); spBtnOuvrirProjet.setPadding(new Insets(2)); spBtnOuvrirProjet.setPrefWidth(35); HBox.setMargin(spBtnOuvrirProjet, new Insets(5, 15, 0, 0)); ivChargeProjet = new ImageView( new Image("file:" + getStrRepertAppli() + File.separator + "images/ouvrirProjet.png")); spBtnOuvrirProjet.setContent(ivChargeProjet); Tooltip tltpOuvrirProjet = new Tooltip(rbLocalisation.getString("ouvrirProjet")); tltpOuvrirProjet.setStyle(getStrTooltipStyle()); spBtnOuvrirProjet.setTooltip(tltpOuvrirProjet); hbBarreBouton.getChildren().add(spBtnOuvrirProjet); /* Bouton sauve Projet */ ScrollPane spBtnSauveProjet = new ScrollPane(); spBtnSauveProjet.getStyleClass().add("menuBarreOutils"); spBtnSauveProjet.setHbarPolicy(ScrollPane.ScrollBarPolicy.NEVER); spBtnSauveProjet.setPrefHeight(35); spBtnSauveProjet.setMaxHeight(35); spBtnSauveProjet.setPadding(new Insets(2)); spBtnSauveProjet.setPrefWidth(35); HBox.setMargin(spBtnSauveProjet, new Insets(5, 15, 0, 0)); ivSauveProjet = new ImageView( new Image("file:" + getStrRepertAppli() + File.separator + "images/sauveProjet.png")); spBtnSauveProjet.setContent(ivSauveProjet); Tooltip tltpSauverProjet = new Tooltip(rbLocalisation.getString("sauverProjet")); tltpSauverProjet.setStyle(getStrTooltipStyle()); spBtnSauveProjet.setTooltip(tltpSauverProjet); hbBarreBouton.getChildren().add(spBtnSauveProjet); Separator sepImages = new Separator(Orientation.VERTICAL); sepImages.prefHeight(200); hbBarreBouton.getChildren().add(sepImages); ivSauveProjet.setDisable(true); ivSauveProjet.setOpacity(0.3); /* Bouton Ajoute Panoramique */ ScrollPane spBtnAjoutePano = new ScrollPane(); spBtnAjoutePano.getStyleClass().add("menuBarreOutils"); spBtnAjoutePano.setHbarPolicy(ScrollPane.ScrollBarPolicy.NEVER); spBtnAjoutePano.setPrefHeight(35); spBtnAjoutePano.setMaxHeight(35); spBtnAjoutePano.setPadding(new Insets(2)); spBtnAjoutePano.setPrefWidth(35); HBox.setMargin(spBtnAjoutePano, new Insets(5, 15, 0, 15)); ivAjouterPano = new ImageView( new Image("file:" + getStrRepertAppli() + File.separator + "images/ajoutePanoramique.png")); spBtnAjoutePano.setContent(ivAjouterPano); Tooltip tltpAjouterPano = new Tooltip(rbLocalisation.getString("ajouterPanoramiques")); tltpAjouterPano.setStyle(getStrTooltipStyle()); spBtnAjoutePano.setTooltip(tltpAjouterPano); hbBarreBouton.getChildren().add(spBtnAjoutePano); ivAjouterPano.setDisable(true); ivAjouterPano.setOpacity(0.3); /* Bouton Ajoute Panoramique */ ScrollPane spBtnAjoutePlan = new ScrollPane(); spBtnAjoutePlan.getStyleClass().add("menuBarreOutils"); spBtnAjoutePlan.setHbarPolicy(ScrollPane.ScrollBarPolicy.NEVER); spBtnAjoutePlan.setPrefHeight(35); spBtnAjoutePlan.setMaxHeight(35); spBtnAjoutePlan.setPadding(new Insets(2)); spBtnAjoutePlan.setPrefWidth(35); HBox.setMargin(spBtnAjoutePlan, new Insets(5, 15, 0, 15)); setIvAjouterPlan( new ImageView(new Image("file:" + getStrRepertAppli() + File.separator + "images/ajoutePlan.png"))); spBtnAjoutePlan.setContent(getIvAjouterPlan()); Tooltip tltpAjouterPlan = new Tooltip(rbLocalisation.getString("ajouterPlan")); tltpAjouterPlan.setStyle(getStrTooltipStyle()); spBtnAjoutePlan.setTooltip(tltpAjouterPlan); hbBarreBouton.getChildren().add(spBtnAjoutePlan); getIvAjouterPlan().setDisable(true); getIvAjouterPlan().setOpacity(0.3); /* Bouton Gnre */ ScrollPane spBtnGenereVisite = new ScrollPane(); spBtnGenereVisite.getStyleClass().add("menuBarreOutils"); spBtnGenereVisite.setHbarPolicy(ScrollPane.ScrollBarPolicy.NEVER); spBtnGenereVisite.setPrefHeight(35); spBtnGenereVisite.setMaxHeight(35); spBtnGenereVisite.setPadding(new Insets(2)); spBtnGenereVisite.setPrefWidth(70); HBox.setMargin(spBtnGenereVisite, new Insets(5, 15, 0, 0)); ivVisiteGenere = new ImageView( new Image("file:" + getStrRepertAppli() + File.separator + "images/genereVisite.png")); spBtnGenereVisite.setContent(ivVisiteGenere); Tooltip tltpGenererVisite = new Tooltip(rbLocalisation.getString("genererVisite")); tltpGenererVisite.setStyle(getStrTooltipStyle()); spBtnGenereVisite.setTooltip(tltpGenererVisite); hbBarreBouton.getChildren().add(spBtnGenereVisite); ivVisiteGenere.setDisable(true); ivVisiteGenere.setOpacity(0.3); Separator sepImages1 = new Separator(Orientation.VERTICAL); sepImages1.prefHeight(200); hbBarreBouton.getChildren().add(sepImages1); /* Bouton equi -> faces de Cube */ ScrollPane spBtnEqui2Cube = new ScrollPane(); spBtnEqui2Cube.getStyleClass().add("menuBarreOutils"); spBtnEqui2Cube.setHbarPolicy(ScrollPane.ScrollBarPolicy.NEVER); spBtnEqui2Cube.setPrefHeight(35); spBtnEqui2Cube.setMaxHeight(35); spBtnEqui2Cube.setPadding(new Insets(2)); spBtnEqui2Cube.setPrefWidth(109); HBox.setMargin(spBtnEqui2Cube, new Insets(5, 15, 0, 250)); ivEqui2Cube = new ImageView( new Image("file:" + getStrRepertAppli() + File.separator + "images/equi2cube.png")); spBtnEqui2Cube.setContent(ivEqui2Cube); Tooltip tltpEqui2Cube = new Tooltip(rbLocalisation.getString("outilsEqui2Cube")); tltpEqui2Cube.setStyle(getStrTooltipStyle()); spBtnEqui2Cube.setTooltip(tltpEqui2Cube); hbBarreBouton.getChildren().add(spBtnEqui2Cube); /* Bouton faces de cube -> equi */ ScrollPane spBtnCube2Equi = new ScrollPane(); spBtnCube2Equi.getStyleClass().add("menuBarreOutils"); spBtnCube2Equi.setHbarPolicy(ScrollPane.ScrollBarPolicy.NEVER); spBtnCube2Equi.setPrefHeight(35); spBtnCube2Equi.setMaxHeight(35); spBtnCube2Equi.setPadding(new Insets(2)); spBtnCube2Equi.setPrefWidth(109); HBox.setMargin(spBtnCube2Equi, new Insets(5, 25, 0, 0)); ivCube2Equi = new ImageView( new Image("file:" + getStrRepertAppli() + File.separator + "images/cube2equi.png")); spBtnCube2Equi.setContent(ivCube2Equi); Tooltip tltpCube2Equi = new Tooltip(rbLocalisation.getString("outilsCube2Equi")); tltpCube2Equi.setStyle(getStrTooltipStyle()); spBtnCube2Equi.setTooltip(tltpCube2Equi); hbBarreBouton.getChildren().add(spBtnCube2Equi); if (isMac()) { mbarPrincipal.setMaxHeight(0); hbBarreBouton.setTranslateY(-30); } vbMonPanneau.getChildren().addAll(mbarPrincipal, hbBarreBouton); vbRacine.getChildren().add(vbMonPanneau); mniNouveauProjet.setOnAction((e) -> { projetsNouveau(); }); mniChargeProjet.setOnAction((e) -> { try { try { projetCharge(); } catch (InterruptedException ex) { Logger.getLogger(EditeurPanovisu.class.getName()).log(Level.SEVERE, null, ex); } } catch (IOException ex) { Logger.getLogger(EditeurPanovisu.class.getName()).log(Level.SEVERE, null, ex); } }); mniSauveProjet.setOnAction((e) -> { try { projetSauve(); } catch (IOException ex) { Logger.getLogger(EditeurPanovisu.class.getName()).log(Level.SEVERE, null, ex); } }); mniSauveSousProjet.setOnAction((e) -> { try { projetSauveSous(); } catch (IOException ex) { Logger.getLogger(EditeurPanovisu.class.getName()).log(Level.SEVERE, null, ex); } }); mniVisiteGenere.setOnAction((e) -> { try { genereVisite(); } catch (IOException ex) { Logger.getLogger(EditeurPanovisu.class.getName()).log(Level.SEVERE, null, ex); } }); mniFermerProjet.setOnAction((e) -> { try { projetsFermer(); } catch (IOException ex) { Logger.getLogger(EditeurPanovisu.class.getName()).log(Level.SEVERE, null, ex); } }); mniAjouterPano.setOnAction((e) -> { try { panoramiquesAjouter(); } catch (InterruptedException ex) { Logger.getLogger(EditeurPanovisu.class.getName()).log(Level.SEVERE, null, ex); } }); getMniAjouterPlan().setOnAction((e) -> { planAjouter(); }); mniAPropos.setOnAction((e) -> { aideapropos(); }); mniAide.setOnAction((e) -> { AideDialogController.affiche(); }); mniChargerModele.setOnAction((e) -> { try { modeleCharger(); } catch (IOException ex) { Logger.getLogger(EditeurPanovisu.class.getName()).log(Level.SEVERE, null, ex); } }); mniSauverModele.setOnAction((e) -> { try { modeleSauver(); } catch (IOException ex) { Logger.getLogger(EditeurPanovisu.class.getName()).log(Level.SEVERE, null, ex); } }); mniCube2EquiTransformation.setOnAction((e) -> { transformationCube2Equi(); }); mniEqui2CubeTransformation.setOnAction((e) -> { transformationEqui2Cube(); }); mniOutilsBarre.setOnAction((e) -> { creerEditerBarre(""); }); mniOutilsDiaporama.setOnAction((e) -> { creerEditerDiaporama(""); }); mniOutilsLoupe.setOnAction((e) -> { e.consume(); setAfficheLoupe(!isAfficheLoupe()); apLoupe.setVisible(isAfficheLoupe()); Point p = MouseInfo.getPointerInfo().getLocation(); if (p.x < getiTailleLoupe() + 80 && p.y < getiTailleLoupe() + 160) { apLoupe.setLayoutX(ivImagePanoramique.getFitWidth() - getiTailleLoupe() + 5); apLoupe.setLayoutY(35); strPositLoupe = "droite"; } else { apLoupe.setLayoutX(35); apLoupe.setLayoutY(35); strPositLoupe = "gauche"; } }); mniAffichageVisite.setOnAction((e) -> { tpEnvironnement.getSelectionModel().select(0); }); mniAffichageInterface.setOnAction((e) -> { tpEnvironnement.getSelectionModel().select(1); }); getMniAffichagePlan().setOnAction((e) -> { if (!tabPlan.isDisabled()) { tpEnvironnement.getSelectionModel().select(2); } }); mniConfigTransformation.setOnAction((e) -> { try { ConfigDialogController cfg = new ConfigDialogController(); cfg.afficheFenetre(); } catch (IOException ex) { Logger.getLogger(EditeurPanovisu.class.getName()).log(Level.SEVERE, null, ex); } }); spBtnNouvprojet.setOnMouseClicked((t) -> { projetsNouveau(); }); spBtnOuvrirProjet.setOnMouseClicked((t) -> { try { try { projetCharge(); } catch (InterruptedException ex) { Logger.getLogger(EditeurPanovisu.class.getName()).log(Level.SEVERE, null, ex); } } catch (IOException ex) { Logger.getLogger(EditeurPanovisu.class.getName()).log(Level.SEVERE, null, ex); } }); spBtnSauveProjet.setOnMouseClicked((t) -> { try { projetSauve(); } catch (IOException ex) { Logger.getLogger(EditeurPanovisu.class.getName()).log(Level.SEVERE, null, ex); } }); spBtnAjoutePano.setOnMouseClicked((t) -> { try { panoramiquesAjouter(); } catch (InterruptedException ex) { Logger.getLogger(EditeurPanovisu.class.getName()).log(Level.SEVERE, null, ex); } }); spBtnAjoutePlan.setOnMouseClicked((t) -> { planAjouter(); }); spBtnGenereVisite.setOnMouseClicked((t) -> { try { genereVisite(); } catch (IOException ex) { Logger.getLogger(EditeurPanovisu.class.getName()).log(Level.SEVERE, null, ex); } }); spBtnEqui2Cube.setOnMouseClicked((t) -> { transformationEqui2Cube(); }); spBtnCube2Equi.setOnMouseClicked((t) -> { transformationCube2Equi(); }); } /** * */ private static void retirePanoCourant() { ButtonType buttonTypeOui = new ButtonType(rbLocalisation.getString("main.oui")); ButtonType buttonTypeNon = new ButtonType(rbLocalisation.getString("main.non")); Alert alert = new Alert(AlertType.WARNING); alert.setTitle(rbLocalisation.getString("main.supprimerPano")); alert.setHeaderText(null); alert.setContentText(rbLocalisation.getString("main.etesVousSur")); alert.getButtonTypes().clear(); alert.getButtonTypes().setAll(buttonTypeOui, buttonTypeNon); Optional<ButtonType> actReponse = alert.showAndWait(); if (actReponse.get() == buttonTypeOui) { File fImage; for (int i = 0; i < getPanoramiquesProjet()[getiPanoActuel()].getNombreNiveaux(); i++) { if (getPanoramiquesProjet()[getiPanoActuel()].getStrTypePanoramique().equals(Panoramique.SPHERE)) { fImage = new File(getStrRepertTemp() + File.separator + "panos" + File.separator + "niveau" + i + File.separator + "panovisu" + getiPanoActuel() + ".jpg"); fImage.delete(); } else { String strNom = getStrRepertTemp() + File.separator + "panos" + File.separator + "niveau" + i + File.separator + "panovisu" + getiPanoActuel(); fImage = new File(strNom + "_u.jpg"); fImage.delete(); fImage = new File(strNom + "_d.jpg"); fImage.delete(); fImage = new File(strNom + "_l.jpg"); fImage.delete(); fImage = new File(strNom + "_r.jpg"); fImage.delete(); fImage = new File(strNom + "_f.jpg"); fImage.delete(); fImage = new File(strNom + "_b.jpg"); fImage.delete(); } } if (getPanoramiquesProjet()[getiPanoActuel()].getStrTypePanoramique().equals(Panoramique.SPHERE)) { fImage = new File(getStrRepertTemp() + File.separator + "panos" + File.separator + "panovisu" + getiPanoActuel() + ".jpg"); fImage.delete(); } else { String strNom = getStrRepertTemp() + File.separator + "panos" + File.separator + "panovisu" + getiPanoActuel(); fImage = new File(strNom + "_u.jpg"); fImage.delete(); fImage = new File(strNom + "_d.jpg"); fImage.delete(); fImage = new File(strNom + "_l.jpg"); fImage.delete(); fImage = new File(strNom + "_r.jpg"); fImage.delete(); fImage = new File(strNom + "_f.jpg"); fImage.delete(); fImage = new File(strNom + "_b.jpg"); fImage.delete(); } int iPanCourant = cbListeChoixPanoramique.getSelectionModel().getSelectedIndex(); File fileRemplace; for (int i = iPanCourant; i < getiNombrePanoramiques() - 1; i++) { for (int j = 0; j < getPanoramiquesProjet()[i].getNombreNiveaux(); j++) { if (getPanoramiquesProjet()[getiPanoActuel()].getStrTypePanoramique() .equals(Panoramique.SPHERE)) { fImage = new File(getStrRepertTemp() + File.separator + "panos" + File.separator + "niveau" + j + File.separator + "panovisu" + (i + 1) + ".jpg"); fileRemplace = new File(getStrRepertTemp() + File.separator + "panos" + File.separator + "niveau" + j + File.separator + "panovisu" + i + ".jpg"); fImage.renameTo(fileRemplace); } else { String strNom = getStrRepertTemp() + File.separator + "panos" + File.separator + "niveau" + j + File.separator + "panovisu" + (i + 1); String strNom1 = getStrRepertTemp() + File.separator + "panos" + File.separator + "niveau" + j + File.separator + "panovisu" + i; fImage = new File(strNom + "_u.jpg"); fileRemplace = new File(strNom1 + "_u.jpg"); fImage.renameTo(fileRemplace); fImage = new File(strNom + "_d.jpg"); fileRemplace = new File(strNom1 + "_d.jpg"); fImage.renameTo(fileRemplace); fImage = new File(strNom + "_l.jpg"); fileRemplace = new File(strNom1 + "_l.jpg"); fImage.renameTo(fileRemplace); fImage = new File(strNom + "_r.jpg"); fileRemplace = new File(strNom1 + "_r.jpg"); fImage.renameTo(fileRemplace); fImage = new File(strNom + "_f.jpg"); fileRemplace = new File(strNom1 + "_f.jpg"); fImage.renameTo(fileRemplace); fImage = new File(strNom + "_b.jpg"); fileRemplace = new File(strNom1 + "_b.jpg"); fImage.renameTo(fileRemplace); } } if (getPanoramiquesProjet()[getiPanoActuel()].getStrTypePanoramique().equals(Panoramique.SPHERE)) { fImage = new File(getStrRepertTemp() + File.separator + "panos" + File.separator + "panovisu" + (i + 1) + ".jpg"); fileRemplace = new File(getStrRepertTemp() + File.separator + "panos" + File.separator + "panovisu" + i + ".jpg"); fImage.renameTo(fileRemplace); } else { String strNom = getStrRepertTemp() + File.separator + "panos" + File.separator + "panovisu" + (i + 1); String strNom1 = getStrRepertTemp() + File.separator + "panos" + File.separator + "panovisu" + i; fImage = new File(strNom + "_u.jpg"); fileRemplace = new File(strNom1 + "_u.jpg"); fImage.renameTo(fileRemplace); fImage = new File(strNom + "_d.jpg"); fileRemplace = new File(strNom1 + "_d.jpg"); fImage.renameTo(fileRemplace); fImage = new File(strNom + "_l.jpg"); fileRemplace = new File(strNom1 + "_l.jpg"); fImage.renameTo(fileRemplace); fImage = new File(strNom + "_r.jpg"); fileRemplace = new File(strNom1 + "_r.jpg"); fImage.renameTo(fileRemplace); fImage = new File(strNom + "_f.jpg"); fileRemplace = new File(strNom1 + "_f.jpg"); fImage.renameTo(fileRemplace); fImage = new File(strNom + "_b.jpg"); fileRemplace = new File(strNom1 + "_b.jpg"); fImage.renameTo(fileRemplace); } getPanoramiquesProjet()[i] = getPanoramiquesProjet()[i + 1]; } for (int i = 0; i < getiNombrePanoramiques() - 1; i++) { for (int j = 0; j < getPanoramiquesProjet()[i].getNombreHotspots(); j++) { if (getPanoramiquesProjet()[i].getHotspot(j).getNumeroPano() == iPanCourant) { getPanoramiquesProjet()[i].removeHotspot(j); } } } for (int i = 0; i < getiNombrePanoramiques() - 1; i++) { for (int j = 0; j < getPanoramiquesProjet()[i].getNombreHotspots(); j++) { if (getPanoramiquesProjet()[i].getHotspot(j).getNumeroPano() > iPanCourant) { getPanoramiquesProjet()[i].getHotspot(j) .setNumeroPano(getPanoramiquesProjet()[i].getHotspot(j).getNumeroPano() - 1); } } } for (int i = 0; i < getiNombrePlans(); i++) { for (int j = 0; j < getPlans()[i].getNombreHotspots(); j++) { if (getPlans()[i].getHotspot(j).getNumeroPano() == iPanCourant) { getPlans()[i].removeHotspot(j); } } } for (int i = 0; i < getiNombrePlans(); i++) { for (int j = 0; j < getPlans()[i].getNombreHotspots(); j++) { if (getPlans()[i].getHotspot(j).getNumeroPano() > iPanCourant) { getPlans()[i].getHotspot(j).setNumeroPano(getPlans()[i].getHotspot(j).getNumeroPano() - 1); } } } cbListeChoixPanoramique.setValue(cbListeChoixPanoramique.getItems().get(0)); affichePanoChoisit(0); ordPano.supprimerElement(iPanCourant); apListePanoTriable = ordPano.getApListePanoramiques(); apListePanoTriable.setMaxHeight(apListePanoTriable.getPrefHeight()); apListePanoTriable.setMinHeight(apListePanoTriable.getPrefHeight()); apParametresVisite.setPrefHeight(120 + apListePanoTriable.getPrefHeight() + 20); if (apParametresVisite.isVisible()) { apParametresVisite.setMinHeight(120 + apListePanoTriable.getPrefHeight() + 20); apParametresVisite.setMaxHeight(120 + apListePanoTriable.getPrefHeight() + 20); } rafraichitListePano(); setiNombrePanoramiques(getiNombrePanoramiques() - 1); } } /** * * @param stPrimaryStage * @param iLargeur * @param iHauteur * @throws Exception Exceptions */ private static void creeEnvironnement(Stage stPrimaryStage, int iLargeur, int iHauteur) throws Exception { popUp = new PopUpDialogController(); stPrimaryStage.setMaximized(true); stPrimaryStage.setMinWidth(1280); stPrimaryStage.setMinHeight(720); iHauteurInterface = iHauteur; iLargeurInterface = iLargeur; /** * Cration des lments constitutifs de l'cran */ vbRacine = new VBox(); AnchorPane panePrincipale = new AnchorPane(vbRacine); setScnPrincipale(new Scene(panePrincipale, iLargeur, iHauteur, Color.rgb(221, 221, 221))); if (!fileRepertConfig.exists()) { fileRepertConfig.mkdirs(); setLocale(new Locale("fr", "FR")); File f = new File("css/clair.css"); getScnPrincipale().getStylesheets().add("file:///" + f.getAbsolutePath().replace("\\", "/")); setStrRepertoireProjet(getStrRepertAppli()); } else { lisFichierConfig(); } creeMenu(vbRacine); tpEnvironnement = new TabPane(); tpEnvironnement.setMinHeight(iHauteur - 60); tpEnvironnement.setMaxHeight(iHauteur - 60); tpEnvironnement.setMinWidth(iLargeur); tpEnvironnement.setMaxWidth(iLargeur); Pane paneBarreStatus = new Pane(); paneBarreStatus.setPrefSize(iLargeur + 20, 30); paneBarreStatus.setTranslateY(25); paneBarreStatus.setStyle("-fx-background-color:#c00;-fx-border-color:#aaa"); tabVisite = new Tab(); Pane paneVisualiseur; Pane panePlan; setTabInterface(new Tab()); setTabPlan(new Tab()); getGestionnaireInterface().creeInterface(iLargeur, iHauteur - 78); paneVisualiseur = getGestionnaireInterface().paneTabInterface; getGestionnairePlan().creeInterface(iLargeur, iHauteur - 78); panePlan = getGestionnairePlan().getPaneInterface(); getTabInterface().setContent(paneVisualiseur); getTabPlan().setContent(panePlan); HBox hbEnvironnement = new HBox(); TextField tfTitrePano; TextField tfTitreVisite; tpEnvironnement.getTabs().addAll(tabVisite, getTabInterface(), getTabPlan()); tpEnvironnement.setSide(Side.TOP); tpEnvironnement.getSelectionModel().selectedItemProperty() .addListener((ObservableValue<? extends Tab> ov, Tab t, Tab t1) -> { if (getGestionnaireInterface().navigateurCarteOL == null && isbInternet()) { getGestionnaireInterface().navigateurCarteOL = new NavigateurOpenLayersSeul(); getGestionnaireInterface().apNavigateurCarte = getGestionnaireInterface().navigateurCarteOL .afficheNavigateurOpenLayer(); } getGestionnaireInterface().rafraichit(); }); tabInterface.disableProperty().addListener((ov, av, nv) -> { if (!nv && getGestionnaireInterface().navigateurCarteOL == null && isbInternet()) { getGestionnaireInterface().navigateurCarteOL = new NavigateurOpenLayersSeul(); getGestionnaireInterface().navigateurCarteOL.setBingApiKey(getStrBingAPIKey()); getGestionnaireInterface().apNavigateurCarte = getGestionnaireInterface().navigateurCarteOL .afficheNavigateurOpenLayer(); } }); tabVisite.setText(rbLocalisation.getString("main.creationVisite")); tabVisite.setClosable(false); getTabInterface().setText(rbLocalisation.getString("main.creationInterface")); getTabInterface().setClosable(false); getTabPlan().setText(rbLocalisation.getString("main.tabPlan")); getTabPlan().setClosable(false); getTabPlan().setDisable(true); if (isbInternet()) { getTabInterface().setDisable(true); } tabVisite.setContent(hbEnvironnement); double largeur; String strLabelStyle = "-fx-color : white;-fx-background-color : #fff;-fx-padding : 5px; -fx-border : 1px solid #777;-fx-width : 100px;-fx-margin : 5px; "; vbRacine.setStyle("-fx-font-size : 9pt;-fx-font-family: Arial;"); vbRacine.setTranslateY(15); spPanneauOutils = new ScrollPane(); spPanneauOutils.setId("panOutils"); vbOutils = new VBox(-5); vbOutils.setPrefWidth(largeurOutils - 20); setVbChoixPanoramique(new VBox()); getVbChoixPanoramique().setId("choixPanoramique"); double largeurOutil = vbOutils.getPrefWidth(); apPanovisu = new AnchorPane(); apPanovisu.setPrefHeight(50); apPanovisu.setMinHeight(50); apPanovisu.setMaxHeight(50); apPanovisu.setMaxWidth(380); apPanovisu.setPrefWidth(380); apPanovisu.setMinWidth(380); apPanovisu.setLayoutX(iLargeur - 380); if (isMac()) { apPanovisu.setLayoutY(0); } else { apPanovisu.setLayoutY(45); } apPanovisu.setStyle("-fx-background-color : derive(-fx-base,20%);"); ImageView ivPanoVisu = new ImageView(new Image( "file:" + getStrRepertAppli() + File.separator + "images/panovisu.png", 48, 48, true, true)); ivPanoVisu.setLayoutX(40); ivPanoVisu.setLayoutY(1); Label lblPanoVisu = new Label("panoVisu Vers. : " + strNumVersion); lblPanoVisu.setStyle( "-fx-font-weight : bold;-fx-font-family : Verdana,Arial,sans-serif;-fx-font-size : 1.2em;"); lblPanoVisu.setLayoutX(108); lblPanoVisu.setLayoutY(5); Label lblPanoVisu2 = new Label("Laurent LANG (2014-2015)"); lblPanoVisu2.setLayoutX(108); lblPanoVisu2.setLayoutY(35); lblPanoVisu2.setStyle("-fx-font-family : Verdana,Arial,sans-serif;-fx-font-size : 0.8em;"); apPanovisu.getChildren().addAll(ivPanoVisu, lblPanoVisu, lblPanoVisu2); panePrincipale.getChildren().add(apPanovisu); panePrincipale.getChildren().add(apWebview); apWebview.setVisible(false); apWebview.setStyle("-fx-background-color : #333;"); apWebview.setPrefSize(iLargeur - 75, iHauteur - 80); apWebview.setMinSize(iLargeur - 75, iHauteur - 80); apWebview.setMaxSize(iLargeur - 75, iHauteur - 80); apWebview.setTranslateX(25); apWebview.setTranslateY(5); /* Paramtres de la visite */ apParametresVisite = new AnchorPane(); apParametresVisite.setLayoutY(40); Label lblTitreVisite = new Label(rbLocalisation.getString("main.titreVisite")); lblTitreVisite.setStyle("-fx-font-size : 10pt;-fx-font-weight : bold;"); lblTitreVisite.setLayoutX(10); lblTitreVisite.setLayoutY(5); tfTitreVisite = new TextField(); tfTitreVisite.setId("titreVisite"); tfTitreVisite.setPrefSize(200, 25); tfTitreVisite.setMaxSize(250, 25); tfTitreVisite.setLayoutX(60); tfTitreVisite.setLayoutY(25); cbIntroPetitePlanete = new CheckBox(rbLocalisation.getString("main.introPetitePlanete")); cbIntroPetitePlanete.setSelected(false); cbIntroPetitePlanete.setLayoutX(10); cbIntroPetitePlanete.setLayoutY(60); Label lblChoixPanoramiqueEntree = new Label(rbLocalisation.getString("main.panoEntree")); lblChoixPanoramiqueEntree.setStyle("-fx-font-size : 1em;"); lblChoixPanoramiqueEntree.setLayoutX(10); lblChoixPanoramiqueEntree.setLayoutY(90); lblChoixPanoramiqueEntree.setMaxWidth(largeurOutils - 40); lblChoixPanoramiqueEntree.setPrefHeight(35); lblChoixPanoramiqueEntree.setWrapText(true); apParametresVisite.setPrefHeight(120); apParametresVisite.getChildren().addAll(lblTitreVisite, tfTitreVisite, cbIntroPetitePlanete, lblChoixPanoramiqueEntree); PaneOutil poParametresVisite = new PaneOutil(rbLocalisation.getString("main.parametresVisite"), apParametresVisite, largeurOutil); setApPVIS(new AnchorPane(poParametresVisite.getApPaneOutil())); poParametresVisite.setbValide(isbIntroPetitePlanete()); AnchorPane apAutoRotation = new AnchorPane(); apAutoRotation.setPrefHeight(270); apAutoRotation.setLayoutY(40); PaneOutil poAutoRotation = new PaneOutil(rbLocalisation.getString("main.autoTourRotation"), apAutoRotation, largeurOutil); setApAR(new AnchorPane(poAutoRotation.getApPaneOutil())); poAutoRotation.setbValide(isbAutoRotationDemarre() || isbAutoTourDemarre()); cbAutoRotationDemarrage = new CheckBox(rbLocalisation.getString("main.autoRotationDemarrage")); cbAutoRotationDemarrage.setSelected(false); cbAutoRotationDemarrage.setLayoutX(10); cbAutoRotationDemarrage.setLayoutY(10); Label lblVitesse = new Label(rbLocalisation.getString("main.autoRotationVitesse")); lblVitesse.setLayoutX(10); lblVitesse.setLayoutY(40); cbAutoRotationVitesse = new ComboBox(); cbAutoRotationVitesse.getItems().add(0, "10 " + rbLocalisation.getString("main.parTour")); cbAutoRotationVitesse.getItems().add(1, "20 " + rbLocalisation.getString("main.parTour")); cbAutoRotationVitesse.getItems().add(2, "30 " + rbLocalisation.getString("main.parTour")); cbAutoRotationVitesse.getItems().add(3, "Autre n " + rbLocalisation.getString("main.parTour")); cbAutoRotationVitesse.getSelectionModel().select(2); cbAutoRotationVitesse.setLayoutX(30); cbAutoRotationVitesse.setLayoutY(70); cbAutoRotationVitesse.setMaxWidth(170); bdfAutoRotationVitesse = new BigDecimalField(new BigDecimal(40)); bdfAutoRotationVitesse.setDisable(true); bdfAutoRotationVitesse.setLayoutX(210); bdfAutoRotationVitesse.setLayoutY(70); bdfAutoRotationVitesse.setMaxWidth(70); lblVitesse.disableProperty().bind(cbAutoRotationDemarrage.selectedProperty().not()); cbAutoRotationVitesse.disableProperty().bind(cbAutoRotationDemarrage.selectedProperty().not()); Label lblUnites = new Label(rbLocalisation.getString("main.parTour")); lblUnites.setLayoutX(290); lblUnites.setLayoutY(75); Separator spAutotour = new Separator(Orientation.HORIZONTAL); spAutotour.setLayoutX(0); spAutotour.setLayoutY(100); spAutotour.setMinWidth(380); cbAutoTourDemarrage = new CheckBox(rbLocalisation.getString("main.autoTour")); cbAutoTourDemarrage.setSelected(false); cbAutoTourDemarrage.setLayoutX(10); cbAutoTourDemarrage.setLayoutY(120); Label lblDemarrageAutoTour = new Label(rbLocalisation.getString("main.autoTourDemarrage")); lblDemarrageAutoTour.setLayoutX(10); lblDemarrageAutoTour.setLayoutY(150); bdfAutoTourDemarrage = new BigDecimalField(new BigDecimal(1)); bdfAutoTourDemarrage.setLayoutX(240); bdfAutoTourDemarrage.setLayoutY(180); bdfAutoTourDemarrage.setMaxWidth(70); Label lblVitesseAutoTour = new Label(rbLocalisation.getString("main.autoTourChange")); lblVitesseAutoTour.setLayoutX(10); lblVitesseAutoTour.setLayoutY(210); cbAutoTourType = new ComboBox(); cbAutoTourType.getItems().add(rbLocalisation.getString("main.nTours")); cbAutoTourType.getItems().add(rbLocalisation.getString("main.nSecondes")); cbAutoTourType.getSelectionModel().select(1); cbAutoTourType.setLayoutX(30); cbAutoTourType.setLayoutY(240); cbAutoTourType.setMaxWidth(140); bdfAutoTourLimite = new BigDecimalField(new BigDecimal(1)); bdfAutoTourLimite.setLayoutX(240); bdfAutoTourLimite.setLayoutY(240); bdfAutoTourLimite.setMaxWidth(70); Label lblN = new Label("n="); lblN.setLayoutX(210); lblN.setLayoutY(245); cbAutoTourType.disableProperty().bind(cbAutoTourDemarrage.selectedProperty().not()); bdfAutoTourLimite.disableProperty().bind(cbAutoTourDemarrage.selectedProperty().not()); cbAutoRotationVitesse.getSelectionModel().selectedIndexProperty().addListener((ov, av, nv) -> { if (cbAutoRotationVitesse.getSelectionModel().getSelectedIndex() == 3) { bdfAutoRotationVitesse.setDisable(false); setiAutoRotationVitesse(bdfAutoRotationVitesse.getNumber().toBigInteger().intValue()); } else { bdfAutoRotationVitesse.setDisable(true); setiAutoRotationVitesse(10 * (cbAutoRotationVitesse.getSelectionModel().getSelectedIndex() + 1)); } }); cbIntroPetitePlanete.selectedProperty().addListener((ov, av, nv) -> { setbIntroPetitePlanete(nv); poParametresVisite.setbValide(isbIntroPetitePlanete()); }); cbAutoRotationDemarrage.selectedProperty().addListener((ov, av, nv) -> { setbAutoRotationDemarre(nv); poAutoRotation.setbValide(isbAutoRotationDemarre() || isbAutoTourDemarre()); }); bdfAutoRotationVitesse.numberProperty().addListener((ov, av, nv) -> { setiAutoRotationVitesse(nv.toBigInteger().intValue()); }); cbAutoTourType.getSelectionModel().selectedIndexProperty().addListener((ov, av, nv) -> { if (cbAutoTourType.getSelectionModel().getSelectedIndex() == 0) { setStrAutoTourType("tours"); } else { setStrAutoTourType("secondes"); } }); cbAutoTourDemarrage.selectedProperty().addListener((ov, av, nv) -> { setbAutoTourDemarre(nv); poAutoRotation.setbValide(isbAutoRotationDemarre() || isbAutoTourDemarre()); getGestionnaireInterface().getApBtnVA().setDisable(!nv); }); bdfAutoTourLimite.numberProperty().addListener((ov, av, nv) -> { setiAutoTourLimite(nv.toBigInteger().intValue()); }); bdfAutoTourDemarrage.numberProperty().addListener((ov, av, nv) -> { setiAutoTourDemarrage(nv.toBigInteger().intValue()); }); apAutoRotation.getChildren().addAll(cbAutoRotationDemarrage, lblVitesse, cbAutoRotationVitesse, bdfAutoRotationVitesse, lblUnites, spAutotour, cbAutoTourDemarrage, lblDemarrageAutoTour, bdfAutoTourDemarrage, lblVitesseAutoTour, cbAutoTourType, lblN, bdfAutoTourLimite); AnchorPane apParametresPano = new AnchorPane(); apParametresPano.setPrefHeight(340); apParametresPano.setLayoutY(40); ImageView ivSupprPanoramique = new ImageView( new Image("file:" + getStrRepertAppli() + File.separator + "images/suppr.png", 48, 48, true, true)); ImageView ivModifPanoramique = new ImageView(new Image( "file:" + getStrRepertAppli() + File.separator + "images/modifie.png", 48, 48, true, true)); Button btnSupprimePano = new Button(rbLocalisation.getString("main.supprimePanoCourant"), ivSupprPanoramique); btnSupprimePano.setLayoutX(190); btnSupprimePano.setLayoutY(70); btnSupprimePano.setPrefSize(160, 60); btnSupprimePano.setMinSize(160, 60); btnSupprimePano.setMaxSize(160, 60); btnSupprimePano.setWrapText(true); btnSupprimePano.setOnAction((e) -> { retirePanoCourant(); }); Button btnModifiePano = new Button(rbLocalisation.getString("main.modifiePanoCourant"), ivModifPanoramique); btnModifiePano.setLayoutX(20); btnModifiePano.setLayoutY(70); btnModifiePano.setPrefSize(160, 60); btnModifiePano.setMinSize(160, 60); btnModifiePano.setMaxSize(160, 60); btnModifiePano.setWrapText(true); btnModifiePano.setOnAction((e) -> { String strRepertPano = getPanoramiquesProjet()[getiPanoActuel()].getStrNomFichier().substring(0, getPanoramiquesProjet()[getiPanoActuel()].getStrNomFichier().lastIndexOf(File.separator)); FileChooser fileChooser = new FileChooser(); FileChooser.ExtensionFilter extFilterImage = new FileChooser.ExtensionFilter( "Fichiers Image (JPG,BMP,TIFF)", "*.jpg", "*.bmp", "*.tif"); FileChooser.ExtensionFilter extFilterJpeg = new FileChooser.ExtensionFilter("Fichiers JPEG (*.jpg)", "*.jpg"); FileChooser.ExtensionFilter extFilterBmp = new FileChooser.ExtensionFilter("Fichiers BMP (*.bmp)", "*.bmp"); FileChooser.ExtensionFilter extFilterTiff = new FileChooser.ExtensionFilter("Fichiers TIFF (*.tif)", "*.tif"); File fileRepert = new File(strRepertPano + File.separator); fileChooser.setInitialDirectory(fileRepert); fileChooser.getExtensionFilters().addAll(extFilterJpeg, extFilterTiff, extFilterBmp, extFilterImage); File filePano = fileChooser.showOpenDialog(null); if (filePano != null) { setbDejaSauve(false); getStPrincipal().setTitle(getStPrincipal().getTitle().replace(" *", "") + " *"); String strFilePano = filePano.getAbsolutePath(); String strExtension = strFilePano.substring(strFilePano.length() - 3, strFilePano.length()); Image imgPano = null; if ("tif".equals(strExtension)) { try { imgPano = ReadWriteImage.readTiff(strFilePano); } catch (IOException | ImageReadException ex) { Logger.getLogger(EditeurPanovisu.class.getName()).log(Level.SEVERE, null, ex); } } else { imgPano = new Image("file:" + strFilePano); } if (imgPano != null) { if (imgPano.getWidth() == imgPano.getHeight()) { try { rechargePanoramiqueProjet(strFilePano, Panoramique.CUBE); } catch (InterruptedException ex) { Logger.getLogger(EditeurPanovisu.class.getName()).log(Level.SEVERE, null, ex); } } else { try { rechargePanoramiqueProjet(strFilePano, Panoramique.SPHERE); } catch (InterruptedException ex) { Logger.getLogger(EditeurPanovisu.class.getName()).log(Level.SEVERE, null, ex); } } affichePanoChoisit(getiPanoActuel()); if (apListePanoTriable != null) { apParametresVisite.getChildren().remove(apListePanoTriable); } ordPano.rafraichitListe(); ordPano.ajouteNouveauxPanos(); apListePanoTriable = ordPano.getApListePanoramiques(); apListePanoTriable.setMaxHeight(apListePanoTriable.getPrefHeight()); apListePanoTriable.setMinHeight(apListePanoTriable.getPrefHeight()); apListePanoTriable.setVisible(true); apParametresVisite.getChildren().remove(apListePanoTriable); apParametresVisite.getChildren().add(apListePanoTriable); apListePanoTriable.setLayoutX(40); apListePanoTriable.setLayoutY(130); apParametresVisite.setPrefHeight(120 + apListePanoTriable.getPrefHeight() + 20); if (apParametresVisite.isVisible()) { apParametresVisite.setMinHeight(120 + apListePanoTriable.getPrefHeight() + 20); apParametresVisite.setMaxHeight(120 + apListePanoTriable.getPrefHeight() + 20); } rafraichitListePano(); } } }); Label lblTitrePano = new Label(rbLocalisation.getString("main.titrePano")); lblTitrePano.setStyle("-fx-font-size : 1em;"); lblTitrePano.setPadding(new Insets(5, 5, 5, 0)); lblTitrePano.setLayoutX(10); lblTitrePano.setLayoutY(10); tfTitrePano = new TextField(); tfTitrePano.setId("txttitrepano"); tfTitrePano.setPrefSize(220, 25); tfTitrePano.setMaxSize(250, 25); tfTitrePano.setLayoutX(60); tfTitrePano.setLayoutY(40); tfTitrePano.textProperty().addListener((final ObservableValue<? extends String> observable, final String oldValue, final String newValue) -> { clickBtnValidePano(); }); slMinLat = new Slider(-90, -45, -90); slMinLat.setDisable(true); slMaxLat = new Slider(45, 90, 90); slMaxLat.setDisable(true); cbMinLat = new CheckBox(rbLocalisation.getString("main.blocageNadir")); cbMaxLat = new CheckBox(rbLocalisation.getString("main.blocageZenith")); slMinFov = new Slider(5, 70, 12); slMaxFov = new Slider(5, 70, 70); Label lblMinFov = new Label("min. hFOV : 12"); Label lblMaxFov = new Label("max. hFOV : 70"); slMinLat.disableProperty().bind(cbMinLat.selectedProperty().not()); slMaxLat.disableProperty().bind(cbMaxLat.selectedProperty().not()); slMinLat.setLayoutX(10); slMinLat.setLayoutY(160); cbMinLat.setLayoutX(190); cbMinLat.setLayoutY(160); slMaxLat.setLayoutX(10); slMaxLat.setLayoutY(190); cbMaxLat.setLayoutX(190); cbMaxLat.setLayoutY(190); slMinFov.setLayoutX(10); slMinFov.setLayoutY(220); lblMinFov.setLayoutX(190); lblMinFov.setLayoutY(220); slMaxFov.setLayoutX(10); slMaxFov.setLayoutY(250); lblMaxFov.setLayoutX(190); lblMaxFov.setLayoutY(250); Button btnBlocage = new Button(rbLocalisation.getString("main.blocage")); btnBlocage.setLayoutX(190); btnBlocage.setLayoutY(300); ligNadir = new Line(); ligNadir.setVisible(false); ligNadir.setStroke(Color.YELLOW); ligNadir.setStrokeWidth(2); ligZenith = new Line(); ligZenith.setVisible(false); ligZenith.setStroke(Color.YELLOW); ligZenith.setStrokeWidth(2); ligNadir.visibleProperty().bind(cbMinLat.selectedProperty()); ligZenith.visibleProperty().bind(cbMaxLat.selectedProperty()); slMinFov.valueProperty().addListener((observableValue, oldValue, newValue) -> { setbDejaSauve(false); getStPrincipal().setTitle(getStPrincipal().getTitle().replace(" *", "") + " *"); getPanoramiquesProjet()[iPanoActuel].setFovMin((double) newValue); double val1 = Math.round((double) newValue * 10) / 10; lblMinFov.setText("min. FOV : " + val1 + ""); slMaxFov.setMin(val1); navigateurPanoramique.setMinFov(val1); if (navigateurPanoramique.getFov() < val1) { navigateurPanoramique.setFov(val1); } if (navigateurPanoramique.getChoixFov() < val1) { navigateurPanoramique.setChoixFov(val1); } }); slMaxFov.valueProperty().addListener((observableValue, oldValue, newValue) -> { setbDejaSauve(false); getStPrincipal().setTitle(getStPrincipal().getTitle().replace(" *", "") + " *"); getPanoramiquesProjet()[iPanoActuel].setFovMax((double) newValue); double val1 = Math.round((double) newValue * 10) / 10; lblMaxFov.setText("max. FOV : " + val1 + ""); slMinFov.setMax(val1); navigateurPanoramique.setMaxFov(val1); if (navigateurPanoramique.getFov() > val1) { navigateurPanoramique.setFov(val1); } if (navigateurPanoramique.getChoixFov() > val1) { navigateurPanoramique.setChoixFov(val1); } }); slMinLat.valueProperty().addListener((observableValue, oldValue, newValue) -> { setbDejaSauve(false); getStPrincipal().setTitle(getStPrincipal().getTitle().replace(" *", "") + " *"); double largeurImage1 = panePanoramique.getPrefWidth(); double X11 = ivImagePanoramique.getLayoutX(); double Y1 = (90.0d - (double) newValue) * largeurImage1 / 360.0d; ligNadir.setStartX(X11); ligNadir.setStartY(Y1); ligNadir.setEndX(X11 + largeurImage1); ligNadir.setEndY(Y1); getPanoramiquesProjet()[iPanoActuel].setMinLat((double) newValue); }); slMaxLat.valueProperty().addListener((observableValue, oldValue, newValue) -> { setbDejaSauve(false); getStPrincipal().setTitle(getStPrincipal().getTitle().replace(" *", "") + " *"); double largeurImage1 = panePanoramique.getPrefWidth(); double X11 = ivImagePanoramique.getLayoutX(); double Y1 = (90.0d - (double) newValue) * largeurImage1 / 360.0d; ligZenith.setStartX(X11); ligZenith.setStartY(Y1); ligZenith.setEndX(X11 + largeurImage1); ligZenith.setEndY(Y1); getPanoramiquesProjet()[iPanoActuel].setMaxLat((double) newValue); }); cbMinLat.selectedProperty().addListener((ov, av, nv) -> { setbDejaSauve(false); getStPrincipal().setTitle(getStPrincipal().getTitle().replace(" *", "") + " *"); double largeurImage1 = panePanoramique.getPrefWidth(); double X11 = ivImagePanoramique.getLayoutX(); double Y1 = (90.0d - (double) slMinLat.getValue()) * largeurImage1 / 360.0d; ligNadir.setStartX(X11); ligNadir.setStartY(Y1); ligNadir.setEndX(X11 + largeurImage1); ligNadir.setEndY(Y1); getPanoramiquesProjet()[iPanoActuel].setbMinLat(nv); }); cbMaxLat.selectedProperty().addListener((ov, av, nv) -> { setbDejaSauve(false); getStPrincipal().setTitle(getStPrincipal().getTitle().replace(" *", "") + " *"); double largeurImage1 = panePanoramique.getPrefWidth(); double X11 = ivImagePanoramique.getLayoutX(); double Y1 = (90.0d - (double) (double) slMaxLat.getValue()) * largeurImage1 / 360.0d; ligZenith.setStartX(X11); ligZenith.setStartY(Y1); ligZenith.setEndX(X11 + largeurImage1); ligZenith.setEndY(Y1); getPanoramiquesProjet()[iPanoActuel].setbMaxLat(nv); }); btnBlocage.setOnAction((e) -> { setbDejaSauve(false); getStPrincipal().setTitle(getStPrincipal().getTitle().replace(" *", "") + " *"); for (int i = 0; i < iNombrePanoramiques; i++) { getPanoramiquesProjet()[i].setbMaxLat(getPanoramiquesProjet()[iPanoActuel].isbMaxLat()); getPanoramiquesProjet()[i].setbMinLat(getPanoramiquesProjet()[iPanoActuel].isbMinLat()); getPanoramiquesProjet()[i].setMaxLat(getPanoramiquesProjet()[iPanoActuel].getMaxLat()); getPanoramiquesProjet()[i].setMinLat(getPanoramiquesProjet()[iPanoActuel].getMinLat()); getPanoramiquesProjet()[i].setFovMax(getPanoramiquesProjet()[iPanoActuel].getFovMax()); getPanoramiquesProjet()[i].setFovMin(getPanoramiquesProjet()[iPanoActuel].getFovMin()); } }); apParametresPano.getChildren().addAll(btnModifiePano, btnSupprimePano, lblTitrePano, tfTitrePano, slMaxLat, cbMaxLat, slMinLat, cbMinLat, slMinFov, lblMinFov, slMaxFov, lblMaxFov, btnBlocage); setApPPAN(new AnchorPane( new PaneOutil(true, rbLocalisation.getString("main.parametresPano"), apParametresPano, largeurOutil) .getApPaneOutil())); setApGEO(new AnchorPane()); apOpenLayers = new AnchorPane(); apOpenLayers.setVisible(false); if (isbInternet()) { navigateurOpenLayers = new NavigateurOpenLayers(); navigateurOpenLayers.setBingApiKey(getStrBingAPIKey()); tfLongitude = new TextField(); tfLatitude = new TextField(); apOpenLayers = navigateurOpenLayers.afficheNavigateurOpenLayer(tfLongitude, tfLatitude, true); apOpenLayers.setPrefSize(800, 600); Button btnGeolocalise = new Button(rbLocalisation.getString("main.geolocalisation")); btnGeolocalise.setLayoutX(10); btnGeolocalise.setLayoutY(25); btnGeolocalise.setPrefWidth(120); btnGeolocalise.setOnAction((e) -> { navigateurOpenLayers.retireMarqueur(0); if (navigateurOpenLayers.getBingApiKey().equals("")) { navigateurOpenLayers.afficheCartesOpenlayer(); } else { navigateurOpenLayers.valideBingApiKey(navigateurOpenLayers.getBingApiKey()); } if (panoramiquesProjet[getiPanoActuel()].getMarqueurGeolocatisation() != null) { navigateurOpenLayers.allerCoordonnees( panoramiquesProjet[getiPanoActuel()].getMarqueurGeolocatisation(), 17); navigateurOpenLayers .setMarqueur(panoramiquesProjet[getiPanoActuel()].getMarqueurGeolocatisation()); String strFichierPano = getPanoramiquesProjet()[getiPanoActuel()].getStrNomFichier() .substring( getPanoramiquesProjet()[getiPanoActuel()].getStrNomFichier() .lastIndexOf(File.separator) + 1, getPanoramiquesProjet()[getiPanoActuel()].getStrNomFichier().length()) .split("\\.")[0]; String strHTML = "<span style='font-family : Verdana,Arial,sans-serif;font-weight:bold;font-size : 12px;'>" + getPanoramiquesProjet()[getiPanoActuel()].getStrTitrePanoramique() + "</span><br/>" + "<span style='font-family : Verdana,Arial,sans-serif;bold;font-size : 10px;'>" + strFichierPano + "</span>"; strHTML = strHTML.replace("\\", "/"); navigateurOpenLayers.ajouteMarqueur(0, panoramiquesProjet[getiPanoActuel()].getMarqueurGeolocatisation(), strHTML); } apOpenLayers.setVisible(true); }); tfLatitude.setLayoutX(140); tfLatitude.setLayoutY(10); tfLongitude.setLayoutX(140); tfLongitude.setLayoutY(40); apOpenLayers.setLayoutX(200); apOpenLayers.setLayoutY(150); apOpenLayers.setVisible(false); AnchorPane apGeolocalise = new AnchorPane(); apGeolocalise.setPrefHeight(75); apGeolocalise.getChildren().addAll(btnGeolocalise, tfLatitude, tfLongitude); apGeolocalise.setLayoutX(10); apGeolocalise.setLayoutY(40); setPoGeolocalisation( new PaneOutil(rbLocalisation.getString("main.geolocalisation"), apGeolocalise, largeurOutil)); setApGEO(new AnchorPane(getPoGeolocalisation().getApPaneOutil())); apOpenLayers.setLayoutX((iLargeur - apOpenLayers.getPrefWidth()) / 2); apOpenLayers.setLayoutY((iHauteur - apOpenLayers.getPrefHeight()) / 2); apOpenLayers.visibleProperty().addListener((ov, av, nv) -> { mbarPrincipal.setDisable(nv); hbBarreBouton.setDisable(nv); tpEnvironnement.setDisable(nv); }); } apVisuPanoramique.setLayoutY(40); apVisuPanoramique.setPrefWidth(340); apVisuPanoramique.setPrefHeight(295); setApVISU(new AnchorPane( new PaneOutil(true, rbLocalisation.getString("main.visualisation"), apVisuPanoramique, largeurOutil) .getApPaneOutil())); vbVisuHotspots = new VBox(); apVisuHS = new AnchorPane(vbVisuHotspots); apVisuHS.setLayoutY(40); apHS1 = new PaneOutil(true, "Hotspots", apVisuHS, largeurOutil); setApHS(new AnchorPane(apHS1.getApPaneOutil())); getVbChoixPanoramique().getChildren().addAll(getApPVIS(), getApAR(), getApPPAN(), getApGEO(), getApVISU(), getApHS()); getVbChoixPanoramique().setSpacing(-5); vbOutils.getChildren().addAll(getVbChoixPanoramique()); getVbChoixPanoramique().setVisible(false); /* Cration du panneau d'info du panoramique */ spVuePanoramique = new ScrollPane(); hbCoordonnees = new HBox(); panePanoramique = new Pane(); apPanneauPrincipal = new AnchorPane(); lblLong = new Label(""); lblLat = new Label(""); ivImagePanoramique = new ImageView(); stPrimaryStage.setScene(getScnPrincipale()); /** * */ spVuePanoramique.setPrefSize(iLargeur - largeurOutils - 20, iHauteur - 110); spVuePanoramique.setMaxSize(iLargeur - largeurOutils - 20, iHauteur - 110); spVuePanoramique.setVbarPolicy(ScrollPane.ScrollBarPolicy.NEVER); spVuePanoramique.setHbarPolicy(ScrollPane.ScrollBarPolicy.NEVER); spVuePanoramique.setTranslateY(5); /** * */ AnchorPane apPanneauOutils = new AnchorPane(); apPanneauOutils.getChildren().addAll(spPanneauOutils); apPanneauOutils.setTranslateY(3); apPanneauOutils.setTranslateX(20); spPanneauOutils.setContent(vbOutils); spPanneauOutils.setVbarPolicy(ScrollPane.ScrollBarPolicy.AS_NEEDED); spPanneauOutils.setHbarPolicy(ScrollPane.ScrollBarPolicy.NEVER); spPanneauOutils.setPrefSize(largeurOutils, iHauteur - 112); spPanneauOutils.setMaxWidth(largeurOutils); spPanneauOutils.setMaxHeight(iHauteur - 112); spPanneauOutils.setLayoutY(0); spPanneauOutils.setLayoutX(0); /** * */ panePanoramique.setCursor(Cursor.CROSSHAIR); vbOutils.setPrefWidth(largeurOutils - 20); vbOutils.minHeight(iHauteur - 110); vbOutils.setLayoutX(3); lblLong.setPrefSize(100, 15); lblLat.setPrefSize(100, 15); lblLat.setTranslateX(50); apPanneauPrincipal.setPrefSize(iLargeur - largeurOutils - 20, iHauteur - 110); apListeImagesPanoramiques = new AnchorPane(); apListeImagesPanoramiques.setPrefWidth(iLargeurVignettes + 40); apListeImagesPanoramiques.setMinWidth(iLargeurVignettes + 40); apListeImagesPanoramiques.setMaxWidth(iLargeurVignettes + 40); apListeImagesPanoramiques.setPrefHeight(iHauteur - 140); apListeImagesPanoramiques.setLayoutX(-iLargeurVignettes - 30); apListeImagesPanoramiques.setLayoutY(0); apListeImagesPanoramiques.setStyle("-fx-background-color :rgba(0,0,0,0);"); apListeImagesPanoramiques.setOnMouseEntered((e) -> { apListeImagesPanoramiques.setLayoutX(0); }); apListeImagesPanoramiques.setOnMouseExited((e) -> { apListeImagesPanoramiques.setLayoutX(-iLargeurVignettes - 30); }); Label lblVignettes = new Label(rbLocalisation.getString("main.vignettes")); lblVignettes.setPrefSize(70, 20); lblVignettes.setTextAlignment(TextAlignment.CENTER); lblVignettes.setStyle("-fx-background-color:-fx-base;" + "-fx-border-color: derive(-fx-base,10%);" + "-fx-border-width: 1px;"); lblVignettes.setTranslateX(-lblVignettes.getPrefWidth() / 2 + lblVignettes.getPrefHeight() / 2); lblVignettes.setTranslateY(lblVignettes.getPrefWidth() / 2 - lblVignettes.getPrefHeight() / 2); lblVignettes.setRotate(270); lblVignettes.setLayoutX(iLargeurVignettes + 30); apVignettesPano = new AnchorPane(); apVignettesPano.setPrefWidth(iLargeurVignettes + 10); apVignettesPano.setMinHeight(iHauteur - 140); apVignettesPano.setStyle("-fx-background-color:-fx-base;"); rectVignettePano = new Rectangle(0, 0, iLargeurVignettes, iLargeurVignettes / 2.d); rectVignettePano.setLayoutX(5); rectVignettePano.setLayoutY(10); rectVignettePano.setFill(Color.web("#fff", 0.5)); rectVignettePano.setStroke(Color.WHITE); rectVignettePano.setStrokeWidth(2.0); rectVignettePano.setVisible(false); apVignettesPano.getChildren().add(rectVignettePano); ScrollPane spListeImagesPanoramiques = new ScrollPane(apVignettesPano); spListeImagesPanoramiques.setPrefWidth(iLargeurVignettes + 30); spListeImagesPanoramiques.setPrefHeight(iHauteur - 130); spListeImagesPanoramiques.setVbarPolicy(ScrollPane.ScrollBarPolicy.AS_NEEDED); spListeImagesPanoramiques .setStyle("-fx-background-color:-fx-base;" + "-fx-border-color: derive(-fx-base,10%);" + "-fx-effect: dropshadow( three-pass-box , rgba(0,0,0,0.2) , 8, 0.0 , 0 , 8 );" + "-fx-border-width: 1px;"); apListeImagesPanoramiques.getChildren().addAll(spListeImagesPanoramiques, lblVignettes); ivImagePanoramique.setCache(true); largeur = largeurMax - 60; ivImagePanoramique.setFitWidth(largeur); ivImagePanoramique.setFitHeight(largeur / 2.0d); ivImagePanoramique.setLayoutX((largeurMax - largeur) / 2.d); panePanoramique.getChildren().add(ivImagePanoramique); panePanoramique.setPrefSize(ivImagePanoramique.getFitWidth(), ivImagePanoramique.getFitHeight()); panePanoramique.setMaxSize(ivImagePanoramique.getFitWidth(), ivImagePanoramique.getFitHeight()); panePanoramique.setLayoutY(20); lblLong.setTranslateX(50); lblLat.setTranslateX(80); hbCoordonnees.getChildren().setAll(lblLong, lblLat); spVuePanoramique.setContent(apPanneauPrincipal); hbEnvironnement.getChildren().setAll(spVuePanoramique, apPanneauOutils); apEnvironnement = new AnchorPane(); setApAttends(new AnchorPane()); getApAttends().setPrefHeight(250); getApAttends().setPrefWidth(600); getApAttends().setMaxWidth(600); getApAttends().setStyle("-fx-background-color : -fx-base;" + "-fx-border-color: derive(-fx-base,10%);" + "-fx-effect: dropshadow( three-pass-box , rgba(0,0,0,0.5) , 8, 0.0 , 0 , 8 );" + "-fx-border-width: 1px;"); getApAttends().setLayoutX((iLargeur - getApAttends().getPrefWidth()) / 2.d); getApAttends().setLayoutY((iHauteur - getApAttends().getPrefHeight()) / 2.d - 55); pbarAvanceChargement = new ProgressBar(); pbarAvanceChargement.setPrefSize(400, 30); pbarAvanceChargement.setLayoutX((getApAttends().getPrefWidth() - pbarAvanceChargement.getPrefWidth()) / 2); pbarAvanceChargement.setLayoutY(70); Label lblAttends = new Label(rbLocalisation.getString("main.attendsChargement")); lblAttends.setMinWidth(600); lblAttends.setAlignment(Pos.CENTER); lblAttends.setStyle("-fx-background-color : #777;"); lblAttends.setTextFill(Color.WHITE); lblAttends.setLayoutY(5); lblAttends.setFont(Font.font(14)); lblCharge = new Label(); lblCharge.setMinWidth(600); lblCharge.setLayoutY(150); lblCharge.setAlignment(Pos.CENTER); lblNiveaux = new Label(); lblNiveaux.setMinWidth(600); lblNiveaux.setLayoutY(180); lblNiveaux.setAlignment(Pos.CENTER); getApAttends().getChildren().addAll(lblAttends, pbarAvanceChargement, lblCharge, lblNiveaux); getApAttends().setVisible(false); apEnvironnement.getChildren().addAll(tpEnvironnement, getApAttends()); if (isMac()) { apEnvironnement.setTranslateY(-30); } vbRacine.getChildren().addAll(apEnvironnement); apPanneauPrincipal.getChildren().setAll(hbCoordonnees, panePanoramique); stPrimaryStage.show(); popUp.affichePopup(); lblDragDrop = new Label(rbLocalisation.getString("main.dragDrop")); lblDragDrop.setMinHeight(spVuePanoramique.getPrefHeight()); lblDragDrop.setMaxHeight(spVuePanoramique.getPrefHeight()); lblDragDrop.setMinWidth(spVuePanoramique.getPrefWidth()); lblDragDrop.setMaxWidth(spVuePanoramique.getPrefWidth()); lblDragDrop.setAlignment(Pos.CENTER); lblDragDrop.setTextFill(Color.web("#c9c7c7")); lblDragDrop.setTextAlignment(TextAlignment.CENTER); lblDragDrop.setWrapText(true); lblDragDrop.setStyle("-fx-font-size:72px"); lblDragDrop.setTranslateY(-100); apLoupe.setLayoutX(35); apLoupe.setLayoutY(35); apLoupe.setVisible(false); apPanneauPrincipal.getChildren().addAll(lblDragDrop, spAfficheLegende(), apLoupe, apListeImagesPanoramiques); apCreationBarre = new AnchorPane(); apCreationBarre.setVisible(false); apCreationDiaporama = new AnchorPane(); apCreationDiaporama.setVisible(false); apEnvironnement.getChildren().addAll(apCreationBarre, apCreationDiaporama, apOpenLayers); } private static void lisPreferences() throws IOException { File fileFichPreferences = new File( fileRepertConfig.getAbsolutePath() + File.separator + "preferences.cfg"); if (fileFichPreferences.exists()) { try { String strTexte; try (BufferedReader FichierConfig = new BufferedReader( new InputStreamReader(new FileInputStream(fileFichPreferences), "UTF-8"))) { while ((strTexte = FichierConfig.readLine()) != null) { String tpe = strTexte.split("=")[0]; String valeur; if (strTexte.split("=").length > 1) { valeur = strTexte.split("=")[1]; } else { valeur = ""; } switch (tpe) { case "typeFichiersTransf": setStrTypeFichierTransf(valeur); break; case "tailleLoupe": setiTailleLoupe(Integer.parseInt(valeur)); break; case "afficheLoupe": setAfficheLoupe(valeur.equals("true")); break; case "largeurE2C": setLargeurE2C(Double.parseDouble(valeur)); break; case "hauteurE2C": setHauteurE2C(Double.parseDouble(valeur)); break; case "netteteTransf": setbNetteteTransf(valeur.equals("true")); break; case "niveauNetteteTransf": setNiveauNetteteTransf(Double.parseDouble(valeur)); break; } } } } catch (FileNotFoundException ex) { Logger.getLogger(EditeurPanovisu.class.getName()).log(Level.SEVERE, null, ex); } } } private static void sauvePreferences() throws IOException { File fileFichPreferences = new File( EditeurPanovisu.fileRepertConfig.getAbsolutePath() + File.separator + "preferences.cfg"); if (!fileFichPreferences.exists()) { fileFichPreferences.createNewFile(); } fileFichPreferences.setWritable(true); String strContenuFichier = "typeFichiersTransf=" + getStrTypeFichierTransf() + "\n"; strContenuFichier += "tailleLoupe=" + getiTailleLoupe() + "\n"; strContenuFichier += "afficheLoupe=" + isAfficheLoupe() + "\n"; strContenuFichier += "largeurE2C=" + getLargeurE2C() + "\n"; strContenuFichier += "hauteurE2C=" + getHauteurE2C() + "\n"; strContenuFichier += "netteteTransf=" + isbNetteteTransf() + "\n"; strContenuFichier += "niveauNetteteTransf=" + getNiveauNetteteTransf() + "\n"; OutputStreamWriter oswFichierHisto = null; try { oswFichierHisto = new OutputStreamWriter(new FileOutputStream(fileFichPreferences), "UTF-8"); } catch (IOException ex) { Logger.getLogger(ConfigDialogController.class.getName()).log(Level.SEVERE, null, ex); } BufferedWriter bwFichierHisto = new BufferedWriter(oswFichierHisto); try { bwFichierHisto.write(strContenuFichier); } catch (IOException ex) { Logger.getLogger(ConfigDialogController.class.getName()).log(Level.SEVERE, null, ex); } try { bwFichierHisto.close(); } catch (IOException ex) { Logger.getLogger(ConfigDialogController.class.getName()).log(Level.SEVERE, null, ex); } } /** * * @param stPrimaryStage * @throws Exception Exceptions */ @Override public void start(Stage stPrimaryStage) throws Exception { if (isLinux()) { stPrimaryStage.setFullScreen(true); } File fileRep = new File(""); setbInternet(netIsAvailable()); setStrCurrentDir(fileRep.getAbsolutePath()); setStrRepertAppli(fileRep.getAbsolutePath()); fileRepertConfig = new File(getStrRepertAppli() + File.separator + "configPV"); rbLocalisation = ResourceBundle.getBundle("editeurpanovisu.i18n.PanoVisu", getLocale()); Package pack = Package.getPackage("editeurpanovisu"); strNumVersion = pack.getImplementationVersion() + "-b" + rbLocalisation.getString("build.numero").replace(" ", "").replace("", ""); lisPreferences(); setStPrincipal(stPrimaryStage); stPrimaryStage.setResizable(false); getStPrincipal().setResizable(true); getStPrincipal().setAlwaysOnTop(false); getStPrincipal().setTitle("PanoVisu v" + strNumVersion.split("-")[0]); stPrimaryStage.setMaximized(true); stPrimaryStage.setAlwaysOnTop(false); Rectangle2D tailleEcran = Screen.getPrimary().getBounds(); int iHauteur; if (isMac()) { iHauteur = (int) tailleEcran.getHeight() - 60; } else { iHauteur = (int) tailleEcran.getHeight() - 20; } int iLargeur = (int) tailleEcran.getWidth() - 2; largeurMax = tailleEcran.getWidth() - 450.0d; creeEnvironnement(stPrimaryStage, iLargeur, iHauteur); File fileRepertTempFile = new File(getStrRepertAppli() + File.separator + "temp"); setStrRepertTemp(fileRepertTempFile.getAbsolutePath()); if (!fileRepertTempFile.exists()) { fileRepertTempFile.mkdirs(); } else { deleteDirectory(getStrRepertTemp()); } String strExtTemp = strGenereChaineAleatoire(20); setStrRepertTemp(getStrRepertTemp() + File.separator + "temp" + strExtTemp); fileRepertTempFile = new File(getStrRepertTemp()); fileRepertTempFile.mkdirs(); installeEvenements(); projetsNouveau(); stPrimaryStage.setOnCloseRequest((WindowEvent event) -> { try { sauvePreferences(); } catch (IOException ex) { Logger.getLogger(EditeurPanovisu.class.getName()).log(Level.SEVERE, null, ex); } ButtonType reponse = null; ButtonType buttonTypeOui = new ButtonType(rbLocalisation.getString("main.oui")); ButtonType buttonTypeNon = new ButtonType(rbLocalisation.getString("main.non")); ButtonType buttonTypeAnnule = new ButtonType(rbLocalisation.getString("main.annuler")); if (!isbDejaSauve()) { Alert alert = new Alert(AlertType.CONFIRMATION); alert.setTitle(rbLocalisation.getString("main.dialog.quitterApplication")); alert.setHeaderText(null); alert.setContentText(rbLocalisation.getString("main.dialog.chargeProjetMessage")); alert.getButtonTypes().clear(); alert.getButtonTypes().setAll(buttonTypeOui, buttonTypeNon, buttonTypeAnnule); Optional<ButtonType> actReponse = alert.showAndWait(); reponse = actReponse.get(); } if (reponse == buttonTypeOui) { try { projetSauve(); } catch (IOException ex) { Logger.getLogger(EditeurPanovisu.class.getName()).log(Level.SEVERE, null, ex); } } if ((reponse == buttonTypeOui) || (reponse == buttonTypeNon) || (reponse == null)) { try { sauveHistoFichiers(); } catch (IOException ex) { Logger.getLogger(EditeurPanovisu.class.getName()).log(Level.SEVERE, null, ex); } deleteDirectory(getStrRepertTemp()); File fileTemp = new File(getStrRepertTemp()); fileTemp.delete(); } else { event.consume(); } }); } /** * @param args the command line arguments */ public static void main(String[] args) { System.setProperty("file.encoding", "UTF-8"); setStrSystemeExploitation(System.getProperty("os.name")); launch(args); } }