기본 콘텐츠로 건너뛰기

10월, 2010의 게시물 표시

extract cell name from cell library

#include #include #include #include "w2Dgn.h" #include #include externvoidloadCellLibraryIfNeeded(char*libToLoad); /*----------------------------------------------------------------------+ | | | name GetCellNameFromCellLib | | | | author HumKyung.Baek | | | +----------------------------------------------------------------------*/ Public intGetCellNameFromCellLib(char* pOutputTextFilePath , char* pstrCellLib) { ULong elemAddr[250], eofPos, filePos, actualPos, readPos; intscanWords, status, i,j=0, numAddr, fileNum=CELL_LIB, offset; charcellName[10], cellDescription[30], msg[132]; Scanlist scanList; MSElement cellElm; /*cell element descriptor */ FILE* fp = NULL; if(fp = mdlTextFile_open(pOutputTextFilePath , TEXTFILE_WRITE)) { loadCellLibraryIfNeeded(pstrCellLib); mdlScan_initScanlist (&scanList); mdlScan_noRangeCheck (&scanList); scanList.scantype = ELEMTYPE | NESTCELL;

microstation J view direction

아래 이미지를 참조하세요. 그림에 제가 번호를 매겨 놓았습니다.

memory allocation의 비용

메모리 할당/해제에 당연히 어느 정도의 비용이 든다고는 알고 있었지만, V7에서의 눈에 띄는 성능 저하는 메모리 할당/해제의 문제라 생각하지 못할 정도였다. 몇 백개의 line,text들을 생성하는데 생성하는 것을 눈으로 확인할수 있을 정도로 속도가 느렸습니다. 메모리 할당/해제 대신에 배열을 사용하니, 정말 눈깜짝할 정도의 시간에 모든 line,text의 생성이 완료가 되었습니다. 아마도 mdl compiler의 메모리 할당/해제에 문제가 있는게 아닌가 합니다.

mdlText_createWide 함수

mdlText_create대신 mdlText_createWide를 사용하는 가장 큰 이유는 텍스트의 기울기를 줄수 있기 때문이다. int mdlText_createWide ( MSElementUnion *out, /* <= text element created */ MSElementUnion *in, /* => template element */ MSWideChar *wString, /* => wide character string */ Dpoint3d *userOrigin, /* => origin (or NULL) */ RotMatrix *rMatrix, /* => rotation matrix (or NULL) */ TextSizeParam *textSize, /* => size (or NULL) */ TextParamWide *txtParamWide, /* => parameters (or NULL) */ TextEDParam *edParam /* => enter data info (or NULL) */ ); mbstowcs 함수를 통하여 char*를 MSWideChar*로 변환시킬 수 있습니다. 여기서 한가지 주의해야 할 것은 txtParamWide의 flag들의 속성을 제대로 설정해주어야 한다는 것이다. 예를 들어 txtParamWide.flags.vertical을 FALSE로 하지 않으면 텍스트들이 Vertical 방향으로 쓰여지게 된다. txtParamWide.flags.vertical을 FALSE로 두고 텍스트의 회전은 rMatrix에서 설정을 하면 된다. 이번 프로젝트에서 이 문제로 인해 며칠동안 고민을 했었습니다.

Microstation J와 file size 32MB

Microstation J까지의 버전에서 DGN file이 32MB가 넘어가면 문제가 발생한다고 합니다. 주의하세요!!! mdlSystem_compressDgnFile 함수를 호출하면 Undo같은 기능을 위해 저장하고 있는 내용을 지워 파일 크기를 줄일 수가 있습니다. J가 워낙 오래된 프로그램이라 파일 크기 제한은 현재 상황과 맞지 않습니다. PDS 사용자들은 어쩔수 없이 사용할수 밖에 없구요.

Graphic Initialisation Error

앞의 테스트 코드를 오래간만에 컴파일 하여 실행할려니 "Fatal Error During Graphic Initialisation" 메세지가 뜨면서 종료가 되는게 아니겠습니까? 1시간 가량을 원인을 찾다가 어쩔수 없이 OpenCasCade를 다시 설치하였습니다. 그랬더니 에러없이 테스트 프로그램이 실행되었습니다. 도대체 뭐가 문제인지 아는 사람있으면 알려주세요 제발~~ 아래에서 에러가 발생했어요~~ CLibMesh2dTestCaseApp::CLibMesh2dTestCaseApp() { try { m_pGraphicDevice = ::new Graphic3d_WNTGraphicDevice; } catch(Standard_Failure a) { AfxMessageBox("Fatal Error During Graphic Initialisation"); ExitProcess(1); }; } 해결 : 환경변수중에서 CSF_GraphicShr 가 TKOpenGl.dll 을 제대로 가리키고 있는지 확인하세요!!! 저의 경우는 CSF_GraphicShr를 다시 알맞게 변경하니 해결되었습니다.

XM MDL Programming - #9(메뉴 생성하기)

dgnlib 이라는 파일을 가지고 툴바와 메뉴를 생성할 수 있습니다. 우선 Project와 User를 선택하여 해당 dgnlib 파일을 엽니다. Workspace --> Customize 메뉴로 갑니다. 오른쪽 부분에서 마우스 오른쪽 클릭을 하여 New Menu 와 New Menu Item 을 통하여 메뉴를 생성합니다. 메뉴를 생성했다면 메뉴를 선택했을 때 실행되는 루틴을 설정하는게 꼭 필요한데요, 메뉴의 Properties 항목 중에서 Key-in 항목에서 실행하는 명령을 입력하면됩니다. 메뉴와 실행되는 명령이 서로 부합되지는 않지만 뭐~~ dgnlib 파일을 저장하고 나서 빠져 나갑니다. 이제 dgn 파일을 오픈해 보면 우리가 방금 만든 메뉴가 기존의 메뉴에 추가되어 있는 것을 볼 수 있습니다. 앞서 우리가 만든 dgnlib 파일은 general Project 그리고 example User 일 때만 적용됩니다.

XM MDL Programming - #8(Visual Studio Project 생성하기)

순서가 뒤바뀐 감이 없지 않지만, 이번에는 Visual Stuido Project를 생성하여 설정을 하는 방법에 대해서 알아보도록 합시다. 일단은 MFC DLL 프로젝트를 하나 생성합니다. 기본값으로 그냥 생성하시면 됩니다. 그리고 SDK가 설치되어 있는 폴더를 설정합니다. 다음에는 Preprocessor를 설정합니다. 아래 그림과 같이 winNT를 추가합니다. 그리고 디버깅 모드일때는 _DEBUG를 _DEBUG_BUILD로 변경해주세요. 디버깅 모드일 때 코드 생성의 런타임 라이브러리를 아래와 같이 (/MDd)로 변경해주세요. Compiled Header를 Create Precompiled Header (/Yc) 로 설정해 주세요. Linker에서 Additional Library Directory를 설정합니다. 그리고 추가 Library를 등록합니다. 기본적인 Library항목은 아래와 같습니다. toolsubs.lib dgnfileio.lib ditemlib.lib mdlbltin.lib nativewindow.lib nativewinmfc.lib mdllib.lib UI를 만들지 않는다면 nativewindow.lib nativewinmfc.lib 이를 링크해 줄 필요가 없습니다. 이렇게 하면 기본적인 프로젝트 설정이 끝납니다.~~