/// <summary> /// 全レイヤー生成 /// </summary> private bool AllNewLayer() { if (null == UrgLogReader) { MessageBox.Show("LRFデータがロードされていません", "Error"); return false; } if (skipLrfIDX <= 0 || (int)(maxLRFIdx / skipLrfIDX) <= 0) { MessageBox.Show("SkipFrameが不正な値です。1以上、全フレーム以下にしてください。", "Error"); return false; } progressBar_LoadLayer.Value = 0; progressBar_LoadLayer.Maximum = (int)(maxLRFIdx / skipLrfIDX); Application.DoEvents(); { parentForm.MapLyaer = new List<LayerData>(); UrgLogReader.SetSkipNum(skipLrfIDX); //LayerData lastLayer = null; double oldAvgLrfDist = 0.0; int contCnt = 0; double[] readLRFdata = UrgLogReader.getScanData(0); while (null != readLRFdata && readLRFdata.Length > 0) { // 静止状態をチェック double avgLrfDist = CheckLRFAvg(readLRFdata); // 前回と同じか? // 10%以内の誤差 if ( Math.Abs(oldAvgLrfDist - avgLrfDist) < avgLrfDist * 0.10) { contCnt++; } else { contCnt = 0; oldAvgLrfDist = avgLrfDist; } //if (contCnt < 3) { // レイヤー作成 LayerData newLayer = new LayerData(readLRFdata); newLayer.SetLocalPosAng(0.0, 0.0, 0.0, -defDistanceLayer); newLayer.MakeMapBmp(MapEditForm.LRF_Range, MapEditForm.LRF_ScaleOfPixel, LRF_PixelSize, parentForm.colLayerPixel, parentForm.colLayerBase); /* // できた画像がほぼ同じなら、カットして、データ削減 if (cb_StopLayerCut.Checked && null != lastLayer) { // 90%以下なら静止中と判断 if (LayerMatching(newLayer, lastLayer) < 90) { parentForm.MapLyaer.Add(newLayer); lastLayer = newLayer; } } else * */ { if (contCnt < 3) { newLayer.useFlg = true; } parentForm.MapLyaer.Add(newLayer); //lastLayer = newLayer; } } // プログレスバー進行 if (progressBar_LoadLayer.Value < progressBar_LoadLayer.Maximum) { progressBar_LoadLayer.Value++; } Application.DoEvents(); // 次のデータ読み込み readLRFdata = UrgLogReader.getScanData(); } // センタリング if (parentForm.MapLyaer.Count > 0) { LayerData firstLayer = parentForm.MapLyaer[0]; firstLayer.SetLocalPosAng(-firstLayer.MapBmp.Width / 2, -firstLayer.MapBmp.Height / 2, 0.0, 0.0); parentForm.UpdateLayerData(); } } progressBar_LoadLayer.Value = 0; return true; }
/// <summary> /// バイナリデータ ロード /// </summary> /// <param name="strm"></param> private void Read(BinaryReader strm) { strm.ReadInt32(); // FileVersion strm.ReadInt32(); // セクション数 LRF_LogFileName = strm.ReadString(); // マップレイヤー セクション { int numLayer = strm.ReadInt32(); WaitProressBar.Value = 0; WaitProressBar.Maximum = numLayer; WaitProressBar.Step = 1; MapLyaer = new List<LayerData>(); for (int i = 0; i < numLayer; i++) { LayerData layer = new LayerData(); layer.Read(strm); layer.MakeMapBmp(LRF_Range, LRF_ScaleOfPixel, LRF_PixelSize, colLayerPixel, colLayerBase); MapLyaer.Add(layer); WaitProressBar.PerformStep(); } } // チェックポイント セクション { int numCp = strm.ReadInt32(); CheckPoints = new List<CheckPointData>(); for (int i = 0; i < numCp; i++) { CheckPointData cp = new CheckPointData(); cp.Read(strm); } UpdateCheckPointList(); } WaitProressBar.Value = 0; }