Я создаю программу для просмотра и редактирования шкафов / мебели в 3D-программе.
Один запрос был сделан для производственной группы, чтобы иметь возможность просматривать лицо шкафа в 2D и иметь размер отверстий, перечисленных для удобства просмотра.Я выясняю размер моих отверстий и добавляю прямоугольник такого размера.Цель состоит в том, чтобы добавить текст в белый прямоугольник, отображающий размер проема, чтобы они могли создавать предметы, чтобы поместиться внутри него.
Мне удалось получить проемы на шкафу с выдвижными ящиками, см. Ниже..
Для более сложных, таких как приведенный ниже, мне немного сложнее.
Вот свойства, которые находятся на коричневых частях:
public double X {get;задавать;}
public double Y {get;задавать;}
public double Width {get;задавать;}
public double Height {get;задавать;}
Мой 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;
}
}
Учитывая все это, есть ли лучший способ выяснить все пустые места?
Я прошу прощения за код, вставленный в виде изображения.Я не смог заставить его правильно отформатировать, чтобы я мог оставлять сообщения.
Я уверен, что могу найти решение, которое делает то, что я делаю, но я чувствую, что есть лучший способ, и я скучаю по нему.
Спасибо!