From c3fbd5209a28f7c0ea57aa2f237c3acdd8f4fe85 Mon Sep 17 00:00:00 2001
From: Armand Bahi <armand.bahi@veremes.com>
Date: Fri, 2 Nov 2018 10:26:10 +0100
Subject: [PATCH] Avoid intersections interface

---
 module/javascript/app/vmap/tools/insert.js | 11 +++
 module/lang/lang-en.json                   |  5 ++
 module/lang/lang-fr.json                   |  5 ++
 module/template/tools/insert.html          | 89 ++++++++++++++++------
 4 files changed, 86 insertions(+), 24 deletions(-)

diff --git a/module/javascript/app/vmap/tools/insert.js b/module/javascript/app/vmap/tools/insert.js
index 803d13ad..36e8096d 100644
--- a/module/javascript/app/vmap/tools/insert.js
+++ b/module/javascript/app/vmap/tools/insert.js
@@ -187,6 +187,7 @@ nsVmap.nsToolsManager.Insert.prototype.inserttoolController = function ($scope,
         this['snapOptions']['mode'] = oVmap['properties']['snapping']['defaut_snapp_mode'];
         this['snapOptions']['limit'] = oVmap['properties']['snapping']['defaut_limit'];
         this['snapOptions']['visible'] = oVmap['properties']['snapping']['defaut_visibility'];
+        this['snapOptions']['avoidIntersections'] = {};
     }
 
     /**
@@ -1478,7 +1479,17 @@ nsVmap.nsToolsManager.Insert.prototype.inserttoolController.prototype.getMobileB
 nsVmap.nsToolsManager.Insert.prototype.inserttoolController.prototype.showSnappingOptionsModal = function () {
     oVmap.log('nsVmap.nsToolsManager.Insert.prototype.inserttoolController.prototype.showSnappingOptionsModal');
 
+    var this_ = this;
     this['tmpSnapOptions'] = angular.copy(this['snapOptions']);
+
+    this.$scope_.$applyAsync(function(){
+        for (var i = 0; i < this_.$scope_['aQueryableBOs'].length; i++) {
+            if (!goog.isDefAndNotNull(this_['tmpSnapOptions']['avoidIntersections'][this_.$scope_['aQueryableBOs'][i]['bo_id']])) {
+                this_['tmpSnapOptions']['avoidIntersections'][this_.$scope_['aQueryableBOs'][i]['bo_id']] = false;
+            }
+        }
+    });
+
     $('#vmap-insert-snap-options-modal').modal('show');
 };
 
diff --git a/module/lang/lang-en.json b/module/lang/lang-en.json
index 7c92b8f0..bb158c6f 100644
--- a/module/lang/lang-en.json
+++ b/module/lang/lang-en.json
@@ -288,6 +288,11 @@
     "FORM_SELECTION_BUFFER_CONFIGURATION_CONFIGURATION_VMAP_CONFIG": "Buffer (en mm sur l'écran)",
     "FORM_SELECTION_MAX_SCALE_BUFFER_CONFIGURATION_CONFIGURATION_VMAP_CONFIG": "Buffer maximum (en mètres sur le terrain)",
     "TITLE_SNAPPING_CONFIGURATION_CONFIGURATION_VMAP_CONFIG": "Snapping options",
+    "FORM_SNAPPING_LIMIT_CONFIGURATION_CONFIGURATION_VMAP_CONFIG": "Manimum limit of points per object",
+    "FORM_SNAPPING_TOLERANCE_CONFIGURATION_CONFIGURATION_VMAP_CONFIG": "Snapping tolerance (in pixels)",
+    "FORM_SNAPPING_TYPE_ACC_CONFIGURATION_CONFIGURATION_VMAP_CONFIG": "Default snapping type",
+    "FORM_SNAPPING_VISIBILITY_CONFIGURATION_CONFIGURATION_VMAP_CONFIG": "Selected objects visibility",
+    "FORM_SNAPPING_AVOID_INTERSECTIONS_CONFIGURATION_CONFIGURATION_VMAP_CONFIG": "Avoid intersections",
     "FORM_SNAPPING_DEFAUT_LIMIT_CONFIGURATION_CONFIGURATION_VMAP_CONFIG": "Manimum limit of points per object",
     "FORM_SNAPPING_DEFAUT_TOLERANCE_CONFIGURATION_CONFIGURATION_VMAP_CONFIG": "Snapping tolerance (in pixels)",
     "FORM_SNAPPING_DEFAUT_TYPE_ACC_CONFIGURATION_CONFIGURATION_VMAP_CONFIG": "Default snapping type",
diff --git a/module/lang/lang-fr.json b/module/lang/lang-fr.json
index 55c18086..3e3bbb64 100644
--- a/module/lang/lang-fr.json
+++ b/module/lang/lang-fr.json
@@ -288,6 +288,11 @@
     "FORM_SELECTION_BUFFER_CONFIGURATION_CONFIGURATION_VMAP_CONFIG": "Buffer de sélection (en mm sur l'écran)",
     "FORM_SELECTION_MAX_SCALE_BUFFER_CONFIGURATION_CONFIGURATION_VMAP_CONFIG": "Buffer maximum (en mètres sur le terrain)",
     "TITLE_SNAPPING_CONFIGURATION_CONFIGURATION_VMAP_CONFIG": "Options d'accrochage",
+    "FORM_SNAPPING_LIMIT_CONFIGURATION_CONFIGURATION_VMAP_CONFIG": "Limite de points accrochables",
+    "FORM_SNAPPING_TOLERANCE_CONFIGURATION_CONFIGURATION_VMAP_CONFIG": "Tolérance d'accrochage (pixels)",
+    "FORM_SNAPPING_TYPE_ACC_CONFIGURATION_CONFIGURATION_VMAP_CONFIG": "Type d'accrochage",
+    "FORM_SNAPPING_VISIBILITY_CONFIGURATION_CONFIGURATION_VMAP_CONFIG": "Visibilité des zones d'accrochage",
+    "FORM_SNAPPING_AVOID_INTERSECTIONS_CONFIGURATION_CONFIGURATION_VMAP_CONFIG": "Eviter les intersections",
     "FORM_SNAPPING_DEFAUT_LIMIT_CONFIGURATION_CONFIGURATION_VMAP_CONFIG": "Limite de points accrochables",
     "FORM_SNAPPING_DEFAUT_TOLERANCE_CONFIGURATION_CONFIGURATION_VMAP_CONFIG": "Tolérance d'accrochage (pixels)",
     "FORM_SNAPPING_DEFAUT_TYPE_ACC_CONFIGURATION_CONFIGURATION_VMAP_CONFIG": "Type d'accrochage",
diff --git a/module/template/tools/insert.html b/module/template/tools/insert.html
index 8011c69f..f10c71ac 100644
--- a/module/template/tools/insert.html
+++ b/module/template/tools/insert.html
@@ -242,32 +242,73 @@
                 <h4 class="modal-title" data-translate="TITLE_SNAPPING_CONFIGURATION_CONFIGURATION_VMAP_CONFIG"></h4>
             </div>
             <div class="modal-body modal-body-big-with-footer-3 font-12">
-                <div class="col-sm-6">
-                    <h5 data-translate="FORM_SNAPPING_DEFAUT_TYPE_ACC_CONFIGURATION_CONFIGURATION_VMAP_CONFIG"></h5>
-                    <select class="form-control"
-                            ng-model="ctrl.tmpSnapOptions.mode">
-                        <option value="segment_edge_node" data-translate="FORM_SNAPPING_METHOD_SEN_CONFIGURATION_CONFIGURATION_VMAP_CONFIG"></option>
-                        <option value="edge_node" data-translate="FORM_SNAPPING_METHOD_EN_CONFIGURATION_CONFIGURATION_VMAP_CONFIG"></option>
-                        <option value="node" data-translate="FORM_SNAPPING_METHOD_N_CONFIGURATION_CONFIGURATION_VMAP_CONFIG"></option>
-                    </select>
-                </div>
-                <div class="col-sm-6">
-                    <h5 data-translate="FORM_SNAPPING_DEFAUT_TOLERANCE_CONFIGURATION_CONFIGURATION_VMAP_CONFIG"></h5>
-                    <input type="number" class="form-control" ng-model="ctrl.tmpSnapOptions.tolerance">
-                </div>
-                <div class="col-sm-6">
-                    <h5 data-translate="FORM_SNAPPING_DEFAUT_LIMIT_CONFIGURATION_CONFIGURATION_VMAP_CONFIG"></h5>
-                    <input type="number" class="form-control" ng-model="ctrl.tmpSnapOptions.limit">
+                <div class="row">
+                    <div class="col-sm-6">
+                        <h5 data-translate="FORM_SNAPPING_TYPE_ACC_CONFIGURATION_CONFIGURATION_VMAP_CONFIG"></h5>
+                        <select class="form-control"
+                                ng-model="ctrl.tmpSnapOptions.mode">
+                            <option value="segment_edge_node" data-translate="FORM_SNAPPING_METHOD_SEN_CONFIGURATION_CONFIGURATION_VMAP_CONFIG"></option>
+                            <option value="edge_node" data-translate="FORM_SNAPPING_METHOD_EN_CONFIGURATION_CONFIGURATION_VMAP_CONFIG"></option>
+                            <option value="node" data-translate="FORM_SNAPPING_METHOD_N_CONFIGURATION_CONFIGURATION_VMAP_CONFIG"></option>
+                        </select>
+                    </div>
+                    <div class="col-sm-6">
+                        <h5 data-translate="FORM_SNAPPING_TOLERANCE_CONFIGURATION_CONFIGURATION_VMAP_CONFIG"></h5>
+                        <input type="number" class="form-control" ng-model="ctrl.tmpSnapOptions.tolerance">
+                    </div>
                 </div>
-                <div class="col-sm-6">
-                    <h5 data-translate="FORM_SNAPPING_DEFAUT_VISIBILITY_CONFIGURATION_CONFIGURATION_VMAP_CONFIG"></h5>
-                    <div class="radio radio-inline">
-                        <input type="radio" name="vmap_insert_snap_visible" id="vmap_insert_snap_visible_1" ng-model="ctrl.tmpSnapOptions.visible" ng-value="true">
-                        <label for="vmap_insert_snap_visible_1">Oui</label>
+                <div class="row">
+                    <div class="col-sm-6">
+                        <h5 data-translate="FORM_SNAPPING_LIMIT_CONFIGURATION_CONFIGURATION_VMAP_CONFIG"></h5>
+                        <input type="number" class="form-control" ng-model="ctrl.tmpSnapOptions.limit">
                     </div>
-                    <div class="radio radio-inline">
-                        <input type="radio" name="vmap_insert_snap_visible" id="vmap_insert_snap_visible_2" ng-model="ctrl.tmpSnapOptions.visible" ng-value="false">
-                        <label for="vmap_insert_snap_visible_2">Non</label>
+                    <div class="col-sm-6">
+                        <h5 data-translate="FORM_SNAPPING_VISIBILITY_CONFIGURATION_CONFIGURATION_VMAP_CONFIG"></h5>
+                        <div class="radio radio-inline">
+                            <input type="radio" name="vmap_insert_snap_visible" id="vmap_insert_snap_visible_1" ng-model="ctrl.tmpSnapOptions.visible" ng-value="true">
+                            <label for="vmap_insert_snap_visible_1">Oui</label>
+                        </div>
+                        <div class="radio radio-inline">
+                            <input type="radio" name="vmap_insert_snap_visible" id="vmap_insert_snap_visible_2" ng-model="ctrl.tmpSnapOptions.visible" ng-value="false">
+                            <label for="vmap_insert_snap_visible_2">Non</label>
+                        </div>
+                    </div>
+                </div>
+                <div class="row">
+                    <div class="col-sm-6">
+                        <div class="row">
+                            <div class="col-sm-5">
+
+                            </div>
+                            <div class="col-sm-7">
+                                <h5 data-translate="FORM_SNAPPING_AVOID_INTERSECTIONS_CONFIGURATION_CONFIGURATION_VMAP_CONFIG"></h5>
+                            </div>
+                        </div>
+                        <div class="row"
+                                ng-repeat="bo in aQueryableBOs"
+                                ng-if="bo.bo_geom_type === 'POLYGON' || bo.bo_geom_type === 'MULTIPOLYGON' || bo.bo_geom_type === 'GEOMETRYCOLLECTION' || bo.bo_geom_type === 'GEOMETRY'">
+                            <div class="col-sm-5 text-right">
+                                <label>{{bo.bo_title}}</label>
+                            </div>
+                            <div class="col-sm-7 text-right">
+                                <div class="radio radio-inline">
+                                    <input type="radio"
+                                            name="vmap_insert_snap_avoid_intersections_{{$index}}"
+                                            id="vmap_insert_snap_avoid_intersections_1_{{$index}}"
+                                            ng-model="ctrl.tmpSnapOptions.avoidIntersections[bo.bo_id]"
+                                            ng-value="true">
+                                    <label for="vmap_insert_snap_avoid_intersections_1_{{$index}}">Oui</label>
+                                </div>
+                                <div class="radio radio-inline">
+                                    <input  type="radio"
+                                            name="vmap_insert_snap_avoid_intersections_{{$index}}"
+                                            id="vmap_insert_snap_avoid_intersections_2_{{$index}}"
+                                            ng-model="ctrl.tmpSnapOptions.avoidIntersections[bo.bo_id]"
+                                            ng-value="false">
+                                    <label for="vmap_insert_snap_avoid_intersections_2_{{$index}}">Non</label>
+                                </div>
+                            </div>
+                        </div>
                     </div>
                 </div>
             </div>
-- 
GitLab