绘制点鼠标点击
本文关键字:鼠标 绘制 | 更新日期: 2023-09-27 18:15:23
我使用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
在我们的项目中有相同的场景,并使用一个球体来直观地指示点。
<ht:SphereVisual3D Radius="0.75" Fill="Red" Center="{Binding ContactPoint}" />
ContactPoint是一个Point3D类型
这可能有帮助,但可能不是最有效的。试试以下命令:
这将创建一个可以在给定坐标下渲染的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#版本注意:如果helixviewport是在xaml中定义的,你需要一个对它的引用。将x:Name:"设置为适当的值。例如x:Name="helixViewPort"
ModelVisual3D visualizer = new ModelVisual3D();
visualizer.Content = sphereModel;
helixViewPort.Children.Add(visualizer);
<<p> XAML版本/em> 我假设你的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;
应该就这样了,希望能有所帮助,如果你找到更好的解决方案,请告诉我们。:)