private void guardarImagen(File f) {
    try {
      int w = panelImagen.getWidth();
      int h = panelImagen.getHeight();
      BufferedImage buffIm = new BufferedImage(w, h, BufferedImage.TYPE_INT_RGB);
      Graphics2D g = buffIm.createGraphics();
      panelImagen.paint(g);

      ImageIO.write(buffIm, "png", f);
    } catch (IOException e) {
      System.out.println("Error de escritura");
    }
  }
  protected void cargar(File f) {
    // Parsear archivo *.sur para cargar estructura
    Objeto3D obj = new Objeto3D(f);

    // Mostrar objeto en pantalla
    panelImagen.setObjeto(obj);
    actualizarLuz();
  }
  protected void actualizarVista() {
    String vista = (String) comboVista.getSelectedItem();

    switch (vista) {
      case "Solido":
        panelImagen.setVista(Objeto3D.VISTA_SOLIDO);
        break;
      case "Triangulacion":
        panelImagen.setVista(Objeto3D.VISTA_TRIANGULOS);
        break;
      case "Puntos":
        panelImagen.setVista(Objeto3D.VISTA_PUNTOS);
        break;
      default:
        break;
    }
  }
  protected void actualizarMuestraAmbiente() {
    int r = (int) spinAmbRed.getValue();
    int g = (int) spinAmbGreen.getValue();
    int b = (int) spinAmbBlue.getValue();

    Color c = new Color(r, g, b);
    lblAmbMuestra.setIcon(new ImageIcon(new ImgMuestra(c, 80, 80)));
    panelImagen.setAmbientColor(c);
  }
  protected void actualizarMuestraObjeto() {
    int r = (int) spinObjRed.getValue();
    int g = (int) spinObjGreen.getValue();
    int b = (int) spinObjBlue.getValue();

    Color c = new Color(r, g, b);
    lblObjMuestra.setIcon(new ImageIcon(new ImgMuestra(c, 80, 80)));
    panelImagen.setObjectColor(c);
  }
  protected void agregarTransformacionTabla() {
    if (!panelImagen.isCargado()) return;

    double[][] matriz = new double[4][4];

    for (int i = 0; i < 4; i++) {
      for (int j = 0; j < 4; j++) {
        Object valor = tableTransformacion.getValueAt(i, j);

        try {
          if (valor != null) {
            matriz[i][j] = Double.parseDouble((String) valor);
          }
        } catch (Exception e) {
        }
      }
    }

    panelImagen.objeto.aplicarTransformacion((new MatrizTransformacion(matriz)));
    panelImagen.updateUI();
  }
 protected void actualizarLuz() {
   panelImagen.setLuzPunto(comboLuz.getSelectedIndex());
 }