1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495 |
- /*-------------------------------------------------------------------------
- * 功能描述:JoinElement
- * 作者:xulisong
- * 创建时间: 2019/2/14 14:23:10
- * 版本号:v1.0
- * -------------------------------------------------------------------------*/
- using SAGA.RevitUtils;
- using System;
- using System.Collections.Generic;
- using System.Collections.ObjectModel;
- using System.Linq;
- using System.Text;
- using System.Threading.Tasks;
- using Autodesk.Revit.DB;
- namespace SAGA.GplotRelationComputerManage
- {
- /// <summary>
- /// 连接元素
- /// </summary>
- public class JoinElement
- {
- private List<JoinItem> m_JoinItems;
- public JoinElement(List<JoinItem> joinItems)
- {
- JoinItems = new ReadOnlyCollection<JoinItem>(m_JoinItems = new List<JoinItem>(joinItems));
- Element = JoinItems.FirstOrDefault()?.BaseElement;
- if (Element == null)
- throw new ArgumentNullException(nameof(Element));
- UsedRefIds = new List<int>();
- }
- public JoinElement(Element element)
- {
- Element = element;
- JoinItems = new ReadOnlyCollection<JoinItem>(m_JoinItems = JoinItem.GetJoinItems(element));
- UsedRefIds = new List<int>();
- }
- public JoinElement(Element element,List<JoinItem> joinItems)
- {
- Element = element;
- JoinItems = new ReadOnlyCollection<JoinItem>(m_JoinItems = joinItems);
- UsedRefIds = new List<int>();
- }
- #region 属性相关
- /// <summary>
- /// 关联基础元素
- /// </summary>
- public Element Element { get; private set; }
- /// <summary>
- /// 使用过的节点,存储joinItem的referenceItem id
- /// </summary>
- public List<int> UsedRefIds { get; private set; }
- /// <summary>
- /// 关联连接项
- /// </summary>
- public ReadOnlyCollection<JoinItem> JoinItems { get; private set; }
- #endregion
- #region 方法相关
- /// <summary>
- /// 获取当前可用连接数据
- /// </summary>
- /// <returns></returns>
- private JoinItem GetCurrentItem()
- {
- //null判断 在前边
- return this.JoinItems.FirstOrDefault(ji => ji.RefElement == null || UsedRefIds.All(i => i != ji.RefElement.Id.IntegerValue));
- }
- /// <summary>
- /// 获取节点,并移动到下一个获取位置
- /// </summary>
- /// <returns></returns>
- public JoinItem MoveNext()
- {
- var item = GetCurrentItem();
- if (item != null)
- {
- if (item.RefElement == null)
- {
- this.m_JoinItems.RemoveAll(i => i == item);
- }
- else
- {
- this.UsedRefIds.Add(item.RefElement.Id.IntegerValue);
- }
- }
- return item;
- }
- #endregion
- }
- }
|