/// <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); }
public void FinishMultipleGenerate(Document document) { if (Collection == null) { Collection = PAContext.GetCollection(Document); } Collection.Save(Document); }
/// <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); }); }