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