c#套料程序设计

网上的套料基本上都没有源码,开放的sdk都没有,这让很多想做套料,但是又成本太高了。

另外,大部分套料都是c++实现的,效率高,本人尝试用c#做一个套料程序,发现效率也不低,当然会比c++差点。

以下是程序截图

主界面,支持保存套料方案,打开方案等

 套料规划视图,支持余料隐藏,可设置出材率优先,余料优先

 

 

 

 

转载于:https://www.cnblogs.com/y114113/p/8386181.html

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
极致下门窗设计软件是中国顶级门窗设计软件,无公式,智能化,软件支持组合窗的设计,也完全屏蔽掉了同类产品发展的瓶颈,软件内置随便划分区域的功能,可以根据任何窗型位置需要划分区域,在区域内填充窗型。可以随意组合任何窗型,只有你想不到的,没有你做不到的。 极致下门窗设计软件功能: 软件集成了众多的报表功能,包括工程大样图、门窗生产表、工程材表等等表格,以供企业生产合计汇总使用。 软件支持任何厂家的任何系列的材,用户可以根据自己的情况,任意添加自己生产中使用的材。 软件支持外框设计,这点完全攻克了同类产品发展的瓶颈,目前同类产品采用图片 公式的做法,当碰到软件里没有工程需要的窗型时,往往束手无策,而《极致下》门窗软件可以随意的设置任何形式的外框,这一点解决了“万能外框”的难题。目前仅仅《极致下》门窗软件才能实现这一点。 软件集成玻璃优化功能,很多门窗厂家采用自己切割的模式,故此功能协助厂家排样玻璃尺寸,让玻璃的切割排样不再难算,几分钟即可得到最优秀的切割方案。 软件集成型材优化功能,自动根据工程需要的型材下尺寸,自动优化计算,给开师傅一个完美的切割方案,让生产不再废,大大提高门窗企业的生产力。 极致下门窗设计软件截图
矩形套算法,也称为矩形排样算法,是一种常见的计算机优化问题,其目的是在给定的有限区域内尽可能多地放置矩形,以最小化浪费的面积和数量。 下面是一个用 C# 实现的基于贪心算法的矩形套算法的示例: ```csharp using System; using System.Collections.Generic; using System.Linq; namespace RectanglePacking { class Rectangle { public int Width { get; set; } public int Height { get; set; } public int X { get; set; } public int Y { get; set; } } class RectanglePacking { static void Main(string[] args) { List<Rectangle> rectangles = new List<Rectangle>(); rectangles.Add(new Rectangle { Width = 200, Height = 100 }); rectangles.Add(new Rectangle { Width = 100, Height = 50 }); rectangles.Add(new Rectangle { Width = 150, Height = 75 }); rectangles.Add(new Rectangle { Width = 80, Height = 60 }); rectangles.Add(new Rectangle { Width = 120, Height = 90 }); int containerWidth = 500; int containerHeight = 300; List<Rectangle> packedRectangles = PackRectangles(rectangles, containerWidth, containerHeight); Console.WriteLine($"Total packed rectangles: {packedRectangles.Count}"); foreach (Rectangle rectangle in packedRectangles) { Console.WriteLine($"Rectangle: ({rectangle.X}, {rectangle.Y}) - ({rectangle.X + rectangle.Width}, {rectangle.Y + rectangle.Height})"); } } static List<Rectangle> PackRectangles(List<Rectangle> rectangles, int containerWidth, int containerHeight) { List<Rectangle> packedRectangles = new List<Rectangle>(); rectangles = rectangles.OrderByDescending(r => r.Width).ToList(); foreach (Rectangle rectangle in rectangles) { bool isPacked = false; for (int y = 0; y < containerHeight - rectangle.Height + 1; y++) { for (int x = 0; x < containerWidth - rectangle.Width + 1; x++) { rectangle.X = x; rectangle.Y = y; if (!IsOverlapping(rectangle, packedRectangles)) { packedRectangles.Add(rectangle); isPacked = true; break; } } if (isPacked) { break; } } } return packedRectangles; } static bool IsOverlapping(Rectangle rectangle, List<Rectangle> rectangles) { foreach (Rectangle r in rectangles) { if (rectangle.X + rectangle.Width > r.X && rectangle.X < r.X + r.Width && rectangle.Y + rectangle.Height > r.Y && rectangle.Y < r.Y + r.Height) { return true; } } return false; } } } ``` 在上面的示例中,我们定义了一个 `Rectangle` 类来表示矩形,其中包含了宽度、高度、X 坐标和 Y 坐标等属性。然后,我们实现了一个 `PackRectangles` 方法来套矩形,并返回套好的矩形列表。在这个方法中,我们采用了贪心算法的思想,将矩形按宽度从大到小排序,然后依次将每个矩形与已经套好的矩形进行比较,找到一个不与已经套好的矩形重叠的位置,并将该矩形放置在此位置上。如果找不到合适的位置,则跳过该矩形。最后,返回套好的矩形列表。 在上面的示例中,我们定义了一个简单的矩形列表,并且定义了一个大小为 500x300 的容器。然后,我们调用了 `PackRectangles` 方法,并将矩形列表和容器大小作为参数传入。最后,输出套好的矩形列表中每个矩形的位置和大小。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值