当鼠标在AnyCAD三维控件中掠过图元上方的时候,图元会“高亮”显示,当鼠标移走的时候会回复之前的状态。在一般的窗体控件中会提供MouseEnter/MouseLeave事件。
在AnyCAD提供了图元选择消息,当图元选择的时候会被触发。现在,新版SDK利用同样的机制就可以捕获到“高亮”状态,并很容易的实现MouseEnter/Leave机制。
比如在MFC对话框中实现这样的功能,当鼠标掠过(在点击之前)曲线的时候显示出该线的长度信息:
当鼠标在AnyCAD三维控件中掠过图元上方的时候,图元会“高亮”显示,当鼠标移走的时候会回复之前的状态。在一般的窗体控件中会提供MouseEnter/MouseLeave事件。
在AnyCAD提供了图元选择消息,当图元选择的时候会被触发。现在,新版SDK利用同样的机制就可以捕获到“高亮”状态,并很容易的实现MouseEnter/Leave机制。
比如在MFC对话框中实现这样的功能,当鼠标掠过(在点击之前)曲线的时候显示出该线的长度信息:
![](https://img.laitimes.com/img/_0nNw4CM6IyYiwiM6ICdiwiI0gTMx81dsQWZ4lmZf1GLlpXazVmcvwFciV2dsQXYtJ3bm9CX9s2RkBnVHFmb1clWvB3MaVnRtp1XlBXe0xCMy81dvRWYoNHLwEzX5xCMx8FesU2cfdGLwMzX0xiRGZkRGZ0Xy9GbvNGLpZTY1EmMZVDUSFTU4VFRR9Fd4VGdsYTMfVmepNHLrJXYtJXZ0F2dvwVZnFWbp1zczV2YvJHctM3cv1Ce-cmbw5SO4YDMzETM1ETO3QmZ5czYyYzXxETOwETM4AzLcdDMyIDMy8CXn9Gbi9CXzV2Zh1WavwVbvNmLvR3YxUjLyM3Lc9CX6MHc0RHaiojIsJye.png)
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自带的例子