1. 컴퓨터 사양 (간략히) : Intel Core2 Duo 3.06GHz, 2.72GB RAM, NVIDIA GeForce9400
2. 캐드버전 과 종류 : 오토캐드2007
3. 운영체제(윈도우)버전과 비트수 : WindowsXP 32비트
4. 보조프로그램 사용유무 : 드림(DREAM)
——————————————————————————–
안녕하세요
불규칙한 다각형 경계선을 선택해서 그안에 포함된 문자객체의 SelectionSet을 만들었는데요
간혹 문자가 경계선에 걸쳐있어 wp옵션으로는 선택되지 않더라구요
계획하는 리습은 경계선안에 있는 문자는 선택해서 다른 작업을 하고 경계선안에 완전히 포함되지는 않지만 경계선에 걸쳐있는 문자는 갯수를 파악해서 다른 레이어로 지정해서 사용자의 확인을 거치는 작업을 할려고 합니다.
그래서 예전에 수야님의 도움을 받아….
(defun c:AT( / slRegion ptList slAll slWText slCText n)
(setq ntxt (getstring "n선택한 텍스트 앞에 추가할 내용을 입력하세요!!!n"))
(setq slRegion (entget (car (entsel "n행정구역 리/동구역 선택:"))) ptList '())(terpri)
(foreach k slRegion
(if (= (car k) 10)
(setq ptList (append ptList (list (cdr k))))
);;if end
)
(setq slWText (ssget "_WP" ptList '((0 . "TEXT"))))
(setq slCText (ssget "_CP" ptList '((0 . "TEXT"))))
요기서 CP옵션으로 선택한 것중 WP옵션과 중복되는(완전히 경계선내에 있는) 문자는 제외하고 경계선에 걸치는 문자만 다른 SelectionSet으로 변경할려하는데…
머 쉽게 slCText – slWText하면 될 것 같은데 잘 되지 않네요..
;(sssetfirst slText slText) ;;객체 선택
(setq n 0)
(repeat (sslength slText)
(setq ent (entget (ssname slText n))
otxt (cdr (assoc 1 ent))
ctxt (cons 1 (strcat ntxt " " otxt))
);;setq end
(entmod (subst ctxt (assoc 1 ent) ent))
(setq n (1+ n))
);;repeat end
(princ)
);;defun end
GeoEnLv.0
SelectionSet만들때 경계선에 걸치는(포함되지 않는) 객체만 Set을 만들고 싶어요
공유
ssget "F" (울타리 선택)을 사용해보심이…
그런데 저는 포함되는 객체는 다른 처리를 하고 경계선에 걸치는 객체는 따로 모아서 다른 레이어나 확인작업을 거칠려고 하기 때문에 별도의 다른 SelectionSet으로 만들려고 하고 있거든요.
ㅜ,ㅜ;;; 갠적으로 변수명이 넘 길어요
(defun c:AT( / ntxt ens en2 crspt slRegion ptList slAll slWText slCText n) (vl-load-com)
(defun sb:crosspoint( ss1 ss2 / e obj1 obj2 interxy )
(setq interxy '()
obj1 (vlax-ename->vla-object ss1)
obj2 (vlax-ename->vla-object ss2)
)
(setq interxy (vlax-invoke obj1 'intersectwith obj2 0));교차 좌표
interxy
)
(setq ntxt (getstring "n선택한 텍스트 앞에 추가할 내용을 입력하세요!!!n"))
(setq ens (car (entsel "n행정구역 리/동구역 선택:")) ptList '() nss (ssadd) n 0)
(setq slRegion (entget ens))
(foreach k slRegion
(if (= (car k) 10)
(setq ptList (append ptList (list (cdr k))))
);;if end
)
(setq slWText (ssget "_WP" ptList '((0 . "TEXT"))))
(setq slCText (ssget "_CP" ptList '((0 . "TEXT"))))
(repeat (sslength slCText)
(setq en2 (ssname slCText n))
(if (/= nil (setq crspt(sb:crosspoint ens en2)))
(setq nss (ssadd(ssname slCText n) nss)) )
(setq n (1+ n))
)
(sssetfirst nss nss) ;;확인용 지우셈~!!
(setq n 0)
(repeat (sslength slWText)
(setq ent (entget (ssname slWText n))
otxt (cdr (assoc 1 ent))
ctxt (cons 1 (strcat ntxt " " otxt))
);;setq end
(entmod (subst ctxt (assoc 1 ent) ent))
(setq n (1+ n))
);;repeat end
(princ)
);;defun end
수야님의 도움을 또 받았군요. 언젠가 책에서 보니깐 변수명의 길이는 큰 상관이 없다고 해서..계속 이렇게 쓰고 있어요. ㅠ ㅠ. .
근데 도저히 범접을 못하겠네요..
생전처음보는 문들이 수두룩하네요. ㅠㅠ
암튼 큰 숙제 풀어서 잠 잘자겠네요..감사합니다.
(setq slWText (ssget "WP" ptList '((0 . "TEXT")))) ->포함되는 객체
(setq slFText (ssget "F" ptList '((0 . "TEXT")))) -> 경계선 걸치는 객체
넘 잘되어요 수야님..
너무 감사하다고 또 남김니다..수야님 홧팅
개인적으로 kor_storm님께 정석입니다
코드란게 길어봤자 쓸모 없거든요 ^^;;
제가 막 문법을 띤 초보자라 쓸데없이 코드를 길게 만드는 습관이 쫌 있습니다 ㅜ.ㅜ;;;