Ejemplo n.º 1
0
        public LinkedElementInfo(LinkType linkType, Element sourceElement, Element linkedElement, ElementId linkInstanceId, Transform transform)
        {
            LinkElementType = linkType;

            SourceElementId      = sourceElement.Id;
            SourceUniqueId       = sourceElement.UniqueId;
            LinkedElementId      = linkedElement.Id;
            LinkedUniqueId       = linkedElement.UniqueId;
            SourceLinkInstanceId = linkInstanceId;
            Matched = CompareLocation(sourceElement, linkedElement, transform);

            //tree view
            CategoryName = linkedElement.Category.Name;
            if (customCategories.Contains(linkedElement.Category.Id.IntegerValue))
            {
                LinkDisplayText = "Source Element: " + sourceElement.Name + ", Target Element: " + linkedElement.Name;
            }
            else
            {
                var typeId = linkedElement.GetTypeId();
                if (typeId != ElementId.InvalidElementId)
                {
                    var elementType = linkedElement.Document.GetElement(typeId) as ElementType;
                    if (null != elementType)
                    {
                        var typeInfo = new ElementTypeInfo(elementType);
                        FamilyName      = typeInfo.FamilyName;
                        FamilyTypeName  = typeInfo.Name;
                        LinkDisplayText = "Source Id: " + SourceElementId.IntegerValue + ", Target Id: " + LinkedElementId.IntegerValue;
                    }
                }
            }
            ToolTipText = (linkType == LinkType.ByCopy) ? "Created by Duplication" : "Defined by Users";
        }
Ejemplo n.º 2
0
        private void CollectElementTypes()
        {
            try
            {
                var collector     = new FilteredElementCollector(linkedDoc);
                var sTypes        = collector.OfClass(typeof(ElementType)).ToElements().Cast <ElementType>().ToList();
                var sElementTypes = from type in sTypes where null != type.Category select type;
                sElementTypes = from type in sElementTypes where selectedLink.Categories.ContainsKey(type.Category.Id) select type;
                foreach (var eType in sElementTypes)
                {
                    var eTypeInfo = new ElementTypeInfo(eType);
                    sourceTypesInfo.Add(eTypeInfo);
                }

                collector = new FilteredElementCollector(hostDoc);
                var tTypes        = collector.OfClass(typeof(ElementType)).ToElements().Cast <ElementType>().ToList();
                var tElementTypes = from type in tTypes where null != type.Category select type;
                tElementTypes = from type in tElementTypes where selectedLink.Categories.ContainsKey(type.Category.Id) select type;
                foreach (var eType in tElementTypes)
                {
                    var eTypeInfo = new ElementTypeInfo(eType);
                    targetTypesInfo.Add(eTypeInfo);
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show("Failed to collect family symbols.\n" + ex.Message, "Collect Family Symbols", MessageBoxButton.OK, MessageBoxImage.Warning);
            }
        }
Ejemplo n.º 3
0
        public LinkedFamilyInfo(ElementId linkInstanceId, ElementTypeInfo sourceType, ElementTypeInfo targetType)
        {
            SourceLinkInstanceId = linkInstanceId;
            SourceTypeId         = sourceType.Id;
            TargetTypeId         = targetType.Id;

            CategoryName     = sourceType.CategoryName;
            SourceFamilyName = sourceType.FamilyName;
            SourceTypeName   = sourceType.Name;
            TargetFamilyName = targetType.FamilyName;
            TargetTypeName   = targetType.Name;
        }
Ejemplo n.º 4
0
        private void CollectFamilyMaps()
        {
            try
            {
                var hostDoc     = Instance.Document;
                var categoryIds = Categories.Keys.ToList();
                foreach (var catId in categoryIds)
                {
                    var collector = new FilteredElementCollector(hostDoc);
                    var elements  = collector.OfCategoryId(catId).WhereElementIsElementType().ToElements().ToList();
                    foreach (var element in elements)
                    {
                        var elementType = element as ElementType;
                        if (null != elementType)
                        {
                            var familyInfo = MoverDataStorageUtil.GetLinkedFamilyInfo(elementType);
                            if (null != familyInfo)
                            {
                                if (familyInfo.SourceLinkInstanceId != InstanceId)
                                {
                                    continue;
                                }
                                if (element.Id != familyInfo.TargetTypeId)
                                {
                                    continue;
                                }

                                var sourceType = LinkedDocument.GetElement(familyInfo.SourceTypeId) as ElementType;
                                if (null != sourceType)
                                {
                                    var sourceTypeInfo = new ElementTypeInfo(sourceType);
                                    var targetTypeInfo = new ElementTypeInfo(elementType);

                                    familyInfo = new LinkedFamilyInfo(familyInfo.SourceLinkInstanceId, sourceTypeInfo, targetTypeInfo);
                                    if (!LinkedFamilies.ContainsKey(familyInfo.TargetTypeId))
                                    {
                                        LinkedFamilies.Add(familyInfo.TargetTypeId, familyInfo);
                                    }
                                }
                            }
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show("Failed to collect family maps.\n" + ex.Message, "Collect Family Maps", MessageBoxButton.OK, MessageBoxImage.Warning);
            }
        }
Ejemplo n.º 5
0
        private bool PickMappingElements(out Element sourceElement /*in link*/, out Element targetElement /*in host*/)
        {
            var picked = false;

            sourceElement = null;
            targetElement = null;
            using (var trans = new Transaction(CurrentDocument))
            {
                trans.Start("Pick Mapping Elements");
                try
                {
                    var selection = m_app.ActiveUIDocument.Selection;
                    var reference = PickLinkedElement();
                    if (null != reference)
                    {
                        var linkedInstanceId = reference.ElementId;
                        if (LinkInstances.ContainsKey(linkedInstanceId) && reference.LinkedElementId != ElementId.InvalidElementId)
                        {
                            var lip       = LinkInstances[linkedInstanceId];
                            var linkedDoc = lip.LinkedDocument;

                            var linkedElement = linkedDoc.GetElement(reference.LinkedElementId); //element in linked model
                            if (null != linkedElement)
                            {
                                if (null != linkedElement.Category)
                                {
                                    var categoryId             = linkedElement.Category.Id;
                                    var categoryName           = linkedElement.Category.Name;
                                    ISelectionFilter selFilter = new TargetElementSelectionFilter(categoryId);
                                    var secondReference        = selection.PickObject(ObjectType.Element, "Pick a target item in the host model. The required category should be " + categoryName);
                                    if (null != secondReference)
                                    {
                                        var eId     = secondReference.ElementId;
                                        var element = CurrentDocument.GetElement(eId);
                                        if (null != element)
                                        {
                                            ElementTypeInfo sourceTypeInfo = null;
                                            var             sourceTypeId   = linkedElement.GetTypeId();
                                            var             sourceType     = linkedDoc.GetElement(sourceTypeId) as ElementType;
                                            if (null != sourceType)
                                            {
                                                sourceTypeInfo = new ElementTypeInfo(sourceType);
                                            }

                                            ElementTypeInfo targetTypeInfo = null;
                                            var             targetTypeId   = element.GetTypeId();
                                            var             targetType     = CurrentDocument.GetElement(targetTypeId) as ElementType;
                                            if (null != targetType)
                                            {
                                                targetTypeInfo = new ElementTypeInfo(targetType);
                                            }

                                            if (null != sourceTypeInfo && null != targetType)
                                            {
                                                sourceElement = linkedElement;
                                                targetElement = element;
                                                picked        = true;
                                            }
                                            else
                                            {
                                                var strBuilder = new StringBuilder();
                                                strBuilder.AppendLine("Source Family Name: " + sourceTypeInfo.FamilyName + ", Source Type Name: " + sourceTypeInfo.Name);
                                                strBuilder.AppendLine("Target Family Name: " + targetTypeInfo.FamilyName + ", Target Type Name: " + targetTypeInfo.Name);
                                                strBuilder.AppendLine("");
                                                strBuilder.AppendLine("Would you like to proceed with creating a map?");
                                                var result = MessageBox.Show(strBuilder.ToString(), "Mismatch Name", MessageBoxButton.YesNo, MessageBoxImage.Question);
                                                if (result == MessageBoxResult.Yes)
                                                {
                                                    sourceElement = linkedElement;
                                                    targetElement = element;
                                                    picked        = true;
                                                }
                                                else
                                                {
                                                    picked = false;
                                                }
                                            }
                                        }
                                    }
                                }
                            }
                        }
                    }

                    if (picked && null != sourceElement && null != targetElement)
                    {
                        var linkInfo = new LinkedElementInfo(LinkType.ByMap, sourceElement, targetElement, selectedLink.InstanceId, selectedLink.TransformValue);
                        if (selectedLink.LinkedElements.ContainsKey(linkInfo.LinkedElementId))
                        {
                            selectedLink.LinkedElements.Remove(linkInfo.LinkedElementId);
                        }
                        selectedLink.LinkedElements.Add(linkInfo.LinkedElementId, linkInfo);

                        var updated = MoverDataStorageUtil.UpdateLinkedElementInfo(linkInfo, targetElement);
                    }

                    trans.Commit();
                }
                catch (Exception ex)
                {
                    trans.RollBack();
                    MessageBox.Show("Failed to pick mapping elements.\n" + ex.Message, "Pick Mapping Elements", MessageBoxButton.OK, MessageBoxImage.Warning);
                }
            }
            return(picked);
        }