Autodesk Inventor自定义类无法触发OnMouseClick事件求助
问题分析与解决方案
核心问题
你的代码中m_mouse对象的类型声明错误,导致无法正确绑定OnMouseClick事件:
- 你将
m_mouse声明为InteractionEvents类型,但m_interaction.MouseEvents返回的是MouseEvents对象,类型不匹配会使事件绑定失效,同时智能提示仅显示InteractionEvents的成员(Terminate、Suspend、Resume、Help)。
修正后的代码
Public Class Cls_GetDrawingPickPoint Private WithEvents m_interaction As Inventor.InteractionEvents ' 修正:将m_mouse类型改为MouseEvents Private WithEvents m_mouse As Inventor.MouseEvents Private m_position As Point2d Private m_button As MouseButtonEnum Private m_continue As Boolean Public Sub New() End Sub Public Function GetDrawingPoint(Prompt As String, button As MouseButtonEnum) As Point2d m_position = Nothing m_button = button ' 初始化交互事件 m_interaction = g_inventorApplication.CommandManager.CreateInteractionEvents ' 正确获取MouseEvents对象 m_mouse = m_interaction.MouseEvents ' 禁用选择功能(如果仅需捕获点击坐标,不需要选择对象) m_interaction.SelectEnable = False m_interaction.StatusBarText = Prompt m_interaction.Start() Do While m_continue g_inventorApplication.UserInterfaceManager.DoEvents() Loop ' 确保交互事件停止并释放资源 If m_interaction.IsStarted Then m_interaction.Stop() End If GetDrawingPoint = m_position Return GetDrawingPoint End Function Private Sub m_mouse_OnMouseClick(button As MouseButtonEnum, ShiftKeys As ShiftStateEnum, ModelPosition As Point, ViewPosition As Point2d, View As Inventor.View) Handles m_mouse.OnMouseClick If button = m_button Then ' 注意:绘图界面中应该使用ViewPosition(屏幕坐标转视图坐标),而非ModelPosition(模型空间坐标) m_position = g_inventorApplication.TransientGeometry.CreatePoint2d(ViewPosition.X, ViewPosition.Y) Debug.Print("点击坐标:" & m_position.X & "," & m_position.Y) End If m_continue = False End Sub Private Sub m_interaction_OnTerminate() Handles m_interaction.OnTerminate m_continue = False If m_interaction.IsStarted Then m_interaction.Stop() End If End Sub Private Sub m_interaction_OnActivate() Handles m_interaction.OnActivate m_continue = True End Sub End Class
关键修改说明
- 类型修正:将
Private WithEvents m_mouse As InteractionEvents改为Private WithEvents m_mouse As Inventor.MouseEvents,确保类型匹配,正确绑定鼠标点击事件。 - 禁用选择功能:添加
m_interaction.SelectEnable = False,避免Inventor的默认选择逻辑干扰鼠标点击事件的捕获。 - 坐标获取修正:在绘图界面中,
ViewPosition是视图坐标系下的点击坐标,更符合绘图场景需求;ModelPosition是模型空间坐标,仅在3D模型界面适用。 - 资源安全处理:添加
IsStarted判断,避免重复调用Stop()导致的异常。
额外注意事项
- 确保
g_inventorApplication是全局有效的Inventor应用实例,未被提前释放或赋值为空。 - 如果在Inventor的不同环境(零件、装配、工程图)中使用,需根据场景调整坐标转换逻辑。
- 避免在循环中过度调用
DoEvents(),可考虑添加适当的延迟或使用更高效的事件驱动逻辑。
内容的提问来源于stack exchange,提问作者Kallo90
相关产品推荐
相关产品推荐

