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ị

Không xử lý được khi chữ dùng font tcvn. Vì font tcvn hoa thường không phân biệt bằng mã chữ mà phân biệt bằng font. Vd: .vnTime và .vnTimeH.

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Ấ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)

)

  • Like 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

Anh Hoành ơi. Em làm vẫn chưa được. Gửi file anh xem giúp!

 

Thao tác:

- Để cho chắc e cho chạy luôn lisp "cf%". Sau đó em load lisp "chuyendoifont" vào và tiến hành convert font từ VNI sang Unicode bằng lệnh "cfu"

 

Gõ cfu/ Chọn text VNI/ Enter. Sau đó em đổi stye cho chữ từ "VNI-Helv..." sang style mới "Arial" nhưng vẫn bị lỗi font!

 

http://www.cadviet.com/upfiles/5/147694_gui_anh_hoanh.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

Được mà bạn,

Bạn phải đổi font cho tất cả các style.

Vì style của bạn quá nhiều, mình sửa sang Arial không xuể để test, nhưng sửa cái nào là cái đấy có tiếng Việt.

Bạn xem file dở dang này:

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

  • 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

Mình vừa cập nhật mã code để tăng tốc độ xử lý.

Bạn thử download và dùng nhé.

 

Với file cad của bạn, có tất cả 22549 đối tượng text, chạy hết khoảng 1 phút.

Cảm ơn anh hoành rất nhiều, nhưng anh cập nhật mã code mới ở đâu em ko thấy , nhờ anh load lên lại dc ko 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

Mình vừa cập nhật mã code để tăng tốc độ xử lý.

Bạn thử download và dùng nhé.

 

Với file cad của bạn, có tất cả 22549 đối tượng text, chạy hết khoảng 1 phút.

em load lại file lsp trang 1, về sử dụng cfu, các text vẫn đứng im ko có dấu hiệu gì cả anh hoành ơi..... anh giúp em với.

nó chỉ báo Thoi gian chuyen font: 15ms. còn các font vẫn như cũ . cũng là file hôm trước em gửi cho 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

Lúc select, acad báo có mấy đối tượng được chọn bạn?

cfu em chọn tất cả cad báo
Hay cho cac text
Select objects: Specify opposite corner: 240 found
Select objects:
Thoi gian chuyen font: 78ms.
font cũng ko chuyển vê unicode. nhờ anh giúp đỡ

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

cái này không dễ rồi, chắc là do cài đặt của PC. Mình dùng W7-32 sử dụng acad 2007,2010 và thử nhiều bản vẽ khi dùng lệnh cft,cfv thì thấy có báo tgian thực thi là xx giây, dùng lệnh cfu thì bị not repon.. như có Bạn đã đề cập ở trê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

Cảm ơn anh hoành và các anh em trên diễn đàn đã tận tình giải quyết vấn đề của em nhờ giúp, em dùng lsp chuyển font của anh nguyễn hoành, về lệnh cf+ & cf- thì rất ok. còn các loại lệnh chuyển font cft, cfv & cfu thì trong đó có một số text thay đổi nhưng sau khi điều chỉnh styre vẫn bị lỗi, còn có một số  text vẫn như cũ ko thay đổi gì cả. mong muốn anh hoành cố gắng tìm ra nguyên nhân giúp cho anh em trên diễn đàn với. Em thấy chuyển đổi font trong cad rất hữu ích .Một lần nữa chúc các anh em trong diễn đàn mạnh khỏe.

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

Thực sự mình cũng thấy khá khó hiểu, vì trên máy mình chạy ổn. Mình đang đoán rằng phần download của diễn đàn có vấn đề.

 

Nhờ các bạn test cho mình 2 file này,

3_convertfont_new6.lsp

3_convertfontphantram.lsp

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

Thực sự mình cũng thấy khá khó hiểu, vì trên máy mình chạy ổn. Mình đang đoán rằng phần download của diễn đàn có vấn đề.

 

Nhờ các bạn test cho mình 2 file này,

3_convertfont_new6.lsp

3_convertfontphantram.lsp

  Cảm ơn bác hoành nhiều, em đã test và dung được rồi. anh nói đúng phần download của diễn đàn chắc có trục trặc gì anh hoành ah. Khi em copy code trực tiếp của anh vào thì trong lsp có cấu trúc xắp xếp hơi khác. Bây giờ đã ok rồi anh hoành. Cảm ơn anh nhiều.

- Em dùng thử chạy về unicode ok.

- từ unicode - vni - tcvn3 vẫn báo lỗi.

- Anh lỡ giúp rồi anh cố gắng giúp em luôn nghen anh.

- cf- ( chuyển tất cả về chữ thường)   anh có thể chỉnh chữ cái đầu tiên trong chuỗi vẫn là chữ in được ko anh 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

1. từ unicode - vni - tcvn3 vẫn báo lỗi.

2. cf- ( chuyển tất cả về chữ thường)   anh có thể chỉnh chữ cái đầu tiên trong chuỗi vẫn là chữ in được ko anh hoành.

1. Từ unicode - vni - TCVN3 báo lỗi gì bạn?

2. Chỉ viết hoa riêng chữ đầu tiên, sau khi bạn dùng lệnh cf-, bạn dùng lệnh TCASE là được.

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

down file ở bài #39 thì ngon rồi.

Các Bạn lưu ý:

- Trước khi chuyển về fonts TCVN thì các text nguồn nên dùng lệnh TCASE để chuyển về chữ HOA hoặc chữ THƯỜNG thì lisp chạy chính xác

- Với text nguồn có font là Unicode do người dùng gõ vào thì chuyển về VNI hay TCVN đều tốt

- Với text nguồn có font là Unicode do lisp chuyển về thì khi đổi sang TCVN bị lỗi ở một số ký tự, ví dụ :"trong quá trình thi công phải có biện pháp thoát nước, chống sạt lỡ"

  • 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

1. Từ unicode - vni - TCVN3 báo lỗi gì bạn?

2. Chỉ viết hoa riêng chữ đầu tiên, sau khi bạn dùng lệnh cf-, bạn dùng lệnh TCASE là được.

Cảm ơn anh hoành đã chia sẽ.

việc em chuyển vni - tcvn3. em thử 2 trường hợp: 

1. chuyển font từ các loại font khác về unicode và chuyển ngược lại vni, tcvn3 xẩy ra như sau:

nguồn :"- MẶT ĐƯỜNG BTXM M200 ĐÁ 2X4 DÀY 20CM" - unicode

đích: "- MÆT ĐƯĂªNG BTXM M200 ĐÁ 2X4 DÀY 20CM" - tcvn3

Cái này giống ý kiến của bạn tien 2005 nói trên.

2. Chuyển font chữ tự gõ vào: cad báo 

Hay cho cac text
Select objects: Specify opposite corner: 1 found
Select objects:
Thoi gian chuyen font: 0ms
phần chữ vẫn giữ nguyên.
 - còn ý thứ 2 bạn tiên và các anh em dùng bình thường thì em cung ko biết nói sao.
 - Anh hoành có thể kiểm tra 2 code anh đã test bài trước có thiếu gì ko anh.
mong anh giúp đỡ.

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

Thật lạ, mình đã làm như sau:

- dùng lệnh Dtext tạo một text với nội dung "- MẶT ĐƯỜNG BTXM M200 ĐÁ 2X4 DÀY 20CM" bằng mã unicode

- dùng lệnh cft để chuyển text này sang tcvn

- dùng lệnh cfv để chuyển text này sang vni

- dùng lệnh cfu để chuyển text này trở lại unicode

- kết quả được "- MặT ĐƯờNG BTXM M200 Đá 2X4 DàY 20CM"

 

Nghĩa là không bị lỗi (lỗi chữ hoa thường do bị ở lúc chuyển TCVN).

 

bạn congchivo có thể mô tả cách làm mà lisp bị lỗi để mình có thể tái diễn để tìm lỗi lisp được 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

Thật lạ, mình đã làm như sau:

- dùng lệnh Dtext tạo một text với nội dung "- MẶT ĐƯỜNG BTXM M200 ĐÁ 2X4 DÀY 20CM" bằng mã unicode

- dùng lệnh cft để chuyển text này sang tcvn

- dùng lệnh cfv để chuyển text này sang vni

- dùng lệnh cfu để chuyển text này trở lại unicode

- kết quả được "- MặT ĐƯờNG BTXM M200 Đá 2X4 DàY 20CM"

 

Nghĩa là không bị lỗi (lỗi chữ hoa thường do bị ở lúc chuyển TCVN).

 

bạn congchivo có thể mô tả cách làm mà lisp bị lỗi để mình có thể tái diễn để tìm lỗi lisp được không?

 em gõ dt với nội dung UNICODE : " MẶT ĐƯỜNG BTXM M200 ĐÁ 1X2 DÀY 20CM"

 

bắt đầu chuyển cft: kết quả chưa đổi stye : MÆT ĐƯĂªNG BTXM M200 ĐÁ 1X2 DÀY 20CM

 

Sau khi đổi stye : MÆT ĐƯĂªNG BTXM M200 ĐÁ 1X2 DÀY 20CM.

 

bắt đầu chuyển cfv kết quả chưa đổi stye: MAĂ‹T ĐƯĂ”Ă˜NG BTXM M200 ĐÁ 1X2 DÀY 20CM

 

Sau khi đổi stye: MAĂ‹T ĐƯĂ”Ă˜NG BTXM M200 ĐÁ 1X2 DÀY 20CM

 

- Em thấy hàng chữ sau vẫn giữ nguyên, hàng chữ đầu thay đổi nhưng sau khi đổi stye thì kết quả vẫn lỗi anh hoành ah.

- em gửi lại lsp của anh hoành kiểm tra giúp em nhé.http://www.cadviet.com/upfiles/5/56922_chuyendoifont_1.lsp

 

- Anh hoành ơi hình như lsp của anh cũng ảnh hưởng đến font chữ của notepad phải ko anh. Em rà từng chữ trên lsp anh hoành đã đưa lên diễn đàn, thì có một sô ký tự nguôn ngữ chuyển đổi trong lsp khác với Sau khi em copy và dán vào notepad anh ah. notepad của em font chữ unicode còn của anh là gì ........

Có khả năng anh đưa file .vlx sẽ ko có vấn đề gì anh ah.

 (cons "tcvn"
  (list "¸"   "µ"   "¶"   "·" "¹"   "¨"   "¾"   "Æ" "»"
3_convertfont_new6.lsp- dòng ký tự trên khác với em xem trực tiếp trên diễn đàn, 
 Anh cho em xin 1 file vlx của anh thử là biết liền thôi. chứ nếu do máy thì vài cái lsp của em dùng ko đc rồi.
lsp chuyển đổi font rất phức tạp vì trong 1 lsp của anh chuyển tới 3 loại font tcvn3, vni, unicode. còn notapad chỉ dùng đúng một loại, theo em nghĩ là vấn đề nằm chỗ này, lệnh cf+, cf- vẫn ok. nhưng chuyển font thì có vấn đề.
Theo em là vậy thôi chứ em ko biết gì về lsp anh ah.
chúc anh hoành và các anh em trên diễn đàn mạnh khỏe.
 
 
 

 

  • 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

Bạn thử test giúp mình file vlx convertfont này nhé.

3_convertfont.zip

 Bắt đầu em gõ font chữ vni: mặt đường bê tông xi măng m200 đá 1x2

lệnh chuyển font hoàn toàn hoàn hảo anh hoành ah.

Cảm ơn anh rất nhiều bây giờ ok rồi.

anh hoành còn một vấn đề nữa anh ah.

chuyển qua lại vni - tcvn3 ko vấn đề gì.

khi chuyển vni- unicode ok, chuyển ngược lại báo lõi chữ. các chữ cái "Đ" , " Ă", " Ư", " Ơ". chắc trong code dịch ngược từ unicode - vni hay TCVN3 có máy chữ cái bị lỗi anh hoành ah

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

@NguyenHoanh: Bạn gõ 1 đoạn text có font là VNI

Sau đó dùng lệnh cfu để chuyển đoạn text đó về unicode (kết quả là A) =>lisp chuyển hoàn hảo

Dùng lệnh cft để chuyển kết quả A về font TCVN thì sẽ thấy lỗi ở một số ký tự

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

@NguyenHoanh: Bạn gõ 1 đoạn text có font là VNI

Sau đó dùng lệnh cfu để chuyển đoạn text đó về unicode (kết quả là A) =>lisp chuyển hoàn hảo

Dùng lệnh cft để chuyển kết quả A về font TCVN thì sẽ thấy lỗi ở một số ký tự

bạn tiên đọc ở trang 1. Anh hoành đã tóm tắt các lỗi đã ý kiến. còn nhược điểm của font TCVN3 thì có lý do gì đó. nhưng lsp của anh hoành đã đạt đến 99% rồi. nói chung giải quyết rất nhiều thời gian cho 1 bộ bản vẽ đẹp. em cảm ơn anh hoành và các anh em trong diễn đàn vui tươi.

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

×