프로그램
캐드 분류

win.lsp의 코드에 대해서….잘 모르겠습니다……..

컨텐츠 정보

  • 1,519 조회
  • 11 댓글
  • 0 추천
  • 0 비추천
  • 목록

본문

;예전에 사용하던….상용리습의 코드중 일부입니다…..지금은 상용이 아니기에….

;사용상 의문이 있어 질문드립니다…..
;Block WIN15 references itself
;*Invalid*
;error: Function cancelled 
;라는 에러가 뜨면서…실행이 중단되는데…..
;제 리습 실력으로는 도무지…해석이 안되서…도움 요청드립니다…..
;정상적으로 사용하려면….어느 부분이 수정되어야 하는지…….
;아시는 분….꼭 좀…..알려주셨음…합니다……..
;읽어주셔서…감사합니다……….

(defun m:WIN(/ CC CEC SSE E pt1 pt2 pt3 d1 pt4 ang ss ls no)(princ(strcat "ntWIN, Version " version "," logo ""))

(setvar "cmdecho" 0) (setq cor (getvar "orthomode"))
(MENUCMD "S=X")(MENUCMD "S=WIN")
;여기………
;(MENUCMD) 함수가 뭔지 잘 모르겠구요……..
(if(= wn nil) (setq wn "WIN15″))
;"WIN15″ 역시 잘 모르겠고…….
(setq wnk (getstring (strcat "n>> Enter Window Name<" wn ">: ")))
(if (/= wnk "") (setq wn wnk))
(MENUCMD "S= ")(MENUCMD "S= ")
(setvar "OSMODE" 512)
(initget 1) 
(setq pt1 (getpoint "n>> Upper-left Corner of Opening: NEAREST to "))
(while (/= pt1 nil) 
(setq pt2 (getpoint pt1 "n>>Upper-right Corner(or Enter @size
(setvar "OSMODE" 128)(setvar "orthomode" 0)
(setq pt3 (getpoint pt1 "n>> Touch Other side of Wall: PERPEND to "))
;하지만 여기까진 실행이 되는거 같습니다………..
(setvar "OSMODE" 0)(setvar "BLIPMODE" 0)
(setq ang (angle pt1 pt2))
(setq d1 (distance pt1 pt2))
(setq pt4 (polar pt1 ang (/ d1 1.1) ) )
(setq ss (ssget "C" pt3 pt4)) 
(RMV) ;이 넘이 문제인것 같기도 하구요…
(SETQ CEC (GETVAR "CECOLOR")) (SETQ SSE (SSGET PT1))
(SETQ E (ENTGET (SSNAME SSE 0))) (SETQ CC(CDR(ASSOC 62 E)))
(SETQ cel(CDR(ASSOC 8 E))) 
(SETLAY cel) ;이 넘이 말하는게 무엇인지 모르겠고…….
;여기서 부터……..
(COMMAND "COLOR" CC) ;여기에서…CC를 잘 모르겠습니다……
(command "LINE" pt1 pt3 "") (command "COPY" "L" "" pt1 pt2)
(command "TRIM" "L" "P" "") 
(repeat ls (setq no(1+ no) ) 
(command  (list (ssname ss no) pt4 ) ) )
(command "") (COMMAND "COLOR" cec) 
;여기서 cec를 잘 모르겠습니다….
(RTNLAY) ;이 것도 잘 모르겠어요……
(SETVAR "BLIPMODE" 0)
(SETLAY "WINDOW")    ;  여기….(setlay)를 잘 모르겠고…..
(command "INSERT" wn pt1 "" "" (rtd ang) )
(RTNLAY)
(setvar "OSMODE" 512)(setvar "orthomode" cor) 
;cor도 모르겠습니다….
(prompt "n>> If stop Window Creating, Strike Return Key. ") (prompt "n>> Otherwise, ")
(setq pt1 (getpoint "Pick Upper-left Corner of Opening: NEAREST to ") ) )  ; 여기 ) 가 왜 3개인지….
(setvar "OSMODE" 0) (princ) )
(defun C:WIN() (m:win)) (princ "ntWINdows creating loaded. Command: WIN") (princ)
;여기까지 입니다……….

관련자료

댓글 11 / 1 페이지

수야12님의 댓글

이런리습류는 함수끼리 서로 연결 돼 있기 때문에 통째로 있어야 사용이 가능합니다 

일단 눈에 보이는 함수만 해도 4개가 다른곳에 있고 변수 몇개도 다른곳에서 정보를 가져오네요.. 

idobj님의 댓글

그런 함수와 변수가 어떤게 있을까요?…..

꼭 찾아보고 수정해보고 싶어서요……..

상큼메론90님의 댓글

emoticon

예전에 질문한 것에 대한 확인 댓글 부탁드립니다. 질문만 올리시지 말고,  확인 댓글은 질문자님의 기본예의 입니다.

이 리습의 특징은 여러 함수들이 조각조각 나 있네요.

아래 리습을 통째로 복사/붙이기 하세요~

(defun c:WIN (/ CC CEC SSE E pt1 pt2 pt3 d1 pt4 ang ss ls no)   ;(princ (strcat "ntWIN, Version " version "," logo "")); 회사로고 불러오기입니다.   (setvar "cmdecho" 0)   (setq _OSM (getvar "osmode"))   (setq m:err *error* *error* *merrmsg*)   (setq cor (getvar "orthomode"))   ;(MENUCMD "S=X")(MENUCMD "S=WIN") ; 메뉴인데, 지금은 이런것이 쓰이지 않습니다.   (if (= wn nil) (setq wn "WIN15″)) ; win15.dwg 파일이 있어야 함.                                              ; win15는 블록이거나 dwg 파일이 아닐까 추측합니다.   (setq wnk (getstring (strcat "n>> Enter Window Name<" wn ">: ")))   (if (/= wnk "") (setq wn wnk))   ;(MENUCMD "S= ")(MENUCMD "S= ")   (setvar "OSMODE" 512)   (initget 1)   (setq pt1 (getpoint "n>> Upper-left Corner of Opening: NEAREST to "))   (while (/= pt1 nil)   (setq pt2 (getpoint pt1 "n>> Upper-right Corner(or Enter @size> Touch Other side of Wall: PERPEND to "))   (setvar "OSMODE" 0)   ;(setvar "BLIPMODE" 0) ; 이것도 캐드 2013부턴가? 재정의 하지 않으면 사용못함   (setq ang (angle pt1 pt2))   (setq d1 (distance pt1 pt2))   (setq pt4 (polar pt1 ang (/ d1 1.1)))   (setq ss (ssget "C" pt3 pt4))   (RMV) ; 레이어 입니다.   (SETQ CEC (GETVAR "CECOLOR"))   (SETQ SSE (SSGET PT1))   (SETQ E (ENTGET (SSNAME SSE 0)))   (SETQ CC (CDR (ASSOC 62 E)))   (SETQ cel (CDR (ASSOC 8 E)))   (SETLAY cel) ; 레이어 입니다.   (COMMAND "COLOR" CC)   (command "LINE" pt1 pt3 "")   (command "COPY" "L" "" pt1 pt2)   (command "TRIM" "L" "P" "")   (repeat ls   (setq no (1+ no))   (command (list (ssname ss no) pt4))   )   (command "")   (COMMAND "COLOR" cec) ; cec는 정의에서 색상을 얻었습니다.   (RTNLAY); 레이어 입니다.   ;(SETVAR "BLIPMODE" 0)   (SETLAY "WINDOW") ; 레이어 입니다.   (command "INSERT" wn pt1 "" "" (rtd ang))   (RTNLAY) ; 레이어 입니다.   (setvar "OSMODE" 512)   (setvar "orthomode" cor)   (prompt "n>> If stop Window Creating, Strike Return Key. ")   (prompt "n>> Otherwise, ")   (setq pt1 (getpoint "Pick Upper-left Corner of Opening: NEAREST to "))   )   (setvar "OSMODE" _OSM)   (princ) )

(princ "ntWINdows creating loaded. Command: WIN") (princ) ;====================================================================== (defun setlay (newlay)   (setq oldlay (getvar "clayer"))   (command "-layer" "m" newlay "") ) ;          (defun rtnlay ()      (command "-layer" "s" oldlay "") ) ;          (defun rmv (/ k e ll)   (setq k 0)   (repeat (sslength ss)           (setq e (entget (ssname ss k)))           (setq ll (cdr (assoc 8 e)))           (if (or (= ll "center")(= ll "cen"))               (ssdel (ssname ss k) ss)               (setq k (1+ k))           )   )   (setq ls (sslength ss) no -1) )

;;; 이쯤 하면 실행될 것 같네요~~~

상큼메론90님의 댓글

emoticon

테스트 해보니 에러가 나지 않는데, 무슨 에러가 난다는 것인지???

/

idobj님의 댓글

제가 이제 막 리습에 대한 책한권을 읽은 상태라 잘은 모르겠어요….

(defun c:win)에서…(defun c:winn)으로 고쳤습니다….중복을 피하려고…..

상큼메론90님의 댓글

emoticon

>> Touch Other side of Wall: PERPEND to    <—- 이 메시지는 반대편의 직각점을 찍으라는 것인데요. 직각점이 안잡히니까, 에러가 나는것 같아요~~~

테스트 해보면

명령: WIN >> Enter Window Name: >> Upper-left Corner of Opening: NEAREST to >> Upper-right Corner(or Enter @size> Touch Other side of Wall: PERPEND to >> If stop Window Creating, Strike Return Key. >> Otherwise, Pick Upper-left Corner of Opening: NEAREST to 명령:

이렇게 딱 떨어지게 리습이 완성되거든요~~~

.

idobj님의 댓글

문제는 리습이 아니고..블럭에 있다는 느낌이 들기도 하는군요…..

WIN15.DWG 화일을 단순히….INSERT시켜도…..

상큼메론90님의 댓글

emoticonemoticonemoticon

.

전체 7,700 / 351 페이지
RSS
번호
제목
이름

최근글


새댓글


알림 0