我在项目中使用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>
我将此点显示为红色点。
然后,我旋转屏幕,并想将世界点转换为显示点。在我的想法中,红点会随着锥体一起移动。
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; }
}
}
但是,红点与锥体分离。坐标转换有问题吗?
整个代码是:
[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)
然后,一切正常。