]> icculus.org git repositories - divverent/nexuiz.git/blob - tools/ImgToMap/src/imgtomap/JFrameMain.java
autogenerate skybox, fill dropped blocks with full-height sky (first step to autogene...
[divverent/nexuiz.git] / tools / ImgToMap / src / imgtomap / JFrameMain.java
1 /*
2  * JFrameMain.java
3  *
4  * Created on 17. Mai 2008, 15:02
5  */
6
7 package imgtomap;
8
9 import java.io.File;
10 import javax.swing.JFileChooser;
11 import javax.swing.JOptionPane;
12
13 /**
14  *
15  * @author  maik
16  */
17 public class JFrameMain extends javax.swing.JFrame {
18
19     /** Creates new form JFrameMain */
20     public JFrameMain() {
21         initComponents();
22         String testinput = "/mnt/data/nexuizsvn/nexuiz/trunk/tools/ImgToMap/test1.png";
23         String testoutput = "/tmp/test.map";
24         
25         if(new File(testinput).exists()) {
26             jTextFieldInput.setText(testinput);
27             jTextFieldOutput.setText(testoutput);
28         }
29         
30         enableSkyPanel(jCheckBoxSky.isSelected());
31     }
32
33     /** This method is called from within the constructor to
34      * initialize the form.
35      * WARNING: Do NOT modify this code. The content of this method is
36      * always regenerated by the Form Editor.
37      */
38     @SuppressWarnings("unchecked")
39     // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
40     private void initComponents() {
41
42         jPanel1 = new javax.swing.JPanel();
43         jTextFieldInput = new javax.swing.JTextField();
44         jButtonInput = new javax.swing.JButton();
45         jTextFieldOutput = new javax.swing.JTextField();
46         jButtonOutput = new javax.swing.JButton();
47         jButtonOK = new javax.swing.JButton();
48         jPanel2 = new javax.swing.JPanel();
49         jCheckBoxDetail = new javax.swing.JCheckBox();
50         jTextFieldTexture = new javax.swing.JTextField();
51         jLabel3 = new javax.swing.JLabel();
52         jSpinnerUnits = new javax.swing.JSpinner();
53         jSpinnerHeight = new javax.swing.JSpinner();
54         jSpinnerTextureScale = new javax.swing.JSpinner();
55         jLabel4 = new javax.swing.JLabel();
56         jLabel2 = new javax.swing.JLabel();
57         jLabel1 = new javax.swing.JLabel();
58         jPanelSky = new javax.swing.JPanel();
59         jCheckBoxSky = new javax.swing.JCheckBox();
60         jLabel5 = new javax.swing.JLabel();
61         jSpinnerSkyHeight = new javax.swing.JSpinner();
62         jCheckBoxSkyFill = new javax.swing.JCheckBox();
63         jLabel6 = new javax.swing.JLabel();
64         jTextFieldSkyTexture = new javax.swing.JTextField();
65
66         setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
67         setTitle("ImgToMap");
68
69         jPanel1.setBorder(javax.swing.BorderFactory.createTitledBorder("Files"));
70
71         jButtonInput.setText("Select input file");
72         jButtonInput.addActionListener(new java.awt.event.ActionListener() {
73             public void actionPerformed(java.awt.event.ActionEvent evt) {
74                 jButtonInputActionPerformed(evt);
75             }
76         });
77
78         jButtonOutput.setText("Select output file");
79         jButtonOutput.addActionListener(new java.awt.event.ActionListener() {
80             public void actionPerformed(java.awt.event.ActionEvent evt) {
81                 jButtonOutputActionPerformed(evt);
82             }
83         });
84
85         javax.swing.GroupLayout jPanel1Layout = new javax.swing.GroupLayout(jPanel1);
86         jPanel1.setLayout(jPanel1Layout);
87         jPanel1Layout.setHorizontalGroup(
88             jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
89             .addGroup(jPanel1Layout.createSequentialGroup()
90                 .addContainerGap()
91                 .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
92                     .addComponent(jTextFieldOutput, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, 278, Short.MAX_VALUE)
93                     .addComponent(jTextFieldInput, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, 278, Short.MAX_VALUE))
94                 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
95                 .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
96                     .addComponent(jButtonInput, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.DEFAULT_SIZE, 120, Short.MAX_VALUE)
97                     .addComponent(jButtonOutput, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
98                 .addContainerGap())
99         );
100         jPanel1Layout.setVerticalGroup(
101             jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
102             .addGroup(jPanel1Layout.createSequentialGroup()
103                 .addContainerGap()
104                 .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
105                     .addComponent(jButtonInput)
106                     .addComponent(jTextFieldInput, javax.swing.GroupLayout.PREFERRED_SIZE, 27, javax.swing.GroupLayout.PREFERRED_SIZE))
107                 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
108                 .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
109                     .addComponent(jButtonOutput)
110                     .addComponent(jTextFieldOutput, javax.swing.GroupLayout.PREFERRED_SIZE, 26, javax.swing.GroupLayout.PREFERRED_SIZE))
111                 .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
112         );
113
114         jButtonOK.setText("Start conversion!");
115         jButtonOK.addActionListener(new java.awt.event.ActionListener() {
116             public void actionPerformed(java.awt.event.ActionEvent evt) {
117                 jButtonOKActionPerformed(evt);
118             }
119         });
120
121         jPanel2.setBorder(javax.swing.BorderFactory.createTitledBorder("Terrain configuration"));
122
123         jCheckBoxDetail.setSelected(true);
124         jCheckBoxDetail.setText("make detail");
125
126         jTextFieldTexture.setText("terrain/terrain1");
127
128         jLabel3.setText("Cover terrain surface with texture:");
129
130         jSpinnerUnits.setModel(new javax.swing.SpinnerNumberModel(256, 1, 2048, 1));
131
132         jSpinnerHeight.setModel(new javax.swing.SpinnerNumberModel(1024, 256, 16384, 1));
133
134         jSpinnerTextureScale.setModel(new javax.swing.SpinnerNumberModel(0.5d, 0.25d, 16.0d, 0.25d));
135
136         jLabel4.setText("Texture scale:");
137
138         jLabel2.setText("Height for white:");
139
140         jLabel1.setText("Units per pixel:");
141
142         javax.swing.GroupLayout jPanel2Layout = new javax.swing.GroupLayout(jPanel2);
143         jPanel2.setLayout(jPanel2Layout);
144         jPanel2Layout.setHorizontalGroup(
145             jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
146             .addGroup(jPanel2Layout.createSequentialGroup()
147                 .addContainerGap()
148                 .addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
149                     .addGroup(jPanel2Layout.createSequentialGroup()
150                         .addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
151                             .addComponent(jLabel1)
152                             .addComponent(jLabel2))
153                         .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
154                         .addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
155                             .addComponent(jSpinnerHeight, 0, 0, Short.MAX_VALUE)
156                             .addComponent(jSpinnerUnits))
157                         .addGap(18, 18, 18)
158                         .addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
159                             .addGroup(jPanel2Layout.createSequentialGroup()
160                                 .addComponent(jLabel4)
161                                 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
162                                 .addComponent(jSpinnerTextureScale))
163                             .addComponent(jCheckBoxDetail)))
164                     .addComponent(jLabel3)
165                     .addComponent(jTextFieldTexture, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.DEFAULT_SIZE, 404, Short.MAX_VALUE))
166                 .addContainerGap())
167         );
168         jPanel2Layout.setVerticalGroup(
169             jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
170             .addGroup(jPanel2Layout.createSequentialGroup()
171                 .addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
172                     .addComponent(jSpinnerUnits, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
173                     .addComponent(jLabel1)
174                     .addComponent(jLabel4)
175                     .addComponent(jSpinnerTextureScale, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
176                 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
177                 .addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
178                     .addComponent(jLabel2)
179                     .addComponent(jSpinnerHeight, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
180                     .addComponent(jCheckBoxDetail))
181                 .addGap(18, 18, 18)
182                 .addComponent(jLabel3)
183                 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
184                 .addComponent(jTextFieldTexture, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
185                 .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
186         );
187
188         jPanelSky.setBorder(javax.swing.BorderFactory.createTitledBorder("Sky configuration"));
189
190         jCheckBoxSky.setSelected(true);
191         jCheckBoxSky.setText("generate a skybox");
192         jCheckBoxSky.addActionListener(new java.awt.event.ActionListener() {
193             public void actionPerformed(java.awt.event.ActionEvent evt) {
194                 jCheckBoxSkyActionPerformed(evt);
195             }
196         });
197
198         jLabel5.setText("Sky height:");
199
200         jSpinnerSkyHeight.setModel(new javax.swing.SpinnerNumberModel(Integer.valueOf(1152), Integer.valueOf(256), null, Integer.valueOf(1)));
201
202         jCheckBoxSkyFill.setSelected(true);
203         jCheckBoxSkyFill.setText("fill alpha-gaps with sky");
204
205         jLabel6.setText("Sky texture:");
206
207         jTextFieldSkyTexture.setText("skies/sky1");
208
209         javax.swing.GroupLayout jPanelSkyLayout = new javax.swing.GroupLayout(jPanelSky);
210         jPanelSky.setLayout(jPanelSkyLayout);
211         jPanelSkyLayout.setHorizontalGroup(
212             jPanelSkyLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
213             .addGroup(jPanelSkyLayout.createSequentialGroup()
214                 .addContainerGap()
215                 .addGroup(jPanelSkyLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
216                     .addComponent(jTextFieldSkyTexture, javax.swing.GroupLayout.DEFAULT_SIZE, 404, Short.MAX_VALUE)
217                     .addGroup(jPanelSkyLayout.createSequentialGroup()
218                         .addComponent(jCheckBoxSky)
219                         .addGap(18, 18, 18)
220                         .addComponent(jCheckBoxSkyFill))
221                     .addGroup(jPanelSkyLayout.createSequentialGroup()
222                         .addComponent(jLabel5)
223                         .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
224                         .addComponent(jSpinnerSkyHeight, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
225                     .addComponent(jLabel6))
226                 .addContainerGap())
227         );
228         jPanelSkyLayout.setVerticalGroup(
229             jPanelSkyLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
230             .addGroup(jPanelSkyLayout.createSequentialGroup()
231                 .addGroup(jPanelSkyLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
232                     .addComponent(jCheckBoxSky)
233                     .addComponent(jCheckBoxSkyFill))
234                 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
235                 .addGroup(jPanelSkyLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
236                     .addComponent(jLabel5)
237                     .addComponent(jSpinnerSkyHeight, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
238                 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
239                 .addComponent(jLabel6)
240                 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
241                 .addComponent(jTextFieldSkyTexture, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
242                 .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
243         );
244
245         javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
246         getContentPane().setLayout(layout);
247         layout.setHorizontalGroup(
248             layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
249             .addGroup(layout.createSequentialGroup()
250                 .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
251                     .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
252                         .addGroup(javax.swing.GroupLayout.Alignment.LEADING, layout.createSequentialGroup()
253                             .addContainerGap()
254                             .addComponent(jPanelSky, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
255                         .addGroup(javax.swing.GroupLayout.Alignment.LEADING, layout.createSequentialGroup()
256                             .addContainerGap()
257                             .addComponent(jPanel2, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
258                         .addGroup(javax.swing.GroupLayout.Alignment.LEADING, layout.createSequentialGroup()
259                             .addContainerGap()
260                             .addComponent(jPanel1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)))
261                     .addGroup(layout.createSequentialGroup()
262                         .addContainerGap()
263                         .addComponent(jButtonOK)))
264                 .addContainerGap())
265         );
266         layout.setVerticalGroup(
267             layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
268             .addGroup(layout.createSequentialGroup()
269                 .addContainerGap()
270                 .addComponent(jPanel1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
271                 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
272                 .addComponent(jPanel2, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
273                 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
274                 .addComponent(jPanelSky, javax.swing.GroupLayout.PREFERRED_SIZE, 157, javax.swing.GroupLayout.PREFERRED_SIZE)
275                 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
276                 .addComponent(jButtonOK)
277                 .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
278         );
279
280         pack();
281     }// </editor-fold>//GEN-END:initComponents
282
283 private void jButtonInputActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButtonInputActionPerformed
284     JFileChooser fc = new JFileChooser();
285     int ret = fc.showOpenDialog(this);
286     
287     if(ret == fc.APPROVE_OPTION) {
288         File f = fc.getSelectedFile();
289         if(f.exists()) {
290             jTextFieldInput.setText(f.getAbsolutePath());
291         }
292     }
293 }//GEN-LAST:event_jButtonInputActionPerformed
294
295 private void jButtonOKActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButtonOKActionPerformed
296     this.setVisible(false);
297     Parameters p = new Parameters();
298     p.infile = jTextFieldInput.getText();
299     p.outfile = jTextFieldOutput.getText();
300     p.texture = jTextFieldTexture.getText();
301     p.skytexture = jTextFieldSkyTexture.getText();
302     p.pixelsize = (Integer)jSpinnerUnits.getValue();
303     p.height = (Integer)jSpinnerHeight.getValue();
304     p.sky = jCheckBoxSky.isSelected();
305     p.skyfill = jCheckBoxSkyFill.isSelected();
306     p.skyheight = (Integer)jSpinnerSkyHeight.getValue();
307     p.texturescale = (Double)jSpinnerTextureScale.getValue();
308     p.detail = jCheckBoxDetail.isSelected();
309     int ret = new MapWriter().writeMap(p);
310     if(ret == 0) {
311         JOptionPane.showMessageDialog(this, "Map successfully generated!", "Success!", JOptionPane.INFORMATION_MESSAGE);
312     } else {
313         JOptionPane.showMessageDialog(this, "Error occured! Oh no!", "Error!", JOptionPane.ERROR_MESSAGE);
314     }
315     
316     
317     this.setVisible(true);
318 }//GEN-LAST:event_jButtonOKActionPerformed
319
320 private void jButtonOutputActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButtonOutputActionPerformed
321     JFileChooser fc = new JFileChooser();
322     int ret = fc.showOpenDialog(this);
323     
324     if(ret == fc.APPROVE_OPTION) {
325         File f = fc.getSelectedFile();
326         jTextFieldOutput.setText(f.getAbsolutePath());
327     }
328 }//GEN-LAST:event_jButtonOutputActionPerformed
329
330 private void jCheckBoxSkyActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jCheckBoxSkyActionPerformed
331     enableSkyPanel(jCheckBoxSky.isSelected());
332 }//GEN-LAST:event_jCheckBoxSkyActionPerformed
333
334 private void enableSkyPanel(boolean b) {
335     jCheckBoxSkyFill.setEnabled(b);
336     jSpinnerSkyHeight.setEnabled(b);
337     jTextFieldSkyTexture.setEnabled(b);
338 }
339
340     /**
341     * @param args the command line arguments
342     */
343     public static void main(String args[]) {
344         java.awt.EventQueue.invokeLater(new Runnable() {
345             public void run() {
346                 new JFrameMain().setVisible(true);
347             }
348         });
349     }
350
351     // Variables declaration - do not modify//GEN-BEGIN:variables
352     private javax.swing.JButton jButtonInput;
353     private javax.swing.JButton jButtonOK;
354     private javax.swing.JButton jButtonOutput;
355     private javax.swing.JCheckBox jCheckBoxDetail;
356     private javax.swing.JCheckBox jCheckBoxSky;
357     private javax.swing.JCheckBox jCheckBoxSkyFill;
358     private javax.swing.JLabel jLabel1;
359     private javax.swing.JLabel jLabel2;
360     private javax.swing.JLabel jLabel3;
361     private javax.swing.JLabel jLabel4;
362     private javax.swing.JLabel jLabel5;
363     private javax.swing.JLabel jLabel6;
364     private javax.swing.JPanel jPanel1;
365     private javax.swing.JPanel jPanel2;
366     private javax.swing.JPanel jPanelSky;
367     private javax.swing.JSpinner jSpinnerHeight;
368     private javax.swing.JSpinner jSpinnerSkyHeight;
369     private javax.swing.JSpinner jSpinnerTextureScale;
370     private javax.swing.JSpinner jSpinnerUnits;
371     private javax.swing.JTextField jTextFieldInput;
372     private javax.swing.JTextField jTextFieldOutput;
373     private javax.swing.JTextField jTextFieldSkyTexture;
374     private javax.swing.JTextField jTextFieldTexture;
375     // End of variables declaration//GEN-END:variables
376
377 }