当前位置: 首页 > article >正文

040集——CAD中放烟花(CAD—C#二次开发入门)

 效果如下:

单一颜色的烟花:

渐变色的火花:

 

namespace AcTools
{
    public class HH
    {
        public static TransientManager tm = TransientManager.CurrentTransientManager;
        public static Random rand = new Random();
        public static Vector3D G = new Vector3D(0,-10,0);// - Vector3D. * 10;
        public static Document doc => Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument;
        public static Editor ed => doc.Editor;
        [CommandMethod ("show")]
        public static void demo()
        {
            火花 h = new 火花();
            var psr = Z.ed.GetPoint("");
            while (psr.Status == PromptStatus.OK)
            {
                
                //h.添加火点(new Point3d(500, -100, 0));
                h.添加火点(new Point3d( psr.Value.X +200,psr.Value .Y-20 ,0));
                h.添加火点(new Point3d(psr.Value.X - 200, psr.Value.Y+20, 0));
                h.添加火点(new Point3d(psr.Value.X + 400, psr.Value.Y - 20, 0));
                h.添加火点(new Point3d(psr.Value.X - 400, psr.Value.Y + 20, 0));
                psr = Z.ed.GetPoint("");
            }
        }
    }

   public class 火花:IDisposable
    { 
        Timer timer;
        List<火星>火星s=new List<火星> ();
        //int k = 0;
    public 火花()
    {
        timer = new Timer();
        火星s = new List<火星>();
        timer.Interval = 30;//相当于多久更新一下屏幕
        timer.Tick += 火星飞行事件;
        timer.Start();
    }
    public void 添加火点(Point3d pt)
    {
        int n = new Random().Next(26, 40);//烟花的个数
        var sudu = new Random().Next(16,27);//速度
        int ys = HH.rand.Next(0, 5);//颜色
        Color cc;
        switch (ys)
        {
            case 0:cc  =Color.FromRgb(255,0,0); break;//红
            case 1: cc = Rainbow(0, 255, 0); break;//绿
            case 2: cc = Rainbow(255, 255, 0); break;//黄
            case 3: cc = Rainbow(255, 0, 255); break;//紫
            case 4: cc = Rainbow(255, 186, 0); break;//橙
            default: cc = Rainbow(0, 0, 255); break;//蓝
            }
        double 衰减速度 = HH.rand.NextDouble() * 0.05 + 0.95;
        for (int i = 0; i < n; i++)
        {
                var vt = new Vector3d(HH.rand.NextDouble() - 0.5, HH.rand.NextDouble() - 0.5, HH.rand.NextDouble() - 0.5);
            火星s.Add(new 火星(pt, vt, sudu, cc, 衰减速度));
        }
        
    }
    public static Color  Rainbow(int k, int min, int max)
    {
    

            return Color.FromRgb((byte)k, (byte)min, (byte)max);
        }
    private  void 火星飞行事件(object sender, EventArgs e)
    {
        foreach (var h in 火星s)
        {
            h.运动();
        }
        List<Circle> cirs = new List<Circle>();
            for (int i = 火星s.Count-1; i  >=0   ; i--)
            {
                if (火星s[i].灭)
                {
                    cirs.AddRange(火星s[i].cirs);
                    火星s.RemoveAt(i);
                }
            }
            foreach (var c  in cirs)
            {
                HH.tm.EraseTransient(c, new IntegerCollection());
                HH.ed.UpdateScreen();
                System.Windows .Forms.Application.DoEvents();
            }
        }
    public void Dispose()
    {
        timer.Tick -= 火星飞行事件;
        火星s.Clear();
        timer.Stop(); 
        timer.Dispose();
    }
   }
    public delegate Autodesk.AutoCAD.Colors.Color 颜色(double k,double min,double max);
    class 火星
    {
        Random rand = new Random();
        public bool 灭;
        public List<Circle>cirs = new List<Circle>();
        Circle cir;
        int k;
        double 速度;
        int 总数量;
        Color 颜色渐变;
        double 衰减速度;
        Vector3D 方向;
 *
///
///
///

        public void 运动()
        {
            k++;
            var vt = 方向.GetNormal() * 速度;
            var g = new Vector3D(0, -10, 0);
            vt = vt + HH.G;
            cir.Center = cir.Center + vt;
            Circle cir1 = cir.Clone() as Circle;
            cir1.Color = 颜色渐变;
            cirs.Add(cir1);
            HH.tm.AddTransient(cir1, TransientDrawingMode.Main, 0, new IntegerCollection());
            速度 *= 衰减速度;
            if (k > 总数量 || 速度 < 0.1)
            {
                灭 = true;
            }
        }

    }
}

finally


http://www.kler.cn/a/422030.html

相关文章:

  • 【C++】—— set 与 multiset
  • 互联网 Java 面试八股文汇总(2025 最新整理)
  • PLC协议
  • 微服务搭建----springboot接入Nacos2.x
  • SpringMVC:参数传递之日期类型参数传递
  • Python办公——openpyxl处理Excel每个sheet每行 修改为软雅黑9号剧中+边框线
  • qt6 oob
  • 微服务即时通讯系统的实现(服务端)----(3)
  • 基于Python 哔哩哔哩网站热门视频数据采集与可视化分析设计与实现,有聚类有网络语义研究
  • 【数据集】细胞数据集:肿瘤-胎儿重编程的内皮细胞驱动肝细胞癌中的免疫抑制性巨噬细胞(Sharma等人)
  • helm部署golang服务
  • numpy 计算两组向量是否相等,以及在一定误差内相等
  • QT - (qrc->binary)
  • 人工智能学习框架:构建AI应用的基石
  • Rust面向对象特性
  • 第三方Express 路由和路由中间件
  • 攻防世界-fileclude-文件包含
  • springboot 项目 层级架构
  • aisuite - 一个接口调用多个大模型
  • 大语言模型在研究领域的应用---下
  • MySQL、Oracle、SQL Server 和 PostgreSQL 的分页查询
  • Dxf2Map:跨平台 BIM、GIS、CAD 和 AR 应用程序
  • 故障诊断 | Transformer-GRU-Adaboost组合模型的故障诊断(Matlab)
  • 语言模型测试系列【11】
  • Springfox迁移到 Springdoc OpenAPI 3
  • 基于智能语音交互的智能呼叫中心工作机制