| /******************************************************************************* |
| * Copyright (c) 2018 Agence spatiale canadienne / Canadian Space Agency |
| * All rights reserved. This program and the accompanying materials |
| * are made available under the terms of the Eclipse Public License v1.0 |
| * which accompanies this distribution, and is available at |
| * http://www.eclipse.org/legal/epl-v10.html |
| * |
| * Contributors: |
| * Pierre Allard, |
| * Regent L'Archeveque - initial API and implementation |
| * |
| * SPDX-License-Identifier: EPL-1.0 |
| * |
| *******************************************************************************/ |
| package org.eclipse.apogy.addons.impl; |
| |
| import org.eclipse.apogy.common.math.ApogyCommonMathFacade; |
| import org.eclipse.apogy.common.topology.ApogyCommonTopologyFactory; |
| import org.eclipse.apogy.common.topology.GroupNode; |
| import org.eclipse.apogy.common.topology.Node; |
| import org.eclipse.apogy.common.topology.TransformNode; |
| import org.eclipse.apogy.core.FeatureOfInterest; |
| import org.eclipse.apogy.core.FeatureOfInterestNode; |
| import org.eclipse.apogy.core.topology.ApogyCoreTopologyFacade; |
| import org.slf4j.Logger; |
| import org.slf4j.LoggerFactory; |
| |
| public abstract class GeometryPlacementAtFeatureOfInterestToolCustomImpl |
| extends GeometryPlacementAtFeatureOfInterestToolImpl { |
| |
| private static final Logger Logger = LoggerFactory.getLogger(GeometryPlacementAtFeatureOfInterestToolImpl.class); |
| |
| private TransformNode transformNode; |
| private Node geometryNode; |
| |
| @Override |
| public void setFeatureOfInterest(FeatureOfInterest newFeatureOfInterest) { |
| super.setFeatureOfInterest(newFeatureOfInterest); |
| |
| // Forces update. |
| update(); |
| } |
| |
| @Override |
| public abstract Node loadGeometry(); |
| |
| @Override |
| public void initialise() { |
| super.initialise(); |
| |
| // Force update. |
| update(); |
| } |
| |
| @Override |
| public void setActive(boolean value) { |
| super.setActive(value); |
| |
| // Forces update. |
| update(); |
| } |
| |
| @Override |
| public void setVisible(boolean visible) { |
| super.setVisible(visible); |
| |
| // Forces update. |
| update(); |
| } |
| |
| @Override |
| public void setName(String name) { |
| super.setName(name); |
| |
| getTransformNode().setNodeId(name); |
| } |
| |
| @Override |
| public void dispose() { |
| if (this.transformNode != null) { |
| if (this.transformNode.getParent() instanceof GroupNode) { |
| GroupNode parent = (GroupNode) this.transformNode.getParent(); |
| parent.getChildren().remove(this.transformNode); |
| } |
| } |
| |
| super.dispose(); |
| } |
| |
| @Override |
| public TransformNode basicGetTransformNode() { |
| if (this.transformNode == null) { |
| this.transformNode = ApogyCommonTopologyFactory.eINSTANCE.createTransformNode(); |
| this.transformNode.setNodeId(getName()); |
| this.transformNode.setDescription("Tranform used to orient the geometry."); |
| |
| this.transformNode.setTransformation(ApogyCommonMathFacade.INSTANCE.createIdentityMatrix4x4().asMatrix4d()); |
| |
| // Loads geometry |
| try { |
| this.transformNode.getChildren().add(getGeometryNode()); |
| } catch (Throwable t) { |
| Logger.error(t.getMessage(), t); |
| } |
| } |
| |
| return this.transformNode; |
| } |
| |
| protected Node getGeometryNode() { |
| if (this.geometryNode == null) { |
| this.geometryNode = loadGeometry(); |
| } |
| |
| return this.geometryNode; |
| } |
| |
| protected void update() { |
| if (getFeatureOfInterestNode() != null) { |
| // Detach from previous FeatureOfInterestNode. |
| getFeatureOfInterestNode().getChildren().remove(getTransformNode()); |
| } |
| |
| if (getFeatureOfInterest() != null) { |
| // Get new FeatureOfInterestNode. |
| FeatureOfInterestNode newFeatureOfInterestNode = ApogyCoreTopologyFacade.INSTANCE |
| .getFeatureOfInterestNode(getFeatureOfInterest()); |
| |
| // Updates the FeatureOfInterestNode. |
| setFeatureOfInterestNode(newFeatureOfInterestNode); |
| |
| if (newFeatureOfInterestNode != null) { |
| newFeatureOfInterestNode.getChildren().add(getTransformNode()); |
| } |
| } |
| } |
| } // GeometryPlacementAtFeatureOfInterestToolImpl |