Post

Element 탐색하기 - 두 번째

앞서 Element를 탐색하는 방법을 알아봤는데 이번에는 또 다른 방법을 알아 보도록 하겠습니다.

이번에 알아볼 방법은 Callback함수를 이용하는 방법입니다.
Callback함수를 등록시켜 놓으면 scan시 Element를 찾을때 마다 Callback함수를 호출합니다.

아래의 코드를 참조하세요

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
43
44
45
/*---------------------------------------------------------------------------------**//**
 author        BentleySystems                          03/04           
+---------------+---------------+---------------+---------------+---------------+------*/
int CNeutralDataFile::ScanCallback
(
MSElementDescr*         pEd,
void*                   pInfo,
ScanCriteria*           pScanCriteria
)
{
    UNUSED_ALWAYS(pScanCriteria);

    CNeutralDataFile* pNeutralDataFile = (CNeutralDataFile*)(pInfo);
    pNeutralDataFile->WriteElementDescr(pEd , 0L);

    return  SUCCESS;
} 


/*
    @brief    write element to file
    @author    
    @date    2011.07.04
    @param    CStdioFile&
*/
void CNeutralDataFile::WriteToFile(/*CStdioFile* pStdioFile*/)
{
    {
        ScanCriteria *scP = mdlScanCriteria_create (); 

        // 리턴 타입이 Element Descr입니다.
        mdlScanCriteria_setReturnType (scP, MSSCANCRIT_ITERATE_ELMDSCR, FALSE, TRUE);
        mdlScanCriteria_setModel (scP , m_oDgnModel.GetDgnModelRef()); 
        
        //ELEMENT_CATEGORY_GRAPHICS , ELEMENT_CATEGORY_ALL ,ELEMENT_CATEGORY_CONTROL
        mdlScanCriteria_setElementCategory (scP,ELEMENT_CATEGORY_GRAPHICS);

        // Callback 함수 등록
        mdlScanCriteria_setElmDscrCallback (scP , ScanCallback, this);
        mdlScanCriteria_setStopFilePos (scP, mdlModelRef_getEof (ACTIVEMODEL));
        mdlScanCriteria_scan (scP, NULL , NULL , NULL); 

        if(scP) mdlScanCriteria_free(scP);
    }
}