029集——生成随机矩形、指定矩形范围内随机填充颜色半径不同的圆——vs CAD二次开发

 

 public static class 随机生成矩形类
 {
     /// <summary>
     /// 生成指定数量的随机矩形多段线
     /// </summary>
     /// <param name="count">生成数量</param>
     /// <param name="maxCoordinate">最大坐标范围(0-maxCoordinate)</param>
     /// <param name="minSize">最小矩形尺寸</param>
     /// <param name="maxSize">最大矩形尺寸</param>
     /// <returns>生成的矩形集合</returns>
     public static List<Polyline> 随机生成矩形(int count = 10000,
     double maxCoordinate = 1000.0, double maxSize = 50.0,double minSize = 10.0 )
     {
         List<Polyline> rectangles = new List<Polyline>(count);
         try
         {
             // 若最大值小于最小值,交换两者
             if (maxSize < minSize)
             {
                 double temp = maxSize;  // 临时变量存储maxSize原值
                 maxSize = minSize;      // 将minSize的值赋给maxSize
                 minSize = temp;         // 将原maxSize的值赋给minSize
             }
             Random rand = new Random();

             for (int i = 0; i < count; i++)
             {
                 // 生成随机中心点
                 Point3d center = new Point3d(
                     rand.NextDouble() * maxCoordinate,
                     rand.NextDouble() * maxCoordinate,
                     0);

                 // 生成随机尺寸(确保尺寸不小于最小值)
                 double width = Math.Max(
                     rand.NextDouble() * (maxSize - minSize) + minSize,
                     minSize);

                 double height = Math.Max(
                     rand.NextDouble() * (maxSize - minSize) + minSize,
                     minSize);

                 // 创建矩形多段线
                 Polyline rect = 创建矩形多段线(center, width, height);

                 // 设置随机颜色(1-255)
                 //rect.ColorIndex = rand.Next(1, 256);
                 rect.ColorIndex = 1;
                 rectangles.Add(rect);
             }

             return rectangles;
         }
         catch (System.Exception ex)
         {
             Z.ed.WriteMessage($"出现错误:{ex.ToString()}");
             return rectangles;
         }
        
     }
     /// <summary>
     /// 根据中心点和尺寸创建矩形多段线
     /// </summary>
     /// <param name="center">中心点</param>
     /// <param name="width">宽度</param>
     /// <param name="height">高度</param>
     /// <returns>闭合的矩形多段线</returns>
     private static Polyline 创建矩形多段线(Point3d center, double width, double height)
     {
         Polyline pline = new Polyline();

         // 计算四个角点坐标
         double halfW = width / 2;
         double halfH = height / 2;

         // 左下角
         pline.AddVertexAt(0, new Point2d(center.X - halfW, center.Y - halfH), 0, 0, 0);

         // 右下角
         pline.AddVertexAt(1, new Point2d(center.X + halfW, center.Y - halfH), 0, 0, 0);

         // 右上角
         pline.AddVertexAt(2, new Point2d(center.X + halfW, center.Y + halfH), 0, 0, 0);

         // 左上角
         pline.AddVertexAt(3, new Point2d(center.X - halfW, center.Y + halfH), 0, 0, 0);

         // 闭合多段线
         pline.Closed = true;

         return pline;
     }
 }

通过鼠标在cad中框选范围,再框选范围矩形框中随机画颜色、半径不同的圆,效果如下:

代码如下:

 public static class Class1
 {
    // private static PaletteSet pset;

     [CommandMethod("xx")]
     public static async void XX()
     {
         List<Circle> circles = Z.Drawcira(6);
         Z.Zooma();
        PromptPointResult ppr =  Z.ed.GetPoint("");
       var pt =  ppr.Value;
         PromptPointResult ppr1 = Z.ed.GetPoint("");
         var pt1 = ppr1.Value;
         double minx = Math.Min(pt1.X, pt.X);
         double miny = Math.Min(pt1.Y, pt.Y);
         double maxx = Math.Max(pt1.X, pt.X);
         double maxy = Math.Max(pt1.Y, pt.Y);
         int.TryParse(Math.Round(minx,0).ToString(),out int  a);
         int.TryParse(Math.Round(maxx, 0).ToString(), out int b);
         int.TryParse(Math.Round(miny, 0).ToString(), out int c);
         int.TryParse(Math.Round(maxy, 0).ToString(), out int d);
         ;
         Random random = new Random();
         List<Circle> cs = new List<Circle>();
         for (int i = 0; i < 5000; i++)
         {
             Circle circle = new Circle()
             {ColorIndex = random.Next(0,15),Radius = random.Next(20,100),
              Center  = new Point3d(random.Next( a, b), random.Next(c, d),0)  };
             cs.Add(circle);
         }
         Z.db.AddEntityToModeSpace(cs.ToArray());
        
        

     }




 }

生成2-10的double类型随机数:

        Random random = new Random();
        double randomDouble = 2 + (random.NextDouble() * (10 - 2));
        Console.WriteLine("生成的随机数是: " + randomDouble);

颜色的两种设置方法:

  cir.ColorIndex = rand.Next(255);
  cir.Color = Autodesk.AutoCAD.Colors.Color.FromRgb(255, 0, 0);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

山水CAD插件定制

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

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

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

打赏作者

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

抵扣说明:

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

余额充值