Integration of OCCT 6.5.0 from SVN
[occt.git] / samples / java / java / SampleHLRPanel.java
1
2 //Title:        OpenCASCADE Samples
3 //Version:
4 //Copyright:    Copyright (c) 1999
5 //Author:       User Interface Group (Nizhny Novgorod)
6 //Company:      Matra Datavision
7 //Description:
8
9
10 import java.awt.*;
11 import java.awt.event.*;
12 import javax.swing.*;
13 import java.util.*;
14 import java.io.File;
15 import javax.swing.filechooser.FileFilter; 
16 import jcas.Standard_CString;
17 import jcas.Standard_Real;
18 import CASCADESamplesJni.*;
19 import SampleHLRJni.*;
20 import util.*;
21
22 public class SampleHLRPanel extends SamplePanel
23                                  implements ActionListener,
24                                             MouseListener,
25                                             MouseMotionListener
26 {
27   //-----------------------------------------------------------//
28   // Resources
29   //-----------------------------------------------------------//
30   static protected ResourceBundle resGui =
31          ResourceBundle.getBundle("SampleHLR");
32
33   static protected ImageIcon imgImportBrep = new ImageIcon(resGui.getString("Icon-ImportBrep"));
34   static protected ImageIcon imgExportBrep = new ImageIcon(resGui.getString("Icon-ExportBrep"));
35   static protected ImageIcon imgExport2d = new ImageIcon(resGui.getString("Icon-Export2d"));
36   static protected ImageIcon imgExport3d = new ImageIcon(resGui.getString("Icon-Export3d"));
37   static protected ImageIcon imgHLR = new ImageIcon(resGui.getString("Icon-HLR"));
38   static protected ImageIcon imgProperties = new ImageIcon(resGui.getString("Icon-Properties"));
39   static protected ImageIcon imgWireframe = new ImageIcon(resGui.getString("Icon-Wireframe"));
40   static protected ImageIcon imgShading = new ImageIcon(resGui.getString("Icon-Shading"));
41   static protected ImageIcon imgColor = new ImageIcon(resGui.getString("Icon-Color"));
42   static protected ImageIcon imgMaterial = new ImageIcon(resGui.getString("Icon-Material"));
43   static protected ImageIcon imgTransparency = new ImageIcon(resGui.getString("Icon-Transparency"));
44   static protected ImageIcon imgErase = new ImageIcon(resGui.getString("Icon-Erase"));
45
46
47   //-----------------------------------------------------------//
48   // Components
49   //-----------------------------------------------------------//
50   private static ViewPanel myView2d;
51   private static ViewPanel myView3d;
52
53   private static V2d_Viewer myViewer2d = null;
54   private static V3d_Viewer myViewer3d = null;
55
56   private static ISession2D_InteractiveContext myInteractiveContext = null;
57   private static AIS_InteractiveContext myAISContext = null;
58
59   private int startX = 0, startY = 0;
60   private boolean Dragged = false;
61
62   /** Directory path selected by user for the last time. */
63   private File curPath = new File(System.getProperty("user.dir") + "/../../../../data");
64
65   private File curPathOcc = new File(curPath + "/occ");
66   private File curPathImage = new File(curPath + "/images");
67
68   /** CASCADE properties dialog */
69   private PropertiesDlg myPropDlg = null;
70
71   /** HLR dialog */
72   private HLRDlg myHLRDlg = null;
73
74   /** Object(s) popup menu */
75   private PopupMenu myPopup;
76
77   JButton btnWireframe;
78   JButton btnShading;
79   JButton btnColor;
80   JButton btnMaterial;
81   JButton btnTransparency;
82   JButton btnErase;
83
84
85   //-----------------------------------------------------------//
86   // External access
87   //-----------------------------------------------------------//
88   public static V2d_Viewer getViewer2d()
89   {
90     return myViewer2d;
91   }
92
93   public static V3d_Viewer getViewer3d()
94   {
95     return myViewer3d;
96   }
97
98   public static ISession2D_InteractiveContext getInteractiveContext()
99   {
100     return myInteractiveContext;
101   }
102
103   public static AIS_InteractiveContext getAISContext()
104   {
105     return myAISContext;
106   }
107   
108   public static CASCADEView2d getView2d()
109   {
110     if (myView2d == null)
111       return null;
112     return (CASCADEView2d) myView2d.getViewPort();
113   }
114
115   public static CASCADEView3d getView3d()
116   {
117     if (myView3d == null)
118       return null;
119     return (CASCADEView3d) myView3d.getViewPort();
120   }
121
122
123 //=======================================================================//
124 //                             Constructor                               //
125 //=======================================================================//
126   public SampleHLRPanel()
127   {
128     super(false);
129     
130     // 2D Initialization
131     //------------------------------------------
132     myViewer2d.SetCircularGridValues(0.0, 0.0, 10.0, 8, 0.0);
133     myViewer2d.SetRectangularGridValues(0.0, 0.0, 10.0, 10.0, 0.0);
134
135     SampleHLRPackage.InitMaps(myViewer2d);
136
137     if (myInteractiveContext == null)
138       myInteractiveContext = new ISession2D_InteractiveContext(myViewer2d);
139
140
141     // 3D Initialization
142     //------------------------------------------
143     myViewer3d.SetDefaultLights();
144     myViewer3d.SetLightOn();
145
146     if (myAISContext == null)
147       myAISContext = new AIS_InteractiveContext(myViewer3d);
148
149     myPopup = createObjectPopup();
150     updateButtons();
151   }
152
153 //-----------------------------------------------------------------------//
154   public JPanel createViewPanel()
155   {
156     JPanel mainPanel = new JPanel();
157     mainPanel.setLayout(new GridBagLayout());
158     mainPanel.setBorder(BorderFactory.createEmptyBorder(0, 5, 5, 0));
159
160
161     // Viewer 2D
162     //------------------------------------------
163     if (myViewer2d == null) {
164 //       JOptionPane.showMessageDialog(null, "Call SampleHLRPackage.CreateViewer2d");
165 //       System.out.println("SampleHLRPanel.java: Press enter: ");
166 //       try{
167 //         new java.io.DataInputStream(System.in).readLine();
168 //         System.out.println("...");
169 //       }catch (Exception e) {
170 //         System.out.println("Error: SampleHLRPanel.createViewPanel:"+ e);
171 //         System.out.println("Error", "SampleHLRPanel.createViewPanel:", e);
172 //       }
173       myViewer2d = SampleHLRPackage.CreateViewer2d("HLR2d");
174     }
175
176     myView2d = new ViewPanel(ViewPanel.VIEW_2D) {
177         public ViewCanvas createViewPort() {
178           return new CASCADEView2d(SampleHLRPanel.getViewer2d()) {
179                   public V2d_View createView2d(V2d_Viewer viewer,
180                                                int hiwin, int lowin) {
181                     return SampleHLRPackage.CreateView2d(viewer, hiwin, lowin);
182                   }
183                   public Color GetBackgroundColor() {
184 //                     Aspect_WindowDriver aDriver = new Aspect_WindowDriver(myView.Driver());
185                     Aspect_WindowDriver aDriver = myView.Driver();
186                     Aspect_Window aWindow = aDriver.Window();
187                     Aspect_Background aBack = aWindow.Background();
188                     Quantity_Color aColor = aBack.Color();
189                     int red = (int) (aColor.Red()*255);
190                     int green = (int) (aColor.Green()*255);
191                     int blue = (int) (aColor.Blue()*255);
192                     return new Color(red, green, blue);
193                   }
194                   public void SetBackgroundColor(Color color) {
195 //                     SampleHLRJni.Aspect_WindowDriver aDriver = new SampleHLRJni.Aspect_WindowDriver(myView.Driver());
196 //                     Aspect_WindowDriver aDriver = new Aspect_WindowDriver(myView.Driver());
197                     Aspect_WindowDriver aDriver = myView.Driver();
198
199                     Aspect_Window aWindow = aDriver.Window();
200                     Aspect_Background aBack = aWindow.Background();
201                     Quantity_Color theColor = new Quantity_Color(color.getRed()/255.,
202                         color.getGreen()/255., color.getBlue()/255.,
203                         Quantity_TypeOfColor.Quantity_TOC_RGB);
204                     aBack.SetColor(theColor);
205                     aWindow.SetBackground(aBack);
206                     myView.Update();
207                   }
208           };
209         }
210     };
211
212     myView2d.addMouseListener(this);
213     myView2d.addMouseMotionListener(this);
214
215
216     // Viewer 3D
217     //------------------------------------------
218     myViewer3d = SampleHLRPackage.CreateViewer3d("HLR3d");
219
220     myView3d = new ViewPanel() {
221         public ViewCanvas createViewPort()
222         {
223           return new CASCADEView3d(SampleHLRPanel.getViewer3d()) {
224               public void setWindow3d(V3d_View view, int hiwin, int lowin) {
225                 SampleHLRPackage.SetWindow3d(view, hiwin, lowin);
226               }
227           };
228         }
229     };
230    
231     myView3d.addMouseListener(this);
232     myView3d.addMouseMotionListener(this);
233
234
235     // Layout
236     //------------------------------------------
237     mainPanel.add(myView3d, new GridBagConstraints(0, 0, 1, 1, 1.0, 1.0,
238             GridBagConstraints.CENTER, GridBagConstraints.BOTH,
239             new Insets(0, 0, 0, 0), 0, 0));
240     mainPanel.add(myView2d, new GridBagConstraints(1, 0, 1, 1, 1.0, 1.0,
241             GridBagConstraints.CENTER, GridBagConstraints.BOTH,
242             new Insets(0, 0, 0, 0), 0, 0));
243
244     return mainPanel;
245   }
246
247 //-----------------------------------------------------------------------//
248   public Component createToolbar()
249   {
250     JToolBar tools = (JToolBar) super.createToolbar();
251
252     Insets margin = new Insets(1, 1, 1, 1);
253     JButton button;
254
255     button = new HeavyButton(imgImportBrep);
256     button.setToolTipText(resGui.getString("Help-ImportBrep"));
257     button.setActionCommand("ImportBrep");
258     button.addActionListener(this);
259     button.setMargin(margin);
260     tools.add(button);
261
262     tools.addSeparator();
263
264     button = new HeavyButton(imgExportBrep);
265     button.setToolTipText(resGui.getString("Help-ExportBrep"));
266     button.setActionCommand("ExportBrep");
267     button.addActionListener(this);
268     button.setMargin(margin);
269     tools.add(button);
270
271     button = new HeavyButton(imgExport2d);
272     button.setToolTipText(resGui.getString("Help-Export2d"));
273     button.setActionCommand("Export2d");
274     button.addActionListener(this);
275     button.setMargin(margin);
276     tools.add(button);
277
278     button = new HeavyButton(imgExport3d);
279     button.setToolTipText(resGui.getString("Help-Export3d"));
280     button.setActionCommand("Export3d");
281     button.addActionListener(this);
282     button.setMargin(margin);
283     tools.add(button);
284
285     tools.addSeparator();
286
287     button = new HeavyButton(imgHLR);
288     button.setToolTipText(resGui.getString("Help-HLR"));
289     button.setActionCommand("HLR");
290     button.addActionListener(this);
291     button.setMargin(margin);
292     tools.add(button);
293
294     tools.addSeparator();
295
296     button = new HeavyButton(imgProperties);
297     button.setToolTipText(resGui.getString("Help-Properties"));
298     button.setActionCommand("Properties");
299     button.addActionListener(this);
300     button.setMargin(margin);
301     tools.add(button);
302
303     tools.addSeparator();
304
305     btnWireframe = new HeavyButton(imgWireframe);
306     btnWireframe.setToolTipText(resGui.getString("Help-Wireframe"));
307     btnWireframe.setActionCommand("Wireframe");
308     btnWireframe.addActionListener(this);
309     btnWireframe.setMargin(margin);
310     tools.add(btnWireframe);
311
312     btnShading = new HeavyButton(imgShading);
313     btnShading.setToolTipText(resGui.getString("Help-Shading"));
314     btnShading.setActionCommand("Shading");
315     btnShading.addActionListener(this);
316     btnShading.setMargin(margin);
317     tools.add(btnShading);
318
319     tools.addSeparator();
320
321     btnColor = new HeavyButton(imgColor);
322     btnColor.setToolTipText(resGui.getString("Help-Color"));
323     btnColor.setActionCommand("Color");
324     btnColor.addActionListener(this);
325     btnColor.setMargin(margin);
326     tools.add(btnColor);
327
328     btnMaterial = new HeavyButton(imgMaterial);
329     btnMaterial.setToolTipText(resGui.getString("Help-Material"));
330     btnMaterial.setActionCommand("Material");
331     btnMaterial.addActionListener(this);
332     btnMaterial.setMargin(margin);
333     tools.add(btnMaterial);
334
335     btnTransparency = new HeavyButton(imgTransparency);
336     btnTransparency.setToolTipText(resGui.getString("Help-Transparency"));
337     btnTransparency.setActionCommand("Transparency");
338     btnTransparency.addActionListener(this);
339     btnTransparency.setMargin(margin);
340     tools.add(btnTransparency);
341
342     tools.addSeparator();
343
344     btnErase = new HeavyButton(imgErase);
345     btnErase.setToolTipText(resGui.getString("Help-Erase"));
346     btnErase.setActionCommand("Erase");
347     btnErase.addActionListener(this);
348     btnErase.setMargin(margin);
349     tools.add(btnErase);
350
351     return tools;
352   }
353
354 //-----------------------------------------------------------------------//
355   public PopupMenu createObjectPopup()
356   {
357     PopupMenu popup = new PopupMenu("Object(s)");
358
359     MenuItem menuItem = new MenuItem("Wireframe");
360     menuItem.setActionCommand("Wireframe");
361     menuItem.addActionListener(this);
362     popup.add(menuItem);
363
364     menuItem = new MenuItem("Shading");
365     menuItem.setActionCommand("Shading");
366     menuItem.addActionListener(this);
367     popup.add(menuItem);
368
369     menuItem = new MenuItem("Color...");
370     menuItem.setActionCommand("Color");
371     menuItem.addActionListener(this);
372     popup.add(menuItem);
373
374     Menu menu = new Menu("Material");
375
376     menuItem = new MenuItem("Brass");
377     menuItem.setActionCommand("MaterialBrass");
378     menuItem.addActionListener(this);
379     menu.add(menuItem);
380
381     menuItem = new MenuItem("Bronze");
382     menuItem.setActionCommand("MaterialBronze");
383     menuItem.addActionListener(this);
384     menu.add(menuItem);
385
386     menuItem = new MenuItem("Copper");
387     menuItem.setActionCommand("MaterialCopper");
388     menuItem.addActionListener(this);
389     menu.add(menuItem);
390
391     menuItem = new MenuItem("Gold");
392     menuItem.setActionCommand("MaterialGold");
393     menuItem.addActionListener(this);
394     menu.add(menuItem);
395
396     menuItem = new MenuItem("Pewter");
397     menuItem.setActionCommand("MaterialPewter");
398     menuItem.addActionListener(this);
399     menu.add(menuItem);
400
401     menuItem = new MenuItem("Plaster");
402     menuItem.setActionCommand("MaterialPlaster");
403     menuItem.addActionListener(this);
404     menu.add(menuItem);
405
406     menuItem = new MenuItem("Plastic");
407     menuItem.setActionCommand("MaterialPlastic");
408     menuItem.addActionListener(this);
409     menu.add(menuItem);
410
411     menuItem = new MenuItem("Silver");
412     menuItem.setActionCommand("MaterialSilver");
413     menuItem.addActionListener(this);
414     menu.add(menuItem);
415
416     popup.add(menu);
417
418     menuItem = new MenuItem("Transparency...");
419     menuItem.setActionCommand("Transparency");
420     menuItem.addActionListener(this);
421     popup.add(menuItem);
422
423     menuItem = new MenuItem("Erase");
424     menuItem.setActionCommand("Erase");
425     menuItem.addActionListener(this);
426     popup.add(menuItem);
427
428     return popup;
429   }
430
431
432 //=======================================================================//
433 //                              Actions                                  //
434 //=======================================================================//
435   private void updateButtons()
436   {
437     if (myAISContext != null)
438     {
439       myAISContext.InitCurrent();
440       if (myAISContext.MoreCurrent())
441       {
442         btnWireframe.setEnabled(true);
443         btnShading.setEnabled(true);
444         btnColor.setEnabled(true);
445         btnMaterial.setEnabled(true);
446         btnTransparency.setEnabled(true);
447         btnErase.setEnabled(true);
448       }
449       else
450       {
451         btnWireframe.setEnabled(false);
452         btnShading.setEnabled(false);
453         btnColor.setEnabled(false);
454         btnMaterial.setEnabled(false);
455         btnTransparency.setEnabled(false);
456         btnErase.setEnabled(false);
457       }
458     }
459   }
460
461   public void onImportBrep()
462   {
463     // Select file to open
464     JFileChooser aDlg = new JFileChooser();
465                 aDlg.setFileSelectionMode(JFileChooser.FILES_ONLY);
466
467     // Setting file filters
468     String[] fltExt = {"brep", "rle"};
469     ExtensionFileFilter flt = new ExtensionFileFilter(fltExt, "BREP files");
470     aDlg.setFileFilter(flt);
471
472     // Setting dialog properties
473     aDlg.setCurrentDirectory(curPathOcc);
474     aDlg.setDialogTitle("Import Brep");
475     aDlg.setApproveButtonText("Import");
476     aDlg.setApproveButtonMnemonic('i');
477     aDlg.setApproveButtonToolTipText("Import BRep from the selected file");
478
479     // Show the dialog
480     int returnVal = aDlg.showDialog(this, "Import");
481
482     if (returnVal == JFileChooser.APPROVE_OPTION)
483     {
484       String name = aDlg.getSelectedFile().getAbsolutePath();
485       curPathOcc = aDlg.getCurrentDirectory();
486
487       // Checking extention
488       FileFilter curFlt = aDlg.getFileFilter();
489       if (curFlt instanceof ExtensionFileFilter)
490       {
491         ExtensionFileFilter extFlt = (ExtensionFileFilter) curFlt;
492         String ext = extFlt.getExtension(name);
493         if (ext == null)
494         {
495           String[] extentions = extFlt.getExtensions();
496           if (extentions != null)
497           {
498             if (name.endsWith("."))
499               name = name + extentions[0];
500             else
501               name = name + "." + extentions[0];
502           }
503         }
504       }
505
506       // Load selected file
507       SamplesStarter.getFrame().setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));
508       if (!SampleHLRPackage.ReadBRep(new Standard_CString(name), myAISContext))
509         SamplesStarter.put_info("Error loading file " + name);
510       SamplesStarter.getFrame().setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
511     }
512   }
513
514   public void onExportBrep()
515   {
516     // Get file name
517     JFileChooser aDlg = new JFileChooser();
518                 aDlg.setFileSelectionMode(JFileChooser.FILES_ONLY);
519
520     // Setting file filters
521     String[] fltExt = {"brep", "rle"};
522     ExtensionFileFilter fltBrep = new ExtensionFileFilter(fltExt, "BREP files");
523     aDlg.setFileFilter(fltBrep);
524
525     // Setting dialog properties
526     aDlg.setCurrentDirectory(curPathOcc);
527     aDlg.setDialogTitle("Export BRep");
528     aDlg.setApproveButtonText("Export");
529     aDlg.setApproveButtonMnemonic('e');
530     aDlg.setApproveButtonToolTipText("Export BRep into selected file");
531
532     // Show the dialog
533     int returnVal = aDlg.showDialog(this, "Export");
534
535     if (returnVal == JFileChooser.APPROVE_OPTION)
536     {
537       String name = aDlg.getSelectedFile().getAbsolutePath();
538       curPathOcc = aDlg.getCurrentDirectory();
539
540       // Checking extention
541       FileFilter curFlt = aDlg.getFileFilter();
542       if (curFlt instanceof ExtensionFileFilter)
543       {
544         ExtensionFileFilter extFlt = (ExtensionFileFilter) curFlt;
545         String ext = extFlt.getExtension(name);
546         if (ext == null)
547         {
548           String[] extentions = extFlt.getExtensions();
549           if (extentions != null)
550           {
551             if (name.endsWith("."))
552               name = name + extentions[0];
553             else
554               name = name + "." + extentions[0];
555           }
556         }
557       }
558
559       SamplesStarter.getFrame().setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));
560       SampleHLRPackage.SaveBRep(new Standard_CString(name), myAISContext);
561       SamplesStarter.getFrame().setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
562     }
563   }
564
565   public void onExportImage(boolean is2d)
566   {
567     // Get file name
568     JFileChooser aDlg = new JFileChooser();
569                 aDlg.setFileSelectionMode(JFileChooser.FILES_ONLY);
570
571     // Setting file filters
572     ExtensionFileFilter fltBmp = new ExtensionFileFilter("bmp", "BMP files");
573     aDlg.addChoosableFileFilter(fltBmp);
574     ExtensionFileFilter fltGif = new ExtensionFileFilter("gif", "GIF files");
575     aDlg.addChoosableFileFilter(fltGif);
576     ExtensionFileFilter fltXwd = new ExtensionFileFilter("xwd", "XWD files");
577     aDlg.addChoosableFileFilter(fltXwd);
578
579     aDlg.setFileFilter(fltBmp);
580
581     // Setting dialog properties
582     aDlg.setCurrentDirectory(curPathImage);
583     aDlg.setDialogTitle("Export Image");
584     aDlg.setApproveButtonText("Export");
585     aDlg.setApproveButtonMnemonic('e');
586     aDlg.setApproveButtonToolTipText("Export image into selected file");
587
588     // Show the dialog
589     int returnVal = aDlg.showDialog(this, "Export");
590
591     if (returnVal == JFileChooser.APPROVE_OPTION)
592     {
593       String name = aDlg.getSelectedFile().getAbsolutePath();
594       curPathImage = aDlg.getCurrentDirectory();
595
596       // Checking extention
597       FileFilter curFlt = aDlg.getFileFilter();
598       if (curFlt instanceof ExtensionFileFilter)
599       {
600         ExtensionFileFilter extFlt = (ExtensionFileFilter) curFlt;
601         String ext = extFlt.getExtension(name);
602         if (ext == null)
603         {
604           String[] extentions = extFlt.getExtensions();
605           if (extentions != null)
606           {
607             if (name.endsWith("."))
608               name = name + extentions[0];
609             else
610               name = name + "." + extentions[0];
611           }
612         }
613       }
614
615       String format = name.substring(name.lastIndexOf(".")+1);
616       SamplesStarter.getFrame().setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));
617       if (is2d)
618       {
619         V2d_View view2d = ((CASCADEView2d) myView2d.getViewPort()).getView();
620         SampleHLRPackage.SaveImage(new Standard_CString(name),
621                                    new Standard_CString(format), view2d);
622       }
623       else
624       {
625         V3d_View view3d = ((CASCADEView3d) myView3d.getViewPort()).getView();
626         SampleHLRPackage.SaveImage(new Standard_CString(name),
627                                    new Standard_CString(format), view3d);
628       }
629       SamplesStarter.getFrame().setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
630     }
631   }
632
633   public void onHLR()
634   {
635     if (myHLRDlg == null)
636     {
637       myHLRDlg = new HLRDlg(SamplesStarter.getFrame());
638       Position.centerWindow(myHLRDlg);
639     }
640
641     myHLRDlg.show();
642   }
643
644   public void onProperties()
645   {
646     if (myPropDlg == null)
647     {
648       myPropDlg = new PropertiesDlg(SamplesStarter.getFrame(), myViewer2d);
649       Position.centerWindow(myPropDlg);
650     }
651
652     myPropDlg.show();
653   }
654
655   public void onWireframe()
656   {
657     if (myAISContext != null)
658     {
659       for (myAISContext.InitCurrent(); myAISContext.MoreCurrent();
660            myAISContext.NextCurrent())
661         myAISContext.SetDisplayMode(myAISContext.Current(), 0, true);
662     }
663   }
664
665   public void onShading()
666   {
667     if (myAISContext != null)
668     {
669       for (myAISContext.InitCurrent(); myAISContext.MoreCurrent();
670            myAISContext.NextCurrent())
671         myAISContext.SetDisplayMode(myAISContext.Current(), 1, true);
672     }
673   }
674
675   public void onColor()
676   {
677     if (myAISContext != null)
678     {
679       myAISContext.InitCurrent();
680       if (myAISContext.MoreCurrent())
681       {
682         Color theColor;
683         if (myAISContext.Current().HasColor())
684         {
685           Quantity_Color aColor =
686               new Quantity_Color(myAISContext.Color(myAISContext.Current()));
687           int red = (int) (aColor.Red()*255);
688           int green = (int) (aColor.Green()*255);
689           int blue = (int) (aColor.Blue()*255);
690           theColor = new Color(red, green, blue);
691         }
692         else
693           theColor = Color.white;
694
695         Color theNewColor = JColorChooser.showDialog(SamplesStarter.getFrame(),
696                                                  "Choose the color", theColor);
697
698         if (theNewColor != null)
699         {
700           Quantity_Color aNewColor = new Quantity_Color(theNewColor.getRed()/255.,
701                                     theNewColor.getGreen()/255.,
702                                                     theNewColor.getBlue()/255.,
703                                                     Quantity_TypeOfColor.Quantity_TOC_RGB);
704           for (myAISContext.InitCurrent(); myAISContext.MoreCurrent();
705                myAISContext.NextCurrent())
706             myAISContext.SetColor(myAISContext.Current(), aNewColor, true);
707         }
708       }
709     }
710   }
711
712   public void onMaterial()
713   {
714     MaterialDlg theDlg = new MaterialDlg(SamplesStarter.getFrame(), myAISContext);
715     Position.centerWindow(theDlg);
716     theDlg.show();
717   }
718
719   public void setMaterial(int material)
720   {
721     if (myAISContext != null)
722     {
723       for (myAISContext.InitCurrent(); myAISContext.MoreCurrent();
724            myAISContext.NextCurrent())
725         myAISContext.SetMaterial(myAISContext.Current(), (short)material, true);
726     }
727   }
728
729   public void onTransparency()
730   {
731     if (myAISContext != null)
732     {
733       myAISContext.InitCurrent();
734       if (myAISContext.MoreCurrent())
735       {
736         double aValue = myAISContext.Current().Transparency();
737
738         TransparencyDlg aDlg = new TransparencyDlg(SamplesStarter.getFrame(), aValue);
739         Position.centerWindow(aDlg);
740         aDlg.show();
741
742         if (aDlg.isOK())
743         {
744           for (myAISContext.InitCurrent(); myAISContext.MoreCurrent();
745                myAISContext.NextCurrent())
746             myAISContext.SetTransparency(myAISContext.Current(), aDlg.getValue(), true);
747         }
748       }
749     }
750   }
751
752   public void onErase()
753   {
754     if (myAISContext != null)
755     {
756       for (myAISContext.InitCurrent(); myAISContext.MoreCurrent();
757            myAISContext.NextCurrent())
758         myAISContext.Erase(myAISContext.Current(), true, false);
759     }
760   }
761
762
763 //=======================================================================//
764 // ActionListener interface
765 //=======================================================================//
766   public void actionPerformed(ActionEvent e)
767   {
768     String command = e.getActionCommand();
769
770     if (command.equals("HLR")) onHLR();
771     else if (command.equals("ImportBrep")) onImportBrep();
772     else if (command.equals("ExportBrep")) onExportBrep();
773     else if (command.equals("Export2d")) onExportImage(true);
774     else if (command.equals("Export3d")) onExportImage(false);
775     else if (command.equals("Properties")) onProperties();
776
777     // Object(s) properties
778     else if (command.equals("Wireframe")) onWireframe();
779     else if (command.equals("Shading")) onShading();
780     else if (command.equals("Color")) onColor();
781     else if (command.equals("Material")) onMaterial();
782     else if (command.equals("Transparency")) onTransparency();
783     else if (command.equals("Erase")) onErase();
784     
785     // Setting material (from popup menu)
786     else if (command.equals("MaterialBrass"))
787       setMaterial(Graphic3d_NameOfMaterial.Graphic3d_NOM_BRASS);
788     else if (command.equals("MaterialBronze"))
789       setMaterial(Graphic3d_NameOfMaterial.Graphic3d_NOM_BRONZE);
790     else if (command.equals("MaterialCopper"))
791       setMaterial(Graphic3d_NameOfMaterial.Graphic3d_NOM_COPPER);
792     else if (command.equals("MaterialGold"))
793       setMaterial(Graphic3d_NameOfMaterial.Graphic3d_NOM_GOLD);
794     else if (command.equals("MaterialPewter"))
795       setMaterial(Graphic3d_NameOfMaterial.Graphic3d_NOM_PEWTER);
796     else if (command.equals("MaterialPlaster"))
797       setMaterial(Graphic3d_NameOfMaterial.Graphic3d_NOM_PLASTER);
798     else if (command.equals("MaterialPlastic"))
799       setMaterial(Graphic3d_NameOfMaterial.Graphic3d_NOM_PLASTIC);
800     else if (command.equals("MaterialSilver"))
801       setMaterial(Graphic3d_NameOfMaterial.Graphic3d_NOM_SILVER);
802   }
803
804 //=======================================================================//
805 // MouseListener interface
806 //=======================================================================//
807   public void mouseClicked(MouseEvent e)
808   {
809   }
810
811   public void mousePressed(MouseEvent e)
812   {
813     if (SwingUtilities.isLeftMouseButton(e))
814     {
815       startX = e.getX();
816       startY = e.getY();
817       Object src = e.getSource();
818
819       if (src == myView3d)
820       {
821         V3d_View view3d = ((CASCADEView3d) myView3d.getViewPort()).getView();
822         if (view3d != null)
823           myAISContext.MoveTo(startX, startY, view3d);
824       }
825       if (src == myView2d)
826       {
827         V2d_View view2d = ((CASCADEView2d) myView2d.getViewPort()).getView();
828         if (view2d != null)
829           myInteractiveContext.Move(startX, startY, view2d);
830       }
831     }
832     else if (SwingUtilities.isRightMouseButton(e))
833     {
834       if (e.getSource() == myView3d)
835       {
836         if (myAISContext != null)
837         {
838           myAISContext.InitCurrent();
839           if (myAISContext.MoreCurrent())
840           {
841             myView3d.add(myPopup);
842                 myPopup.show(myView3d, e.getX(), e.getY() + 30);
843           }
844           else
845           {
846                 PopupMenu defPopup = myView3d.getDefaultPopup();
847                 myView3d.add(defPopup);
848                 defPopup.show(myView3d, e.getX(), e.getY() + 30);
849           }
850         }
851         else
852         {
853                 PopupMenu defPopup = myView3d.getDefaultPopup();
854                 myView3d.add(defPopup);
855                 defPopup.show(myView3d, e.getX(), e.getY() + 30);
856         }
857       }
858       else if (e.getSource() == myView2d)
859       {
860         PopupMenu defPopup = myView2d.getDefaultPopup();
861         myView2d.add(defPopup);
862         defPopup.show(myView2d, e.getX(), e.getY() + 30);
863       }
864     }
865   }
866
867   public void mouseReleased(MouseEvent e)
868   {
869     if (SwingUtilities.isLeftMouseButton(e))
870     {
871       Object src = e.getSource();
872
873       if (Dragged)
874       {
875         if (src == myView3d)
876         {
877           V3d_View view3d = ((CASCADEView3d) myView3d.getViewPort()).getView();
878           if (view3d != null)
879           {
880             if (e.isShiftDown())
881               myAISContext.ShiftSelect(startX, startY, e.getX(), e.getY(), view3d, true);
882             else
883               myAISContext.Select(startX, startY, e.getX(), e.getY(), view3d, true);
884             updateButtons();
885           }
886         }
887         if (src == myView2d)
888         {
889           V2d_View view2d = ((CASCADEView2d) myView2d.getViewPort()).getView();
890           if (view2d != null)
891           {
892             myInteractiveContext.Move(startX, startY, e.getX(), e.getY(), view2d);
893             myInteractiveContext.Pick(e.isShiftDown());
894           }
895         }
896       }
897       else
898       {
899         if (src == myView3d)
900         {
901           if (e.isShiftDown())
902             myAISContext.ShiftSelect(true);
903           else
904             myAISContext.Select(true);
905           updateButtons();
906         }
907         if (src == myView2d)
908         {
909           myInteractiveContext.Pick(e.isShiftDown());
910         }
911       }
912       Dragged = false;
913     }
914   }
915
916   public void mouseEntered(MouseEvent e)
917   {
918   }
919
920   public void mouseExited(MouseEvent e)
921   {
922   }
923
924 //=======================================================================//
925 // MouseMotionListener interface
926 //=======================================================================//
927   public void mouseDragged(MouseEvent e)
928   {
929     if (SwingUtilities.isLeftMouseButton(e))
930     {
931       Object src = e.getSource();
932       Dragged = true;
933     }
934   }
935
936   public void mouseMoved(MouseEvent e)
937   {
938     Object src = e.getSource();
939
940     if (src == myView3d)
941     {
942       V3d_View view3d = ((CASCADEView3d) myView3d.getViewPort()).getView();
943       if (myAISContext != null && view3d != null)
944         myAISContext.MoveTo(e.getX(), e.getY(), view3d);
945     }
946     if (src == myView2d)
947     {
948       V2d_View view2d = ((CASCADEView2d) myView2d.getViewPort()).getView();
949       if (myInteractiveContext != null && view2d != null)
950         myInteractiveContext.Move(e.getX(), e.getY(), view2d);
951     }
952   }
953
954 }
955
956
957