2015-10-01 7 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.

ответ

0

У нас был такой же сценарий в нашем проекте, и мы использовали сферу для визуального указания точки.

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

Контактный тип Point3D.

+0

Просто мысль .. в первой строке вы получили точку с помощью мыши; используя это и один из вспомогательных методов из helix Point2DToPoint3D, вы можете получить Point3D, чтобы получить точку щелчка в 3d-пространстве и использовать ее для рисования точки. Или, наоборот, у viewport есть свойство 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)); 

Rendering Точку в окне проекции

Вам нужен компонент ModelVisual3D как дочерний HelixViewport. (Это может быть реализовано на C# или в XAML), это зависит от вас, плохо показывают оба пути.

C# версии

NB: Вы должны ссылка на helixviewport, если его определить в XAML. Установите x: Name: "" на что-то подходящее. например, х: Name = «helixViewPort»

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

XAML версия

Я предполагаю, что ваш код XAML имеет, по крайней мере, смотровое отверстие спиральную таким образом Вы должны будете добавить ребенка ModelVisual3D к спирали viewport, если их нет.

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

    </ModelVisual3D> 

</h:HelixViewport3D> 

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

Это должно сделать это, надеюсь, что это помогает, то сообщите нам, если вы найдете лучшее решение. :)

 Смежные вопросы

  • Нет связанных вопросов^_^