프로그램
캐드 분류

치수을 선택하여 "치수의 문자 크기"을 알고싶습니다 헬프미요<br>치수을 선택하여 "치수의 문자 크기"을 알고싶습니다

컨텐츠 정보

  • 199 조회
  • 23 댓글
  • 0 추천
  • 0 비추천
  • 목록

본문

노가다 인생….LISP으로 스마트하게……
치수을 선택하여 "치수의 문자 크기"을 알고싶습니다
공부하다 보니 이걸 알려면
치수가 가지고 있는 문자의 높이 변수 DIMTXT와
치수가 가지고 있는 전체 치수 축척 변수 DIMSCALE에 데이타을 빼내어
DIMTXT x DIMSCALE =치수문자의 크기을 알수가 있네요……
며칠째 시간이 지나도 해결될 기미가 안보여 올립니다.
시원한 해답을 부탁 드립니다


조건—————————————————–
치수문자 특성 내용:
치수 문자높이(DIMTXT) : 2.5
전체 치수 축척(DIMSCALE) : 1
검증 : 치수문자을 explode을 하였을때 : 2.5
(DIMTXT x DIMSCALE =치수문자의 크기)


첫번째 프로그램—————————————————–
(defun c:ff(/ e dimname a diment dimtxh dimsc)
 (setq e(car(entsel "n치수선택:")))
 (setq dimname(cdr(assoc 3 (entget e))))
 (setq a (tblobjname "DIMSTYLE" dimname))
 (setq diment(entget a))
 (if(assoc 40 diment)(setq dimsc(cdr(assoc 40 diment)))(setq dimsc 1.0))
 (setq dimtxh(cdr(assoc 140 diment)))
 (princ "n치수스타일=")(princ dimname)
 (princ "n치수글꼴크기=")(princ dimtxh)
 (princ "n치수스케일=")(princ dimsc)
 (princ)
 )


결과
명령: FF
치수선택:
치수스타일=STANDARD
치수글꼴크기=3.0
치수스케일=1.0


프로그램 결과에 대한 해결방안 :
치수글꼴크기=3.0 —->정수아닌 소숫점도 인식하는지??
치수스케일=1.0 ——->치수을 선택하여 치수가 가지고있는 치수문자 크기의 DATA을 가져오는지????


 


두번째 프로그램—————————————————–
아키모아에서 별별별님이 test로 올린건데요
(defun c:test( / en ent ds)
 (and
 (setq en (car (entsel "n치수축척을 설정할 치수 선택:")))
 (setq ent (entget en '("*")))
 (= (cdr (assoc 0 ent)) "DIMENSION")
 (if (setq ds (cdr (assoc 1040 (cdr (assoc "ACAD" (cdr (assoc -3 ent)))))))
 (setvar "dimscale" ds)
 (setvar "dimscale" 1)
 )
 )
 (princ "nDimScale : ") (getvar "dimscale")
)



상기와 같은 조건의 결과
명령: test
치수축척을 설정할 치수 선택:
DimScale : 2.0
명령: _DIMSCALE
DIMSCALE에 대한 새 값 입력 <2.0000>:     ————>으로 변경됨


 


프로그램 결과에 대한 해결방안 :
치수스케일=2.0 ——->  원하지 않은 결과로 진단이 어려움????


노가다 인생….LISP으로 스마트하게…… 
치수을 선택하여 "치수의 문자 크기"을 알고싶습니다
공부하다 보니 이걸 알려면
치수가 가지고 있는 문자의 높이 변수 DIMTXT와
치수가 가지고 있는 전체 치수 축척 변수 DIMSCALE에 데이타을 빼내어
 DIMTXT x DIMSCALE =문자의 크기을 알수가 있네요……
며칠째 시간이 지나도 해결될 기미가 안보여 올립니다.
시원한 해답을 부탁 드립니다

관련자료

댓글 23

hsunbae님의 댓글

아키모아에 별별별님이 올린건데요 치수문자 스케일을 볼 수 있는것 같네요.  프로그램 조건이 틀리고요…. (defun c:test( / en ent ds)  (and  (setq en (car (entsel "n치수축척을 설정할 치수 선택:")))  (setq ent (entget en '("*")))  (= (cdr (assoc 0 ent)) "DIMENSION")  (if (setq ds (cdr (assoc 1040 (cdr (assoc "ACAD" (cdr (assoc -3 ent)))))))  (setvar "dimscale" ds)  (setvar "dimscale" 1)  )  )  (princ "nDimScale : ") (getvar "dimscale") )

hsunbae님의 댓글

치수문자을 explode을 하였을때 문자 크기 "9″가 나와야 되는데 실행해보니 치수글꼴크기= 3 치수스케일= 1.0 치수문자의 크기 "3″가 나오네요~ 치수가지고있는 정보 인 치수스케일에 문제가 있어 보입니다. 치수스케일 "3″이 나와야 되는데 시간 되시면 한번 더 봐주셨으면 합니다 ~ 식사 맛있게 드시구요~ 

hsunbae님의 댓글

아~그렇군요 컴이 멀(nil) 멀(nil)  어떻하라고~ 해서 많이 놀랬습니다  수야12님 감사합니다~ 즐거운 하루 되시고요….

수야12님의 댓글

수정했습니다 스케일이 기본 스케일(1.0)이면 정보가 잡히지 않네요 ㅎㅎ;;;

hsunbae님의 댓글

오~오~ 역시 이것 때문에 국내에서 답을 못 찾아 미쿡까지 같다왔는데~  답을 주셨네요~ 감사합니다~

명령: FF

치수선택: 치수스타일=STD 치수글꼴크기=3.5 치수스케일=nil

" nil " 이라고 나오는데  제가  멀 잘 못하고 있는거 같습니다  도와주세요~

수야12님의 댓글

emoticon 수고하세요  

hsunbae님의 댓글

감사 합니다 짜집기 하기엔 어려울것 같은데 천번 중에 한번은 되거라고 믿습니다….. 

상큼메론90님의 댓글

emoticon

그리고 치수문자 크기도 다른조건에서 다르게 나온다면

뭐하남 님께서 올려주신 리습으로  

(defun c:123( / a b h)  (if (setq a (car (entsel)))   (progn    (setq b (tblobjname "BLOCK" (cdr (assoc 2 (entget a)))))    (while (and (setq b (entnext b)) (/= (cdr (assoc 0 (entget b))) "MTEXT")))    (setq h (cdr (assoc 43 (entget b))))   )  )  (princ "n문자 높이:") (princ h) (princ) )

짜집기 한번 해보시죠~~~

리습 공부하는데 도움이 될겁니다.

.

상큼메론90님의 댓글

emoticon

아래 두줄을  삽입하세요 dimscale <1> 일때 정상으로 1로 됩니다.

(setq dimobj (vlax-ename->vla-object e)) (setq scale (vla-get-scalefactor dimobj))

그리고 아래것도 추가해야 되겠죠~

(princ "   치수 스케일=")(princ scale)

이런 리습이 많이 사용되나요? 캐드하면서 한번도 사용해 본적이 없는 리습형태라서~~~

.

hsunbae님의 댓글

원초적으로 치수을 폭파하지 않고 치수가 가지고 있는 값을 제가 찾고자 하는값이  xdata에서 값인 것 같군요 이걸 풀고자 했는데 해답이 없는 건거요…. 부탁 드립니다

뭐하남님의 댓글

"치수 문자크기"도 다른 조건에 도면에서는 값이 틀리게 나오는데 이유? 스타일이 같아도 수동으로 수정하게 되면 xdata에서 값을 가져와야 합니다. 이미 제가 답변 드린건데… 할말이 없군요.

hsunbae님의 댓글

주신 프로그램을 조금 정리을 했습니다 (defun c:ff (/ e dimname a diment dimtxh dimsc xd ts lst)  (setq e (car (entsel "n   치수축척을 설정할 치수 선택:")))  (setq dimname (cdr (assoc 3 (entget e))))  (setq a (tblobjname "DIMSTYLE" dimname))  (setq diment (entget a))

 (setq lst (entget e '("ACAD")))  (setq xd (cdr (assoc 1040 (cdadr (assoc -3 lst)))))  (setq ts (* (getvar "dimtxt") xd))     (if (assoc 40 diment) (setq dimsc (cdr (assoc 40 diment))) (setq dimsc 1.0))

 (setq dimtxh (cdr (assoc 140 diment)))  (princ "n   치수 스타일=")(princ dimname)  (princ "   치수글꼴크기=")(princ ts)  (princ "   치수 스케일=")(princ xd)  (setq div (/ ts xd))  (princ "   치수 문자크기=")(princ div)  (setvar "dimscale" xd)  (setvar "dimtxt" div)  (princ "n   Setting DimScale & Dimtxt")  (princ)  ) 치수축척을 설정할 치수 선택:; 오류: 잘못된 인수 유형: numberp: nil

치수 스케일이 1 일때도 되게 끔 해주시면 감사하겠습니다 "치수 문자크기"도 다른 조건에 도면에서는 값이 틀리게 나오는데 이유가 뭘까요???

hsunbae님의 댓글

짜주신 건 찾고자 하는 플로그랜 내용 중에 하나입니다  감사합니다… 치수에서 dimtxt 와 dimscale값을  찾을려고 하는거구요  "글꼴에 크기"는 최종 검증 하기위한  방법이며 결국 치수을 찍어서 도면환경이 같은 치수을 셋팅하기 위해서 입니다

hsunbae님의 댓글

굳입니다요~ 감사 하구요 (defun c:ff (/ e dimname a diment dimtxh dimsc xd ts lst)  (setq e (car (entsel "n   치수축척을 설정할 치수 선택:")))  (setq dimname (cdr (assoc 3 (entget e))))  (setq a (tblobjname "DIMSTYLE" dimname))  (setq diment (entget a))

 (setq lst (entget e '("ACAD")))  (setq xd (cdr (assoc 1040 (cdadr (assoc -3 lst)))))  (setq ts (* (getvar "dimtxt") xd))     (if (assoc 40 diment) (setq dimsc (cdr (assoc 40 diment))) (setq dimsc 1.0))

 (setq dimtxh (cdr (assoc 140 diment)))  (princ "n   치수 스타일=")(princ dimname)  (princ "n   치수글꼴크기=")(princ ts)  (princ "n   치수 스케일=")(princ xd)  (setq div (/ ts xd))  (princ "n   치수 문자크기=")(princ div)  (princ)  )  (princ "n   치수 문자크기=")(princ dimtxh) 가 출력값이 정상적이지 않아서 역산출으로 하니  정상적으로 됩니다

시간이 되시면 치수 스케일이 1 일때도 되게 끔 해주시면 감사하겠습니다

상큼메론90님의 댓글

emoticon

찔끔 고쳐서 고친 표시가 안나네요~~~

(defun c:ff (/ e dimname a diment dimtxh dimsc xd ts lst)  (setq e (car (entsel "n치수선택:")))  (setq dimname (cdr (assoc 3 (entget e))))  (setq a (tblobjname "DIMSTYLE" dimname))  (setq diment (entget a))

 (setq lst (entget e '("ACAD")))  (setq xd (cdr (assoc 1040 (cdadr (assoc -3 lst)))))  (setq ts (* (getvar "dimtxt") xd))     (if (assoc 40 diment) (setq dimsc (cdr (assoc 40 diment))) (setq dimsc 1.0))

 (setq dimtxh (cdr (assoc 140 diment)))  (princ "n치수 스타일=")(princ dimname)  (princ "n치수글꼴크기=")(princ ts)  (princ "n치수 스케일=")(princ xd)  (princ)  ) ;============================= ;;; 질문의 내용과 맞는지 모르겠네요~~~~

;

상큼메론90님의 댓글

emoticon

댓글이 많이 달려서

뭔가 쓰고 가야겠다는 어떤 의무감이 들어서~~~

.

hsunbae님의 댓글

보내주신 화일은 치수 문자가 안보이네요 보안이 걸려서 캐드화일은 안되고 참조 할 PNG화일 보냅니다

초기 도면작업 시 치수 작업전에 쓰는 리습입니다 (defun c:vv1() ;(setvar "cmdecho" 0)     (prompt "n  Drawing Scale :  < Defalt = ")     (setq m1 (getstring " > : "))     (setvar "ltscale" 1)     (setvar "DIMLFAC" 1)     (setvar "DIMTXT" 3) ;    (command "ltscale" 1 "" ) ;    (command "DIMLFAC" 1 "" ) ;    (command "DIMTXT" 3 "" )     (command "dimscale" m1)     (setq ds (getvar "dimscale"))      (setq ts (* ds 10))     (command "ltscale" ts) ;    (setvar "cmdecho" 1)     (princ) ) 다른 분들이 구현하지 않은 부분이라 잘 풀리지가 않네요…… 치수 환경을 볼때는 ;;라인 스케일,디멘전 스케일등 상태바에서 볼수있는 리습입니다 (DEFUN c:v1() (setvar "cmdecho" 0) (setvar "osmode" 0) (setq sc (getvar "dimscale"))  ;dimscale (setq th (* ds 3.0)) (setq sl (getvar "ltscale"))       ;linescale (setq DL (getvar "DIMLFAC"))   ;dim 척도 (setq DX (getvar "DIMTXT"))   ;문자높이 ;(setq sp (getvar "snap"))       ;snap ;(setq er (* sc 1))               ;snap 기본값 ;(command "snap" er "") ;(command "snap" "off") (progn (setq str(strcat "치수척도: [1/"(rtos DL 2 2)"]   " "문자높이: ["(rtos DX 2 1)"]    " "치수스케일: ["(rtos sc 2 1)"]   " "라인스케일: ["(rtos sl 2 1)"]    "  "좌표:" "")) (grtext -1 str) (princ)   )  )

;"치수척도: [1/"(rtos DL 2 2)"]   " "치수스케일: ["(rtos sc 2 1)"]    " ;"라인스케일: ["(rtos sl 2 1)"]    " "문자높이: ["(rtos DX 2 1)"]    "

이 프로그램으로  봅나다

뭐하남님의 댓글

(defun c:123( / a b h)  (if (setq a (car (entsel)))   (progn    (setq b (tblobjname "BLOCK" (cdr (assoc 2 (entget a)))))    (while (and (setq b (entnext b)) (/= (cdr (assoc 0 (entget b))) "MTEXT")))    (setq h (cdr (assoc 43 (entget b))))   )  )  (princ "n문자 높이:") (princ h) (princ) )

뭐하남님의 댓글

참고로 말씀드리자면 스타일은 같은데 문자 높이가 다를 수가 있습니다.(첨부파일) 고로… 스타일의 문자 크기*dimscale = 문자크기 (잘못된 계산임) 차라리 치수에서 문자만 뽑아 문자 높이를 알아내는 것이 정확해보이네요.

hsunbae님의 댓글

저도 제가 무슨말을 하는지 모르겠습니다 말씀이라면 맞다는 애기인데……조건에 답은 아니 나오고…… 먼 하늘만 봅니다

hsunbae님의 댓글

시간내서 해주시는건데~ 노고에 제가 낯이 없네요 본인의 의도와는 차이가 있어서 혹 다른도면 수정을 할려고하니 딤스케일이 맞지 않아서 다들 황당해 하셨을 겁니다 기존 치수을 찍어서 같은 조건으로 치수작업을 할려고 했던거였습니다 수야12님이  짜주신거 대로만 되면 되는데

실상 결과는 (DIMTXT x DIMSCALE =치수문자의 크기)이 조건에 값이 아니었던 것이죠  물러물러 풀러가는 중에 치수스케일=1.0 ——->그럼 이부분에서는 치수스케일에 따라 값이 나오는지 궁급합니다 PS. 치수를 폭파는 검증(확인) 차원에서 그냥 한거구요

뭐하남님의 댓글

뭘 질문하시는지 모르겠네요?

소숫점 인식? 3.0은 정수가 아닌 실수임

수야12님의 댓글

소수점도 인식합니다~! 답을 알고 계신데 뭐가 더 궁금하신지 모르겠네요   (princ "n치수문자 실제크기=")(princ (* dimtxh dimsc)) <= 이거 한줄 추가요 혹시 어디다 추가요? 하실까봐  위치 알려드립니다 제가 만든 리습 밑부분 (princ) 위에다가 추가요 ㅎㅎ;; 음 게시글을 다시 읽어보니 치수를 폭파 하신다는데 그러면 그때부터 그치수는 치수가 아니라 텍스트로 구분 됩니다 그럼 위에 리습은 응답을 뭥미?? 라고 하겠죠emoticon

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