Browse Source

SDK:
- re-add ogrexml check for mesh.xml files

git-svn-id: https://jmonkeyengine.googlecode.com/svn/trunk@9738 75d07b2b-3a1a-0410-a2c5-0572b91ccdca

nor..67 13 năm trước cách đây
mục cha
commit
783b447a10
1 tập tin đã thay đổi với 60 bổ sung0 xóa
  1. 60 0
      jme3-ogrexml/src/com/jme3/gde/ogrexml/OgreXMLDataObject.java

+ 60 - 0
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;
+    }
 
 }