當滑鼠在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自帶的例子