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);
}
}