A complete 3D game development suite written purely in Java.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
jmonkeyengine/sdk/jme3-ogretools/src/com/jme3/gde/ogretools/convert/AdvOgreXMLConvertAction.java

114 lines
5.1 KiB

/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package com.jme3.gde.ogretools.convert;
import com.jme3.export.binary.BinaryExporter;
import com.jme3.gde.core.assets.ProjectAssetManager;
import com.jme3.scene.Spatial;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import java.io.File;
import java.io.IOException;
import org.netbeans.api.progress.ProgressHandle;
import org.netbeans.api.progress.ProgressHandleFactory;
import org.openide.DialogDisplayer;
import org.openide.NotifyDescriptor;
import org.openide.NotifyDescriptor.Confirmation;
import org.openide.filesystems.FileObject;
import org.openide.filesystems.FileUtil;
import org.openide.loaders.DataObject;
import org.openide.util.Exceptions;
import org.openide.windows.WindowManager;
public final class AdvOgreXMLConvertAction implements ActionListener {
private final DataObject context;
public AdvOgreXMLConvertAction(DataObject context) {
this.context = context;
}
public void actionPerformed(ActionEvent ev) {
final ProjectAssetManager manager = context.getLookup().lookup(ProjectAssetManager.class);
if (manager == null) {
// StatusDisplayer.getDefault().setStatusText("Project has no AssetManager!");
return;
}
// TODO use context
final FileObject file = context.getPrimaryFile();
final OgreXMLConvertOptions options = new OgreXMLConvertOptions(file.getPath(), file.getParent().getPath() + "/" + "+" + file.getNameExt());
AdvOgreXMLConvertDialog dialog = new AdvOgreXMLConvertDialog(WindowManager.getDefault().getMainWindow(), true, options);
dialog.setLocationRelativeTo(WindowManager.getDefault().getMainWindow());
dialog.setVisible(true);
Runnable run = new Runnable() {
public void run() {
ProgressHandle progressHandle = ProgressHandleFactory.createHandle("Converting OgreXML");
progressHandle.start();
OgreXMLConvert converter = new OgreXMLConvert();
if (!converter.doConvert(options, progressHandle)) {
progressHandle.finish();
return;
}
FileObject sourceMatFile = FileUtil.toFileObject(new File(options.getSourceFile().replaceAll("mesh.xml", "material")));
if (sourceMatFile != null && sourceMatFile.isValid()) {
try {
sourceMatFile.copy(sourceMatFile.getParent(), "+" + sourceMatFile.getName(), sourceMatFile.getExt());
} catch (IOException ex) {
Exceptions.printStackTrace(ex);
}
} else {
Confirmation msg = new NotifyDescriptor.Confirmation(
"No material file found for " + file.getNameExt() + "\n"
+ "A file named " + file.getNameExt().replaceAll(".mesh.xml", ".material") + " should be in the same folder.\n"
+ "Press OK to import mesh only.",
NotifyDescriptor.OK_CANCEL_OPTION,
NotifyDescriptor.WARNING_MESSAGE);
Object result = DialogDisplayer.getDefault().notify(msg);
if (!NotifyDescriptor.OK_OPTION.equals(result)) {
return;
}
}
FileObject file = FileUtil.toFileObject(new File(options.getDestFile()));
// FileLock lock = null;
try {
// lock = file.lock();
progressHandle.progress("Creating j3o file");
String outputPath = file.getParent().getPath() + "/" + context.getPrimaryFile().getName() + ".j3o";
manager.clearCache();
Spatial model = manager.loadModel(manager.getRelativeAssetPath(file.getPath()));
BinaryExporter exp = BinaryExporter.getInstance();
exp.save(model, new File(outputPath));
//cleanup
try {
FileUtil.toFileObject(new File(options.getDestFile())).delete();
FileUtil.toFileObject(new File(options.getDestFile().replaceAll("mesh.xml", "material"))).delete();
} catch (Exception e) {
}
context.getPrimaryFile().getParent().refresh();
} catch (IOException ex) {
Exceptions.printStackTrace(ex);
Confirmation msg = new NotifyDescriptor.Confirmation(
"Error converting " + file.getNameExt() + "\n" + ex.toString(),
NotifyDescriptor.OK_CANCEL_OPTION,
NotifyDescriptor.ERROR_MESSAGE);
DialogDisplayer.getDefault().notify(msg);
} finally {
// if (lock != null) {
// lock.releaseLock();
// }
progressHandle.finish();
}
}
};
new Thread(run).start();
}
}