Exemplo n.º 1
0
        public override void WriteGroupCodes()
        {
            WriteGroupCodeValue(10, X0.ToString().Trim());
            WriteGroupCodeValue(20, Y0.ToString().Trim());
            WriteGroupCodeValue(30, Z0.ToString().Trim());

            WriteGroupCodeValue(40, Size.ToString().Trim());

            WriteGroupCodeValue(2, ShapeName.Trim());

            WriteGroupCodeValue(50, RotationAngle.ToString().Trim());
            WriteGroupCodeValue(51, ObliqueAngle.ToString().Trim());

            WriteGroupCodeValue(41, XScale.ToString().Trim());
        }
Exemplo n.º 2
0
        public override void WriteGroupCodes()
        {
            int flags;

            WriteGroupCodeValue(10, X0.ToString().Trim());
            WriteGroupCodeValue(20, Y0.ToString().Trim());
            WriteGroupCodeValue(30, Z0.ToString().Trim());

            WriteGroupCodeValue(40, StartingWidth.ToString().Trim());
            WriteGroupCodeValue(41, EndingWidth.ToString().Trim());
            WriteGroupCodeValue(42, Bulge.ToString().Trim());
            WriteGroupCodeValue(50, CurveFitTangentDirection.ToString().Trim());

            flags = 0;

            if (ExtraVertexCreatedByCurveFitting)
            {
                flags += 1;
            }
            if (HasCurveFitTangent)
            {
                flags += 2;
            }
            if (SplineVertexCreatedBySplineFitting)
            {
                flags += 8;
            }
            if (SplineFrameControlPoint)
            {
                flags += 16;
            }
            if (Is3DPolylineVertex)
            {
                flags += 32;
            }
            if (Is3DPolygonMeshVertex)
            {
                flags += 64;
            }
            if (IsPolyFaceMeshVertex)
            {
                flags += 128;
            }

            WriteGroupCodeValue(70, flags.ToString().Trim());
        }
Exemplo n.º 3
0
        public override void WriteGroupCodes()
        {
            WriteGroupCodeValue(10, X0.ToString().Trim());
            WriteGroupCodeValue(20, Y0.ToString().Trim());
            WriteGroupCodeValue(30, Z0.ToString().Trim());

            WriteGroupCodeValue(11, X1.ToString().Trim());
            WriteGroupCodeValue(21, Y1.ToString().Trim());
            WriteGroupCodeValue(31, Z1.ToString().Trim());

            WriteGroupCodeValue(12, X2.ToString().Trim());
            WriteGroupCodeValue(22, Y2.ToString().Trim());
            WriteGroupCodeValue(32, Z2.ToString().Trim());

            WriteGroupCodeValue(13, X3.ToString().Trim());
            WriteGroupCodeValue(23, Y3.ToString().Trim());
            WriteGroupCodeValue(33, Z3.ToString().Trim());
        }
Exemplo n.º 4
0
        public Bitmap saveSurface()
        {
            Image <Gray, ushort> image = new Image <Gray, ushort>(xwidth, yheight);

            for (int x = 0; x < xwidth; x++)
            {
                for (int y = 0; y < yheight; y++)
                {
                    image.Data[yheight - y - 1, x, 0] = surface[x, y];
                }
            }
            image.Save(form1.SavePath + "\\" + "surface.png");
            StreamWriter sw = new StreamWriter(form1.SavePath + "\\" + "surface.xyz");

            sw.WriteLine("{0} {1} {2} {3}", X0.ToString(), Z0.ToString(), rastersize.ToString(), offset.ToString());
            sw.Close();
            return(image.ToBitmap());
        }
Exemplo n.º 5
0
        public override void WriteGroupCodes()
        {
            int flags;

            WriteGroupCodeValue(10, X0.ToString().Trim());
            WriteGroupCodeValue(20, Y0.ToString().Trim());
            WriteGroupCodeValue(30, Z0.ToString().Trim());

            WriteGroupCodeValue(11, AlignmentX.ToString().Trim());
            WriteGroupCodeValue(21, AlignmentY.ToString().Trim());
            WriteGroupCodeValue(31, AlignmentZ.ToString().Trim());

            WriteGroupCodeValue(40, Height.ToString().Trim());

            WriteGroupCodeValue(1, Text.Trim());

            WriteGroupCodeValue(50, RotationAngle.ToString().Trim());
            WriteGroupCodeValue(51, ObliqueAngle.ToString().Trim());

            WriteGroupCodeValue(41, XScale.ToString().Trim());

            WriteGroupCodeValue(7, TextStyle.Trim());

            flags = 0;

            if (Backwards)
            {
                flags += 2;
            }
            if (UpsideDown)
            {
                flags += 4;
            }

            WriteGroupCodeValue(71, flags.ToString().Trim());

            if (HorizontalAlignment == CGlobals.TextHorizontalAlignment.Left)
            {
                WriteGroupCodeValue(72, "0");
            }
            else if (HorizontalAlignment == CGlobals.TextHorizontalAlignment.Center)
            {
                WriteGroupCodeValue(72, "1");
            }
            else if (HorizontalAlignment == CGlobals.TextHorizontalAlignment.Right)
            {
                WriteGroupCodeValue(72, "2");
            }
            else if (HorizontalAlignment == CGlobals.TextHorizontalAlignment.Aligned)
            {
                WriteGroupCodeValue(72, "3");
            }
            else if (HorizontalAlignment == CGlobals.TextHorizontalAlignment.Middle)
            {
                WriteGroupCodeValue(72, "4");
            }
            else if (HorizontalAlignment == CGlobals.TextHorizontalAlignment.Fit)
            {
                WriteGroupCodeValue(72, "5");
            }
            else
            {
                WriteGroupCodeValue(72, "0");
            }

            if (VerticalAlignment == CGlobals.TextVerticalAlignment.Baseline)
            {
                WriteGroupCodeValue(73, "0");
            }
            else if (VerticalAlignment == CGlobals.TextVerticalAlignment.Bottom)
            {
                WriteGroupCodeValue(73, "1");
            }
            else if (VerticalAlignment == CGlobals.TextVerticalAlignment.Middle)
            {
                WriteGroupCodeValue(73, "2");
            }
            else if (VerticalAlignment == CGlobals.TextVerticalAlignment.Top)
            {
                WriteGroupCodeValue(73, "4");
            }
            else
            {
                WriteGroupCodeValue(73, "0");
            }
        }
Exemplo n.º 6
0
        /// <summary>
        /// Calculate the roughness lenght based on objects like buildings and vegetation areas
        /// </summary>
        /// <param name="ReaderClass">Program Reader Class</param>
        private static void CreateAdaptiveRoughnessLenght(ProgramReaders ReaderClass)
        {
            //read buildings into a local array
            float[][] TempArray = CreateArray <float[]>(NII + 2, () => new float[NJJ + 2]);

            if (Topo == 1)
            {
                ReaderClass.ReadBuildingsTerrain(TempArray);
            }
            else
            {
                ReaderClass.ReadBuildingsFlat(TempArray);
            }

            ArrayFilter fil = new ArrayFilter();

            //Find building outlines
            //TempArray = fil.FindOutline(TempArray);

            // Take building height into Z0
            float max = 0;

            for (int i = 0; i <= NII; i++)
            {
                for (int j = 0; j <= NJJ; j++)
                {
                    if (TempArray[i][j] > 1)
                    {
                        float val = MathF.Log10(TempArray[i][j]); //roughness from building height
                        max = MathF.Max(max, val);
                        Program.Z0Gral[i][j] = MathF.Min(AdaptiveRoughnessMax, val);
                    }
                }
            }

            max = Math.Min(max, Program.AdaptiveRoughnessMax);
            //Filter Roughness
            Program.Z0Gral = fil.LowPassGaussian(Program.Z0Gral, Program.DXK, 40, max); // scale with max

            //roughness length for building walls
            float buildingZ0 = 0.01F;

            if (File.Exists("building_roughness.txt") == true)
            {
                try
                {
                    using (StreamReader sr = new StreamReader("building_roughness.txt"))
                    {
                        buildingZ0 = Convert.ToSingle(sr.ReadLine().Replace(".", Program.Decsep));
                    }
                }
                catch
                { }
            }

            //Set Roughness within buildings to building wall value and clear TempArray
            for (int i = 0; i <= NII; i++)
            {
                for (int j = 0; j <= NJJ; j++)
                {
                    if (TempArray[i][j] > Program.Z0Gral[i][j] * 2)
                    {
                        Program.Z0Gral[i][j] = buildingZ0;
                    }
                    TempArray[i][j] = 0;
                }
            }

            // Read vegetation heigth, limit vegetation roughness to 1.3 m and combine with building roughness
            ReaderClass.ReadVegetationDomain(TempArray);
            //Limit vegetation to 1.5
            for (int i = 0; i <= NII; i++)
            {
                for (int j = 0; j <= NJJ; j++)
                {
                    TempArray[i][j] = MathF.Min(1.3F, TempArray[i][j]);
                }
            }

            // Filter vegetation array
            TempArray = fil.LowPassGaussian(TempArray, Program.DXK, 15, 0); // no scale
            fil       = null;

            for (int i = 0; i <= NII; i++)
            {
                for (int j = 0; j <= NJJ; j++)
                {
                    Program.Z0Gral[i][j] = MathF.Max(MathF.Min(1.5F, TempArray[i][j]), Program.Z0Gral[i][j]);
                }
            }

            if ((Program.Topo == 1) && (Program.LandUseAvailable == true))
            {
                float DDX1       = Program.DDX[1];
                float DDY1       = Program.DDY[1];
                int   Delta_IKOO = (int)XsiMinGral - Program.GrammWest;
                int   Delta_JKOO = (int)EtaMinGral - Program.GrammSouth;
                //With topography and LandUse File for Roughness lenght -> Compare with Z0Gramm and take larger value
                for (int i = 0; i <= NII; i++)
                {
                    for (int j = 0; j <= NJJ; j++)
                    {
                        int GrammCellX = Math.Clamp((int)((Delta_IKOO + DXK * i - DXK * 0.5) / DDX1) + 1, 1, Program.NX);
                        int GrammCellY = Math.Clamp((int)((Delta_JKOO + DYK * j - DYK * 0.5) / DDY1) + 1, 1, Program.NY);
                        Program.Z0Gral[i][j] = MathF.Max(Program.Z0Gramm[GrammCellX][GrammCellY],
                                                         MathF.Min(AdaptiveRoughnessMax, Program.Z0Gral[i][j]));
                    }
                }
            }
            else
            {
                // limit roughness between min and max
                for (int i = 0; i <= NII; i++)
                {
                    for (int j = 0; j <= NJJ; j++)
                    {
                        Program.Z0Gral[i][j] = MathF.Max(Z0, MathF.Min(AdaptiveRoughnessMax, Program.Z0Gral[i][j]));
                    }
                }
            }

            max = 0;
            float min = 20000;

            for (int i = 0; i <= NII; i++)
            {
                for (int j = 0; j <= NJJ; j++)
                {
                    max = MathF.Max(max, Program.Z0Gral[i][j]);
                    min = MathF.Min(min, Program.Z0Gral[i][j]);
                }
            }

            string Info = "Using adaptive roughness length. User minimum: " + Z0.ToString("0.00") + " m  User maximum: " + AdaptiveRoughnessMax.ToString("0.00") + " m";

            Console.WriteLine(Info);
            ProgramWriters.LogfileGralCoreWrite(Info);
            Info = "                                 Used minimum: " + min.ToString("0.00") + " m  Used maximum: " + max.ToString("0.00") + " m";
            Console.WriteLine(Info);
            ProgramWriters.LogfileGralCoreWrite(Info);

            // ProgramWriters WriteClass = new ProgramWriters();
            ProgramWriters WriteClass = new ProgramWriters();

            WriteClass.WriteBuildingHeights("RoughnessLengthsGral.txt", Program.Z0Gral, "0.00", 2, Program.GralWest, Program.GralSouth);

            WriteClass = null;
            TempArray  = null;
        }
        void pruebaCorridas(List <double> Xi)
        {
            int         R, N1, N2;
            double      Media, Desviacion, H, Z0;
            List <bool> Arriba = new List <bool>();

            // Ver si estan arriba o abajo
            foreach (double x in Xi)
            {
                if (x < 0.5)
                {
                    Arriba.Add(false);
                }
                else
                {
                    Arriba.Add(true);
                }
            }

            R  = numDeCorridas(Arriba);
            N1 = Arriba.FindAll(x => x == false).Count;
            N2 = Arriba.FindAll(x => x == true).Count;

            // Calcular media
            Media = 2 * N1 * N2;
            Media = Media / (N1 + N2);
            Media = Media + 1;

            // Calcular desviacion
            Desviacion = (2 * N1 * N2) - N1 - N2;
            Desviacion = 2 * N1 * N2 * Desviacion;
            Desviacion = Desviacion / (Math.Pow(N1 + N2, 2) * (N1 + N2 - 1));
            Desviacion = Math.Sqrt(Desviacion);

            // Corrección para continuidad
            H = R < Media ? 0.5 : -0.5;

            // Valor estadístico Z0
            Z0 = R + H - Media;
            Z0 = Z0 / Desviacion;

            lblR.Text          = "R = " + R.ToString();
            lblN1.Text         = "N1 = " + N1.ToString();
            lblN2.Text         = "N2 = " + N2.ToString();
            lblMedia.Text      = "Media = " + Media.ToString();
            lblDesviacion.Text = "Desviacion = " + Desviacion.ToString();
            lblH.Text          = "H = " + H.ToString();
            lblZ.Text          = "Z0 = " + Z0.ToString();

            if (Z0 < -1.96)
            {
                lblResultado.Text = "Resultado\nZ0 < -1.96\n∴\nNo se comportan de manera aleatoria.";
            }
            else if (Z0 > 1.96)
            {
                lblResultado.Text = "Resultado\n1.96 < Z0\n∴\nNo se comportan de manera aleatoria.";
            }
            else
            {
                lblResultado.Text = "Resultado\n-1.96 ≤ Z0 ≤ 1.96\n∴\nSe comportan de manera aleatoria.";
            }
        }
Exemplo n.º 8
0
 public override void WriteGroupCodes()
 {
     WriteGroupCodeValue(10, X0.ToString().Trim());
     WriteGroupCodeValue(20, Y0.ToString().Trim());
     WriteGroupCodeValue(30, Z0.ToString().Trim());
 }