기본 콘텐츠로 건너뛰기

8월, 2006의 게시물 표시

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

Test for convex or concave polygon

helloktk의 블로그 | ㅇ http://blog.naver.com/helloktk/80025637242 주어진 단순폴리곤이 convex인지 concave 인지는 이웃하는 변끼리의 cross 가 모두 같은 부호를 갖는지를 체크하면 된다. 중간에 부호가 바뀌면 해당 폴리곤의 concave이다. 이웃하는 세꼭지점이 일직선상에 놓인 경우는 제외해야 한다. 폴리곤이 simple인지 아닌지는 어떻게 판별할까? /*주어진 심플한 다각형이 convex인지 concave인지를 판별한다. 점들이 일직선상에 놓인 상황에 있으면 0을 리턴한다. */ int is_convex_polygon(POINT p[], int N) { int i; int flag = 0; if (N < 3) return(0); for (i=0; i<N; i++) { int j = (i + 1) % N; int k = (i + 2) % N; double z = (p[j].x - p[i].x) * (p[k].y - p[j].y); z -= (p[j].y - p[i].y) * (p[k].x - p[j].x); if (z < 0) flag |= 1; else if (z > 0) flag |= 2; if (flag == 3) return (CONCAVE); } if (flag != 0) return (CONVEX); else return (0); }

심볼만들기

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$로 향하게 됩니다.