我正在构建一个程序,以便在3D程序中查看和编辑橱柜/家具。
其中一个功能要求是让制作团队能够以2D方式查看橱柜的正面,并列出开口的大小以便于查看。我正在计算开口的大小,并添加一个该大小的矩形。目标是向显示开口大小的白色矩形添加文本,以便他们可以构建适合开口大小的项目。
我能够得到一个抽屉柜上的开口,见下图。
对于像下面这样的更复杂的问题,对我来说有点困难。
以下是棕色零件的属性:
public double X { get; set; }
public double Y { get; set; }
public double Width { get; set; }
public double Height { get; set; }
我的XAML很简单,只需将所有矩形添加到画布上,然后使用X,Y定位。
我的代码有点混乱,但它在下面。
//Filter list of parts to get the frame parts
int Counter = 0;
var frameParts = getFrameParts.Where(p => p.CatalogPartID == 1015 || p.CatalogPartID == 1016 || p.CatalogPartID == 3025).OrderBy(p => p.CatalogPartID).OrderBy(p => p.Y).ToList();
MoFacePart previousFrameRail = new MoFacePart();
MoFacePart previousMidFrameStile = new MoFacePart();
foreach (var part in frameParts)
{
var totalParts = getFrameParts.Where(p => p.CatalogPartID == 1016).ToList().Count();
// Adding Horizontal Spaces
if (part.CatalogPartID == 1016)
{
var newOpening = new MoFacePart { Width = part.Width, Height = (previousFrameRail.Y - previousFrameRail.Height) - (130-(part.Y + part.Height)), X = ((80 - (double)SelectedViewerProduct.Width) / 2) + part.X, Y = (previousFrameRail.Y - previousFrameRail.Height), Fill = new SolidColorBrush(System.Windows.Media.Color.FromRgb(255, 255, 255)) };
if (Counter > 0 && Counter < (totalParts))
{
FaceParts.Add(newOpening);
}
Counter++;
}
var newPart = new MoFacePart { Width = part.Width, Height = part.Height, X = ((80 - (double)SelectedViewerProduct.Width) / 2) + part.X, Y = 130 - part.Y, Fill = new SolidColorBrush(System.Windows.Media.Color.FromRgb(210, 180, 140)) };
FaceParts.Add(newPart);
if (part.CatalogPartID == 1016)
{
previousFrameRail = newPart;
}
}
考虑到这一切,有没有更好的方法来找出所有的空白?
我相信我能找到一个解决办法做我正在做的,但我觉得有一个更好的方法,我错过了它。
2条答案
按热度按时间euoag5mw1#
这看起来很有趣,所以这里有一个答案。我只是在画布上放了一些矩形来存放我的源数据。有关详细信息,请参见代码中的注解。它可能需要一些调整,我只是用XAML中看到的矩形测试了它。
截图:
XAML语言
编码:
js4nwp542#
而不是试图找出你的空白空间在哪里,只是假设你的结构广场内的每一个地方都是空白空间,并将Parant容器的
Background
设置为白色。假设你有一个包含所有块的父容器。如果没有,你应该考虑它。在wpf中,你也可以合并gemoetrys,看看这篇文章,它可能会有很大的帮助:http://www.blackwasp.co.uk/WPFCombinedGeometry.aspx