NavisworksTransport/PathClickToolPlugin.cs

97 lines
3.7 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

using System;
using Autodesk.Navisworks.Api;
using Autodesk.Navisworks.Api.Plugins;
namespace NavisworksTransport
{
/// <summary>
/// 自定义工具插件,用于获取精确的鼠标点击坐标
/// </summary>
[Plugin("PathClickTool", "NavisworksTransport")]
public class PathClickToolPlugin : ToolPlugin
{
/// <summary>
/// 插件构造函数
/// </summary>
public PathClickToolPlugin()
{
LogManager.WriteLog("[ToolPlugin] PathClickToolPlugin实例已创建");
}
/// <summary>
/// 点击事件,传递精确的点击坐标和对象
/// </summary>
public static event EventHandler<PickItemResult> MouseClicked;
/// <summary>
/// 获取插件的程序集路径(用于动态加载)
/// </summary>
public static string AssemblyPath
{
get
{
return System.Reflection.Assembly.GetExecutingAssembly().Location;
}
}
/// <summary>
/// 重写鼠标按下事件,获取精确的点击坐标
/// </summary>
public override bool MouseDown(View view, KeyModifiers modifiers, ushort button, int x, int y, double timeOffset)
{
LogManager.WriteLog("[ToolPlugin] ★★★ MouseDown方法被调用 ★★★");
try
{
LogManager.WriteLog("[ToolPlugin] ===== 鼠标点击事件 =====");
LogManager.WriteLog($"[ToolPlugin] 屏幕坐标: ({x}, {y})");
LogManager.WriteLog($"[ToolPlugin] 按键: {button}, 修饰键: {modifiers}");
// 只处理左键点击
if (button == 1) // 左键
{
LogManager.WriteLog("[ToolPlugin] 检测到左键点击,开始处理");
// 使用PickItemFromPoint获取精确的3D坐标
PickItemResult itemResult = view.PickItemFromPoint(x, y);
if (itemResult != null)
{
LogManager.WriteLog("[ToolPlugin] ✓ PickItemFromPoint成功");
LogManager.WriteLog($"[ToolPlugin] 精确3D坐标: ({itemResult.Point.X:F3}, {itemResult.Point.Y:F3}, {itemResult.Point.Z:F3})");
LogManager.WriteLog($"[ToolPlugin] 选中对象: {itemResult.ModelItem?.DisplayName ?? "NULL"}");
// 触发事件将精确坐标传递给PathPlanningManager
MouseClicked?.Invoke(this, itemResult);
LogManager.WriteLog("[ToolPlugin] 事件已触发");
}
else
{
LogManager.WriteLog("[ToolPlugin] ✗ PickItemFromPoint返回null未点击到对象");
}
}
else
{
LogManager.WriteLog($"[ToolPlugin] 忽略非左键点击: {button}");
}
// 返回false表示继续传递事件给其他处理程序
return false;
}
catch (Exception ex)
{
LogManager.WriteLog($"[ToolPlugin] 异常: {ex.Message}");
LogManager.WriteLog($"[ToolPlugin] 堆栈: {ex.StackTrace}");
return false;
}
}
/// <summary>
/// 鼠标移动事件(可用于悬停显示坐标)
/// </summary>
public override bool MouseMove(View view, KeyModifiers modifiers, int x, int y, double timeOffset)
{
// 暂时不处理鼠标移动事件,避免日志过多
return false;
}
}
}