list瞬态
List<Entity> ents = listline.Cast<Entity>().ToList();//list类型强转
public class Flash
{
public FlashEntity flash = null;
public Entity ent = null;
public List<FlashEntity> listflash = new List<FlashEntity>();
public List<Entity> listent = new List<Entity>();
public Flash(Entity ent)
{
this.ent = ent;
flash = new FlashEntity(ent);
Transient.CapturedDrawable = flash;
TransientManager.CurrentTransientManager.AddTransient(flash,
TransientDrawingMode.Main, 128, new IntegerCollection());
}
public Flash(List<Entity> ents)
{
for (int i = 0; i < ents.Count; i++)
{
this.listent.Add(ents[i]);
listflash.Add(new FlashEntity(listent[i]));
Transient.CapturedDrawable = listflash[i];
TransientManager.CurrentTransientManager.AddTransient(listflash[i],
TransientDrawingMode.Main, 128, new IntegerCollection());
}
}
public void FlashUpdate(Entity ent)
{
if (ent == null)
{
this.ent = ent;
flash = new FlashEntity(ent);
Transient.CapturedDrawable = flash;
TransientManager.CurrentTransientManager.AddTransient(flash,
TransientDrawingMode.Main, 128, new IntegerCollection());
}
else
{
this.ent = ent;
flash._ent = ent;
TransientManager.CurrentTransientManager.UpdateTransient(flash, new IntegerCollection());
}
}
public void FlashUpdate(List<Entity> ents)
{
if (ents == null)
{
this.listent = ents;
foreach (var item in ents)
{
flash._ents.Add(item);
}
foreach (var item in listflash)
{
Transient.CapturedDrawable = item;
TransientManager.CurrentTransientManager.AddTransient(item,
TransientDrawingMode.Main, 128, new IntegerCollection());
}
}
else
{
this.listent = ents;
for (int i = 0; i < ents.Count; i++)
{
listflash[i]._ent = ents[i];
}
foreach (var item in listflash)
{
TransientManager.CurrentTransientManager.UpdateTransient(item, new IntegerCollection());
}
}
}
public void FlashErase()
{
if (flash == null) return;
flash._ent = null;
TransientManager.CurrentTransientManager.EraseTransient(flash, new IntegerCollection());
flash = null;
}
public void FlashlistErase()
{
if (listflash == null) return;
foreach (var item in listflash)
{
item._ent = null;
}
foreach (var item in listflash)
{
TransientManager.CurrentTransientManager.EraseTransient(item, new IntegerCollection());
}
listflash = null;
}
}
public class FlashEntity : Transient
{
public Entity _ent;
public List<Entity> _ents = new List<Entity>();
public FlashEntity(Entity ent)
{
_ent = ent;
}
public FlashEntity(List<Entity> ents)
{
foreach (var item in ents)
{
_ents.Add(item);
}
}
protected override int SubSetAttributes(DrawableTraits traits)
{
traits.FillType = FillType.FillAlways;
return (int)DrawableAttributes.IsAnEntity;
}
protected override void SubViewportDraw(ViewportDraw vd)
{
vd.Geometry.Draw(_ent);
foreach (Entity ent in _ents)
{
vd.Geometry.Draw(ent);
}
}
protected override bool SubWorldDraw(WorldDraw wd)
{
return false;
}
}
namespace AcTools
{
public class Class1
{
[CommandMethod("xx")]
public void XX()
{
try
{
Z.Drawcir(6);
Z.Zoom();
Random random = new Random();
List<Line> listline = new List<Line>();
for (int i = 0; i < 30; i++)//创建50个圆并加入flash列表中
{
Line line = new Line() { StartPoint = (new Point3d(10, 10 * i, 0)), EndPoint = new Point3d(20, 10 * i, 0), ColorIndex = i + 1 };
listline.Add(line);
}
List<Entity> ents = listline.Cast<Entity>().ToList();//list类型强转
Flash _flash = new Flash(ents);//定义一个瞬态flash变量
//Z.Zoom();
Z.ed.GetPoint("");
//20次esc键,观看动态效果
for (int j = 0; j < 3; j++)
{ //瞬态中50个圆更新属性
for (int i = 0; i < 30; i++)
{
ents[i].ColorIndex = random.Next(0, 12);
}
_flash.FlashUpdate(ents);
Z.ed.GetPoint("");
}
_flash.FlashlistErase();//删除瞬态
}
catch (System.Exception)
{
throw;
}
}
}
}