protected void initializeTexture(DrawContext dc) { Texture iconTexture = dc.getTextureCache().getTexture(this.getIconFilePath()); if (iconTexture != null) return; try { InputStream iconStream = this.getClass().getResourceAsStream("/" + this.getIconFilePath()); if (iconStream == null) { File iconFile = new File(this.iconFilePath); if (iconFile.exists()) { iconStream = new FileInputStream(iconFile); } } iconTexture = TextureIO.newTexture(iconStream, false, null); iconTexture.bind(); this.iconWidth = iconTexture.getWidth(); this.iconHeight = iconTexture.getHeight(); dc.getTextureCache().put(this.getIconFilePath(), iconTexture); } catch (IOException e) { String msg = Logging.getMessage("layers.IOExceptionDuringInitialization"); Logging.logger().severe(msg); throw new WWRuntimeException(msg, e); } GL gl = dc.getGL(); gl.glTexParameteri( GL.GL_TEXTURE_2D, GL.GL_TEXTURE_MIN_FILTER, GL.GL_LINEAR); // _MIPMAP_LINEAR); gl.glTexParameteri(GL.GL_TEXTURE_2D, GL.GL_TEXTURE_MAG_FILTER, GL.GL_LINEAR); gl.glTexParameteri(GL.GL_TEXTURE_2D, GL.GL_TEXTURE_WRAP_S, GL.GL_CLAMP_TO_EDGE); gl.glTexParameteri(GL.GL_TEXTURE_2D, GL.GL_TEXTURE_WRAP_T, GL.GL_CLAMP_TO_EDGE); // Enable texture anisotropy, improves "tilted" world map quality. int[] maxAnisotropy = new int[1]; gl.glGetIntegerv(GL.GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT, maxAnisotropy, 0); gl.glTexParameteri(GL.GL_TEXTURE_2D, GL.GL_TEXTURE_MAX_ANISOTROPY_EXT, maxAnisotropy[0]); }
/** * Resolve COLLADA references relative to the COLLADA document. If the reference is relative then * it will resolved relative to the .dae file, not the kml file. If the COLLADA document may be * contained in a KMZ archive the resources will be resolved relative to the .dae file within the * archive. Normally references in a KMZ are resolved relative to the root of the archive, but * Model references are an exception. See * https://developers.google.com/kml/documentation/kmzarchives and * https://developers.google.com/kml/documentation/kmlreference#model * * <p>{@inheritDoc}. */ public String resolveFilePath(String path) throws IOException { KMLLink link = this.model.getLink(); // Check the resource map to see if an alias is defined for this resource. String alias = this.resourceMap.get(path); if (alias != null) path = alias; // If the path is relative then resolve it relative to the COLLADA file. File f = new File(path); if (!f.isAbsolute() && link != null && link.getHref() != null) { try { URI base = new URI(null, link.getHref(), null); URI ref = new URI(null, path, null); path = base.resolve(ref).getPath(); } catch (URISyntaxException ignored) { // Ignored } } Object o = this.parent.getRoot().resolveReference(path); if (o instanceof URL || o instanceof String) return o.toString(); return null; }
// Raises the Save As dialog to have the user identify the location to save groups of things. public File determineSaveLocation(String dialogTitle, String defaultFolderName) { String defaultPath = this.getFileChooser().getCurrentDirectory().getPath(); if (!WWUtil.isEmpty(defaultPath)) defaultPath += File.separatorChar + defaultFolderName; File outFile; while (true) { this.getFileChooser().setDialogTitle(dialogTitle); this.getFileChooser().setSelectedFile(new File(defaultPath)); this.getFileChooser().setMultiSelectionEnabled(false); this.getFileChooser().setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY); int status = this.getFileChooser().showSaveDialog(this.getFrame()); if (status != JFileChooser.APPROVE_OPTION) return null; outFile = this.getFileChooser().getSelectedFile(); if (outFile == null) { this.showMessageDialog("No location selected", "No Selection", JOptionPane.ERROR_MESSAGE); continue; } break; } if (!outFile.exists()) //noinspection ResultOfMethodCallIgnored outFile.mkdir(); return outFile; }
public int showConfirmFileOverwriteDialog(File outFile) { return JOptionPane.showConfirmDialog( this.getFrame(), "Replace existing file\n" + outFile.getName() + "?", "Overwrite Existing File?", JOptionPane.YES_NO_CANCEL_OPTION); }
public void openLink(String link) { if (WWUtil.isEmpty(link)) return; try { try { // See if the link is a URL, and invoke the browser if it is URL url = new URL(link.replace(" ", "%20")); Desktop.getDesktop().browse(url.toURI()); return; } catch (MalformedURLException ignored) { // just means that the link is not a URL } // It's not a URL, so see if it's a file and invoke the desktop to open it if it is. File file = new File(link); if (file.exists()) { Desktop.getDesktop().open(new File(link)); return; } String message = "Cannot open resource. It's not a valid file or URL."; Util.getLogger().log(Level.SEVERE, message); this.showErrorDialog(null, "No Reconocido V\u00ednculo", message); } catch (UnsupportedOperationException e) { String message = "Unable to open resource.\n" + link + (e.getMessage() != null ? "\n" + e.getMessage() : ""); Util.getLogger().log(Level.SEVERE, message, e); this.showErrorDialog(e, "Error Opening Resource", message); } catch (IOException e) { String message = "I/O error while opening resource.\n" + link + (e.getMessage() != null ? ".\n" + e.getMessage() : ""); Util.getLogger().log(Level.SEVERE, message, e); this.showErrorDialog(e, "I/O Error", message); } catch (Exception e) { String message = "Error attempting to open resource.\n" + link + (e.getMessage() != null ? "\n" + e.getMessage() : ""); Util.getLogger().log(Level.SEVERE, message); this.showMessageDialog(message, "Error Opening Resource", JOptionPane.ERROR_MESSAGE); } }
public File chooseOutputFile(String defaultName, String suffixWithoutDot, String dialogTitle) { String defaultPath = this.getFileChooser().getCurrentDirectory().getPath(); if (defaultName != null && defaultName.length() > 0) defaultPath += File.separatorChar + defaultName; if (suffixWithoutDot != null && suffixWithoutDot.length() > 0) defaultPath += "." + suffixWithoutDot; if (dialogTitle == null || dialogTitle.length() == 0) dialogTitle = "Choose Save Location"; this.getFileChooser().setDialogTitle(dialogTitle); this.getFileChooser().setSelectedFile(new File(defaultPath)); this.getFileChooser().setMultiSelectionEnabled(false); while (true) { int status = this.getFileChooser().showSaveDialog(this.getFrame()); if (status != JFileChooser.APPROVE_OPTION) return null; File outFile = this.getFileChooser().getSelectedFile(); if (outFile == null) { this.showMessageDialog("No location selected", "No Selection", JOptionPane.ERROR_MESSAGE); continue; } if (suffixWithoutDot != null && suffixWithoutDot.length() > 0) outFile = Util.ensureFileSuffix(outFile, suffixWithoutDot); if (outFile.exists()) { status = this.showConfirmFileOverwriteDialog(outFile); if (status == JOptionPane.NO_OPTION) continue; if (status == JOptionPane.CANCEL_OPTION) return null; } return outFile; } }
protected void saveToFile() { if (this.fileChooser == null) { this.fileChooser = new JFileChooser(); this.fileChooser.setCurrentDirectory(new File(Configuration.getUserHomeDirectory())); } this.fileChooser.setDialogTitle("Choose Directory to Place Airspaces"); this.fileChooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY); this.fileChooser.setMultiSelectionEnabled(false); int status = this.fileChooser.showSaveDialog(null); if (status != JFileChooser.APPROVE_OPTION) return; final File dir = this.fileChooser.getSelectedFile(); if (dir == null) return; if (!dir.exists()) { //noinspection ResultOfMethodCallIgnored dir.mkdirs(); } final Iterable<AirspaceEntry> entries = this.getModel().getEntries(); Thread t = new Thread( new Runnable() { public void run() { try { java.text.DecimalFormat f = new java.text.DecimalFormat("####"); f.setMinimumIntegerDigits(4); int counter = 0; for (AirspaceEntry entry : entries) { Airspace a = entry.getAirspace(); AirspaceAttributes currentAttribs = a.getAttributes(); a.setAttributes(entry.getAttributes()); String xmlString = a.getRestorableState(); if (xmlString != null) { try { PrintWriter of = new PrintWriter( new File( dir, a.getClass().getName() + "-" + entry.getName() + "-" + f.format(counter++) + ".xml")); of.write(xmlString); of.flush(); of.close(); } catch (Exception e) { e.printStackTrace(); } } a.setAttributes(currentAttribs); } } finally { SwingUtilities.invokeLater( new Runnable() { public void run() { setEnabled(true); getApp().setCursor(null); getApp().getWwd().redraw(); } }); } } }); this.setEnabled(false); getApp().setCursor(new Cursor(Cursor.WAIT_CURSOR)); t.start(); }