Made spatial picking optimization optional for now 40/2240/2
authorTuukka Lehtonen <tuukka.lehtonen@semantum.fi>
Wed, 26 Sep 2018 05:24:14 +0000 (08:24 +0300)
committerTuukka Lehtonen <tuukka.lehtonen@semantum.fi>
Wed, 26 Sep 2018 05:24:52 +0000 (05:24 +0000)
R-tree -based element picking doesn't work for DnD monitors at the
moment, needs more work.

gitlab #66

Change-Id: Ia30243aa48fdd75d238e71422ec0aec358e46af9

bundles/org.simantics.g2d/src/org/simantics/g2d/diagram/handler/impl/PickContextImpl.java

index a891d62b70a360f7e750097f57cc2e0b26368ef5..f6fd5fe6ddab9067960d168a1c487161b1065e4c 100644 (file)
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2007, 2010 Association for Decentralized Information Management
+ * Copyright (c) 2007, 2018 Association for Decentralized Information Management
  * in Industry THTH ry.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
@@ -8,6 +8,7 @@
  *
  * Contributors:
  *     VTT Technical Research Centre of Finland - initial API and implementation
+ *     Semantum Oy - gitlab #66 - parallel/spatial optimization
  *******************************************************************************/
 package org.simantics.g2d.diagram.handler.impl;
 
@@ -51,6 +52,8 @@ import org.slf4j.LoggerFactory;
 
 /**
  * @author Toni Kalajainen
+ * @author Jani Simomaa
+ * @author Tuukka Lehtonen
  */
 public class PickContextImpl implements PickContext {
 
@@ -62,6 +65,16 @@ public class PickContextImpl implements PickContext {
 
        private static final ThreadLocal<Rectangle2D> perThreadElementBounds = ThreadLocal.withInitial(() -> new Rectangle2D.Double());
 
+       private boolean useRTree;
+
+       public PickContextImpl() {
+               this(false);
+       }
+
+       public PickContextImpl(boolean useRTree) {
+               this.useRTree = useRTree;
+       }
+
        @Override
        public void pick(
                        IDiagram diagram, 
@@ -171,11 +184,11 @@ public class PickContextImpl implements PickContext {
                        return shape.getBounds2D();
        }
 
-       private static List<IElement> pickElements(IDiagram diagram, PickRequest request) {
+       private List<IElement> pickElements(IDiagram diagram, PickRequest request) {
                ILayers layers = diagram.getHint(DiagramHints.KEY_LAYERS);
 
                // Get the scene graph nodes that intersect the pick-requests pick shape
-               INode spatialRoot = request.pickContext != null
+               INode spatialRoot = useRTree && request.pickContext != null
                                ? request.pickContext.getSceneGraph().lookupNode(SceneGraphConstants.SPATIAL_ROOT_NODE_ID)
                                : null;