Skip to content

Commit f85a391

Browse files
committed
реализация действия по загрузке модели в модель редактор
1 parent 4da239e commit f85a391

8 files changed

Lines changed: 90 additions & 1 deletion

File tree

resources/messages/messages.properties

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -93,6 +93,7 @@ ModelNodeTreeActionCreatePrimitive=Primitive
9393
ModelNodeTreeActionCreatePrimitiveBox=Box
9494
ModelNodeTreeActionCreatePrimitiveSphere=Sphere
9595
ModelNodeTreeActionCreatePrimitiveQuad=Quad
96+
ModelNodeTreeActionLoadModel=Load model
9697

9798
ModelPropertyCullHint=Cull Hint
9899
ModelPropertyShadowMode=Shadow mode

resources/messages/messages_ru.properties

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -93,6 +93,7 @@ ModelNodeTreeActionCreatePrimitive=Примитив
9393
ModelNodeTreeActionCreatePrimitiveBox=Куб
9494
ModelNodeTreeActionCreatePrimitiveSphere=Сфера
9595
ModelNodeTreeActionCreatePrimitiveQuad=Плоскость
96+
ModelNodeTreeActionLoadModel=Загрузить модель
9697

9798
ModelPropertyCullHint=Cull Hint
9899
ModelPropertyShadowMode=Режим теней

src/com/ss/editor/FileExtensions.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ public interface FileExtensions {
2121
public static final String IMAGE_BMP = "bmp";
2222
public static final String IMAGE_TIFF = "tiff";
2323
public static final String IMAGE_DDS = "dds";
24+
public static final String IMAGE_HDR = "hdr";
2425

2526
public static final String BLENDER = "blend";
2627
}

src/com/ss/editor/Messages.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -105,6 +105,7 @@ public class Messages {
105105
public static final String MODEL_NODE_TREE_ACTION_CREATE_PRIMITIVE_BOX;
106106
public static final String MODEL_NODE_TREE_ACTION_CREATE_PRIMITIVE_SPHERE;
107107
public static final String MODEL_NODE_TREE_ACTION_CREATE_PRIMITIVE_QUAD;
108+
public static final String MODEL_NODE_TREE_ACTION_LOAD_MODEL;
108109

109110
public static final String MODEL_PROPERTY_CULL_HINT;
110111
public static final String MODEL_PROPERTY_SHADOW_MODE;
@@ -151,6 +152,7 @@ public class Messages {
151152
public static final String EMPTY_MODEL_CREATOR_DESCRIPTION;
152153
public static final String EMPTY_MODEL_CREATOR_TITLE;
153154

155+
154156
static {
155157

156158
final ResourceBundle bundle = ResourceBundle.getBundle(BUNDLE_NAME, ResourceControl.getInstance());
@@ -250,6 +252,7 @@ public class Messages {
250252
MODEL_NODE_TREE_ACTION_CREATE_PRIMITIVE_BOX = bundle.getString("ModelNodeTreeActionCreatePrimitiveBox");
251253
MODEL_NODE_TREE_ACTION_CREATE_PRIMITIVE_SPHERE = bundle.getString("ModelNodeTreeActionCreatePrimitiveSphere");
252254
MODEL_NODE_TREE_ACTION_CREATE_PRIMITIVE_QUAD = bundle.getString("ModelNodeTreeActionCreatePrimitiveQuad");
255+
MODEL_NODE_TREE_ACTION_LOAD_MODEL = bundle.getString("ModelNodeTreeActionLoadModel");
253256

254257
MODEL_PROPERTY_CULL_HINT = bundle.getString("ModelPropertyCullHint");
255258
MODEL_PROPERTY_SHADOW_MODE = bundle.getString("ModelPropertyShadowMode");

src/com/ss/editor/ui/control/model/tree/ModelNodeTree.java

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -256,8 +256,12 @@ public void notifyAdded(final ModelNode<?> parent, final ModelNode<?> modelNode)
256256
return;
257257
}
258258

259+
final TreeItem<ModelNode<?>> newItem = new TreeItem<>(modelNode);
260+
259261
final ObservableList<TreeItem<ModelNode<?>>> children = parentItem.getChildren();
260-
children.add(0, new TreeItem<>(modelNode));
262+
children.add(0, newItem);
263+
264+
fill(newItem);
261265
}
262266

263267
/**
Lines changed: 76 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,76 @@
1+
package com.ss.editor.ui.control.model.tree.action;
2+
3+
import com.jme3.asset.AssetManager;
4+
import com.jme3.scene.Spatial;
5+
import com.ss.editor.FileExtensions;
6+
import com.ss.editor.Messages;
7+
import com.ss.editor.ui.control.model.tree.ModelNodeTree;
8+
import com.ss.editor.ui.control.model.tree.node.ModelNode;
9+
import com.ss.editor.ui.control.model.tree.node.ModelNodeFactory;
10+
import com.ss.editor.ui.dialog.asset.AssetEditorDialog;
11+
import com.ss.editor.ui.scene.EditorFXScene;
12+
import com.ss.editor.util.EditorUtil;
13+
14+
import java.nio.file.Path;
15+
16+
import rlib.util.array.Array;
17+
import rlib.util.array.ArrayFactory;
18+
19+
/**
20+
* Реализация действия по загрузки другой модели в эту.
21+
*
22+
* @author Ronn
23+
*/
24+
public class LoadModelAction extends AbstractNodeAction {
25+
26+
private static final Array<String> MODEL_EXTENSIONS = ArrayFactory.newArray(String.class);
27+
28+
static {
29+
MODEL_EXTENSIONS.add(FileExtensions.JME_OBJECT);
30+
}
31+
32+
public LoadModelAction(final ModelNodeTree nodeTree, final ModelNode<?> node) {
33+
super(nodeTree, node);
34+
}
35+
36+
@Override
37+
protected String getName() {
38+
return Messages.MODEL_NODE_TREE_ACTION_LOAD_MODEL;
39+
}
40+
41+
@Override
42+
protected void process() {
43+
44+
final EditorFXScene scene = EDITOR.getScene();
45+
46+
final AssetEditorDialog dialog = new AssetEditorDialog(this::processOpen);
47+
dialog.setExtensionFilter(MODEL_EXTENSIONS);
48+
dialog.show(scene.getWindow());
49+
}
50+
51+
/**
52+
* Процесс открытия файла.
53+
*/
54+
protected void processOpen(final Path file) {
55+
56+
final Path assetFile = EditorUtil.getAssetFile(file);
57+
final String assetPath = EditorUtil.toAssetPath(assetFile);
58+
59+
final AssetManager assetManager = EDITOR.getAssetManager();
60+
assetManager.clearCache();
61+
62+
final Spatial loadedModel = assetManager.loadModel(assetPath);
63+
64+
EXECUTOR_MANAGER.addEditorThreadTask(() -> {
65+
66+
final ModelNode<Spatial> newNode = ModelNodeFactory.createFor(loadedModel);
67+
final ModelNode<?> modelNode = getNode();
68+
modelNode.add(newNode);
69+
70+
EXECUTOR_MANAGER.addFXTask(() -> {
71+
final ModelNodeTree nodeTree = getNodeTree();
72+
nodeTree.notifyAdded(modelNode, newNode);
73+
});
74+
});
75+
}
76+
}

src/com/ss/editor/ui/control/model/tree/dialog/sky/ChooseTextureControl.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,7 @@ public class ChooseTextureControl extends HBox {
4242
TEXTURE_EXTENSIONS.add(FileExtensions.IMAGE_JPEG);
4343
TEXTURE_EXTENSIONS.add(FileExtensions.IMAGE_TGA);
4444
TEXTURE_EXTENSIONS.add(FileExtensions.IMAGE_DDS);
45+
TEXTURE_EXTENSIONS.add(FileExtensions.IMAGE_HDR);
4546
}
4647

4748
private static final JavaFXImageManager IMAGE_MANAGER = JavaFXImageManager.getInstance();

src/com/ss/editor/ui/control/model/tree/node/NodeModelNode.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
import com.ss.editor.ui.control.model.tree.action.CreateQuadAction;
1111
import com.ss.editor.ui.control.model.tree.action.CreateSkyAction;
1212
import com.ss.editor.ui.control.model.tree.action.CreateSphereAction;
13+
import com.ss.editor.ui.control.model.tree.action.LoadModelAction;
1314
import com.ss.editor.ui.control.model.tree.action.OptimizeGeometryAction;
1415
import com.ss.editor.ui.control.model.tree.action.RenameNodeAction;
1516

@@ -47,6 +48,7 @@ public void fillContextMenu(final ModelNodeTree nodeTree, final ObservableList<M
4748

4849
items.add(toolActions);
4950
items.add(createActions);
51+
items.add(new LoadModelAction(nodeTree, this));
5052
items.add(new RenameNodeAction(nodeTree, this));
5153

5254
super.fillContextMenu(nodeTree, items);

0 commit comments

Comments
 (0)