Integration of OCCT 6.5.0 from SVN
[occt.git] / samples / java / java / SampleImportExportPanel.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 SampleImportExportJni.*;
20 import util.*;
21
22 public class SampleImportExportPanel extends SamplePanel
23                                  implements ActionListener,
24                                             MouseListener,
25                                             MouseMotionListener
26 {
27   //-----------------------------------------------------------//
28   // Resources
29   //-----------------------------------------------------------//
30   static protected ResourceBundle resGui =
31          ResourceBundle.getBundle("SampleImportExport");
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 imgImportCSFDB = new ImageIcon(resGui.getString("Icon-ImportCSFDB"));
36   static protected ImageIcon imgExportCSFDB = new ImageIcon(resGui.getString("Icon-ExportCSFDB"));
37   static protected ImageIcon imgImportSTEP = new ImageIcon(resGui.getString("Icon-ImportSTEP"));
38   static protected ImageIcon imgExportSTEP = new ImageIcon(resGui.getString("Icon-ExportSTEP"));
39   static protected ImageIcon imgImportIGES = new ImageIcon(resGui.getString("Icon-ImportIGES"));
40   static protected ImageIcon imgExportIGES = new ImageIcon(resGui.getString("Icon-ExportIGES"));
41   static protected ImageIcon imgExportImage = new ImageIcon(resGui.getString("Icon-ExportImage"));
42   static protected ImageIcon imgWireframe = new ImageIcon(resGui.getString("Icon-Wireframe"));
43   static protected ImageIcon imgShading = new ImageIcon(resGui.getString("Icon-Shading"));
44   static protected ImageIcon imgColor = new ImageIcon(resGui.getString("Icon-Color"));
45   static protected ImageIcon imgMaterial = new ImageIcon(resGui.getString("Icon-Material"));
46   static protected ImageIcon imgTransparency = new ImageIcon(resGui.getString("Icon-Transparency"));
47   static protected ImageIcon imgErase = new ImageIcon(resGui.getString("Icon-Erase"));
48
49
50   //-----------------------------------------------------------//
51   // Components
52   //-----------------------------------------------------------//
53   private static ViewPanel myView3d;
54
55   private static V3d_Viewer myViewer3d = null;
56   private static AIS_InteractiveContext myAISContext = null;
57
58   private int startX = 0, startY = 0;
59   private boolean Dragged = false;
60
61   /** Directory path selected by user for the last time. */
62   private File curPath = new File(System.getProperty("user.dir") + "/../../../../data");
63   private File curPathOcc = new File(curPath + "/occ");
64   private File curPathCsfdb = new File(curPath + "/csfdb");
65   private File curPathIges = new File(curPath + "/iges");
66   private File curPathStep = new File(curPath + "/step");
67   private File curPathImage = new File(curPath + "/images");
68
69   /** Object(s) popup menu */
70   private PopupMenu myPopup;
71
72   /** Toolbar buttons */
73   private JButton btnWireframe;
74   private JButton btnShading;
75   private JButton btnColor;
76   private JButton btnMaterial;
77   private JButton btnTransparency;
78   private JButton btnErase;
79
80
81   //-----------------------------------------------------------//
82   // External access
83   //-----------------------------------------------------------//
84   public static V3d_Viewer getViewer3d()
85   {
86     return myViewer3d;
87   }
88
89   public static AIS_InteractiveContext getAISContext()
90   {
91     return myAISContext;
92   }
93
94
95 //=======================================================================//
96 //                             Constructor                               //
97 //=======================================================================//
98   public SampleImportExportPanel()
99   {
100     super(false);
101
102     // 3D Initialization
103     //------------------------------------------
104     myViewer3d.SetDefaultLights();
105     myViewer3d.SetLightOn();
106
107     if (myAISContext == null)
108       myAISContext = new AIS_InteractiveContext(myViewer3d);
109
110     myPopup = createObjectPopup();
111     updateButtons();
112   }
113
114 //-----------------------------------------------------------------------//
115   public JPanel createViewPanel()
116   {
117     JPanel mainPanel = new JPanel();
118     mainPanel.setLayout(new GridBagLayout());
119     mainPanel.setBorder(BorderFactory.createEmptyBorder(0, 5, 5, 0));
120
121
122     // Viewer 3D
123     //------------------------------------------
124     myViewer3d = SampleImportExportPackage.CreateViewer3d("ImportExport");
125
126     myView3d = new ViewPanel() {
127         public ViewCanvas createViewPort()
128         {
129           return new CASCADEView3d(SampleImportExportPanel.getViewer3d()) {
130               public void setWindow3d(V3d_View view, int hiwin, int lowin) {
131                 SampleImportExportPackage.SetWindow3d(view, hiwin, lowin);
132               }
133           };
134         }
135     };
136    
137     myView3d.addMouseListener(this);
138     myView3d.addMouseMotionListener(this);
139
140
141     // Layout
142     //------------------------------------------
143     mainPanel.add(myView3d, new GridBagConstraints(0, 0, 1, 1, 1.0, 1.0,
144             GridBagConstraints.CENTER, GridBagConstraints.BOTH,
145             new Insets(0, 0, 0, 0), 0, 0));
146
147     return mainPanel;
148   }
149
150 //-----------------------------------------------------------------------//
151   public Component createToolbar()
152   {
153     JToolBar tools = (JToolBar) super.createToolbar();
154
155     Insets margin = new Insets(1, 1, 1, 1);
156     JButton button;
157
158     button = new HeavyButton(imgImportBrep);
159     button.setToolTipText(resGui.getString("Help-ImportBREP"));
160     button.setActionCommand("ImportBREP");
161     button.addActionListener(this);
162     button.setMargin(margin);
163     tools.add(button);
164
165     button = new HeavyButton(imgImportCSFDB);
166     button.setToolTipText(resGui.getString("Help-ImportCSFDB"));
167     button.setActionCommand("ImportCSFDB");
168     button.addActionListener(this);
169     button.setMargin(margin);
170     tools.add(button);
171
172     button = new HeavyButton(imgImportSTEP);
173     button.setToolTipText(resGui.getString("Help-ImportSTEP"));
174     button.setActionCommand("ImportSTEP");
175     button.addActionListener(this);
176     button.setMargin(margin);
177     tools.add(button);
178
179     button = new HeavyButton(imgImportIGES);
180     button.setToolTipText(resGui.getString("Help-ImportIGES"));
181     button.setActionCommand("ImportIGES");
182     button.addActionListener(this);
183     button.setMargin(margin);
184     tools.add(button);
185
186     tools.addSeparator();
187
188     button = new HeavyButton(imgExportBrep);
189     button.setToolTipText(resGui.getString("Help-ExportBREP"));
190     button.setActionCommand("ExportBREP");
191     button.addActionListener(this);
192     button.setMargin(margin);
193     tools.add(button);
194
195     button = new HeavyButton(imgExportCSFDB);
196     button.setToolTipText(resGui.getString("Help-ExportCSFDB"));
197     button.setActionCommand("ExportCSFDB");
198     button.addActionListener(this);
199     button.setMargin(margin);
200     tools.add(button);
201
202     button = new HeavyButton(imgExportSTEP);
203     button.setToolTipText(resGui.getString("Help-ExportSTEP"));
204     button.setActionCommand("ExportSTEP");
205     button.addActionListener(this);
206     button.setMargin(margin);
207     tools.add(button);
208
209     button = new HeavyButton(imgExportIGES);
210     button.setToolTipText(resGui.getString("Help-ExportIGES"));
211     button.setActionCommand("ExportIGES");
212     button.addActionListener(this);
213     button.setMargin(margin);
214     tools.add(button);
215
216     button = new HeavyButton(imgExportImage);
217     button.setToolTipText(resGui.getString("Help-ExportImage"));
218     button.setActionCommand("ExportImage");
219     button.addActionListener(this);
220     button.setMargin(margin);
221     tools.add(button);
222
223     tools.addSeparator();
224
225     btnWireframe = new HeavyButton(imgWireframe);
226     btnWireframe.setToolTipText(resGui.getString("Help-Wireframe"));
227     btnWireframe.setActionCommand("Wireframe");
228     btnWireframe.addActionListener(this);
229     btnWireframe.setMargin(margin);
230     tools.add(btnWireframe);
231
232     btnShading = new HeavyButton(imgShading);
233     btnShading.setToolTipText(resGui.getString("Help-Shading"));
234     btnShading.setActionCommand("Shading");
235     btnShading.addActionListener(this);
236     btnShading.setMargin(margin);
237     tools.add(btnShading);
238
239     tools.addSeparator();
240
241     btnColor = new HeavyButton(imgColor);
242     btnColor.setToolTipText(resGui.getString("Help-Color"));
243     btnColor.setActionCommand("Color");
244     btnColor.addActionListener(this);
245     btnColor.setMargin(margin);
246     tools.add(btnColor);
247
248     btnMaterial = new HeavyButton(imgMaterial);
249     btnMaterial.setToolTipText(resGui.getString("Help-Material"));
250     btnMaterial.setActionCommand("Material");
251     btnMaterial.addActionListener(this);
252     btnMaterial.setMargin(margin);
253     tools.add(btnMaterial);
254
255     btnTransparency = new HeavyButton(imgTransparency);
256     btnTransparency.setToolTipText(resGui.getString("Help-Transparency"));
257     btnTransparency.setActionCommand("Transparency");
258     btnTransparency.addActionListener(this);
259     btnTransparency.setMargin(margin);
260     tools.add(btnTransparency);
261
262     tools.addSeparator();
263
264     btnErase = new HeavyButton(imgErase);
265     btnErase.setToolTipText(resGui.getString("Help-Erase"));
266     btnErase.setActionCommand("Erase");
267     btnErase.addActionListener(this);
268     btnErase.setMargin(margin);
269     tools.add(btnErase);
270
271     return tools;
272   }
273
274 //-----------------------------------------------------------------------//
275   public PopupMenu createObjectPopup()
276   {
277     PopupMenu popup = new PopupMenu("Object(s)");
278
279     MenuItem menuItem = new MenuItem("Wireframe");
280     menuItem.setActionCommand("Wireframe");
281     menuItem.addActionListener(this);
282     popup.add(menuItem);
283
284     menuItem = new MenuItem("Shading");
285     menuItem.setActionCommand("Shading");
286     menuItem.addActionListener(this);
287     popup.add(menuItem);
288
289     menuItem = new MenuItem("Color...");
290     menuItem.setActionCommand("Color");
291     menuItem.addActionListener(this);
292     popup.add(menuItem);
293
294     Menu menu = new Menu("Material");
295
296     menuItem = new MenuItem("Brass");
297     menuItem.setActionCommand("MaterialBrass");
298     menuItem.addActionListener(this);
299     menu.add(menuItem);
300
301     menuItem = new MenuItem("Bronze");
302     menuItem.setActionCommand("MaterialBronze");
303     menuItem.addActionListener(this);
304     menu.add(menuItem);
305
306     menuItem = new MenuItem("Copper");
307     menuItem.setActionCommand("MaterialCopper");
308     menuItem.addActionListener(this);
309     menu.add(menuItem);
310
311     menuItem = new MenuItem("Gold");
312     menuItem.setActionCommand("MaterialGold");
313     menuItem.addActionListener(this);
314     menu.add(menuItem);
315
316     menuItem = new MenuItem("Pewter");
317     menuItem.setActionCommand("MaterialPewter");
318     menuItem.addActionListener(this);
319     menu.add(menuItem);
320
321     menuItem = new MenuItem("Plaster");
322     menuItem.setActionCommand("MaterialPlaster");
323     menuItem.addActionListener(this);
324     menu.add(menuItem);
325
326     menuItem = new MenuItem("Plastic");
327     menuItem.setActionCommand("MaterialPlastic");
328     menuItem.addActionListener(this);
329     menu.add(menuItem);
330
331     menuItem = new MenuItem("Silver");
332     menuItem.setActionCommand("MaterialSilver");
333     menuItem.addActionListener(this);
334     menu.add(menuItem);
335
336     popup.add(menu);
337
338     menuItem = new MenuItem("Transparency...");
339     menuItem.setActionCommand("Transparency");
340     menuItem.addActionListener(this);
341     popup.add(menuItem);
342
343     menuItem = new MenuItem("Erase");
344     menuItem.setActionCommand("Erase");
345     menuItem.addActionListener(this);
346     popup.add(menuItem);
347
348     return popup;
349   }
350
351
352 //=======================================================================//
353 //                              Actions                                  //
354 //=======================================================================//
355   private void updateButtons()
356   {
357     if (myAISContext != null)
358     {
359       myAISContext.InitCurrent();
360       if (myAISContext.MoreCurrent())
361       {
362         btnWireframe.setEnabled(true);
363         btnShading.setEnabled(true);
364         btnColor.setEnabled(true);
365         btnMaterial.setEnabled(true);
366         btnTransparency.setEnabled(true);
367         btnErase.setEnabled(true);
368       }
369       else
370       {
371         btnWireframe.setEnabled(false);
372         btnShading.setEnabled(false);
373         btnColor.setEnabled(false);
374         btnMaterial.setEnabled(false);
375         btnTransparency.setEnabled(false);
376         btnErase.setEnabled(false);
377       }
378     }
379   }
380
381 //=======================================================================//
382   public void onImportBREP()
383   {
384     // Select file to open
385     JFileChooser aDlg = new JFileChooser();
386                 aDlg.setFileSelectionMode(JFileChooser.FILES_ONLY);
387
388     // Setting file filters
389     String[] fltExt = {"brep", "rle"};
390     ExtensionFileFilter flt = new ExtensionFileFilter(fltExt, "BREP files");
391     aDlg.setFileFilter(flt);
392
393     System.out.println("Current path = " + curPath);
394
395     System.out.println("DATADIR path = " + curPathOcc);
396
397     // Setting dialog properties
398     aDlg.setCurrentDirectory(curPathOcc);
399     aDlg.setDialogTitle("Import BREP");
400     aDlg.setApproveButtonText("Import");
401     aDlg.setApproveButtonMnemonic('i');
402     aDlg.setApproveButtonToolTipText("Import BRep from the selected file");
403
404     // Show the dialog
405     int returnVal = aDlg.showDialog(this, "Import");
406
407     if (returnVal == JFileChooser.APPROVE_OPTION)
408     {
409       String name = aDlg.getSelectedFile().getAbsolutePath();
410       curPathOcc = aDlg.getCurrentDirectory();
411
412       // Checking extention
413       FileFilter curFlt = aDlg.getFileFilter();
414       if (curFlt instanceof ExtensionFileFilter)
415       {
416         ExtensionFileFilter extFlt = (ExtensionFileFilter) curFlt;
417         String ext = extFlt.getExtension(name);
418         if (ext == null)
419         {
420           String[] extentions = extFlt.getExtensions();
421           if (extentions != null)
422           {
423             if (name.endsWith("."))
424               name = name + extentions[0];
425             else
426               name = name + "." + extentions[0];
427           }
428         }
429       }
430
431       // Load selected file
432       SamplesStarter.getFrame().setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));
433       boolean result = SampleImportExportPackage.ReadBREP(new Standard_CString(name),
434                                                           myAISContext);
435       SamplesStarter.getFrame().setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
436       if (!result)
437         JOptionPane.showMessageDialog(this, "Error loading file " + name,
438                 "CASCADE", JOptionPane.ERROR_MESSAGE);
439     }
440   }
441
442 //=======================================================================//
443   public void onExportBREP()
444   {
445     // Get file name
446     JFileChooser aDlg = new JFileChooser();
447                 aDlg.setFileSelectionMode(JFileChooser.FILES_ONLY);
448
449     // Setting file filters
450     String[] fltExt = {"brep", "rle"};
451     ExtensionFileFilter fltBrep = new ExtensionFileFilter(fltExt, "BREP files");
452     aDlg.setFileFilter(fltBrep);
453
454     // Setting dialog properties
455     aDlg.setCurrentDirectory(curPathOcc);
456     aDlg.setDialogTitle("Export BREP");
457     aDlg.setApproveButtonText("Export");
458     aDlg.setApproveButtonMnemonic('e');
459     aDlg.setApproveButtonToolTipText("Export shape into selected file");
460
461     // Show the dialog
462     int returnVal = aDlg.showDialog(this, "Export");
463
464     if (returnVal == JFileChooser.APPROVE_OPTION)
465     {
466       String name = aDlg.getSelectedFile().getAbsolutePath();
467       curPathOcc = aDlg.getCurrentDirectory();
468
469       // Checking extention
470       FileFilter curFlt = aDlg.getFileFilter();
471       if (curFlt instanceof ExtensionFileFilter)
472       {
473         ExtensionFileFilter extFlt = (ExtensionFileFilter) curFlt;
474         String ext = extFlt.getExtension(name);
475         if (ext == null)
476         {
477           String[] extentions = extFlt.getExtensions();
478           if (extentions != null)
479           {
480             if (name.endsWith("."))
481               name = name + extentions[0];
482             else
483               name = name + "." + extentions[0];
484           }
485         }
486       }
487
488       SamplesStarter.getFrame().setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));
489       boolean result = SampleImportExportPackage.SaveBREP(new Standard_CString(name),
490                                                           myAISContext);
491       SamplesStarter.getFrame().setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
492       if (!result)
493         JOptionPane.showMessageDialog(this, "The shape or shapes were not saved",
494                 "CASCADE", JOptionPane.ERROR_MESSAGE);
495     }
496   }
497
498 //=======================================================================//
499   public void onImportCSFDB()
500   {
501     // Select file to open
502     JFileChooser aDlg = new JFileChooser();
503                 aDlg.setFileSelectionMode(JFileChooser.FILES_ONLY);
504
505     // Setting file filters
506     String[] fltExt = {"csfdb", "csf"};
507     ExtensionFileFilter flt = new ExtensionFileFilter(fltExt, "CSFDB files");
508     aDlg.setFileFilter(flt);
509
510     // Setting dialog properties
511     aDlg.setCurrentDirectory(curPathCsfdb);
512     aDlg.setDialogTitle("Import CSFDB");
513     aDlg.setApproveButtonText("Import");
514     aDlg.setApproveButtonMnemonic('i');
515     aDlg.setApproveButtonToolTipText("Import CSFDB from the selected file");
516
517     // Show the dialog
518     int returnVal = aDlg.showDialog(this, "Import");
519
520     if (returnVal == JFileChooser.APPROVE_OPTION)
521     {
522       String name = aDlg.getSelectedFile().getAbsolutePath();
523       curPathCsfdb = aDlg.getCurrentDirectory();
524
525       // Checking extention
526       FileFilter curFlt = aDlg.getFileFilter();
527       if (curFlt instanceof ExtensionFileFilter)
528       {
529         ExtensionFileFilter extFlt = (ExtensionFileFilter) curFlt;
530         String ext = extFlt.getExtension(name);
531         if (ext == null)
532         {
533           String[] extentions = extFlt.getExtensions();
534           if (extentions != null)
535           {
536             if (name.endsWith("."))
537               name = name + extentions[0];
538             else
539               name = name + "." + extentions[0];
540           }
541         }
542       }
543
544       // Load selected file
545       TCollection_AsciiString aMessage = new TCollection_AsciiString();
546       SamplesStarter.getFrame().setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));
547       boolean result = SampleImportExportPackage.ReadCSFDB(new Standard_CString(name),
548                                                            myAISContext, aMessage);
549       SamplesStarter.getFrame().setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
550       if (result)
551         JOptionPane.showMessageDialog(this, aMessage.ToCString().GetValue(),
552                 "CASCADE", JOptionPane.INFORMATION_MESSAGE);
553       else
554         JOptionPane.showMessageDialog(this, aMessage.ToCString().GetValue(),
555                 "CASCADE", JOptionPane.ERROR_MESSAGE);
556     }
557   }
558
559 //=======================================================================//
560   public void onExportCSFDB()
561   {
562     // Get file name
563     JFileChooser aDlg = new JFileChooser();
564                 aDlg.setFileSelectionMode(JFileChooser.FILES_ONLY);
565
566     // Setting file filters
567     String[] fltExt = {"csfdb", "csf"};
568     ExtensionFileFilter fltBrep = new ExtensionFileFilter(fltExt, "CSFDB files");
569     aDlg.setFileFilter(fltBrep);
570
571     // Setting dialog properties
572     aDlg.setCurrentDirectory(curPathCsfdb);
573     aDlg.setDialogTitle("Export CSFDB");
574     aDlg.setApproveButtonText("Export");
575     aDlg.setApproveButtonMnemonic('e');
576     aDlg.setApproveButtonToolTipText("Export shape into selected file");
577
578     // Show the dialog
579     int returnVal = aDlg.showDialog(this, "Export");
580
581     if (returnVal == JFileChooser.APPROVE_OPTION)
582     {
583       String name = aDlg.getSelectedFile().getAbsolutePath();
584       curPathCsfdb = aDlg.getCurrentDirectory();
585
586       // Checking extention
587       FileFilter curFlt = aDlg.getFileFilter();
588       if (curFlt instanceof ExtensionFileFilter)
589       {
590         ExtensionFileFilter extFlt = (ExtensionFileFilter) curFlt;
591         String ext = extFlt.getExtension(name);
592         if (ext == null)
593         {
594           String[] extentions = extFlt.getExtensions();
595           if (extentions != null)
596           {
597             if (name.endsWith("."))
598               name = name + extentions[0];
599             else
600               name = name + "." + extentions[0];
601           }
602         }
603       }
604
605       SamplesStarter.getFrame().setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));
606       TCollection_AsciiString aMessage = new TCollection_AsciiString();
607       boolean result = SampleImportExportPackage.SaveCSFDB(new Standard_CString(name),
608               myAISContext, aMessage, MgtBRep_TriangleMode.MgtBRep_WithTriangle);
609       SamplesStarter.getFrame().setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
610       if (result)
611         JOptionPane.showMessageDialog(this, aMessage.ToCString().GetValue(),
612                 "CASCADE", JOptionPane.INFORMATION_MESSAGE);
613       else
614         JOptionPane.showMessageDialog(this, aMessage.ToCString().GetValue(),
615                 "CASCADE", JOptionPane.ERROR_MESSAGE);
616     }
617   }
618
619 //=======================================================================//
620   public void onImportSTEP()
621   {
622     // Select file to open
623     JFileChooser aDlg = new JFileChooser();
624                 aDlg.setFileSelectionMode(JFileChooser.FILES_ONLY);
625
626     // Setting file filters
627     String[] fltExt = {"step", "stp"};
628     ExtensionFileFilter flt = new ExtensionFileFilter(fltExt, "STEP files");
629     aDlg.setFileFilter(flt);
630
631     // Setting dialog properties
632     aDlg.setCurrentDirectory(curPathStep);
633     aDlg.setDialogTitle("Import STEP");
634     aDlg.setApproveButtonText("Import");
635     aDlg.setApproveButtonMnemonic('i');
636     aDlg.setApproveButtonToolTipText("Import STEP from the selected file");
637
638     // Show the dialog
639     int returnVal = aDlg.showDialog(this, "Import");
640
641     if (returnVal == JFileChooser.APPROVE_OPTION)
642     {
643       String name = aDlg.getSelectedFile().getAbsolutePath();
644       curPathStep = aDlg.getCurrentDirectory();
645
646       // Checking extention
647       FileFilter curFlt = aDlg.getFileFilter();
648       if (curFlt instanceof ExtensionFileFilter)
649       {
650         ExtensionFileFilter extFlt = (ExtensionFileFilter) curFlt;
651         String ext = extFlt.getExtension(name);
652         if (ext == null)
653         {
654           String[] extentions = extFlt.getExtensions();
655           if (extentions != null)
656           {
657             if (name.endsWith("."))
658               name = name + extentions[0];
659             else
660               name = name + "." + extentions[0];
661           }
662         }
663       }
664
665       // Load selected file
666       SamplesStarter.getFrame().setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));
667       int result = SampleImportExportPackage.ReadSTEP(new Standard_CString(name),
668                                                       myAISContext);
669       SamplesStarter.getFrame().setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
670       switch(result)
671       {
672         case IFSelect_ReturnStatus.IFSelect_RetError:
673           JOptionPane.showMessageDialog(this, "Not a valid Step file",
674                 "CASCADE", JOptionPane.ERROR_MESSAGE);
675           break;
676         case IFSelect_ReturnStatus.IFSelect_RetFail:
677           JOptionPane.showMessageDialog(this, "Reading has failed",
678                 "CASCADE", JOptionPane.ERROR_MESSAGE);
679           break;
680         case IFSelect_ReturnStatus.IFSelect_RetVoid:
681           JOptionPane.showMessageDialog(this, "Nothing to transfer",
682                 "CASCADE", JOptionPane.ERROR_MESSAGE);
683           break;
684       }
685     }
686   }
687
688 //=======================================================================//
689   public void onExportSTEP()
690   {
691     // Get file name
692     JFileChooser aDlg = new JFileChooser();
693                 aDlg.setFileSelectionMode(JFileChooser.FILES_ONLY);
694
695     // Setting file filters
696     String[] fltExt = {"step", "stp"};
697     ExtensionFileFilter fltBrep = new ExtensionFileFilter(fltExt, "STEP files");
698     aDlg.setFileFilter(fltBrep);
699
700     // Setting dialog properties
701     aDlg.setCurrentDirectory(curPathStep);
702     aDlg.setDialogTitle("Export STEP");
703     aDlg.setApproveButtonText("Export");
704     aDlg.setApproveButtonMnemonic('e');
705     aDlg.setApproveButtonToolTipText("Export shape into selected file");
706
707     // Show the dialog
708     int returnVal = aDlg.showDialog(this, "Export");
709
710     if (returnVal == JFileChooser.APPROVE_OPTION)
711     {
712       String name = aDlg.getSelectedFile().getAbsolutePath();
713       curPathStep = aDlg.getCurrentDirectory();
714
715       // Checking extention
716       FileFilter curFlt = aDlg.getFileFilter();
717       if (curFlt instanceof ExtensionFileFilter)
718       {
719         ExtensionFileFilter extFlt = (ExtensionFileFilter) curFlt;
720         String ext = extFlt.getExtension(name);
721         if (ext == null)
722         {
723           String[] extentions = extFlt.getExtensions();
724           if (extentions != null)
725           {
726             if (name.endsWith("."))
727               name = name + extentions[0];
728             else
729               name = name + "." + extentions[0];
730           }
731         }
732       }
733
734       SamplesStarter.getFrame().setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));
735       int result = SampleImportExportPackage.SaveSTEP(new Standard_CString(name),
736               myAISContext, STEPControl_StepModelType.STEPControl_AsIs);
737       SamplesStarter.getFrame().setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
738       switch (result)
739       {
740         case IFSelect_ReturnStatus.IFSelect_RetError:
741           JOptionPane.showMessageDialog(this, "Incorrect Data",
742                 "CASCADE", JOptionPane.ERROR_MESSAGE);
743           break;
744         case IFSelect_ReturnStatus.IFSelect_RetFail:
745           JOptionPane.showMessageDialog(this, "Writing has failed",
746                 "CASCADE", JOptionPane.ERROR_MESSAGE);
747           break;
748         case IFSelect_ReturnStatus.IFSelect_RetVoid:
749           JOptionPane.showMessageDialog(this, "Nothing to transfer",
750                 "CASCADE", JOptionPane.ERROR_MESSAGE);
751           break;
752       }
753     }
754   }
755
756 //=======================================================================//
757   public void onImportIGES()
758   {
759     // Select file to open
760     JFileChooser aDlg = new JFileChooser();
761                 aDlg.setFileSelectionMode(JFileChooser.FILES_ONLY);
762
763     // Setting file filters
764     String[] fltExt = {"iges", "igs"};
765     ExtensionFileFilter flt = new ExtensionFileFilter(fltExt, "IGES files");
766     aDlg.setFileFilter(flt);
767
768     // Setting dialog properties
769     aDlg.setCurrentDirectory(curPathIges);
770     aDlg.setDialogTitle("Import IGES");
771     aDlg.setApproveButtonText("Import");
772     aDlg.setApproveButtonMnemonic('i');
773     aDlg.setApproveButtonToolTipText("Import IGES from the selected file");
774
775     // Show the dialog
776     int returnVal = aDlg.showDialog(this, "Import");
777
778     if (returnVal == JFileChooser.APPROVE_OPTION)
779     {
780       String name = aDlg.getSelectedFile().getAbsolutePath();
781       curPathIges = aDlg.getCurrentDirectory();
782
783       // Checking extention
784       FileFilter curFlt = aDlg.getFileFilter();
785       if (curFlt instanceof ExtensionFileFilter)
786       {
787         ExtensionFileFilter extFlt = (ExtensionFileFilter) curFlt;
788         String ext = extFlt.getExtension(name);
789         if (ext == null)
790         {
791           String[] extentions = extFlt.getExtensions();
792           if (extentions != null)
793           {
794             if (name.endsWith("."))
795               name = name + extentions[0];
796             else
797               name = name + "." + extentions[0];
798           }
799         }
800       }
801
802       // Load selected file
803       SamplesStarter.getFrame().setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));
804       int result = SampleImportExportPackage.ReadIGES(new Standard_CString(name),
805                                                       myAISContext);
806       SamplesStarter.getFrame().setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
807       if (result != IFSelect_ReturnStatus.IFSelect_RetDone)
808         JOptionPane.showMessageDialog(this, "Error loading file " + name,
809                 "CASCADE", JOptionPane.ERROR_MESSAGE);
810     }
811   }
812
813 //=======================================================================//
814   public void onExportIGES()
815   {
816     // Get file name
817     JFileChooser aDlg = new JFileChooser();
818                 aDlg.setFileSelectionMode(JFileChooser.FILES_ONLY);
819
820     // Setting file filters
821     String[] fltExt = {"iges", "igs"};
822     ExtensionFileFilter fltBrep = new ExtensionFileFilter(fltExt, "IGES files");
823     aDlg.setFileFilter(fltBrep);
824
825     // Setting dialog properties
826     aDlg.setCurrentDirectory(curPathIges);
827     aDlg.setDialogTitle("Export IGES");
828     aDlg.setApproveButtonText("Export");
829     aDlg.setApproveButtonMnemonic('e');
830     aDlg.setApproveButtonToolTipText("Export shape into selected file");
831
832     // Show the dialog
833     int returnVal = aDlg.showDialog(this, "Export");
834
835     if (returnVal == JFileChooser.APPROVE_OPTION)
836     {
837       String name = aDlg.getSelectedFile().getAbsolutePath();
838       curPathIges = aDlg.getCurrentDirectory();
839
840       // Checking extention
841       FileFilter curFlt = aDlg.getFileFilter();
842       if (curFlt instanceof ExtensionFileFilter)
843       {
844         ExtensionFileFilter extFlt = (ExtensionFileFilter) curFlt;
845         String ext = extFlt.getExtension(name);
846         if (ext == null)
847         {
848           String[] extentions = extFlt.getExtensions();
849           if (extentions != null)
850           {
851             if (name.endsWith("."))
852               name = name + extentions[0];
853             else
854               name = name + "." + extentions[0];
855           }
856         }
857       }
858
859       SamplesStarter.getFrame().setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));
860       boolean result = SampleImportExportPackage.SaveIGES(new Standard_CString(name),
861                                                           myAISContext);
862       SamplesStarter.getFrame().setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
863       if (!result)
864         JOptionPane.showMessageDialog(this, "The shape or shapes were not saved",
865                 "CASCADE", JOptionPane.ERROR_MESSAGE);
866     }
867   }
868
869 //=======================================================================//
870   public void onExportImage()
871   {
872     // Get file name
873     JFileChooser aDlg = new JFileChooser();
874                 aDlg.setFileSelectionMode(JFileChooser.FILES_ONLY);
875
876     // Setting file filters
877     ExtensionFileFilter fltBmp = new ExtensionFileFilter("bmp", "BMP files");
878     aDlg.addChoosableFileFilter(fltBmp);
879     ExtensionFileFilter fltGif = new ExtensionFileFilter("gif", "GIF files");
880     aDlg.addChoosableFileFilter(fltGif);
881     ExtensionFileFilter fltXwd = new ExtensionFileFilter("xwd", "XWD files");
882     aDlg.addChoosableFileFilter(fltXwd);
883
884     aDlg.setFileFilter(fltBmp);
885
886     // Setting dialog properties
887     aDlg.setCurrentDirectory(curPathImage);
888     aDlg.setDialogTitle("Export Image");
889     aDlg.setApproveButtonText("Export");
890     aDlg.setApproveButtonMnemonic('e');
891     aDlg.setApproveButtonToolTipText("Export image into selected file");
892
893     // Show the dialog
894     int returnVal = aDlg.showDialog(this, "Export");
895
896     if (returnVal == JFileChooser.APPROVE_OPTION)
897     {
898       String name = aDlg.getSelectedFile().getAbsolutePath();
899       curPathImage = aDlg.getCurrentDirectory();
900
901       // Checking extention
902       FileFilter curFlt = aDlg.getFileFilter();
903       if (curFlt instanceof ExtensionFileFilter)
904       {
905         ExtensionFileFilter extFlt = (ExtensionFileFilter) curFlt;
906         String ext = extFlt.getExtension(name);
907         if (ext == null)
908         {
909           String[] extentions = extFlt.getExtensions();
910           if (extentions != null)
911           {
912             if (name.endsWith("."))
913               name = name + extentions[0];
914             else
915               name = name + "." + extentions[0];
916           }
917         }
918       }
919
920       SamplesStarter.getFrame().setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));
921       String format = name.substring(name.lastIndexOf(".")+1);
922       V3d_View view3d = ((CASCADEView3d) myView3d.getViewPort()).getView();
923       SampleImportExportPackage.SaveImage(new Standard_CString(name),
924               new Standard_CString(format), view3d);
925       SamplesStarter.getFrame().setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
926     }
927   }
928
929 //=======================================================================//
930   public void onWireframe()
931   {
932     if (myAISContext != null)
933     {
934       for (myAISContext.InitCurrent(); myAISContext.MoreCurrent();
935            myAISContext.NextCurrent())
936         myAISContext.SetDisplayMode(myAISContext.Current(), 0, true);
937     }
938   }
939
940 //=======================================================================//
941   public void onShading()
942   {
943     if (myAISContext != null)
944     {
945       for (myAISContext.InitCurrent(); myAISContext.MoreCurrent();
946            myAISContext.NextCurrent())
947         myAISContext.SetDisplayMode(myAISContext.Current(), 1, true);
948     }
949   }
950
951 //=======================================================================//
952   public void onColor()
953   {
954     if (myAISContext != null)
955     {
956       myAISContext.InitCurrent();
957       if (myAISContext.MoreCurrent())
958       {
959         Color theColor;
960         if (myAISContext.Current().HasColor())
961         {
962           Quantity_Color aColor =
963               new Quantity_Color(myAISContext.Color(myAISContext.Current()));
964           int red = (int) (aColor.Red()*255);
965           int green = (int) (aColor.Green()*255);
966           int blue = (int) (aColor.Blue()*255);
967           theColor = new Color(red, green, blue);
968         }
969         else
970           theColor = Color.white;
971
972         Color theNewColor = JColorChooser.showDialog(SamplesStarter.getFrame(),
973                                                  "Choose the color", theColor);
974
975         if (theNewColor != null)
976         {
977           Quantity_Color aNewColor = new Quantity_Color(theNewColor.getRed()/255.,
978                                     theNewColor.getGreen()/255.,
979                                                     theNewColor.getBlue()/255.,
980                                                     Quantity_TypeOfColor.Quantity_TOC_RGB);
981           for (myAISContext.InitCurrent(); myAISContext.MoreCurrent();
982                myAISContext.NextCurrent())
983             myAISContext.SetColor(myAISContext.Current(), aNewColor, true);
984         }
985       }
986     }
987   }
988
989 //=======================================================================//
990   public void onMaterial()
991   {
992     MaterialDlg theDlg = new MaterialDlg(SamplesStarter.getFrame(), myAISContext);
993     Position.centerWindow(theDlg);
994     theDlg.show();
995   }
996
997 //=======================================================================//
998   public void setMaterial(int material)
999   {
1000     if (myAISContext != null)
1001     {
1002       for (myAISContext.InitCurrent(); myAISContext.MoreCurrent();
1003            myAISContext.NextCurrent())
1004         myAISContext.SetMaterial(myAISContext.Current(), (short)material, true);
1005     }
1006   }
1007
1008 //=======================================================================//
1009   public void onTransparency()
1010   {
1011     if (myAISContext != null)
1012     {
1013       myAISContext.InitCurrent();
1014       if (myAISContext.MoreCurrent())
1015       {
1016         double aValue = myAISContext.Current().Transparency();
1017
1018         TransparencyDlg aDlg = new TransparencyDlg(SamplesStarter.getFrame(), aValue);
1019         Position.centerWindow(aDlg);
1020         aDlg.show();
1021
1022         if (aDlg.isOK())
1023         {
1024           for (myAISContext.InitCurrent(); myAISContext.MoreCurrent();
1025                myAISContext.NextCurrent())
1026             myAISContext.SetTransparency(myAISContext.Current(), aDlg.getValue(), true);
1027         }
1028       }
1029     }
1030   }
1031
1032 //=======================================================================//
1033   public void onErase()
1034   {
1035     if (myAISContext != null)
1036     {
1037       for (myAISContext.InitCurrent(); myAISContext.MoreCurrent();
1038            myAISContext.NextCurrent())
1039         myAISContext.Erase(myAISContext.Current(), true, false);
1040     }
1041   }
1042
1043
1044 //=======================================================================//
1045 // ActionListener interface
1046 //=======================================================================//
1047   public void actionPerformed(ActionEvent e)
1048   {
1049     String command = e.getActionCommand();
1050
1051     // Import
1052     if (command.equals("ImportBREP")) onImportBREP();
1053     else if (command.equals("ImportCSFDB")) onImportCSFDB();
1054     else if (command.equals("ImportSTEP")) onImportSTEP();
1055     else if (command.equals("ImportIGES")) onImportIGES();
1056     // Export
1057     else if (command.equals("ExportBREP")) onExportBREP();
1058     else if (command.equals("ExportCSFDB")) onExportCSFDB();
1059     else if (command.equals("ExportSTEP")) onExportSTEP();
1060     else if (command.equals("ExportIGES")) onExportIGES();
1061     else if (command.equals("ExportImage")) onExportImage();
1062
1063     // Object properties
1064     else if (command.equals("Wireframe")) onWireframe();
1065     else if (command.equals("Shading")) onShading();
1066     else if (command.equals("Color")) onColor();
1067     else if (command.equals("Material")) onMaterial();
1068     else if (command.equals("Transparency")) onTransparency();
1069     else if (command.equals("Erase")) onErase();
1070
1071     // Setting material (from popup menu)
1072     else if (command.equals("MaterialBrass"))
1073       setMaterial(Graphic3d_NameOfMaterial.Graphic3d_NOM_BRASS);
1074     else if (command.equals("MaterialBronze"))
1075       setMaterial(Graphic3d_NameOfMaterial.Graphic3d_NOM_BRONZE);
1076     else if (command.equals("MaterialCopper"))
1077       setMaterial(Graphic3d_NameOfMaterial.Graphic3d_NOM_COPPER);
1078     else if (command.equals("MaterialGold"))
1079       setMaterial(Graphic3d_NameOfMaterial.Graphic3d_NOM_GOLD);
1080     else if (command.equals("MaterialPewter"))
1081       setMaterial(Graphic3d_NameOfMaterial.Graphic3d_NOM_PEWTER);
1082     else if (command.equals("MaterialPlaster"))
1083       setMaterial(Graphic3d_NameOfMaterial.Graphic3d_NOM_PLASTER);
1084     else if (command.equals("MaterialPlastic"))
1085       setMaterial(Graphic3d_NameOfMaterial.Graphic3d_NOM_PLASTIC);
1086     else if (command.equals("MaterialSilver"))
1087       setMaterial(Graphic3d_NameOfMaterial.Graphic3d_NOM_SILVER);
1088   }
1089
1090 //=======================================================================//
1091 // MouseListener interface
1092 //=======================================================================//
1093   public void mouseClicked(MouseEvent e)
1094   {
1095   }
1096
1097 //-----------------------------------------------------------------------//
1098   public void mousePressed(MouseEvent e)
1099   {
1100     if (SwingUtilities.isLeftMouseButton(e))
1101     {
1102       startX = e.getX();
1103       startY = e.getY();
1104       Object src = e.getSource();
1105
1106       if (src == myView3d)
1107       {
1108         V3d_View view3d = ((CASCADEView3d) myView3d.getViewPort()).getView();
1109         if (view3d != null)
1110           myAISContext.MoveTo(startX, startY, view3d);
1111       }
1112     }
1113     else if (SwingUtilities.isRightMouseButton(e))
1114     {
1115       if (e.getSource() == myView3d)
1116       {
1117         if (myAISContext != null)
1118         {
1119           myAISContext.InitCurrent();
1120           if (myAISContext.MoreCurrent())
1121           {
1122             myView3d.add(myPopup);
1123                 myPopup.show(myView3d, e.getX(), e.getY() + 30);
1124           }
1125           else
1126           {
1127                 PopupMenu defPopup = myView3d.getDefaultPopup();
1128                 myView3d.add(defPopup);
1129                 defPopup.show(myView3d, e.getX(), e.getY() + 30);
1130           }
1131         }
1132         else
1133         {
1134                 PopupMenu defPopup = myView3d.getDefaultPopup();
1135                 myView3d.add(defPopup);
1136                 defPopup.show(myView3d, e.getX(), e.getY() + 30);
1137         }
1138       }
1139     }
1140   }
1141
1142 //-----------------------------------------------------------------------//
1143   public void mouseReleased(MouseEvent e)
1144   {
1145     if (SwingUtilities.isLeftMouseButton(e))
1146     {
1147       Object src = e.getSource();
1148
1149       if (Dragged)
1150       {
1151         if (src == myView3d)
1152         {
1153           V3d_View view3d = ((CASCADEView3d) myView3d.getViewPort()).getView();
1154           if (view3d != null)
1155           {
1156             if (e.isShiftDown())
1157               myAISContext.ShiftSelect(startX, startY, e.getX(), e.getY(), view3d, true);
1158             else
1159               myAISContext.Select(startX, startY, e.getX(), e.getY(), view3d, true);
1160             updateButtons();
1161           }
1162         }
1163       }
1164       else
1165       {
1166         if (src == myView3d)
1167         {
1168           if (e.isShiftDown())
1169             myAISContext.ShiftSelect(true);
1170           else
1171             myAISContext.Select(true);
1172           updateButtons();
1173         }
1174       }
1175       Dragged = false;
1176     }
1177   }
1178
1179 //-----------------------------------------------------------------------//
1180   public void mouseEntered(MouseEvent e)
1181   {
1182   }
1183
1184 //-----------------------------------------------------------------------//
1185   public void mouseExited(MouseEvent e)
1186   {
1187   }
1188
1189 //=======================================================================//
1190 // MouseMotionListener interface
1191 //=======================================================================//
1192   public void mouseDragged(MouseEvent e)
1193   {
1194     if (SwingUtilities.isLeftMouseButton(e))
1195     {
1196       Object src = e.getSource();
1197       Dragged = true;
1198     }
1199   }
1200
1201 //-----------------------------------------------------------------------//
1202   public void mouseMoved(MouseEvent e)
1203   {
1204     Object src = e.getSource();
1205
1206     if (src == myView3d)
1207     {
1208       V3d_View view3d = ((CASCADEView3d) myView3d.getViewPort()).getView();
1209       if (myAISContext != null && view3d != null)
1210         myAISContext.MoveTo(e.getX(), e.getY(), view3d);
1211     }
1212   }
1213
1214 }
1215
1216