Esempio n. 1
0
        /// <summary>
        /// Deletes all of the specified DWG imports.
        /// </summary>
        /// <param name="imports">DWGs to be deleted.</param>
        /// <returns>List of deleted DWGs.</returns>
        public List <CadLinkTypeWrapper> Delete(List <CadLinkTypeWrapper> imports)
        {
            var deleted = new List <CadLinkTypeWrapper>();

            using (var trans = new Transaction(_doc, "Delete Imports"))
            {
                trans.Start();
                StatusBarManager.InitializeProgress("Deleting DWGs:", imports.Count);

                foreach (var import in imports)
                {
                    StatusBarManager.StepForward();
                    try
                    {
                        _doc.Delete(import.Id);
                        deleted.Add(import);
                    }
                    catch (Exception e)
                    {
                        Log.AppendLog(LogMessageType.EXCEPTION, e.Message);
                    }
                }

                StatusBarManager.FinalizeProgress();
                trans.Commit();
            }

            return(deleted);
        }
Esempio n. 2
0
        /// <summary>
        /// Method for deleting selected group types and all of their instances.
        /// </summary>
        /// <param name="app">UI Application.</param>
        public void Delete(UIApplication app)
        {
            var doc     = app.ActiveUIDocument.Document;
            var groups  = (List <GroupTypeWrapper>)Arg1;
            var deleted = new List <GroupTypeWrapper>();

            using (var trans = new Transaction(doc, "Delete Groups"))
            {
                trans.Start();
                StatusBarManager.InitializeProgress("Deleting Groups...", groups.Count);

                foreach (var g in groups)
                {
                    StatusBarManager.StepForward();
                    try
                    {
                        doc.Delete(g.Id);
                        deleted.Add(g);
                    }
                    catch (Exception e)
                    {
                        Log.AppendLog(LogMessageType.EXCEPTION, e.Message);
                    }
                }

                StatusBarManager.FinalizeProgress();
                trans.Commit();
            }

            Messenger.Default.Send(new GroupsDeleted {
                Groups = deleted
            });
        }
Esempio n. 3
0
        /// <summary>
        /// Deletes selected styles from the model.
        /// </summary>
        /// <param name="styles">List of styles to delete.</param>
        /// <returns>List of deleted styles.</returns>
        public List <CategoryWrapper> Delete(List <CategoryWrapper> styles)
        {
            var deleted = new List <CategoryWrapper>();

            using (var trans = new Transaction(_doc, "Delete Styles"))
            {
                trans.Start();
                StatusBarManager.InitializeProgress("Deleting Styles:", styles.Count);

                foreach (var style in styles)
                {
                    StatusBarManager.StepForward();
                    try
                    {
                        _doc.Delete(style.Id);
                        deleted.Add(style);
                    }
                    catch (Exception e)
                    {
                        Log.AppendLog(LogMessageType.EXCEPTION, e.Message);
                    }
                }

                StatusBarManager.FinalizeProgress();
                trans.Commit();
            }

            return(deleted);
        }
Esempio n. 4
0
        /// <summary>
        /// Method for ungrouping selected group type and all of their instances.
        /// Once all instances are ingrouped a Group Type will be deleted.
        /// </summary>
        /// <param name="app">UI Application.</param>
        public void Ungroup(UIApplication app)
        {
            var doc     = app.ActiveUIDocument.Document;
            var groups  = (List <GroupTypeWrapper>)Arg1;
            var deleted = new List <GroupTypeWrapper>();

            using (var trans = new Transaction(doc, "Ungroup Groups"))
            {
                trans.Start();
                StatusBarManager.InitializeProgress("Ungrouping Groups...", groups.Count);

                foreach (var g in groups)
                {
                    StatusBarManager.StepForward();
                    var ungrouped = 0;
                    foreach (var id in g.Instances)
                    {
                        var instance = (Group)doc.GetElement(id);
                        if (instance == null)
                        {
                            continue;
                        }

                        try
                        {
                            instance.UngroupMembers();
                            ungrouped++;
                        }
                        catch (Exception e)
                        {
                            Log.AppendLog(LogMessageType.EXCEPTION, e.Message);
                        }
                    }

                    if (ungrouped != g.Instances.Count)
                    {
                        continue;
                    }

                    try
                    {
                        doc.Delete(g.Id);
                        deleted.Add(g);
                    }
                    catch (Exception e)
                    {
                        Log.AppendLog(LogMessageType.EXCEPTION, e.Message);
                    }
                }

                StatusBarManager.FinalizeProgress();
                trans.Commit();
            }

            Messenger.Default.Send(new GroupsDeleted {
                Groups = deleted
            });
        }
        /// <summary>
        ///
        /// </summary>
        /// <param name="app"></param>
        private void ClearOverrides(UIApplication app)
        {
            var doc     = app.ActiveUIDocument.Document;
            var dims    = (List <DimensionWrapper>)Arg1;
            var cleared = new List <DimensionWrapper>();

            using (var trans = new Transaction(doc, "Remove Dimension Overrides"))
            {
                trans.Start();
                StatusBarManager.InitializeProgress("Removing Overrides...", dims.Count);

                foreach (var dw in dims)
                {
                    StatusBarManager.StepForward();
                    try
                    {
                        var dim = (Dimension)doc.GetElement(dw.DimensionId);
                        if (dim == null)
                        {
                            return;
                        }

                        if (dim.NumberOfSegments == 0)
                        {
                            dim.ValueOverride = string.Empty;
                            cleared.Add(dw);
                        }
                        else
                        {
                            foreach (DimensionSegment s in dim.Segments)
                            {
                                if (s.GetHashCode() != dw.Hash)
                                {
                                    continue;
                                }

                                s.ValueOverride = string.Empty;
                                cleared.Add(dw);
                            }
                        }
                    }
                    catch (Exception e)
                    {
                        Log.AppendLog(LogMessageType.EXCEPTION, e.Message);
                    }
                }

                StatusBarManager.FinalizeProgress();
                trans.Commit();
            }

            Messenger.Default.Send(new OverridesCleared {
                Dimensions = cleared
            });
        }
        /// <summary>
        ///
        /// </summary>
        /// <param name="app"></param>
        private void ReplaceAndDeleteDimensionTypes(UIApplication app)
        {
            var doc            = app.ActiveUIDocument.Document;
            var dims           = (List <DimensionTypeWrapper>)Arg1;
            var repalcementDim = (DimensionTypeWrapper)Arg2;
            var deleted        = new List <DimensionTypeWrapper>();

            using (var trans = new Transaction(doc, "Delete Dimension Types"))
            {
                trans.Start();

                var replace     = dims.ToDictionary(x => x.Id, x => x);
                var replacement = (DimensionType)doc.GetElement(repalcementDim.Id);
                var allDims     = new FilteredElementCollector(doc)
                                  .OfClass(typeof(Dimension))
                                  .WhereElementIsNotElementType()
                                  .Where(x => replace.ContainsKey(x.GetTypeId()))
                                  .Cast <Dimension>()
                                  .ToList();

                // (Konrad) We need to first replace all instances that use the Types
                // that will be deleted.
                StatusBarManager.InitializeProgress("Replacing Types...", allDims.Count);
                foreach (var d in allDims)
                {
                    StatusBarManager.StepForward();
                    d.DimensionType = replacement;
                }
                StatusBarManager.FinalizeProgress();

                // (Konrad) We can then safely delete the dimension type
                StatusBarManager.InitializeProgress("Deleting Types...", dims.Count);
                foreach (var dt in dims)
                {
                    try
                    {
                        doc.Delete(dt.Id);
                        deleted.Add(dt);
                    }
                    catch (Exception e)
                    {
                        Log.AppendLog(LogMessageType.EXCEPTION, e.Message);
                    }
                }
                StatusBarManager.FinalizeProgress();

                trans.Commit();
            }

            Messenger.Default.Send(new DimensionsDeleted {
                Dimensions = deleted
            });
        }
        /// <summary>
        ///
        /// </summary>
        /// <param name="dims"></param>
        /// <returns></returns>
        public List <DimensionWrapper> ClearOverrides(List <DimensionWrapper> dims)
        {
            var result = new List <DimensionWrapper>();

            using (var trans = new Transaction(_doc, "Clear Dimension Overrides"))
            {
                trans.Start();
                StatusBarManager.InitializeProgress("Removing Overrides...", dims.Count);

                foreach (var dw in dims)
                {
                    StatusBarManager.StepForward();
                    try
                    {
                        var dim = (Dimension)_doc.GetElement(dw.DimensionId);
                        if (dim == null)
                        {
                            return(null);
                        }

                        if (dim.NumberOfSegments == 0)
                        {
                            dim.ValueOverride = string.Empty;
                            result.Add(dw);
                        }
                        else
                        {
                            foreach (DimensionSegment s in dim.Segments)
                            {
                                if (s.GetHashCode() != dw.Hash)
                                {
                                    continue;
                                }

                                s.ValueOverride = string.Empty;
                                result.Add(dw);
                            }
                        }
                    }
                    catch (Exception e)
                    {
                        Log.AppendLog(LogMessageType.EXCEPTION, e.Message);
                    }
                }

                StatusBarManager.FinalizeProgress();
                trans.Commit();
            }

            return(result);
        }
Esempio n. 8
0
        private async void OnRunSimulation()
        {
            Debug.WriteLine(Thread.CurrentThread.ManagedThreadId);

            var modelName = Dragonfly ? "Dragonfly" : "Honeybee";

            StatusBarManager.InitializeProgress($"Exporting {modelName} Model...", 100, true);
            var modelPath = await Task.Run(() => ProcessExport());

            StatusBarManager.SetStatus("Start Simulation...");
            var result = await Task.Run(() => Model.RunSimulation(Dragonfly, modelPath));

            if (result == "Success!")
            {
                ShowResults();
            }

            StatusBarManager.FinalizeProgress(true);
            StatusBarManager.SetStatus(result);
            StatusBarManager.LogButton.Visibility = Visibility.Visible;
        }
Esempio n. 9
0
        public Tuple <List <SpatialObjectWrapper>, List <LevelWrapper> > GetSpatialObjects(bool dragonfly)
        {
            var allLevels      = new HashSet <LevelWrapper>();
            var storedObjects  = AppSettings.Instance.StoredSettings.EnergyModelSettings.Rooms;
            var spatialObjects = new FilteredElementCollector(Doc)
                                 .OfClass(typeof(SpatialElement))
                                 .WhereElementIsNotElementType()
                                 .Cast <SpatialElement>()
                                 //.Where(x => (x is Room || x is Space) && x.Area > 0 && (x.Name.Contains("2-180")))
                                 //.Where(x => (x is Room || x is Space) && x.Area > 0 && (x.Name.Contains("2-180") || x.Name.Contains("2-178")))
                                 .Where(x => (x is Room || x is Space) && x.Area > 0)
                                 .OrderBy(x => x.Level.Elevation)
                                 .ToList();

            var modelName = dragonfly ? "Dragonfly" : "Honeybee";

            StatusBarManager.InitializeProgress($"Exporting {modelName} Model.", spatialObjects.Count);

            var result = new List <SpatialObjectWrapper>();

            foreach (var se in spatialObjects)
            {
                var timer = Stopwatch.StartNew();
                StatusBarManager.StepForward($"Processing Room: {se.Name}.");

                if (!storedObjects.Any())
                {
                    result.Add(new SpatialObjectWrapper(se, dragonfly));
                    continue;
                }

                var index = storedObjects.FindIndex(y => y.Room2D?.Identifier == $"Room_{se.UniqueId}");
                if (index == -1)
                {
                    result.Add(new SpatialObjectWrapper(se, dragonfly));
                    continue;
                }

                var storedSo = storedObjects[index];
                var so       = new SpatialObjectWrapper(se, dragonfly);
                so.IsConstructionSetOverriden  = storedSo.IsConstructionSetOverriden;
                so.IsProgramTypeOverriden      = storedSo.IsProgramTypeOverriden;
                so.Room2D.FloorToCeilingHeight = storedSo.Room2D.FloorToCeilingHeight;
                so.Room2D.IsTopExposed         = storedSo.Room2D.IsTopExposed;
                so.Room2D.IsGroundContact      = storedSo.Room2D.IsGroundContact;
                so.Room2D.Properties.Energy.ConstructionSet = storedSo.Room2D.Properties.Energy.ConstructionSet;
                so.Room2D.Properties.Energy.ProgramType     = storedSo.Room2D.Properties.Energy.ProgramType;

                allLevels.Add(so.Level);
                result.Add(so);

                _logger.Info($"Processed {so.Name} in {timer.Elapsed.TotalSeconds}s.");
            }

            if (dragonfly)
            {
                DF_AssignBoundaryConditions(result);
            }
            else
            {
                HB_AssignBoundaryConditions(result);
            }

            StatusBarManager.FinalizeProgress(true);

            return(new Tuple <List <SpatialObjectWrapper>, List <LevelWrapper> >(result, allLevels.ToList()));
        }
        /// <summary>
        /// Publishes information about linked models/images/object styles in the model.
        /// </summary>
        public void PublishData()
        {
            try
            {
                if (!MonitorUtilities.IsUpdaterOn(Project, Config, UpdaterGuid))
                {
                    return;
                }
                if (string.IsNullOrEmpty(FamiliesId))
                {
                    return;
                }

                var unusedFamilies    = 0;
                var oversizedFamilies = 0;
                var inPlaceFamilies   = 0;
                var families          = new FilteredElementCollector(Doc)
                                        .OfClass(typeof(Family))
                                        .Cast <Family>()
                                        .ToList();

                var config = MissionControlSetup.Configurations.ContainsKey(CentralPath)
                    ? MissionControlSetup.Configurations[CentralPath]
                    : null;

                var familyNameCheck = new List <string> {
                    "HOK_I", "HOK_M"
                };                                                           //defaults
                if (config != null)
                {
                    familyNameCheck = config.Updaters.First(x => string.Equals(x.UpdaterId,
                                                                               Properties.Resources.HealthReportTrackerGuid, StringComparison.OrdinalIgnoreCase)).UserOverrides.FamilyNameCheck.Values;
                }

                //var count = 0;
                var famOutput = new List <FamilyItem>();
                StatusBarManager.InitializeProgress("Exporting Family Info:", families.Count);
                foreach (var family in families)
                {
                    // (Konrad) Uncomment for Debug.
                    //count++;
                    //if (count > 5) continue;
                    if (StatusBarManager.Cancel)
                    {
                        StatusBarManager.CancelProgress();
                        return;
                    }
                    StatusBarManager.StepForward();

                    var sizeCheck     = false;
                    var instanceCheck = false;
                    var nameCheck     = false;

                    var instances = CountFamilyInstances(family);
                    if (instances == 0)
                    {
                        unusedFamilies++;
                        instanceCheck = true;
                    }
                    if (family.IsInPlace)
                    {
                        inPlaceFamilies++;
                    }

                    long size           = 0;
                    var  refPlanes      = 0;
                    var  arrays         = 0;
                    var  voids          = 0;
                    var  nestedFamilies = 0;
                    var  parameters     = 0;
                    var  sizeStr        = "0Kb";
                    var  images         = 0;
                    try
                    {
                        var famDoc = Doc.EditFamily(family);

                        var storedPath = famDoc.PathName;
                        if (File.Exists(storedPath))
                        {
                            size = new FileInfo(storedPath).Length;
                        }
                        else
                        {
                            if (string.IsNullOrWhiteSpace(famDoc.Title))
                            {
                                continue;                                          // could cause an exception
                            }
                            var myDocPath = IsCitrixMachine(Environment.MachineName)
                                ? "B:\\Temp"
                                : Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);

                            var path = myDocPath + "\\temp_" + famDoc.Title;
                            if (path.IndexOfAny(Path.GetInvalidPathChars()) != -1)
                            {
                                continue;                                                    // could cause an exception
                            }
                            if (File.Exists(path))
                            {
                                TryToDelete(path);
                            }
                            famDoc.SaveAs(path);
                            size = new FileInfo(path).Length;
                            TryToDelete(path);
                        }

                        refPlanes = new FilteredElementCollector(famDoc)
                                    .OfClass(typeof(ReferencePlane))
                                    .GetElementCount();

                        var filter = new LogicalOrFilter(new List <ElementFilter>
                        {
                            new ElementClassFilter(typeof(LinearArray)),
                            new ElementClassFilter(typeof(RadialArray))
                        });

                        arrays = new FilteredElementCollector(famDoc)
                                 .WherePasses(filter)
                                 .GetElementCount();

                        images = new FilteredElementCollector(famDoc)
                                 .OfClass(typeof(ImageType))
                                 .WhereElementIsElementType()
                                 .GetElementCount();

                        voids = new FilteredElementCollector(famDoc)
                                .OfClass(typeof(Extrusion))
                                .Cast <Extrusion>()
                                .Count(x => !x.IsSolid);

                        nestedFamilies = new FilteredElementCollector(famDoc)
                                         .OfClass(typeof(Family))
                                         .GetElementCount();
#if RELEASE2015
                        //(Konrad) Since Revit 2015 API doesn't support this we will just skip it.
                        parameters = 0;
#else
                        parameters = new FilteredElementCollector(famDoc)
                                     .OfClass(typeof(ParameterElement))
                                     .GetElementCount();
#endif
                        famDoc.Close(false);

                        sizeStr = StringUtilities.BytesToString(size);
                        if (size > 1000000)
                        {
                            oversizedFamilies++; // >1MB
                            sizeCheck = true;
                        }
                    }
                    catch (Exception ex)
                    {
                        Log.AppendLog(LogMessageType.EXCEPTION, ex.Message);
                        Log.AppendLog(LogMessageType.ERROR, "Failed to retrieve size, refPlanes, arrays, voids...");
                    }

                    if (!familyNameCheck.Any(family.Name.Contains))
                    {
                        nameCheck = true;
                    }

                    var famItem = new FamilyItem
                    {
                        Name              = family.Name,
                        ElementId         = family.Id.IntegerValue,
                        Size              = sizeStr,
                        SizeValue         = size,
                        Instances         = instances,
                        ArrayCount        = arrays,
                        RefPlaneCount     = refPlanes,
                        VoidCount         = voids,
                        NestedFamilyCount = nestedFamilies,
                        ParametersCount   = parameters,
                        ImageCount        = images,
                        Tasks             = new List <FamilyTask>()
                    };

                    if (nameCheck || sizeCheck || instanceCheck)
                    {
                        famItem.IsFailingChecks = true;
                    }
                    else
                    {
                        famItem.IsFailingChecks = false;
                    }

                    famOutput.Add(famItem);
                }

                if (!ServerUtilities.GetByCentralPath(CentralPath, "families/centralpath", out FamilyData famStat))
                {
                    Log.AppendLog(LogMessageType.ERROR, "Failed to retrieve Families data.");
                    return;
                }

                var famDict = new Dictionary <string, FamilyItem>();
                if (famStat != null)
                {
                    famDict = famStat.Families.ToDictionary(x => x.Name, x => x);
                }

                // (Konrad) I know it's not efficient to iterate this list yet again, but
                // I want to minimize the amount of time between publishing families and
                // retrieving them from database to avoid someone addind tasks to DB while
                // we are exporting and hence losing them after the export.
                foreach (var family in famOutput)
                {
                    if (famDict.ContainsKey(family.Name))
                    {
                        family.Tasks.AddRange(famDict[family.Name].Tasks);
                        famDict.Remove(family.Name);
                    }
                }

                foreach (var item in famDict.Values.ToList())
                {
                    item.IsDeleted = true;
                    famOutput.Add(item);
                }

                var familyStats = new FamilyData
                {
                    CentralPath       = CentralPath.ToLower(),
                    TotalFamilies     = famOutput.Count,
                    UnusedFamilies    = unusedFamilies,
                    InPlaceFamilies   = inPlaceFamilies,
                    OversizedFamilies = oversizedFamilies,
                    CreatedBy         = Environment.UserName.ToLower(),
                    CreatedOn         = DateTime.UtcNow,
                    Families          = famOutput
                };

                if (!ServerUtilities.Put(familyStats, "families/" + famStat.Id))
                {
                    Log.AppendLog(LogMessageType.ERROR, "Failed to publish Families data.");
                }
                StatusBarManager.FinalizeProgress();
            }
            catch (Exception ex)
            {
                Log.AppendLog(LogMessageType.EXCEPTION, ex.Message);
            }
        }