프로그램에서 사용하는 속성 영역(min x, min y, max x, max y)을 설정 후 해당 영역에 들어가는 텍스트를 구하는 문제입니다.
일반적인 경우에는 AutoCAD database에서 텍스트들에 대해 좌표를 구한 후 해당 영역에 포함되는지 확인하면 됩니다.
문제가 되는 경우는 우리가 구하려고 하는 텍스트가 블럭에 있는 경우입니다.
이 경우에 대응하는 방법은 아래와 같이 생각해 볼 수 있습니다.
제안 1)
블럭과 블럭안의 Attribute를 화면에 보여주고 사용자로 하여금 프로그램 속성 영역과 매핑하도록 하는 방법입니다.
텍스트 좌표를 구할 필요도 없고 간단한것 같습니다.
하지만 사용자는 매핑해야하는 번거로움과 다수의 업체에서 제공되는 AutoCAD의 블럭이 모두 같다는 보장이 없기 때문에
매 도면마다 매핑을 해야하는 문제가 있습니다.
사용자들이 좋아하지 않는 방법입니다.
제안 2)
블럭을 explode 한 후 텍스트들에 대한 좌표를 구해 영역에 포함되는지 확인하는 방법입니다.
AutoCAD의 explode 명령은 사용하지 않는게 좋을것 같습니다.
Explode는 블럭을 깨어서 블럭 안의 entity들을 AutoCAD database에 저장합니다.
이 과정에서 눈에 보이지 않는/원하지 않는 요소들이 database에 저장되는 문제가 있습니다.
그리고 원본 도면이 훼손되는 문제가 있어 추천하지 않는 방법입니다.
이와 유사한 burst라는 명령어도 있다고 합니다.(관심있는 분은 인터넷에서 검색해 보세요)
그럼 어떻게 할까요?
AutoCAD API를 보면 Explode 함수가 있습니다.
Explode 명령어와 이름과 하는 일은 같지만 Explode 함수는 블럭안에 있는 entity들을 단지 되돌려줄 뿐입니다.(database에 저장하지 않습니다.)
이 후의 텍스트를 처리하는 과정과 같이 하면 됩니다.
제안 3)
블럭과 블럭안이 Attribute들을 구하는 방식입니다.
블럭의 좌표와 Attribute의 좌표를 합하여 실제 눈에 보이는 위치를 구할 수 있을것 같습니다.(이건 아직까지 저의 생각입니다.)
위치가 영역에 포함되는지 여부를 확인하여 값을 구하면 될것 같습니다.
이제까지 몇가지 방안에 대해 생각해봤습니다.
저라면 제안 3)을 선택하겠습니다.
Explode하는 작업을 하지 않아도 되고 또한 원본도 훼손하지 않으니까요.
제안 3)이 안되면 제안 2)번으로.....
댓글
댓글 쓰기