protected override void OnClick()
        {
            if (Module1.Current.SelectedItems == null)
            {
                return;
            }

            int    aantalVerdiepingen;
            double verdiepingsHoogte;

            QueuedTask.Run(() =>
            {
                var editOperation = new EditOperation();
                foreach (KeyValuePair <MapMember, List <long> > item in Module1.Current.SelectedItems)
                {
                    var layer = item.Key as BasicFeatureLayer;

                    foreach (long oid in item.Value)
                    {
                        var feature        = layer.Inspect(oid);
                        aantalVerdiepingen = new Random().Next(3, 10);
                        verdiepingsHoogte  = double.Parse(feature["PandHoogte"].ToString()) / aantalVerdiepingen;

                        feature["PandHoogte"] = verdiepingsHoogte;
                        editOperation.Modify(feature);
                        for (int i = 1; i < aantalVerdiepingen; i++)
                        {
                            editOperation.Create(layer, GeometryEngine.Move(feature.Shape, 0, 0, (i * (verdiepingsHoogte * 2))), new Action <long>(x => newFloorCreated(x, layer, verdiepingsHoogte, feature.Shape.Extent.ZMin)));
                        }
                    }
                }
                bool succeded = editOperation.Execute();
            });
        }
Esempio n. 2
0
        protected override Task <bool> OnSketchCompleteAsync(Geometry geometry)
        {
            //Run on MCT
            return(QueuedTask.Run(() =>
            {
                //get the templates
                var map = MapView.Active.Map;
                IEnumerable <Layer> layers = map.GetLayersAsFlattenedList().AsEnumerable();
                Layer mainLayer = layers.FirstOrDefault(l => l.Name == "main");
                Layer mhLayer = layers.FirstOrDefault(l => l.Name == "Manhole");
                Layer conLayer = layers.FirstOrDefault(l => l.Name == "Connector");

                if ((mainLayer == null) || (mhLayer == null) || (conLayer == null))
                {
                    return false;
                }

                var mainTemplate = mainLayer.GetTemplate("main");
                var mhTemplate = mhLayer.GetTemplate("Manhole");
                var conTemplate = conLayer.GetTemplate("Connector");

                if ((mainTemplate == null) || (mhTemplate == null) || (conTemplate == null))
                {
                    return false;
                }

                var op = new EditOperation();
                op.Name = "Create main-connector-manhole";
                op.SelectModifiedFeatures = false;
                op.SelectNewFeatures = false;

                //create the main geom
                var mainGeom = GeometryEngine.Move(geometry, 0, 0, -20);
                op.Create(mainTemplate, mainGeom);

                //create manhole points and connector
                foreach (var pnt in ((Polyline)geometry).Points)
                {
                    //manhole point at sketch vertex
                    op.Create(mhTemplate, pnt);

                    //vertical connector between mahole and main
                    var conPoints = new List <MapPoint>();
                    conPoints.Add(pnt);                                 //top of vertical connector
                    conPoints.Add(GeometryEngine.Move(pnt, 0, 0, -20)); //bottom of vertical connector
                    var conPolyLine = PolylineBuilder.CreatePolyline(conPoints);
                    op.Create(conTemplate, conPolyLine);
                }
                return op.Execute();
            }));
        }
        private void BlowUpBuilding(MapViewMouseButtonEventArgs e)
        {
            int    aantalVerdiepingen;
            double verdiepingsHoogte;

            QueuedTask.Run(() =>
            {
                Dictionary <MapMember, List <long> > selectedItems = GetSelectedItems(e);
                EditOperation editOperation = new EditOperation();
                foreach (KeyValuePair <MapMember, List <long> > item in selectedItems)
                {
                    BasicFeatureLayer layer = item.Key as BasicFeatureLayer;
                    if (layer.ShapeType != ArcGIS.Core.CIM.esriGeometryType.esriGeometryPolygon)
                    {
                        continue;
                    }

                    foreach (long oid in item.Value)
                    {
                        var feature        = layer.Inspect(oid);
                        aantalVerdiepingen = new Random().Next(3, 10);
                        verdiepingsHoogte  = double.Parse(feature["PandHoogte"].ToString()) / aantalVerdiepingen;

                        double buildingZMinValue = feature.Shape.Extent.ZMin;
                        feature["PandHoogte"]    = verdiepingsHoogte;
                        editOperation.Modify(feature);
                        for (int i = 1; i < aantalVerdiepingen; i++)
                        {
                            var newFloorGeometry = GeometryEngine.Move(feature.Shape, 0, 0, (i * (verdiepingsHoogte * 2)));
                            editOperation.Create(layer, newFloorGeometry, new Action <long>(x => OnNewFloorCreated(x, layer, verdiepingsHoogte, buildingZMinValue)));
                        }
                    }
                }
                bool succeded = editOperation.Execute();
            });
        }