• 图元动态感知


    当鼠标在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自带的例子

  • 相关阅读:
    阶乘递归实现
    队列
    1+2+3+...+100用递归实现
    快速排序C语言实现
    js的onfocus,onblur事件
    CSP2021 游记 菜到离谱
    700题复习计划
    [传递闭包] P2881 [USACO07MAR]排名的牛Ranking the Cows
    【笔记】序列分块
    【题解】UVA10930 A-Sequence
  • 原文地址:https://www.cnblogs.com/anycad/p/7307741.html
Copyright © 2020-2023  润新知