2013.02.15 06:15
그림과 같이 1번, 2번, 3번 라인을 선택 하거나 1번, 2번, 3번, 4번 라인을 선택 하면 빗금친 면적이 변수에 저장되는 VBA 코드를 만들 수 있을까요?
좌측은 교점을 구해 라인을 그리면 될 것도 같은데 우측은 교점을 구해서 또 호를 어떻게 구해야 할지도 너무 막막합니다. VBA는 게다가 선 나누는 것도 너무 힘들어서요.
제발 부탁 드리겠습니다. 한달간의 프로젝트가 날아가기 직전이네요.
만약 VBA가 아닌 LISP로 가능하다면 LISP코드는 어떻게 짜야 하며 그렇게 구한 면적 값을 VBA로 전달할 수는 있을까요?
2013.02.15 09:25
2013.02.15 11:08
전 VBA나 .NET만 할 줄 알고 LISP은 모릅니다.
제가 만들어 배포하는 Dream도 전체가 VBA 프로그램입니다.
제가 프로그래밍관련 답변을 하지 않아서 대략 가능한지만 파악한다면
(프로그래밍 답변은 제 성격상 코드를 직접 만들어서 답변해 드려야하는데
이게.. 과거에 몇 년 해보니 너무 힘들더군요. 그래서 지금은 하지 않습니다)
말씀하신 경우 VBA로는 기능에 비해 코드가 긴 문제입니다.
좌측 그림의 경우
3번과 1, 2의 교차점을 구해
1) 호의 원점에서 1~3의 교차점에 해당하는 선
2) 호의 원점에서 1~2의 교차점에 해당하는 선
3) 3번 선
이 세개로 해치가 됩니다.
마찬가지로 우측 그림의 경우도 같고
여기서 3번은 호(또는 폴리선)이기 때문에 전체 호가 아닌
교차점과 교차점 사이의 호를 그리는 것도 어려운 문제는 아닙니다.
3번이 폴리선이면 Bulge 값을 이용하여 교차하는 구간의 호 정보를 파악하면 되는 등
안되는 문제는 아니나 말씀드린 대로
교차점과 교차점 사이의 호나 폴리선을 그리려면
3번이 폴리선이면 교차점들이 폴리선의 선에 교차했는지, 호 부분에 교차했는지에 따라
4가지 조건이 나오고 그에 따라 선 그리고 등..
만들어야하는 것들이 좀 많습니다.
그리고 LISP은 제가 몰라서 답변을 드릴수 없지만 VBA나 .NET에 비해
오토캐드의 명령을 그대로 이용할 수 있는 점 등 여러가지 코딩 양을 확 줄일 수 있는 조건이 많은 것으로 압니다.
그리고 VBA, LISP 서로간에 변수 전달은
1) 오토캐드의 시스템 변수를 이용해도 되고
USERI1-5 : 정수 값을 저장하는 5가지의 변수, USERI1, ....USERI5
USERR1-5 : 실수 값을 저장하는 5가지의 변수, USERR1, ....USERR5
USERS1-5 : 문자열 값을 저장하는 5가지의 변수, USERS1, ....USERS5
2) ini 또는 레지스트리를 이용해도됩니다.
다만 VBA의 문제 중 하나가
VBA 실행 중 리습 실행시 리습 실행이 완료될때까지 VBA가 대기하는 것이 아니라
VBA 실행 중 리습 실행하면 리습 실행에 관계없이 VBA 코드는 그냥 진행됩니다.
따라서 VBA 실행 후 맨 마지막에 리습을 실행하던가해야합니다.
대기하게 만들 수도 있지만... 개인적으로 비추천입니다.