]> gerrit.simantics Code Review - simantics/3d.git/blob - org.simantics.proconf.g3d/src/org/simantics/proconf/g3d/actions/FocusAction.java
latest release (0.41), third attempt
[simantics/3d.git] / org.simantics.proconf.g3d / src / org / simantics / proconf / g3d / actions / FocusAction.java
1 /*******************************************************************************\r
2  * Copyright (c) 2007 VTT Technical Research Centre of Finland and others.\r
3  * All rights reserved. This program and the accompanying materials\r
4  * are made available under the terms of the Eclipse Public License v1.0\r
5  * which accompanies this distribution, and is available at\r
6  * http://www.eclipse.org/legal/epl-v10.html\r
7  *\r
8  * Contributors:\r
9  *     VTT Technical Research Centre of Finland - initial API and implementation\r
10  *******************************************************************************/\r
11 package org.simantics.proconf.g3d.actions;\r
12 \r
13 import java.util.Collection;\r
14 import java.util.List;\r
15 \r
16 import javax.vecmath.Vector3d;\r
17 \r
18 import org.simantics.db.Graph;\r
19 import org.simantics.db.Resource;\r
20 import org.simantics.layer0.utils.IEntity;\r
21 import org.simantics.layer0.utils.EntityFactory;\r
22 import org.simantics.proconf.g3d.Activator;\r
23 import org.simantics.proconf.g3d.Resources;\r
24 import org.simantics.proconf.g3d.base.G3DTools;\r
25 import org.simantics.proconf.g3d.base.ThreeDimensionalEditorBase;\r
26 import org.simantics.proconf.g3d.common.OrbitalCamera;\r
27 import org.simantics.proconf.g3d.stubs.Tuple3;\r
28 \r
29 public class FocusAction extends ContextAction{\r
30 \r
31         private OrbitalCamera camera;\r
32         \r
33     Vector3d focusPoint = null;\r
34     \r
35     public FocusAction(ThreeDimensionalEditorBase parent) {\r
36         super(parent);\r
37         camera = parent.getCamera();\r
38     }\r
39     \r
40     public void init() {\r
41         this.setText("Focus");\r
42         this.setToolTipText("Focus");\r
43         this.setImageDescriptor(Activator.imageDescriptorFromPlugin(Activator.PLUGIN_ID, "icons/eye.png"));\r
44     }\r
45     \r
46 \r
47     \r
48     @Override\r
49   public boolean usable(Graph graph,List<Resource> resources) {\r
50       if (resources.size() != 1)\r
51           return false;\r
52       IEntity t = EntityFactory.create(graph, resources.get(0));\r
53       \r
54       if (t.isInstanceOf(Resources.g3dResource.G3DNode)) {\r
55           Collection<IEntity> p = t.getRelatedObjects(Resources.g3dResource.HasWorldPosition);\r
56           if (p == null || p.size() != 1)\r
57               return false;\r
58           else \r
59               //focusPoint = new Vector3d(G3DTools.getPoint(new Position(graph,p.iterator().next().getResource())));\r
60               focusPoint = new Vector3d(G3DTools.getPoint(new Tuple3(graph,p.iterator().next().getResource())));\r
61       }\r
62       return true;\r
63   }\r
64     \r
65     public void run() {\r
66         camera.setTarget(focusPoint);\r
67         parent.setViewChanged(true);\r
68     }\r
69 \r
70    \r
71 }\r