Example #1
0
        /// <summary>
        /// 生成标注
        /// </summary>
        public AnnotationBuildResult GenerateMultipleTagSymbol(Document document, IEnumerable <ElementId> selectedIds, MultiPipeAnnotationSettings setting, bool generateSingleOne)
        {
            if (selectedIds.Count() > AnnotationConstaints.PipeCountMax)
            {
                throw new NotImplementedException("暂不支持8根以上及管道的多管直径标注生成");
            }
            Document   = document;
            Collection = PAContext.GetCollection(Document);
            PipeAnnotationEntity entity = new PipeAnnotationEntity();

            entity.LocationType = setting.Location;
            View view = Document.ActiveView;
            AnnotationBuildResult result = GenerateMultipleTagSymbol(document, selectedIds, entity, setting);

            if (generateSingleOne && result == AnnotationBuildResult.Success)
            {
                Collection.Add(entity);
                Collection.Save(Document);
            }
            else if (result == AnnotationBuildResult.Success)
            {
                Collection.Add(entity);
            }
            return(result);
        }
Example #2
0
 public void FinishMultipleGenerate(Document document)
 {
     if (Collection == null)
     {
         Collection = PAContext.GetCollection(Document);
     }
     Collection.Save(Document);
 }
Example #3
0
        /// <summary>
        /// 多管一键标注
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void btn_AllMulltiplePipe_Click(object sender, EventArgs e)
        {
            if (!CheckInputsOfMultiple())
            {
                return;
            }
            if (!CheckInputsOfSingle())
            {
                return;
            }
            if (!CheckInputsOfCommon())
            {
                return;
            }

            //先删除后新增
            var lines = new FilteredElementCollector(Doc, View.Id)
                        .OfClass(typeof(FamilyInstance))
                        .WherePasses(new FamilyInstanceFilter(Doc, PAContext.GetMultipleTagSymbol(Doc).Id));
            var pipeTags = new FilteredElementCollector(Doc, View.Id)
                           .OfCategory(BuiltInCategory.OST_PipeTags)
                           .WhereElementIsNotElementType();

            if (pipeTags.Count() > 0 || lines.Count() > 0)
            {
                if (PMMessageBox.ShowQuestion("已存在标注,继续将重新生成所有管道标注", MessageBoxButtons.OKCancel) != DialogResult.OK)
                {
                    return;
                }
            }
            DelegateHelper.DelegateTransaction(Doc, "清空已有标注", () =>
            {
                //清空模型对象
                var lineIds = lines.Select(c => c.Id).ToList();
                foreach (var lineId in lineIds)
                {
                    Doc.Delete(lineId);
                }
                var pipeTagIds = pipeTags.Select(c => c.Id).ToList();
                foreach (var pipeTagId in pipeTagIds)
                {
                    Doc.Delete(pipeTagId);
                }
                //删除存储的关联
                var storageCollection = PAContext.GetCollection(Doc);
                storageCollection.RemoveAll(c => c.ViewId == View.Id.IntegerValue);
                storageCollection.Save(Doc);
                var creator = new AnnotationCreater();
                //生成处理
                var pipes = new FilteredElementCollector(Doc, View.Id)
                            .OfCategory(BuiltInCategory.OST_PipeCurves)
                            .WhereElementIsNotElementType();
                PipeCollection collection = new PipeCollection();
                foreach (Pipe pipe in pipes)
                {
                    if (CheckFilter(pipe))
                    {
                        collection.Add(pipe);
                    }
                }
                collection.SortBySkew();
                List <PipeGroup> slopedPipeGroups = null;
                try
                {
                    slopedPipeGroups = collection.GetPipeGroups(PipeAnnotationCmd.PipeAnnotationUIData.SettingForMultiple.LengthBetweenPipe_Inch);
                }
                catch (Exception ex)//特定情况暂时以提示处理,比如连续超过7个,比如
                {
                    TaskDialog.Show("警告", ex.Message);
                    return(false);
                }
                foreach (var pipeGroup in slopedPipeGroups)
                {
                    if (pipeGroup.Count > 1)
                    {
                        creator.GenerateMultipleTagSymbol(Doc, pipeGroup.Select(c => c.Id), PipeAnnotationCmd.PipeAnnotationUIData.SettingForMultiple, false);
                    }
                    else
                    {
                        var pipe            = Doc.GetElement(pipeGroup.First().Id) as Pipe;
                        var setting         = PipeAnnotationCmd.PipeAnnotationUIData.SettingForSingle;
                        var headerPoint     = setting.GetHeaderPoint(pipe);
                        var tag             = Doc.Create.NewTag(View, pipe, setting.NeedLeader, TagMode.TM_ADDBY_CATEGORY, TagOrientation.Horizontal, headerPoint);
                        tag.TagHeadPosition = headerPoint;
                    }
                }
                creator.FinishMultipleGenerate(Doc);
                return(true);
            });
        }