Следующая настройка: У меня есть приложение с двумя видовыми экранами. При выборе элемента в главном окне просмотра предполагается, что копия геометрии модели будет увеличена во втором окне просмотра.Как увеличить масштаб до модели в окне просмотра спирального инструментария с помощью спирали?
Я загрузил скриншот для некоторой визуальной помощи :-) http://imgur.com/ILG8Ylk
Мое мнение по этому вопросу (в том числе) является использование метода ZoomExtents:
MainViewModel.cs
public void SetDetailedModelGeometry(MeshGeometryModel3D geometry)
{
MyDetailedModel = new Element3DCollection();
MyModelViewportDetailed.Reset();
if (geometry != null)
{
var bounds = geometry.Bounds;
//var rec = new Rect3D(bounds.Minimum.X, bounds.Minimum.Y, bounds.Minimum.Z, bounds.Maximum.X,bounds.Maximum.Y,bounds.Maximum.Z);
this.MyDetailedModel.Add(geometry);
MyDetailedModel[0].Attach(MyModelViewportDetailed.RenderHost);
this.OnPropertyChanged("MyDetailedModel");
MyModelViewportDetailed.ZoomExtents();
//MyModelViewportDetailed.ZoomExtents(rec);
}
}
Я думаю, что обе перегрузки должны хорошо соответствовать сценарию привязанной модели, но я всегда получаю очень увеличенный вид, и большинство моделей не сосредоточены в окне просмотра.
Я попытался взломать решение, переведя модель в исходное положение и применяя силу увеличения, результат лучше, но все-таки вроде meh.
public void SetDetailedModelGeometry(MeshGeometryModel3D geometry)
{
MyDetailedModel = new Element3DCollection();
MyModelViewportDetailed.Reset();
if (geometry != null)
{
var bounds = geometry.Bounds;
var rec = new Rect3D(bounds.Minimum.X, bounds.Minimum.Y, bounds.Minimum.Z, bounds.Maximum.X, bounds.Maximum.Y, bounds.Maximum.Z);
// move model
var delta = new Point3D(Math.Abs(bounds.Maximum.X - bounds.Minimum.X), Math.Abs(bounds.Maximum.Y - bounds.Minimum.Y), Math.Abs(bounds.Maximum.Z - bounds.Minimum.Z));
var center = new Point3D(bounds.Minimum.X+delta.X, bounds.Minimum.Y+delta.Y, bounds.Minimum.Z+delta.Z);
TransformDetailed = new TranslateTransform3D(-center.X,-center.Y,-center.Z);
geometry.Transform = TransformDetailed;
// notice property change
this.MyDetailedModel.Add(geometry);
MyDetailedModel[0].Attach(MyModelViewportDetailed.RenderHost);
this.OnPropertyChanged("MyDetailedModel");
MyModelViewportDetailed.ZoomExtents();
MyModelViewportDetailed.CameraController.AddZoomForce(-1.0);
}
Есть ли у кого-нибудь подсказка, почему метод zoomExtends() не работает для меня? И если нет, возможно, есть предложения для более сложного взлома xD.
Я довольно молодой разработчик, поэтому я открыт для комментариев о улучшениях, спасибо.
Поскольку вы уже рассчитали границы, вы можете попытаться использовать \t ViewportExtensions.ZoomExtents (myViewport, bounds, 200) – SigiN
Привет, SigiN, я пробовал это уже, но расширение все еще испортилось, я только что проверил его снова. Однако во время отладки я заметил, что минимальные и максимальные значения границ довольно странные. Одно значение каждой пары (мин. <-> max) всегда равно 0, а другое - либо положительное, либо отрицательное значение. Возможно ли, что границы возвращают только локальную размерность, а не координаты в отношении глобальной системы координат? Необходимо протестировать это в файлах образцов helixtoolkit. – Daniel