프로그램
캐드 분류

리습 오류 ( 블록 이름 지시선 추출 )

컨텐츠 정보

본문

블로그에서 배포한

” 블록 선택시, 지시선으로 이름 추출 ” 리습 입니다.

로드 하여 사용 하려하니 에러가 떠서

고수님들께 도움을 받고자 올려드립니다.

오류 내용 이미지로 첨부 합니다.

** 하기는 리습 입니다.

 

;;;;블럭이름 알려주는 지시선 리습

(defun c:blockname2text ( / bnt)

(setq bnt (getstring “nBlockName to Leader // Text(O)ne // Text(M)unti : “))

(if (or (eq bnt “”) (eq bnt “1”) (eq bnt “L”) (eq bnt “l”) (eq bnt nil)) (c:BlockNameLeader))

(if (or (eq bnt “2”) (eq bnt “O”) (eq bnt “0”)) (c:BlockNameText))

(if (or (eq bnt “3”) (eq bnt “M”) (eq bnt “m”)) (c:BlockNameTextM))

)

;********************************************

(defun c:BlockNameLeader ( / oldor ssent ent pt1 pt2 tx ttx htx latx stytx olddim oldTsty oldTgap olddtx dt01 TxtHeight ppw1 ppw2 vpw1 wx wy disxy)

;작업전정보저장

(setq oldtad (getvar “dimtad”)

olddtx (getvar “dimtxt”)

oldTsty (getvar “DIMTXSTY”)

olddim (getvar “dimscale”)

oldTgap (getvar “dimgap”)

oldor (getvar “orthomode”)

)

(setvar “osmode” 0)

(setvar “orthomode” 0)

;중간에 중지시 명령

(defun *error* ( msg )

(if (not (wcmatch (strcase msg t) “*break,*cancel*,*exit*”))

;설정복원

(progn

(setvar “dimtad” oldtad)

(setvar “dimtxt” olddtx)

(setvar “DIMTXSTY” oldTsty)

(setvar “dimscale” olddim)

(setvar “dimgap” oldTgap)

(setvar “osmode” 6647)

(setvar “orthomode” oldor))

(princ “nBlock on Leader Succes!!!! : “)

)

(princ)

)

;중간에 중지시 명령끝

;first block select

(prompt “n 지시선을 작성할 블록를 한개만 선택해주세요”)

(setq ssent (ssget “:S” (list (cons 0 “insert”)))) ;select

(while (eq ssent nil)

(prompt “n지시선을 작성 할 블럭을 한개만 선택해주세요”)

(setq ssent (ssget “:S” (list (cons 0 “insert”))))

)

(setq ent (ssname ssent 0)) ;entity 변환

(setq ssent nil) ;select defualt

;block size

(vla-GetBoundingBox (vlax-ename->vla-object ent) ‘MinPt ‘MaxPt)

(setq ppw1 (vlax-safearray->list MinPt)

ppw2 (vlax-safearray->list MaxPt)

vpw1 (list (car ppw2) (cadr ppw1));우하점

vpw2 (list (car ppw1) (cadr ppw2)) ;좌상점

wx (- (car ppw2) (car ppw1)) ;가로폭

wy (- (cadr ppw2) (cadr ppw1));높이

disxy (distance ppw1 ppw2);대각길이

txy (/ disxy 20);answkqldbf

);block sizeend

;블록정보추출

(setq tx (entget ent)

ttx (cdr (assoc 2 tx));text

latx (cdr (assoc 8 tx));layer

stytx oldTsty;text style

);블록정보추출끝

;txt size

(setq htx (getreal (strcat “nType Text Height !!! : 입니다”)))

(if (= htx nil) (setq htx (atof (rtos txy 2 0))))

;set

(setvar “DIMTXSTY” stytx) ;DIMTXTSTY 치수 문자 스타일을 지정

(setvar “dimtad” 1);지시선하단

(setvar “DIMTXT” 1) ; 문자높이

(setvar “DIMGAP” 0.1);지시선간격

(setvar “DIMLDRBLK” “OPEN30”) ;지시선 화살촉

(setvar “DIMASZ” 0.1) ;치수선과 지시선 화살촉의 크기를 조정

(setvar “DIMSCALE” (* htx 1));dimscale_문자로받아실수로변환

(setvar “DIMCLRD” 7) ;치수 보조선에 색상을 지정

(setvar “dimclrt” 3) ;치수 문자에 색상을 지정

;start leader

(setq pt1 (getpoint “n지시선 시작 포인터를 클릭하세요 : “))

(while (eq pt1 nil)

(setq pt1 (getpoint “n지시선 시작 포인터를 클릭하세요 : “))

)

(setq pt2 (getpoint pt1 “n지시선 시작 포인터를 클릭하세요 : “))

(command “-style” stytx “” 0.0 0.7 0.0 “no” “no” “no”)

(command “clayer” latx)

(command “leader” pt1 pt2 “a” ttx “”)

;2nd leader

(while (eq ssent nil)

(progn

(prompt “n 지시선을 작성할 블록를 한개만 선택해주세요 : 종료 “)

(setq ssent (ssget “:S” (list (cons 0 “insert”)))) ;select

(while (eq ssent nil)

(prompt “n선택오류~! 지시선을 작성 할 블럭을 한개만 선택해주세요 : 종료 “)

(setq ssent (ssget “:S” (list (cons 0 “insert”))))

)

(setq ent (ssname ssent 0) ;entity 변환

ssent nil) ;select defualt

(setq pt1 (getpoint “n지시선 시작 포인터를 클릭하세요 : “))

(while (eq pt1 nil)

(setq pt1 (getpoint “n지시선 시작 포인터를 클릭하세요 : “))

)

(setq pt2 (getpoint pt1 “n지시선 시작 포인터를 클릭하세요 : “))

;2nd블록정보추출

(setq tx (entget ent)

ttx (cdr (assoc 2 tx));text

latx (cdr (assoc 8 tx));layer

);2nd블록정보추출끝

(command “clayer” latx)

(command “leader” pt1 pt2 “a” ttx “”)

)

);while_end

(princ)

)

;;;;블럭이름 알려주는 리습

(defun c:BlockNameText (/ ent bls btx pt1)

(setq oldos (getvar “osmode”))

(setq oldort (getvar “orthomode”))

(setvar “osmode” 0)

(setvar “orthomode” 0)

(setq ent (car (entsel “nblock Select:”)))

(setq bls (entget ent))

(setq btx (cdr (assoc 2 bls)))

(setq pt1 (getpoint “nText Point : “))

(command “text” pt1 “” “” btx)

(setvar “osmode” oldos)

(setvar “orthomode” oldort)

(princ)

)

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;;;;;;;;end

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

(defun c:BlockNameTextM (/ ss ss1 btx pt1 ent n MinPt01 MaxPt01 rightbot lefttop righttop leftbot midPt wx wy tsize pt )

(prompt “이름을 표시할 블록를 선택해주세요!! “)

(setq ss (ssget (list (cons 0 “insert”)))) ;select

(setq pt (getstring “n좌상(LT)//좌하(LB)//우상(RT)

n//우하(RB)//중심(MC) : “))

(setq tsize (getdist (strcat “n문자 기본값:블럭의1/20” )))

(setq ss1 ss) ;ss 교체

(setq ss nil) ;ss값없애기

(setq n 0) ;numbering

(repeat (sslength ss1) ;반복작업

(setq ent (ssname ss1 n))

(vla-GetBoundingBox (vlax-ename->vla-object ent) ‘MinPt ‘MaxPt)

(setq MinPt01 (vlax-safearray->list MinPt)

MaxPt01 (vlax-safearray->list MaxPt)

rightbot (list (car MaxPt01) (cadr MinPt01) (max (caddr MinPt01) (caddr MaxPt01))) ;우하점

lefttop (list (car MinPt01) (cadr MaxPt01) (max (caddr MinPt01) (caddr MaxPt01))) ;좌상점

righttop (list (car MaxPt01) (cadr MaxPt01) (max (caddr MinPt01) (caddr MaxPt01))) ;우상점

leftbot (list (car MinPt01) (cadr MinPt01) (max (caddr MinPt01) (caddr MaxPt01))) ;좌하점

midPt (list (/ (+ (car MaxPt01) (car MinPt01)) 2)

(/ (+ (cadr MaxPt01) (cadr MinPt01)) 2)

(max (caddr MinPt01) (caddr MaxPt01)))

wx (- (car MaxPt01) (car MinPt01)) ;가로폭

wy (- (cadr MaxPt01) (cadr MinPt01)) ) ;높이

(setq btx (entget ent)) ;entityname 배열

(setq btx (cdr (assoc 2 btx))) ;entityname 배열가져오기

(setq pt pt) ;위치변경 선택

(if (or (eq pt “LT”) (eq pt “lt”)) (setq pt1 lefttop))

(if (or (eq pt “LB”) (eq pt “LT”)) (setq pt1 leftbot))

(if (or (eq pt “RT”) (eq pt “rt”)) (setq pt1 righttop))

(if (or (eq pt “RB”) (eq pt “rb”)) (setq pt1 rightbot))

(if (or (eq pt “MC”) (eq pt “mc”) (eq pt “”) (eq pt nil)) (setq pt1 midPt))

(setq tsize tsize) ; 문자사이즈입력받기

(if (eq tsize nil) (setq tsize (/ wy 10)))

(command “text” “j” “mc” pt1 tsize 0 btx)

(setq n (1+ n)); 반복횟수

)

(princ “nBlockName to Success!!!”)

(princ)

)

[출처] [리습] 블럭이름 알려주는 3종 리습 (철제모 [ 철구조물제작의모든것 ]) | 작성자 철구조물제작절대고수

리습
리습 오류
블록 이름
블록 이름 지시선
블록 이름 추출

관련자료

댓글 8

고개발님의 댓글

(defun c:blockname2text ( / bnt) (setq bnt (getstring "nBlockName to Leader // Text(O)ne // Text(M)unti : ")) (if (or (eq bnt "") (eq bnt "1") (eq bnt "L") (eq bnt "l") (eq bnt nil)) (c:BlockNameLeader)) (if (or (eq bnt "2") (eq bnt "O") (eq bnt "0")) (c:BlockNameText)) (if (or (eq bnt "3") (eq bnt "M") (eq bnt "m")) (c:BlockNameTextM)) ) ;******************************************** (defun c:BlockNameLeader ( / oldor ssent ent pt1 pt2 tx ttx htx latx stytx olddim oldTsty oldTgap olddtx dt01 TxtHeight ppw1 ppw2 vpw1 wx wy disxy) ;작업전정보저장 (setq oldtad (getvar "dimtad") olddtx (getvar "dimtxt") oldTsty (getvar "DIMTXSTY") olddim (getvar "dimscale") oldTgap (getvar "dimgap") oldor (getvar "orthomode") ) (setvar "osmode" 0) (setvar "orthomode" 0) ;중간에 중지시 명령 (defun *error* ( msg ) (if (not (wcmatch (strcase msg t) "*break,*cancel*,*exit*")) ;설정복원 (progn (setvar "dimtad" oldtad) (setvar "dimtxt" olddtx) (setvar "DIMTXSTY" oldTsty) (setvar "dimscale" olddim) (setvar "dimgap" oldTgap) (setvar "osmode" 6647) (setvar "orthomode" oldor)) (princ "nBlock on Leader Succes!!!! : ") ) (princ) ) ;중간에 중지시 명령끝 ;first block select (prompt "n 지시선을 작성할 블록를 한개만 선택해주세요") (setq ssent (ssget ":S" (list (cons 0 "insert")))) ;select (while (eq ssent nil) (prompt "n지시선을 작성 할 블럭을 한개만 선택해주세요") (setq ssent (ssget ":S" (list (cons 0 "insert")))) ) (setq ent (ssname ssent 0)) ;entity 변환 (setq ssent nil) ;select defualt ;block size (vla-GetBoundingBox (vlax-ename->vla-object ent) 'MinPt 'MaxPt) (setq ppw1 (vlax-safearray->list MinPt) ppw2 (vlax-safearray->list MaxPt) vpw1 (list (car ppw2) (cadr ppw1));우하점 vpw2 (list (car ppw1) (cadr ppw2)) ;좌상점 wx (- (car ppw2) (car ppw1)) ;가로폭 wy (- (cadr ppw2) (cadr ppw1));높이 disxy (distance ppw1 ppw2);대각길이 txy (/ disxy 20);answkqldbf );block sizeend ;블록정보추출 (setq tx (entget ent) ttx (cdr (assoc 2 tx));text latx (cdr (assoc 8 tx));layer stytx oldTsty;text style );블록정보추출끝 ;txt size (setq htx (getreal (strcat "nType Text Height !!! : 입니다"))) (if (= htx nil) (setq htx (atof (rtos txy 2 0)))) ;set (setvar "DIMTXSTY" stytx) ;DIMTXTSTY 치수 문자 스타일을 지정 (setvar "dimtad" 1);지시선하단 (setvar "DIMTXT" 1) ; 문자높이 (setvar "DIMGAP" 0.1);지시선간격 (setvar "DIMLDRBLK" "OPEN30") ;지시선 화살촉 (setvar "DIMASZ" 0.1) ;치수선과 지시선 화살촉의 크기를 조정 (setvar "DIMSCALE" (* htx 1));dimscale_문자로받아실수로변환 (setvar "DIMCLRD" 7) ;치수 보조선에 색상을 지정 (setvar "dimclrt" 3) ;치수 문자에 색상을 지정 ;start leader (setq pt1 (getpoint "n지시선 시작 포인터를 클릭하세요 : ")) (while (eq pt1 nil) (setq pt1 (getpoint "n지시선 시작 포인터를 클릭하세요 : ")) ) (setq pt2 (getpoint pt1 "n지시선 시작 포인터를 클릭하세요 : ")) (command "-style" stytx "" 0.0 0.7 0.0 "no" "no" "no") (command "clayer" latx) (command "leader" pt1 pt2 "a" ttx "") ;2nd leader (while (eq ssent nil) (progn (prompt "n 지시선을 작성할 블록를 한개만 선택해주세요 : 종료 ") (setq ssent (ssget ":S" (list (cons 0 "insert")))) ;select (while (eq ssent nil) (prompt "n선택오류~! 지시선을 작성 할 블럭을 한개만 선택해주세요 : 종료 ") (setq ssent (ssget ":S" (list (cons 0 "insert")))) ) (setq ent (ssname ssent 0) ;entity 변환 ssent nil) ;select defualt (setq pt1 (getpoint "n지시선 시작 포인터를 클릭하세요 : ")) (while (eq pt1 nil) (setq pt1 (getpoint "n지시선 시작 포인터를 클릭하세요 : ")) ) (setq pt2 (getpoint pt1 "n지시선 시작 포인터를 클릭하세요 : ")) ;2nd블록정보추출 (setq tx (entget ent) ttx (cdr (assoc 2 tx));text latx (cdr (assoc 8 tx));layer );2nd블록정보추출끝 (command "clayer" latx) (command "leader" pt1 pt2 "a" ttx "") ) );while_end (princ) ) ;;;;블럭이름 알려주는 리습 (defun c:BlockNameText (/ ent bls btx pt1) (setq oldos (getvar "osmode")) (setq oldort (getvar "orthomode")) (setvar "osmode" 0) (setvar "orthomode" 0) (setq ent (car (entsel "nblock Select:"))) (setq bls (entget ent)) (setq btx (cdr (assoc 2 bls))) (setq pt1 (getpoint "nText Point : ")) (command "text" pt1 "" "" btx) (setvar "osmode" oldos) (setvar "orthomode" oldort) (princ) ) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;end ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (defun c:BlockNameTextM (/ ss ss1 btx pt1 ent n MinPt01 MaxPt01 rightbot lefttop righttop leftbot midPt wx wy tsize pt ) (prompt "이름을 표시할 블록를 선택해주세요!! ") (setq ss (ssget (list (cons 0 "insert")))) ;select (setq pt (getstring "n좌상(LT)//좌하(LB)//우상(RT) n//우하(RB)//중심(MC) : ")) (setq tsize (getdist (strcat "n문자 기본값:블럭의1/20" ))) (setq ss1 ss) ;ss 교체 (setq ss nil) ;ss값없애기 (setq n 0) ;numbering (repeat (sslength ss1) ;반복작업 (setq ent (ssname ss1 n)) (vla-GetBoundingBox (vlax-ename->vla-object ent) 'MinPt 'MaxPt) (setq MinPt01 (vlax-safearray->list MinPt) MaxPt01 (vlax-safearray->list MaxPt) rightbot (list (car MaxPt01) (cadr MinPt01) (max (caddr MinPt01) (caddr MaxPt01))) ;우하점 lefttop (list (car MinPt01) (cadr MaxPt01) (max (caddr MinPt01) (caddr MaxPt01))) ;좌상점 righttop (list (car MaxPt01) (cadr MaxPt01) (max (caddr MinPt01) (caddr MaxPt01))) ;우상점 leftbot (list (car MinPt01) (cadr MinPt01) (max (caddr MinPt01) (caddr MaxPt01))) ;좌하점 midPt (list (/ (+ (car MaxPt01) (car MinPt01)) 2) (/ (+ (cadr MaxPt01) (cadr MinPt01)) 2) (max (caddr MinPt01) (caddr MaxPt01))) wx (- (car MaxPt01) (car MinPt01)) ;가로폭 wy (- (cadr MaxPt01) (cadr MinPt01)) ) ;높이 (setq btx (entget ent)) ;entityname 배열 (setq btx (cdr (assoc 2 btx))) ;entityname 배열가져오기 (setq pt pt) ;위치변경 선택 (if (or (eq pt "LT") (eq pt "lt")) (setq pt1 lefttop)) (if (or (eq pt "LB") (eq pt "LT")) (setq pt1 leftbot)) (if (or (eq pt "RT") (eq pt "rt")) (setq pt1 righttop)) (if (or (eq pt "RB") (eq pt "rb")) (setq pt1 rightbot)) (if (or (eq pt "MC") (eq pt "mc") (eq pt "") (eq pt nil)) (setq pt1 midPt)) (setq tsize tsize) ; 문자사이즈입력받기 (if (eq tsize nil) (setq tsize (/ wy 10))) (command "text" "j" "mc" pt1 tsize 0 btx) (setq n (1+ n)); 반복횟수 ) (princ "nBlockName to Success!!!") (princ) )

고개발님의 댓글

확인했습니다. ㅠㅠ 관련된 문제는 최대한 빠르게 수정해 보도록 할께요 ㅠㅠ 아래 댓글로 문의하신 코드 넣었습니다.

구와와아아님의 댓글

마스터님

현재 글 수정하려니

글이 전부 깨집니다.

추후에 질문 또는 답글 할 시

표기 하도록 하겠습니다.

고개발님의 댓글

에디터 텍스트 탭 선택 후

Lisp Code 넣어주세요

 

에디터 개선해보도록 노력할께요~~

불편하신 점 있으시면,  좌측 그룹메뉴에 “고개발 연구소”에 의견 남겨주세요~~^^

속도는 최대한 빠른 시일내로 개선해보도록 하겠습니다!!

구와와아아님의 댓글

수야님 매번 답변이 느려 죄송합니다 ^^;; 업무에 치여 살다보니 …

메일 주소 남겨드립니다.

jth958@naver.com

오늘 하루도 좋은 하루 되십시오 ^^

수야12님의 댓글

카페 게시글 복사 붙혀넣기 하셨나봐요?? 게시글 복사 붙혀넣기 과정에서 이상한 문자들이 추가 되서 그럽니다 제 컴퓨터에서는 물음표가 추가 됐네요 구문이 긴 리습은 복사붙혀넣기하시기가 불편하니메일 알려주시면 이상한 문자 제거한 정상 리습 보내드릴께요

구와와아아님의 댓글

수야님 안녕하세요

출처 관련 해서 답글 드립니다.

답변이 늦어져 죄송합니다 ^^;

https://cafe.naver.com/seeun98/1272

수야12님의 댓글

저는 일단 리습을 실행해보고 오류를 찾는 스타일이라서 그런데 이거 원본 볼 수 있는 블로그 링크좀 걸어주실래요 검색해보니 블로그가 아니라 카페가 나오는데 이거 확인하려고 가입하기는 싫어서요 왜 이게시물 복사붙혀넣기 안하냐고 물으신다면 코드 게시글에 대한 공지사항 한번 읽어보시고요 ㅎㅎ;;

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