次のセットアップ: 2 つのビューポートを持つアプリケーションがあります。メイン ビューポートで要素を選択すると、モデル ジオメトリのコピーが 2 番目のビューポートに拡大表示されるはずです。
視覚補助用にスクリーンショットをアップロードしました :-) 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);
}
}
どちらのオーバーロードもシーンをバインドされたモデルにうまく適合させる必要があると思いますが、常に非常にズームアウトされたビューになり、ほとんどのモデルがビューポートの中央に配置されません。
モデルを原点に変換し、ズーム力を適用することで解決策をハックしようとしましたが、結果は良くなりましたが、それでもまあまあです。
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 の提案があるかもしれません。
私はかなりのジュニア開発者なので、改善のためのコメントをお待ちしております。ありがとうございます。