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()); }
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()); }
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()); }
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()); }
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"); } }
/// <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."; } }
public override void WriteGroupCodes() { WriteGroupCodeValue(10, X0.ToString().Trim()); WriteGroupCodeValue(20, Y0.ToString().Trim()); WriteGroupCodeValue(30, Z0.ToString().Trim()); }