기본 콘텐츠로 건너뛰기

라벨이 DARS인 게시물 표시

SPOOL로 원하는 거리만큼 이동하기

SPOOL과 DISTANCE는 그 개념이 서로 다릅니다. DISTANCE는 두 아이템이 중점 사이의 거리를 표현하고요, SPOOL은 서로 가까운 거리에 있는 단면의 거리를 표현합니다. 아래는 SPOOL로 원하는 거리만큼 이동시키는 코드입니다. define method DIST(!val is string) VAR !MODE MODE IF (|$!MODE| EQ |Forwards|) THEN POS PA DIST $!val FROM PL OF PREV HANDLE (41,66) POS PA DIST $!val FROM PH ENDHANDLE ELSE POS PL DIST $!val FROM PA OF PREV HANDLE (41,66) POS PL DIST $!val FROM PT ENDHANDLE ENDIF endmethod

DARS로 Multi-Bytes 문자 읽기

DARS문서를 읽다 보면 극동 지역(중국,일본,한국)에서 사용하는 문자를 읽는 방법이 나와있는데, 이를 간략하게 정리한 것입니다. 우선 Multi-Bytes 문자의 시작은 ' &~ '로 시작이 되고, ' & '로 종료가 된다. 그리고 Multi-Bytes 문자들(' &~ '와 ' & '사이에 들어 있는 문자들)은 각각에 128을 더한 문자를 취하면 됩니다. 지극히 간단합니다. 한가지 주의할 사항은 ' &~ '와 ' & '사이에 들어 있는 &~ 은 Multi-Bytes 문자의 시작을 가리키는 것이 아니라 문자 그 자체가 된다는 것입니다. 아래는 Multi-Bytes 문자를 읽는 코드입니다. /** @brief parsing multi-byte characters @author CJH , BHK @date 2009.06.23 */ string CAccessPdms::FECS(const string &istr) { string ostr; bool LFECS = false; for(int i = 0;i

CATALOGUE 구축시 회전 PTSET 생성하기

아래 그림과 같이 ANGLE을 가지는 POINT를 생성하고자 할때, 일반적으로 직접 ANGLE값을 줄때는 X 90 Y 이런식으로 가능합니다. 하지만 DESGIN PARA에 있는 값을 적용 시키고자 할때는 MIXED-POINT로 생성하면 되지 않습니다. 꼭 PTCA로 생성해야만 합니다.(왜 그런지는 몰라요) ATTRIB RPRO DSPJ 라는 항목이 좀 생소 할지도 모르는데.... 이 부분은 그냥 DESP를 사용하지 않고(이렇게 사용했다면 Display Component할때 무수한 메세지를 보게 될것입니다.) DTSE를 이용해서 DESP를 이용하도록 하면 메세지가 나타나는 것을 방지할 수 있습니다. 말로는 잇점을 표현하기 어렵고 직접 해 보시길....

PDMS ISO의 좌표계

메뉴 추가

위와 같이 PDMS에 메뉴를 추가하는 방법입니다. 아래는 DESIGN 모듈에 메뉴를 붙이는 방법입니다. 1. PDMS 설치 폴더\pmllib\design\forms\appdesmain.pmlfrm 파일을 엽니다. 2. appdesmain.pmlfrm파일에서 menu bar를 추가합니다. 3. 폼 추기화 부분에서 추가한 menu bar에 붙을 메뉴를 생성합니다.

UI 만들기

PDMS에서는 UI를 만드는데 별도의 툴을 제공하지 않습니다. 그래서 수고스럽지만 일일이 손으로 코딩을 해가며 작성을 해야만 합니다. 다음 버전에는 UI 작성 툴이 제공하기를 기대해 봅니다. 1. *.pmlfrm 이라는 파일로 UI 작성 setup form !!test path down para .parPIPENOMDIA text 'Pipe Size: ($NOM_DIA_UNITS$)' option .optPIPENOMDIA '' width 10 para .parSPPTYPE text 'Support Type : VT1' option .optSPPTYPE '' width 10 para .parE text 'Item No. : A/B/C' option .optE '' width 10 para .parL text 'Length Code : A/B/C/D/E/F/G/H/J/K/L/M/N' option .optL '' width 10 para .parB text 'Length Code "B": A/B/C' option .optB '' width 10 exit 2. pml rehash all 3. pml reload form !!이름     -> UI를 메모리에 올리는 작업     -> 파일 내용이 수정될때 마다 이 작업을 해주어야 합니다. 4. show !!이름

PML 예제

MDB에서 ZONE들의 이름을 읽어 와서 파일로 저장하는 함수를 만들어 봤습니다. 함수의 내용은 간단합니다. Define Function !!GetZoneList(!path Is String) !cur = ref world var !tzone collect all zone q var !tzone !pathName = !path + '\ZoneList.dat' !!totalF = Object FILE('$!pathName') !!totalF.Open('overwrite') DO !c Index !tzone $!tzone[$!c] var !name name !!totalF.WriteRecord('$!name') ENDDO !!totalF.Close() !!totalF.Delete() $p ================ $P completed $p ================ $!cur EndFunction 인자로 파일이 생길 폴더 이름을 받습니다. 현재의 레벨을 저장한후에 WORLD 레벨로 올라갑니다. 거기서 zone들을 collect합니다. 여기서 for ce 를 붙이니까 제대로 zone들을 끌어 모으지 못했습니다. 그 자세한 이유는 모르겠고 그냥 for ce를 뺐습니다. 그리고 마지막에 저장한 레벨로 되돌려 놓습니다. 덤으로 define function !!dofgetgridwl(!path Is String) !cur = ref world var !cgridwl collect all GRIDWLD q var !cgridwl if !cgridwl.size() ge 1 Then !pathName = '/' + !path + '\GridWL.mac' $!cgridwl[1] file $!pathNam...

심볼만들기

DRAFT상에서 심볼을 만들려고 시도했다가 제공하는 툴의 조잡함과 기능의 취약함으로 포기하고 AutoCAD에서 심볼을 만들어 DRAFT상에 올리는 방법을 택했습니다. DRAFT에서 지원하는 형상의 한계때문에(라인 , 원 , 폴리라인 정도만 지원함) 해치같은 것을 포함하는 심볼을 만들려면 어쩔수 없이 해치를 explode시켜야 합니다. 바로 심볼을 만드는 과정에 대해 살펴보도록 하겠습니다. 먼저 PDMS.bat 파일을 열어서 현재 자신의 컴퓨터에 설치된 AutoCAD 경로가 제대로 적용되었는지 확인합니다. DRAFT에서 Symbol Library 하나를 생성합니다. AutoDRAFT 모드로 들어가 Edit 메뉴에서 Edit Symbols 항목을 선택합니다. a. AutoCAD Work Directory를 설정합니다. b. Symbol Drawing Name 항목은 ".dwg" 확장자를 뺀 심볼 파일 이름. c. OK 버튼을 누르면 AutoCAD가 실행됩니다. Attribute Definition을 생성합니다. a. AutoCAD 명령창에서 ATTDEF을 입력하면 아래의 창이 뜹니다. b. Tag의 값에 PDMS_NAME이라고 입력합니다. AutoCAD의 make symbol메뉴를 선택하면 entity들을 선택하라고 하는데 앞서 만든 형상과 ATTRIBUTE를 선택합니다. 그리고 나머지 사항은 기본값으로 선택합니다. 다시 write symbol을 선택합니다. 여기서는 별다른 요구사항이 없습니다. 끝으로 end AutoCAD를 선택하면 AutoCAD가 종료되고 DRAFT를 보면 우리가 만든 심볼이 올라옵니다.

LDIM에 대한 고찰

Linear Dimension 생성하기 DIR Dimension의 라인의 방향(POSS에서 POSE로 바라보는 방향) PLDI Projection 라인의 방향 위의 두 가지 요소(DIR , PLDI)는 뷰의 방향과 rotation 각도에 영향을 받습니다. 아래 그림은 회전 각도가 0일 경우 각 뷰의 방향에 대한 DRAFT의 방향을 나타낸 것입니다. PLDI를 구하기 위해 $VPOS \to POSS$로 향하는 벡터를 구하니다. 뷰의 회전 각도의 반대 방향으로 벡터를 회전시킵니다.(뷰가 회전하는 동일한 효과를 구하기 위해) 그 회전된 벡터의 값을 보고(예를 들어 TOP 뷰이고 벡터의 X 절대값이 Y 절대값보다 크고 X가 양수이면 PLDI는‘E’가 된다.) PLDI의 값을 정합니다. DIR도 위와 동일한 루틴을 통해서 구하면 됩니다. 단 처음 벡터가 $POSS \to POSE$로 향하게 됩니다.