簡體   English   中英

如何在helix-toolkit sharpdx視口中縮放到模型?

[英]How to zoom to a model in a helix-toolkit sharpdx viewport?

設置之后:我有一個帶有兩個視口的應用程序。 在主視口上選擇一個元素時,應該在第二個視口中放大顯示模型幾何圖形的副本。

我上傳了一些視覺幫助的屏幕截圖:-) 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()方法對我不起作用嗎? 如果不是這樣,也許會對更復雜的hack xD提出建議。

我是一名初級開發人員,因此歡迎提出任何改進意見,謝謝。

您可以嘗試一些方法。 首先,確保視口上的IsZoomEnabled和ZoomExtentsWhenLoaded設置為true。 您可以自己計算邊界,對於很多MeshModels來說這將是一個小菜一碟,但僅在Geometry上就足夠了。

            var mx= (this.ModelGeometry[0] as MeshGeometryModel3D).Geometry.Positions.Min(item => item.X);
            var my = (this.ModelGeometry[0] as MeshGeometryModel3D).Geometry.Positions.Min(item => item.Y);
            var mz = (this.ModelGeometry[0] as MeshGeometryModel3D).Geometry.Positions.Min(item => item.Z);
            BoundingBox bounds = new BoundingBox(new Vector3(mx, my, mz), new Vector3(x, y, z));

另一個提示是,我的應用程序中存在一個小的計時問題,我正在使用10000 ++ MeshModels加載和附加步驟文件,並且在調用ZoomExtends之前,我不得不等待大約100毫秒。 您可以通過計時器或任務延遲來執行此操作。

我看到您正在使用PerspectiveCamera。 通過OrthotraphicCamera,您可以通過設置相機的width屬性來自行設置“縮放”。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM