프로그램
캐드 분류

break 리습을 만드는 중인데 foreach 질문 드립니다..

컨텐츠 정보

  • 237 조회
  • 7 댓글
  • 0 추천
  • 0 비추천
  • 목록

본문

(defun c:hh (/)
 (setvar "cmdecho" 0) (setq os (getvar "osmode")) (sssetfirst) (setq hid (list (cons 62 4)(cons 6 "HIDDEN")))
 (if (not (wcmatch (setq typ (cdr (assoc 0 (setq ent (entget (setq obj (car (entsel "n기준 객체를 선택하세요.: ")))))))) "ELLIPSE,*TEXT*"))
 (progn
  (prompt "n자를 객체를 선택하세요.: ")
  (setq objj (ssget) pt (getpoint "n자를 위치를 선택하세요. :") r 0)
  (repeat (sslength objj)
   (setq typ (cdr (assoc 0 (entget (ssname objj r)))))
   (setq int (vlax-invoke (vlax-ename->vla-object obj) 'IntersectWith (vlax-ename->vla-object (ssname objj r)) acExtendNone))
   (setq lst (cons (cons typ int) lst))
   (setq r (1+ r))
  )
   (foreach x lst (if (wcmatch (car x) "LINE")
     (progn
      (setq entt (entget (ssname objj 0)))
      (setq p1 (cdr (assoc 10 entt)) p2 (cdr (assoc 11 entt)))
      (setq int (cdr (car lst)) intt (inters p1 p2 pt (polar pt (+ (/ pi 2) (angle p1 p2)) (car pt)) nil))
      (if (or (inters p1 p2 pt (polar pt (+ (/ pi 2) (angle p1 p2)) (car pt)))
       (inters p1 p2 pt (polar pt (- (angle p1 p2) (/ pi 2)) (car pt))))
      (progn
       (if (>= (angle p1 p2) pi)
       (progn
        (cond ((>= (angle int intt) pi)
         (entmake (subst (cons 11 int) (assoc 11 entt) entt))
         (entmake (append (subst (cons 10 int) (assoc 10 entt) (subst (cons 11 intt) (assoc 11 entt) entt)) hid))
         (entmake (subst (cons 10 intt) (assoc 10 entt) entt)))
        )
        (cond ((< (angle int intt) pi)
         (entmake (subst (cons 11 intt) (assoc 11 entt) entt))
         (entmake (append (subst (cons 10 int) (assoc 10 entt) (subst (cons 11 intt) (assoc 11 entt) entt)) hid))
         (entmake (subst (cons 10 int) (assoc 10 entt) entt)))
        )
       )
       (progn
        (cond ((>= (angle int intt) pi)
         (entmake (subst (cons 10 int) (assoc 10 entt) entt))
         (entmake (append (subst (cons 10 int) (assoc 10 entt) (subst (cons 11 intt) (assoc 11 entt) entt)) hid))
         (entmake (subst (cons 11 intt) (assoc 11 entt) entt)))
        )
        (cond ((< (angle int intt) pi)
         (entmake (subst (cons 10 intt) (assoc 10 entt) entt))
         (entmake (append (subst (cons 10 int) (assoc 10 entt) (subst (cons 11 intt) (assoc 11 entt) entt)) hid))
         (entmake (subst (cons 11 int) (assoc 11 entt) entt)))
        )
       ))
      )
      (progn 
       (if (>= (angle p1 p2) pi)
       (progn
        (cond ((>= (angle int intt) pi)
         (entmake (subst (cons 11 int) (assoc 11 entt) entt))
         (entmake (append (subst (cons 10 int) (assoc 10 entt) entt) hid)))
        )
        (cond ((< (angle int intt) pi)
         (entmake (append (subst (cons 11 int) (assoc 11 entt) entt) hid))
         (entmake (subst (cons 10 int) (assoc 10 entt) entt)))
        )
       )
       (progn
        (cond ((>= (angle int intt) pi)
         (entmake (subst (cons 10 int) (assoc 10 entt) entt))
         (entmake (append (subst (cons 11 int) (assoc 11 entt) entt) hid)))
        )
        (cond ((< (angle int intt) pi)
         (entmake (append (subst (cons 10 int) (assoc 10 entt) entt) hid))
         (entmake (subst (cons 11 int) (assoc 11 entt) entt)))
        )
       ))
      ))
      (entdel (ssname objj 0))
     ))
   )
 ))
)
1. 기준 선을 선택
2. 자를 선을 선택
3. 자를 위치 선택
하면 선이 잘리게 되는데요.. 기준 선은 1개만 선택이 되고
자를 선은 아직 1개밖에 안되고 여러개 선택 할 때 에러가 뜨더라구요
여기서 lst에 모든 교차점에 다 저장이 되고 foreach 함수로 lst에 있는걸 순차적으로 하나씩 꺼내서 사용하는거 아닌가요? 혹시 repeat이 따로 또 들어가야 하나요??
그리고 중간에 굵게 표시해놓은 lst는 x로 하면 foreach가 안 먹는거 같은데 어떻게 해야 좋을까요ㄷㄷ

관련자료

댓글 7

수야12님의 댓글

entget으로 라인 데이터를 읽어 들이면  대충

((-1 . ) (0 . "LINE") (330 .

닐스몹님의 댓글

교차점을 이용해서 교차점에서 선택 지점까지 break 후 히든선으로 생성하는 리습 만들고 있습니다ㅠ

수야12님의 댓글

교차점 리스트를 다른곳에 사용하실려구 그러시나요?? 

여분필드1 여분필드2 여분필드3
전체 7,152 / 1 페이지
번호
제목
이름
알림 0