public void AddGesture(string gesture, BoundingBox3D area) { int status = SafeNativeMethods.xnAddGesture(InternalObject, gesture, ref area); WrapperUtils.ThrowOnError(status); }
//using Tuple to return values public (double gridXMin, double gridXMax, double gridYMin, double gridYMax) GridCoord() { Document document = Autodesk.Navisworks.Api.Application.ActiveDocument; DocumentClash documentClash = document.GetClash(); DocumentClashTests allTests = documentClash.TestsData; DocumentModels docModel = document.Models; DocumentGrids docGrids = document.Grids; GridSystem docGridSys = docGrids.ActiveSystem; List <double> gridXCoord = new List <double>(); List <double> gridYCoord = new List <double>(); try { //get objects in project foreach (Model model in docModel) { ModelItem root = model.RootItem as ModelItem; string dn = root.DisplayName.ToString(); string[] disName = dn.Split('_', '-', '.', ' '); //determine source file type by searching model file properties foreach (PropertyCategory oPC in root.PropertyCategories) { if (oPC.DisplayName.ToString() == "Item") { foreach (DataProperty oDP in oPC.Properties) { if (oDP.DisplayName.ToString() == "Source File Name") { string val = oDP.Value.ToDisplayString(); string[] valName = val.Split('.'); //source file is RVT (Revit) if (valName.Last() == "rvt") { foreach (ModelItem item in root.Children) { ModelItem subLayer2 = item as ModelItem; foreach (ModelItem subLaye3 in subLayer2.Children) { ModelItem subLayer4 = subLaye3 as ModelItem; foreach (ModelItem subLayer5 in subLayer4.Children) { ModelItem subLayer6 = subLayer5 as ModelItem; foreach (ModelItem subLayer7 in subLayer6.Children) { ModelItem subLayer8 = subLayer7 as ModelItem; foreach (ModelItem subLayer9 in subLayer8.Children) { //Get object center position (X,Y,Z) by setting a 3D bounding box ModelItem subLayer10 = subLayer9 as ModelItem; if (subLayer10 != null) { BoundingBox3D bbox = subLayer10.BoundingBox(); //find closest grid intersection to object center position using API GridIntersection gridCross = docGridSys.ClosestIntersection(bbox.Center); //Get closest grid intersection X,Y coord gridXCoord.Add(gridCross.Position.X); gridYCoord.Add(gridCross.Position.Y); } } } } } } } //if source file is DWG format (AutoCAD) else if (valName.Last() == "dwg") { foreach (ModelItem item in root.Children) { ModelItem subLayer2 = item as ModelItem; foreach (ModelItem subLayer3 in subLayer2.Children) { if (subLayer3 != null) { //Get object center position (X,Y,Z) by setting a 3D bounding box BoundingBox3D bbox = subLayer3.BoundingBox(); //find closest grid intersection to object center position using API GridIntersection gridCross = docGridSys.ClosestIntersection(bbox.Center); //Get closest grid intersection X,Y coord gridXCoord.Add(gridCross.Position.X); gridYCoord.Add(gridCross.Position.Y); } } } } //if file in selection tree is an NWD file else if (disName.Last() == "nwd") { foreach (ModelItem item in root.Children) { ModelItem disfile = item as ModelItem; string disNwd = disfile.DisplayName.ToString(); string[] disNameNwd = disNwd.Split('_', '-', '.'); foreach (PropertyCategory oPCnwd in disfile.PropertyCategories) { if (oPCnwd.DisplayName.ToString() == "Item") { foreach (DataProperty oDPnwd in oPCnwd.Properties) { if (oDPnwd.DisplayName.ToString() == "Source File Name") { string valNwd = oDPnwd.Value.ToDisplayString(); string[] valNameNwd = valNwd.Split('.'); if (valNameNwd.Last() == "rvt") { foreach (ModelItem itemNwd in disfile.Children) { ModelItem subLayer2Nwd = itemNwd as ModelItem; foreach (ModelItem subLayer3Nwd in subLayer2Nwd.Children) { ModelItem subLayer4Nwd = subLayer3Nwd as ModelItem; foreach (ModelItem subLayer5Nwd in subLayer4Nwd.Children) { ModelItem subLayer6Nwd = subLayer5Nwd as ModelItem; foreach (ModelItem subLayer7Nwd in subLayer6Nwd.Children) { ModelItem subLayer8Nwd = subLayer7Nwd as ModelItem; foreach (ModelItem subLayer9Nwd in subLayer8Nwd.Children) { if (subLayer9Nwd != null) { //Get object center position (X,Y,Z) by setting a 3D bounding box BoundingBox3D bbox = subLayer9Nwd.BoundingBox(); //find closest grid intersection to object center position using API GridIntersection gridCross = docGridSys.ClosestIntersection(bbox.Center); gridXCoord.Add(gridCross.Position.X); gridYCoord.Add(gridCross.Position.Y); } } } } } } } //Source file is DWG format (AutoCAD) else if (valNameNwd.Last() == "dwg") { foreach (ModelItem itemNwd in disfile.Children) { ModelItem subLayer2Nwd = itemNwd as ModelItem; foreach (ModelItem subLayer3Nwd in subLayer2Nwd.Children) { if (subLayer3Nwd != null) { //Get object center position (X,Y,Z) by setting a 3D bounding box BoundingBox3D bbox = subLayer3Nwd.BoundingBox(); //find closest grid intersection to object center position using API GridIntersection gridCross = docGridSys.ClosestIntersection(bbox.Center); //Get closest grid intersection X,Y coord gridXCoord.Add(gridCross.Position.X); gridYCoord.Add(gridCross.Position.Y); } } } } } } } } } } } } } } } //store max & min values to return for scatter plot data double gridXMin = gridXCoord.Min(); double gridXMax = gridXCoord.Max(); double gridYMin = gridYCoord.Min(); double gridYMax = gridYCoord.Max(); return(gridXMin, gridXMax, gridYMin, gridYMax); } catch (Exception exception) { MessageBox.Show("Error in Grid Coordinates Analysis!"); exception.Message.ToString(); } return(0, 0, 0, 0); }
public override int Execute(params string[] ps) { Document doc = Application.ActiveDocument; string currentFilename = doc.CurrentFileName; string filename = doc.FileName; string title = doc.Title; Units units = doc.Units; DocumentModels models = doc.Models; DocumentInfoPart info = doc.DocumentInfo; string currentSheetId = info.Value.CurrentSheetId; // "little_house_2021.rvt" DocumentDatabase db = doc.Database; bool ignoreHidden = true; BoundingBox3D bb = doc.GetBoundingBox(ignoreHidden); Point3D min = bb.Min; Point3D max = bb.Max; int nModels = models.Count; Debug.Print("{0}: sheet {1}, bounding box {2}, {3} model{4}{5}", title, currentSheetId, Util.BoundingBoxString(bb), nModels, Util.PluralSuffix(nModels), Util.DotOrColon(nModels)); // First attempt, based on Navisworks-Geometry-Primitives, // using walkNode oState.CurrentPartition: //WalkPartition wp = new WalkPartition(); //wp.Execute(); List <string> Categories = new List <string>(); foreach (Model model in models) { ModelItem rootItem = model.RootItem; ModelItemEnumerableCollection mis = rootItem.DescendantsAndSelf; Debug.Print(" {0}: {1} model items", model.FileName, mis.Count()); List <ModelItem> migeos = new List <ModelItem>(); foreach (ModelItem mi in mis) { Debug.Print( " '{0}' '{1}' '{2}' has geo {3}", mi.DisplayName, mi.ClassDisplayName, mi.ClassName, mi.HasGeometry); if (mi.HasGeometry) { migeos.Add(mi); } } Debug.Print(" {0} model items have geometry:", migeos.Count()); foreach (ModelItem mi in migeos) { Debug.Print( " '{0}' '{1}' '{2}' {3} bb {4}", mi.DisplayName, mi.ClassDisplayName, mi.ClassName, mi.HasGeometry, Util.BoundingBoxString(mi.BoundingBox())); if ("Floor" == mi.DisplayName) { RvtProperties.DumpProperties(mi); RvtProperties props = new RvtProperties(mi); int id = props.ElementId; } } } return(0); }
public static IEnumerable <ExtractFile> CreateAddressFiles(ExtractContext context, SyndicationContext syndicationContext) { var extractItems = context .AddressExtract .AsNoTracking() .Where(m => m.Complete) .OrderBy(m => m.AddressPersistentLocalId); var cachedMunicipalities = syndicationContext.MunicipalityLatestItems.AsNoTracking().ToList(); var cachedStreetNames = syndicationContext.StreetNameLatestItems.AsNoTracking().ToList(); byte[] TransformRecord(AddressExtractItem r) { var item = new AddressDbaseRecord(); item.FromBytes(r.DbaseRecord, DbfFileWriter <AddressDbaseRecord> .Encoding); // update streetname, municipality var streetName = cachedStreetNames.First(x => x.StreetNameId == r.StreetNameId); var municipality = cachedMunicipalities.First(x => x.NisCode == streetName.NisCode); item.straatnmid.Value = streetName.PersistentLocalId; switch (municipality.PrimaryLanguage) { case null: case Taal.NL: default: item.gemeentenm.Value = municipality.NameDutch; item.straatnm.Value = streetName.NameDutch; break; case Taal.FR: item.gemeentenm.Value = municipality.NameFrench; item.straatnm.Value = streetName.NameFrench; break; case Taal.DE: item.gemeentenm.Value = municipality.NameGerman; item.straatnm.Value = streetName.NameGerman; break; case Taal.EN: item.gemeentenm.Value = municipality.NameEnglish; item.straatnm.Value = streetName.NameEnglish; break; } return(item.ToBytes(DbfFileWriter <AddressDbaseRecord> .Encoding)); } yield return(ExtractBuilder.CreateDbfFile <AddressExtractItem, AddressDbaseRecord>( ExtractFileNames.Address, new AddressDbaseSchema(), extractItems, extractItems.Count, TransformRecord)); var boundingBox = new BoundingBox3D( extractItems.Where(x => x.MinimumX > 0).Min(record => record.MinimumX), extractItems.Where(x => x.MinimumY > 0).Min(record => record.MinimumY), extractItems.Where(x => x.MaximumX > 0).Max(record => record.MaximumX), extractItems.Where(x => x.MaximumY > 0).Max(record => record.MaximumY), 0, 0, double.NegativeInfinity, double.PositiveInfinity); yield return(ExtractBuilder.CreateShapeFile <PointShapeContent>( ExtractFileNames.Address, ShapeType.Point, extractItems.Select(x => x.ShapeRecordContent), ShapeContent.Read, extractItems.Select(x => x.ShapeRecordContentLength), boundingBox)); yield return(ExtractBuilder.CreateShapeIndexFile( ExtractFileNames.Address, ShapeType.Point, extractItems.Select(x => x.ShapeRecordContentLength), extractItems.Count, boundingBox)); yield return(ExtractBuilder.CreateProjectedCoordinateSystemFile( ExtractFileNames.Address, ProjectedCoordinateSystem.Belge_Lambert_1972)); }
private double getBiSectVolume(uint date, ModelItemCollection mc1, ModelItemCollection mc2, ObjectItem[] Micp, uint[] Start, int[] i1, int[] i2, int j, bool isD) { double v = 0; double mx = mc1[0].BoundingBox().Min.X * 0.3048; double my = mc1[0].BoundingBox().Min.Y * 0.3048; double mz = mc1[0].BoundingBox().Min.Z * 0.3048; double px = mc1[0].BoundingBox().Max.X * 0.3048; double py = mc1[0].BoundingBox().Max.Y * 0.3048; double pz = mc1[0].BoundingBox().Max.Z * 0.3048; Autodesk.Navisworks.Api.Point3D bn1; Autodesk.Navisworks.Api.Point3D bx1; for (int k = 0; k < mc1.Count; k++) { bn1 = mc1[k].BoundingBox().Min; bx1 = mc1[k].BoundingBox().Max; Autodesk.Navisworks.Api.Point3D Max = new Autodesk.Navisworks.Api.Point3D((bx1.X * 0.3048), (bx1.Y * 0.3048), (bx1.Z * 0.3048)); Autodesk.Navisworks.Api.Point3D Min = new Autodesk.Navisworks.Api.Point3D((bn1.X * 0.3048), (bn1.Y * 0.3048), (bn1.Z * 0.3048)); if (isD) { Max = Max.Add(Micp[i1[k]].Protrusion.Max.ToVector3D()); Min = Min.Subtract(Micp[i1[k]].Protrusion.Min.ToVector3D()); } mx = Math.Min(mx, Min.X); my = Math.Min(my, Min.Y); mz = Math.Min(mz, Min.Z); px = Math.Max(px, Max.X); py = Math.Max(py, Max.Y); pz = Math.Max(pz, Max.Z); } bn1 = new Autodesk.Navisworks.Api.Point3D(mx, my, mz); bx1 = new Autodesk.Navisworks.Api.Point3D(px, py, pz); BoundingBox3D bb1 = new BoundingBox3D(bn1, bx1); mx = mc2[0].BoundingBox().Min.X * 0.3048; my = mc2[0].BoundingBox().Min.Y * 0.3048; mz = mc2[0].BoundingBox().Min.Z * 0.3048; px = mc2[0].BoundingBox().Max.X * 0.3048; py = mc2[0].BoundingBox().Max.Y * 0.3048; pz = mc2[0].BoundingBox().Max.Z * 0.3048; for (int k = 0; k < mc2.Count; k++) { bn1 = mc2[k].BoundingBox().Min; bx1 = mc2[k].BoundingBox().Max; Autodesk.Navisworks.Api.Point3D Max = new Autodesk.Navisworks.Api.Point3D((bx1.X * 0.3048), (bx1.Y * 0.3048), (bx1.Z * 0.3048)).Add(Micp[i2[k]].Protrusion.Max.ToVector3D()); Autodesk.Navisworks.Api.Point3D Min = new Autodesk.Navisworks.Api.Point3D((bn1.X * 0.3048), (bn1.Y * 0.3048), (bn1.Z * 0.3048)).Subtract(Micp[i2[k]].Protrusion.Min.ToVector3D()); mx = Math.Min(mx, Min.X); my = Math.Min(my, Min.Y); mz = Math.Min(mz, Min.Z); px = Math.Max(px, Max.X); py = Math.Max(py, Max.Y); pz = Math.Max(pz, Max.Z); } bn1 = new Autodesk.Navisworks.Api.Point3D(mx, my, mz); bx1 = new Autodesk.Navisworks.Api.Point3D(px, py, pz); BoundingBox3D bb2 = new BoundingBox3D(bn1, bx1); if (bb1.Intersects(bb2)) { BoundingBox3D intrsct = bb1.Intersect(bb2); List <BoundingBox3D> im = new List <BoundingBox3D>(mc1.Count); int i; for (i = 0; i < mc1.Count; i++) { bn1 = mc1[i].BoundingBox().Min; bx1 = mc1[i].BoundingBox().Max; Autodesk.Navisworks.Api.Point3D Max = new Autodesk.Navisworks.Api.Point3D((bx1.X * 0.3048), (bx1.Y * 0.3048), (bx1.Z * 0.3048)); Autodesk.Navisworks.Api.Point3D Min = new Autodesk.Navisworks.Api.Point3D((bn1.X * 0.3048), (bn1.Y * 0.3048), (bn1.Z * 0.3048)); BoundingBox3D BBP = new BoundingBox3D(Min, Max); if (BBP.Intersects(intrsct)) { im.Add(BBP.Intersect(intrsct)); } } List <BoundingBox3D> wk = new List <BoundingBox3D>(mc2.Count); for (i = 0; i < mc2.Count; i++) { bn1 = mc2[i].BoundingBox().Min; bx1 = mc2[i].BoundingBox().Max; Autodesk.Navisworks.Api.Point3D Max = new Autodesk.Navisworks.Api.Point3D((bx1.X * 0.3048), (bx1.Y * 0.3048), (bx1.Z * 0.3048)); Autodesk.Navisworks.Api.Point3D Min = new Autodesk.Navisworks.Api.Point3D((bn1.X * 0.3048), (bn1.Y * 0.3048), (bn1.Z * 0.3048)); BoundingBox3D BBP = new BoundingBox3D(Min.Subtract(Micp[i2[i]].Protrusion.Min.ToVector3D()), Max.Add(Micp[i2[i]].Protrusion.Max.ToVector3D())); if (BBP.Intersects(intrsct)) { double mw = (date - Start[i2[i]]) * Micp[i2[i]].Rate; if (Micp[i2[i]].Direction == ObjectItem.direction.Right) { Min = new Autodesk.Navisworks.Api.Point3D(Min.X + mw, Min.Y, Min.Z).Subtract(Micp[i2[i]].Protrusion.Min.ToVector3D()); Max = new Autodesk.Navisworks.Api.Point3D(Min.X + mw + Micp[i2[i]].Rate, Max.Y, Max.Z).Add(Micp[i2[i]].Protrusion.Max.ToVector3D()); } else if (Micp[i2[i]].Direction == ObjectItem.direction.Left) { Min = new Autodesk.Navisworks.Api.Point3D(Max.X - (mw + Micp[i2[i]].Rate), Min.Y, Min.Z).Subtract(Micp[i2[i]].Protrusion.Min.ToVector3D()); Max = new Autodesk.Navisworks.Api.Point3D(Max.X - mw, Max.Y, Max.Z).Add(Micp[i2[i]].Protrusion.Max.ToVector3D()); } else if (Micp[i2[i]].Direction == ObjectItem.direction.Up) { Min = new Autodesk.Navisworks.Api.Point3D(Min.X, Min.Y + mw, Min.Z).Subtract(Micp[i2[i]].Protrusion.Min.ToVector3D()); Max = new Autodesk.Navisworks.Api.Point3D(Max.X, Min.Y + mw + Micp[i2[i]].Rate, Max.Z).Add(Micp[i2[i]].Protrusion.Max.ToVector3D()); } else if (Micp[i2[i]].Direction == ObjectItem.direction.Down) { Min = new Autodesk.Navisworks.Api.Point3D(Min.X, Max.Y - (mw + Micp[i2[i]].Rate), Min.Z).Subtract(Micp[i2[i]].Protrusion.Min.ToVector3D()); Max = new Autodesk.Navisworks.Api.Point3D(Max.X, Max.Y - mw, Max.Z).Add(Micp[i2[i]].Protrusion.Max.ToVector3D()); } else if (Micp[i2[i]].Direction == ObjectItem.direction.Front) { Min = new Autodesk.Navisworks.Api.Point3D(Min.X, Min.Y, Min.Z + mw).Subtract(Micp[i2[i]].Protrusion.Min.ToVector3D()); Max = new Autodesk.Navisworks.Api.Point3D(Max.X, Max.Y, Min.Z + mw + Micp[i2[i]].Rate).Add(Micp[i2[i]].Protrusion.Max.ToVector3D()); } else { Min = new Autodesk.Navisworks.Api.Point3D(Min.X, Min.Y, Max.Z - (mw + Micp[i2[i]].Rate)).Subtract(Micp[i2[i]].Protrusion.Min.ToVector3D()); Max = new Autodesk.Navisworks.Api.Point3D(Max.X, Max.Y, Max.Z - mw).Add(Micp[i2[i]].Protrusion.Max.ToVector3D()); } BBP = new BoundingBox3D(Min, Max); wk.Add(BBP.Intersect(intrsct)); } } for (i = 0; i < im.Count; i++) { for (int n = 0; n < wk.Count; n++) { v = v + wk[n].Intersect(im[i]).Volume; } } } return(v); }
private double getIntersectsVolume(ModelItem[] mic, ObjectItem[] Micp, ModelItemCollection SItems, uint date, uint[] Start, uint[] End, int[] t) { int y = 0, i = 0, j = 0; int[] i1 = new int[mic.Length]; int[] i2 = new int[mic.Length]; ModelItemCollection mc1 = new ModelItemCollection(); ModelItemCollection mc2 = new ModelItemCollection(); while (y < mic.Length && Start[t[y]] <= date) { if (End[t[y]] > date) { mc2.Add(mic[t[y]]); i2[j] = t[y]; j++; } else { mc1.Add(mic[t[y]]); i1[i] = t[y]; i++; } y++; } Array.Resize(ref i2, j); Array.Resize(ref i1, i); double v = 0; if (mc2.Count > 0) { v = v + getBiSectVolume(date, SItems, mc2, Micp, Start, i1, i2, j, false); if (mc1.Count > 0) { v = v + getBiSectVolume(date, mc1, mc2, Micp, Start, i1, i2, j, true); } for (int k = 0; k < mc2.Count; k++) { Autodesk.Navisworks.Api.Point3D bn1 = mc2[k].BoundingBox().Min; Autodesk.Navisworks.Api.Point3D bx1 = mc2[k].BoundingBox().Max; Autodesk.Navisworks.Api.Point3D Max = new Autodesk.Navisworks.Api.Point3D((bx1.X * 0.3048), (bx1.Y * 0.3048), (bx1.Z * 0.3048)); Autodesk.Navisworks.Api.Point3D Min = new Autodesk.Navisworks.Api.Point3D((bn1.X * 0.3048), (bn1.Y * 0.3048), (bn1.Z * 0.3048)); BoundingBox3D bb1 = new BoundingBox3D(Min, Max); double mw = (date - Start[i2[k]]) * Micp[i2[k]].Rate; if (Micp[i2[k]].Direction == ObjectItem.direction.Right) { Min = new Autodesk.Navisworks.Api.Point3D(Min.X + mw, Min.Y, Min.Z).Subtract(Micp[i2[k]].Protrusion.Min.ToVector3D()); Max = new Autodesk.Navisworks.Api.Point3D(Min.X + mw + Micp[i2[k]].Rate, Max.Y, Max.Z).Add(Micp[i2[k]].Protrusion.Max.ToVector3D()); } else if (Micp[i2[k]].Direction == ObjectItem.direction.Left) { Min = new Autodesk.Navisworks.Api.Point3D(Max.X - (mw + Micp[i2[k]].Rate), Min.Y, Min.Z).Subtract(Micp[i2[k]].Protrusion.Min.ToVector3D()); Max = new Autodesk.Navisworks.Api.Point3D(Max.X - mw, Max.Y, Max.Z).Add(Micp[i2[k]].Protrusion.Max.ToVector3D()); } else if (Micp[i2[k]].Direction == ObjectItem.direction.Up) { Min = new Autodesk.Navisworks.Api.Point3D(Min.X, Min.Y + mw, Min.Z).Subtract(Micp[i2[k]].Protrusion.Min.ToVector3D()); Max = new Autodesk.Navisworks.Api.Point3D(Max.X, Min.Y + mw + Micp[i2[k]].Rate, Max.Z).Add(Micp[i2[k]].Protrusion.Max.ToVector3D()); } else if (Micp[i2[k]].Direction == ObjectItem.direction.Down) { Min = new Autodesk.Navisworks.Api.Point3D(Min.X, Max.Y - (mw + Micp[i2[k]].Rate), Min.Z).Subtract(Micp[i2[k]].Protrusion.Min.ToVector3D()); Max = new Autodesk.Navisworks.Api.Point3D(Max.X, Max.Y - mw, Max.Z).Add(Micp[i2[k]].Protrusion.Max.ToVector3D()); } else if (Micp[i2[k]].Direction == ObjectItem.direction.Front) { Min = new Autodesk.Navisworks.Api.Point3D(Min.X, Min.Y, Min.Z + mw).Subtract(Micp[i2[k]].Protrusion.Min.ToVector3D()); Max = new Autodesk.Navisworks.Api.Point3D(Max.X, Max.Y, Min.Z + mw + Micp[i2[k]].Rate).Add(Micp[i2[k]].Protrusion.Max.ToVector3D()); } else { Min = new Autodesk.Navisworks.Api.Point3D(Min.X, Min.Y, Max.Z - (mw + Micp[i2[k]].Rate)).Subtract(Micp[i2[k]].Protrusion.Min.ToVector3D()); Max = new Autodesk.Navisworks.Api.Point3D(Max.X, Max.Y, Max.Z - mw).Add(Micp[i2[k]].Protrusion.Max.ToVector3D()); } BoundingBox3D BBP = new BoundingBox3D(Min, Max); for (i = k + 1; i < mc2.Count; i++) { bn1 = mc2[i].BoundingBox().Min; bx1 = mc2[i].BoundingBox().Max; Max = new Autodesk.Navisworks.Api.Point3D((bx1.X * 0.3048), (bx1.Y * 0.3048), (bx1.Z * 0.3048)); Min = new Autodesk.Navisworks.Api.Point3D((bn1.X * 0.3048), (bn1.Y * 0.3048), (bn1.Z * 0.3048)); BoundingBox3D bb2 = new BoundingBox3D(Min, Max); mw = (date - Start[i2[i]]) * Micp[i2[i]].Rate; if (Micp[i2[i]].Direction == ObjectItem.direction.Right) { Min = new Autodesk.Navisworks.Api.Point3D(Min.X + mw, Min.Y, Min.Z).Subtract(Micp[i2[i]].Protrusion.Min.ToVector3D()); Max = new Autodesk.Navisworks.Api.Point3D(Min.X + mw + Micp[i2[i]].Rate, Max.Y, Max.Z).Add(Micp[i2[i]].Protrusion.Max.ToVector3D()); } else if (Micp[i2[i]].Direction == ObjectItem.direction.Left) { Min = new Autodesk.Navisworks.Api.Point3D(Max.X - (mw + Micp[i2[i]].Rate), Min.Y, Min.Z).Subtract(Micp[i2[i]].Protrusion.Min.ToVector3D()); Max = new Autodesk.Navisworks.Api.Point3D(Max.X - mw, Max.Y, Max.Z).Add(Micp[i2[i]].Protrusion.Max.ToVector3D()); } else if (Micp[i2[i]].Direction == ObjectItem.direction.Up) { Min = new Autodesk.Navisworks.Api.Point3D(Min.X, Min.Y + mw, Min.Z).Subtract(Micp[i2[i]].Protrusion.Min.ToVector3D()); Max = new Autodesk.Navisworks.Api.Point3D(Max.X, Min.Y + mw + Micp[i2[i]].Rate, Max.Z).Add(Micp[i2[i]].Protrusion.Max.ToVector3D()); } else if (Micp[i2[i]].Direction == ObjectItem.direction.Down) { Min = new Autodesk.Navisworks.Api.Point3D(Min.X, Max.Y - (mw + Micp[i2[i]].Rate), Min.Z).Subtract(Micp[i2[i]].Protrusion.Min.ToVector3D()); Max = new Autodesk.Navisworks.Api.Point3D(Max.X, Max.Y - mw, Max.Z).Add(Micp[i2[i]].Protrusion.Max.ToVector3D()); } else if (Micp[i2[i]].Direction == ObjectItem.direction.Front) { Min = new Autodesk.Navisworks.Api.Point3D(Min.X, Min.Y, Min.Z + mw).Subtract(Micp[i2[i]].Protrusion.Min.ToVector3D()); Max = new Autodesk.Navisworks.Api.Point3D(Max.X, Max.Y, Min.Z + mw + Micp[i2[i]].Rate).Add(Micp[i2[i]].Protrusion.Max.ToVector3D()); } else { Min = new Autodesk.Navisworks.Api.Point3D(Min.X, Min.Y, Max.Z - (mw + Micp[i2[i]].Rate)).Subtract(Micp[i2[i]].Protrusion.Min.ToVector3D()); Max = new Autodesk.Navisworks.Api.Point3D(Max.X, Max.Y, Max.Z - mw).Add(Micp[i2[i]].Protrusion.Max.ToVector3D()); } BoundingBox3D BBP1 = new BoundingBox3D(Min, Max); v = v + BBP.Intersect(bb2).Volume + BBP1.Intersect(bb1).Volume + BBP.Intersect(BBP1).Volume - BBP.Intersect(bb2).Intersect(BBP1).Volume - BBP1.Intersect(bb1).Intersect(BBP).Volume; } } } return(v); }
public void SetPosition(int index, BoundingBox3D pos) { int status = SafeNativeMethods.xnSetUserPosition(this.InternalObject, (uint)index, ref pos); WrapperUtils.ThrowOnError(status); }
public void SetPosition(uint index, BoundingBox3D pos) { UInt32 status = OpenNIImporter.xnSetUserPosition(this.InternalObject, index, ref pos); WrapperUtils.CheckStatus(status); }
public void ExpandTo(BoundingBox3D box) { this.ExpandTo(box.min, box.max); }
public override void LoadContent(DeviceContext context) { _blockpickedUPEffect = new HLSLVertexPositionColor(_engine.Device); _pickedCube = new BoundingBox3D(_engine, _focusManager, new Vector3(1.000f, 1.000f, 1.000f), _blockpickedUPEffect, _cursorColor); }
public bool Contains(BoundingBox3D bbox) { return(this.Contains(bbox.min) && this.Contains(bbox.max)); }
public static List <Element> ToRevit(this AdjacencyCluster adjacencyCluster, Document document, ConvertSettings convertSettings) { if (adjacencyCluster == null || document == null) { return(null); } List <Element> result = convertSettings?.GetObjects <Element>(adjacencyCluster.Guid); if (result != null) { return(result); } Dictionary <Space, Shell> dictionary_Shell = adjacencyCluster.ShellDictionary(); if (dictionary_Shell == null) { return(null); } //List<Level> levels = new FilteredElementCollector(document).OfClass(typeof(Level)).Cast<Level>().ToList(); //if (levels == null || levels.Count == 0) // return null; Dictionary <ElementId, Element> dictionary_Element = new Dictionary <ElementId, Element>(); HashSet <System.Guid> guids = new HashSet <System.Guid>(); foreach (KeyValuePair <Space, Shell> keyValuePair in dictionary_Shell) { Space space = keyValuePair.Key; List <Panel> panels_Space = adjacencyCluster.GetPanels(space); if (panels_Space != null && panels_Space.Count != 0) { foreach (Panel panel in panels_Space) { if (guids.Contains(panel.Guid)) { continue; } guids.Add(panel.Guid); HostObject hostObject = panel.ToRevit(document, convertSettings); if (hostObject == null) { continue; } dictionary_Element[hostObject.Id] = hostObject; } } Autodesk.Revit.DB.Mechanical.Space space_Revit = space.ToRevit(document, convertSettings); if (space_Revit == null) { continue; } dictionary_Element[space_Revit.Id] = space_Revit; BoundingBox3D boundingBox3D = keyValuePair.Value.GetBoundingBox(); if (boundingBox3D == null) { continue; } Parameter parameter; parameter = space_Revit.get_Parameter(BuiltInParameter.ROOM_UPPER_LEVEL); Level level = document.ClosestLevel(boundingBox3D.Max.Z); if (level == null) { continue; } parameter.Set(level.Id); if (level.Id != space_Revit.LevelId && level.Elevation > (document.GetElement(space_Revit.LevelId) as Level).Elevation) { parameter = space_Revit.get_Parameter(BuiltInParameter.ROOM_UPPER_OFFSET); parameter.Set(0); } } List <Panel> panels = adjacencyCluster.GetShadingPanels(); if (panels != null && panels.Count != 0) { foreach (Panel panel in panels) { HostObject hostObject = panel.ToRevit(document, convertSettings); if (hostObject == null) { continue; } dictionary_Element[hostObject.Id] = hostObject; } } List <Zone> zones = adjacencyCluster.GetObjects <Zone>(); if (zones != null) { foreach (Zone zone in zones) { List <Autodesk.Revit.DB.Mechanical.Space> spaces = ToRevit(adjacencyCluster, zone, document, convertSettings); spaces?.ForEach(x => dictionary_Element[x.Id] = x); } } List <ZoneSimulationResult> zoneSimulationResults = adjacencyCluster.GetObjects <ZoneSimulationResult>(); if (zoneSimulationResults != null) { foreach (ZoneSimulationResult zoneSimulationResult in zoneSimulationResults) { List <Autodesk.Revit.DB.Mechanical.Space> spaces = ToRevit(adjacencyCluster, zoneSimulationResult, document, convertSettings); spaces?.ForEach(x => dictionary_Element[x.Id] = x); } } List <SpaceSimulationResult> spaceSimulationResults = adjacencyCluster.GetObjects <SpaceSimulationResult>(); if (zoneSimulationResults != null) { foreach (SpaceSimulationResult spaceSimulationResult in spaceSimulationResults) { List <Autodesk.Revit.DB.Mechanical.Space> spaces = ToRevit(adjacencyCluster, spaceSimulationResult, document, convertSettings); spaces?.ForEach(x => dictionary_Element[x.Id] = x); } } List <AdjacencyClusterSimulationResult> adjacencyClusterSimulationResults = adjacencyCluster.GetObjects <AdjacencyClusterSimulationResult>(); if (adjacencyClusterSimulationResults != null) { foreach (AdjacencyClusterSimulationResult adjacencyClusterSimulationResult in adjacencyClusterSimulationResults) { ProjectInfo projectInfo = ToRevit(adjacencyClusterSimulationResult, document, convertSettings); if (projectInfo != null) { dictionary_Element[projectInfo.Id] = projectInfo; } } } result = dictionary_Element.Values.ToList(); convertSettings?.Add(adjacencyCluster.Guid, result); return(result); }
public static TBD.Building ToTBD(this AnalyticalModel analyticalModel, TBD.TBDDocument tBDDocument) { if (analyticalModel == null) { return(null); } TBD.Building result = tBDDocument.Building; if (result == null) { return(null); } AdjacencyCluster adjacencyCluster = analyticalModel.AdjacencyCluster; if (adjacencyCluster == null) { return(null); } List <Space> spaces = adjacencyCluster.GetSpaces(); if (spaces == null) { return(result); } MaterialLibrary materialLibrary = analyticalModel.MaterialLibrary; Plane plane = Plane.WorldXY; List <TBD.DaysShade> daysShades = new List <TBD.DaysShade>(); result.ClearShadingData(); Dictionary <System.Guid, List <TBD.zoneSurface> > dictionary_Panel = new Dictionary <System.Guid, List <TBD.zoneSurface> >(); Dictionary <System.Guid, List <TBD.zoneSurface> > dictionary_Aperture = new Dictionary <System.Guid, List <TBD.zoneSurface> >(); foreach (Space space in spaces) { Shell shell = adjacencyCluster.Shell(space); if (shell == null) { return(null); } TBD.zone zone = result.AddZone(); zone.name = space.Name; zone.volume = System.Convert.ToSingle(shell.Volume()); if (space.TryGetValue(SpaceParameter.Color, out SAMColor sAMColor) && sAMColor != null) { zone.colour = Core.Convert.ToUint(sAMColor.ToColor()); } List <Face3D> face3Ds = Geometry.Spatial.Query.Section(shell, 0.01, false); if (face3Ds != null && face3Ds.Count != 0) { face3Ds.RemoveAll(x => x == null || !x.IsValid()); zone.floorArea = System.Convert.ToSingle(face3Ds.ConvertAll(x => x.GetArea()).Sum()); zone.exposedPerimeter = System.Convert.ToSingle(face3Ds.ConvertAll(x => Geometry.Planar.Query.Perimeter(x.ExternalEdge2D)).Sum()); zone.length = System.Convert.ToSingle(face3Ds.ConvertAll(x => Geometry.Tas.Query.Length(x)).Sum()); } TBD.room room = zone.AddRoom(); List <TBD.buildingElement> buildingElements = result.BuildingElements(); List <TBD.Construction> constructions = result.Constructions(); List <Panel> panels = adjacencyCluster?.GetPanels(space); if (panels != null || panels.Count != 0) { foreach (Panel panel in panels) { string name_Panel = panel.Name; if (string.IsNullOrWhiteSpace(name_Panel)) { continue; } Face3D face3D_Panel = panel.Face3D; if (face3D_Panel == null) { continue; } BoundingBox3D boundingBox3D_Panel = face3D_Panel.GetBoundingBox(); TBD.zoneSurface zoneSurface_Panel = zone.AddSurface(); zoneSurface_Panel.orientation = System.Convert.ToSingle(Geometry.Spatial.Query.Azimuth(panel, Vector3D.WorldY)); zoneSurface_Panel.inclination = System.Convert.ToSingle(Geometry.Spatial.Query.Tilt(panel)); zoneSurface_Panel.altitude = System.Convert.ToSingle(boundingBox3D_Panel.GetCentroid().Z); zoneSurface_Panel.altitudeRange = System.Convert.ToSingle(boundingBox3D_Panel.Max.Z - boundingBox3D_Panel.Min.Z); zoneSurface_Panel.area = System.Convert.ToSingle(face3D_Panel.GetArea()); zoneSurface_Panel.planHydraulicDiameter = System.Convert.ToSingle(Geometry.Tas.Query.HydraulicDiameter(face3D_Panel)); TBD.RoomSurface roomSurface_Panel = room.AddSurface(); roomSurface_Panel.area = zoneSurface_Panel.area; roomSurface_Panel.zoneSurface = zoneSurface_Panel; Geometry.SolarCalculator.SolarFaceSimulationResult solarFaceSimulationResult = analyticalModel.GetResults <Geometry.SolarCalculator.SolarFaceSimulationResult>(panel)?.FirstOrDefault(); if (solarFaceSimulationResult != null) { List <TBD.SurfaceShade> surfaceShades = Modify.UpdateSurfaceShades(result, daysShades, zoneSurface_Panel, analyticalModel, solarFaceSimulationResult); } TBD.Perimeter perimeter_Panel = Geometry.Tas.Convert.ToTBD(panel.GetFace3D(true), roomSurface_Panel); if (perimeter_Panel == null) { continue; } PanelType panelType = panel.PanelType; TBD.buildingElement buildingElement_Panel = buildingElements.Find(x => x.name == name_Panel); if (buildingElement_Panel == null) { TBD.Construction construction_TBD = null; Construction construction = panel.Construction; if (construction != null) { construction_TBD = constructions.Find(x => x.name == construction.Name); if (construction_TBD == null) { construction_TBD = result.AddConstruction(null); construction_TBD.name = construction.Name; if (construction.Transparent(materialLibrary)) { construction_TBD.type = TBD.ConstructionTypes.tcdTransparentConstruction; } List <ConstructionLayer> constructionLayers = construction.ConstructionLayers; if (constructionLayers != null && constructionLayers.Count != 0) { int index = 1; foreach (ConstructionLayer constructionLayer in constructionLayers) { Material material = analyticalModel?.MaterialLibrary?.GetMaterial(constructionLayer.Name) as Core.Material; if (material == null) { continue; } TBD.material material_TBD = construction_TBD.AddMaterial(material); if (material_TBD != null) { material_TBD.width = System.Convert.ToSingle(constructionLayer.Thickness); construction_TBD.materialWidth[index] = System.Convert.ToSingle(constructionLayer.Thickness); index++; } } } constructions.Add(construction_TBD); } if (panelType == PanelType.Undefined && construction != null) { panelType = construction.PanelType(); if (panelType == PanelType.Undefined && construction.TryGetValue(ConstructionParameter.DefaultPanelType, out string panelTypeString)) { panelType = Core.Query.Enum <PanelType>(panelTypeString); } } } buildingElement_Panel = result.AddBuildingElement(); buildingElement_Panel.name = name_Panel; buildingElement_Panel.colour = Core.Convert.ToUint(Analytical.Query.Color(panelType)); buildingElement_Panel.BEType = Query.BEType(panelType.Text()); buildingElement_Panel.AssignConstruction(construction_TBD); buildingElements.Add(buildingElement_Panel); } if (buildingElement_Panel != null) { zoneSurface_Panel.buildingElement = buildingElement_Panel; } zoneSurface_Panel.type = TBD.SurfaceType.tbdExposed; List <Aperture> apertures = panel.Apertures; if (apertures != null && apertures.Count != 0) { bool @internal = adjacencyCluster.Internal(panel); foreach (Aperture aperture in apertures) { string name_Aperture = aperture.Name; if (string.IsNullOrWhiteSpace(name_Aperture)) { continue; } name_Aperture = string.Format("{0} -pane", aperture.Name); Face3D face3D_Aperture = aperture.Face3D; if (face3D_Aperture == null) { continue; } BoundingBox3D boundingBox3D_Aperture = face3D_Aperture.GetBoundingBox(); float area = System.Convert.ToSingle(face3D_Aperture.GetArea()); TBD.zoneSurface zoneSurface_Aperture = zoneSurface_Panel.AddChildSurface(area); if (zoneSurface_Aperture == null) { continue; } zoneSurface_Aperture.orientation = zoneSurface_Panel.orientation; zoneSurface_Aperture.inclination = zoneSurface_Panel.inclination; zoneSurface_Aperture.altitude = System.Convert.ToSingle(boundingBox3D_Aperture.GetCentroid().Z); zoneSurface_Aperture.altitudeRange = System.Convert.ToSingle(boundingBox3D_Aperture.Max.Z - boundingBox3D_Aperture.Min.Z); zoneSurface_Aperture.planHydraulicDiameter = System.Convert.ToSingle(Geometry.Tas.Query.HydraulicDiameter(face3D_Aperture)); //zoneSurface_Aperture.area = System.Convert.ToSingle(face3D_Aperture.GetArea()); zoneSurface_Aperture.type = @internal ? TBD.SurfaceType.tbdLink : zoneSurface_Panel.type; TBD.RoomSurface roomSurface_Aperture = room.AddSurface(); roomSurface_Aperture.area = zoneSurface_Aperture.area; roomSurface_Aperture.zoneSurface = zoneSurface_Aperture; TBD.Perimeter perimeter_Aperture = Geometry.Tas.Convert.ToTBD(face3D_Aperture, roomSurface_Aperture); if (perimeter_Aperture == null) { continue; } TBD.buildingElement buildingElement_Aperture = buildingElements.Find(x => x.name == name_Aperture); if (buildingElement_Aperture == null) { TBD.Construction construction_TBD = null; ApertureConstruction apertureConstruction = aperture.ApertureConstruction; if (apertureConstruction != null) { construction_TBD = constructions.Find(x => x.name == apertureConstruction.Name); if (construction_TBD == null) { construction_TBD = result.AddConstruction(null); construction_TBD.name = name_Aperture; if (apertureConstruction.Transparent(materialLibrary)) { construction_TBD.type = TBD.ConstructionTypes.tcdTransparentConstruction; } List <ConstructionLayer> constructionLayers = apertureConstruction.PaneConstructionLayers; if (constructionLayers != null && constructionLayers.Count != 0) { int index = 1; foreach (ConstructionLayer constructionLayer in constructionLayers) { Core.Material material = materialLibrary?.GetMaterial(constructionLayer.Name) as Material; if (material == null) { continue; } TBD.material material_TBD = construction_TBD.AddMaterial(material); if (material_TBD != null) { material_TBD.width = System.Convert.ToSingle(constructionLayer.Thickness); construction_TBD.materialWidth[index] = System.Convert.ToSingle(constructionLayer.Thickness); index++; } } } constructions.Add(construction_TBD); } } ApertureType apertureType = aperture.ApertureType; buildingElement_Aperture = result.AddBuildingElement(); buildingElement_Aperture.name = name_Aperture; buildingElement_Aperture.colour = Core.Convert.ToUint(Analytical.Query.Color(apertureType)); buildingElement_Aperture.BEType = Query.BEType(apertureType, false); buildingElement_Aperture.AssignConstruction(construction_TBD); buildingElements.Add(buildingElement_Aperture); } if (buildingElement_Aperture != null) { zoneSurface_Aperture.buildingElement = buildingElement_Aperture; } if (!dictionary_Aperture.TryGetValue(aperture.Guid, out List <TBD.zoneSurface> zoneSurfaces_Aperture) || zoneSurfaces_Aperture == null) { zoneSurfaces_Aperture = new List <TBD.zoneSurface>(); dictionary_Aperture[aperture.Guid] = zoneSurfaces_Aperture; } zoneSurfaces_Aperture.Add(zoneSurface_Aperture); } } zoneSurface_Panel.type = Query.SurfaceType(panelType); if (!dictionary_Panel.TryGetValue(panel.Guid, out List <TBD.zoneSurface> zoneSurfaces_Panel) || zoneSurfaces_Panel == null) { zoneSurfaces_Panel = new List <TBD.zoneSurface>(); dictionary_Panel[panel.Guid] = zoneSurfaces_Panel; } zoneSurfaces_Panel.Add(zoneSurface_Panel); } } } foreach (KeyValuePair <System.Guid, List <TBD.zoneSurface> > keyValuePair in dictionary_Panel) { if (keyValuePair.Value == null || keyValuePair.Value.Count <= 1) { continue; } keyValuePair.Value[1].linkSurface = keyValuePair.Value[0]; keyValuePair.Value[0].linkSurface = keyValuePair.Value[1]; if (keyValuePair.Value[0].inclination == 0 || keyValuePair.Value[0].inclination == 180) { float inclination = keyValuePair.Value[1].inclination; inclination -= 180; if (inclination < 0) { inclination += 360; } keyValuePair.Value[1].inclination = inclination; keyValuePair.Value[1].reversed = 1; } else { float orientation = keyValuePair.Value[1].orientation; orientation += 180; if (orientation >= 360) { orientation -= 360; } keyValuePair.Value[1].orientation = orientation; keyValuePair.Value[1].reversed = 1; float inclination = keyValuePair.Value[1].inclination; if (inclination > 180) { inclination -= 180; } keyValuePair.Value[1].inclination = inclination; } } foreach (KeyValuePair <System.Guid, List <TBD.zoneSurface> > keyValuePair in dictionary_Aperture) { if (keyValuePair.Value == null || keyValuePair.Value.Count <= 1) { continue; } keyValuePair.Value[1].linkSurface = keyValuePair.Value[0]; keyValuePair.Value[0].linkSurface = keyValuePair.Value[1]; if (keyValuePair.Value[0].inclination == 0 || keyValuePair.Value[0].inclination == 180) { float inclination = keyValuePair.Value[0].inclination; inclination -= 180; if (inclination < 0) { inclination += 360; } keyValuePair.Value[0].inclination = inclination; keyValuePair.Value[0].reversed = 1; } else { float orientation = keyValuePair.Value[1].orientation; orientation += 180; if (orientation >= 360) { orientation -= 360; } keyValuePair.Value[1].orientation = orientation; keyValuePair.Value[1].reversed = 1; } } return(result); }
public static bool UpdateShading(this AnalyticalModel analyticalModel, TBD.Building building, double tolerance = Core.Tolerance.Distance) { if (building == null || analyticalModel == null) { return(false); } List <TBD.zone> zones = building.Zones(); if (zones == null) { return(false); } List <Tuple <Face3D, BoundingBox3D, TBD.IZoneSurface, int, int> > tuples_ZoneSurfaces = new List <Tuple <Face3D, BoundingBox3D, TBD.IZoneSurface, int, int> >(); int index_Zone = 0; foreach (TBD.zone zone in zones) { List <TBD.IZoneSurface> zoneSurfaces_Zone = zone?.ZoneSurfaces(); if (zoneSurfaces_Zone == null) { continue; } int index_Surface = 0; foreach (TBD.IZoneSurface zoneSurface in zoneSurfaces_Zone) { List <TBD.IRoomSurface> roomSurfaces = zoneSurface.RoomSurfaces(); if (roomSurfaces == null) { continue; } foreach (TBD.IRoomSurface roomSurface in roomSurfaces) { Face3D face3D = Geometry.Tas.Convert.ToSAM(roomSurface?.GetPerimeter()); if (face3D == null || !face3D.IsValid()) { continue; } tuples_ZoneSurfaces.Add(new Tuple <Face3D, BoundingBox3D, TBD.IZoneSurface, int, int>(face3D, face3D.GetBoundingBox(), zoneSurface, index_Zone, index_Surface)); } index_Surface++; } index_Zone++; } if (tuples_ZoneSurfaces == null || tuples_ZoneSurfaces.Count == 0) { return(false); } List <Panel> panels = analyticalModel.GetPanels(); if (panels == null) { return(false); } List <Tuple <Face3D, Point3D, BoundingBox3D, Panel> > tuples_Panel = new List <Tuple <Face3D, Point3D, BoundingBox3D, Panel> >(); foreach (Panel panel in panels) { Face3D face3D = panel.Face3D; if (face3D == null || !face3D.IsValid()) { continue; } BoundingBox3D boundingBox3D = face3D.GetBoundingBox(); Point3D point3D = face3D.GetInternalPoint3D(tolerance); } throw new NotImplementedException(); }
public void AddGesture(string strGesture, BoundingBox3D area) { UInt32 status = OpenNIImporter.xnAddGesture(InternalObject, strGesture, ref area); WrapperUtils.CheckStatus(status); }
public static bool UpdateShading(this TBD.Building building, AnalyticalModel analyticalModel, double tolerance = Core.Tolerance.Distance) { if (building == null || analyticalModel == null) { return(false); } List <TBD.zone> zones = building.Zones(); if (zones == null) { return(false); } List <Tuple <Face3D, BoundingBox3D, TBD.IZoneSurface> > tuples_ZoneSurfaces = new List <Tuple <Face3D, BoundingBox3D, TBD.IZoneSurface> >(); foreach (TBD.zone zone in zones) { List <TBD.IZoneSurface> zoneSurfaces_Zone = zone?.ZoneSurfaces(); if (zoneSurfaces_Zone == null) { continue; } foreach (TBD.IZoneSurface zoneSurface in zoneSurfaces_Zone) { List <TBD.IRoomSurface> roomSurfaces = zoneSurface.RoomSurfaces(); if (roomSurfaces == null) { continue; } foreach (TBD.IRoomSurface roomSurface in roomSurfaces) { Face3D face3D = Geometry.Tas.Convert.ToSAM(roomSurface?.GetPerimeter()); if (face3D == null || !face3D.IsValid()) { continue; } tuples_ZoneSurfaces.Add(new Tuple <Face3D, BoundingBox3D, TBD.IZoneSurface>(face3D, face3D.GetBoundingBox(), zoneSurface)); } } } if (tuples_ZoneSurfaces == null || tuples_ZoneSurfaces.Count == 0) { return(false); } List <Panel> panels = analyticalModel.GetPanels(); if (panels == null) { return(false); } List <Tuple <Face3D, Point3D, BoundingBox3D, Geometry.SolarCalculator.SolarFaceSimulationResult> > tuples_solarFaceSimulationResult = new List <Tuple <Face3D, Point3D, BoundingBox3D, Geometry.SolarCalculator.SolarFaceSimulationResult> >(); foreach (Panel panel in panels) { List <Geometry.SolarCalculator.SolarFaceSimulationResult> solarFaceSimulationResults = analyticalModel.GetResults <Geometry.SolarCalculator.SolarFaceSimulationResult>(panel); if (solarFaceSimulationResults == null || solarFaceSimulationResults.Count == 0) { continue; } Face3D face3D = panel.Face3D; if (face3D == null || !face3D.IsValid()) { continue; } BoundingBox3D boundingBox3D = face3D.GetBoundingBox(); Point3D point3D = face3D.GetInternalPoint3D(tolerance); foreach (Geometry.SolarCalculator.SolarFaceSimulationResult solarFaceSimulationResult in solarFaceSimulationResults) { tuples_solarFaceSimulationResult.Add(new Tuple <Face3D, Point3D, BoundingBox3D, Geometry.SolarCalculator.SolarFaceSimulationResult>(face3D, point3D, boundingBox3D, solarFaceSimulationResult)); } } building.ClearShadingData(); List <TBD.DaysShade> daysShades = new List <TBD.DaysShade>(); foreach (Tuple <Face3D, Point3D, BoundingBox3D, Geometry.SolarCalculator.SolarFaceSimulationResult> tuple in tuples_solarFaceSimulationResult) { List <Tuple <Face3D, BoundingBox3D, TBD.IZoneSurface> > tuples_Temp = tuples_ZoneSurfaces.FindAll(x => tuple.Item3.InRange(x.Item2, tolerance)); tuples_Temp = tuples_Temp.FindAll(x => x.Item1.On(tuple.Item2, tolerance)); if (tuples_Temp == null || tuples_Temp.Count == 0) { continue; } foreach (Tuple <Face3D, BoundingBox3D, TBD.IZoneSurface> tuple_ZoneSurface in tuples_Temp) { UpdateSurfaceShades(building, daysShades, (TBD.zoneSurface)tuple_ZoneSurface.Item3, analyticalModel, tuple.Item4); } } return(true); }
public override int Execute(params string[] ps) { Document doc = Application.ActiveDocument; string currentFilename = doc.CurrentFileName; string filename = doc.FileName; string title = doc.Title; Units units = doc.Units; DocumentModels models = doc.Models; DocumentInfoPart info = doc.DocumentInfo; string currentSheetId = info.Value.CurrentSheetId; // "little_house_2021.rvt" DocumentDatabase db = doc.Database; bool ignoreHidden = true; BoundingBox3D bb = doc.GetBoundingBox(ignoreHidden); Point3D min = bb.Min; Point3D max = bb.Max; int n; n = models.Count; Debug.Print("\n{0}: sheet {1}, bounding box {2}, {3} model{4}{5}\n", title, currentSheetId, Util.BoundingBoxString(bb), n, Util.PluralSuffix(n), Util.DotOrColon(n)); // First attempt, based on Navisworks-Geometry-Primitives, // using walkNode oState.CurrentPartition: //WalkPartition wp = new WalkPartition(); //wp.Execute(); // Second attempt, retrieving root item descendants: Debug.Print("Model item tree structure:"); foreach (Model model in models) { string model_filename = Path.GetFileName( model.FileName); string path = "C:/tmp/" + model_filename.Replace(".nwd", ".txt"); ModelItem rootItem = model.RootItem; ModelItemEnumerableCollection mis = rootItem.DescendantsAndSelf; n = mis.Count(); Debug.Print( "\nModel {0} contains {1} model items listed in '{2}'\n", model_filename, n, path); ItemTree mitree = new ItemTree(mis); using (StreamWriter writer = new StreamWriter(path)) { mitree.WriteTo(writer); } /* * ItemData.InstanceCount = 0; * * List<ItemData> layers * = new List<ItemData>( mis * .Where<ModelItem>( mi => mi.IsLayer ) * .Select<ModelItem, ItemData>( * mi => new ItemData( mi ) ) ); * * n = layers.Count(); * Debug.Print( * " {0} layers containing {1} hierarchical model items", * n, ItemData.InstanceCount ); * * int iLayer = 0; * * foreach( ItemData layer in layers ) * { * List<ItemData> cats = layer.Children; * n = cats.Count(); * Debug.Print( * " {0}: {1} has {2} categories", * iLayer++, layer, n ); * * int iCategory = 0; * * foreach( ItemData cat in cats ) * { * List<ItemData> fams = cat.Children; * n = fams.Count(); * Debug.Print( * " {0}: {1} has {2} families", * iCategory++, cat, n ); * * int iFamily = 0; * * foreach( ItemData fam in fams ) * { * List<ItemData> types = fam.Children; * n = types.Count(); * Debug.Print( * " {0}: {1} has {2} types", * iFamily++, fam, n ); * * int iType = 0; * * foreach( ItemData typ in types ) * { * List<ItemData> instances = typ.Children; * n = instances.Count(); * Debug.Print( * " {0}: {1} has {2} instances", * iType++, typ, n ); * * int iInst = 0; * * foreach( ItemData inst in instances ) * { * List<ItemData> subinsts = inst.Children; * n = subinsts.Count(); * Debug.Print( * " {0}: {1} has {2} subinstances", * iInst++, inst, n ); * * int iSubinst = 0; * * foreach( ItemData subinst in subinsts ) * { * List<ItemData> children = subinst.Children; * n = children.Count(); * Debug.Print( * " {0}: {1} has {2} children", * iSubinst++, inst, n ); * } * } * } * } * } * } */ if (50 > n) { List <ModelItem> migeos = new List <ModelItem>(); foreach (ModelItem mi in mis) { Debug.Print( " '{0}' '{1}' '{2}' has geo {3}", mi.DisplayName, mi.ClassDisplayName, mi.ClassName, mi.HasGeometry); if (mi.HasGeometry) { migeos.Add(mi); } } Debug.Print(" {0} model items have geometry:", migeos.Count()); foreach (ModelItem mi in migeos) { Debug.Print( " '{0}' '{1}' '{2}' {3} bb {4}", mi.DisplayName, mi.ClassDisplayName, mi.ClassName, mi.HasGeometry, Util.BoundingBoxString(mi.BoundingBox())); if ("Floor" == mi.DisplayName) { RvtProperties.DumpProperties(mi); RvtProperties props = new RvtProperties(mi); int id = props.ElementId; } } } } return(0); }