diff options
Diffstat (limited to 'src/demos/nurbs/surfaceapp/SurfaceApp.java')
-rwxr-xr-x | src/demos/nurbs/surfaceapp/SurfaceApp.java | 1066 |
1 files changed, 0 insertions, 1066 deletions
diff --git a/src/demos/nurbs/surfaceapp/SurfaceApp.java b/src/demos/nurbs/surfaceapp/SurfaceApp.java deleted file mode 100755 index 7f2a546..0000000 --- a/src/demos/nurbs/surfaceapp/SurfaceApp.java +++ /dev/null @@ -1,1066 +0,0 @@ -package demos.nurbs.surfaceapp; - -import java.awt.Dimension; -import java.awt.GridBagConstraints; -import java.awt.GridBagLayout; -import java.awt.Insets; -import java.awt.event.ActionEvent; -import java.awt.event.ActionListener; -import java.awt.event.MouseAdapter; -import java.awt.event.MouseEvent; - -import javax.media.opengl.GLCanvas; -import javax.swing.AbstractAction; -import javax.swing.ButtonGroup; -import javax.swing.ImageIcon; -import javax.swing.JButton; -import javax.swing.JCheckBox; -import javax.swing.JFrame; -import javax.swing.JLabel; -import javax.swing.JMenu; -import javax.swing.JMenuBar; -import javax.swing.JMenuItem; -import javax.swing.JOptionPane; -import javax.swing.JPanel; -import javax.swing.JPopupMenu; -import javax.swing.JSeparator; -import javax.swing.JSlider; -import javax.swing.JSpinner; -import javax.swing.JToggleButton; -import javax.swing.JToolBar; -import javax.swing.SpinnerNumberModel; -import javax.swing.ToolTipManager; - -import demos.nurbs.icons.*; -import demos.nurbs.knotslidercomponent.JKnotSlider; - -/** - * Main class for application demostrating capabilitues of JOGL library extend by NURBS surface functionalities - * Hlavní třída aplikace demonstrující shopnosti knihovny JOGL při práci s NURBS - * plochami - * - * @author Tomáš Hráský - * - */ -@SuppressWarnings("serial") -public class SurfaceApp extends JFrame implements ActionListener -{ - - /** - * X-coord editing component name - * Jméno komponenty pro editaci X-ové souřadnice aktuálního bodu - */ - public static final String X_SPINNER_NAME = "xspinner"; - - /** - * Y-coord editing component name - * Jméno komponenty pro editaci Y-ové souřadnice aktuálního bodu - */ - public static final String Y_SPINNER_NAME = "yspinner"; - - /** - * Z-coord editing component name - * Jméno komponenty pro editaci Z-ové souřadnice aktuálního bodu - */ - public static final String Z_SPINNER_NAME = "zspinner"; - - /** - * Weight editing component name - * Jméno komponenty pro editaci váhy aktuálního bodu - */ - public static final String W_SPINNER_NAME = "wspinner"; - - /** - * U direction knotvector editing component - * Jméno komponenty pro editaci uzlového vektoru ve směru parametru U - */ - private static final String U_KNOTSLIDER = "Uknotspinner"; - - /** - * V direction knotvector editing component - * Jméno komponenty pro editaci uzlového vektoru ve směru parametru V - */ - private static final String V_KNOTSLIDER = "Vknotspinner"; - - /** - * New control point action name - * Jméno události přidání řídícího bodu - */ - public static final String PRIDAT_AC = "PRIDAT"; - - /** - * Degree set event name - * Jméno události zadání stupně křivky - */ - public static final String STUPEN_AC = "STUPEN"; - - /** - * Delete control point event name - * Jméno události smazání řídícího bodu - */ - public static final String SMAZAT_AC = "SMAZAT"; - - /** - * New clamped knotvector event name - * Jméno události vytvoření uzavřeného uzlového vektoru - */ - public static final String UZAVRENY_AC = "UZAVRENY"; - - /** - * New uniform knotvector event name - * Jméno události vytvoření otevřeného (uniformního) uzlového vektoru - */ - public static final String OTEVRENY_AC = "OTEVRENY"; - - /** - * Save surface event name - * Jméno události uložení plochy - */ - public static final String ULOZIT_AC = "ULOZIT"; - - /** - * Load surface event name - * Jméno události načetení uložené definice plochy - */ - public static final String NACIST_AC = "NACIST"; - - /** - * Move control point event name - * Jméno události pohybu řídícího bodu - */ - private static final String MOVE_AC = "MOVE"; - - /** - * New surface event name - * Jméno události vytvoření nové plochy - */ - static final String NOVA_AC = "NEWSURFACE"; - - /** - * Exit app event name - * Jméno události ukončení aplikace - */ - public static final String EXIT_AC = "EXIT"; - - /** - * Show about event name - * Jméno události zobrazení okna o aplikaci - */ - public static final String INFO_AC = "INFO"; - - /** - * Add column of control points event name - * Jméno události přidání sloupce řídících bodů - */ - public static final String PRIDAT_AC_SLOUPEC = "ADDCOL"; - - /** - * Add row of control points event name - * Jméno události přidání řádku řídících bodů - */ - public static final String PRIDAT_AC_RADEK = "ADDROW"; - - /** - * Remove row of control points event name - * Jméno události smazání řádku řídících bodů - */ - public static final String SMAZAT_AC_RADEK = "DELROW"; - - /** - * Remove column of control points event name - * Jméno události smazání sloupce řídících bodů - */ - public static final String SMAZAT_AC_SLOUPEC = "DELCOL"; - - /** - * OpenGL drawing canvas - * Plátno pro vykreslování pomocí OpenGL - */ - private GLCanvas glCanvas; - - /** - * X-coord editing component - * Komponenta pro editaci X-ové souřadnice aktuálního bodu - */ - private JSpinner xSpinner; - - /** - * Y-coord editing component - * Komponenta pro editaci Y-ové souřadnice aktuálního bodu - */ - private JSpinner ySpinner; - - /** - * Weight editing component - * Komponenta pro editaci váhy aktuálního bodu - */ - private JSpinner wSpinner; - - /** - * Z-coord editing component - * Komponenta pro editaci Z-ové souřadnice aktuálního bodu - */ - private JSpinner zSpinner; - - /** - * Mouse listener - * Listener událostí myši - */ - private SurfaceMouseListener mouseListener; - - /** - * U direction knotvector editing component - * Komponenta pro editaci uzlového vektoru ve směru parametru U - */ - private JKnotSlider knotSlider; - - /** - * V direction knotvector editing component - * Komponenta pro editaci uzlového vektoru ve směru parametru V - */ - private JKnotSlider knotSlider2; - - /** - * Set move points mode - * Tlačítko pro zapnutí módu pohybu řídících bodů - */ - private JToggleButton moveTB; - - /** - * X rotation component - * Komponenta ovládající otočení definované plochy kolem osy X - */ - private JSlider rotaceXSlider; - - /** - * Y rotation component - * Komponenta ovládající otočení definované plochy kolem osy Y - */ - private JSlider rotaceYSlider; - - /** - * Z rotation component - * Komponenta ovládající otočení definované plochy kolem osy Z - */ - private JSlider rotaceZSlider; - - /** - * Label for X rotation editing component - * Nadpis komponenty ovládající otočení definované plochy kolem osy X - */ - private JLabel rotaceXLabel; - /** - * Label for Y rotation editing component - * Nadpis komponenty ovládající otočení definované plochy kolem osy Y - */ - private JLabel rotaceYLabel; - /** - * Label for Z rotation editing component - * Nadpis komponenty ovládající otočení definované plochy kolem osy Z - */ - private JLabel rotaceZLabel; - - /** - * GL events listener - * Objekt reagující na události OpenGL plátna - */ - private GLListener glListener; - - /** - * Use lighting checkbox - * Checkbox použití nasvícení objektu - */ - private JCheckBox lightingChBox; - - /** - * Constructor, creates GUI - * Konstruktor, vytvoří grafické uživatelské rozhraní - */ - public SurfaceApp() { - //super( "Tomáš Hráský - ukázková aplikace funkcionality GLU NURBS funkcí - JOGL"); - super( "Tomáš Hráský - example application of GLU NURBS in JOGL"); - setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); - - initGUI(); - } - - /** - * GUI initialization - * Inicializace grafického uživatelského rozhraní - */ - private void initGUI() { - JPopupMenu.setDefaultLightWeightPopupEnabled(false); - ToolTipManager.sharedInstance().setLightWeightPopupEnabled(false); - - this.glCanvas = new GLCanvas(); - glCanvas.setSize(new Dimension(750, 500)); - this.glListener=new GLListener(this); - glCanvas.addGLEventListener(glListener); - mouseListener = new SurfaceMouseListener(this); - glCanvas.addMouseListener(mouseListener); - glCanvas.addMouseMotionListener(mouseListener); - setLayout(new GridBagLayout()); - GridBagConstraints c = new GridBagConstraints(); - c.fill = GridBagConstraints.BOTH; - - c.gridy = 0; - c.gridwidth = GridBagConstraints.REMAINDER; - - ActListener listener = new ActListener(this); - - JMenuBar menuBar = new JMenuBar(); - getContentPane().add(menuBar, c); - - JMenu aplikaceMenu = new JMenu("Aplication"); - menuBar.add(aplikaceMenu); - - JMenuItem aboutMI = new JMenuItem("About"); - aboutMI.setActionCommand(INFO_AC); - aboutMI.addActionListener(listener); - aplikaceMenu.add(aboutMI); - - aplikaceMenu.add(new JSeparator()); - - JMenuItem konecMI = new JMenuItem("Exit"); - konecMI.addActionListener(listener); - konecMI.setActionCommand(EXIT_AC); - aplikaceMenu.add(konecMI); - - JMenu krivkaMenu = new JMenu("Surface"); - menuBar.add(krivkaMenu); - - JMenu pridatBodyM = new JMenu("Add points"); - krivkaMenu.add(pridatBodyM); - // pridatBodyM.addActionListener(listener); - - // pridatBodyM.setActionCommand(PRIDAT_AC); - - JMenuItem pridatRadkyMI=new JMenuItem("Points row"); - pridatRadkyMI.setActionCommand(PRIDAT_AC_RADEK); - pridatRadkyMI.addActionListener(listener); - - JMenuItem pridatSloupceMI=new JMenuItem("Points column"); - pridatSloupceMI.setActionCommand(PRIDAT_AC_SLOUPEC); - pridatSloupceMI.addActionListener(listener); - pridatBodyM.add(pridatRadkyMI); - pridatBodyM.add(pridatSloupceMI); - - - JMenu smazatBodyM = new JMenu("Delete points"); - krivkaMenu.add(smazatBodyM); - // smazatBodyM.addActionListener(listener); - - // smazatBodyM.setActionCommand(SMAZAT_AC); - - JMenuItem smazatRadkyMI=new JMenuItem("Points row"); - smazatRadkyMI.setActionCommand(SMAZAT_AC_RADEK); - smazatRadkyMI.addActionListener(listener); - smazatBodyM.add(smazatRadkyMI); - JMenuItem smazatSloupceMI=new JMenuItem("Points column"); - smazatSloupceMI.setActionCommand(SMAZAT_AC_SLOUPEC); - smazatSloupceMI.addActionListener(listener); - smazatBodyM.add(smazatSloupceMI); - - - JMenuItem stupenMI = new JMenuItem("Set surface degree"); - krivkaMenu.add(stupenMI); - stupenMI.addActionListener(listener); - stupenMI.setActionCommand(STUPEN_AC); - - JMenu knotVecMenu = new JMenu("Create knotvectors"); - krivkaMenu.add(knotVecMenu); - - JMenuItem clampedKVMI = new JMenuItem("Clamped"); - knotVecMenu.add(clampedKVMI); - clampedKVMI.setActionCommand(UZAVRENY_AC); - clampedKVMI.addActionListener(listener); - JMenuItem unclampedKVMI = new JMenuItem("Uniform"); - knotVecMenu.add(unclampedKVMI); - unclampedKVMI.setActionCommand(OTEVRENY_AC); - unclampedKVMI.addActionListener(listener); - - JMenuItem moveMI = new JMenuItem("Move points"); - krivkaMenu.add(moveMI); - moveMI.setActionCommand(MOVE_AC); - moveMI.addActionListener(listener); - - krivkaMenu.add(new JSeparator()); - - krivkaMenu.add(new JSeparator()); - - JMenuItem novaMI = new JMenuItem("New surface"); - krivkaMenu.add(novaMI); - novaMI.setActionCommand(NOVA_AC); - novaMI.addActionListener(listener); - - JMenuItem ulozitMI = new JMenuItem("Safe surface as..."); - krivkaMenu.add(ulozitMI); - ulozitMI.setActionCommand(ULOZIT_AC); - ulozitMI.addActionListener(listener); - JMenuItem nacistMI = new JMenuItem("Load surface"); - krivkaMenu.add(nacistMI); - nacistMI.setActionCommand(NACIST_AC); - nacistMI.addActionListener(listener); - - c.gridy++; - JToolBar toolBar = new JToolBar(); - getContentPane().add(toolBar, c); - - ButtonGroup bg = new ButtonGroup(); - - JButton novaB = new JButton(); - // novaB.setText("Nová"); - novaB.setToolTipText("New surface"); - novaB.setIcon(IconFactory.getIcon("demos/nurbs/icons/folder_new.png")); - novaB.setActionCommand(NOVA_AC); - novaB.addActionListener(listener); - toolBar.add(novaB); - - JButton ulozitB = new JButton(); - ulozitB.setIcon(IconFactory.getIcon("demos/nurbs/icons/adept_sourceseditor.png")); - // ulozitB.setText("Uložit"); - ulozitB.setToolTipText("Save"); - ulozitB.setActionCommand(ULOZIT_AC); - ulozitB.addActionListener(listener); - toolBar.add(ulozitB); - - JButton nahratB = new JButton(); - // nahratB.setText("Nahrát"); - nahratB.setToolTipText("Load surface"); - nahratB.setIcon(IconFactory.getIcon("demos/nurbs/icons/fileimport.png")); - nahratB.setActionCommand(NACIST_AC); - nahratB.addActionListener(listener); - toolBar.add(nahratB); - - toolBar.add(new JToolBar.Separator()); - - JToggleButton pridatTB = new JToggleButton(); - // pridatTB.setText("Přidat body"); - pridatTB.setToolTipText("Add contol points"); - toolBar.add(pridatTB); - pridatTB.setIcon(IconFactory.getIcon("demos/nurbs/icons/add.png")); - // pridatTB.setActionCommand(PRIDAT_AC); - // pridatTB.addActionListener(listener); - - bg.add(pridatTB); - - final JPopupMenu popup2=new JPopupMenu(); - JMenuItem radkyPopupMI=new JMenuItem("Poits row"); - radkyPopupMI.setActionCommand(PRIDAT_AC_RADEK); - JMenuItem sloupcePopupMI=new JMenuItem("Points column"); - sloupcePopupMI.setActionCommand(PRIDAT_AC_SLOUPEC); - radkyPopupMI.addActionListener(listener); - sloupcePopupMI.addActionListener(listener); - - popup2.add(radkyPopupMI); - popup2.add(sloupcePopupMI); - - pridatTB.addMouseListener(new - /** - * CLass to add context menu to toolbar button - * Třída pro připojení kontextového menu na - * tlačítko na liště nástrojů - * @author Tomáš Hráský - */ - MouseAdapter() { - - @Override - public void mouseClicked(MouseEvent e) { - super.mouseClicked(e); - e.isPopupTrigger(); - popup2.show(e.getComponent(), e.getX(), e.getY()); - } - - - }); - - JToggleButton smazatTB = new JToggleButton(); - // smazatTB.setText("Smazat body"); - smazatTB.setToolTipText("Delete points"); - toolBar.add(smazatTB); - smazatTB.setIcon(IconFactory.getIcon("demos/nurbs/icons/fileclose.png")); - // smazatTB.setActionCommand(SMAZAT_AC); - // smazatTB.addActionListener(listener); - bg.add(smazatTB); - - final JPopupMenu popup3=new JPopupMenu(); - JMenuItem radky2PopupMI=new JMenuItem("Points row"); - radky2PopupMI.setActionCommand(SMAZAT_AC_RADEK); - JMenuItem sloupce2PopupMI=new JMenuItem("Points column"); - sloupce2PopupMI.setActionCommand(SMAZAT_AC_SLOUPEC); - radky2PopupMI.addActionListener(listener); - sloupce2PopupMI.addActionListener(listener); - - popup3.add(radky2PopupMI); - popup3.add(sloupce2PopupMI); - - - smazatTB.addMouseListener(new - /** - * CLass to add context menu to toolbar button - * Třída pro připojení kontextového menu na - * tlačítko na liště nástrojů - * @author Tomáš Hráský - */ - MouseAdapter() { - - @Override - public void mouseClicked(MouseEvent e) { - super.mouseClicked(e); - e.isPopupTrigger(); - popup3.show(e.getComponent(), e.getX(), e.getY()); - } - - - }); - - JToggleButton stupenTB = new JToggleButton(); - // stupenTB.setText("Smazat body"); - stupenTB.setToolTipText("Set surface degree"); - toolBar.add(stupenTB); - stupenTB.setIcon(IconFactory.getIcon("demos/nurbs/icons/math_rsup.png")); - stupenTB.setActionCommand(STUPEN_AC); - stupenTB.addActionListener(listener); - bg.add(stupenTB); - - final JPopupMenu popup = new JPopupMenu(); - - JMenuItem uzavrenyPopupMI = new JMenuItem("Clamped"); - popup.add(uzavrenyPopupMI); - uzavrenyPopupMI.setActionCommand(UZAVRENY_AC); - uzavrenyPopupMI.addActionListener(listener); - JMenuItem otevrenyPopupMI = new JMenuItem("Uniform"); - popup.add(otevrenyPopupMI); - otevrenyPopupMI.setActionCommand(OTEVRENY_AC); - otevrenyPopupMI.addActionListener(listener); - - JToggleButton vytvoritButton = new JToggleButton(); - // vytvoritButton.setText("Vytvořit uzlový vektor"); - vytvoritButton.setToolTipText("Create knotvectors"); - vytvoritButton.setIcon(IconFactory.getIcon("demos/nurbs/icons/newfunction.png")); - bg.add(vytvoritButton); - - vytvoritButton.addMouseListener(new - /** - * CLass to add context menu to toolbar button - * Třída pro připojení kontextového menu na - * tlačítko na liště nástrojů - * @author Tomáš Hráský - */ - MouseAdapter() { - - @Override - public void mouseClicked(MouseEvent e) { - super.mouseClicked(e); - e.isPopupTrigger(); - popup.show(e.getComponent(), e.getX(), e.getY()); - } - - }); - popup.setInvoker(vytvoritButton); - toolBar.add(vytvoritButton); - - moveTB = new JToggleButton(); - // moveTB.setText("Hýbat body"); - moveTB.setToolTipText("Move points"); - moveTB.setIcon(IconFactory.getIcon("demos/nurbs/icons/mouse.png")); - toolBar.add(moveTB); - moveTB.setActionCommand(MOVE_AC); - moveTB.addActionListener(listener); - bg.add(moveTB); - toolBar.add(new JToolBar.Separator()); - JButton infoB = new JButton(); - // infoB.setText("Ukončit"); - infoB.setToolTipText("About"); - - infoB.setIcon(IconFactory.getIcon("demos/nurbs/icons/info.png")); - toolBar.add(infoB); - infoB.setActionCommand(INFO_AC); - infoB.addActionListener(listener); - toolBar.add(new JToolBar.Separator()); - - JButton exitB = new JButton(); - // exitB.setText("Ukončit"); - exitB.setToolTipText("Exit"); - - exitB.setIcon(IconFactory.getIcon("demos/nurbs/icons/exit.png")); - toolBar.add(exitB); - exitB.setActionCommand(EXIT_AC); - exitB.addActionListener(listener); - - c.gridwidth = 1; - - c.gridx = 0; - c.gridy = 2; - - c.weightx = 1; - c.weighty = 1; - - getContentPane().add(glCanvas, c); - c.gridx = 1; - JPanel rightPanel = new JPanel(new GridBagLayout()); - GridBagConstraints cc = new GridBagConstraints(); - cc.insets = new Insets(5, 5, 5, 5); - xSpinner = new JSpinner(new SpinnerNumberModel(0, -10000, 10000.0, 1)); - ySpinner = new JSpinner(new SpinnerNumberModel(0, -10000.0, 10000.0, 1)); - zSpinner = new JSpinner(new SpinnerNumberModel(0, -10000.0, 10000.0, 1)); - wSpinner = new JSpinner(new SpinnerNumberModel(0, 0, 10000.0, .05)); - - SpinnerListener spinnerListener = new SpinnerListener(this); - SliderListener sliderListener=new SliderListener(this); - - xSpinner.addChangeListener(spinnerListener); - xSpinner.setName(X_SPINNER_NAME); - ySpinner.addChangeListener(spinnerListener); - ySpinner.setName(Y_SPINNER_NAME); - wSpinner.addChangeListener(spinnerListener); - wSpinner.setName(W_SPINNER_NAME); - - zSpinner.setName(Z_SPINNER_NAME); - zSpinner.addChangeListener(spinnerListener); - - cc.gridx = 0; - cc.gridy = 0; - cc.gridwidth = 2; - cc.weighty = 0; - - rotaceXLabel = new JLabel(); - rightPanel.add(rotaceXLabel, cc); - cc.gridy++; - - rotaceXSlider = new JSlider(-180, 180, 0); - rotaceXSlider.addChangeListener(sliderListener); - rightPanel.add(rotaceXSlider, cc); - cc.gridy++; - - rotaceYLabel = new JLabel(); - rightPanel.add(rotaceYLabel, cc); - cc.gridy++; - - rotaceYSlider = new JSlider(-180, 180, 0); - rotaceYSlider.addChangeListener(sliderListener); - rightPanel.add(rotaceYSlider, cc); - cc.gridy++; - - rotaceZLabel = new JLabel(); - rightPanel.add(rotaceZLabel, cc); - cc.gridy++; - - rotaceZSlider = new JSlider(-180, 180, 0); - rotaceZSlider.addChangeListener(sliderListener); - rightPanel.add(rotaceZSlider, cc); - cc.gridy++; - - lightingChBox=new JCheckBox(new - /** - * Class for easy reaction to checkbox event - * Třída pro jendoduché zpracování akce na checkboxu - * @author Tomáš Hráský - */ - AbstractAction("Show Bézier plates"){ - - public void actionPerformed(ActionEvent e) { - updateGLCanvas(); - } - - }); - lightingChBox.setSelected(false); - - rightPanel.add(lightingChBox,cc); - - cc.gridy++; - - updateRotationLabels(); - - cc.weighty = 1; - rightPanel.add(new JPanel(), cc); - cc.weighty = 0; - cc.gridwidth = 1; - - cc.gridy++; - rightPanel.add(new JLabel("X"), cc); - cc.gridy++; - rightPanel.add(new JLabel("Y"), cc); - cc.gridy++; - rightPanel.add(new JLabel("Z"), cc); - cc.gridy++; - rightPanel.add(new JLabel("W"), cc); - - cc.gridx = 1; - cc.gridy -= 3; - rightPanel.add(xSpinner, cc); - cc.gridy++; - rightPanel.add(ySpinner, cc); - cc.gridy++; - rightPanel.add(zSpinner, cc); - cc.gridy++; - rightPanel.add(wSpinner, cc); - - xSpinner.setEnabled(false); - ySpinner.setEnabled(false); - zSpinner.setEnabled(false); - wSpinner.setEnabled(false); - - c.weightx = 0; - c.weighty = 0; - getContentPane().add(rightPanel, c); - - c.gridx = 0; - c.gridy++; - - knotSlider = new JKnotSlider(Surface.getInstance().getKnotsU()); - knotSlider.addActionListener(this); - knotSlider.setName(U_KNOTSLIDER); - getContentPane().add(knotSlider, c); - - c.gridy++; - knotSlider2 = new JKnotSlider(Surface.getInstance().getKnotsU()); - knotSlider2.addActionListener(this); - knotSlider2.setName(V_KNOTSLIDER); - getContentPane().add(knotSlider2, c); - - pack(); - invalidate(); - setVisible(true); - } - - /** - * Method for running application - * Metoda pro spuštění aplikace - * - * @param args - * no arguments from command line - * - */ - public static void main(String[] args) { - new SurfaceApp(); - - } - - /** - * Reaction to reqest for canvas redraw - redraws canvas and sets coords of actually selected control point to editing components - * Reakce na požadavek překreslení OpenGL plátna, překreslí plátno a nastaví - * souřadnice aktuálního vybraného bodu do editačních komponent - */ - public void updateGLCanvas() { - glCanvas.repaint(); - if (Surface.getInstance().getBodIndex() >= 0) { - xSpinner.setEnabled(true); - ySpinner.setEnabled(true); - zSpinner.setEnabled(true); - wSpinner.setEnabled(true); - - xSpinner.setValue(Double.valueOf(Math.round(Surface.getInstance() - .getActiveX()))); - ySpinner.setValue(Double.valueOf(Math.round(Surface.getInstance() - .getActiveY()))); - zSpinner.setValue(Double.valueOf(Math.round(Surface.getInstance() - .getActiveZ()))); - wSpinner.setValue(Double - .valueOf(Surface.getInstance().getActiveW())); - } else { - xSpinner.setEnabled(false); - ySpinner.setEnabled(false); - zSpinner.setEnabled(false); - wSpinner.setEnabled(false); - } - } - - /* - * (non-Javadoc) - * - * @see java.awt.event.ActionListener#actionPerformed(java.awt.event.ActionEvent) - */ - public void actionPerformed(ActionEvent e) { - if (e.getSource() instanceof JKnotSlider) { - JKnotSlider src = (JKnotSlider) e.getSource(); - if (src.getName().equals(U_KNOTSLIDER)) { - if(src.checkKnotMulti(Surface.getInstance().getOrderU())){ - Surface.getInstance().setKnotsU(src.getKnotsFloat()); - }else{ - JOptionPane.showMessageDialog(this,"Maximum knot multiplicity exceeded","Error",JOptionPane.ERROR_MESSAGE); - src.setKnots(Surface.getInstance().getKnotsU()); - } - - } else { - if(src.checkKnotMulti(Surface.getInstance().getOrderV())){ - Surface.getInstance().setKnotsV(src.getKnotsFloat()); - }else{ - JOptionPane.showMessageDialog(this,"Maximum knot multiplicity exceeded","Error",JOptionPane.ERROR_MESSAGE); - //JOptionPane.showMessageDialog(this,"Překročení maximální násobnosti uzlu","Chyba",JOptionPane.ERROR_MESSAGE); - src.setKnots(Surface.getInstance().getKnotsV()); - } - } - updateGLCanvas(); - } - } - - /** - * Returns OpenGL canvas - * Vrací OpenGL plátno - * - * @return OpenGL canvas - */ - public GLCanvas getGlCanvas() { - return glCanvas; - } - - /** - * Returns mouse listener - * Vrací listener událostí myši - * - * @return mouse listener - */ - public SurfaceMouseListener getMouseListener() { - return mouseListener; - } - - /** - * Creates NURBS surface with clamped knotvectors - * Vytvoří NURBS plochu s okrajovými uzlovými vektory - */ - public void uzavernyKV() { - int stupen; - int pocetBodu; - boolean isOK=true; - float[] newKnots = null,newKnotsV = null; - - stupen= Surface.getInstance().getOrderU(); - pocetBodu= Surface.getInstance().getPointsInU(); - if (stupen <= pocetBodu) { - int knotCount = stupen + pocetBodu; - int middlePartSize = knotCount - 2 * stupen; - newKnots = new float[knotCount]; - int i; - int j = 0; - float middleStep = 1f / (middlePartSize + 2); - float knot = middleStep; - - // knot=.5f; - - for (i = 0; i < stupen; i++) - newKnots[j++] = 0; - for (i = 0; i < middlePartSize; i++) { - newKnots[j++] = knot; - knot += middleStep; - } - for (i = 0; i < stupen; i++) - newKnots[j++] = 1; - - - - } else{ - isOK=false; - //errorMessage("Malý počet řídících bodů ve směru paramteru U vzhledem k zadanému stupni plochy"); - errorMessage("Too few control points as of U degree"); - } - - stupen= Surface.getInstance().getOrderV(); - pocetBodu= Surface.getInstance().getPointsInV(); - if (stupen <= pocetBodu) { - int knotCount = stupen + pocetBodu; - int middlePartSize = knotCount - 2 * stupen; - newKnotsV = new float[knotCount]; - int i; - int j = 0; - float middleStep = 1f / (middlePartSize + 2); - float knot = middleStep; - - // knot=.5f; - - for (i = 0; i < stupen; i++) - newKnotsV[j++] = 0; - for (i = 0; i < middlePartSize; i++) { - newKnotsV[j++] = knot; - knot += middleStep; - } - for (i = 0; i < stupen; i++) - newKnotsV[j++] = 1; - - - - } else{ - isOK=false; - //errorMessage("Malý počet řídících bodů ve směru paramteru V vzhledem k zadanému stupni plochy"); - errorMessage("Too few control points as of V degree"); - } - - if(isOK) - postNewKnot(newKnots,newKnotsV); - } - - /** - * Shows modal window with error report - * Zobrazí modální okno s hlášením chyby - * - * @param error - * error report - */ - - public void errorMessage(String error) { - JOptionPane.showMessageDialog(this, error, "Error!", - JOptionPane.ERROR_MESSAGE); - } - - /** - * Creates NURBS surface with uniform knotvectors - * Vytvoří NURBS plochu s uniformními uzlovými vektory - */ - public void otevrenyKV() { - int stupen,pocetBodu; - - boolean isOK=true; - float[] newKnots = null,newKnotsV = null; - - - stupen = Surface.getInstance().getOrderU(); - pocetBodu = Surface.getInstance().getPointsInU(); - if (stupen <= pocetBodu) { - int knotCount = stupen + pocetBodu; - int middlePartSize = knotCount; - newKnots = new float[knotCount]; - int i; - int j = 0; - float middleStep = 1f / (middlePartSize - 1); - float knot = 0; - - for (i = 0; i < middlePartSize; i++) { - newKnots[j++] = knot; - knot += middleStep; - } - - - } else{ - isOK=false; - //errorMessage("Malý počet řídících bodů ve směru parametru U vzhledem k zadanému stupni plochy"); - errorMessage("Too few control points as of U degree"); - } - - stupen = Surface.getInstance().getOrderV(); - pocetBodu = Surface.getInstance().getPointsInV(); - if (stupen <= pocetBodu) { - int knotCount = stupen + pocetBodu; - int middlePartSize = knotCount; - newKnotsV = new float[knotCount]; - int i; - int j = 0; - float middleStep = 1f / (middlePartSize - 1); - float knot = 0; - - for (i = 0; i < middlePartSize; i++) { - newKnotsV[j++] = knot; - knot += middleStep; - } - - - } else{ - isOK=false; - //errorMessage("Malý počet řídících bodů ve směru parametru V vzhledem k zadanému stupni plochy"); - errorMessage("Too few control points as of V degree"); - } - - if(isOK) - postNewKnot(newKnots,newKnotsV); - - } - - - /** - * Method called after adding new knot - * Metoda volaná po přidání nového uzlu - * @param newKnots new U knotvector - * @param newKnotsV new V knotvector - */ - private void postNewKnot(float[] newKnots,float[] newKnotsV) { - Surface.getInstance().setKnotsU(newKnots); - Surface.getInstance().setKnotsV(newKnotsV); - knotSlider.setKnots(newKnots); - knotSlider2.setKnots(newKnotsV); - Surface.getInstance().setIsSurfaceFinished(true); - updateGLCanvas(); - moveTB.setSelected(true); - } - - /** - * Activates move mode button - * Aktivuje tlačítko módu pohybu řícími body - */ - public void selectMoveButt() { - moveTB.setSelected(true); - } - - /** - * Sets datasource for editation of knotvectors from surface definition object - * Nastaví zdroje dat komponent pro editaci uzlových vektorů podle uz. - * vektorů v objektu plochy - */ - public void updateJKnotSlider() { - knotSlider.setKnots(Surface.getInstance().getKnotsU()); - knotSlider2.setKnots(Surface.getInstance().getKnotsV()); - } - - /** - * Returns value of X axe rotation set in editing component - * Vrací hodnotu rotace kolem osy X nastavenou v editační komponentě - * @return X rotation - */ - public float getXrotation() { - return rotaceXSlider.getValue(); - } - - /** - * Returns value of Y axe rotation set in editing component - * Vrací hodnotu rotace kolem osy Y nastavenou v editační komponentě - * @return Y rotation - */ - public float getYrotation() { - return rotaceYSlider.getValue(); - } - - /** - * Returns value of Z axe rotation set in editing component - * Vrací hodnotu rotace kolem osy Z nastavenou v editační komponentě - * @return Z rotation - */ - public float getZrotation() { - return rotaceZSlider.getValue(); - } - - /** - * Updates labels's text according to their actual state - * Upraví text popisků prvků pro ovládání rotace podle jejich aktuálního stavu - */ - public void updateRotationLabels(){ - String zakladniText = "Rotation by axe "; - - PrintfFormat format=new PrintfFormat("%0.3d"); - String add; - if(rotaceXSlider.getValue()<0)add="-"; - else add="+"; - rotaceXLabel.setText(zakladniText+"X "+add+format.sprintf(Math.abs(rotaceXSlider.getValue()))+"˚"); - if(rotaceYSlider.getValue()<0)add="-"; - else add="+"; - rotaceYLabel.setText(zakladniText+"Y "+add+format.sprintf(Math.abs(rotaceYSlider.getValue()))+"˚"); - if(rotaceZSlider.getValue()<0)add="-"; - else add="+"; - rotaceZLabel.setText(zakladniText+"Z "+add+format.sprintf(Math.abs(rotaceZSlider.getValue()))+"˚"); - } - - /** - * Return OpenGL canvas listener - * Vrací listener OpenGL plátna - * @return OpenGL canvas listener - */ - public GLListener getGlListener() { - return glListener; - } - - /** - * Notifies about reqest to light surface - * Informuje o požadavku na nasvětlení tělesa - * @return true if lighting is enabled - */ - public boolean isLightingEnabled() { - return !lightingChBox.isSelected(); - } -} |