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

quocmanh04tt

Thành viên
  • Số lượng nội dung

    1123
  • Đã tham gia

  • Lần ghé thăm cuối

  • Ngày trúng

    153

Bài đăng được đăng bởi quocmanh04tt


  1. 7 phút trước, loststars đã nói:

    e gửi bác ạ:
    Pick Text: (183 32 92 85 43 48 48 68 48 32 92 85 43 48 48 67 67 32 92 85 43 48 48 68 53 32 92 85 43 48 48 68 50 32 92 85 43 48 48 68 68 32 215 32 92 85 43 48 48 68 69 32 92 85 43 48 48 69 51 32 223 32 226 32 92 85 43 48 48 69 67 32 92 85 43 48 48 70 50 32 92 85 43 48 48 70 53 32 92 85 43 48 48 70 69 32)

    Text nguồn của nó gồm những chữ gì?


  2. 17 phút trước, loststars đã nói:

    Hoặc là lisp tự nhận những chữ "Ế Ị Í Ó" trong tcvn3 là những chữ "Õ Þ Ý ã" thuộc bảng unicode rồi nên lips không convert nữa.

    Thêm 1 chút nữa: 

    1. Bạn gõ 1 text có các ký tự: "Ế Ị Í Ó" bằng TCVN3 (font mà mã) trong cad (không bao gồm các ký tự khác nhé - chỉ các ký tự bị lỗi).

    2. Dùng lisp này:

    (defun c:tt (/ e)
      (if (setq e (car (entsel "\nPick Text: ")))
        (vl-string->list (cdr (assoc 1 (entget e))))))

    Pick vào text, sẽ có kết quả ở command, copy nó và gửi lên đây!


  3. Bạn làm theo sau và gửi thông tin mình kiểm tra nhé!

    1. Chọn 1 dòng text trên file của bạn (dòng text mà sẽ bị lỗi khi convert) - (đây là text kiểm tra - "TKT").

    2. Copy "TKT" ra và convert, được "TCV" (cái này sẽ lỗi 1 số ký tự như bạn nói).

    3. Copy "TCV" ra và hiệu chỉnh lại các lỗi ký tự được "THC".

    4. Tải lisp này: 

    5. Chọn 3 text ở trên, lisp sẽ xuất ra 1 file .txt, chứa ký tự nội dung của 3 text trên.

    6. Bạn chụp màn hình nội dung file .txt đó, và gửi file .txt đó kèm theo hình cho mình. Mình sẽ kiểm tra giúp bạn.

    • Like 1

  4. 18 giờ trước, loststars đã nói:

     


    E test thử cho nhiều máy, thì máy đc máy không ạ. font unicode thì hiện tại em khá đủ r. k lẽ Arial là font cơ bản nhất máy cũng thiếu ạ :|
    Với lại e gõ trong cad vẫn ra bình thường ạ nên em đang nghĩ có thể là cad đang encode sai ạ.

    Bạn thử lisp dưới đây xem sao! Nếu không được nữa thì có lẽ nên  thay Cad, Win, hoặc máy... hehehe...

    P/s: Chỉ dùng cho TCVN3 -> UNICODE.

     

    t2u.LSP

    • Like 1

  5. 1- Bạn đang dùng hệ điều hành gì? Nếu là win8, 10 thì thử xem có giống thế này không? (ảnh dưới).

    2- Tại sao không copy thẳng từ trang này rồi cho vào vlide, mà phải qua nhiều bước vậy?

    3- Ở bài trên, sau khi convert 1 số chữ vẫn bị lỗi, bạn gửi file dwg đã convert và chỉnh sửa cho mình xem nào!

    P/s: Ở ý 1, nếu là hệ điều hành khác thì bạn thử tìm hiểu qua từ khóa "setting code page" xem sao.

     

    Region.jpg

    • Vote tăng 1

  6. 3 giờ trước, loststars đã nói:

    e dùng file vlx mà bác. cái lsp của bác e chỉ check lại xem thôi. e nghĩ nó vẫn đang bị encode sai khi gọi lệnh vào cad. 

    Với file dwg của bạn, bạn thử cách này xem sao nhé!

    - Load lisp ở trên.

    - Copy đoạn này: (defun DetectFont (str) "tcvn") Paste vào command, rồi enter.

    - Dùng các lệnh CF...

    P/s: Ngoài ra còn cách khác (Auto hơn), nhưng bạn cứ thử cách đó xem sao đã (để xem encode... như bạn nói nó thế nào).

    • Like 2

  7. 2 phút trước, Doan Nguyen Van đã nói:

    Đối với bản vẽ này thì đúng là có thể quét 1 phát được, nhưng em phòng trường hợp ở bản vẽ khác có các Polyline khác nằm trong khung bao. Bác có cao kiến gì ở trường hợp đó không? 

    - Tất nhiên nó không hoàn toàn cho mọi trường hợp, bởi vậy cần chuẩn hóa...!

    - Kiểu bản vẽ này, pline bao ngoài nằm ở layer "Defpoints" (Mình đoán: mục đích là để không in ra) -> khác biệt với pline khác.


  8. Bạn thử lại cái này xem sao:

    (defun c:tt  (/ e l m s _n)
      (setq _n (lambda (txt / str)
                 (setq str (cdr (assoc 1 (entget txt))))
                 (substr str (1+ (strlen (vl-string-right-trim "0123456789" str))))))
      (if (setq s (ssget '((0 . "TEXT"))))
        ((lambda (n)
           (while (and (setq e (ssname s 0)) (ssdel e s)) (setq l (cons e l)))
           (while (> (length l) 1)
             (setq m 0)
             (if (> (strlen (_n (car l))) 0)
               (foreach x  (cdr l)
                 (if (eq (_n x) (_n (car l)))
                   (progn (entmod (append (entget x) (list (cons 62 n))))
                          (setq l (vl-remove x l))
                          (setq m (1+ m))))))
             (if (> m 0)
               (progn (entmod (append (entget (car l)) (list (cons 62 n))))
                      (setq n (cond ((< n 254) (1+ n))
                                    (2)))))
             (setq l (cdr l))))
          2))
      (princ))

     


  9. Chủ thớt thử cái này xem (quét 1 phát):

    (defun c:tt  (/ e lst m n ss)
      (if (setq ss (ssget '((0 . "TEXT"))))
        (progn (setq n 2)
               (while (and (setq e (ssname ss 0)) (ssdel e ss)) (setq lst (cons e lst)))
               (setq lst (vl-sort lst
                                  '(lambda (a b) (< (strlen (cdr (assoc 1 (entget a)))) (strlen (cdr (assoc 1 (entget b))))))))
               (while (> (length lst) 1)
                 (setq m 0)
                 (foreach x  (cdr lst)
                   (if (wcmatch (cdr (assoc 1 (entget x))) (strcat "*" (cdr (assoc 1 (entget (car lst))))))
                     (progn (entmod (append (entget x) (list (cons 62 n))))
                            (setq lst (vl-remove x lst))
                            (setq m (1+ m)))))
                 (if (> m 0)
                   (progn (entmod (append (entget (car lst)) (list (cons 62 n))))
                          (setq n (cond ((< n 254) (1+ n))
                                        (2)))))
                 (setq lst (cdr lst)))))
      (princ))

    • Like 1

  10. Trên diễn đàn chưa thấy (hoặc chưa tìm thấy) code xuất ra file text (.txt, .csv) Unicode từ HEXA, nếu các bác ủng hộ mình sẽ viết 1 tut hướng dẫn cụ thể tạo string để write to unicode (chỉ hướng dẫn, còn code thì các bác tự làm). (Nếu có rồi, hoặc biết rồi thì xin bỏ qua).

    P/s: - Không cần hỗ trợ của VB, code chính thì đã có trên diễn đàn (của Admin)- chỉ có string chưa phù hợp thì nó ra chữ Tàu, và mình đọc trong topic đó không xuống hàng được (break line).

     

    • Vote tăng 1

  11. 54 phút trước, Danh Cong đã nói:

    Ví dụ đơn giản cho việc chèn point vào text.

    Trong đây có tất cả các thứ bạn cần. Hãy tự tìm hiểu.

     

    (defun c:CP ( / ENAME OBJECT PT)
      (setq object (ssget '((0 . "TEXT"))))
      (repeat (sslength object)
        (progn
          (setq Ename (ssname object 0))
          (if     (= (assoc 10 (entget Ename)) "nil")
            (setq PT (cdr (assoc 10 (entget Ename))))
            (setq PT (cdr (assoc 11 (entget Ename))))
        ); end if
          (command "Point" PT)
          (ssdel Ename object)
          ); end progn
        ); end repeat
      (princ)
      )

    Có khi nào có trường hợp này xảy ra đối với TEXT không ta: (= (assoc 10 (entget Ename)) "nil") ???

    • Vote tăng 1
×