uBIMEarthTools/地质建模/GeologyModel.cs
2018-10-22 19:28:56 +08:00

520 lines
30 KiB
C#

using Autodesk.Revit.Creation;
using Autodesk.Revit.DB;
using Autodesk.Revit.DB.Structure;
using Autodesk.Revit.UI;
using System;
using System.Collections.Generic;
using System.Data;
using System.Diagnostics;
using System.Linq;
using System.Windows.Forms;
using Line = Autodesk.Revit.DB.Line;
namespace uBIM_EarthTools
{
[Autodesk.Revit.Attributes.Transaction(Autodesk.Revit.Attributes.TransactionMode.Manual)]
class GeologyModel : IExternalCommand
{
public Result Execute(ExternalCommandData commandData, ref string message, ElementSet elements)
{
#region
UIDocument uidoc = commandData.Application.ActiveUIDocument;
Autodesk.Revit.DB.Document doc = uidoc.Document;
#endregion
#region
#region
string pathstring = string.Empty;
OpenFileDialog openFileDialog = new OpenFileDialog();
openFileDialog.Title = "选择Excel文件…";
openFileDialog.Filter = "Excel文件|*.xlsx";
openFileDialog.RestoreDirectory = false;
openFileDialog.FilterIndex = 1;
if (openFileDialog.ShowDialog() == DialogResult.OK)
pathstring = openFileDialog.FileName;
else
return Result.Cancelled;
#endregion
Stopwatch stopwatch2 = new Stopwatch();
stopwatch2.Start();
List<Borehole> boreholeList = ExcelHelper.GetDataFromExcel(pathstring);
stopwatch2.Stop();
#endregion
#region
string abc = string.Empty;
foreach (var borehole in boreholeList)
{
for (int i = 0; i < borehole.ValueList.Count - 2; i++)
{
if (borehole.ValueList[i].Point.Z < borehole.ValueList[i + 1].Point.Z)
{
abc += borehole.Name + ",";
break;
}
}
}
if (!string.IsNullOrEmpty(abc))
{
MessageBox.Show(abc);
}
#endregion
#region
List<int[]> triIndexList = Common.Delaunay(boreholeList, 200000 / 304.8);
List<GeologyBlock> geologyBlocks = new List<GeologyBlock>();
foreach (int[] item in triIndexList)
{
List<Borehole> boreholes = new List<Borehole>() {
new Borehole(boreholeList.ElementAt(item[0])),
new Borehole(boreholeList.ElementAt(item[1])),
new Borehole(boreholeList.ElementAt(item[2]))
};
List<string> typeList = new List<string>();
while (boreholes[0].CurrentIndex != boreholes[0].ValueList.Count - 1
|| boreholes[1].CurrentIndex != boreholes[1].ValueList.Count - 1
|| boreholes[2].CurrentIndex != boreholes[2].ValueList.Count - 1)
{
boreholes[0].CurrentType = boreholes[0].CurrentIndex != boreholes[0].ValueList.Count - 1 ? boreholes[0].ValueList[boreholes[0].CurrentIndex + 1].Type : "Last1";
boreholes[1].CurrentType = boreholes[1].CurrentIndex != boreholes[1].ValueList.Count - 1 ? boreholes[1].ValueList[boreholes[1].CurrentIndex + 1].Type : "Last2";
boreholes[2].CurrentType = boreholes[2].CurrentIndex != boreholes[2].ValueList.Count - 1 ? boreholes[2].ValueList[boreholes[2].CurrentIndex + 1].Type : "Last3";
boreholes = boreholes.OrderByDescending(x => x.ValueList[x.CurrentIndex].Point.Z).ToList();
DataListSort(boreholes);
GeologyCompute.CreateGeologyBlock(boreholes, geologyBlocks);
}
for (int i = 0; i < geologyBlocks.Count; i++)
{
if (string.IsNullOrEmpty(geologyBlocks[i].Type))
{
geologyBlocks[i].Type = (i != geologyBlocks.Count - 2) ? geologyBlocks[i + 2].Type : geologyBlocks[i - 2].Type;
geologyBlocks[i + 1].Type = geologyBlocks[i].Type;
}
}
}
#endregion
Stopwatch stopwatch = new Stopwatch();
TransactionStatus status = TransactionStatus.Uninitialized;
TransactionGroup transGroup = new TransactionGroup(doc, "地质建模");
if (transGroup.Start() == TransactionStatus.Started)
{
#region ,
List<string> typesList = ExcelHelper.GetGeologyType(pathstring).Select(x => "地质" + x.Key + "-" + x.Value + "层").ToList();
#endregion
#region
IList<Element> mtset = Common.CreateMaterialElements(doc, typesList);
#endregion
Transaction transaction = new Transaction(doc, "Create GeologyBlock");
Common.SetTransaction(transaction);
#region
//transaction.Start("load the FamilySymbol");
//IEnumerable<FamilySymbol> familysymbols_bj = from elem in new FilteredElementCollector(doc).OfClass(typeof(FamilySymbol))
// let fstmp = elem as FamilySymbol
// where fstmp.Name.Contains("钻孔标记")
// select fstmp;
//if (familysymbols_bj.Count() == 0)
//{
// MessageBox.Show("请先加载配套的“钻孔标记”族。", "uBIM", MessageBoxButtons.OK);
// status = transGroup.Assimilate();
// return Result.Succeeded;
//}
//FamilySymbol fs_bj = doc.GetElement(familysymbols_bj.First().Id) as FamilySymbol;
//fs_bj.Activate();
//transaction.Commit();
//transaction.Start("Create Tag");
//foreach (var borehole in boreholeList)
//{
// FamilyInstance fi_bj = doc.Create.NewFamilyInstance(borehole.ValueList.First().Point, fs_bj, StructuralType.NonStructural);
// fi_bj.LookupParameter("孔号").Set(borehole.Name);
//}
//transaction.Commit();
#endregion
#region
//using (FilterProgressForm prf1 = new FilterProgressForm("生成地质模型", "{0} of " + geologyBlocks.Count.ToString(), geologyBlocks.Count))
//{
// Family family = (new FilteredElementCollector(doc).OfCategory(BuiltInCategory.OST_GenericModel)
// .OfClass(typeof(FamilySymbol)).First(x => x.Name == "自适应地质块") as FamilySymbol).Family;
// Autodesk.Revit.DB.Document fdoc = doc.EditFamily(family);
// Transaction trans = new Transaction(fdoc);
// trans.Start("Create FamilySymbol");
// if (null != fdoc)
// {
// FamilyManager fm = fdoc.FamilyManager;
// foreach (string type in typesList)
// {
// try
// {
// FamilyType ft = fm.NewType(type);
// }
// catch
// {
// continue;
// }
// }
// }
// trans.Commit();
// LoadOpts loadOptions = new LoadOpts();
// family = fdoc.LoadFamily(doc, loadOptions);
// transaction.Start();
// //for (int i = 8; i < 9; i++)
// for (int i = 0; i < geologyBlocks.Count; i++)
// {
// FamilySymbol familySymbol = new FilteredElementCollector(doc)
// .OfCategory(BuiltInCategory.OST_GenericModel).OfClass(typeof(FamilySymbol))
// .First(x => x.Name == geologyBlocks[i].Type && (x as FamilySymbol).FamilyName == "自适应地质块") as FamilySymbol;
// if (!familySymbol.IsActive)
// {
// familySymbol.Activate();
// }
// FamilyInstance familyInstance =
// AdaptiveComponentInstanceUtils.CreateAdaptiveComponentInstance(doc, familySymbol);
// //调整自适应族位置
// IList<ElementId> plist = AdaptiveComponentInstanceUtils.GetInstancePlacementPointElementRefIds(familyInstance);
// ReferencePoint referencePoint = doc.GetElement(plist.ElementAt(0)) as ReferencePoint;
// ReferencePoint referencePoint1 = doc.GetElement(plist.ElementAt(1)) as ReferencePoint;
// ReferencePoint referencePoint2 = doc.GetElement(plist.ElementAt(2)) as ReferencePoint;
// ReferencePoint referencePoint3 = doc.GetElement(plist.ElementAt(3)) as ReferencePoint;
// ReferencePoint referencePoint4 = doc.GetElement(plist.ElementAt(4)) as ReferencePoint;
// ReferencePoint referencePoint5 = doc.GetElement(plist.ElementAt(5)) as ReferencePoint;
// ReferencePoint referencePoint6 = doc.GetElement(plist.ElementAt(6)) as ReferencePoint;
// ReferencePoint referencePoint7 = doc.GetElement(plist.ElementAt(7)) as ReferencePoint;
// referencePoint.Position = geologyBlocks[i].FLeftUp;
// referencePoint1.Position = geologyBlocks[i].FLeftBottom;
// referencePoint2.Position = geologyBlocks[i].FRightUp;
// referencePoint3.Position = geologyBlocks[i].FRightBottom;
// referencePoint4.Position = geologyBlocks[i].ELeftUp;
// referencePoint5.Position = geologyBlocks[i].ELeftBottom;
// referencePoint6.Position = geologyBlocks[i].ERightUp;
// referencePoint7.Position = geologyBlocks[i].ERightBottom;
// //调整自适应族参数
// familyInstance.LookupParameter("材质").Set(mtset.First(x => x.Name == familyInstance.Name).Id);
// familyInstance.LookupParameter("孔号一").Set(geologyBlocks[i].Num1);
// familyInstance.LookupParameter("孔号二").Set(geologyBlocks[i].Num2);
// familyInstance.LookupParameter("孔号三").Set(geologyBlocks[i].Num3);
// if (prf1.progressBar1.Tag.ToString() == "Cancel")
// break;
// prf1.Increment();
// System.Windows.Forms.Application.DoEvents();
// }
// transaction.Commit();
//}
#endregion
stopwatch.Start();
#region
using (FilterProgressForm prf1 = new FilterProgressForm("生成地质模型", "{0} of " + geologyBlocks.Count.ToString(), geologyBlocks.Count))
{
Family family = (new FilteredElementCollector(doc).OfCategory(BuiltInCategory.OST_GenericModel)
.OfClass(typeof(FamilySymbol)).First(x => x.Name == "常规模型地质块") as FamilySymbol).Family;
Autodesk.Revit.DB.Document fdoc = doc.EditFamily(family);
Transaction trans = new Transaction(fdoc);
trans.Start("Create FamilySymbol");
if (null != fdoc)
{
FamilyManager fm = fdoc.FamilyManager;
foreach (string type in typesList)
{
try
{
FamilyType ft = fm.NewType(type);
}
catch
{
continue;
}
}
}
trans.Commit();
LoadOpts loadOptions = new LoadOpts();
family = fdoc.LoadFamily(doc, loadOptions);
transaction.Start();
Level level = new FilteredElementCollector(doc)
.OfCategory(BuiltInCategory.OST_Levels).OfClass(typeof(Level))
.First() as Level;
double elevation = level.Elevation;
int index = 0;
while (index < geologyBlocks.Count)
{
List<FamilyInstanceCreationData> familyInstanceCreationDataList = new List<FamilyInstanceCreationData>();
List<GeologyParams> geologyParamsList = new List<GeologyParams>();
for (int i = 0; i < 100 && i < geologyBlocks.Count - index; i++)
{
FamilySymbol familySymbol = new FilteredElementCollector(doc)
.OfCategory(BuiltInCategory.OST_GenericModel).OfClass(typeof(FamilySymbol))
.First(x => x.Name == geologyBlocks[index + i].Type) as FamilySymbol;
if (!familySymbol.IsActive)
{
familySymbol.Activate();
}
GeologyParams geologyParams = geologyBlocks[index + i].GetGeologyParams(elevation);
FamilyInstanceCreationData familyInstanceCreationData = new FamilyInstanceCreationData(geologyParams.Location, familySymbol, StructuralType.NonStructural);
familyInstanceCreationDataList.Add(familyInstanceCreationData);
geologyParamsList.Add(geologyParams);
}
List<ElementId> elementIdList = doc.Create.NewFamilyInstances2(familyInstanceCreationDataList).ToList();
for (int i = 0; i < elementIdList.Count; i++)
{
GeologyParams geologyParams = geologyParamsList[i];
FamilyInstance familyInstance = doc.GetElement(elementIdList[i]) as FamilyInstance;
familyInstance.Location.Rotate(Line.CreateBound(geologyParams.Location, geologyParams.Location + new XYZ(0, 0, -1)), geologyParams.Angle);
familyInstance.LookupParameter("材质").Set(mtset.First(x => x.Name == familyInstance.Name).Id);
familyInstance.LookupParameter("F面宽").Set(geologyParams.FWidth);
familyInstance.LookupParameter("F面左距").Set(geologyParams.FDistance);
familyInstance.LookupParameter("右底高").Set(geologyParams.FRightBottom);
familyInstance.LookupParameter("右边高").Set(geologyParams.FRightHeight);
familyInstance.LookupParameter("左底高").Set(geologyParams.FLeftBottom);
familyInstance.LookupParameter("左边高").Set(geologyParams.FLeftHeight);
familyInstance.LookupParameter("棱边右底高").Set(geologyParams.ERightBottom);
familyInstance.LookupParameter("棱边右边高").Set(geologyParams.ERightHeight);
familyInstance.LookupParameter("棱边左底高").Set(geologyParams.ELeftBottom);
familyInstance.LookupParameter("棱边左边高").Set(geologyParams.ELeftHeight);
familyInstance.LookupParameter("棱边垂距").Set(geologyParams.FEOffset);
familyInstance.LookupParameter("棱边左距").Set(geologyParams.EDistance);
familyInstance.LookupParameter("棱边长度").Set(geologyParams.EWidth);
familyInstance.LookupParameter("孔号一").Set(geologyBlocks[index].Num1);
familyInstance.LookupParameter("孔号二").Set(geologyBlocks[index].Num2);
familyInstance.LookupParameter("孔号三").Set(geologyBlocks[index].Num3);
index++;
if (prf1.progressBar1.Tag.ToString() == "Cancel")
return Result.Cancelled;
prf1.Increment();
System.Windows.Forms.Application.DoEvents();
}
}
transaction.Commit();
}
#endregion
stopwatch.Stop();
}
status = transGroup.Assimilate();
MessageBox.Show(stopwatch.Elapsed.ToString());
return Result.Succeeded;
}
private static void DataListSort(List<Borehole> boreholes)
{
if (boreholes.First().CurrentType.Contains("Last"))
{
boreholes.Add(boreholes.First());
boreholes.RemoveAt(0);
DataListSort(boreholes);
}
else
return;
}
}
}
#region backup
//public static void CreateGeologyBlock(List<Borehole> boreholeList, ref List<GeologyBlock> geologyBlockList)
//{
// Borehole b1 = boreholeList[0];
// Borehole b2 = boreholeList[1];
// Borehole b3 = boreholeList[2];
// GeologyBlock geologyBlock;
// switch (Common.IsTypeEquals(boreholeList))
// {
// case (int)TypeEquals.AllEqual:
// {
// geologyBlock = new GeologyBlock(boreholeList[0], boreholeList[1], boreholeList[2])
// {
// P1 = boreholeList[0].ValueList.ElementAt(boreholeList[0].CurrentIndex).Point,
// P2 = boreholeList[1].ValueList.ElementAt(boreholeList[1].CurrentIndex).Point,
// P3 = boreholeList[2].ValueList.ElementAt(boreholeList[2].CurrentIndex).Point,
// P4 = boreholeList[0].ValueList.ElementAt(boreholeList[0].CurrentIndex + 1).Point,
// P5 = boreholeList[1].ValueList.ElementAt(boreholeList[1].CurrentIndex + 1).Point,
// P6 = boreholeList[2].ValueList.ElementAt(boreholeList[2].CurrentIndex + 1).Point,
// Type = boreholeList[0].CurrentType
// };
// geologyBlockList.Add(geologyBlock);
// boreholeList[0].CurrentIndex++;
// boreholeList[1].CurrentIndex++;
// boreholeList[2].CurrentIndex++;
// break;
// }
// case (int)TypeEquals.OneTwo:
// {
// geologyBlock = new GeologyBlock(boreholeList[0], boreholeList[1], boreholeList[2])
// {
// P1 = boreholeList[0].ValueList.ElementAt(boreholeList[0].CurrentIndex).Point,
// P2 = (boreholeList[0].ValueList.ElementAt(boreholeList[0].CurrentIndex).Point + boreholeList[2].ValueList.ElementAt(boreholeList[2].CurrentIndex).Point) / 2,
// P3 = boreholeList[0].ValueList.ElementAt(boreholeList[0].CurrentIndex + 1).Point,
// P4 = boreholeList[1].ValueList.ElementAt(boreholeList[1].CurrentIndex).Point,
// P5 = (boreholeList[1].ValueList.ElementAt(boreholeList[1].CurrentIndex).Point + boreholeList[2].ValueList.ElementAt(boreholeList[2].CurrentIndex).Point) / 2,
// P6 = boreholeList[1].ValueList.ElementAt(boreholeList[1].CurrentIndex + 1).Point,
// Type = boreholeList[0].CurrentType
// };
// geologyBlockList.Add(geologyBlock);
// geologyBlock = new GeologyBlock(boreholeList[0], boreholeList[1], boreholeList[2])
// {
// P1 = boreholeList[2].ValueList.ElementAt(boreholeList[2].CurrentIndex).Point,
// P2 = (boreholeList[0].ValueList.ElementAt(boreholeList[0].CurrentIndex).Point + boreholeList[2].ValueList.ElementAt(boreholeList[2].CurrentIndex).Point) / 2,
// P3 = (boreholeList[1].ValueList.ElementAt(boreholeList[1].CurrentIndex).Point + boreholeList[2].ValueList.ElementAt(boreholeList[2].CurrentIndex).Point) / 2,
// P4 = (boreholeList[2].ValueList.ElementAt(boreholeList[2].CurrentIndex).Point + new XYZ(0, 0, -0.01)),
// P5 = boreholeList[0].ValueList.ElementAt(boreholeList[0].CurrentIndex + 1).Point,
// P6 = boreholeList[1].ValueList.ElementAt(boreholeList[1].CurrentIndex + 1).Point,
// Type = string.Empty
// };
// geologyBlockList.Add(geologyBlock);
// geologyBlock = new GeologyBlock(boreholeList[0], boreholeList[1], boreholeList[2])
// {
// P1 = boreholeList[2].ValueList.ElementAt(boreholeList[2].CurrentIndex).Point,
// P2 = (boreholeList[0].ValueList.ElementAt(boreholeList[0].CurrentIndex).Point + boreholeList[2].ValueList.ElementAt(boreholeList[2].CurrentIndex).Point) / 2,
// P3 = (boreholeList[1].ValueList.ElementAt(boreholeList[1].CurrentIndex).Point + boreholeList[2].ValueList.ElementAt(boreholeList[2].CurrentIndex).Point) / 2,
// P4 = (boreholeList[2].ValueList.ElementAt(boreholeList[2].CurrentIndex).Point + new XYZ(0, 0, -0.01)),
// P5 = boreholeList[0].ValueList.ElementAt(boreholeList[0].CurrentIndex + 1).Point,
// P6 = boreholeList[1].ValueList.ElementAt(boreholeList[1].CurrentIndex + 1).Point,
// Type = string.Empty
// };
// geologyBlockList.Add(geologyBlock);
// boreholeList[0].CurrentIndex++;
// boreholeList[1].CurrentIndex++;
// break;
// }
// case (int)TypeEquals.OneThree:
// {
// geologyBlock = new GeologyBlock(boreholeList[0], boreholeList[1], boreholeList[2])
// {
// P1 = boreholeList[0].ValueList.ElementAt(boreholeList[0].CurrentIndex).Point,
// P2 = (boreholeList[0].ValueList.ElementAt(boreholeList[0].CurrentIndex).Point + boreholeList[1].ValueList.ElementAt(boreholeList[1].CurrentIndex).Point) / 2,
// P3 = boreholeList[0].ValueList.ElementAt(boreholeList[0].CurrentIndex + 1).Point,
// P4 = boreholeList[2].ValueList.ElementAt(boreholeList[2].CurrentIndex).Point,
// P5 = (boreholeList[2].ValueList.ElementAt(boreholeList[2].CurrentIndex).Point + boreholeList[1].ValueList.ElementAt(boreholeList[1].CurrentIndex).Point) / 2,
// P6 = boreholeList[2].ValueList.ElementAt(boreholeList[2].CurrentIndex + 1).Point,
// Type = boreholeList[0].CurrentType
// };
// geologyBlockList.Add(geologyBlock);
// geologyBlock = new GeologyBlock(boreholeList[0], boreholeList[1], boreholeList[2])
// {
// P1 = boreholeList[1].ValueList.ElementAt(boreholeList[1].CurrentIndex).Point,
// P2 = (boreholeList[0].ValueList.ElementAt(boreholeList[0].CurrentIndex).Point + boreholeList[1].ValueList.ElementAt(boreholeList[1].CurrentIndex).Point) / 2,
// P3 = (boreholeList[2].ValueList.ElementAt(boreholeList[2].CurrentIndex).Point + boreholeList[1].ValueList.ElementAt(boreholeList[1].CurrentIndex).Point) / 2,
// P4 = (boreholeList[1].ValueList.ElementAt(boreholeList[1].CurrentIndex).Point + new XYZ(0, 0, -0.01)),
// P5 = boreholeList[0].ValueList.ElementAt(boreholeList[0].CurrentIndex + 1).Point,
// P6 = boreholeList[2].ValueList.ElementAt(boreholeList[2].CurrentIndex + 1).Point,
// Type = string.Empty
// };
// geologyBlockList.Add(geologyBlock);
// boreholeList[0].CurrentIndex++;
// boreholeList[2].CurrentIndex++;
// break;
// }
// case (int)TypeEquals.TwoThree:
// {
// geologyBlock = new GeologyBlock(boreholeList[0], boreholeList[1], boreholeList[2])
// {
// P1 = boreholeList[0].ValueList.ElementAt(boreholeList[0].CurrentIndex).Point,
// P2 = (boreholeList[0].ValueList.ElementAt(boreholeList[0].CurrentIndex).Point + boreholeList[1].ValueList.ElementAt(boreholeList[1].CurrentIndex).Point) / 2,
// P3 = (boreholeList[0].ValueList.ElementAt(boreholeList[0].CurrentIndex).Point + boreholeList[2].ValueList.ElementAt(boreholeList[2].CurrentIndex).Point) / 2,
// P4 = boreholeList[0].ValueList.ElementAt(boreholeList[0].CurrentIndex + 1).Point,
// P5 = (boreholeList[0].ValueList.ElementAt(boreholeList[0].CurrentIndex).Point + boreholeList[1].ValueList.ElementAt(boreholeList[1].CurrentIndex).Point) / 2 + new XYZ(0, 0, -0.01),
// P6 = (boreholeList[0].ValueList.ElementAt(boreholeList[0].CurrentIndex).Point + boreholeList[2].ValueList.ElementAt(boreholeList[2].CurrentIndex).Point) / 2 + new XYZ(0, 0, -0.01),
// Type = boreholeList[0].CurrentType
// };
// geologyBlockList.Add(geologyBlock);
// geologyBlock = new GeologyBlock(boreholeList[0], boreholeList[1], boreholeList[2])
// {
// P1 = (boreholeList[0].ValueList.ElementAt(boreholeList[0].CurrentIndex).Point + boreholeList[1].ValueList.ElementAt(boreholeList[1].CurrentIndex).Point) / 2,
// P2 = boreholeList[1].ValueList.ElementAt(boreholeList[1].CurrentIndex).Point,
// P3 = boreholeList[0].ValueList.ElementAt(boreholeList[0].CurrentIndex + 1).Point + 0.01 * ((boreholeList[0].ValueList.ElementAt(boreholeList[0].CurrentIndex).Point + boreholeList[1].ValueList.ElementAt(boreholeList[1].CurrentIndex).Point) / 2 - boreholeList[0].ValueList.ElementAt(boreholeList[0].CurrentIndex + 1).Point).Normalize(),
// P4 = (boreholeList[0].ValueList.ElementAt(boreholeList[0].CurrentIndex).Point + boreholeList[2].ValueList.ElementAt(boreholeList[2].CurrentIndex).Point) / 2,
// P5 = boreholeList[2].ValueList.ElementAt(boreholeList[2].CurrentIndex).Point,
// P6 = boreholeList[0].ValueList.ElementAt(boreholeList[0].CurrentIndex + 1).Point + 0.01 * ((boreholeList[0].ValueList.ElementAt(boreholeList[0].CurrentIndex).Point + boreholeList[2].ValueList.ElementAt(boreholeList[2].CurrentIndex).Point) / 2 - boreholeList[0].ValueList.ElementAt(boreholeList[0].CurrentIndex + 1).Point).Normalize(),
// Type = string.Empty
// };
// geologyBlockList.Add(geologyBlock);
// boreholeList[0].CurrentIndex++;
// break;
// }
// case (int)TypeEquals.UnEqual:
// {
// geologyBlock = new GeologyBlock(boreholeList[0], boreholeList[1], boreholeList[2])
// {
// P1 = boreholeList[0].ValueList.ElementAt(boreholeList[0].CurrentIndex).Point,
// P2 = (boreholeList[0].ValueList.ElementAt(boreholeList[0].CurrentIndex).Point + boreholeList[1].ValueList.ElementAt(boreholeList[1].CurrentIndex).Point) / 2,
// P3 = (boreholeList[0].ValueList.ElementAt(boreholeList[0].CurrentIndex).Point + boreholeList[2].ValueList.ElementAt(boreholeList[2].CurrentIndex).Point) / 2,
// P4 = boreholeList[0].ValueList.ElementAt(boreholeList[0].CurrentIndex + 1).Point,
// P5 = (boreholeList[0].ValueList.ElementAt(boreholeList[0].CurrentIndex).Point + boreholeList[1].ValueList.ElementAt(boreholeList[1].CurrentIndex).Point) / 2 + new XYZ(0, 0, -0.01),
// P6 = (boreholeList[0].ValueList.ElementAt(boreholeList[0].CurrentIndex).Point + boreholeList[2].ValueList.ElementAt(boreholeList[2].CurrentIndex).Point) / 2 + new XYZ(0, 0, -0.01),
// Type = boreholeList[0].CurrentType
// };
// geologyBlockList.Add(geologyBlock);
// geologyBlock = new GeologyBlock(boreholeList[0], boreholeList[1], boreholeList[2])
// {
// P1 = (boreholeList[0].ValueList.ElementAt(boreholeList[0].CurrentIndex).Point + boreholeList[1].ValueList.ElementAt(boreholeList[1].CurrentIndex).Point) / 2,
// P2 = boreholeList[1].ValueList.ElementAt(boreholeList[1].CurrentIndex).Point,
// P3 = boreholeList[0].ValueList.ElementAt(boreholeList[0].CurrentIndex + 1).Point + 0.01 * ((boreholeList[0].ValueList.ElementAt(boreholeList[0].CurrentIndex).Point + boreholeList[1].ValueList.ElementAt(boreholeList[1].CurrentIndex).Point) / 2 - boreholeList[0].ValueList.ElementAt(boreholeList[0].CurrentIndex + 1).Point).Normalize(),
// P4 = (boreholeList[0].ValueList.ElementAt(boreholeList[0].CurrentIndex).Point + boreholeList[2].ValueList.ElementAt(boreholeList[2].CurrentIndex).Point) / 2,
// P5 = boreholeList[2].ValueList.ElementAt(boreholeList[2].CurrentIndex).Point,
// P6 = boreholeList[0].ValueList.ElementAt(boreholeList[0].CurrentIndex + 1).Point + 0.01 * ((boreholeList[0].ValueList.ElementAt(boreholeList[0].CurrentIndex).Point + boreholeList[2].ValueList.ElementAt(boreholeList[2].CurrentIndex).Point) / 2 - boreholeList[0].ValueList.ElementAt(boreholeList[0].CurrentIndex + 1).Point).Normalize(),
// Type = string.Empty
// };
// geologyBlockList.Add(geologyBlock);
// boreholeList[0].CurrentIndex++;
// break;
// }
// }
//}
#endregion