기본 콘텐츠로 건너뛰기

How to pick object?

앞에서는 영역을 잡아서 object를 선택하는 것에 대해서 알아 봤는데,
이번에는 click하여 object를 선택하는 것에 대해서 알아보겠습니다.

아래와 같이 Select함수를 사용하게 되는데요
1
Standard_EXPORT AIS_StatusOfPick Select(const Standard_Boolean updateviewer = Standard_True) ;
cs
인자로 click한 좌표를 넘겨주지 않습니다.

그럼 어떻게 object를 선택할까요?(좌표없이 말이죠...)

이 함수는 highlight된 object를 선택하는 함수입니다. 따라서 이 Select 함수를 호출하기 전에 선택할 object가 highlight되어있어야 합니다.
highlight는 마우스가 움직일때 MoveTo 함수를 통해서 쉽게 할수가 있습니다.


그림을 보시면 마우스 커서 밑의 원이 highlight된것을 볼수가 있습니다.

형상들을 선택한 후 color dialog에서 변경할 색상을 선택한 후에 선택한 형상의 색상을 변경합니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
Quantity_Color CSFColor ;
COLORREF MSColor ;     
 
m_hAISContext->Select();
m_hAISContext->InitSelected();
if (m_hAISContext->MoreSelected())
{
    m_hAISContext->InitCurrent();
    Handle_AIS_InteractiveObject Current = m_hAISContext->Current() ;
    if ( Current->HasColor () )
    {
       CSFColor = m_hAISContext->Color(Current);
       MSColor = RGB (CSFColor.Red()*255.,CSFColor.Green()*255.,CSFColor.Blue()*255.);
    }
    else
    {
        MSColor = RGB ( 255,255,255 ) ;
    }
 
    CColorDialog dlgColor(MSColor);
    if (IDOK == dlgColor.DoModal())
    {
       MSColor = dlgColor.GetColor();
       CSFColor = Quantity_Color (GetRValue(MSColor)/255. , GetGValue(MSColor)/255. , GetBValue(MSColor)/255. , Quantity_TOC_RGB);             
 
       for (;m_hAISContext->MoreCurrent ();m_hAISContext->NextCurrent ())
       {
           if(m_hAISContext->Current()->IsKind("AIS_Shape"))
           {
                Handle(AIS_Shape) myShape = Handle(AIS_Shape)::DownCast(m_hAISContext->Current());
                m_hAISContext->SetColor(myShape , CSFColor , Standard_False);
                m_hAISContext->SetMaterial(myShape , Graphic3d_NOM_DEFAULT , Standard_False);
           }
           else
           {
                m_hAISContext->SetColor(m_hAISContext->Current() , CSFColor);
           }
       }
    }
    m_hAISContext->ClearSelected();
 
}
cs

댓글