]> gerrit.simantics Code Review - simantics/3d.git/blob - org.simantics.proconf.g3d/src/org/simantics/proconf/g3d/views/AppearanceEditor.java
69170787a907de325e91a1461c06b787fab3e1cd
[simantics/3d.git] / org.simantics.proconf.g3d / src / org / simantics / proconf / g3d / views / AppearanceEditor.java
1 /*******************************************************************************\r
2  * Copyright (c) 2007 VTT Technical Research Centre of Finland and others.\r
3  * All rights reserved. This program and the accompanying materials\r
4  * are made available under the terms of the Eclipse Public License v1.0\r
5  * which accompanies this distribution, and is available at\r
6  * http://www.eclipse.org/legal/epl-v10.html\r
7  *\r
8  * Contributors:\r
9  *     VTT Technical Research Centre of Finland - initial API and implementation\r
10  *******************************************************************************/\r
11 package org.simantics.proconf.g3d.views;\r
12 \r
13 import java.util.ArrayList;\r
14 import java.util.Collection;\r
15 import java.util.Iterator;\r
16 \r
17 import org.eclipse.jface.viewers.ISelection;\r
18 import org.eclipse.swt.SWT;\r
19 import org.eclipse.swt.events.MouseAdapter;\r
20 import org.eclipse.swt.events.MouseEvent;\r
21 import org.eclipse.swt.events.SelectionAdapter;\r
22 import org.eclipse.swt.events.SelectionEvent;\r
23 import org.eclipse.swt.graphics.Color;\r
24 import org.eclipse.swt.graphics.RGB;\r
25 import org.eclipse.swt.layout.GridData;\r
26 import org.eclipse.swt.layout.GridLayout;\r
27 import org.eclipse.swt.widgets.Button;\r
28 import org.eclipse.swt.widgets.ColorDialog;\r
29 import org.eclipse.swt.widgets.Composite;\r
30 import org.eclipse.swt.widgets.Slider;\r
31 import org.eclipse.swt.widgets.Text;\r
32 import org.eclipse.ui.IWorkbenchPart;\r
33 import org.simantics.db.Graph;\r
34 import org.simantics.db.GraphRequestAdapter;\r
35 import org.simantics.db.GraphRequestStatus;\r
36 import org.simantics.db.Resource;\r
37 import org.simantics.layer0.utils.IEntity;\r
38 import org.simantics.layer0.utils.StubLinkedList;\r
39 import org.simantics.layer0.utils.internal.Entity;\r
40 import org.simantics.proconf.g3d.Resources;\r
41 import org.simantics.proconf.g3d.base.AppearanceTools;\r
42 import org.simantics.proconf.g3d.stubs.Appearance;\r
43 import org.simantics.proconf.g3d.stubs.ImageTexture;\r
44 import org.simantics.proconf.g3d.stubs.Material;\r
45 import org.simantics.proconf.g3d.stubs.MultiTexture;\r
46 import org.simantics.proconf.g3d.stubs.Shader;\r
47 import org.simantics.proconf.g3d.stubs.Texture;\r
48 import org.simantics.proconf.g3d.stubs.TextureCoordinateGenerator;\r
49 import org.simantics.proconf.image.ImageUtils;\r
50 import org.simantics.proconf.image.interfaces.IImage;\r
51 import org.simantics.proconf.image.interfaces.IImageFactory;\r
52 import org.simantics.proconf.image.ui.ImageComposite;\r
53 import org.simantics.proconf.ui.utils.ResourceAdaptionUtils;\r
54 import org.simantics.utils.ErrorLogger;\r
55 \r
56 \r
57 public class AppearanceEditor extends SinglePageResourceView{\r
58 \r
59     //Appearance appearance;\r
60         Resource shapeResource;\r
61         Resource appearanceResource;\r
62         \r
63         private enum EditorState{NONE,NO_SHAPE,NO_APPEARANCE, APPEARANCE};\r
64         EditorState state = EditorState.NONE;\r
65         \r
66     Button materialButton;\r
67     \r
68     Composite ambientComposite;\r
69     Composite diffuseComposite;\r
70     Composite specularComposite;\r
71     Composite emissiveComposite;\r
72     Slider specularSlider;\r
73     Slider transparencySlider;\r
74     \r
75     \r
76     Composite textureParent;\r
77     \r
78     Button textureButton;\r
79     Button addTextureButton;\r
80     \r
81     \r
82     //Image image = null;\r
83     \r
84     boolean updating = false;\r
85     \r
86     private ArrayList<TextureComposite> textureComposites = new ArrayList<TextureComposite>();\r
87     \r
88     Button shaderButton;\r
89     Text fragmentShaderText; \r
90     Text vertexShaderText; \r
91     \r
92     Button apply3Button;\r
93     Button apply2Button;\r
94     Button applyButton;\r
95     \r
96     public AppearanceEditor() {\r
97         super();\r
98         //super(Activator.PLUGIN_ID);\r
99         \r
100     }\r
101     \r
102     @Override\r
103     public void createPartControl(Composite parent) {\r
104         super.createPartControl(parent);\r
105         createWidgets();\r
106     }\r
107 \r
108     @Override\r
109     protected String getFormText() {\r
110         return "Appearance Editor";\r
111     }\r
112 \r
113 //    @Override\r
114 //    protected void beforeCreateWidgets() {\r
115 //        if (!(getInputResource().isInstanceOf(GlobalIdMap.get(ThreeDimensionalModelingOntologyMapping.APPEARANCE))))\r
116 //            throw new RuntimeException("Trying to open resource that is not appearance");\r
117 //        appearance = AppearanceFactory.create(getInputResource());\r
118 //    }\r
119     \r
120     \r
121 \r
122     @Override\r
123     protected void createWidgets() {\r
124         \r
125         if (shapeResource == null) {\r
126                 if (state != EditorState.NO_SHAPE) {\r
127                         clearForm();\r
128                         state = EditorState.NO_SHAPE;\r
129                         toolkit.createLabel(getBody(), "No shape selected");\r
130                         getActiveForm().layout(true, true);\r
131                 }\r
132         } else if (appearanceResource == null){\r
133                 if (state != EditorState.NO_APPEARANCE) {\r
134                         clearForm();\r
135                         state = EditorState.NO_APPEARANCE;\r
136                         toolkit.createLabel(getBody(), "Selected shape does not have material definition.");\r
137                         Button b = toolkit.createButton(getBody(), "Create Appearance", SWT.PUSH);\r
138                         b.addSelectionListener(new SelectionAdapter() {\r
139                                 @Override\r
140                                 public void widgetSelected(SelectionEvent e) {\r
141                                         getSession().asyncWrite(new GraphRequestAdapter() {\r
142                                                 @Override\r
143                                                 public GraphRequestStatus perform(Graph g) throws Exception {\r
144                                                         Appearance appearance = Appearance.createDefault(g);\r
145                                                         appearanceResource = appearance.getResource();\r
146                                                         g.addStatement(shapeResource, Resources.g3dResource.HasAppearance, appearanceResource);\r
147                                                         return GraphRequestStatus.transactionComplete();\r
148                                                 }\r
149                                                 \r
150                                                 @Override\r
151                                                 public void requestCompleted( GraphRequestStatus status) {\r
152                                                         reloadInUIThread();\r
153                                                 }\r
154                                         });\r
155 \r
156                                 }\r
157                         });\r
158                         getActiveForm().layout(true, true);\r
159                 }\r
160         } else {\r
161                 if (state != EditorState.APPEARANCE) {\r
162                         clearForm();\r
163                         state = EditorState.APPEARANCE;\r
164                         createMaterialGroup(newGridSection(2, 2, false, false, "Material", "Material properties"));\r
165                         createTextureGroup(newGridSection(1, 1, false, false, "Texture", "Texture properties"));\r
166                         createShaderGroup(newGridSection(2, 2, false, false, "Shader", "Shader properties"));\r
167                         getActiveForm().layout(true, true);\r
168                 }\r
169                 \r
170         }\r
171     }\r
172     \r
173     @Override\r
174     public void clearForm() {\r
175         super.clearForm();\r
176         textureComposites.clear();\r
177     }\r
178     \r
179     @Override\r
180     protected void pageSelectionChanged(IWorkbenchPart part, ISelection selection) {\r
181         Resource res[] = ResourceAdaptionUtils.toResources(selection);\r
182         if (res.length == 0) {\r
183                 shapeResource = null;\r
184                 appearanceResource = null;\r
185                 reload();\r
186                 return;\r
187         }\r
188         final Resource sel = res[0];\r
189         if (sel.equals(shapeResource))\r
190                         return;\r
191         //System.out.println("AppearanceEditor.pageSelectionChanged");\r
192         getSession().asyncRead(new GraphRequestAdapter() {\r
193                 @Override\r
194                 public GraphRequestStatus perform(Graph g) throws Exception {\r
195                         \r
196                         shapeResource = null;\r
197                         appearanceResource = null;\r
198                         // selected object must be a shape\r
199                         if (!g.isInstanceOf(sel, Resources.g3dResource.Shape)) {\r
200                                 return GraphRequestStatus.transactionCancel();\r
201                         }\r
202                         // the shape must not be ah geometry definition\r
203                         if (g.getObjects(sel, Resources.g3dResource.GeometryDefinitionOf).size() > 0)\r
204                                 return GraphRequestStatus.transactionCancel();\r
205                         \r
206                         shapeResource = sel;\r
207                         Collection<Resource> res = g.getObjects(shapeResource, Resources.g3dResource.HasAppearance);\r
208                         if (res.size() == 1)\r
209                                 appearanceResource = res.iterator().next();\r
210                         return GraphRequestStatus.transactionComplete();\r
211                 }\r
212                 \r
213                 @Override\r
214                 public void requestCompleted(GraphRequestStatus status) {\r
215                         reloadInUIThread();\r
216                 }\r
217         });\r
218     }\r
219     \r
220     public void reloadInUIThread() {\r
221         parent.getDisplay().asyncExec(new Runnable() {\r
222                         @Override\r
223                         public void run() {\r
224                                 reload();\r
225                         }\r
226                 });\r
227     }\r
228     \r
229     public void reload() {\r
230          if (updating)\r
231              return;\r
232         createWidgets();\r
233         if (state == EditorState.APPEARANCE) {\r
234                 getSession().asyncRead(new GraphRequestAdapter() {\r
235                         @Override\r
236                         public GraphRequestStatus perform(Graph g) throws Exception {\r
237                                 reload(g);\r
238                                 return GraphRequestStatus.transactionComplete();\r
239                         }\r
240                 });\r
241         }\r
242     }\r
243 \r
244     @Override\r
245     public void reload(Graph g) {\r
246         if (updating)\r
247             return;\r
248         if (state != EditorState.APPEARANCE) {\r
249                 return;\r
250         }\r
251         Appearance appearance = new Appearance(g,appearanceResource);\r
252         Material m = appearance.getMaterial();\r
253         Texture t = appearance.getTexture();\r
254         Shader s = appearance.getShader();\r
255         loadMaterial(m);\r
256         loadTexture(t);\r
257         loadShader(s);\r
258 \r
259 \r
260     }\r
261     \r
262     private void loadMaterial(Material m) {\r
263         final boolean hasMaterial;\r
264         final Color ambient;\r
265         final Color diffuse;\r
266         final Color specular;\r
267         final Color emissive;\r
268         final int shininess;\r
269         final int transparency;\r
270         if (m == null) {\r
271                 hasMaterial = false;\r
272                 ambient = null;\r
273                 diffuse = null;\r
274                 specular = null;\r
275                 emissive = null;\r
276                 shininess = 0;\r
277                 transparency = 0;\r
278         } else {\r
279                 hasMaterial = true;\r
280                 ambient = AppearanceTools.getColor(m.getAmbientColor(), this.getBody().getDisplay());\r
281                 diffuse = AppearanceTools.getColor(m.getDiffuseColor(), this.getBody().getDisplay());\r
282                 specular = AppearanceTools.getColor(m.getSpecularColor(), this.getBody().getDisplay());\r
283                 emissive = AppearanceTools.getColor(m.getEmissiveColor(), this.getBody().getDisplay());\r
284                 shininess = (int)m.getShininess()[0];\r
285                 transparency = (int)(m.getTransparency()[0]*100.0);\r
286         }\r
287         parent.getDisplay().asyncExec(new Runnable() {\r
288                 @Override\r
289                 public void run() {\r
290                         boolean t = hasMaterial;\r
291                     materialButton.setSelection(t);\r
292                     ambientComposite.setEnabled(t);\r
293                     diffuseComposite.setEnabled(t);\r
294                     specularComposite.setEnabled(t);\r
295                     emissiveComposite.setEnabled(t);\r
296                     specularSlider.setEnabled(t);\r
297                     transparencySlider.setEnabled(t);\r
298                         if (hasMaterial) {\r
299                     ambientComposite.setBackground(ambient);\r
300                     diffuseComposite.setBackground(diffuse);\r
301                     specularComposite.setBackground(specular);\r
302                     emissiveComposite.setBackground(emissive);\r
303                     specularSlider.setSelection(shininess);\r
304                     transparencySlider.setSelection(transparency);\r
305                 } else {\r
306                         Color c = parent.getDisplay().getSystemColor(SWT.COLOR_DARK_GRAY);\r
307                         ambientComposite.setBackground(c);\r
308                     diffuseComposite.setBackground(c);\r
309                     specularComposite.setBackground(c);\r
310                     emissiveComposite.setBackground(c);\r
311                 }\r
312                         \r
313                 };\r
314         });\r
315         \r
316     }\r
317     \r
318     private void loadTexture(Texture t) {\r
319         //System.out.println("AppearanceEditor.loadTexture");\r
320         if (t == null) {\r
321                 parent.getDisplay().asyncExec(new Runnable() {\r
322                         @Override\r
323                         public void run() {\r
324                                 textureButton.setSelection(false);\r
325                         }\r
326                 });\r
327             \r
328             return;\r
329         }\r
330         parent.getDisplay().asyncExec(new Runnable() {\r
331                 @Override\r
332                 public void run() {\r
333                         textureButton.setSelection(true);\r
334                 }\r
335         });\r
336         \r
337         if (t.isInstanceOf(Resources.g3dResource.ImageTexture)) {\r
338             //final ImageTexture t2 = new ImageTexture(t);\r
339                 final Resource t2 = t.getResource();\r
340                 parent.getDisplay().asyncExec(new Runnable() {\r
341                         @Override\r
342                         public void run() {\r
343                                 while (textureComposites.size() > 1) {\r
344                             textureComposites.remove(textureComposites.size()-1).dispose();\r
345                         }\r
346                         if (textureComposites.size() == 0) {\r
347                             textureComposites.add(new TextureComposite(textureParent,SWT.NONE));\r
348                         }\r
349                         getSession().asyncWrite(new GraphRequestAdapter() {\r
350                                 public GraphRequestStatus perform(Graph g) throws Exception {\r
351                                         try {\r
352                                     textureComposites.get(0).update(new ImageTexture(g,t2));\r
353                                 } catch (Exception e) {\r
354                                     ErrorLogger.defaultLogError(e);\r
355                                 }\r
356                                 return GraphRequestStatus.transactionComplete();\r
357                                 };\r
358                     \r
359                         });\r
360                         }\r
361                 });\r
362             \r
363             \r
364         } else if (t.isInstanceOf(Resources.g3dResource.MultiTexture)) {\r
365             \r
366             MultiTexture mt = new MultiTexture(t);\r
367             StubLinkedList<IEntity> elements = new StubLinkedList<IEntity>(mt.getMultiTextureElementList());\r
368             final Resource listResource = mt.getMultiTextureElementList().getResource();\r
369             final int count = elements.size();\r
370             parent.getDisplay().asyncExec(new Runnable() {\r
371                 @Override\r
372                 public void run() {\r
373                         while (textureComposites.size() > count) {\r
374                         textureComposites.get(textureComposites.size()-1).dispose();\r
375                         textureComposites.remove(textureComposites.size()-1);\r
376                     }\r
377                     while (textureComposites.size() < count) {\r
378                         textureComposites.add(new TextureComposite(textureParent,SWT.NONE));\r
379                     }\r
380                         getSession().asyncWrite(new GraphRequestAdapter() {\r
381                                 @Override\r
382                                 public GraphRequestStatus perform(Graph g)\r
383                                                 throws Exception {\r
384                                         StubLinkedList<IEntity> elements = new StubLinkedList<IEntity>(new Entity(g,listResource));\r
385                                         Iterator<IEntity> i = elements.iterator();\r
386                             int index = 0;\r
387                             while (i.hasNext()) {\r
388                                 //MultiTextureElement e = new MultiTextureElement(i.next());\r
389                                 //int index = e.getMultiTextureIndexValue();\r
390                                 Texture tex = new Texture(i.next());//e.getTexture();\r
391                                 if (tex.isInstanceOf(Resources.g3dResource.ImageTexture)) {\r
392                                     ImageTexture t2 = new ImageTexture(tex);\r
393                                     try {\r
394                                         textureComposites.get(index).update(t2);\r
395                                     } catch (Exception err) {\r
396                                         ErrorLogger.defaultLogError(err);\r
397                                     }\r
398                                 }\r
399                                 index++;\r
400                             }\r
401                                         return null;\r
402                                 }\r
403                         });\r
404                 }\r
405             });\r
406             \r
407             \r
408             \r
409         }\r
410     }\r
411     \r
412     private void loadShader(Shader s) {\r
413         final boolean hasShader = (s != null);\r
414         final String vertexShader;\r
415         final String fragmentShader;\r
416         if (hasShader) {\r
417                 vertexShader = s.getVertexShader()[0];\r
418                 fragmentShader = s.getFragmentShader()[0];\r
419         } else {\r
420                 vertexShader = null;\r
421                 fragmentShader = null;\r
422         }\r
423         parent.getDisplay().asyncExec(new Runnable() {\r
424                 @Override\r
425                 public void run() {\r
426                         if (!hasShader) {\r
427                     shaderButton.setSelection(false);\r
428                 } else {\r
429                     shaderButton.setSelection(true);\r
430                     vertexShaderText.setText(vertexShader);\r
431                     fragmentShaderText.setText(fragmentShader);\r
432                 }\r
433                         \r
434                 }\r
435         });\r
436         \r
437     }\r
438     \r
439     private void createMaterialGroup(Composite parent) {\r
440         toolkit.paintBordersFor(parent);\r
441         toolkit.setBorderStyle(SWT.BORDER);\r
442         \r
443         materialButton = toolkit.createButton(parent, "Has Material", SWT.CHECK);\r
444         materialButton.addSelectionListener(new SelectionAdapter() {\r
445             public void widgetSelected(SelectionEvent e) {\r
446                 boolean t = materialButton.getSelection();\r
447                     ambientComposite.setEnabled(t);\r
448                     diffuseComposite.setEnabled(t);\r
449                     specularComposite.setEnabled(t);\r
450                     emissiveComposite.setEnabled(t);\r
451                     specularSlider.setEnabled(t);\r
452                     transparencySlider.setEnabled(t);\r
453                 \r
454             }\r
455         });\r
456         GridData data = new GridData(GridData.FILL, GridData.FILL, false, false,2,1);\r
457         materialButton.setLayoutData(data);\r
458      \r
459         data = new GridData(GridData.FILL, GridData.FILL, false, false,1,1);\r
460         data.widthHint = 100;\r
461         data.heightHint = 20;\r
462 \r
463         toolkit.createLabel(parent, "Ambient");\r
464         ambientComposite = toolkit.createComposite(parent, SWT.BORDER);\r
465         ambientComposite.setLayoutData(data);\r
466         ambientComposite.addMouseListener(new MouseAdapter() {\r
467            @Override\r
468             public void mouseUp(MouseEvent e) {\r
469                 ColorDialog dialog = new ColorDialog(AppearanceEditor.this.getBody().getShell());\r
470                 RGB rgb = dialog.open();\r
471                 if (rgb != null) {\r
472                     ambientComposite.setBackground(new Color(AppearanceEditor.this.getBody().getDisplay(),rgb));\r
473                     \r
474                 }\r
475            } \r
476         });\r
477 \r
478         toolkit.createLabel(parent, "Diffuse");\r
479         diffuseComposite = toolkit.createComposite(parent, SWT.BORDER);\r
480         diffuseComposite.setLayoutData(data);\r
481         diffuseComposite.addMouseListener(new MouseAdapter() {\r
482             @Override\r
483              public void mouseUp(MouseEvent e) {\r
484                  ColorDialog dialog = new ColorDialog(AppearanceEditor.this.getBody().getShell());\r
485                  RGB rgb = dialog.open();\r
486                  if (rgb != null) {\r
487                      diffuseComposite.setBackground(new Color(AppearanceEditor.this.getBody().getDisplay(),rgb));\r
488                      \r
489                  }\r
490             } \r
491          });\r
492         toolkit.createLabel(parent, "Specular");\r
493         specularComposite = toolkit.createComposite(parent, SWT.BORDER);\r
494         specularComposite.setLayoutData(data);\r
495         specularComposite.addMouseListener(new MouseAdapter() {\r
496             @Override\r
497              public void mouseUp(MouseEvent e) {\r
498                  ColorDialog dialog = new ColorDialog(AppearanceEditor.this.getBody().getShell());\r
499                  \r
500                  RGB rgb = dialog.open();\r
501                  if (rgb != null) {\r
502                      specularComposite.setBackground(new Color(AppearanceEditor.this.getBody().getDisplay(),rgb));\r
503                      \r
504                  }\r
505             } \r
506          });\r
507         toolkit.createLabel(parent, "Emissive");\r
508         emissiveComposite = toolkit.createComposite(parent, SWT.BORDER);\r
509         emissiveComposite.setLayoutData(data);\r
510         emissiveComposite.addMouseListener(new MouseAdapter() {\r
511             @Override\r
512              public void mouseUp(MouseEvent e) {\r
513                  ColorDialog dialog = new ColorDialog(AppearanceEditor.this.getBody().getShell());\r
514                  RGB rgb = dialog.open();\r
515                  if (rgb != null) {\r
516                      emissiveComposite.setBackground(new Color(AppearanceEditor.this.getBody().getDisplay(),rgb));\r
517                      \r
518                  }\r
519             } \r
520          });\r
521         toolkit.createLabel(parent, "Shininess");\r
522         specularSlider = new Slider(parent,SWT.NONE);\r
523         specularSlider.setValues(20, 0, 255, 1, 1, 10);\r
524         toolkit.adapt(specularSlider, true, true);\r
525         toolkit.createLabel(parent, "Transparency");\r
526         transparencySlider = new Slider(parent,SWT.NONE);\r
527         transparencySlider.setValues(0, 0, 100, 1, 1, 10);\r
528         toolkit.adapt(transparencySlider, true, true);\r
529         apply2Button = toolkit.createButton(parent, "Apply", SWT.PUSH);\r
530         apply2Button.addSelectionListener(new SelectionAdapter() {\r
531             public void widgetSelected(SelectionEvent e) {\r
532                 convertMaterial();\r
533             }\r
534         });\r
535         \r
536     }\r
537     \r
538     private void createTextureGroup(Composite parent) {\r
539         textureParent = parent;\r
540         toolkit.paintBordersFor(parent);\r
541         toolkit.setBorderStyle(SWT.BORDER);\r
542         \r
543         textureButton = toolkit.createButton(parent, "Has Texture", SWT.CHECK);\r
544         textureButton.addSelectionListener(new SelectionAdapter() {\r
545             public void widgetSelected(SelectionEvent e) {\r
546                 //loadImageButton.setEnabled(textureButton.getSelection());\r
547                 //imageComposite.setEnabled(textureButton.getSelection());\r
548                 //textureButton.setEnabled(textureButton.getSelection());\r
549                 \r
550             }\r
551         });\r
552         \r
553         \r
554         \r
555         textureButton.addSelectionListener(new SelectionAdapter() {\r
556             public void widgetSelected(SelectionEvent e) {\r
557                 //loadImageButton.setEnabled(textureButton.getSelection());\r
558                 //imageComposite.setEnabled(textureButton.getSelection());\r
559                 //textureButton.setEnabled(textureButton.getSelection());\r
560                 \r
561             }\r
562         });\r
563         addTextureButton = toolkit.createButton(parent, "Add Texture", SWT.PUSH);\r
564         addTextureButton.addSelectionListener(new SelectionAdapter() {\r
565             public void widgetSelected(SelectionEvent e) {\r
566                 textureComposites.add(new TextureComposite(textureParent,SWT.NONE));\r
567             }\r
568         });\r
569         applyButton = toolkit.createButton(parent, "Apply", SWT.PUSH);\r
570         applyButton.addSelectionListener(new SelectionAdapter() {\r
571             public void widgetSelected(SelectionEvent e) {\r
572                 convertImage();\r
573             }\r
574         });\r
575         \r
576     }\r
577     \r
578     private void createShaderGroup(Composite parent) {\r
579         toolkit.paintBordersFor(parent);\r
580         toolkit.setBorderStyle(SWT.BORDER);\r
581         GridData data = new GridData(SWT.FILL,SWT.FILL,true,true,2,1);\r
582         shaderButton = toolkit.createButton(parent, "Has Shader", SWT.CHECK);\r
583         shaderButton.addSelectionListener(new SelectionAdapter() {\r
584             public void widgetSelected(SelectionEvent e) {\r
585                \r
586                 \r
587             }\r
588         });\r
589         shaderButton.setLayoutData(data);\r
590         data = new GridData(SWT.FILL,SWT.FILL,true,true,1,1);\r
591         data.widthHint = 400;\r
592         data.heightHint = 200;\r
593         toolkit.createLabel(parent, "Vertex Shader");\r
594         vertexShaderText = toolkit.createText(parent,"", SWT.MULTI);\r
595         vertexShaderText.setLayoutData(data);\r
596         toolkit.createLabel(parent, "Fragment Shader");\r
597         fragmentShaderText = toolkit.createText(parent,"", SWT.MULTI);\r
598         fragmentShaderText.setLayoutData(data);\r
599         apply3Button = toolkit.createButton(parent, "Apply", SWT.PUSH);\r
600         apply3Button.addSelectionListener(new SelectionAdapter() {\r
601             public void widgetSelected(SelectionEvent e) {\r
602                 convertShader();\r
603             }\r
604         });\r
605     }\r
606     \r
607     \r
608     \r
609     private void convertShader() {\r
610         updating = true;\r
611         final boolean hasShader = shaderButton.getSelection();\r
612         final String vertexShader = vertexShaderText.getText();\r
613         final String fragmentShader = fragmentShaderText.getText();\r
614         getSession().asyncWrite(new GraphRequestAdapter() {\r
615                 @Override\r
616                 public GraphRequestStatus perform(Graph g) throws Exception {\r
617                         Appearance appearance = new Appearance(g,appearanceResource);\r
618                         if (hasShader) {\r
619                     Shader s = appearance.getShader();\r
620                     if (s == null) {\r
621                         s = Shader.createDefault(g);\r
622                         appearance.setShader(s);\r
623 \r
624                     }\r
625                     s.setVertexShader(vertexShader);\r
626                     s.setFragmentShader(fragmentShader);\r
627                 } else {\r
628                     appearance.setShader(null);\r
629                 }\r
630                         \r
631                         updating = false;\r
632                         return GraphRequestStatus.transactionComplete();\r
633                 }\r
634         });\r
635         \r
636         \r
637     }\r
638     \r
639     private void convertMaterial() {\r
640         updating = true;\r
641         \r
642         final boolean hasMaterial = materialButton.getSelection();\r
643         final Color ambientColor = ambientComposite.getBackground();\r
644         final Color diffuseColor = diffuseComposite.getBackground();\r
645         final Color specularColor = specularComposite.getBackground();\r
646         final Color emissiveColor = emissiveComposite.getBackground();\r
647         final double shininess = (double)specularSlider.getSelection();\r
648         final double transparency = (double)transparencySlider.getSelection()/ 100.0;\r
649         \r
650         getSession().asyncWrite(new GraphRequestAdapter() {\r
651                 @Override\r
652                 public GraphRequestStatus perform(Graph g) throws Exception {\r
653                         Appearance appearance = new Appearance(g,appearanceResource);\r
654                         if (hasMaterial) {\r
655                     Material m = appearance.getMaterial();\r
656                     if (m == null) {\r
657                         m = Material.createDefault(g);\r
658                     }\r
659                     org.simantics.proconf.g3d.stubs.Color aColor = m.getAmbientColor();\r
660                     org.simantics.proconf.g3d.stubs.Color dColor = m.getDiffuseColor();\r
661                     org.simantics.proconf.g3d.stubs.Color sColor = m.getSpecularColor();\r
662                     org.simantics.proconf.g3d.stubs.Color eColor = m.getEmissiveColor();\r
663                     AppearanceTools.setColor(aColor,ambientColor);\r
664                     AppearanceTools.setColor(dColor,diffuseColor);\r
665                     AppearanceTools.setColor(sColor, specularColor);\r
666                     AppearanceTools.setColor(eColor, emissiveColor);\r
667                     m.setShininess(shininess);\r
668                     m.setTransparency(transparency);\r
669                     appearance.setMaterial(m);\r
670                 } else {\r
671                         appearance.removeRelatedStatements(Resources.g3dResource.HasMaterial);\r
672                 }\r
673                         \r
674                         updating = false;\r
675                         return GraphRequestStatus.transactionComplete();\r
676                 }\r
677         });\r
678         \r
679     }\r
680     \r
681     private void convertImage() {\r
682         updating = true;\r
683         getSession().syncWrite(new GraphRequestAdapter() {\r
684                 @Override\r
685                 public GraphRequestStatus perform(Graph g) throws Exception {\r
686                         Appearance appearance = new Appearance(g,appearanceResource);\r
687                         Texture t = appearance.getTexture();\r
688                 if (textureComposites.size() == 1) {\r
689                     ImageTexture t2 = null;\r
690                     if (t != null && t.isInstanceOf(Resources.g3dResource.ImageTexture)) {\r
691                         t2 = new ImageTexture(t);\r
692                     } else {\r
693                         t2 = ImageTexture.createDefault(g);\r
694                         appearance.setTexture(t2);\r
695                     }\r
696                     final Resource mode = textureComposites.get(0).getModeType();\r
697                                 \r
698 \r
699                     if (mode != null)\r
700                         t2.setTextureMode(mode);\r
701                     textureComposites.get(0).getTexture(t2);\r
702                     \r
703                 } else if (textureComposites.size() > 1) {\r
704                     MultiTexture mt = null;\r
705                     if (t != null\r
706                             && t.isInstanceOf(Resources.g3dResource.MultiTexture)) {\r
707                         mt = new MultiTexture(t);\r
708                     } else {\r
709                         mt = MultiTexture.createDefault(g);\r
710                         appearance.setTexture(mt);\r
711                     }\r
712                     StubLinkedList<IEntity> elements = new StubLinkedList<IEntity>(mt.getMultiTextureElementList());\r
713                     //PropertyTypeSet<MultiTextureElement> elements = mt.getMultiTextureElementSet();\r
714                     Iterator<IEntity> it = elements.iterator();\r
715                     for (int i = 0; i < textureComposites.size(); i++) {\r
716                         TextureComposite tc = textureComposites.get(i);\r
717                         \r
718                         ImageTexture tex = null;\r
719                         if (it.hasNext())\r
720                                 tex = new ImageTexture(it.next());\r
721                         else {\r
722                                 tex = ImageTexture.createDefault(g);\r
723                                 elements.add(i,tex);\r
724                         }\r
725                         Resource mode = tc.getModeType();\r
726                         if (mode == null)\r
727                             tex.setTextureMode(Resources.g3dResource.CombineMode_modulate);\r
728                         else\r
729                             tex.setTextureMode(mode);\r
730                         \r
731                         textureComposites.get(i).getTexture(tex);\r
732                         \r
733                     }\r
734                 } else {\r
735                     appearance.setTexture(null);\r
736                 }\r
737           \r
738                 updating = false;\r
739                         return GraphRequestStatus.transactionComplete();\r
740                 }\r
741         });\r
742      \r
743             \r
744            \r
745         \r
746     }\r
747 \r
748     private class TextureComposite extends Composite {\r
749         private Button textureGeneratorButton;\r
750         private Button sphereMapButton;\r
751         private Button eyeLinearButton;\r
752         private Button objectLinearButton;\r
753         private Button normalMapButton;\r
754         private Button reflectionMapButton;\r
755         \r
756         private Button modulateButton;\r
757         private Button replaceButton;\r
758         private Button decalButton;\r
759         private Button blendButton;\r
760         \r
761         \r
762         \r
763         private Button loadImageButton;\r
764         private ImageComposite imageComposite;\r
765         private Button removeButton;\r
766         \r
767         \r
768         public TextureComposite(Composite parent, int style) {\r
769             super(parent,style);\r
770             GridLayout layout = new GridLayout(2,false);\r
771             this.setLayout(layout);\r
772             \r
773             loadImageButton = toolkit.createButton(this, "Load Texture", SWT.PUSH);\r
774             loadImageButton.addSelectionListener(new SelectionAdapter() {\r
775                 public void widgetSelected(SelectionEvent e) {\r
776 \r
777                         IImage[] images = ImageUtils.loadImagesDialog(getSite().getShell(), false, ImageUtils.getImageFactories());\r
778                         if (images == null)\r
779                                 return;\r
780                         IImage image = images[0];\r
781                         setImage(image);\r
782 \r
783                 }\r
784             });\r
785             GridData data = new GridData(SWT.LEFT,SWT.FILL,false,false,2,1);\r
786             \r
787             loadImageButton.setLayoutData(data);\r
788             data = new GridData(SWT.FILL,SWT.FILL,true,true,2,1);\r
789             imageComposite = new ImageComposite(this,SWT.BORDER);\r
790             imageComposite.setLayoutData(data);\r
791             \r
792             Composite texGenComposite = toolkit.createComposite(this, SWT.BORDER);\r
793             layout = new GridLayout(1,false);\r
794             texGenComposite.setLayout(layout);\r
795             data = new GridData(SWT.FILL,SWT.FILL,true,true,1,1);\r
796             data.heightHint = 140;\r
797             texGenComposite.setLayoutData(data);\r
798             textureGeneratorButton = toolkit.createButton(texGenComposite, "Has Texture Coordinate Generator", SWT.CHECK);\r
799             textureGeneratorButton.addSelectionListener(new SelectionAdapter() {\r
800                 public void widgetSelected(SelectionEvent e) {\r
801                     sphereMapButton.setEnabled(textureGeneratorButton.getSelection());\r
802                     eyeLinearButton.setEnabled(textureGeneratorButton.getSelection());\r
803                     objectLinearButton.setEnabled(textureGeneratorButton.getSelection());\r
804                     normalMapButton.setEnabled(textureGeneratorButton.getSelection());\r
805                     reflectionMapButton.setEnabled(textureGeneratorButton.getSelection());\r
806                     \r
807                 }\r
808             });\r
809             \r
810             sphereMapButton = toolkit.createButton(texGenComposite, "Shpere Map", SWT.RADIO);\r
811             sphereMapButton.addSelectionListener(new SelectionAdapter() {\r
812                 public void widgetSelected(SelectionEvent e) {\r
813                     if (!sphereMapButton.getSelection()) {\r
814                         sphereMapButton.setSelection(true);\r
815                     } else {\r
816                         eyeLinearButton.setSelection(false);\r
817                         objectLinearButton.setSelection(false);\r
818                         normalMapButton.setSelection(false);\r
819                         reflectionMapButton.setSelection(false);\r
820                     }\r
821                 }\r
822             });\r
823             eyeLinearButton = toolkit.createButton(texGenComposite, "Eye Linear", SWT.RADIO);\r
824             eyeLinearButton.addSelectionListener(new SelectionAdapter() {\r
825                 public void widgetSelected(SelectionEvent e) {\r
826                     if (!eyeLinearButton.getSelection()) {\r
827                         eyeLinearButton.setSelection(true);\r
828                     } else {\r
829                         sphereMapButton.setSelection(false);\r
830                         objectLinearButton.setSelection(false);\r
831                         normalMapButton.setSelection(false);\r
832                         reflectionMapButton.setSelection(false);\r
833                     }\r
834                 }\r
835             });\r
836             objectLinearButton = toolkit.createButton(texGenComposite, "Object Linear", SWT.RADIO);\r
837             objectLinearButton.addSelectionListener(new SelectionAdapter() {\r
838                 public void widgetSelected(SelectionEvent e) {\r
839                     if (!objectLinearButton.getSelection()) {\r
840                         objectLinearButton.setSelection(true);\r
841                     } else {\r
842                         eyeLinearButton.setSelection(false);\r
843                         sphereMapButton.setSelection(false);\r
844                         normalMapButton.setSelection(false);\r
845                         reflectionMapButton.setSelection(false);\r
846                     }\r
847                 }\r
848             });\r
849             normalMapButton = toolkit.createButton(texGenComposite, "Normal Map", SWT.RADIO);\r
850             normalMapButton.addSelectionListener(new SelectionAdapter() {\r
851                 public void widgetSelected(SelectionEvent e) {\r
852                     if (!normalMapButton.getSelection()) {\r
853                         normalMapButton.setSelection(true);\r
854                     } else {\r
855                         eyeLinearButton.setSelection(false);\r
856                         objectLinearButton.setSelection(false);\r
857                         sphereMapButton.setSelection(false);\r
858                         reflectionMapButton.setSelection(false);\r
859                     }\r
860                 }\r
861             });\r
862             reflectionMapButton = toolkit.createButton(texGenComposite, "Reflection Map", SWT.RADIO);\r
863             reflectionMapButton.addSelectionListener(new SelectionAdapter() {\r
864                 public void widgetSelected(SelectionEvent e) {\r
865                     if (!reflectionMapButton.getSelection()) {\r
866                         reflectionMapButton.setSelection(true);\r
867                     } else {\r
868                         eyeLinearButton.setSelection(false);\r
869                         objectLinearButton.setSelection(false);\r
870                         normalMapButton.setSelection(false);\r
871                         sphereMapButton.setSelection(false);\r
872                     }\r
873                 }\r
874             });\r
875             \r
876             Composite texModeComposite = toolkit.createComposite(this, SWT.BORDER);\r
877             texModeComposite.setLayout(layout);\r
878             texModeComposite.setLayoutData(data);\r
879             modulateButton = toolkit.createButton(texModeComposite, "Modulate", SWT.RADIO);\r
880             modulateButton.addSelectionListener(new SelectionAdapter() {\r
881                 public void widgetSelected(SelectionEvent e) {\r
882                         modulateButton.setSelection(true);\r
883                         replaceButton.setSelection(false);\r
884                         blendButton.setSelection(false);\r
885                         decalButton.setSelection(false);\r
886 \r
887                 }\r
888             });\r
889             blendButton = toolkit.createButton(texModeComposite, "Blend", SWT.RADIO);\r
890             blendButton.addSelectionListener(new SelectionAdapter() {\r
891                 public void widgetSelected(SelectionEvent e) {\r
892                         modulateButton.setSelection(false);\r
893                         replaceButton.setSelection(false);\r
894                         blendButton.setSelection(true);\r
895                         decalButton.setSelection(false);\r
896 \r
897                 }\r
898             });\r
899             replaceButton = toolkit.createButton(texModeComposite, "Replace", SWT.RADIO);\r
900             replaceButton.addSelectionListener(new SelectionAdapter() {\r
901                 public void widgetSelected(SelectionEvent e) {\r
902                         modulateButton.setSelection(false);\r
903                         replaceButton.setSelection(true);\r
904                         blendButton.setSelection(false);\r
905                         decalButton.setSelection(false);\r
906 \r
907                 }\r
908             });\r
909             decalButton = toolkit.createButton(texModeComposite, "Decal", SWT.RADIO);\r
910             decalButton.addSelectionListener(new SelectionAdapter() {\r
911                 public void widgetSelected(SelectionEvent e) {\r
912                         modulateButton.setSelection(false);\r
913                         replaceButton.setSelection(false);\r
914                         blendButton.setSelection(false);\r
915                         decalButton.setSelection(true);\r
916 \r
917                 }\r
918             });\r
919             \r
920             removeButton = toolkit.createButton(this, "Remove texture", SWT.PUSH);\r
921             parent.getParent().getParent().layout(true, true);\r
922         }\r
923         \r
924         public void setImage(IImage image) {\r
925             imageComposite.setImage(image);\r
926         }\r
927         \r
928         public IImage getImage() {\r
929             return imageComposite.getImage();\r
930         }\r
931         \r
932         public void update(ImageTexture t2) throws Exception {\r
933                 Graph graph = t2.getGraph();\r
934             org.simantics.image.stubs.Image i = t2.getImage();\r
935             IImageFactory f = ImageUtils.getImageFactoryForResource(graph,i.getResource());\r
936             final IImage p = f.createImageForResource(graph,i.getResource());\r
937 //            PixelDimension pd = p.getDimensions().getPixelDimension();\r
938 //            if (pd==null) pd = AppearanceTools.DEFAULT_SIZE;\r
939 //              final ImageData id = p.rasterize(pd.getWidth(), pd.getHeight());\r
940             \r
941             parent.getDisplay().asyncExec(new Runnable() {\r
942                 @Override\r
943                 public void run() {\r
944                         //Image im = new Image(AppearanceEditor.this.getBody().getDisplay(),id);\r
945                         //imageComposite.setImage(im);\r
946                     //showImage();\r
947                         setImage(p);\r
948 \r
949                 }\r
950             });\r
951             \r
952             TextureCoordinateGenerator gen = t2.getTextureCoordinateGenerator();\r
953             final boolean tg;\r
954             final boolean sm;\r
955             final boolean el;\r
956             final boolean ol;\r
957             final boolean nm;\r
958             final boolean rm;\r
959             if (gen == null) {\r
960                 tg = false;\r
961                 sm = false;\r
962                 el = false;\r
963                 ol = false;\r
964                 nm = false;\r
965                 rm = false;\r
966             } else {\r
967                 //type = gen.getTextureCoordinateGeneratorTypeValue();\r
968                 //textureGeneratorButton.setSelection(true);\r
969                 tg = true;\r
970                 if (gen.equals(Resources.g3dResource.TextureCoordinateGenerator_sphere)) {\r
971                         sm = true;\r
972                         el = false;\r
973                         ol = false;\r
974                         nm = false;\r
975                         rm = false;\r
976                 } else if (gen.equals(Resources.g3dResource.TextureCoordinateGenerator_eyelinear)) {\r
977                         sm = false;\r
978                         el = true;\r
979                         ol = false;\r
980                         nm = false;\r
981                         rm = false;\r
982                 } else if (gen.equals(Resources.g3dResource.TextureCoordinateGenerator_objectlinear)) {\r
983                         sm = false;\r
984                         el = false;\r
985                         ol = true;\r
986                         nm = false;\r
987                         rm = false;\r
988                 } else if (gen.equals(Resources.g3dResource.TextureCoordinateGenerator_normal)) {\r
989                         sm = false;\r
990                         el = false;\r
991                         ol = false;\r
992                         nm = true;\r
993                         rm = false;\r
994                 } else if (gen.equals(Resources.g3dResource.TextureCoordinateGenerator_reflection)) {\r
995                         sm = false;\r
996                         el = false;\r
997                         ol = false;\r
998                         nm = false;\r
999                         rm = true;\r
1000                 } else {\r
1001                         sm = false;\r
1002                         el = false;\r
1003                         ol = false;\r
1004                         nm = false;\r
1005                         rm = false;\r
1006                 }\r
1007                 \r
1008             }\r
1009             \r
1010             parent.getDisplay().asyncExec(new Runnable() {\r
1011                         @Override\r
1012                         public void run() {\r
1013                                 textureGeneratorButton.setSelection(tg);\r
1014                                 sphereMapButton.setSelection(sm);\r
1015                                 eyeLinearButton.setSelection(el);\r
1016                                 objectLinearButton.setSelection(ol);\r
1017                                 normalMapButton.setSelection(nm);\r
1018                                 reflectionMapButton.setSelection(rm);\r
1019                                 sphereMapButton.setEnabled(textureGeneratorButton.getSelection());\r
1020                     eyeLinearButton.setEnabled(textureGeneratorButton.getSelection());\r
1021                     objectLinearButton.setEnabled(textureGeneratorButton.getSelection());\r
1022                     normalMapButton.setEnabled(textureGeneratorButton.getSelection());\r
1023                     reflectionMapButton.setEnabled(textureGeneratorButton.getSelection());\r
1024                                 \r
1025                         }\r
1026                 });\r
1027         }\r
1028         \r
1029         \r
1030         public Resource getGenType() {\r
1031             if (sphereMapButton.getSelection())\r
1032                 return Resources.g3dResource.TextureCoordinateGenerator_sphere;\r
1033             else if (eyeLinearButton.getSelection())\r
1034                 return Resources.g3dResource.TextureCoordinateGenerator_eyelinear;\r
1035             else if (objectLinearButton.getSelection())\r
1036                 return Resources.g3dResource.TextureCoordinateGenerator_objectlinear;\r
1037             else if (normalMapButton.getSelection())\r
1038                 return Resources.g3dResource.TextureCoordinateGenerator_normal;\r
1039             else if (reflectionMapButton.getSelection())\r
1040                 return Resources.g3dResource.TextureCoordinateGenerator_reflection;\r
1041             return null;\r
1042         }\r
1043         \r
1044         public Resource getModeType() {\r
1045             if (modulateButton.getSelection())\r
1046                 return Resources.g3dResource.MultiTextureMode_modulate;\r
1047             else if (replaceButton.getSelection())\r
1048                 return Resources.g3dResource.MultiTextureMode_replace;\r
1049             else if (blendButton.getSelection())\r
1050                 return Resources.g3dResource.MultiTextureMode_blend;\r
1051             else if (decalButton.getSelection())\r
1052                 return Resources.g3dResource.MultiTextureMode_decal;\r
1053 \r
1054             return null;\r
1055         }\r
1056         \r
1057         public void getTexture(ImageTexture t2) throws Exception{\r
1058                 Graph g = t2.getGraph();\r
1059                 IImage image = getImage();\r
1060                 if (image != null) {\r
1061                         Resource res = image.instantiateAsResource(g);\r
1062                         t2.setImage(res);\r
1063                 }\r
1064                 final Resource t2res = t2.getResource();\r
1065 \r
1066                         if (textureGeneratorButton.getSelection()) {\r
1067                                 final Resource type;\r
1068                                 if (sphereMapButton.getSelection())\r
1069                                         type = Resources.g3dResource.TextureCoordinateGenerator_sphere;\r
1070                                 else if (eyeLinearButton.getSelection())\r
1071                                         type = Resources.g3dResource.TextureCoordinateGenerator_eyelinear;\r
1072                                 else if (objectLinearButton.getSelection())\r
1073                                         type = Resources.g3dResource.TextureCoordinateGenerator_objectlinear;\r
1074                                 else if (normalMapButton.getSelection())\r
1075                                         type = Resources.g3dResource.TextureCoordinateGenerator_normal;\r
1076                                 else if (reflectionMapButton.getSelection())\r
1077                                         type = Resources.g3dResource.TextureCoordinateGenerator_reflection;\r
1078                                 else\r
1079                                         type = null;\r
1080                                 if (type != null) {\r
1081                                         getSession().asyncWrite(new GraphRequestAdapter() {\r
1082                                                 @Override\r
1083                                                 public GraphRequestStatus perform(Graph g)\r
1084                                                                 throws Exception {\r
1085                                                         ImageTexture t2 = new ImageTexture(g, t2res);\r
1086                                                         t2.setTextureCoordinateGenerator(type);\r
1087                                                         return GraphRequestStatus.transactionComplete();\r
1088                                                 }\r
1089                                         });\r
1090 \r
1091                                 }\r
1092 \r
1093                         }\r
1094         }\r
1095         \r
1096         /*\r
1097                  * public void getTexture(ImageTexture t2) { if\r
1098                  * (imageComposite.getImage() != null) { ImageData data =\r
1099                  * imageComposite.getImage().getImageData(); if (!data.palette.isDirect) {\r
1100                  * throw new RuntimeException("Not direct"); } int bytes = 0; String\r
1101                  * type = ""; if (data.depth != 32 && data.depth != 24) { throw new\r
1102                  * UnsupportedOperationException("Cannot handle bitdepth " +\r
1103                  * data.depth); } if (data.depth == 32) { bytes = 4; type = "RGBA"; }\r
1104                  * else if (data.depth == 24) { bytes = 3; type = "RGB"; } String size =\r
1105                  * data.width + " " + data.height; byte texturedata[] = new\r
1106                  * byte[data.width * data.height * bytes]; for (int y = 0; y <\r
1107                  * data.height; y++) { for (int x = 0; x < data.width; x++) { int index =\r
1108                  * (y * data.width + x) * bytes;\r
1109                  * \r
1110                  * texturedata[index] = data.data[index]; texturedata[index + 1] =\r
1111                  * data.data[index + 1]; texturedata[index + 2] = data.data[index + 2];\r
1112                  * if (bytes == 4) texturedata[index + 3] = data.data[index + 3];\r
1113                  *  } } String base64 = new\r
1114                  * sun.misc.BASE64Encoder().encode(texturedata); // if\r
1115                  * (coreTC.getCurrentTransaction() == null)\r
1116                  * \r
1117                  * \r
1118                  * \r
1119                  * fi.vtt.proconf.threedimensionalmodeling.stub.v1_0.Image i =\r
1120                  * t2.getImage(); if (i == null) { i = ImageFactory.instantiate(graph);\r
1121                  * graph.commitChanges(this); t2.setImage(i); }\r
1122                  * i.setImageDataValue(base64); i.setImageTypeValue(type);\r
1123                  * i.setImageSizeValue(size); graph.commitChanges(this); if\r
1124                  * (textureGeneratorButton.getSelection()) { type = null; if\r
1125                  * (sphereMapButton.getSelection()) type =\r
1126                  * AppearanceTools.TEXTURE_COORD_GEN_SPHERE; else if\r
1127                  * (eyeLinearButton.getSelection()) type =\r
1128                  * AppearanceTools.TEXTURE_COORD_GEN_EYE_LINEAR; else if\r
1129                  * (objectLinearButton.getSelection()) type =\r
1130                  * AppearanceTools.TEXTURE_COORD_GEN_OBJECT_LINEAR; else if\r
1131                  * (normalMapButton.getSelection()) type =\r
1132                  * AppearanceTools.TEXTURE_COORD_GEN_NORMAL; else if\r
1133                  * (reflectionMapButton.getSelection()) type =\r
1134                  * AppearanceTools.TEXTURE_COORD_GEN_REFLECTION; else type = null; if\r
1135                  * (type != null) { TextureCoordinateGenerator gen =\r
1136                  * t2.getTextureCoordinateGenerator(); if (gen == null) { gen =\r
1137                  * TextureCoordinateGeneratorFactory.instantiate(graph);\r
1138                  * graph.commitChanges(this); t2.setTextureCoordinateGenerator(gen); }\r
1139                  * gen.setTextureCoordinateGeneratorTypeValue(type);\r
1140                  * graph.commitChanges(this); }\r
1141                  *  } else { //t2.setTextureCoordinateGenerator(null);\r
1142                  * graph.commitChanges(this); }\r
1143                  *  } }\r
1144                  */\r
1145     }\r
1146 }\r