以下设置:我有一个带有两个视口的应用程序。在主视口上选择元素时,模型几何图形的副本应该在第二个视口中放大显示。
我上传了一些视觉辅助的屏幕截图:-) http://imgur.com/ILG8Ylk
我对此(除其他外)的看法是使用 ZoomExtents 方法:
主视图模型.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);
}
}
我想这两个重载都应该很好地适应绑定模型的场景,但我总是得到一个非常缩小的视图,并且大多数模型不在视口中居中。
我试图通过将模型转换为原点并应用缩放力来破解解决方案,结果更好但仍然有点。
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() 方法对我不起作用吗?如果没有,也许有更复杂的 hack xD 的建议。
我是初级开发人员,所以我愿意接受任何改进意见,谢谢。