CAFE

★ CAD/LISP/분과 Q&A

Re:Re:선택한 객체만 남기기에서 LOCK된 레이어는 선택이 안되게 수정

작성자서언호|작성시간15.03.09|조회수1,231 목록 댓글 8

이 건 선택이 안되는 것입니다.


(defun c:zz ( / sl-ens fl p1 p3 ls hi temp layers ss  layer_a laylist  layer_l)

 (defun sl-ens (ss) (vl-remove-if 'listp (mapcar 'cadr (ssnamex ss))))

 (defun foo (layers)

  (ssget "x" (append (list (cons -4 "<OR")) (mapcar '(lambda (l) (cons 8 l)) layers) (list (cons -4 "OR>"))))

 )

 (setvar "cmdecho" 0)

 (command "_.undo" "_be") 

 (princ " = LAYER ALL OFF")

 (setq laylist (ai_table "LAYER" 4))

 (foreach layer_a laylist

    (if (eq 4 (logand 4 (cdr (assoc 70 (entget (tblobjname "LAYER" layer_a))))))

        (setq llayers (cons layer_a llayers))

    )

 )

 (sssetfirst)

 (princ "\n객체 선택: ")

 (while (and (not fl) (= 3 (car (setq p1 (grread nil 12 2)))))

  (if (setq temp (ssget (setq p1 (cadr p1))))

   (progn

    (foreach en (sl-ens temp)

     (setq layer (cdr (assoc 8 (entget en))))

     (if (and (not (vl-position layer layers)) (not (vl-position layer llayers))) (setq layers (cons layer layers)))

    )

    (if (setq ss (foo layers)) (foreach en (sl-ens ss) (redraw en 3)))

   )

   (progn

    (princ "\n반대 구석 지정: ")

    (while (= 5 (car (setq p3 (grread t 13 0))))

     (redraw) 

     (setq p3 (cadr p3))

     (setq ls  (list p1 (list (car p3) (cadr p1) (caddr p1)) p3 (list (car p1) (cadr p3) (caddr p1))))

     (setq hi (if (< (car p1) (car p3)) 0 1)) 

     (mapcar '(lambda ( a b ) (grdraw a b -1 hi)) ls (append (cdr ls) (list p1)))

    )

    (if (listp (setq p3 (cadr p3)))

     (if (setq temp (ssget (if (< (car p1) (car p3)) "_W" "_C") p1 p3)) 

      (progn

       (foreach en (sl-ens temp)

        (setq layer (cdr (assoc 8 (entget en))))

        (if (and (not (vl-position layer layers)) (not (vl-position layer llayers))) (setq layers (cons layer layers)))

       )

       (if (setq ss (foo layers)) (foreach en (sl-ens ss) (redraw en 3)))

      )

     )

     (setq fl t)

    )

    (redraw)

   )

  )

 )

 (redraw)

 (if layers

  (progn

    (command "_.LAYER" "_off" "*" "y" "")

    (foreach layer layers

      (command "_.LAYER" "_on" layer "")

    )

  )

 ) 

 (command "undo" "e")

 (setvar "cmdecho" 1)

 (if (setq ss (ssget "x")) (foreach en (sl-ens ss) (redraw en 4)))

 (princ)

)


다음검색
현재 게시글 추가 기능 열기

댓글

댓글 리스트
  • 작성자아름이 | 작성시간 15.03.09 위 플그램은 layer all off 문구만 나오고 캐드화면은 아무 변화가 없습니다.
    객체를 선택할때 (ssget ":L") 기능처럼 잠긴객체는 선택조차 안되게 하고 싶습니다.
  • 작성자서언호 작성자 본인 여부 작성자 | 작성시간 15.03.09 헐.. 그럼 작동을 안하는 거네요?
    그럼.. zz 로 실행하면.. layer all off 만 나타나고.. "객체선택" 부터 작동되지 않고, 아무 반응이 없다는 말씀이세요?
    오랜 만에 테스트까지 해보고 올린 건데..ㅠㅠ
    혹시 몰라서 본글의 맨 아래 zz.lsp 를 올려 두었습니다.
    작동이 되냐 안되냐는 수정할 방향과 상관있기 때문에.. 한번 더 테스트 부탁드릴 께요.. 저는 확실히 잘 됩니다.
  • 작성자아름이 | 작성시간 15.03.09 퇴근후 집에서 테스트해볼께요^^

  • 작성자아름이 | 작성시간 15.03.09 언호님..오~~정말 잘되네요..너무 신기해요^^신기해서 여러번 테스트해보고 있습니다. 가끔 부탁드릴게요..(Your Winner!~이십니다.)
    언호님..그런데.~객체선택후 엔터 안치고 ESC해도 HIGHLIGHT(점선)이 그대로 남아 있네요..regen을 해야 점선이 없어지네요..
    ESC하면 점선이 없어지면 더 좋겠지만요^^
  • 작성자서언호 작성자 본인 여부 작성자 | 작성시간 15.03.09 그건 원본을 최대한 존중해서 만들다 보니 그리 된 것입니다. 원본에도 그 현상은 있었거든요..
    말씀하신 사항을 수정해서 답글로 올려 놓았습니다. 확인해 보시고 말씀해 주세요..
댓글 전체보기
맨위로

카페 검색

카페 검색어 입력폼