4 * Created on 16. Januar 2007, 15:36
9 import java.io.IOException;
10 import java.util.Vector;
11 import javax.swing.JFileChooser;
12 import javax.swing.table.AbstractTableModel;
18 public class JFrameMain extends javax.swing.JFrame {
20 private Configuration config;
22 /** Creates new form JFrameMain */
23 public JFrameMain(Configuration c) {
30 private void updateForms() {
31 jTextFieldInputFile.setText(config.objfile);
32 jTextFieldOutputFile.setText(config.mapfile);
33 jTextFieldScale.setText(Double.toString(config.scale));
34 jTextFieldTextureScale.setText(Double.toString(config.texture_scale));
35 jTextFieldThickness.setText(Double.toString(config.brush_thickness));
36 jCheckDetail.setSelected(config.detail);
38 jTableTexturing.setModel(new AutoTexturingTableModel(config.autotexturing));
41 jTableRelations.setDefaultEditor(Class.forName("businesslearner.Letter"), new DefaultCellEditor(comboBoxLetters));
42 jTableRelations.setDefaultEditor("".getClass(), new DefaultCellEditor(comboBoxRelations));
43 } catch (ClassNotFoundException ex) {
52 /** This method is called from within the constructor to
53 * initialize the form.
54 * WARNING: Do NOT modify this code. The content of this method is
55 * always regenerated by the Form Editor.
57 // <editor-fold defaultstate="collapsed" desc=" Generated Code ">//GEN-BEGIN:initComponents
58 private void initComponents() {
59 jPanel1 = new javax.swing.JPanel();
60 jTextFieldInputFile = new javax.swing.JTextField();
61 jButtonSelectInputFile = new javax.swing.JButton();
62 jPanel2 = new javax.swing.JPanel();
63 jTextFieldOutputFile = new javax.swing.JTextField();
64 jButtonSelectOutputFile = new javax.swing.JButton();
65 jPanel3 = new javax.swing.JPanel();
66 jLabel1 = new javax.swing.JLabel();
67 jLabel2 = new javax.swing.JLabel();
68 jCheckDetail = new javax.swing.JCheckBox();
69 jTextFieldThickness = new javax.swing.JTextField();
70 jTextFieldScale = new javax.swing.JTextField();
71 jLabel3 = new javax.swing.JLabel();
72 jTextFieldTextureScale = new javax.swing.JTextField();
73 jButtonStart = new javax.swing.JButton();
74 jPanel4 = new javax.swing.JPanel();
75 jScrollPane1 = new javax.swing.JScrollPane();
76 jTableTexturing = new javax.swing.JTable();
77 jButtonAdd = new javax.swing.JButton();
78 jButtonDelte = new javax.swing.JButton();
80 setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
82 jPanel1.setBorder(javax.swing.BorderFactory.createTitledBorder("Input File (.obj)"));
83 jTextFieldInputFile.addFocusListener(new java.awt.event.FocusAdapter() {
84 public void focusLost(java.awt.event.FocusEvent evt) {
85 jTextFieldInputFileFocusLost(evt);
89 jButtonSelectInputFile.setText("Select file");
90 jButtonSelectInputFile.addActionListener(new java.awt.event.ActionListener() {
91 public void actionPerformed(java.awt.event.ActionEvent evt) {
92 jButtonSelectInputFileActionPerformed(evt);
96 org.jdesktop.layout.GroupLayout jPanel1Layout = new org.jdesktop.layout.GroupLayout(jPanel1);
97 jPanel1.setLayout(jPanel1Layout);
98 jPanel1Layout.setHorizontalGroup(
99 jPanel1Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
100 .add(org.jdesktop.layout.GroupLayout.TRAILING, jPanel1Layout.createSequentialGroup()
102 .add(jTextFieldInputFile, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, 477, Short.MAX_VALUE)
103 .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
104 .add(jButtonSelectInputFile)
107 jPanel1Layout.setVerticalGroup(
108 jPanel1Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
109 .add(jPanel1Layout.createSequentialGroup()
110 .add(jPanel1Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
111 .add(jButtonSelectInputFile)
112 .add(jTextFieldInputFile, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE))
113 .addContainerGap(org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
116 jPanel2.setBorder(javax.swing.BorderFactory.createTitledBorder("Output File (.map)"));
117 jTextFieldOutputFile.addFocusListener(new java.awt.event.FocusAdapter() {
118 public void focusLost(java.awt.event.FocusEvent evt) {
119 jTextFieldOutputFileFocusLost(evt);
123 jButtonSelectOutputFile.setText("Select file");
124 jButtonSelectOutputFile.addActionListener(new java.awt.event.ActionListener() {
125 public void actionPerformed(java.awt.event.ActionEvent evt) {
126 jButtonSelectOutputFileActionPerformed(evt);
130 org.jdesktop.layout.GroupLayout jPanel2Layout = new org.jdesktop.layout.GroupLayout(jPanel2);
131 jPanel2.setLayout(jPanel2Layout);
132 jPanel2Layout.setHorizontalGroup(
133 jPanel2Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
134 .add(org.jdesktop.layout.GroupLayout.TRAILING, jPanel2Layout.createSequentialGroup()
136 .add(jTextFieldOutputFile, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, 477, Short.MAX_VALUE)
137 .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
138 .add(jButtonSelectOutputFile)
141 jPanel2Layout.setVerticalGroup(
142 jPanel2Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
143 .add(jPanel2Layout.createSequentialGroup()
144 .add(jPanel2Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
145 .add(jTextFieldOutputFile, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
146 .add(jButtonSelectOutputFile))
147 .addContainerGap(org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
150 jPanel3.setBorder(javax.swing.BorderFactory.createTitledBorder("Configuration"));
151 jLabel1.setText("Brush thickness:");
153 jLabel2.setText("Model scale:");
155 jCheckDetail.setText("Make generated brushes detail");
156 jCheckDetail.setBorder(javax.swing.BorderFactory.createEmptyBorder(0, 0, 0, 0));
157 jCheckDetail.setMargin(new java.awt.Insets(0, 0, 0, 0));
158 jCheckDetail.addActionListener(new java.awt.event.ActionListener() {
159 public void actionPerformed(java.awt.event.ActionEvent evt) {
160 jCheckDetailActionPerformed(evt);
164 jTextFieldThickness.addFocusListener(new java.awt.event.FocusAdapter() {
165 public void focusLost(java.awt.event.FocusEvent evt) {
166 jTextFieldThicknessFocusLost(evt);
170 jTextFieldScale.addFocusListener(new java.awt.event.FocusAdapter() {
171 public void focusLost(java.awt.event.FocusEvent evt) {
172 jTextFieldScaleFocusLost(evt);
176 jLabel3.setText("Texture scale:");
178 jTextFieldTextureScale.addFocusListener(new java.awt.event.FocusAdapter() {
179 public void focusLost(java.awt.event.FocusEvent evt) {
180 jTextFieldTextureScaleFocusLost(evt);
184 org.jdesktop.layout.GroupLayout jPanel3Layout = new org.jdesktop.layout.GroupLayout(jPanel3);
185 jPanel3.setLayout(jPanel3Layout);
186 jPanel3Layout.setHorizontalGroup(
187 jPanel3Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
188 .add(jPanel3Layout.createSequentialGroup()
190 .add(jPanel3Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
191 .add(jPanel3Layout.createSequentialGroup()
192 .add(jPanel3Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.TRAILING)
195 .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
196 .add(jPanel3Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING, false)
197 .add(jTextFieldScale)
198 .add(jTextFieldThickness, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, 56, Short.MAX_VALUE))
202 .add(jTextFieldTextureScale, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 58, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE))
204 .addContainerGap(234, Short.MAX_VALUE))
206 jPanel3Layout.setVerticalGroup(
207 jPanel3Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
208 .add(jPanel3Layout.createSequentialGroup()
209 .add(jPanel3Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.BASELINE)
211 .add(jTextFieldThickness, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
213 .add(jTextFieldTextureScale, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE))
214 .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
215 .add(jPanel3Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.BASELINE)
217 .add(jTextFieldScale, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE))
218 .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED, 19, Short.MAX_VALUE)
223 jButtonStart.setText("Start conversion");
224 jButtonStart.addActionListener(new java.awt.event.ActionListener() {
225 public void actionPerformed(java.awt.event.ActionEvent evt) {
226 jButtonStartActionPerformed(evt);
230 jPanel4.setBorder(javax.swing.BorderFactory.createTitledBorder("Auto-texturing"));
231 jTableTexturing.setModel(new javax.swing.table.DefaultTableModel(
233 {null, null, null, null},
234 {null, null, null, null},
235 {null, null, null, null},
236 {null, null, null, null}
239 "Title 1", "Title 2", "Title 3", "Title 4"
242 jScrollPane1.setViewportView(jTableTexturing);
244 jButtonAdd.setText("New");
245 jButtonAdd.addActionListener(new java.awt.event.ActionListener() {
246 public void actionPerformed(java.awt.event.ActionEvent evt) {
247 jButtonAddActionPerformed(evt);
251 jButtonDelte.setText("Remove");
252 jButtonDelte.addActionListener(new java.awt.event.ActionListener() {
253 public void actionPerformed(java.awt.event.ActionEvent evt) {
254 jButtonDelteActionPerformed(evt);
258 org.jdesktop.layout.GroupLayout jPanel4Layout = new org.jdesktop.layout.GroupLayout(jPanel4);
259 jPanel4.setLayout(jPanel4Layout);
260 jPanel4Layout.setHorizontalGroup(
261 jPanel4Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
262 .add(org.jdesktop.layout.GroupLayout.TRAILING, jPanel4Layout.createSequentialGroup()
264 .add(jScrollPane1, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, 473, Short.MAX_VALUE)
265 .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
266 .add(jPanel4Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.TRAILING, false)
267 .add(jButtonAdd, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
268 .add(jButtonDelte, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, 104, Short.MAX_VALUE))
271 jPanel4Layout.setVerticalGroup(
272 jPanel4Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
273 .add(jPanel4Layout.createSequentialGroup()
274 .add(jPanel4Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
275 .add(jPanel4Layout.createSequentialGroup()
278 .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
280 .add(org.jdesktop.layout.GroupLayout.TRAILING, jScrollPane1, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, 167, Short.MAX_VALUE))
284 org.jdesktop.layout.GroupLayout layout = new org.jdesktop.layout.GroupLayout(getContentPane());
285 getContentPane().setLayout(layout);
286 layout.setHorizontalGroup(
287 layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
288 .add(org.jdesktop.layout.GroupLayout.TRAILING, layout.createSequentialGroup()
290 .add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.TRAILING)
291 .add(org.jdesktop.layout.GroupLayout.LEADING, jPanel4, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
292 .add(org.jdesktop.layout.GroupLayout.LEADING, jPanel3, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
293 .add(org.jdesktop.layout.GroupLayout.LEADING, jPanel2, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
294 .add(org.jdesktop.layout.GroupLayout.LEADING, jPanel1, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
298 layout.setVerticalGroup(
299 layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
300 .add(layout.createSequentialGroup()
302 .add(jPanel1, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
303 .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
304 .add(jPanel2, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
305 .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
306 .add(jPanel3, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
307 .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
308 .add(jPanel4, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
309 .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
314 }// </editor-fold>//GEN-END:initComponents
316 private void jButtonDelteActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButtonDelteActionPerformed
317 int index = jTableTexturing.getSelectedRow();
318 if(index < 0) return;
319 config.autotexturing.remove(index);
321 }//GEN-LAST:event_jButtonDelteActionPerformed
323 private void jButtonAddActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButtonAddActionPerformed
324 config.autotexturing.add(new AutoTexturingEntry());
326 }//GEN-LAST:event_jButtonAddActionPerformed
328 private void jTextFieldOutputFileFocusLost(java.awt.event.FocusEvent evt) {//GEN-FIRST:event_jTextFieldOutputFileFocusLost
329 config.mapfile = jTextFieldOutputFile.getText();
331 }//GEN-LAST:event_jTextFieldOutputFileFocusLost
333 private void jTextFieldInputFileFocusLost(java.awt.event.FocusEvent evt) {//GEN-FIRST:event_jTextFieldInputFileFocusLost
334 config.objfile = jTextFieldInputFile.getText();
336 }//GEN-LAST:event_jTextFieldInputFileFocusLost
338 private void jTextFieldTextureScaleFocusLost(java.awt.event.FocusEvent evt) {//GEN-FIRST:event_jTextFieldTextureScaleFocusLost
340 config.texture_scale = Double.parseDouble(jTextFieldTextureScale.getText());
341 } catch(Exception e) {}
343 }//GEN-LAST:event_jTextFieldTextureScaleFocusLost
345 private void jButtonSelectOutputFileActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButtonSelectOutputFileActionPerformed
346 JFileChooser fc = new JFileChooser();
347 int returnval = fc.showSaveDialog(this);
348 if(returnval == JFileChooser.APPROVE_OPTION) {
349 config.mapfile = fc.getSelectedFile().getPath();
352 }//GEN-LAST:event_jButtonSelectOutputFileActionPerformed
354 private void jButtonSelectInputFileActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButtonSelectInputFileActionPerformed
355 JFileChooser fc = new JFileChooser();
356 int returnval = fc.showOpenDialog(this);
357 if(returnval == JFileChooser.APPROVE_OPTION) {
358 config.objfile = fc.getSelectedFile().getPath();
361 }//GEN-LAST:event_jButtonSelectInputFileActionPerformed
363 private void jButtonStartActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButtonStartActionPerformed
364 config.objfile = jTextFieldInputFile.getText();
365 config.mapfile = jTextFieldOutputFile.getText();
367 ObjToMap converter = new ObjToMap(config);
369 converter.parseOBJ();
370 converter.writeMap();
371 } catch(Exception e) {
374 }//GEN-LAST:event_jButtonStartActionPerformed
376 private void jCheckDetailActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jCheckDetailActionPerformed
377 config.detail = jCheckDetail.isSelected();
379 }//GEN-LAST:event_jCheckDetailActionPerformed
381 private void jTextFieldScaleFocusLost(java.awt.event.FocusEvent evt) {//GEN-FIRST:event_jTextFieldScaleFocusLost
383 config.scale = Double.parseDouble(jTextFieldScale.getText());
384 } catch(Exception e) {}
386 }//GEN-LAST:event_jTextFieldScaleFocusLost
388 private void jTextFieldThicknessFocusLost(java.awt.event.FocusEvent evt) {//GEN-FIRST:event_jTextFieldThicknessFocusLost
390 config.brush_thickness = Double.parseDouble(jTextFieldThickness.getText());
391 } catch(Exception e) {}
393 }//GEN-LAST:event_jTextFieldThicknessFocusLost
396 // Variables declaration - do not modify//GEN-BEGIN:variables
397 private javax.swing.JButton jButtonAdd;
398 private javax.swing.JButton jButtonDelte;
399 private javax.swing.JButton jButtonSelectInputFile;
400 private javax.swing.JButton jButtonSelectOutputFile;
401 private javax.swing.JButton jButtonStart;
402 private javax.swing.JCheckBox jCheckDetail;
403 private javax.swing.JLabel jLabel1;
404 private javax.swing.JLabel jLabel2;
405 private javax.swing.JLabel jLabel3;
406 private javax.swing.JPanel jPanel1;
407 private javax.swing.JPanel jPanel2;
408 private javax.swing.JPanel jPanel3;
409 private javax.swing.JPanel jPanel4;
410 private javax.swing.JScrollPane jScrollPane1;
411 private javax.swing.JTable jTableTexturing;
412 private javax.swing.JTextField jTextFieldInputFile;
413 private javax.swing.JTextField jTextFieldOutputFile;
414 private javax.swing.JTextField jTextFieldScale;
415 private javax.swing.JTextField jTextFieldTextureScale;
416 private javax.swing.JTextField jTextFieldThickness;
417 // End of variables declaration//GEN-END:variables
419 private class AutoTexturingTableModel extends AbstractTableModel {
423 public AutoTexturingTableModel(Vector t) {
427 private String[] columnNames = {"Starting angle (against xy plane)","Texture name"};
430 public int getColumnCount() {
434 public int getRowCount() {
435 return texturing.size();
438 public String getColumnName(int col) {
439 return columnNames[col];
442 public Object getValueAt(int row, int col) {
443 if(row < 0 | row > texturing.size()) return null;
445 AutoTexturingEntry e = (AutoTexturingEntry)texturing.get(row);
447 return new Double(e.angle);
449 return e.texturename;
452 public Class getColumnClass(int c) {
453 return getValueAt(0, c).getClass();
456 public boolean isCellEditable(int row, int col) {
460 public void setValueAt(Object value, int row, int col) {
462 AutoTexturingEntry e = (AutoTexturingEntry)texturing.get(row);
465 Double angle = (Double)value;
466 e.angle = angle.doubleValue();
468 e.texturename = (String)value;
471 fireTableCellUpdated(row, col);