- Fix Advanced OgreXML import crashing without material file
- Show warning when no material file is found for OgreXML/Scene files - Convert File.mesh.xml to File.j3o instead of File.mesh.j3o git-svn-id: https://jmonkeyengine.googlecode.com/svn/trunk@8262 75d07b2b-3a1a-0410-a2c5-0572b91ccdca
This commit is contained in:
parent
fdd29d7be3
commit
c624043ea1
@ -4,7 +4,6 @@
|
|||||||
*/
|
*/
|
||||||
package com.jme3.gde.ogretools.convert;
|
package com.jme3.gde.ogretools.convert;
|
||||||
|
|
||||||
import com.jme3.asset.DesktopAssetManager;
|
|
||||||
import com.jme3.export.binary.BinaryExporter;
|
import com.jme3.export.binary.BinaryExporter;
|
||||||
import com.jme3.gde.core.assets.ProjectAssetManager;
|
import com.jme3.gde.core.assets.ProjectAssetManager;
|
||||||
import com.jme3.scene.Spatial;
|
import com.jme3.scene.Spatial;
|
||||||
@ -17,7 +16,6 @@ import org.netbeans.api.progress.ProgressHandleFactory;
|
|||||||
import org.openide.DialogDisplayer;
|
import org.openide.DialogDisplayer;
|
||||||
import org.openide.NotifyDescriptor;
|
import org.openide.NotifyDescriptor;
|
||||||
import org.openide.NotifyDescriptor.Confirmation;
|
import org.openide.NotifyDescriptor.Confirmation;
|
||||||
import org.openide.filesystems.FileLock;
|
|
||||||
import org.openide.filesystems.FileObject;
|
import org.openide.filesystems.FileObject;
|
||||||
import org.openide.filesystems.FileUtil;
|
import org.openide.filesystems.FileUtil;
|
||||||
import org.openide.loaders.DataObject;
|
import org.openide.loaders.DataObject;
|
||||||
@ -59,7 +57,7 @@ public final class AdvOgreXMLConvertAction implements ActionListener {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
FileObject sourceMatFile = FileUtil.toFileObject(new File(options.getSourceFile().replaceAll("mesh.xml", "material")));
|
FileObject sourceMatFile = FileUtil.toFileObject(new File(options.getSourceFile().replaceAll("mesh.xml", "material")));
|
||||||
if (sourceMatFile.isValid()) {
|
if (sourceMatFile != null && sourceMatFile.isValid()) {
|
||||||
try {
|
try {
|
||||||
sourceMatFile.copy(sourceMatFile.getParent(), "+" + sourceMatFile.getName(), sourceMatFile.getExt());
|
sourceMatFile.copy(sourceMatFile.getParent(), "+" + sourceMatFile.getName(), sourceMatFile.getExt());
|
||||||
} catch (IOException ex) {
|
} catch (IOException ex) {
|
||||||
|
@ -31,11 +31,18 @@
|
|||||||
*/
|
*/
|
||||||
package com.jme3.gde.ogrexml;
|
package com.jme3.gde.ogrexml;
|
||||||
|
|
||||||
|
import com.jme3.gde.core.assets.ProjectAssetManager;
|
||||||
import com.jme3.gde.core.assets.SpatialAssetDataObject;
|
import com.jme3.gde.core.assets.SpatialAssetDataObject;
|
||||||
|
import com.jme3.scene.Spatial;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
|
import org.openide.DialogDisplayer;
|
||||||
|
import org.openide.NotifyDescriptor;
|
||||||
|
import org.openide.NotifyDescriptor.Confirmation;
|
||||||
|
import org.openide.filesystems.FileLock;
|
||||||
import org.openide.filesystems.FileObject;
|
import org.openide.filesystems.FileObject;
|
||||||
import org.openide.loaders.DataObjectExistsException;
|
import org.openide.loaders.DataObjectExistsException;
|
||||||
import org.openide.loaders.MultiFileLoader;
|
import org.openide.loaders.MultiFileLoader;
|
||||||
|
import org.openide.util.Exceptions;
|
||||||
|
|
||||||
public class OgreSceneDataObject extends SpatialAssetDataObject {
|
public class OgreSceneDataObject extends SpatialAssetDataObject {
|
||||||
|
|
||||||
@ -43,4 +50,51 @@ public class OgreSceneDataObject extends SpatialAssetDataObject {
|
|||||||
super(pf, loader);
|
super(pf, loader);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Spatial loadAsset() {
|
||||||
|
if (isModified() && savable != null) {
|
||||||
|
return (Spatial) savable;
|
||||||
|
}
|
||||||
|
ProjectAssetManager mgr = getLookup().lookup(ProjectAssetManager.class);
|
||||||
|
if (mgr == null) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
String name = getPrimaryFile().getName();
|
||||||
|
FileObject sourceMatFile = getPrimaryFile().getParent().getFileObject(name, "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 " + getPrimaryFile().getNameExt() + "\n"
|
||||||
|
+ "A file named " + name + ".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 null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
FileLock lock = null;
|
||||||
|
try {
|
||||||
|
lock = getPrimaryFile().lock();
|
||||||
|
mgr.deleteFromCache(getAssetKey());
|
||||||
|
Spatial spatial = mgr.loadModel(getAssetKey());
|
||||||
|
savable = spatial;
|
||||||
|
lock.releaseLock();
|
||||||
|
return spatial;
|
||||||
|
} catch (Exception ex) {
|
||||||
|
Exceptions.printStackTrace(ex);
|
||||||
|
} finally {
|
||||||
|
if (lock != null) {
|
||||||
|
lock.releaseLock();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -32,12 +32,23 @@
|
|||||||
package com.jme3.gde.ogrexml;
|
package com.jme3.gde.ogrexml;
|
||||||
|
|
||||||
import com.jme3.asset.ModelKey;
|
import com.jme3.asset.ModelKey;
|
||||||
|
import com.jme3.gde.core.assets.AssetData;
|
||||||
|
import com.jme3.gde.core.assets.ProjectAssetManager;
|
||||||
import com.jme3.gde.core.assets.SpatialAssetDataObject;
|
import com.jme3.gde.core.assets.SpatialAssetDataObject;
|
||||||
|
import com.jme3.scene.Spatial;
|
||||||
import com.jme3.scene.plugins.ogre.OgreMeshKey;
|
import com.jme3.scene.plugins.ogre.OgreMeshKey;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
|
import java.util.logging.Level;
|
||||||
|
import java.util.logging.Logger;
|
||||||
|
import org.openide.DialogDisplayer;
|
||||||
|
import org.openide.NotifyDescriptor;
|
||||||
|
import org.openide.NotifyDescriptor.Confirmation;
|
||||||
|
import org.openide.filesystems.FileLock;
|
||||||
import org.openide.filesystems.FileObject;
|
import org.openide.filesystems.FileObject;
|
||||||
|
import org.openide.loaders.DataObject;
|
||||||
import org.openide.loaders.DataObjectExistsException;
|
import org.openide.loaders.DataObjectExistsException;
|
||||||
import org.openide.loaders.MultiFileLoader;
|
import org.openide.loaders.MultiFileLoader;
|
||||||
|
import org.openide.util.Exceptions;
|
||||||
|
|
||||||
public class OgreXMLDataObject extends SpatialAssetDataObject {
|
public class OgreXMLDataObject extends SpatialAssetDataObject {
|
||||||
|
|
||||||
@ -54,4 +65,89 @@ public class OgreXMLDataObject extends SpatialAssetDataObject {
|
|||||||
return (OgreMeshKey)assetKey;
|
return (OgreMeshKey)assetKey;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Spatial loadAsset() {
|
||||||
|
if (isModified() && savable != null) {
|
||||||
|
return (Spatial) savable;
|
||||||
|
}
|
||||||
|
ProjectAssetManager mgr = getLookup().lookup(ProjectAssetManager.class);
|
||||||
|
if (mgr == null) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
String name = getPrimaryFile().getName();
|
||||||
|
int idx = name.toLowerCase().indexOf(".mesh");
|
||||||
|
if(idx!=-1){
|
||||||
|
name = name.substring(0, idx);
|
||||||
|
}
|
||||||
|
FileObject sourceMatFile = getPrimaryFile().getParent().getFileObject(name, "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 " + getPrimaryFile().getNameExt() + "\n"
|
||||||
|
+ "A file named " + name + ".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 null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
FileLock lock = null;
|
||||||
|
try {
|
||||||
|
lock = getPrimaryFile().lock();
|
||||||
|
mgr.deleteFromCache(getAssetKey());
|
||||||
|
Spatial spatial = mgr.loadModel(getAssetKey());
|
||||||
|
savable = spatial;
|
||||||
|
lock.releaseLock();
|
||||||
|
return spatial;
|
||||||
|
} catch (Exception ex) {
|
||||||
|
Exceptions.printStackTrace(ex);
|
||||||
|
} finally {
|
||||||
|
if (lock != null) {
|
||||||
|
lock.releaseLock();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void saveAsset() throws IOException {
|
||||||
|
super.saveAsset();
|
||||||
|
ProjectAssetManager mgr = getLookup().lookup(ProjectAssetManager.class);
|
||||||
|
if (mgr == null) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
FileObject outFile = null;
|
||||||
|
if (saveExtension == null) {
|
||||||
|
outFile = getPrimaryFile();
|
||||||
|
} else {
|
||||||
|
String name = getPrimaryFile().getName();
|
||||||
|
int idx = name.toLowerCase().indexOf(".mesh");
|
||||||
|
if(idx!=-1){
|
||||||
|
name = name.substring(0, idx);
|
||||||
|
}
|
||||||
|
outFile = getPrimaryFile().getParent().getFileObject(name, saveExtension);
|
||||||
|
if (outFile == null) {
|
||||||
|
Logger.getLogger(SpatialAssetDataObject.class.getName()).log(Level.SEVERE, "Could not locate saved file.");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
try {
|
||||||
|
DataObject targetModel = DataObject.find(outFile);
|
||||||
|
AssetData properties = targetModel.getLookup().lookup(AssetData.class);
|
||||||
|
if (properties != null) {
|
||||||
|
properties.loadProperties();
|
||||||
|
properties.setProperty("ORIGINAL_PATH", mgr.getRelativeAssetPath(outFile.getPath()));
|
||||||
|
properties.saveProperties();
|
||||||
|
}
|
||||||
|
} catch (Exception ex) {
|
||||||
|
Exceptions.printStackTrace(ex);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user