/// <summary> /// Add element relationship to a parent object /// </summary> /// <param name="ifcElement">IfcElement object</param> /// <param name="spaceNames">Name used as key to find parent object</param> private void AddElementRelationship(IfcElement ifcElement, string spaceNames) { spaceNames = spaceNames.ToLower().Trim(); IfcSpace ifcSpace = null; IfcBuildingStorey ifcBuildingStorey = null; //see if the full name is in spaces ifcSpace = IfcSpaces.Where(space => space.Name.ToString().ToLower().Trim() == spaceNames).FirstOrDefault(); if (ifcSpace != null) { ifcSpace.AddElement(ifcElement); } else //not in spaces so try Floors { ifcBuildingStorey = IfcBuildingStoreys.Where(bs => bs.Name.ToString().ToLower().Trim() == spaceNames).FirstOrDefault(); if (ifcBuildingStorey != null) { ifcBuildingStorey.AddElement(ifcElement); } else //not in floors so see if the space names is a delimited list { var splitKey = GetSplitChar(spaceNames); var spaceArray = spaceNames.Split(splitKey); if (spaceArray.Count() > 1) //if one we have already tried above, if more than one then try each item { foreach (var spaceitem in spaceArray) { var spaceName = spaceitem.Trim(); ifcSpace = IfcSpaces.Where(space => space.Name.ToString().ToLower().Trim() == spaceName).FirstOrDefault(); if (ifcSpace != null) { ifcSpace.AddElement(ifcElement); } else { ifcBuildingStorey = IfcBuildingStoreys.Where(bs => bs.Name.ToString().ToLower().Trim() == spaceName).FirstOrDefault(); if (ifcBuildingStorey != null) { ifcBuildingStorey.AddElement(ifcElement); } else { GetBuilding().AddElement(ifcElement); //default to building, probably give incorrect bounding box as we do not know what the element parent was } } } } else { GetBuilding().AddElement(ifcElement); //default to building, probably give incorrect bounding box as we do not know what the element parent was } } } }
/// <summary> /// This sample demonstrates the minimum steps to create a compliant IFC model that contains a single standard case wall /// </summary> static int Main() { //first create and initialise a model called Hello Wall Console.WriteLine("Initialising the IFC Project...."); using (var model = CreateandInitModel("HelloWall")) { if (model != null) { IfcBuilding building = CreateBuilding(model, "Default Building"); IfcBuildingStorey storey = CreateStorey(building); IfcWallStandardCase wall = CreateWall(model, 4000, 300, 2400); if (wall != null) { AddPropertiesToWall(model, wall); } using (var txn = model.BeginTransaction("Add Wall")) { building.AddToSpatialDecomposition(storey); storey.AddElement(wall); txn.Commit(); } if (wall != null) { try { Console.WriteLine("Standard Wall successfully created...."); //write the Ifc File model.SaveAs("HelloWallIfc4.ifc", IfcStorageType.Ifc); Console.WriteLine("HelloWallIfc4.ifc has been successfully written"); } catch (Exception e) { Console.WriteLine("Failed to save HelloWall.ifc"); Console.WriteLine(e.Message); } } } else { Console.WriteLine("Failed to initialise the model"); } } Console.WriteLine("Press any key to exit to view the IFC file...."); Console.ReadKey(); LaunchNotepad("HelloWallIfc4.ifc"); return(0); }
public ActionResult SubmitBlahBlah(List <int> axesIds, SubmissionStages subItem) { List <string> files = Directory.GetFiles(FileStruc.CurrentVersion).ToList(); List <IIfcProduct> Axes; List <IIfcProduct> lstProductSubmission; List <Line> lstAxesLines = new List <Line>(); string ifcFile = files.Where(a => Path.GetExtension(a) == ".ifc").FirstOrDefault(); using (var model = IfcStore.Open(ifcFile)) { Axes = model.Instances.OfType <IIfcProduct>().Where(b => axesIds.Contains(b.EntityLabel)).ToList(); List <IIfcProduct> lstProduct = model.Instances.OfType <IIfcProduct>().Where(p => lstProductId.Contains(p.EntityLabel)).ToList(); List <Line> lstLines = IFCHelper.AxesLinesGet(Axes); //Axes Boundaries LinearPath linPathSubmittal = MathHelper.LinPathAxesIntersection(lstLines); Dictionary <int, LinearPath> dicElement = IFCHelper.DicLinPathOfProductsGet(lstProduct); //get products within the axes boundary Dictionary <int, LinearPath> elementsWithinAxesBoundary = CadHelper.SubmittedElementsGet(linPathSubmittal, dicElement); //reinforcement IFC file using (IfcStore subModelRFT = IFCHelper.CreateandInitModel("Reinforcement File", model.Instances.OfType <IfcProject>().FirstOrDefault().UnitsInContext)) { IfcBuilding bldng = IFCHelper.CreateBuilding(subModelRFT, "bldngRFT", new Point3D(0, 0, 0)); using (var txn = subModelRFT.BeginTransaction("I")) { IfcBuildingStorey storey = subModelRFT.Instances.New <IfcBuildingStorey>(); bldng.AddToSpatialDecomposition(storey); switch (subItem) { case SubmissionStages.FormWork: for (int i = 0; i < elementsWithinAxesBoundary.Values.ToList().Count; i++) { IIfcProduct product = lstProduct.FirstOrDefault(p => p.EntityLabel == elementsWithinAxesBoundary.Keys.ToList()[i]); IIfcRepresentationItem repItem = product.Representation.Representations.First.Items.First; double height = (repItem as IIfcExtrudedAreaSolid).Depth; IfcOpeningElement open; XbimCreateBuilding.CreateFormWork(subModelRFT, elementsWithinAxesBoundary.Values.ToList()[i], DefaultValues.FormWorkThickness, height, out open, "", false, false, false); } //switch (elemTypeFormwork) //{ // case ElementType.PCF: // break; // case ElementType.RCF: // break; // case ElementType.SEM: // break; // case ElementType.SHW: // break; // case ElementType.RTW: // break; // case ElementType.COL: // for (int i = 0; i < elementsWithinAxesBoundary.Values.ToList().Count; i++) // { // Column col = new Column(elementsWithinAxesBoundary.Values.ToList()[i]); // ReinforcedCadColumn rftCol = new ReinforcedCadColumn(col, 0); // IIfcProduct product = lstProduct.FirstOrDefault(p => p.EntityLabel == elementsWithinAxesBoundary.Keys.ToList()[i]); // IIfcRepresentationItem repItem = product.Representation.Representations.First.Items.First; // double height = (repItem as IIfcExtrudedAreaSolid).Depth; // IfcOpeningElement open; // XbimCreateBuilding.CreateFormWork(subModelRFT, rftCol.CadColumn.ColPath, DefaultValues.FormWorkThickness, // height, out open, false, false, false); // } // break; // case ElementType.SLB: // break; // default: // break; //} break; case SubmissionStages.Concrete: lstProductSubmission = lstProduct.Where(p => elementsWithinAxesBoundary.ContainsKey(p.EntityLabel)).ToList(); var map = new XbimInstanceHandleMap(model, subModelRFT); for (int i = 0; i < lstProductSubmission.Count; i++) { IIfcProduct product = subModelRFT.InsertCopy(lstProductSubmission[i], map, null, false, false); storey.AddElement(product as IfcProduct); } break; case SubmissionStages.Reinforcement: Enum.TryParse(ElementTypeSubmitted, out ElementType elemType); switch (elemType) { case ElementType.PCF: break; case ElementType.RCF: break; case ElementType.SEM: break; case ElementType.SHW: break; case ElementType.RTW: break; case ElementType.COL: for (int i = 0; i < elementsWithinAxesBoundary.Values.ToList().Count; i++) { Column col = new Column(elementsWithinAxesBoundary.Values.ToList()[i]); ReinforcedCadColumn rftCol = new ReinforcedCadColumn(col, 0); IIfcProduct product = lstProduct.FirstOrDefault(p => p.EntityLabel == elementsWithinAxesBoundary.Keys.ToList()[i]); IIfcRepresentationItem repItem = product.Representation.Representations.First.Items.First; double height = (repItem as IIfcExtrudedAreaSolid).Depth; XbimCreateBuilding.CreateColumnRft(rftCol, storey, subModelRFT, height, ""); } break; case ElementType.SLB: break; default: break; } break; default: break; } txn.Commit(); subModelRFT.SaveAs(@"E:\01. Work\demo.ifc"); var context = new Xbim3DModelContext(subModelRFT); context.CreateContext(); //var wexBimFilename = Path.ChangeExtension(, "wexBIM"); using (var wexBiMfile = System.IO.File.Create((@"E:\01. Work\demo.wexBIM"))) { using (var wexBimBinaryWriter = new BinaryWriter(wexBiMfile)) { subModelRFT.SaveAsWexBim(wexBimBinaryWriter); wexBimBinaryWriter.Close(); } wexBiMfile.Close(); } } } } return(new EmptyResult()); }