天天看點

圖元動态感覺

當滑鼠在AnyCAD三維控件中掠過圖元上方的時候,圖元會“高亮”顯示,當滑鼠移走的時候會回複之前的狀态。在一般的窗體控件中會提供MouseEnter/MouseLeave事件。

在AnyCAD提供了圖元選擇消息,當圖元選擇的時候會被觸發。現在,新版SDK利用同樣的機制就可以捕獲到“高亮”狀态,并很容易的實作MouseEnter/Leave機制。

比如在MFC對話框中實作這樣的功能,當滑鼠掠過(在點選之前)曲線的時候顯示出該線的長度資訊:

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