win.lsp의 코드에 대해서….잘 모르겠습니다……..
컨텐츠 정보
- 1,519 조회
- 11 댓글
- 0 추천
- 0 비추천
- 목록
본문
;예전에 사용하던….상용리습의 코드중 일부입니다…..지금은 상용이 아니기에….
;*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 ""))
(while (/= pt1 nil)
관련자료
상큼메론90님의 댓글
![]()
예전에 질문한 것에 대한 확인 댓글 부탁드립니다. 질문만 올리시지 말고, 확인 댓글은 질문자님의 기본예의 입니다.
이 리습의 특징은 여러 함수들이 조각조각 나 있네요.
아래 리습을 통째로 복사/붙이기 하세요~
(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님의 댓글
![]()
>> 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 명령:
이렇게 딱 떨어지게 리습이 완성되거든요~~~
.







