Chuyển đến nội dung
Diễn đàn CADViet
Nguyen Hoanh

Lisp Chuyển Đổi Mã Font Chữ Trong Autocad

Các bài được khuyến nghị

mình load file VLX lên và chuyển mã cho chữ "rãnh" thì rất hoàn hảo.

Khi dùng hàm DetectFont cho chữ "rãnh" thì trả về nil

@Hoanh xem lại nó có vấn đề gì ởddaaay. Hy vọng thông qua nó sẽ giải quyết được các vấn đề còn tồn đọng lisp

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

Mình chuyển ngôn ngữ máy về tiếng anh cad báo code như sau thì chạy ok. Mình nghỉ máy chạy đúng, máy chạy sai là do hai biến này.

DWGCODEPAGE = "ANSI_1252", SYSCODEPAGE = "ANSI_1252"

@Nguyen Hoanh

Bạn có thể thêm lựa chọn fontstyle cho font  mình cần chuyễn sang luôn không? (đỡ phải chọn lại text để set lại font)

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

Dưới đây là lisp convert các mã font thông dụng (unicode, tcvn, vni, xược) trong AutoCAD. Chương trình tự nhận dạng mã font hiện hành của đối tượng text.

 

Sau khi Appload xong:

Dùng lệnh cfu để chuyển font sang unicode

Dùng lệnh cft để chuyển font sang tcvn

Dùng lệnh cfv để chuyển font sang vni

Dùng lệnh cfx để chuyển font sang xược (/)

Dùng lệnh cfk để chuyển font sang không dấu

Dùng lệnh cf+ để chuyển font sang chữ hoa

Dùng lệnh cf- để chuyển font sang chữ thường

 

File lisp: Download Lisp chuyển font (để tham khảo)

File vlx: convertfont.vlx (download và sử dụng file này)

 

Câu hỏi thường gặp

Hỏi: Sau khi chuyển font, tôi vẫn chưa đọc được

Đáp: Sau khi chuyển font, bạn phải chỉnh cả style phù hợp thì mới đọc được (nếu style chưa phù hợp với mã font)

 

Hỏi: Text của tôi là TCVN (vì sử dụng font .vnArial hiển thị bình thường), nhưng không thể convert được sang bất cứ mã nào. Khi convert dường như Text không hề thay đổi.

Đáp: Có thể mã chữ của bạn được viết theo mã %%. Cách kiểm tra xem có phải mã này không bằng cách dùng lệnh LIST rồi chọn một text có tiếng việt. Nếu bạn thấy tại các vị trí ký tự nguyên âm là dấu %%, thì bạn phải "sửa" text trước khi dùng mã lệnh này. Cách sửa bạn xem ở đây: http://www.cadviet.com/forum/topic/150896-lisp-chuya-n-a-i-ma-font-cha-trong-autocad/?p=386883

 

Hỏi: Tại sao khi tôi chuyển từ TCVN sang các mã khác, các chữ có dấu bị hoa-thường không đúng.

Đáp: Vì font TCVN có nhược điểm là dùng chung mã chữ (char code) cho cả chữ hoa hoa và chữ thường thường. Vì vậy khi convert sang mã khác, sẽ không đúng ý.

Muốn được đúng, bạn cần convert sang mã khác, sau đó dùng lệnh cf+ hoặc cf-.

 

Lịch sử phát triển

2015-10-04: Phiên bản đầu tiên

2015-10-05:

- Hiệu chỉnh lỗi tên file

- Tính năng tự tìm mã font

- Tính năng loại bỏ dấu

2015-10-06:

- Sửa lỗi

- Tính năng chữ hoa / chữ thường

- Sửa / rút ngắn số lệnh

2015-11-23:

- Cải tiến tính năng tự tìm mã font

- Cải tiến tốc độ chạy chương trình

- Bổ sung tính năng xác định thời gian

2015-11-27:

- Upload file lisp thay vì download file.

____________________________________________

Bác Hoành ơi bác xem lại giúp links die rồi thanks anh 

 

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

Nhờ mọi người giúp đỡ mình cái file này lỗi font gì? mình xin cảm ơn!

mình up file nó chạy lâu quá nên mình up lên media http://www.mediafire.com/file/3yza6wjwj68ats5/l%E1%BB%97i_font.rar 

File của bạn có bị lỗi gì đâu, bạn chuyển toàn bộ file đó về style text nào có mã font tcvn3(ABC) là được

  • Vote tăng 1

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

(defun c:convertfont nil
(setq
UNI '((225) (224) (92 85 43 49 69 65 51) (92 85 43 48 48 69 51) (92 85 43 49 69 65 49)
(227) (92 85 43 49 69 65 70) (92 85 43 49 69 66 49) (92 85 43 49 69 66 51)
(92 85 43 49 69 66 53) (92 85 43 49 69 66 55) (226) (92 85 43 49 69 65 53)
(92 85 43 49 69 65 55) (92 85 43 49 69 65 57) (92 85 43 49 69 65 66)
(92 85 43 49 69 65 68) (233) (232) (92 85 43 49 69 66 66) (92 85 43 49 69 66 68)
(92 85 43 49 69 66 57) (234) (92 85 43 49 69 66 70) (92 85 43 49 69 67 49)
(92 85 43 49 69 67 51) (92 85 43 49 69 67 53) (92 85 43 49 69 67 55) (237)
(92 85 43 48 48 69 67) (92 85 43 49 69 67 57) (92 85 43 48 49 50 57)
(92 85 43 49 69 67 66) (243) (92 85 43 48 48 70 50) (92 85 43 49 69 67 70)
(92 85 43 48 48 70 53) (92 85 43 49 69 67 68) (244) (92 85 43 49 69 68 49)
(92 85 43 49 69 68 51) (92 85 43 49 69 68 53) (92 85 43 49 69 68 55)
(92 85 43 49 69 68 57) (245) (92 85 43 49 69 68 66) (92 85 43 49 69 68 68)
(92 85 43 49 69 68 70) (92 85 43 49 69 69 49) (92 85 43 49 69 69 51) (250)
(249) (92 85 43 49 69 69 55) (92 85 43 48 49 54 57) (92 85 43 49 69 69 53)
(253) (92 85 43 49 69 69 57) (92 85 43 49 69 69 66) (92 85 43 49 69 69 68)
(92 85 43 49 69 69 70) (92 85 43 49 69 70 49) (92 85 43 48 48 70 68)
(92 85 43 49 69 70 51) (92 85 43 49 69 70 55) (92 85 43 49 69 70 57)
(92 85 43 49 69 70 53) (240);
(193) (192) (92 85 43 49 69 65 50) (92 85 43 48 48 67 51) (92 85 43 49 69 65 48)
(195) (92 85 43 49 69 65 69) (92 85 43 49 69 66 48) (92 85 43 49 69 66 50)
(92 85 43 49 69 66 52) (92 85 43 49 69 66 54) (194) (92 85 43 49 69 65 52)
(92 85 43 49 69 65 54) (92 85 43 49 69 65 56) (92 85 43 49 69 65 65)
(92 85 43 49 69 65 67) (201) (200) (92 85 43 49 69 66 65) (92 85 43 49 69 66 67)
(92 85 43 49 69 66 56) (202) (92 85 43 49 69 66 69) (92 85 43 49 69 67 48)
(92 85 43 49 69 67 50) (92 85 43 49 69 67 52) (92 85 43 49 69 67 54) (205)
(92 85 43 48 48 67 67) (92 85 43 49 69 67 56) (92 85 43 48 49 50 56)
(92 85 43 49 69 67 65) (211) (92 85 43 48 48 68 50) (92 85 43 49 69 67 69)
(92 85 43 48 48 68 53) (92 85 43 49 69 67 67) (212) (92 85 43 49 69 68 48)
(92 85 43 49 69 68 50) (92 85 43 49 69 68 52) (92 85 43 49 69 68 54)
(92 85 43 49 69 68 56) (213) (92 85 43 49 69 68 65) (92 85 43 49 69 68 67)
(92 85 43 49 69 68 69) (92 85 43 49 69 69 48) (92 85 43 49 69 69 50) (218)
(217) (92 85 43 49 69 69 54) (92 85 43 48 49 54 56) (92 85 43 49 69 69 52)
(221) (92 85 43 49 69 69 56) (92 85 43 49 69 69 65) (92 85 43 49 69 69 67)
(92 85 43 49 69 69 69) (92 85 43 49 69 70 48) (92 85 43 48 48 68 68)
(92 85 43 49 69 70 50) (92 85 43 49 69 70 54) (92 85 43 49 69 70 56)
(92 85 43 49 69 70 52) (208))
TCVN '((184) (181) (182) (183) (185) (168) (190) (187) (188) (189) (198) (169) (202)
(199) (200) (201) (203) (92 85 43 48 48 68 48) (92 85 43 48 48 67 67) (206)
(207) (209) (170) (92 85 43 48 48 68 53) (92 85 43 48 48 68 50) (211) (212)
(214) (92 85 43 48 48 68 68) (215) (216) (220) (92 85 43 48 48 68 69)
(92 85 43 48 48 69 51) (223) (225) (226) (228) (171) (232) (229) (230) (231)
(233) (172) (237) (234) (235) (92 85 43 48 48 69 67) (238) (243) (239) (241)
(92 85 43 48 48 70 50) (244) (173) (248) (92 85 43 48 48 70 53) (246) (247)
(249) (92 85 43 48 48 70 68) (250) (251) (252) (92 85 43 48 48 70 69) (174);
(184) (181) (182) (183) (185) (161) (190) (187) (188) (189) (198) (162) (202)
(199) (200) (201) (203) (92 85 43 48 48 68 48) (92 85 43 48 48 67 67) (206)
(207) (209) (163) (92 85 43 48 48 68 53) (92 85 43 48 48 68 50) (211) (212)
(214) (92 85 43 48 48 68 68) (215) (216) (220) (92 85 43 48 48 68 69)
(92 85 43 48 48 69 51) (223) (225) (226) (228) (164) (232) (229) (230) (231)
(233) (165) (237) (234) (235) (92 85 43 48 48 69 67) (238) (243) (239) (241)
(92 85 43 48 48 70 50) (244) (166) (248) (92 85 43 48 48 70 53) (246) (247)
(249) (92 85 43 48 48 70 68) (250) (251) (252) (92 85 43 48 48 70 69) (167))
VNI '((97 249) (97 248) (97 251) (97 92 85 43 48 48 70 53) (97 239) (97 234)
(97 233) (97 232) (97 250) (97 252) (97 235) (97 226) (97 225) (97 224)
(97 229) (97 92 85 43 48 48 69 51) (97 228) (101 249) (101 248) (101 251)
(101 92 85 43 48 48 70 53) (101 239) (101 226) (101 225) (101 224) (101 229)
(101 92 85 43 48 48 69 51) (101 228) (237) (92 85 43 48 48 69 67) (230) (243)
(92 85 43 48 48 70 50) (111 249) (111 248) (111 251) (111 92 85 43 48 48 70 53)
(111 239) (111 226) (111 225) (111 224) (111 229) (111 92 85 43 48 48 69 51)
(111 228) (244) (244 249) (244 248) (244 251) (244 92 85 43 48 48 70 53) (244 239)
(117 249) (117 248) (117 251) (117 92 85 43 48 48 70 53) (117 239) (246) (246 249)
(246 248) (246 251) (246 92 85 43 48 48 70 53) (246 239) (121 249) (121 248)
(121 251) (121 92 85 43 48 48 70 53) (238) (241);
(65 217) (65 216) (65 219) (65 92 85 43 48 48 68 53)
(65 207) (65 202) (65 201) (65 200) (65 218) (65 220)
(65 203) (65 194) (65 193) (65 192) (65 197) (65 92 85 43 48 48 67 51)
(65 196) (69 217) (69 216) (69 219) (69 92 85 43 48 48 68 53) (69 207)
(69 194) (69 193) (69 192) (69 197) (69 92 85 43 48 48 67 51) (69 196)
(205) (92 85 43 48 48 67 67) (198) (211) (92 85 43 48 48 68 50) (79 217)
(79 216) (79 219) (79 92 85 43 48 48 68 53) (79 207) (79 194) (79 193)
(79 192) (79 197) (79 92 85 43 48 48 67 51) (79 196) (212) (212 217) (212 216)
(212 219) (212 92 85 43 48 48 68 53) (212 207) (85 217) (85 216) (85 219)
(85 92 85 43 48 48 68 53) (85 207) (214) (214 217) (214 216) (214 219)
(214 92 85 43 48 48 68 53) (214 207) (89 217) (89 216) (89 219)
(89 92 85 43 48 48 68 53) (206) (209))
)
(mapcar '(lambda (a b c)
(eval (vl-list* 'defun (read (strcat "c:" a)) 'nil (list 'cf::convertfont b c) '((princ))))
)
'("t2u" "t2v" "u2t" "u2v" "v2t" "v2u")
'(tcvn tcvn uni uni vni vni)
'(uni vni tcvn vni tcvn uni)
)
(princ)
)
(defun cf::convertfont (c1 c2 / s i e el h l ol sl c n str mtx t0 t1 doc
*error* _StartUndo _EndUndo)
(defun *error* ( msg )
(or (wcmatch (strcase msg) "*BREAK,*CANCEL*,*EXIT*")
(princ (strcat "\n** Error: " msg " **")))
(princ)
)
(defun _StartUndo ( doc ) (_EndUndo doc)
(vla-StartUndoMark doc)
)
(defun _EndUndo ( doc )
(if (= 8 (logand 8 (getvar 'UNDOCTL)))
(vla-EndUndoMark doc)
)
)
(initget "Lower Upper Normal")
(setq #case (cond ((getkword (strcat "\nSpecify Case-Sensitiy option: [Lower/Upper/Normal] <"
(setq #case (cond (#case) ("Normal"))) ">: ")))
(#case)
)
doc (vla-get-ActiveDocument (vlax-get-acad-object))
sl 0
ol 0
)
(cond ((= #case "Lower") (setq c2 (cf::sublist (/ (length c2) 2) c2) c 1))
((= #case "Upper") (setq c2 (reverse (cf::sublist (/ (length c2) 2) (reverse c2))) c 2))
((setq c 0))
)
(if (and (princ "\nSelect a [M]TEXT: ") (setq s (ssget '((0 . "*TEXT")))))
(progn
(_StartUndo doc)
(setq t0 (getvar "MilliSecs"))
(repeat (setq i (sslength s))
(setq e (ssname s (setq i (1- i)))
el (entget e)
h (reverse (cdr (member (cond ((assoc 3 el)) ((assoc 1 el))) (reverse el))))
str (LM:UnFormat (cf::GetTextString el) (setq mtx (equal (cdr (assoc 0 el)) "MTEXT")))
sl (+ (strlen str) sl)
ol (1+ ol)
el (cdr (member (assoc 1 el) el))
)
(setq str (apply (function append) (cf::ff0 str c1 c2 (length c2) c)))
(if mtx
(progn
(setq str (gbn str 250))
(repeat (1- (length str))
(setq l (cons (cons 3 (vl-list->string (car str))) l)
str (cdr str)))
(setq l (cons (cons 1 (vl-list->string (vl-remove nil (car str)))) l)
l (reverse l))
)
(setq l (cons (cons 1 (vl-list->string str)) l))
)
(entmod (append h l el))
)
(setq t1 (getvar "MilliSecs"))
(princ (strcat "\nTotal time to conver ["(rtoc ol 0)" - Objects] with [String length: " (rtoc sl 0) "] is : "
(rtoc (- t1 t0) 0) " (ms)"))
(_EndUndo doc)
)
(princ "\nNo Valid object selected!!!")
)
(princ)
)
(defun cf::ff0 (s c1 c2 n c / a p r)
; c = 1: lower
; c = 2: upper
; c = 0: normal
(if (= (type s) 'str) (setq s (vl-string->list s)))
(cond ((= 8 (apply (function max) (mapcar (function length) c1)))
(if (and (= (car s) 92) (setq p (vl-position (cf::f7 s) c1)))
(setq r (cons (nth (rem p n) c2) r)
s (cdddr (cddddr s))
)
)
(while s
(cond
((= (cadr s) 92)
(cond ((setq p (vl-position (cf::f8 s) c1))
(setq r (cons (nth (rem p n) c2) r) s (cddddr (cddddr s))))
(t
(if (setq p (vl-position (list (car s)) c1))
(setq r (cons (nth (rem p n) c2) r) s (cdr s))
(cond ((= c 1)
(if (< 64 (car s) 91)
(setq r (cons (list (+ (car s) 32)) r) s (cdr s))
(setq r (cons (list (car s)) r) s (cdr s))))
((= c 2)
(if (< 96 (car s) 123)
(setq r (cons (list (- (car s) 32)) r) s (cdr s))
(setq r (cons (list (car s)) r) s (cdr s))))
(t (setq r (cons (list (car s)) r) s (cdr s)))
)
)
(if (setq p (vl-position (cf::f7 s) c1))
(setq r (cons (nth (rem p n) c2) r) s (cdddr (cddddr s)))
(setq r (cons (list (car s)) r) s (cdr s))
)
)
)
)
((setq p (vl-position (cf::f2 s) c1))
(setq r (cons (nth (rem p n) c2) r) s (cddr s)))
((setq p (vl-position (list (car s)) c1))
(setq r (cons (nth (rem p n) c2) r) s (cdr s)))
((vl-position c '(0 1 2))
(cond ((= c 1)
(if (< 64 (car s) 91)
(setq r (cons (list (+ (car s) 32)) r) s (cdr s))
(setq r (cons (list (car s)) r) s (cdr s))))
((= c 2)
(if (< 96 (car s) 123)
(setq r (cons (list (- (car s) 32)) r) s (cdr s))
(setq r (cons (list (car s)) r) s (cdr s))))
(t (setq r (cons (list (car s)) r) s (cdr s)))
)
)
)
)
)
(t (while s
(cond ((= (car s) 92)
(if (setq p (vl-position (cf::f7 s) c1))
(setq r (cons (nth (rem p n) c2) r) s (cdddr (cddddr s)))
(setq r (cons (list (car s)) r) s (cdr s))
)
)
((setq p (vl-position (setq a (list (car s))) c1))
(setq r (cons (nth (rem p n) c2) r) s (cdr s)))
((vl-position c '(0 1 2))
(cond ((= c 1)
(if (< 64 (car s) 91)
(setq r (cons (list (+ (car s) 32)) r) s (cdr s))
(setq r (cons (list (car s)) r) s (cdr s))))
((= c 2)
(if (< 96 (car s) 123)
(setq r (cons (list (- (car s) 32)) r) s (cdr s))
(setq r (cons (list (car s)) r) s (cdr s))))
(t (setq r (cons (list (car s)) r) s (cdr s)))
)
)
)
)
)
)
(reverse r)
)
(defun cf::sublist ( n l ) (reverse (member (nth (1- n) l) (reverse l))))
(defun cf::f8 (l) (list (car l) (cadr l) (caddr l) (cadddr l) (car (setq l (cddddr l))) (cadr l) (caddr l) (cadddr l)))
(defun cf::f7 (l) (list (car l) (cadr l) (caddr l) (cadddr l) (car (setq l (cddddr l))) (cadr l) (caddr l)))
(defun cf::f2 (l) (list (car l) (cadr l)))
(defun cf::GetTextString (el / typ)
(cond ((wcmatch (setq typ (cdr (assoc 0 el))) "TEXT,*DIMENSION") (cdr (assoc 1 (reverse el))))
((wcmatch typ "ATTRIB,MTEXT")
(apply (function strcat)
(mapcar (function cdr) (vl-remove-if-not (function (lambda (x) (vl-position (car x) '(1 3)))) el))
)
)
)
)
;;-------------------=={ UnFormat String }==------------------;;
;; ;;
;; Returns a string with all MText formatting codes removed. ;;
;;------------------------------------------------------------;;
;; Author: Lee Mac, Copyright © 2011 - www.lee-mac.com ;;
;;------------------------------------------------------------;;
;; Arguments: ;;
;; str - String to Process ;;
;; mtx - MText mtxag (T if string is for use in MText) ;;
;;------------------------------------------------------------;;
;; Returns: String with formatting codes removed ;;
;;------------------------------------------------------------;;

(defun LM:UnFormat ( str mtx / _replace rx )
(defun _replace ( new old str )
(vlax-put-property rx 'pattern old)
(vlax-invoke rx 'replace str new)
)
(if (setq rx (vlax-get-or-create-object "VBScript.RegExp"))
(progn
(setq str
(vl-catch-all-apply
(function
(lambda ( )
(vlax-put-property rx 'global actrue)
(vlax-put-property rx 'multiline actrue)
(vlax-put-property rx 'ignorecase acfalse)
(foreach pair
'(
("\032" . "\\\\\\\\")
(" " . "\\\\P|\\n|\\t")
("$1" . "\\\\(\\\\[ACcFfHLlOopQTW])|\\\\[ACcFfHLlOopQTW][^\\\\;]*;|\\\
\[ACcFfHLlOopQTW]")
("$1$2/$3" . "([^\\\\])\\\\S([^;]*)[/#\\^]([^;]*);")
("$1$2" . "\\\\(\\\\S)|[\\\\](})|}")
("$1" . "[\\\\]({)|{")
)
(setq str (_replace (car pair) (cdr pair) str))
)
(if mtx
(_replace "\\\\" "\032" (_replace "\\$1$2$3" "(\\\\[ACcFfHLlOoPpQSTW])|({)|(})" str))
(_replace "\\" "\032" str)
)
)
)
)
)
(vlax-release-object rx)
(if (null (vl-catch-all-error-p str))
str
)
)
)
)
(defun GBN (l n / b lst)
;; http://www.theswamp.org/index.php?topic=32428.msg380205#msg380205
;; by Elpanov Evgeniy
(setq b (list '(reverse a)))
(repeat (/ n 4)
(setq b (cons '(setq
a
(cons (cadddr l) (cons (caddr l) (cons (cadr l) (cons (car l) a))))
l
(cddddr l)
) ;_ setq
b
) ;_ cons
) ;_ setq
) ;_ repeat
(setq n (rem n 4))
(repeat (/ n 3)
(setq b (cons '(setq
a
(cons (caddr l) (cons (cadr l) (cons (car l) a)))
l
(cdddr l)
) ;_ setq
b
) ;_ cons
) ;_ setq
) ;_ repeat
(setq n (rem n 3))
(repeat (/ n 2)
(setq b (cons '(setq
a
(cons (cadr l) (cons (car l) a))
l
(cddr l)
) ;_ setq
b
) ;_ cons
) ;_ setq
) ;_ repeat
(setq n (rem n 2))
(repeat (/ n 1)
(setq b (cons '(setq
a
(cons (car l) a)
l
(cdr l)
) ;_ setq
b
) ;_ cons
) ;_ setq
) ;_ repeat
(eval (cons 'defun (cons 'f1 (cons '(a) b))))
(while l (setq lst (cons (f1 nil) lst)))
(reverse lst)
)
(defun rtoc ( n p / foo d l )
(defun foo ( l n )
(if (or (not (cadr l)) (= 44 (cadr l)))
l
(if (zerop (rem n 3))
(vl-list* (car l) 46 (foo (cdr l) (1+ n)))
(cons (car l) (foo (cdr l) (1+ n)))
)
)
)
(setq d (getvar 'dimzin))
(setvar 'dimzin 0)
(setq l (subst 44 46 (vl-string->list (rtos (abs n) 2 p))))
(setvar 'dimzin d)
(vl-list->string
(append (if (minusp n) '(45))
(foo l (- 3 (rem (fix (/ (log (abs n)) (log 10))) 3)))
)
)
)
(vl-load-com)
(c:convertfont)
(princ)
  • Vote tăng 1

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
(defun c:convertfont nil
  (setq
    UNI '((225) (224) (92 85 43 49 69 65 51) (92 85 43 48 48 69 51) (92 85 43 49 69 65 49)
	 (227) (92 85 43 49 69 65 70) (92 85 43 49 69 66 49) (92 85 43 49 69 66 51)
	 (92 85 43 49 69 66 53) (92 85 43 49 69 66 55) (226) (92 85 43 49 69 65 53)
	 (92 85 43 49 69 65 55) (92 85 43 49 69 65 57) (92 85 43 49 69 65 66)
	 (92 85 43 49 69 65 68) (233) (232) (92 85 43 49 69 66 66) (92 85 43 49 69 66 68)
	 (92 85 43 49 69 66 57) (234) (92 85 43 49 69 66 70) (92 85 43 49 69 67 49)
	 (92 85 43 49 69 67 51) (92 85 43 49 69 67 53) (92 85 43 49 69 67 55) (237)
	 (92 85 43 48 48 69 67) (92 85 43 49 69 67 57) (92 85 43 48 49 50 57)
	 (92 85 43 49 69 67 66) (243) (92 85 43 48 48 70 50) (92 85 43 49 69 67 70)
	 (92 85 43 48 48 70 53) (92 85 43 49 69 67 68) (244) (92 85 43 49 69 68 49)
	 (92 85 43 49 69 68 51) (92 85 43 49 69 68 53) (92 85 43 49 69 68 55)
	 (92 85 43 49 69 68 57) (245) (92 85 43 49 69 68 66) (92 85 43 49 69 68 68)
	 (92 85 43 49 69 68 70) (92 85 43 49 69 69 49) (92 85 43 49 69 69 51) (250)
	 (249) (92 85 43 49 69 69 55) (92 85 43 48 49 54 57) (92 85 43 49 69 69 53)
	 (253) (92 85 43 49 69 69 57) (92 85 43 49 69 69 66) (92 85 43 49 69 69 68)
	 (92 85 43 49 69 69 70) (92 85 43 49 69 70 49) (92 85 43 48 48 70 68)
	 (92 85 43 49 69 70 51) (92 85 43 49 69 70 55) (92 85 43 49 69 70 57)
	 (92 85 43 49 69 70 53) (240);
	 (193) (192) (92 85 43 49 69 65 50) (92 85 43 48 48 67 51) (92 85 43 49 69 65 48)
         (195) (92 85 43 49 69 65 69) (92 85 43 49 69 66 48) (92 85 43 49 69 66 50)
         (92 85 43 49 69 66 52) (92 85 43 49 69 66 54) (194) (92 85 43 49 69 65 52)
         (92 85 43 49 69 65 54) (92 85 43 49 69 65 56) (92 85 43 49 69 65 65)
         (92 85 43 49 69 65 67) (201) (200) (92 85 43 49 69 66 65) (92 85 43 49 69 66 67)
         (92 85 43 49 69 66 56) (202) (92 85 43 49 69 66 69) (92 85 43 49 69 67 48)
         (92 85 43 49 69 67 50) (92 85 43 49 69 67 52) (92 85 43 49 69 67 54) (205)
         (92 85 43 48 48 67 67) (92 85 43 49 69 67 56) (92 85 43 48 49 50 56)
         (92 85 43 49 69 67 65) (211) (92 85 43 48 48 68 50) (92 85 43 49 69 67 69)
         (92 85 43 48 48 68 53) (92 85 43 49 69 67 67) (212) (92 85 43 49 69 68 48)
         (92 85 43 49 69 68 50) (92 85 43 49 69 68 52) (92 85 43 49 69 68 54)
         (92 85 43 49 69 68 56) (213) (92 85 43 49 69 68 65) (92 85 43 49 69 68 67)
         (92 85 43 49 69 68 69) (92 85 43 49 69 69 48) (92 85 43 49 69 69 50) (218)
         (217) (92 85 43 49 69 69 54) (92 85 43 48 49 54 56) (92 85 43 49 69 69 52)
         (221) (92 85 43 49 69 69 56) (92 85 43 49 69 69 65) (92 85 43 49 69 69 67)
         (92 85 43 49 69 69 69) (92 85 43 49 69 70 48) (92 85 43 48 48 68 68)
         (92 85 43 49 69 70 50) (92 85 43 49 69 70 54) (92 85 43 49 69 70 56)
         (92 85 43 49 69 70 52) (208))
    TCVN '((184) (181) (182) (183) (185) (168) (190) (187) (188) (189) (198) (169) (202)
	 (199) (200) (201) (203) (92 85 43 48 48 68 48) (92 85 43 48 48 67 67) (206)
	 (207) (209) (170) (92 85 43 48 48 68 53) (92 85 43 48 48 68 50) (211) (212)
	 (214) (92 85 43 48 48 68 68) (215) (216) (220) (92 85 43 48 48 68 69)
	 (92 85 43 48 48 69 51) (223) (225) (226) (228) (171) (232) (229) (230) (231)
	 (233) (172) (237) (234) (235) (92 85 43 48 48 69 67) (238) (243) (239) (241)
	 (92 85 43 48 48 70 50) (244) (173) (248) (92 85 43 48 48 70 53) (246) (247)
	 (249) (92 85 43 48 48 70 68) (250) (251) (252) (92 85 43 48 48 70 69) (174);
	 (184) (181) (182) (183) (185) (161) (190) (187) (188) (189) (198) (162) (202)
         (199) (200) (201) (203) (92 85 43 48 48 68 48) (92 85 43 48 48 67 67) (206)
         (207) (209) (163) (92 85 43 48 48 68 53) (92 85 43 48 48 68 50) (211) (212)
         (214) (92 85 43 48 48 68 68) (215) (216) (220) (92 85 43 48 48 68 69)
         (92 85 43 48 48 69 51) (223) (225) (226) (228) (164) (232) (229) (230) (231)
         (233) (165) (237) (234) (235) (92 85 43 48 48 69 67) (238) (243) (239) (241)
         (92 85 43 48 48 70 50) (244) (166) (248) (92 85 43 48 48 70 53) (246) (247)
         (249) (92 85 43 48 48 70 68) (250) (251) (252) (92 85 43 48 48 70 69) (167))
    VNI '((97 249) (97 248) (97 251) (97 92 85 43 48 48 70 53) (97 239) (97 234)
         (97 233) (97 232) (97 250) (97 252) (97 235) (97 226) (97 225) (97 224)
         (97 229) (97 92 85 43 48 48 69 51) (97 228) (101 249) (101 248) (101 251)
         (101 92 85 43 48 48 70 53) (101 239) (101 226) (101 225) (101 224) (101 229)
         (101 92 85 43 48 48 69 51) (101 228) (237) (92 85 43 48 48 69 67) (230) (243)
         (92 85 43 48 48 70 50) (111 249) (111 248) (111 251) (111 92 85 43 48 48 70 53)
         (111 239) (111 226) (111 225) (111 224) (111 229) (111 92 85 43 48 48 69 51)
         (111 228) (244) (244 249) (244 248) (244 251) (244 92 85 43 48 48 70 53) (244 239)
         (117 249) (117 248) (117 251) (117 92 85 43 48 48 70 53) (117 239) (246) (246 249)
         (246 248) (246 251) (246 92 85 43 48 48 70 53) (246 239) (121 249) (121 248)
         (121 251) (121 92 85 43 48 48 70 53) (238) (241);
	 (65 217) (65 216) (65 219) (65 92 85 43 48 48 68 53)
         (65 207) (65 202) (65 201) (65 200) (65 218) (65 220)
         (65 203) (65 194) (65 193) (65 192) (65 197) (65 92 85 43 48 48 67 51)
         (65 196) (69 217) (69 216) (69 219) (69 92 85 43 48 48 68 53) (69 207)
         (69 194) (69 193) (69 192) (69 197) (69 92 85 43 48 48 67 51) (69 196)
         (205) (92 85 43 48 48 67 67) (198) (211) (92 85 43 48 48 68 50) (79 217)
         (79 216) (79 219) (79 92 85 43 48 48 68 53) (79 207) (79 194) (79 193)
         (79 192) (79 197) (79 92 85 43 48 48 67 51) (79 196) (212) (212 217) (212 216)
         (212 219) (212 92 85 43 48 48 68 53) (212 207) (85 217) (85 216) (85 219)
         (85 92 85 43 48 48 68 53) (85 207) (214) (214 217) (214 216) (214 219)
         (214 92 85 43 48 48 68 53) (214 207) (89 217) (89 216) (89 219)
         (89 92 85 43 48 48 68 53) (206) (209))
  )
  (mapcar '(lambda (a b c)
	     (eval (vl-list* 'defun (read (strcat "c:" a)) 'nil (list 'cf::convertfont b c) '((princ))))
	   )
	  '("t2u" "t2v" "u2t" "u2v" "v2t" "v2u")
	  '(tcvn tcvn uni uni vni vni)
	  '(uni vni tcvn vni tcvn uni)
  )
  (princ)
)
(defun cf::convertfont (c1 c2 / s i e el h l ol sl c n str mtx t0 t1 doc
			*error* _StartUndo _EndUndo)
  (defun *error* ( msg )
    (or (wcmatch (strcase msg) "*BREAK,*CANCEL*,*EXIT*")
        (princ (strcat "\n** Error: " msg " **")))
    (princ)
  )  
  (defun _StartUndo ( doc ) (_EndUndo doc)
    (vla-StartUndoMark doc)
  )
  (defun _EndUndo ( doc )
    (if (= 8 (logand 8 (getvar 'UNDOCTL)))
      (vla-EndUndoMark doc)
    )
  )  
  (initget "Lower Upper Normal")
  (setq	#case (cond ((getkword (strcat "\nSpecify Case-Sensitiy option: [Lower/Upper/Normal] <"
				       (setq #case (cond (#case) ("Normal"))) ">: ")))
		    (#case)
	      )
        doc (vla-get-ActiveDocument (vlax-get-acad-object))
	sl 0
	ol 0
  )
  (cond	((= #case "Lower") (setq c2 (cf::sublist (/ (length c2) 2) c2) c 1))
	((= #case "Upper") (setq c2 (reverse (cf::sublist (/ (length c2) 2) (reverse c2))) c 2))
	((setq c 0))
  )
  (if (and (princ "\nSelect a [M]TEXT: ") (setq s (ssget '((0 . "*TEXT")))))
    (progn
      (_StartUndo doc)
      (setq t0 (getvar "MilliSecs"))
      (repeat (setq i (sslength s))
	(setq e   (ssname s (setq i (1- i)))
	      el  (entget e)
	      h   (reverse (cdr (member (cond ((assoc 3 el)) ((assoc 1 el))) (reverse el))))
	      str (LM:UnFormat (cf::GetTextString el) (setq mtx (equal (cdr (assoc 0 el)) "MTEXT")))
	      sl  (+ (strlen str) sl)
	      ol  (1+ ol)
	      el  (cdr (member (assoc 1 el) el))
	)
	(setq str (apply (function append) (cf::ff0 str c1 c2 (length c2) c)))
	(if mtx
	  (progn
	    (setq str  (gbn str 250))
	    (repeat (1- (length str))
	      (setq l (cons (cons 3 (vl-list->string (car str))) l)
		    str (cdr str)))
	    (setq l (cons (cons 1 (vl-list->string (vl-remove nil (car str)))) l)
		  l (reverse l))
	  )
	  (setq l (cons (cons 1 (vl-list->string str)) l)) 
	)	
	(entmod (append h l el))
      )
      (setq t1 (getvar "MilliSecs"))
      (princ (strcat "\nTotal time to conver ["(rtoc ol 0)" - Objects] with [String length: " (rtoc sl 0) "] is : "
		     (rtoc (- t1 t0) 0) " (ms)"))
      (_EndUndo doc)
    )
    (princ "\nNo Valid object selected!!!")
  )
  (princ)
)
(defun cf::ff0 (s c1 c2 n c / a p r)
  ; c = 1: lower
  ; c = 2: upper
  ; c = 0: normal
  (if (= (type s) 'str) (setq s (vl-string->list s)))
  (cond ((= 8 (apply (function max) (mapcar (function length) c1)))
	 (if (and (= (car s) 92) (setq p (vl-position (cf::f7 s) c1)))
	   (setq r (cons (nth (rem p n) c2) r)
		 s (cdddr (cddddr s))
	   )
	 )
	 (while s
	   (cond 
		 ((= (cadr s) 92)
		  (cond ((setq p (vl-position (cf::f8 s) c1))
			 (setq r (cons (nth (rem p n) c2) r) s (cddddr (cddddr s))))
			(t
			 (if (setq p (vl-position (list (car s)) c1))
			   (setq r (cons (nth (rem p n) c2) r) s (cdr s))
			   (cond ((= c 1)
				  (if (< 64 (car s) 91)
				    (setq r (cons (list (+ (car s) 32)) r) s (cdr s))
				    (setq r (cons (list (car s)) r) s (cdr s))))
				 ((= c 2)
				  (if (< 96 (car s) 123)
				    (setq r (cons (list (- (car s) 32)) r) s (cdr s))
				    (setq r (cons (list (car s)) r) s (cdr s))))
				 (t (setq r (cons (list (car s)) r) s (cdr s)))
			   )
			 )
			 (if (setq p (vl-position (cf::f7 s) c1))
			   (setq r (cons (nth (rem p n) c2) r) s (cdddr (cddddr s)))
			   (setq r (cons (list (car s)) r) s (cdr s))
			 )
			)
		  )
		 )
		 ((setq p (vl-position (cf::f2 s) c1))
		  (setq r (cons (nth (rem p n) c2) r) s (cddr s)))
		 ((setq p (vl-position (list (car s)) c1))
		  (setq r (cons (nth (rem p n) c2) r) s (cdr s)))
		 ((vl-position c '(0 1 2))
		  (cond ((= c 1)
			 (if (< 64 (car s) 91)
			   (setq r (cons (list (+ (car s) 32)) r) s (cdr s))
			   (setq r (cons (list (car s)) r) s (cdr s))))
			((= c 2)
			 (if (< 96 (car s) 123)
			   (setq r (cons (list (- (car s) 32)) r) s (cdr s))
			   (setq r (cons (list (car s)) r) s (cdr s))))
			(t (setq r (cons (list (car s)) r) s (cdr s)))
		  )
		 )
	   )
	 )
        )
	(t (while s
	     (cond ((= (car s) 92)
		    (if (setq p (vl-position (cf::f7 s) c1))
		      (setq r (cons (nth (rem p n) c2) r) s (cdddr (cddddr s)))
		      (setq r (cons (list (car s)) r) s (cdr s))
		    )
		   )		   
		   ((setq p (vl-position (setq a (list (car s))) c1))
		    (setq r (cons (nth (rem p n) c2) r) s (cdr s)))
		   ((vl-position c '(0 1 2))
		    (cond ((= c 1)
			   (if (< 64 (car s) 91)
			     (setq r (cons (list (+ (car s) 32)) r) s (cdr s))
			     (setq r (cons (list (car s)) r) s (cdr s))))
			  ((= c 2)
			   (if (< 96 (car s) 123)
			     (setq r (cons (list (- (car s) 32)) r) s (cdr s))
			     (setq r (cons (list (car s)) r) s (cdr s))))
			  (t (setq r (cons (list (car s)) r) s (cdr s)))
		    )
		   )
	     )
	   )
       )
  )
  (reverse r)
)
(defun cf::sublist ( n l ) (reverse (member (nth (1- n) l) (reverse l))))
(defun cf::f8 (l) (list (car l) (cadr l) (caddr l) (cadddr l) (car (setq l (cddddr l))) (cadr l) (caddr l) (cadddr l)))
(defun cf::f7 (l) (list (car l) (cadr l) (caddr l) (cadddr l) (car (setq l (cddddr l))) (cadr l) (caddr l)))
(defun cf::f2 (l) (list (car l) (cadr l)))
(defun cf::GetTextString (el / typ)
  (cond	((wcmatch (setq typ (cdr (assoc 0 el))) "TEXT,*DIMENSION") (cdr (assoc 1 (reverse el))))
	((wcmatch typ "ATTRIB,MTEXT")
	 (apply	(function strcat)
		(mapcar	(function cdr) (vl-remove-if-not (function (lambda (x) (vl-position (car x) '(1 3)))) el))
	 )
	)
  )
)
;;-------------------=={ UnFormat String }==------------------;;
;;                                                            ;;
;;  Returns a string with all MText formatting codes removed. ;;
;;------------------------------------------------------------;;
;;  Author: Lee Mac, Copyright © 2011 - www.lee-mac.com       ;;
;;------------------------------------------------------------;;
;;  Arguments:                                                ;;
;;  str - String to Process                                   ;;
;;  mtx - MText mtxag (T if string is for use in MText)        ;;
;;------------------------------------------------------------;;
;;  Returns:  String with formatting codes removed            ;;
;;------------------------------------------------------------;;

(defun LM:UnFormat ( str mtx / _replace rx )
    (defun _replace ( new old str )
        (vlax-put-property rx 'pattern old)
        (vlax-invoke rx 'replace str new)
    )
    (if (setq rx (vlax-get-or-create-object "VBScript.RegExp"))
        (progn
            (setq str
                (vl-catch-all-apply
                    (function
                        (lambda ( )
                            (vlax-put-property rx 'global     actrue)
                            (vlax-put-property rx 'multiline  actrue)
                            (vlax-put-property rx 'ignorecase acfalse) 
                            (foreach pair
                               '(
                                    ("\032"    . "\\\\\\\\")
                                    (" "       . "\\\\P|\\n|\\t")
                                    ("$1"      . "\\\\(\\\\[ACcFfHLlOopQTW])|\\\\[ACcFfHLlOopQTW][^\\\\;]*;|\\\
\[ACcFfHLlOopQTW]")
                                    ("$1$2/$3" . "([^\\\\])\\\\S([^;]*)[/#\\^]([^;]*);")
                                    ("$1$2"    . "\\\\(\\\\S)|[\\\\](})|}")
                                    ("$1"      . "[\\\\]({)|{")
                                )
                                (setq str (_replace (car pair) (cdr pair) str))
                            )
                            (if mtx
                                (_replace "\\\\" "\032" (_replace "\\$1$2$3" "(\\\\[ACcFfHLlOoPpQSTW])|({)|(})" str))
                                (_replace "\\"   "\032" str)
                            )
                        )
                    )
                )
            )
            (vlax-release-object rx)
            (if (null (vl-catch-all-error-p str))
                str
            )
        )
    )
)
(defun GBN (l n / b lst)
  ;; http://www.theswamp.org/index.php?topic=32428.msg380205#msg380205
  ;; by Elpanov Evgeniy
 (setq b (list '(reverse a)))
 (repeat (/ n 4)
  (setq b (cons '(setq
                  a
                  (cons (cadddr l) (cons (caddr l) (cons (cadr l) (cons (car l) a))))
                  l
                  (cddddr l)
                 ) ;_  setq
                b
          ) ;_  cons
  ) ;_  setq
 ) ;_  repeat
 (setq n (rem n 4))
 (repeat (/ n 3)
  (setq b (cons '(setq
                  a
                  (cons (caddr l) (cons (cadr l) (cons (car l) a)))
                  l
                  (cdddr l)
                 ) ;_  setq
                b
          ) ;_  cons
  ) ;_  setq
 ) ;_  repeat
 (setq n (rem n 3))
 (repeat (/ n 2)
  (setq b (cons '(setq
                  a
                  (cons (cadr l) (cons (car l) a))
                  l
                  (cddr l)
                 ) ;_  setq
                b
          ) ;_  cons
  ) ;_  setq
 ) ;_  repeat
 (setq n (rem n 2))
 (repeat (/ n 1)
  (setq b (cons '(setq
                  a
                  (cons (car l) a)
                  l
                  (cdr l)
                 ) ;_  setq
                b
          ) ;_  cons
  ) ;_  setq
 ) ;_  repeat
 (eval (cons 'defun (cons 'f1 (cons '(a) b))))
 (while l (setq lst (cons (f1 nil) lst)))
 (reverse lst)
)
(defun rtoc ( n p / foo d l )
    (defun foo ( l n )
        (if (or (not (cadr l)) (= 44 (cadr l)))
            l
            (if (zerop (rem n 3))
                (vl-list* (car l) 46 (foo (cdr l) (1+ n)))
                (cons (car l) (foo (cdr l) (1+ n)))
            )
        )
    )
    (setq d (getvar 'dimzin))
    (setvar 'dimzin 0)
    (setq l (subst 44 46 (vl-string->list (rtos (abs n) 2 p))))
    (setvar 'dimzin d)
    (vl-list->string
      (append (if (minusp n) '(45))
	      (foo l (- 3 (rem (fix (/ (log (abs n)) (log 10))) 3)))
      )
    )
)
(vl-load-com)
(c:convertfont)
(princ)

Bác có thể chỉ em cách dùng được không?

Em muốn chuyển từ Unicode sang TCVN3, gõ rất nhiều kiểu nhưng kiểu nào cũng ra dạng Unicode hiển thị trên Cad.

Các bác nào biết cách chỉ dùm em với.

 

@Nguyen Hoanh: Em dùng file VLX của anh thì OK nhưng khi download file về thì bị không thể chuyển được anh ạ. Mong anh giúp đỡ!

 

P/s: Edit lần 2:

Em khởi động lại Cad thì dùng của bác snowman.hms em dùng được rồi. Tuy nhiên em chưa biết cách sửa sao cho gọn, em muốn sửa theo:

Nếu là Font Unicode thì chuyển sang TCVN3, còn nếu là TCVN3 rồi thì không cần chuyển nữa.

Không biết yêu cầu này có cao quá không ạ?

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

Lisp quá hay bác Hoành ơi , cảm ơn bác nhiều , tiết kiệm nhiều công sức cho anh em ! Nhân đây nếu bạn nào dùng lisp này gặp lỗi chuyển font ko được giống mình thì làm như sau:

Ví dụ chuyển từ TCVN sang unicode:

- Bước 1 chuyển bộ gõ thành gõ tiếng việt và để unicode

- Bước 2 : Dùng lệnh CFU chuyển hết đối tượng sang unicode

- Bước 3 : Chọn tất cả đối tượng vừa chuyển, thay đổi sang 1 style unicode nào đó trong Cad. OK xong

1 lần nữa cảm ơn bác Hoành !

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
Vào lúc 23/11/2015 tại 14:00, txchuong đã nói:

Chuyển sang Unicode bị lỗi  kiểu chữ bác Hoành à: Ví Cộng hòa xã hội chủ nghĩa Việt Nam  --(cfu)-> CỘng hÒa xà hỘi chỦ nghĨa ViỆt Nam  --(cf-)--> cộng hÒa xà hội chủ nghĩa việt nam.

p/s. Em đang thử chuyển từ TCVN sang Uni

Bạn dùng 1 trong các lệnh cfv, cft...để chuyển text lỗi "cộng hÒa xà hội chủ nghĩa việt nam" sang dạng font vni, TCVN,...hoặc font khác rồi lại dùng lệnh cfu để chuyển lại về font Unicode thì sẽ sửa được lỗi trên bạn nhé->kết quả: "cộng hòa xã hội chủ nghĩa việt nam", nếu vẫn không được thì dùng cf- 1 lần nữa là OK

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

Bản vẽ này tôi nhận từ người đã chuyển sang cơ quan khác.

Font chữ đặt trong mtext nửa vnarialnarrowh nửa arial

Mong các bác sớm xử lý giúp ạ. Nếu không xử lý được thì khổ em quá.

new block.dwg

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

Trước hết mình xin nói lời cảm ơn người đã viết ra cái lisp cad này cũng như những lời góp ý của các anh em để có được 1 cái lisp khá tốt mà chúng ta đang sử dụng. Mình đã dùng lisp và có 1 số chia sẻ cho các bạn như sau (kinh nghiệm bản thân thôi nhé):

- các bạn muốn chuyển sang font gi ? thì các bạn làm ơn chuyển về font chuẩn trước cho mình (font chuẩn là font thuộc bảng mã VNI-WINDOWS, chẳng hạn font VNI-HELVE CONDENSER là 1 font mà mình thường hay dùng trong bản vẽ, gần như mình chưa gặp lỗi gì với font này - tiếng Việt cũng như tiếng Anh nhé các bạn). Ngày xưa mình đi học trong trường, các thầy cô hay nói là nếu font các bạn gõ tiếng việt bị lỗi, thì các bạn hãy đưa nó về bảng mã VNI-WINDOWS thì sẽ không bị lỗi, ngày đó mình hay dùng font VNI-TIMES, còn bi giờ mình dùng font VNI-HELVE CONDENSER là chính.

- Sau khi các bạn chuyển về font thuộc bảng mã VNI-WINDOWS, sau đó cac bạn lưu ý, nếu cần chuyển chữ hoa hay chu thường, các bạn hãy chuyển lúc này nhé, vẫn giữ nguyên font vni và chuyển về hoa hay thường, xong rồi các bạn hãy chuyển nó sang font thuộc bảng mã unicode (arial, tahoma, time new romans,...), hoặc tcvn3 (.vnarial,....). Lúc nãy gần như là ok, cũng có 1 vài lỗi xuất hiện, nhưng giảm thiểu lỗi khá nhiều, sau đó kết hợp chỉnh tay, hoặc dùng lệnh find trong cad để thay thế các text lỗi đó bằng text mong muốn.

*** LƯU Ý: trước khi chuyển font, cần xem xét kĩ font gốc của bạn có đúng với Tesxt style đang chọn ko ? chữ có bị lỗi ko ? noi chung la trước khi chuyển, fai kiểm tra trước kĩ càng, rồi hãy chuyển. Như vậy thì các bạn chuyển hầu như ko bị lỗi, 1 số trường hợp bị lỗi khi gặp mtext (text đôi), thi các bạn nên phá ( lệnh explode) nó thành text (text đơn), rồi hãy chuyển font nhé. Chúc các bạn chuyển font thành công nhé ! Ai có chiêu thức, mẹo gì hay khi chuyển, thì góp ý nhé. Học hỏi, chia sẻ lẫn nhau để cùng phát triển nhé anh em !!!

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
Vào lúc 24/11/2015 tại 14:39, Nguyen Hoanh đã nói:

VẤN ĐỀ

Bác Vbao có nhờ mình xem cho một file xem vì sao file này là mã TCVN mà không convert được sang các mã khác.

Vì đây là vấn đề khá thú vị, một vài bạn cũng khó thể sẽ gặp điều tương tự, nên mình chia sẻ lên đây để mọi người cùng theo dõi.

 

File đó như sau (mình đã xoá các nội dung khác, chỉ để các nội dung text cần nói):

http://www.cadviet.com/upfiles/5/3_percentfontsample.dwg

 

NGUYÊN NHÂN

Text trong file này có mã là TCVN3, nhưng không viết theo kiểu thông thường bằng các phần mềm gõ tiếng Việt (Unikey, Vietkey,...) mà được tạo ra theo một cách nào đó.

Thay vì chữ có mã code theo bảng ASCII thì chữ lại được hiển thị theo kiểu %%XXX trong đó XXX là mã ASCII của chữ. Bằng cách này, chữ vẫn hiển thị lên đúng mã TCVN, tuy nhiên các phần mềm convert font sẽ không thể nhận dạng được.

 

GIẢI PHÁP

Mình đã viết một lệnh cf% dành cho trường hợp này. Các bạn chỉ cần appload file, gõ lệnh cf% là xong.

Sau khi chạy lệnh cf%, các text sẽ được convert về thành các text bình thường và có thể sử dụng các lệnh CFU, CFV,... một cách bình thường.

 



(defun c:cf% ()
(defun convertone (ent)
(setq tt (entget ent))
(if (and (wcmatch (cdr (assoc 0 tt)) "*TEXT,ATTRIBUTE")
(wcmatch (setq gt (cdr (assoc 1 tt))) "*%%###*")
)
(progn
(setq
i 1
len (strlen gt)
kq ""
)
(while (<= i len)
(if (wcmatch (substr gt i 5) "%%###")
(setq
curchar (chr (atoi (substr gt (+ i 2) 3)))
i (+ i 5)
)
(setq
curchar (substr gt i 1)
i (1+ i)
)
)
(setq kq (strcat kq curchar))
)
(entmod (subst (cons 1 kq) (assoc 1 tt) tt))
(entupd ent)
)
)
)
(setq ent (entnext))
(while (setq ent (entnext ent))
(convertone ent)
)
(princ)
)

anh Hoanh ơi sao em su dung lisp cf% mà không được vậy anh, anh chỉ cho em với cảm ơn anh nhiều

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

Mình cop nhặt được vài code về lisp chuyển đổi font chữ này và có chỉnh sửa lại chút cho dễ sử dụng, mọi người ai quan tâm thì dùng nhé

Link: https://drive.google.com/file/d/1O-a3KMe2KJGWUgKGC2xLZixnLIZU1bTL/view

Video: 

 

 

 

 

  • Like 1
  • Vote giảm 1

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
Vào lúc 10/12/2018 tại 09:30, Biet ve CAD đã nói:

Mình cop nhặt được vài code về lisp chuyển đổi font chữ này và có chỉnh sửa lại chút cho dễ sử dụng, mọi người ai quan tâm thì dùng nhé

Link: https://drive.google.com/file/d/1O-a3KMe2KJGWUgKGC2xLZixnLIZU1bTL/view

Video: 

 

 

 

 

Cái này có cách nào mình áp dụng luôn cho Block ATT luôn không bác. Mong Bác giúp đỡ. Mình cảm ơn.

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

Tạo một tài khoản hoặc đăng nhập để nhận xét

Bạn cần phải là một thành viên để lại một bình luận

Tạo tài khoản

Đăng ký một tài khoản mới trong cộng đồng của chúng tôi. Điều đó dễ mà.

Đăng ký tài khoản mới

Đăng nhập

Bạn có sẵn sàng để tạo một tài khoản ? Đăng nhập tại đây.

Đăng nhập ngay

×