Esempio n. 1
0
        public void AddGesture(string gesture, BoundingBox3D area)
        {
            int status = SafeNativeMethods.xnAddGesture(InternalObject, gesture, ref area);

            WrapperUtils.ThrowOnError(status);
        }
Esempio n. 2
0
        //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);
        }
Esempio n. 3
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);
        }
Esempio n. 7
0
        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);
        }
Esempio n. 9
0
 public void ExpandTo(BoundingBox3D box)
 {
     this.ExpandTo(box.min, box.max);
 }
Esempio n. 10
0
 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);
 }
Esempio n. 11
0
 public bool Contains(BoundingBox3D bbox)
 {
     return(this.Contains(bbox.min) && this.Contains(bbox.max));
 }
Esempio n. 12
0
        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);
        }
Esempio n. 13
0
        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);
        }
Esempio n. 14
0
        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();
        }
Esempio n. 15
0
        public void AddGesture(string strGesture, BoundingBox3D area)
        {
            UInt32 status = OpenNIImporter.xnAddGesture(InternalObject, strGesture, ref area);

            WrapperUtils.CheckStatus(status);
        }
Esempio n. 16
0
        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);
        }
Esempio n. 17
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 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);
        }