Petzold.Media3D.ViewportInfo
을 사용하여 기하학적 계산을 수행하는 유일한 목적으로 Viewport3D
이 필요합니다. 나는 그것을 Window
에 넣지 않거나 그렇지 않으면 렌더링하지 않는 것을 선호합니다.WPF 컨트롤이 렌더링되지 않은 경우 ActualWidth 및 ActualHeight를 가질 수 있습니까?
나는 Viewport3D
를 인스턴스화하고 다음 C# 방법을 사용하여 몇 가지 속성을 설정하여이를 달성하려고 해요 :, 내가 마우스의 위치를 변환하려면이 뷰포트를 사용하려고 시도하고있어 나중에
private Viewport3D CreateViewport(MainSettings settings)
{
var cameraPosition = new Point3D(0, 0, settings.CameraHeight);
var cameraLookDirection = new Vector3D(0, 0, -1);
var cameraUpDirection = new Vector3D(0, 1, 0);
var camera = new PerspectiveCamera
{
Position = cameraPosition,
LookDirection = cameraLookDirection,
UpDirection = cameraUpDirection
};
var viewport = new Viewport3D
{
Camera = camera,
Width = settings.ViewportWidth,
Height = settings.ViewportHeight
};
return viewport;
}
을 이 방법을 사용하는 3D 위치 :
public Point3D? Point2dToPoint3d(Point point)
{
var range = new LineRange();
var isValid = ViewportInfo.Point2DtoPoint3D(_viewport, point, out range);
if (isValid)
return range.PointFromZ(0);
else
return null;
}
불행히도, 작동하지 않습니다. 그 이유는 뷰포트의 ActualWidth
과 ActualHeight
이 모두 0이기 때문입니다 (그리고 이들은 읽기 전용 속성이므로 수동으로 설정할 수는 없습니다). (참고 : 정확히 동일한 메서드를 실제 렌더링 된 Viewport3D
으로 테스트 했으므로 문제가 내 변환기 메서드와 관련이 없다는 것을 알 수 있으므로 문제가 없습니다.
ActualWidth
을 할당하려면 어떻게해야합니까? Width
및 Height
설정을 기반으로 한 컨트롤의 ActualHeight
?
Left
및
Top
,에
HorizontalAlignment
및
VerticalAlignment
을 설정했는데, 나는 또한
MinWidth
와
MinHeight
로 엉망이 있지만, 이러한 속성 중 어느 것도
ActualWidth
또는
ActualHeight
상의 어떤 영향을 미치지 않았다.
ActualWidth
속성 MSDN 항목에서
매력처럼 작동합니다. – devuxer
멋지다. 다행이다. 또한 새로운 것을 배웠습니다. :) – gehho