다음 설정 : 두 개의 뷰포트가있는 응용 프로그램이 있습니다. 기본 뷰포트에서 요소를 선택하면 모델 형상의 복사본이 두 번째 뷰포트에 확대 표시됩니다. helix-toolkit sharpdx 뷰포트에서 모델을 확대/축소하는 방법은 무엇입니까?
나는 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에 대한 더 복잡한 해킹을 제안 할 수 있습니다.
저는 중학교 개발자이므로 개선을 위해 의견을 보내 주셔서 감사합니다.
이미 사용 범위를 계산 했으므로 \t ViewportExtensions.ZoomExtents (myViewport, bounds, 200) – SigiN
안녕하세요. SigiN 님, 이미 시도했지만 확장이 여전히 엉망입니다. 방금 다시 확인했습니다. 그러나 디버깅하는 동안 경계의 최소 및 최대 값이 매우 이상하다는 사실을 확인했습니다. 각 쌍의 한 값 (최소 <-> 최대 값)은 항상 0이고 다른 하나는 양수 또는 음수 값입니다. 경계가 글로벌 차원의 좌표계가 아닌 로컬 차원 만 반환 할 수 있습니까? helixtoolkit 샘플 파일에서도이를 테스트해야합니다. – Daniel