Beispiel #1
0
        /// <summary>
        /// Identifies if the host element can export when exporting parts.
        /// 1. If host element has non merged parts (>0), it can be export no matter if it has merged parts or not, and return true.
        /// 2. If host element has merged parts
        ///    - If the merged part is the right category and not export yet, return true.
        ///    - If the merged part is the right category but has been exported by other host, return false.
        ///    - If the merged part is not the right category, should not export and return false.
        /// </summary>
        /// <param name="hostElement">The host element having parts.</param>
        /// <param name="levelId">The level the part would export.</param>
        /// <Param name="IsSplit">The bool flag identifies if the host element is split by story.</Param>
        /// <returns>True if the element can export, false otherwise.</returns>
        public static bool CanExportElementInPartExport(Element hostElement, ElementId levelId, bool IsSplit)
        {
            List <ElementId> associatedPartsList = PartUtils.GetAssociatedParts(hostElement.Document, hostElement.Id, false, true).ToList();

            foreach (ElementId partId in associatedPartsList)
            {
                Part part = hostElement.Document.GetElement(partId) as Part;
                if (PartUtils.IsMergedPart(part))
                {
                    if (part.OriginalCategoryId == hostElement.Category.Id)
                    {
                        if (IsSplit)
                        {
                            if (!ExporterCacheManager.PartExportedCache.HasExported(partId, levelId))
                            {
                                // has merged split part and not export yet.
                                return(true);
                            }
                        }
                        else if (!ExporterCacheManager.PartExportedCache.HasRegistered(partId))
                        {
                            // has merged part and not export yet.
                            return(true);
                        }
                    }
                }
                else
                {
                    return(true);
                }
            }

            // has no merged parts or other parts or merged parts have been exported.
            return(false);
        }
Beispiel #2
0
        public void Stream(Type type)
        {
            var part = _elem as Part;

            if (type == typeof(Element) && _elem is Element element)
            {
                _data.Add(new MemberSeparatorWithOffset(nameof(PartUtils)));
                _data.Add(new Bool(nameof(PartUtils.AreElementsValidForCreateParts), PartUtils.AreElementsValidForCreateParts(element.Document, new[] { element.Id })));
                _data.Add(new Object(nameof(PartUtils.GetAssociatedPartMaker), PartUtils.GetAssociatedPartMaker(element.Document, element.Id)));
                _data.Add(new Bool(nameof(PartUtils.HasAssociatedParts), PartUtils.HasAssociatedParts(element.Document, element.Id)));
                _data.Add(new Bool(nameof(PartUtils.IsValidForCreateParts), PartUtils.IsValidForCreateParts(element.Document, new LinkElementId(element.Id))));
            }

            if (type == typeof(Part) && part != null)
            {
                _data.Add(new MemberSeparatorWithOffset(nameof(PartUtils)));
                _data.Add(new Bool(nameof(PartUtils.ArePartsValidForDivide), PartUtils.ArePartsValidForDivide(part.Document, new[] { part.Id })));
                _data.Add(new Bool(nameof(PartUtils.ArePartsValidForMerge), PartUtils.ArePartsValidForMerge(part.Document, new[] { part.Id })));
                _data.Add(new Int(nameof(PartUtils.GetChainLengthToOriginal), PartUtils.GetChainLengthToOriginal(part)));
                var isMergedPart = PartUtils.IsMergedPart(part);
                _data.Add(new Enumerable(nameof(PartUtils.GetMergedParts), isMergedPart ? PartUtils.GetMergedParts(part) : Array.Empty <ElementId>(), part.Document));
                _data.Add(new Bool(nameof(PartUtils.IsMergedPart), isMergedPart));
                _data.Add(new Bool(nameof(PartUtils.IsPartDerivedFromLink), PartUtils.IsPartDerivedFromLink(part)));

                _data.Add(new MemberSeparatorWithOffset(nameof(Part)));
                _data.Add(new String(nameof(Part.OriginalCategoryId), ((BuiltInCategory)part.OriginalCategoryId.IntegerValue).ToString()));

                var sourceElementIds = part.GetSourceElementIds().Where(e => e.HostElementId != ElementId.InvalidElementId).Select(e => e.HostElementId).ToList();
                _data.Add(new Enumerable(nameof(Part.GetSourceElementIds), sourceElementIds, part.Document));

                var sourceCategoryIds = part.GetSourceElementOriginalCategoryIds().Select(e => (BuiltInCategory)e.IntegerValue).ToList();
                _data.Add(new EnumerableAsString(nameof(Part.GetSourceElementOriginalCategoryIds), sourceCategoryIds));
            }
        }