diff --git a/src/IFoxCAD.Cad/ExtensionMethod/JigExTransient.cs b/src/IFoxCAD.Cad/ExtensionMethod/JigExTransient.cs new file mode 100644 index 0000000000000000000000000000000000000000..ce767f2ebc67daa70079109db263e7ca504c9f8f --- /dev/null +++ b/src/IFoxCAD.Cad/ExtensionMethod/JigExTransient.cs @@ -0,0 +1,174 @@ +#if !ac2008 +namespace IFoxCAD.Cad; +public class JigExTransient : IDisposable, IEnumerable +{ + readonly HashSet _entities;//对象容器 + readonly IntegerCollection _integerCollection; + readonly TransientDrawingMode _drawingMode = TransientDrawingMode.DirectShortTerm;//默认绘图模式 + public HashSet Entities { get { return _entities; } } + /// + /// 默认构造函数 + /// + JigExTransient() + { + _entities = new(); + _integerCollection = new(); + } + + /// + /// 创建瞬态容器 + /// + /// 绘图模式 + /// 对象 + public JigExTransient(TransientDrawingMode tdm=TransientDrawingMode.DirectShortTerm) : this()=> _drawingMode = tdm; + + /// + /// 创建瞬态容器 + /// + /// 绘图模式 + /// 对象 + public JigExTransient(IEnumerable ents, + TransientDrawingMode tdm = TransientDrawingMode.DirectShortTerm) : this() + { + _drawingMode = tdm; + this.Add(ents); + } + void AddEnts(TransientDrawingMode tdm,IEnumerable ents) + { + var num = ents.Count(); + for (int i = 0; i < num; i++) + { + var ent = ents.ElementAt(i); + if (_entities.Contains(ent)) break; + _entities.Add(ent); + TransientManager.CurrentTransientManager.AddTransient(ent, tdm, 128, _integerCollection); + } + + } + /// + /// 加入瞬态容器 + /// + /// 对象 + public void Add(params Entity[] ents)=> AddEnts(_drawingMode, ents); + /// + /// 加入瞬态容器 + /// + /// 对象 + public void Add(IEnumerable ents) => AddEnts(_drawingMode, ents); + /// + /// 加入瞬态容器 + /// + /// 绘图模式 + /// 对象 + public void Add(TransientDrawingMode tdm, params Entity[] ents)=> AddEnts(tdm, ents); + /// 加入瞬态容器 + /// + /// 绘图模式 + /// 对象 + public void Add(TransientDrawingMode tdm, IEnumerable ents) => AddEnts(tdm, ents); + /// + /// 更新瞬态图元 + /// + /// 对象 + void UpdateEnt(Entity ent)=> TransientManager.CurrentTransientManager.UpdateTransient(ent, _integerCollection); + /// + /// 更新图元显示 + /// + /// 对象 + public void Update(params Entity[] ents) + { + foreach (var ent in ents) + { + if (!_entities.Contains(ent)) continue; + UpdateEnt(ent); + } + } + /// + /// 更新图元显示 + /// + /// 对象 + public void Update(IEnumerable ents) + { + foreach (var ent in ents) + { + if (!_entities.Contains(ent)) continue; + UpdateEnt(ent); + } + } + /// + /// 更新所有图元显示 + /// + public void Update() + { + foreach (var ent in _entities) + { + UpdateEnt(ent); + } + } + /// + /// 删除瞬态图元 + /// + /// 图元 + void EraseEnt(Entity ent)=> TransientManager.CurrentTransientManager.EraseTransient(ent, _integerCollection); + /// + /// 从容器中移除对象并取消显示 + /// + /// + public void Remove(params Entity[] ents) + { + foreach (var ent in ents) + { + if (!_entities.Contains(ent)) continue; + EraseEnt(ent); + _entities.Remove(ent); + } + } + /// + /// 从容器中移除对象并取消显示 + /// + /// + public void Remove(IEnumerable ents) + { + foreach (var ent in ents) + { + if (!_entities.Contains(ent)) continue; + EraseEnt(ent); + _entities.Remove(ent); + } + } + /// + /// 移除容器中某一类对象并取消显示 + /// + /// 类型 + public void Remove(TransientDrawingMode tdm) + { + TransientManager.CurrentTransientManager.EraseTransients(tdm, 128, _integerCollection); + _entities.Clear(); + } + /// + /// 清空容器和图纸上的图元显示 + /// + public void Clear() + { + foreach (var ent in _entities) + { + EraseEnt(ent); + } + _entities.Clear(); + } + /// + /// 销毁容器 + /// 为了让类可以using避免忘记Clear + /// + public void Dispose() => this.Clear(); + public IEnumerator GetEnumerator() + { + var a = ((IEnumerable)_entities).GetEnumerator(); + return a; + } + IEnumerator IEnumerable.GetEnumerator() + { + throw new NotImplementedException(); + } +} +#endif \ No newline at end of file