From 687dbb4d1363904e4a07b7075a5fb646ea957f1b Mon Sep 17 00:00:00 2001 From: "nor..67" Date: Sun, 16 Sep 2012 00:17:01 +0000 Subject: [PATCH] SDK: - re-add ogrexml check for mesh.xml files git-svn-id: https://jmonkeyengine.googlecode.com/svn/trunk@9738 75d07b2b-3a1a-0410-a2c5-0572b91ccdca --- .../jme3/gde/ogrexml/OgreXMLDataObject.java | 60 +++++++++++++++++++ 1 file changed, 60 insertions(+) diff --git a/sdk/jme3-ogrexml/src/com/jme3/gde/ogrexml/OgreXMLDataObject.java b/sdk/jme3-ogrexml/src/com/jme3/gde/ogrexml/OgreXMLDataObject.java index 2160a46ee..f64989eca 100644 --- a/sdk/jme3-ogrexml/src/com/jme3/gde/ogrexml/OgreXMLDataObject.java +++ b/sdk/jme3-ogrexml/src/com/jme3/gde/ogrexml/OgreXMLDataObject.java @@ -32,12 +32,19 @@ package com.jme3.gde.ogrexml; import com.jme3.asset.ModelKey; +import com.jme3.gde.core.assets.ProjectAssetManager; import com.jme3.gde.core.assets.SpatialAssetDataObject; +import com.jme3.scene.Spatial; import com.jme3.scene.plugins.ogre.OgreMeshKey; 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.loaders.DataObjectExistsException; import org.openide.loaders.MultiFileLoader; +import org.openide.util.Exceptions; public class OgreXMLDataObject extends SpatialAssetDataObject { @@ -53,5 +60,58 @@ public class OgreXMLDataObject extends SpatialAssetDataObject { assetKey = new OgreMeshKey(super.getAssetKey().getName()); return (OgreMeshKey)assetKey; } + + @Override + public synchronized Spatial loadAsset() { + if (isModified() && savable != null) { + return (Spatial) savable; + } + ProjectAssetManager mgr = getLookup().lookup(ProjectAssetManager.class); + if (mgr == null) { + DialogDisplayer.getDefault().notifyLater(new NotifyDescriptor.Message("File is not part of a project!\nCannot load without ProjectAssetManager.")); + return null; + } + String name = getPrimaryFile().getName(); + int idx = name.toLowerCase().indexOf(".mesh"); + if(idx!=-1){ + name = name.substring(0, idx); + } + String matName = ((OgreMeshKey)getAssetKey()).getMaterialName(); + if(matName == null){ + matName = name; + } + FileObject sourceMatFile = getPrimaryFile().getParent().getFileObject(matName, "material"); + if (sourceMatFile == null || !sourceMatFile.isValid()) { + Confirmation msg = new NotifyDescriptor.Confirmation( + "No material file found for " + getPrimaryFile().getNameExt() + "\n" + + "A file named " + matName + ".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()); + listListener.start(); + Spatial spatial = mgr.loadModel(getAssetKey()); + listListener.stop(); + savable = spatial; + lock.releaseLock(); + return spatial; + } catch (Exception ex) { + Exceptions.printStackTrace(ex); + } finally { + if (lock != null) { + lock.releaseLock(); + } + } + return null; + } }