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
9 * VTT Technical Research Centre of Finland - initial API and implementation
\r
10 *******************************************************************************/
\r
11 package org.simantics.proconf.g3d.actions;
\r
13 import java.util.Collection;
\r
14 import java.util.List;
\r
16 import javax.vecmath.Vector3d;
\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
29 public class FocusAction extends ContextAction{
\r
31 private OrbitalCamera camera;
\r
33 Vector3d focusPoint = null;
\r
35 public FocusAction(ThreeDimensionalEditorBase parent) {
\r
37 camera = parent.getCamera();
\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
49 public boolean usable(Graph graph,List<Resource> resources) {
\r
50 if (resources.size() != 1)
\r
52 IEntity t = EntityFactory.create(graph, resources.get(0));
\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
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
66 camera.setTarget(focusPoint);
\r
67 parent.setViewChanged(true);
\r