У меня есть прямоугольный параллелепипед, размеры которого импортированы из XML, поэтому мне нужно быть уверенным, что независимо от размера модели камера всегда может видеть все это. Это для предварительного просмотра. Я, вероятно, сделаю заголовок сверху, показывающий масштаб для ясности.
Я думаю, мне нужна какая-то функция, которая скажет мне, соответствует ли ModelVisual3D границам FieldOfView
камеры или, возможно, самому ViewPort3D.
Пока у меня есть статический обратный вызов (свойства измерения равны DependencyProperty
s), когда свойства измерения изменяются, как показано ниже. На данный момент это довольно грубо, но вы поняли, на что я смотрю. Закомментированный раздел примерно показывает, какую логику я ищу
private static void OnCubeDimensionsChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
if (!valueSemaphore)
{
//while(mainModel.WillClip(mainCamera))
//{
// mainCamera.FieldOfView--;
//}
valueSemaphore = true;
double propertyValue = 0.0;
Product3D p = d as Product3D;
switch (e.Property.Name)
{
case "CubeHeight":
propertyValue = (double.Parse(e.NewValue.ToString()) / 100) * 8;
p.CubeHeight = propertyValue;
break;
case "CubeWidth":
propertyValue = (double.Parse(e.NewValue.ToString()) / 100) * 5.3;
p.CubeWidth = propertyValue;
break;
case "CubeDepth":
propertyValue = (double.Parse(e.NewValue.ToString()) / 100) * 2.6;
p.CubeDepth = propertyValue;
break;
}
valueSemaphore = false;
}
}
Если кто-нибудь знает, что должно быть там, где находится закомментированный раздел, я был бы бесконечно благодарен.
Заранее спасибо.