图元动态感知
当鼠标在AnyCAD三维控件中掠过图元上方的时候,图元会“高亮”显示,当鼠标移走的时候会回复之前的状态。在一般的窗体控件中会提供MouseEnter/MouseLeave事件。
在AnyCAD提供了图元选择消息,当图元选择的时候会被触发。现在,新版SDK利用同样的机制就可以捕获到“高亮”状态,并很容易的实现MouseEnter/Leave机制。
比如在MFC对话框中实现这样的功能,当鼠标掠过(在点击之前)曲线的时候显示出该线的长度信息:
1 #include <APISelectionChangeArgs.h> 2 #include <APISelectedIdSetQuery.h> 3 void CDialog3DDlg::OnSelectionChanged(const AnyCAD::API::SelectionChangeArgs& args) 4 { 5 auto sceneManager = m_Window3D.GetView().GetSceneManager(); 6 7 //Highlight event mode 8 if (args.IsHighlightMode()) 9 { 10 // get the object id 11 SelectedIdSetQuery query; 12 auto renderer = m_Window3D.GetView().GetRenderer(); 13 renderer.QueryHighlight(query); 14 if (query.GetIds().empty()) 15 { 16 m_Info = _T(""); 17 } 18 else 19 { 20 for (auto id : query.GetIds()) 21 { 22 23 m_Info.Format(_T("ID: %d, Length: %g米"), id.AsInt(), m_mapEdgeLength[id.AsInt()]); 24 break; 25 } 26 } 27 28 29 UpdateData(FALSE); 30 } 31 //Selection event mode 32 else 33 { 34 for (auto id : args.GetIds()) 35 { 36 auto sceneNode = sceneManager.FindNode(id); 37 if (sceneNode.IsValid()) 38 { 39 CString text; 40 text.Format(_T("ID: %d, Length: %g m"), id.AsInt(), m_mapEdgeLength[id.AsInt()]); 41 MessageBox(text); 42 } 43 break; 44 } 45 } 46 47 }
完整代码请查看C++SDK自带的例子
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY