shared cell의 속성(Level,Color,Style)을 변경하려면 shared cell 자체의 속성을 변경하는 것 뿐만 아니라 shared cell이 가리키는 원본의 속성도 같이 변경해야 원하는 결과를 얻을 수 있습니다.
여기서 한가지 더 고려해야 할것이 shared cell안에 중첩되는 shared cell이 있을 수 있다는 겁니다.(세상일이 단순하게 되는게 없습니다.)
아래와 같이 처리해주면 중첩된 경우도 처리가 가능합니다.
if(SUCCESS == mdlSharedCell_getDefinitionId(&m_uniqueId,&(element->el)))
{
return ERROR_SUCCESS;
}
원본의 ID를 구한 뒤 원본의 속성을 변경하면 됩니다.UInt32 filePosP = 0; if (SUCCESS == mdlAssoc_getElement(NULL , &filePosP , m_uniqueId , MASTERFILE)) { MSElementDescr *pDescr = NULL; DgnModelRefP modelRef=NULL; if (mdlElmdscr_read(&pDescr, filePosP , modelRef , FALSE , NULL) != 0) { UInt32 *pColor = NULL,*pWeight = NULL; Int32* pStyle = NULL; if(-1 != (Int32)oSymbology.color) pColor = &oSymbology.color; if(-1 != (Int32)oSymbology.style) pStyle = &oSymbology.style; if(-1 != (Int32)oSymbology.weight) pWeight = &oSymbology.weight; mdlElmdscr_setSymbology(pDescr ,pColor,pStyle,pWeight,NULL); mdlElmdscr_rewrite(pDescr,pDescr,filePosP); mdlElmdscr_freeAll(&pDescr); } }
여기서 한가지 더 고려해야 할것이 shared cell안에 중첩되는 shared cell이 있을 수 있다는 겁니다.(세상일이 단순하게 되는게 없습니다.)
아래와 같이 처리해주면 중첩된 경우도 처리가 가능합니다.
if(SHAREDCELL_DEF_ELM == iElemType) { if(pDescr->h.isHeader && (NULL != pDescr->h.firstElem)) { for(MSElementDescrP ptr = pDescr->h.firstElem;NULL != ptr;ptr = ptr->h.next) { const int iElemType = mdlElement_getType(&(ptr->el)); if(SHARED_CELL_ELM == iElemType) { ElementId uniqueId; if(SUCCESS == mdlSharedCell_getDefinitionId(&uniqueId,&(ptr->el))) { this->ChangeNestedSymbology(uniqueId,oSymbology); } } } } { UInt32 *pColor = NULL,*pWeight = NULL; Int32* pStyle = NULL; if(-1 != (Int32)oSymbology.color) pColor = &oSymbology.color; if(-1 != (Int32)oSymbology.style) pStyle = &oSymbology.style; if(-1 != (Int32)oSymbology.weight) pWeight = &oSymbology.weight; mdlElmdscr_setSymbology(pDescr ,pColor,pStyle,pWeight,NULL); mdlElmdscr_rewrite(pDescr,NULL,filePosP); } }
댓글
댓글 쓰기