리습 오류 ( 블록 이름 지시선 추출 )
컨텐츠 정보
- 39 조회
- 8 댓글
- 0 추천
- 0 비추천
- 목록
본문
블로그에서 배포한
” 블록 선택시, 지시선으로 이름 추출 ” 리습 입니다.
로드 하여 사용 하려하니 에러가 떠서
고수님들께 도움을 받고자 올려드립니다.
오류 내용 이미지로 첨부 합니다.
** 하기는 리습 입니다.
;;;;블럭이름 알려주는 지시선 리습
(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종 리습 (철제모 [ 철구조물제작의모든것 ]) | 작성자 철구조물제작절대고수
리습리습 오류
블록 이름
블록 이름 지시선
블록 이름 추출
관련자료
고개발님의 댓글
(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)
)