2015-10-01 271 views
0

我正在使用HelixToolkit來查看和交互STL文件。我需要在窗口上繪製或標記用戶點擊的點。我有座標,我知道在哪裏繪製點,但我不知道如何繪製它,有人可以幫助我嗎?我張貼一些代碼來解釋一下我現在所擁有的:繪圖點鼠標點擊

private void vierport3d_MouseRightClick(object sender, MouseButtonEventArgs e) 
    { 
     Point mousePos = e.GetPosition(viewPort3d); 
     PointHitTestParameters hitParams = new PointHitTestParameters(mousePos); 
     VisualTreeHelper.HitTest(viewPort3d, null, ResultCallback, hitParams); 
    } 

public HitTestResultBehavior ResultCallback(HitTestResult result) 
    { 
     RayHitTestResult rayResult = result as RayHitTestResult; 
     if (rayResult != null) 
     { 
      RayMeshGeometry3DHitTestResult rayMeshResult = rayResult as RayMeshGeometry3DHitTestResult; 

      //HERE I HAVE THE LOCATION TO DRAW 
      MessageBox.Show(rayMeshResult.PointHit.X + " " + rayMeshResult.PointHit.Y + " " + rayMeshResult.PointHit.Z); 

      if (rayMeshResult != null) 
      { 
       // I THINK I HAVE TO DRAW THE POINT HERE 
      } 
     } 

     return HitTestResultBehavior.Continue; 
    } 

PD:我秀上的Viewport3D STL的。

回答

0

我們在我們的項目中使用了相同的場景,並使用球體直觀地指出了這一點。

<ht:SphereVisual3D Radius="0.75" Fill="Red" Center="{Binding ContactPoint}" /> 

ContactPoint是一個Point3D類型。

+0

只是一個想法..第一行是你得到一個點使用鼠標點擊;使用螺旋Point2DToPoint3D的輔助方法,你可以得到一個Point3D來獲取三維空間中的點擊點並使用它來繪製點。或者換句話說,視口具有'CursorOnelementPosition'屬性,該屬性給出stl模型上的點擊點。 – Nit

0

這可能有幫助,但它可能不是最有效的。 請嘗試以下操作:

這將創建一個可在給定座標處呈現的3D球體。

var sphereSize = 0.025; 
/* keep these values low, the higher the values the more detailed the sphere which may impact your rendering perfomance.*/ 
var phi = 12; 
var theta = 12; 

MeshBuilder meshBuilder = new MeshBuilder(); 

將您的x,y,z傳遞給第一個參數。即點擊3D位置。

meshBuilder.AddSphere(new Point3D(x,y,z), sphereSize , theta, phi); 

GeometryModel3D sphereModel = new GeometryModel3D(meshBuilder.ToMesh(),MaterialHelper.CreateMaterial(Brushes.Green,null,null,1,0)); 

渲染點在視口中

您將需要一個ModelVisual3D組件作爲HelixViewport的孩子。 (這可以在C#或XAML中實現)它由你決定,不適用於雙向顯示。

C#版本

注意:您需要如果在XAML定義到helixviewport參考。將x:Name:「」設置爲適當的值。例如,x:名稱=「helixViewPort」

ModelVisual3D visualizer = new ModelVisual3D(); 
visualizer.Content = sphereModel; 
helixViewPort.Children.Add(visualizer); 

XAML版本

我會假設你的XAML代碼具有至少一個螺旋視口,所以你必須要一個孩子ModelVisual3D添加到螺旋如果沒有的話。

<h:HelixViewport3D x:Name="HelixPlotViewPort" > 
    <h:DefaultLights/> 
    <ModelVisual3D x:Name="Visualizer"> 

    </ModelVisual3D> 

</h:HelixViewport3D> 

//Then in C# add the following 
Visualizer.Content = sphereModel; 

應該這樣做,希望有幫助,怎麼做,如果你找到一個更好的解決辦法通知我們。 :)