繁体   English   中英

鼠标单击的绘制点

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM