Ejemplo n.º 1
0
    public async void FBModelImport()
    {
        Rootobject result = new Rootobject();

        //var allCitiesQuery = DB.Collection("models");
        //var docModel = allCitiesQuery.Document("test1");
        //Firebase.Firestore.DocumentSnapshot snapshot = await docModel.GetSnapshotAsync();


        //if (snapshot.Exists)
        //   {
        //    var st = Newtonsoft.Json.JsonConvert.SerializeObject(snapshot.ToDictionary());
        //    importModel = Newtonsoft.Json.JsonConvert.DeserializeObject<Rootobject>(st);

        //    CreateMaterials.create(importModel.materials);
        //    //Create Main Object
        //    GameObject MainObj = new GameObject(importModel._object.name);
        //    //Create geometries
        //    List<GameObject> createdGeom = Geometries.create(importModel.geometries);
        //    //Create Childrens and assign them to Main Object
        //    ObjChildrens.create(importModel._object.children, MainObj, createdGeom);
        //}
        //    else
        //    {
        //    Debug.Log("Document {0} does not exist!" + snapshot.Id.ToString());
        //    }

        try
        {
            DocumentReference docRef = DB.Collection("models").Document("test1");
            var listener             = docRef.Listen(snapshot =>
            {
                if (snapshot.Exists)
                {
                    var st      = Newtonsoft.Json.JsonConvert.SerializeObject(snapshot.ToDictionary());
                    importModel = Newtonsoft.Json.JsonConvert.DeserializeObject <Rootobject>(st);
                    //If the element already exists remove it
                    var gameObjects = SceneManager.GetActiveScene().GetRootGameObjects();
                    foreach (GameObject go in gameObjects)
                    {
                        if (go.name == importModel._object.name)
                        {
                            Destroy(go);
                        }
                    }
                    CreateMaterials.create(importModel.materials);
                    //Create Main Object
                    //Create main Game object
                    GameObject MainObj = new GameObject(importModel._object.name);
                    //Create geometries
                    List <GameObject> createdGeom = Geometries.create(importModel.geometries);
                    //Create Childrens and assign them to Main Object
                    ObjChildrens.create(importModel._object.children, MainObj, createdGeom);
                }
            });
        }
        catch
        {
        }
    }
        public void TestDefect2Dim()
        {
            var ambiantSpace  = Geometries.GetSpace(CurvatureType.NEGATIVE, 2);
            var randomSamples = Simplex.RandomSamples(NUMBER_SAMPLES, 2, ambiantSpace, true, MAX_NORM);
            var counter       = 0;

            foreach (var simplex in randomSamples)
            {
                foreach (var face in simplex.Faces)
                {
                    var normalVector = VariousHelpers.GetNormalVector(face);

                    foreach (var dirVector in face.DirectionalVectors)
                    {
                        var scalarProduct = dirVector.DotProduct(normalVector);

                        if (Math.Abs(scalarProduct) >= TOLERANCE)
                        {
                            throw new Exception($"Deviation to high for simplex number {counter}");
                        }
                    }
                    counter++;
                }
            }
        }
        public void TestNormVectorComputation()
        {
            for (int iDim = 2; iDim < 10; iDim++)
            {
                var ambiantSpace  = Geometries.GetSpace(CurvatureType.FLAT, iDim);
                var randomSamples = Simplex.RandomSamples(NUMBER_SAMPLES, iDim, ambiantSpace, true, MAX_NORM);
                var counter       = 0;

                foreach (var simplex in randomSamples)
                {
                    var normalVectorSum = Vector <double> .Build.DenseOfArray(new double[iDim]);

                    foreach (var face in simplex.Faces)
                    {
                        var normalVector = VariousHelpers.GetNormalVector(face);
                        face.Integrate(0, true);
                        var volumeFace       = face.Volume;
                        var normNormalVector = normalVector.L2Norm();
                        normalVectorSum += volumeFace * normalVector;
                    }

                    if (Math.Abs(normalVectorSum.L2Norm()) >= TOLERANCE)
                    {
                        throw new Exception($"Deviation to high for simplex number {counter}");
                    }

                    counter++;
                }
            }
        }
        public (List <Simplex>, List <SimplexComplex>) RandomSamples()
        {
            var riemannianSpace = Geometries.GetSpace(CurvatureType, Dim);
            var randomSimplices = Simplex.RandomSamples(NbSamples, Dim, riemannianSpace, ZeroAmongEdges, MaxNorm);
            var randomComplexes = new List <SimplexComplex>();
            var counter         = 0;

            foreach (var randomSimplex in randomSimplices)
            {
                var stopWatch = new Stopwatch();
                stopWatch.Start();

                var simplexComplex = new SimplexComplex(randomSimplex);
                simplexComplex.Propagate();

                if (Integrate)
                {
                    simplexComplex.Integrate(MeshSteps, null, ComputeAnalytical);
                }

                if (ComputeAngles)
                {
                    simplexComplex.ComputeAngles();
                }

                counter++;

                stopWatch.Stop();
                var sampleCreationEventArgs = new SampleCreationEventArgs(counter, NbSamples, stopWatch.Elapsed.TotalSeconds);
                OnSampleCreationEvent(sampleCreationEventArgs);
                randomComplexes.Add(simplexComplex);
            }

            return(randomSimplices, randomComplexes);
        }
Ejemplo n.º 5
0
 void attributesTable_RowChanged(object sender, System.Data.DataRowChangeEventArgs e)
 {
     if (e.Action == DataRowAction.Add)
     {
         Geometries.Add(((FeatureDataRow)e.Row).Geometry);
     }
 }
Ejemplo n.º 6
0
 private void OnOgrGeometryChanged()
 {
     _ignoreGeoChanged   = true;
     _ignoreCoordChanged = true;
     Geometries.Clear();
     Coordinates.Clear();
     if (OgrGeometry != null)
     {
         var geometryCount = OgrGeometry.GetGeometryCount();
         if (geometryCount == 0)
         {
             var pointCount = OgrGeometry.GetPointCount();
             var dimension  = OgrGeometry.GetCoordinateDimension();
             for (int i = 0; i < pointCount; i++)
             {
                 double[] argout = new double[dimension];
                 OgrGeometry.GetPoint(i, argout);
                 Coordinate coordinate = new Coordinate(argout);
                 Coordinates.Add(coordinate);
             }
         }
         else
         {
             for (int i = 0; i < geometryCount; i++)
             {
                 var      ogrGeometry = OgrGeometry.GetGeometryRef(i);
                 Geometry geometry    = new Geometry(ogrGeometry);
                 Geometries.Add(geometry);
             }
         }
     }
     _ignoreGeoChanged   = false;
     _ignoreCoordChanged = false;
 }
Ejemplo n.º 7
0
        public void TestRelations(string relation)
        {
            var ambiantSpace   = Geometries.GetSpace(CurvatureType.FLAT, 2);
            var randomSamples  = Simplex.RandomSamples(NUMBER_SAMPLES, 2, ambiantSpace, true, MAX_NORM);
            var counter        = 0;
            var anlgeRelations = GetAnlgeRelations();

            foreach (var simplex in randomSamples)
            {
                foreach (var angleRelation in anlgeRelations)
                {
                    var faceA = simplex.Faces[0];
                    var faceB = simplex.Faces[1];
                    var faceC = simplex.Faces[2];

                    var normVectorA = VariousHelpers.GetNormalVector(faceA);
                    var normVectorB = VariousHelpers.GetNormalVector(faceB);
                    var normVectorC = VariousHelpers.GetNormalVector(faceC);

                    var alpha = Math.PI - VariousHelpers.Angle(normVectorB, normVectorC);
                    var beta  = Math.PI - VariousHelpers.Angle(normVectorA, normVectorC);
                    var gamma = Math.PI - VariousHelpers.Angle(normVectorA, normVectorB);

                    var value = angleRelation.Value(alpha, beta, gamma);

                    if (Math.Abs(value) >= TOLERANCE)
                    {
                        throw new Exception($"Deviation to high for simplex number {counter}");
                    }
                }

                counter++;
            }
        }
Ejemplo n.º 8
0
        public List <LineSegment> GetLineSegments()
        {
            switch (this.Type)
            {
            case GeometryType.LineString:
                return(GetLineSegments(false));

            case GeometryType.Polygon:
                return(Geometries.SelectMany(i => i.GetLineSegments(true)).ToList());

            case GeometryType.MultiLineString:
                return(Geometries.SelectMany(i => i.GetLineSegments(false)).ToList());

            case GeometryType.MultiPolygon:
                return(Geometries.SelectMany(i => i.GetLineSegments()).ToList());

            case GeometryType.GeometryCollection:
                return(Geometries.SelectMany(i => i.GetLineSegments()).ToList());

            case GeometryType.Point:
            case GeometryType.MultiPoint:
            case GeometryType.CircularString:
            case GeometryType.CompoundCurve:
            case GeometryType.CurvePolygon:
            default:
                throw new NotImplementedException();
            }
        }
Ejemplo n.º 9
0
        public GeoProject shpRead()
        {
            //IFeatureSet fs = FeatureSet.Open(shppath);
            string         str  = fs.ProjectionString;
            ProjectionInfo info = fs.Projection;

            project = new GeoProject();
            for (int i = 0; i < fs.Features.Count; i++)
            {
                Geometries         geometries = new Geometries();
                IList <Coordinate> vertics    = fs.Features[i].Coordinates;
                GeoPolygon         polygon    = new GeoPolygon();
                int circle = 1;
                foreach (Coordinate vertic in vertics)
                {
                    GeoPoint point = new GeoPoint();
                    point.X = vertic.X;
                    point.Y = vertic.Y;
                    if (polygon.Points.Contains(point))
                    {
                        polygon.Circle = circle;
                        geometries.Polygons.Add(polygon);
                        circle++;
                        polygon = new GeoPolygon();
                    }
                    polygon.Points.Add(point);
                }
                polygon.Circle = circle;
                geometries.Polygons.Add(polygon);
                project.Geometries.Add(geometries);
            }


            return(project);
        }
Ejemplo n.º 10
0
        /// <summary>
        /// Converts any <see cref="GisSharpBlog.NetTopologySuite.Geometries.Geometry"/> to the correspondant 
        /// <see cref="SharpMap.Geometries.Geometry"/>.
        /// </summary>
        public static NTSGeometry ToNTSGeometry(Geometries.Geometry geometry, IGeometryFactory factory)
        {
            if (geometry == null)
                throw new NullReferenceException("geometry");

            if (TypeOf(geometry, typeof(Geometries.Point)))
                return ToNTSPoint(geometry as Geometries.Point, factory);

            if (TypeOf(geometry, typeof (Geometries.LineString)))
                return ToNTSLineString(geometry as Geometries.LineString, factory);

            if (TypeOf(geometry, typeof (Geometries.Polygon)))
                return ToNTSPolygon(geometry as Geometries.Polygon, factory);

            if (TypeOf(geometry, typeof (Geometries.MultiPoint)))
                return ToNTSMultiPoint(geometry as Geometries.MultiPoint, factory);

            if (TypeOf(geometry, typeof (Geometries.MultiLineString)))
                return ToNTSMultiLineString(geometry as Geometries.MultiLineString, factory);

            if (TypeOf(geometry, typeof (Geometries.MultiPolygon)))
                return ToNTSMultiPolygon(geometry as Geometries.MultiPolygon, factory);

            if (TypeOf(geometry, typeof (Geometries.GeometryCollection)))
                return ToNTSGeometryCollection(geometry as Geometries.GeometryCollection, factory);

            var message = String.Format("Type {0} not supported", geometry.GetType().FullName);
            throw new NotSupportedException(message);
        }
Ejemplo n.º 11
0
 /// <summary>
 /// Removes if contained
 /// </summary>
 /// <param name="geometry"></param>
 protected virtual bool Remove(NetTopologySuite.Geometries.Geometry geometry, System.Collections.Generic.IEqualityComparer <NetTopologySuite.Geometries.Geometry> comparer = null)
 {
     if (IsReadOnly || IsEmpty)
     {
         return(false);
     }
     comparer = comparer ?? new Geometry.ExactGeometryComparer();
     for (int i = 0; i < Geometries.Length; ++i)
     {
         if (comparer.Equals(geometry, Geometries[i]))
         {
             if (geometry is IPolygonal)
             {
                 polygonCount -= geometry.NumGeometries;
             }
             else if (geometry is ILineal)
             {
                 lineStringCount -= geometry.NumGeometries;
             }
             else if (geometry is IPuntal)
             {
                 pointCount -= geometry.NumGeometries;
             }
             if (geometry is ICurvedGeometry)
             {
                 curveCount -= geometry.NumGeometries;
             }
             Geometries = Geometries.Take(i).Skip(1).Take(int.MaxValue).ToArray();
             GeometryChanged();
             return(true);
         }
     }
     return(false);
 }
Ejemplo n.º 12
0
        /// <summary>
        /// Adds to <see cref="Geometries"/>
        /// </summary>
        /// <param name="geometry"></param>
        protected void Add(NetTopologySuite.Geometries.Geometry geometry)
        {
            if (IsReadOnly)
            {
                return;
            }

            if (geometry is IPolygonal)
            {
                polygonCount += geometry.NumGeometries;
            }
            else if (geometry is ILineal)
            {
                lineStringCount += geometry.NumGeometries;
            }
            else if (geometry is IPuntal)
            {
                pointCount += geometry.NumGeometries;
            }
            if (geometry is ICurvedGeometry)
            {
                curveCount += geometry.NumGeometries;
            }
            if (IsEmpty)
            {
                Geometries = new[] { geometry };
            }
            else
            {
                Geometries = Geometries.Append(geometry).ToArray();
                GeometryChanged();
            }
        }
Ejemplo n.º 13
0
        public GeoProject shpRead()
        {
            //IFeatureSet fs = FeatureSet.Open(shppath);
            string str = fs.ProjectionString;
            ProjectionInfo info = fs.Projection;
            project = new GeoProject();
            for (int i = 0; i < fs.Features.Count; i++) {
                Geometries geometries = new Geometries();
                IList<Coordinate> vertics = fs.Features[i].Coordinates;
                GeoPolygon polygon = new GeoPolygon();
                int circle = 1;
                foreach (Coordinate vertic in vertics) {
                    GeoPoint point = new GeoPoint();
                    point.X = vertic.X;
                    point.Y = vertic.Y;
                    if (polygon.Points.Contains(point)) {
                        polygon.Circle = circle;
                        geometries.Polygons.Add(polygon);
                        circle++;
                        polygon = new GeoPolygon();
                    }
                    polygon.Points.Add(point);
                }
                polygon.Circle = circle;
                geometries.Polygons.Add(polygon);
                project.Geometries.Add(geometries);
            }

            return project;
        }
        public void TestAngleComputation2Dim()
        {
            var ambiantSpace  = Geometries.GetSpace(CurvatureType.FLAT, 2);
            var randomSamples = Simplex.RandomSamples(NUMBER_SAMPLES, 2, ambiantSpace, true, MAX_NORM);
            var counter       = 0;

            foreach (var simplex in randomSamples)
            {
                var faceA = simplex.Faces[0];
                var faceB = simplex.Faces[1];
                var faceC = simplex.Faces[2];

                var normVectorA = VariousHelpers.GetNormalVector(faceA);
                var normVectorB = VariousHelpers.GetNormalVector(faceB);
                var normVectorC = VariousHelpers.GetNormalVector(faceC);

                var alpha = Math.PI - VariousHelpers.Angle(normVectorB, normVectorC);
                var beta  = Math.PI - VariousHelpers.Angle(normVectorA, normVectorC);
                var gamma = Math.PI - VariousHelpers.Angle(normVectorA, normVectorB);

                if (Math.Abs(alpha + beta + gamma - Math.PI) >= TOLERANCE)
                {
                    throw new Exception($"Deviation to high for simplex number {counter}");
                }

                counter++;
            }
        }
Ejemplo n.º 15
0
        public GeometryViewModel()
        {
            Geometries = AUTDSettings.Instance.GeometriesReactive;

            Current    = new ReactivePropertySlim <GeometrySettingReactive?>();
            AddItem    = new ReactiveCommand();
            RemoveItem = Current.Select(c => c != null).ToReactiveCommand();
            UpItem     = Current.Select(c => c != null && c.No.Value != 0).ToReactiveCommand();
            DownItem   = Current.Select(c => c != null && c.No.Value != Geometries.Count - 1).ToReactiveCommand();

            AddItem.Subscribe(_ =>
            {
                var item = new GeometrySettingReactive(Geometries.Count);
                Geometries.Add(item);
                Current.Value = item;
            });
            RemoveItem.Subscribe(_ =>
            {
                if (Current.Value == null)
                {
                    return;
                }

                var delNo = Current.Value.No.Value;
                Geometries.RemoveAt(delNo);
                ResetNo();
                Current.Value = Geometries.Count > delNo ? Geometries[delNo] : Geometries.Count > 0 ? Geometries[delNo - 1] : null;
            });
            UpItem.Subscribe(_ =>
            {
                if (Current.Value == null)
                {
                    return;
                }

                var cNo = Current.Value.No.Value;
                var up  = Geometries[cNo - 1];
                Geometries.Insert(cNo - 1, Current.Value);
                Geometries.RemoveAt(cNo);
                Geometries[cNo] = up;
                ResetNo();
                Current.Value = Geometries[cNo - 1];
            });
            DownItem.Subscribe(_ =>
            {
                if (Current.Value == null)
                {
                    return;
                }

                var cNo  = Current.Value.No.Value;
                var down = Geometries[cNo + 1];
                Geometries.RemoveAt(cNo + 1);
                Geometries.Insert(cNo + 1, Current.Value);
                Geometries[cNo] = down;
                ResetNo();
                Current.Value = Geometries[cNo + 1];
            });
        }
Ejemplo n.º 16
0
        //CONSTRUCTOR
        public Design(RadicalComponent component)
        {
            //Access the component
            this.MyComponent = component;

            this.Variables   = new List <IVariable>();
            this.Geometries  = new List <IDesignGeometry>();
            this.Constraints = new List <Constraint>();

            // ADD VARIABLES
            //Sliders
            foreach (IGH_Param param in MyComponent.Params.Input[2].Sources)
            {
                SliderVariable s = new SliderVariable(param);
                if (s.CurrentValue == 0)
                {
                    if (s.Max >= 0.001)
                    {
                        s.UpdateValue(0.001);
                    }
                    else
                    {
                        s.UpdateValue(-0.001);
                    }
                }
                this.Variables.Add(new SliderVariable(param));
            }
            Grasshopper.Instances.ActiveCanvas.Document.NewSolution(false, Grasshopper.Kernel.GH_SolutionMode.Silent);

            //Surfaces
            for (int i = 0; i < MyComponent.Params.Input[3].Sources.Count; i++)
            {
                IGH_Param    param = MyComponent.Params.Input[3].Sources[i];
                NurbsSurface surf  = MyComponent.SrfVariables[i];
                Geometries.Add(new DesignSurface(param, surf));
            }
            //Curves
            for (int i = 0; i < MyComponent.Params.Input[4].Sources.Count; i++)
            {
                IGH_Param  param = MyComponent.Params.Input[4].Sources[i];
                NurbsCurve curv  = MyComponent.CrvVariables[i];
                this.Geometries.Add(new DesignCurve(param, curv));
            }

            // Add geometries to variables list
            // not the cleanest way to do it, review code structure
            if (Geometries.Any())
            {
                this.Variables.AddRange(Geometries.Select(x => x.Variables).SelectMany(x => x).ToList());
            }

            // ADD CONSTRAINTS
            for (int i = 0; i < component.Constraints.Count; i++)
            {
                this.Constraints.Add(new Constraint(MyComponent, Constraint.ConstraintType.morethan, i));
            }

            MyComponent.numVars = this.Variables.Where(var => var.IsActive).Count();
        }
Ejemplo n.º 17
0
            public void Write(Stream stream)
            {
                // TODO: validate in debug mode that this is producing the current data model. Look at the schema!

                stream.WriteBFastHeader(Header);
                stream.WriteBFastBody(Header, Names, Sizes, (_stream, index, name, size) =>
                {
                    switch (name)
                    {
                    case "meta":
                        _stream.Write(Meta);
                        break;

                    case VimConstants.G3dLegacySchema.Position:
                        Geometries.ForEach(g => stream.Write(g.Vertices.ToArray()));
                        break;

                    case "g3d:vertex:color:0:float32:4":
                        if (UseColors)
                        {
                            Geometries.ForEach(g => stream.Write(g.Colors.ToArray()));
                        }
                        break;

                    case VimConstants.G3dLegacySchema.Index:
                        for (var i = 0; i < Geometries.Count; ++i)
                        {
                            var g      = Geometries[i];
                            var offset = VertexOffsets[i];
                            stream.Write(g.Indices.Select(idx => idx + offset).ToArray());
                        }
                        break;

                    case VimConstants.G3dLegacySchema.Uv:
                        Geometries.ForEach(g => stream.Write(g.UVs.ToArray()));
                        break;

                    case VimConstants.G3dLegacySchema.MaterialId:
                        Geometries.ForEach(g => stream.Write(g.MaterialIds.ToArray()));
                        break;

                    case VimConstants.G3dLegacySchema.GroupId:
                        Geometries.ForEach(g => stream.Write(g.FaceGroupIds.ToArray()));
                        break;

                    case VimConstants.G3dLegacySchema.IndexOffset:
                        stream.Write(IndexOffsets);
                        break;

                    case VimConstants.G3dLegacySchema.VertexOffset:
                        stream.Write(VertexOffsets);
                        break;

                    default:
                        throw new Exception($"Not a recognized geometry buffer: {name}");
                    }
                    return(size);
                });
            }
Ejemplo n.º 18
0
 public void Attach(Geometry3D Geometry)
 {
     if (!Geometries.ContainsKey(Geometry))
     {
         Geometries.Add(Geometry, Geometry.Name);
         Count = Geometries.Count;
     }
 }
 public override bool IsValid()
 {
     if (Geometries == null)
     {
         return(false);
     }
     return(Geometries.Count > 0 && Geometries.All(ls => ls.IsValid()));
 }
Ejemplo n.º 20
0
 public void DetachGeometry(Geometry3D Geometry)
 {
     if (Geometries.ContainsKey(Geometry))
     {
         Geometries.Remove(Geometry);
         Count = Geometries.Count;
     }
 }
Ejemplo n.º 21
0
 /// <summary>
 /// Renders a LineString to the map.
 /// </summary>
 /// <param name="g">Graphics reference</param>
 /// <param name="line">LineString to render</param>
 /// <param name="pen">Pen style used for rendering</param>
 /// <param name="map">Map reference</param>
 public static void DrawLineString(System.Drawing.Graphics g, Geometries.LineString line, System.Drawing.Pen pen, SharpMap.Map map)
 {
     if (line.Vertices.Count > 1)
     {
         System.Drawing.Drawing2D.GraphicsPath gp = new System.Drawing.Drawing2D.GraphicsPath();
         gp.AddLines(line.TransformToImage(map));
         g.DrawPath(pen, gp);
     }
 }
Ejemplo n.º 22
0
 private void ClearAll()
 {
     Vertices.Clear();
     Normals.Clear();
     Colors.Clear();
     UV.Clear();
     Geometries.Clear();
     Materials.Clear();
     BoundingBox = new BoundingBox();
 }
Ejemplo n.º 23
0
 /// <summary>
 /// Converts any <see cref="SharpMap.Geometries.Geometry"/> array to the correspondant 
 /// <see cref="GisSharpBlog.NetTopologySuite.Geometries.Geometry" /> array.
 /// </summary>
 public static NTSGeometry[] ToNTSGeometry(Geometries.Geometry[] geometries,
     IGeometryFactory factory)
 {
     NTSGeometry[] converted = new NTSGeometry[geometries.Length];
     int index = 0;
     foreach (Geometries.Geometry geometry in geometries)
         converted[index++] = ToNTSGeometry(geometry, factory);
     if ((geometries.Length != converted.Length))
         throw new ApplicationException("Conversion error");
     return converted;
 }
Ejemplo n.º 24
0
 public void TransformSceneInPlace(Func <IMesh, IMesh> meshTransform = null, Func <VimSceneNode, VimSceneNode> nodeTransform = null)
 {
     if (meshTransform != null)
     {
         Geometries = Geometries.Select(meshTransform).EvaluateInParallel();
     }
     if (nodeTransform != null)
     {
         VimNodes = VimNodes.Select(nodeTransform).EvaluateInParallel();
     }
 }
Ejemplo n.º 25
0
        public override Geometry Clone()
        {
            var result = CreateNew();

            foreach (var item in Geometries.Select(x => x.Clone()))
            {
                result.Geometries.Add(item);
            }

            return(result);
        }
Ejemplo n.º 26
0
        /*
         * public void AttachRange(List<Node3D> NodeList)
         * {
         *  for (int i = 0; i < NodeList.Count; i++)
         *  {
         *      if (!Children.ContainsKey(NodeList[i]))
         *      {
         *          Children.Add(NodeList[i], NodeList[i].Name);
         *      }
         *  }
         * }
         */

        public void AttachRange(List <Geometry3D> GeometryList)
        {
            for (int i = 0; i < GeometryList.Count; i++)
            {
                if (!Geometries.ContainsKey(GeometryList[i]))
                {
                    Geometries.Add(GeometryList[i], GeometryList[i].Name);
                }
            }
            Count = Geometries.Count;
        }
Ejemplo n.º 27
0
 public void RemoveVisual(IDrawingVisual dv)
 {
     RemoveVisualChild((Visual)dv);
     RemoveLogicalChild((Visual)dv);
     if (dv is ICADEnitiyVisual)
     {
         Geometries.Remove((ICADEnitiyVisual)dv);
     }
     else
     {
         _tempVisuals.Remove(dv);
     }
 }
Ejemplo n.º 28
0
        public void AddVisual(IDrawingVisual dv)
        {
            if (dv is ICADEnitiyVisual)
            {
                Geometries.Add((ICADEnitiyVisual)dv);
            }
            else
            {
                _tempVisuals.Add(dv);
            }

            AddVisualChild((Visual)dv);
            AddLogicalChild((Visual)dv);
        }
Ejemplo n.º 29
0
 public IPoint GetLastPoint()
 {
     if (Points != null)
     {
         return(Points.Last());
     }
     else if (Geometries != null)
     {
         return(Geometries.Last().GetLastPoint());
     }
     else
     {
         return(null);
     }
 }
Ejemplo n.º 30
0
 public bool HasAnyPoint()
 {
     if (Points != null)
     {
         return(Points.Length > 0);
     }
     else if (Geometries != null)
     {
         return(Geometries.Any(g => g.HasAnyPoint()));
     }
     else
     {
         return(false);
     }
 }
Ejemplo n.º 31
0
 public IPoint[] GetAllPoints()
 {
     if (Points != null)
     {
         return(Points);
     }
     else if (Geometries != null)
     {
         return(Geometries.SelectMany(i => i.GetAllPoints()).ToArray());
     }
     else
     {
         return(null);
     }
 }
Ejemplo n.º 32
0
        public override bool Equals(object obj, SpatialEqualityOptions options)
        {
            var other = obj as GeometryCollection;

            if (ReferenceEquals(null, other))
            {
                return(false);
            }

            if (Geometries.Count != other.Geometries.Count)
            {
                return(false);
            }

            return(!Geometries
                   .Where((t, i) => !t.Equals(other.Geometries[i], options))
                   .Any());
        }
Ejemplo n.º 33
0
        /// <summary>
        /// Appends a data set to an existing data set.
        /// </summary>
        /// <param name="data">Data set to append</param>
        public void Append(SpatialDataSet data)
        {
            if (data != null)
            {
                BoundingBox = data.BoundingBox.Join(BoundingBox);

                Geometries.AddRange(data.Geometries);

                if (data.Styles != null && data.Styles.Count > 0)
                {
                    if (Styles == null)
                    {
                        Styles = data.Styles;
                    }
                    else
                    {
                        foreach (var key in data.Styles.Keys)
                        {
                            if (!Styles.ContainsKey(key))
                            {
                                Styles.Add(key, data.Styles[key]);
                            }
                        }
                    }
                }

                if (!Metadata.HasMetadata())
                {
                    Metadata = data.Metadata;
                }

                if (!string.IsNullOrEmpty(data.Error))
                {
                    if (string.IsNullOrEmpty(Error))
                    {
                        Error = data.Error;
                    }
                    else
                    {
                        Error += "\r\n" + data.Error;
                    }
                }
            }
        }
Ejemplo n.º 34
0
        public static UIElement RenderLabel(Geometries.Point position, LabelStyle labelStyle, IViewport viewport, string labelText)
        {
            var screenPosition = viewport.WorldToScreen(position);
            var windowsPosition = screenPosition.ToXaml();

            //set some defaults which should be configurable someday
            const double witdhMargin = 3.0;
            const double heightMargin = 0.0;

            var textblock = new TextBlock
            {
                Text = labelText,
                Foreground = new SolidColorBrush(labelStyle.ForeColor.ToXaml()),

                FontFamily = new FontFamily(labelStyle.Font.FontFamily),
                FontSize = labelStyle.Font.Size,
                Margin = new Thickness(witdhMargin, heightMargin, witdhMargin, heightMargin),
                FontWeight = FontWeights.Bold
            };

            var border = new Border
                {
                    Background = new SolidColorBrush(labelStyle.BackColor == null ? Colors.Transparent : labelStyle.BackColor.Color.ToXaml()),
                    CornerRadius = new CornerRadius(4),
                    Child = textblock
                };

            double textWidth;
            double textHeight;

#if NETFX_CORE
            DetermineTextWidthAndHeightWindows8(out textWidth, out textHeight, border, textblock);
#elif SILVERLIGHT
            DetermineTextWidthAndHeightSilverlight(out textWidth, out textHeight, textblock);
#else // WPF
            DetermineTextWidthAndHeightWpf(out textWidth, out textHeight, labelStyle, labelText);
#endif
            border.SetValue(Canvas.LeftProperty, windowsPosition.X + labelStyle.Offset.X
                - (textWidth + 2 * witdhMargin) * (short)labelStyle.HorizontalAlignment * 0.5f);
            border.SetValue(Canvas.TopProperty, windowsPosition.Y + labelStyle.Offset.Y
                - (textHeight + 2 * heightMargin) * (short)labelStyle.VerticalAlignment * 0.5f);

            return border;
        }
Ejemplo n.º 35
0
        public IgesGeneralSymbol(IgesGeneralNote note, IEnumerable <IgesLeader> leaders, IEnumerable <IgesEntity> geometries)
            : this()
        {
            Note = note;
            foreach (var leader in leaders)
            {
                Leaders.Add(leader);
            }

            foreach (var geometry in geometries)
            {
                Geometries.Add(geometry);
            }

            if (Geometries.Count < 1)
            {
                throw new InvalidOperationException($"At least one geometrical entity must be specified.");
            }
        }
Ejemplo n.º 36
0
 internal static NTSMultiPoint ToNTSMultiPoint(Geometries.MultiPoint geom,
     IGeometryFactory factory)
 {
    NTSPoint[] points = new NTSPoint[geom.Points.Count];
     int index = 0;
     foreach (Geometries.Point point in geom.Points)
         points[index++] = ToNTSPoint(point, factory);
     return factory.CreateMultiPoint(points) as NTSMultiPoint;
 }
Ejemplo n.º 37
0
 public static Geometries.BoundingBox MapToWorld(Geometries.BoundingBox box, IViewport view)
 {
     Geometries.Point lowerLeft = view.ScreenToWorld(box.BottomLeft);
     Geometries.Point upperRight = view.ScreenToWorld(box.TopRight);
     return new Geometries.BoundingBox(lowerLeft, upperRight);
 }
Ejemplo n.º 38
0
        public void ZoomToBox(Geometries.Point beginPoint, Geometries.Point endPoint)
        {
            double x, y, resolution;
            var width = Math.Abs(endPoint.X - beginPoint.X);
            var height = Math.Abs(endPoint.Y - beginPoint.Y);
            if (width <= 0) return;
            if (height <= 0) return;

            ZoomHelper.ZoomToBoudingbox(beginPoint.X, beginPoint.Y, endPoint.X, endPoint.Y, ActualWidth, out x, out y, out resolution);
            resolution = ZoomHelper.ClipToExtremes(map.Resolutions, resolution);

            viewport.Center = new Geometries.Point(x, y);
            viewport.Resolution = resolution;
            toResolution = resolution;

            map.ViewChanged(true, viewport.Extent, viewport.Resolution);
            OnViewChanged(true, true);
            RefreshGraphics();
            ClearBBoxDrawing();
        }
Ejemplo n.º 39
0
 internal static Polygon ToNTSPolygon(Geometries.Polygon polygon,
                                      GeometryFactory factory)
 {
     LinearRing shell = ToNTSLinearRing(polygon.ExteriorRing, factory);
     LinearRing[] holes = new LinearRing[polygon.InteriorRings.Count];
     int index = 0;
     foreach (Geometries.LinearRing hole in polygon.InteriorRings)
         holes[index++] = ToNTSLinearRing(hole, factory);
     return factory.CreatePolygon(shell, holes) as Polygon;
 }
Ejemplo n.º 40
0
 public Geometries.BoundingBox Transfrom(int fromSRID, int toSRID, Geometries.BoundingBox boundingBox)
 {
     throw new NotImplementedException();
 }
Ejemplo n.º 41
0
 /// <summary>
 /// Renders a multipolygon byt rendering each polygon in the collection by calling DrawPolygon.
 /// </summary>
 /// <param name="g">Graphics reference</param>
 /// <param name="pols">MultiPolygon to render</param>
 /// <param name="brush">Brush used for filling (null or transparent for no filling)</param>
 /// <param name="pen">Outline pen style (null if no outline)</param>
 /// <param name="clip">Specifies whether polygon clipping should be applied</param>
 /// <param name="map">Map reference</param>
 public static void DrawMultiPolygon(System.Drawing.Graphics g, Geometries.MultiPolygon pols, System.Drawing.Brush brush, System.Drawing.Pen pen, bool clip, SharpMap.Map map)
 {
     for (int i = 0; i < pols.Polygons.Count; i++)
         DrawPolygon(g, pols.Polygons[i], brush, pen, clip, map);
 }
Ejemplo n.º 42
0
 /// <summary>
 /// Renders a <see cref="SharpMap.Geometries.MultiPoint"/> to the map.
 /// </summary>
 /// <param name="g">Graphics reference</param>
 /// <param name="points">MultiPoint to render</param>
 /// <param name="symbol">Symbol to place over point</param>
 /// <param name="symbolscale">The amount that the symbol should be scaled. A scale of '1' equals to no scaling</param>
 /// <param name="offset">Symbol offset af scale=1</param>
 /// <param name="rotation">Symbol rotation in degrees</param>
 /// <param name="map">Map reference</param>
 public static void DrawMultiPoint(System.Drawing.Graphics g, Geometries.MultiPoint points, System.Drawing.Bitmap symbol, float symbolscale, System.Drawing.PointF offset, float rotation, SharpMap.Map map)
 {
     for (int i = 0; i < points.Points.Count; i++)
         DrawPoint(g, points.Points[i], symbol, symbolscale, offset, rotation, map);
 }
Ejemplo n.º 43
0
 internal static NTSMultiLineString ToNTSMultiLineString(Geometries.MultiLineString geom,
     IGeometryFactory factory)
 {
     NTSLineString[] lstrings = new NTSLineString[geom.LineStrings.Count];
     int index = 0;
     foreach (Geometries.LineString lstring in geom.LineStrings)
         lstrings[index++] = ToNTSLineString(lstring, factory);
     return factory.CreateMultiLineString(lstrings) as NTSMultiLineString;
 }
Ejemplo n.º 44
0
 internal static NTSMultiPolygon ToNTSMultiPolygon(Geometries.MultiPolygon geom,
     IGeometryFactory factory)
 {
     NTSPolygon[] polygons = new NTSPolygon[geom.Polygons.Count];
     int index = 0;
     foreach (Geometries.Polygon polygon in geom.Polygons)
         polygons[index++] = ToNTSPolygon(polygon, factory);
     return factory.CreateMultiPolygon(polygons) as NTSMultiPolygon;
 }
Ejemplo n.º 45
0
 internal static NTSGeometryCollection ToNTSGeometryCollection(Geometries.GeometryCollection geom,
     IGeometryFactory factory)
 {
     NTSGeometry[] geometries = new NTSGeometry[geom.Collection.Count];
     int index = 0;
     foreach (Geometries.Geometry geometry in geom.Collection)
         geometries[index++] = ToNTSGeometry(geometry, factory);
     return factory.CreateGeometryCollection(geometries) as NTSGeometryCollection;
 }
Ejemplo n.º 46
0
 private static bool TypeOf(Geometries.Geometry geometry, Type type)
 {
     if (geometry == null)
         throw new ArgumentNullException("geometry");
     if (type == null)
         throw new ArgumentNullException("type");
     
     return geometry.GetType() == type;
 }
Ejemplo n.º 47
0
        private void ExecuteIntersectionQuery(Geometries.Point pt, FeatureDataSet ds)
        {

            if (CoordinateTransformation != null)
            {
#if !DotSpatialProjections
                CoordinateTransformation.MathTransform.Invert();
                pt = GeometryTransform.TransformPoint(pt, CoordinateTransformation.MathTransform);
                CoordinateTransformation.MathTransform.Invert();
#else
                pt = GeometryTransform.TransformPoint(pt, CoordinateTransformation.Target, CoordinateTransformation.Source);
#endif
            }
            
            //Setup resulting Table
            FeatureDataTable dt = new FeatureDataTable();
            dt.Columns.Add("Ordinate X", typeof(Double));
            dt.Columns.Add("Ordinate Y", typeof(Double));
            for (int i = 1; i <= Bands; i++)
                dt.Columns.Add(string.Format("Value Band {0}", i), typeof(Double));

            //Get location on raster
            Double[] buffer = new double[1];
            Int32[] bandMap = new int[Bands];
            for (int i = 1; i <= Bands; i++) bandMap[i - 1] = i;
            Geometries.Point imgPt = _geoTransform.GroundToImage(pt);
            Int32 x = Convert.ToInt32(imgPt.X);
            Int32 y = Convert.ToInt32(imgPt.Y);

            //Test if raster ordinates are within bounds
            if (x < 0) return;
            if (y < 0) return;
            if (x >= _imagesize.Width) return;
            if (y >= _imagesize.Height) return;

            //Create new row, add ordinates and location geometry
            FeatureDataRow dr = dt.NewRow();
            dr.Geometry = pt;
            dr[0] = pt.X;
            dr[1] = pt.Y;

            //Add data from raster
            for (int i = 1; i <= Bands; i++)
            {
                Band band = _gdalDataset.GetRasterBand(i);
                //DataType dtype = band.DataType;
                CPLErr res = band.ReadRaster(x, y, 1, 1, buffer, 1, 1, 0, 0);
                if (res == CPLErr.CE_None)
                {
                    dr[1 + i] = buffer[0];
                }
                else
                {
                    dr[1 + i] = Double.NaN;
                }
            }
            //Add new row to table
            dt.Rows.Add(dr);

            //Add table to dataset
            ds.Tables.Add(dt);
        }
Ejemplo n.º 48
0
        //end of windows phone support
        private void PanAndZoom(Geometries.Point current, Geometries.Point previous, double deltaScale)
        {
            var diffX = previous.X - current.X;
            var diffY = previous.Y - current.Y;
            var newX = viewport.CenterX + diffX;
            var newY = viewport.CenterY + diffY;
            var zoomCorrectionX = (1 - deltaScale) * (current.X - viewport.CenterX);
            var zoomCorrectionY = (1 - deltaScale) * (current.Y - viewport.CenterY);
            viewport.Resolution = viewport.Resolution / deltaScale;

            viewport.Center = new Geometries.Point(newX - zoomCorrectionX, newY - zoomCorrectionY);
        }
Ejemplo n.º 49
0
 /// <summary>
 /// Renders a MultiLineString to the map.
 /// </summary>
 /// <param name="g">Graphics reference</param>
 /// <param name="lines">MultiLineString to be rendered</param>
 /// <param name="pen">Pen style used for rendering</param>
 /// <param name="map">Map reference</param>
 public static void DrawMultiLineString(System.Drawing.Graphics g, Geometries.MultiLineString lines, System.Drawing.Pen pen, SharpMap.Map map)
 {
     for (int i = 0; i < lines.LineStrings.Count; i++)
         DrawLineString(g, lines.LineStrings[i], pen, map);
 }
Ejemplo n.º 50
0
 internal static NTSPolygon ToNTSPolygon(Geometries.Polygon geom,
     IGeometryFactory factory)
 {
     NTSLinearRing shell = ToNTSLinearRing(geom.ExteriorRing, factory);
     NTSLinearRing[] holes = new NTSLinearRing[geom.InteriorRings.Count];
     int index = 0;
     foreach (Geometries.LinearRing hole in geom.InteriorRings)
         holes[index++] = ToNTSLinearRing(hole, factory);
     return factory.CreatePolygon(shell, holes) as NTSPolygon;
 }
Ejemplo n.º 51
0
        /// <summary>
        /// Converts any <see cref=GisSharpBlog.NetTopologySuite.Geometries.Geometry"/> to the correspondant 
        /// <see cref="SharpMap.Geometries.Geometry"/>.
        /// </summary>
        /// <param name="geometry"></param>
        /// <returns></returns>
        public static Geometry ToNTSGeometry(Geometries.Geometry geometry,
                                             GeometryFactory factory)
        {
            if (geometry == null)
                throw new NullReferenceException("geometry");

            if (geometry.GetType() == typeof (Point))
                return ToNTSPoint(geometry as Point, factory);

            else if (geometry.GetType() == typeof (Geometries.LineString))
                return ToNTSLineString(geometry as Geometries.LineString, factory);

            else if (geometry.GetType() == typeof (Geometries.Polygon))
                return ToNTSPolygon(geometry as Geometries.Polygon, factory);

            else if (geometry.GetType() == typeof (Geometries.MultiPoint))
                return ToNTSMultiPoint(geometry as Geometries.MultiPoint, factory);

            else if (geometry.GetType() == typeof (Geometries.MultiLineString))
                return ToNTSMultiLineString(geometry as Geometries.MultiLineString, factory);

            else if (geometry.GetType() == typeof (Geometries.MultiPolygon))
                return ToNTSMultiPolygon(geometry as Geometries.MultiPolygon, factory);

            else if (geometry.GetType() == typeof (Geometries.GeometryCollection))
                return ToNTSGeometryCollection(geometry as Geometries.GeometryCollection, factory);

            else throw new NotSupportedException("Type " + geometry.GetType().FullName + " not supported");
        }
Ejemplo n.º 52
0
        private static CGRect RoundToPixel(Geometries.Point min, Geometries.Point max)
        {
            // To get seamless aligning you need to round the 
            // corner coordinates to pixel. The new width and
            // height will be a result of that.
            var x = Math.Round(min.X);
            var y = Math.Round(min.Y);
            var width = Math.Round(max.X) - Math.Round(min.X);
            var height = Math.Round(max.Y) - Math.Round(min.Y);

            return new CGRect((float)x, (float)y, (float)width, (float)height);
        }
Ejemplo n.º 53
0
 public Geometries.Geometry Transform(int fromSRID, int toSRID, Geometries.Geometry geometry)
 {
     throw new NotImplementedException();
 }
Ejemplo n.º 54
0
 internal static NTSLinearRing ToNTSLinearRing(Geometries.LinearRing geom,
     IGeometryFactory factory)
 {
     NTSCoordinate[] coordinates = new NTSCoordinate[geom.NumPoints];
     int index = 0;
     foreach (Geometries.Point point in geom.Vertices)
         coordinates[index++] = ToNTSCoordinate(point, factory);
     return factory.CreateLinearRing(coordinates) as NTSLinearRing;
 }
Ejemplo n.º 55
0
 /// <summary>
 /// 获取WKT
 /// </summary>
 /// <param name="geometries">地块</param>
 /// <returns>地块WKT</returns>
 private static string getWkt(Geometries geometries)
 {
     string wkt = "";
     return wkt;
 }
Ejemplo n.º 56
0
 internal static NTSPoint ToNTSPoint(Geometries.Point point, IGeometryFactory factory)
 {
     return factory.CreatePoint(ToNTSCoordinate(point, factory));
 }
Ejemplo n.º 57
0
 internal static NTSCoordinate ToNTSCoordinate(Geometries.Point geom, IGeometryFactory factory)
 {
     return new Coordinate(geom.X, geom.Y);
 }
Ejemplo n.º 58
0
 public void DrawGeometry(Geometries.IGeometry geometry)
 {
     throw new NotImplementedException();
 }
Ejemplo n.º 59
0
        private Bitmap GeneratePartialBitmap(Geometries.Point center, XPosition xPos, YPosition yPos)
        {
            double x = center.X, y = center.Y;

            switch (xPos)
            { 
                case XPosition.Right:
                    x += m_Map.Envelope.Width;
                    break;
                case XPosition.Left:
                    x -= m_Map.Envelope.Width;
                    break;                
            }

            switch (yPos)
            {
                case YPosition.Top:
                    y += m_Map.Envelope.Height;
                    break;
                case YPosition.Bottom:
                    y -= m_Map.Envelope.Height;
                    break;
            }

            m_Map.Center = new Geometries.Point(x, y);
            return m_Map.GetMap() as Bitmap;
        }
Ejemplo n.º 60
0
        private void GetBounds(Geometries.Point p1, Geometries.Point p2, 
            out Geometries.Point lowerLeft, out Geometries.Point upperRight)
        {
            lowerLeft = new Geometries.Point(Math.Min(p1.X, p2.X), Math.Min(p1.Y, p2.Y));
            upperRight = new Geometries.Point(Math.Max(p1.X, p2.X), Math.Max(p1.Y, p2.Y));

            System.Diagnostics.Debug.WriteLine("p1: " + p1);
            System.Diagnostics.Debug.WriteLine("p2: " + p2);
            System.Diagnostics.Debug.WriteLine("lowerLeft: " + lowerLeft);
            System.Diagnostics.Debug.WriteLine("upperRight: " + upperRight);
        }