VTK:有关坐标转换的问题:显示与世界

时间:2020-02-26 02:57:05

标签: python pyqt coordinates vtk

我在项目中使用VTK,遇到一个有关坐标转换的问题:从显示坐标到世界坐标。

首先,我显示一个圆锥体并将窗口大小设置为(500,500)。然后,我使用(250,250)显示点计算世界点。显示点(250,250)位于圆锥体中。

<div class="row">
    <div class="col-md-4">
        @using (Html.BeginForm("Index", "Home", FormMethod.Post))
        {
        @Html.TextArea("track") <input type="submit" value="Track"/>
        }
    </div>
</div>

我将此点显示为红色点。

enter image description here

然后,我旋转屏幕,并想将世界点转换为显示点。在我的想法中,红点会随着锥体一起移动。

   public class GetInvBalReq
    {
        public class GetData
        {
            public Header header { get; set; }
            public Body body { get; set; }
        }

        public class Header
        {
            public string Token { get; set; }
        }

        public class Body
        {
            public string WarehouseCode { get; set; }
            public string CompanyCode { get; set; }
        }
    }

但是,红点与锥体分离。坐标转换有问题吗?

enter image description here

整个代码是:

   [System.Web.Mvc.HttpPost]
        public ActionResult Index(string track)
        {

            UploadToBCSSoftSCM b = new UploadToBCSSoftSCM();
                string response = b.GetInvBal(track);
                var data = JsonConvert.DeserializeObject<Rootobject>(response);

            return View(data);
        }

更新: 最后,我知道我的代码出了什么问题。 在resizeEvent中,我通过以下方式获取世界点:

        picker = vtk.vtkPropPicker()
        picker.Pick(250, 250, 0, self.ren)
        if picker.GetActor():
            coordinate = vtk.vtkCoordinate()
            coordinate.SetCoordinateSystemToDisplay()
            coordinate.SetValue(250, 250, 0)
            position = coordinate.GetComputedWorldValue(self.ren)
            self.position = position

实际上,z不应为0。我们应该使用以下代码获取该点:

        coordinate = vtk.vtkCoordinate()
        coordinate.SetCoordinateSystemToWorld()
        point = self.position
        coordinate.SetValue(point[0], point[1], point[2])
        displayCoor = coordinate.GetComputedDisplayValue(self.ren)

然后,一切正常。

0 个答案:

没有答案