[英]Draw point where mouse clicked
我正在使用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:我在视口3d上显示了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#版本
注意:如果在xaml中定义了helixviewport,则需要引用。 将x:Name:“”设置为适当的值。 例如x:Name =“ 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;
如果您能找到更好的解决方案,那应该可以做到,希望能对您有所帮助。 :)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.