028集——list瞬态( List<Entity> ents = listline.Cast<Entity>().ToList();//list类型强转)——vs CAD二次开发

 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;
            }

        }
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

山水CAD插件定制

你的鼓励是我创作最大的动力!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值