ID:
PW:

     0 분
     5 분

엔지니어 돌종
  dolljong
[다정다감] Q&A
[다정다감]에 관한 질문/답변을 올리는 곳입니다.


수개의 영역 교집합의 면적을 구하는 리습은 어떻게?
이성태  2002-10-10 13:54:21, 조회 : 3,774, 추천 : 307

일단은 문의게시판에서 본 것중 제가 궁금한 것과 비슷한 것을 먼저 나열할게요.

=====================================================================
#1

곡선 직선이 섞여있어도 pline으로 만든다음에 area명령을 이용할 수 있습니다. pline으로 만드는 방법은 pedit의 join명령을 이용하면 됩니다.


아래와 같이 area명령을 내리고 hatch를 선택하면 에러가 발생합니다.
Command: area
Specify first corner point or [Object/Add/Subtract]: o
Select objects:
Selected object does not have an area


아마도 해치를 point를 찍어서 할 것 같은데 포인트를 찍어서 pline을 만드는 방법도 있습니다.
bpoly라고 친다음에 한 포인트를 찍어주면 그 포인트를 둘러싼 pline을 만들 수 있습니다. 이것을 area명령을 써서 면적을 구하면 됩니다. hatch와 같은 효과죠..

그럼 좋은 날 되시길..


서성종 wrote:
>지도나 일반 지형도를 보면 논이나 밭같은 경우 형태가 부정형으로 생겼는데 면적을 어떻게 계산해야 하죠?
> 직선으로 된것들은 PLine으로 다시 그려서 area하면 나오던데요
>곡선, 직선 등이 같이 있는 것은 어떻게 해야 되지요?
>그리구요 해치로 면적을 구할수 있는 방법은 없나요?
>해치로 list해봤는데 안되더군요...
> 귀찮으시더라도 답변 부탁합니다...

=====================================================================

#2

나그네님의 k100은 어떻게 생겼는지 모르겠고 제가 쓰는 리습을 소개합니다.
아주 간단한 리습으로 군더더기를 배제하였습니다. 폐합된 곳을 찍으면 소수점 두째 자리 까지 면적을 써 줍니다. 아래를 복사하여 노트패드에 붙여 넣은 후 arq.lsp 으로 저장후 로드 명령어는 arq 입니다.

명령어를 다른 것으로 바꾸고 싶으신 분은 (defun c:arq ...........의 arq를 ar, aa, 로 바꾸어 쓰시면 됩니다... 다른 리습도 마찬가지이지요...
면적의 산출원리는 이렇습니다.
CAD의 bpoly 명령을 실행하면 페합된 내부의 점을 찍게됩니다.
그려면 폐합된 경계를 따라 polyline이 그려지게 되지요..
이 마지막으로 그려진 엔티티 즉 폴리라인의 면적 정보를 포인트로 찍은 점을 기준으로 1.5크기의 TEXT를 써 줍니다.
그리고 중간의 ;;; (command ".erase" "L" "") 중의 앞의 ;;;를 지우면 이라인의 명령이 수행되어 polyline을 지워 줍니다.

그러나 Autocad r12 및 R14에는 폐합된 선의 밖으로 POLYLINE이 그려지는 버그가 있습니다. 그래서 그것을 눈으로 확인코자 지우지 않았습니다.

면적 산정이 잘못되어 낭패를 당하는 수가 있기 때문이지요...

글자크기가 1.5가 작으신분들은

(command ".text" "j" "mc" pt "1.5" "0" ar2) 에서 "1.5" 대신에 원하는 크기를 스시면 됩니다. 물론 이것도 유저가 선택하게 하는 것을 달면 되나 매번 물어오는 것도 작업효율을 떨어뜨리기도 하지요....

즐거운 하루되세요.. 아래부터 복사 하세요...


;;;*****************************************************************
;;; Quick Area LISP
;;; 1996.11.12 H. S. PARK
;;; 1998.12.30 (1st Modified for Acad14)
;;; GENESIS ENGINEERING (031-718-2272)
;;; DEPT.OF LAND DEVELOPMENT & DESIGN
;;; http://www.civil4u.com
;;;*****************************************************************
(defun c:arq (/ pt ar1 ar2)
(graphscr)
(setq OS (getvar "osmode"))
(setq CE (getvar "CMDECHO"))
(setvar "osmode" 0)
(while (setq pt (getpoint "nSelect internal point ....:"))
(command ".bpoly" pt "")
(command ".area" "e" "L")
;;; (command ".erase" "L" "")
(setq ar1 (getvar "area"))
(setq ar2 (strcat (rtos ar1 2 2)))
(setq ar2 (rtos ar1 2 4))
(command ".text" "j" "mc" pt "1.5" "0" ar2)
(command ".redraw")
);end of while
(setvar "CMDECHO" CE)
(setvar "osmode" OS)

);end of arq.lsp





캐슬 wrote:
>저번 올려주신 k10이라는 lisp은 잘 쓰고 있었거든요...근데 갑자기 이 lisp이 안돼더라구요..그래서 혹시나 해서 다시 다운을 받았는데도 그렇고 옆에 동료 캐드에서도 안돼고요...lisp이 무슨 쉐어웨어도 아니고 어느 정도 시간이 지나면 안돼는것도 아닐텐데...꼭 좀 이유를 알려주세요...여지껏 편리하게 썼는데 안돼니까 넘 많이 불편하더라구요....
>p.s : 어떻게 안돼냐면 y or n를 물어보잖습니까..? 그럼 y,n 아무거나 쳐도 그냥 넘어가 버리더라구요...혹시 아시는 분은 아무나 리플 좀 남겨주시길......
>
>그럼 오늘도 좋은 하루 보내시길......


=====================================================================

#3

안녕하세요 [다정다감]의 돌종 이석종입니다.

문의하신 기능을 간단하게 처리하기는 힘들어보이네요
하지만 AutoLISP으로 만들면 가능할 것 같습니다.

이번기회에 AutoLISP를 공부해보심이 어떠실지...?

그럼 좋은 날 되시길...

>제가 업무적으로 도면을 많이 사용하는데요..CAD를 이용해서 도면을 그리고
>그도면의 내역을 작성해야 합니다.
>주로 면적계산을 해서 내역서를 작성하는데요..
>각 항목별로 레이어를 나누어서 도면을 작성하고 그리고.. area명령을 사용해서
>각 항목별로 면적을 계산해서 그내역을 일일히 입력하고 있거든요.,..
>그런데.. 같은 형태를 가진(같은 레이어를 가진) 도면이 2000장 이상이데..
>
>혹시 레이어를 인식해서 자동적으로 내역을 작성하는 방법은 없나요...
>
>도와주세요....

=====================================================================


이상의 것과 제가 여쭙는 것과 관련이 있을 것 같습니다.

#3의 게시물이 제가 궁금한 것과 가장 많이 연관이 있습니다. 그런데 여기에 덧붙여서 영역들의 교집합의 면적을 구하는 방법이 리습으로 가능한가요? (교집합되는 부분이 많이 복잡하기 때문에 일일히 boundary를 하기가 번거롭고 잘못 계산할 가능성이 있습니다.)

제 아이디어도 일단 기본 영역들을 다른 레이어에 넣을 것입니다. 그래야만 리습에서 인식할 수 있을 것 같습니다.(#3 게시물에 의하면)
그리고 그 영역들의 교집합의 면적을 리습으로 구하려 합니다.

많은 좋은 말씀 부탁드립니다.




헬로우드림
당신에게는 힘이 많습니다.
그러니 혼자 앞서서 너무 빨리 가지마세요.
뒤에 오는 힘이 약한 이들이 많으니
기다렸다 함게 가십시오.

당신에게는 사랑이 많습니다.
그러나 혼자 앞서서 너무 크게 사랑하지 마세요.
뒤에 오는 작은 사랑을 가진 이들이 많으니
기다렸다가 함께 사랑하십시오.

당신에게는 지식이 많습니다.
그러나 혼자 앞서서 너무 높아지지 마세요.
뒤에 오는 배움에 목말라하는 이들이 많으니
기다렸다 함께 올라가십시오.

당신에게는 꿈이 많습니다.
그러나 혼자 앞서서 꿈을 너무 빨리 이루지마세요.
뒤에 오는 아직도 꿈을 품고 애태우고 있는 이들이 많으니
기다렸다가 함께 꿈을 이루십시오.

당신에게는 자유가 많습니다.
그러나 혼자 앞서서 자유를 너무 즐기지 마세요.
뒤에 오는 아직도 몸이 구속당하고 마음이 얽매인 이들이 많으니
기다렸다가 함께 자유를 누리십시오.

당신에게는 용기가 많습니다.
그러나 혼자 앞서서 용기를 너무 자랑하지마세요.
뒤에 오는 아직도 힘들어하며 망설이고 있는 이들이 많으니
기다렸다가 함께 용기를 펼치십시오.

출처 : 좋은글中에서
2015-09-30
16:26:08



  수정하기   삭제하기   추천하기   목록보기

Copyright 1999-2024 Zeroboard / skin by zero
구조설계의 미래를 준비하는 모임 [구조설계미래포럼]