Đến nội dung


Hình ảnh
* * * - - 3 Bình chọn

Hướng dẫn lập trình Lisp


  • Please log in to reply
497 replies to this topic

#61 tuan_thietkedien

tuan_thietkedien

    biết lệnh mirror

  • Members
  • PipPipPip
  • 153 Bài viết
Điểm đánh giá: 15 (tàm tạm)

Đã gửi 23 March 2009 - 08:37 AM

Chào bạn Tuanthietkedien.
Chữ cái của nó nhiều hơn dăm ba kí tự nhiều bác Bình à
Đó chính là nguyên nhân dẫn đến Lisp của bạn không chạy được.

Bạn gửi cái file của bạn lên đây có 2 chữ CAD-2008 gồm 2 dòng.
Bạn nói rằng :

Phải chăng dòng đầu CAD-2008 là chữ tiếng Anh. Dòng thứ 2 : CAD-2008 là chữ Tiếng Nhật.
Và ý của bạn muốn biến chữ CAD tiếng Anh thành chữ CAD tiếng Nhật.
Và đoạn lệnh (vl-string-translate "ABC" "ABC" nd) này phải chăng "ABC" là chữ Tiếng Anh; "ABC" chính là chữ "ABC" tiếng Nhật.
Mong bạn hãy giải thích thật rõ ràng thì mọi người mới có thể giúp bạn được.
Chào bạn.


Chào bạn Tue_NV
Đúng là dòng đầu CAD-2008 là chữ tiếng Anh. Dòng thứ 2 : CAD-2008 là chữ Tiếng Nhật. "ABC" là chữ Tiếng Anh; "ABC" chính là chữ "ABC" tiếng Nhật. Bạn thấy chữ tiếng Nhật trông nó mập hơn phải không, nhưng khi vào Autocad trông nó lại nhỏ gọn hơn chữ tiếng Anh.
Mình up lại file khác rõ ràng hơn. À, bạn copy bổ sung font này vào thư mục Font của CAD luôn nha.
Kết quả sau khi mình dùng Lisp 2 để chuyển "ABC" chữ Tiếng Anh thành "ABC" chữ tiếng Nhật thì nó ra như vậy: bD-2008 .
Mong mọi người chỉ giáo cách khắc phục.

http://www.cadviet.c...Drawing2_13.dwg
http://www.cadviet.c...es/extfont2.shx

@phamthanhbinh:
Mình không giận bạn đâu, mình đều là anh em trên diễn đàn hết mà, mọi người góp ý chứng tỏ là có sự quan tâm, sao mình lại giận được, có như vậy thì mình mới ngày càng tiến bộ được chứ.
Cám ơn bạn luôn quan tâm, giúp đỡ nha.
Chúc bạn và mọi người 1 tuần mới làm việc vui vẻ, thành công.
  • 0

#62 gia_bach

gia_bach

    biết lệnh adcenter

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 1436 Bài viết
Điểm đánh giá: 1426 (rất tốt)

Đã gửi 23 March 2009 - 10:04 AM

[quote name='tuan_thietkedien' post='52985' date='Mar 21 2009, 10:33']..............................
Em muốn số hóa nội dung trong text, cụ thể như A thành 1, B thành 2, C thành 3, D thành 4, E thành 5.
.........................
Ví dụ : Text nội dung là CAD-2008 sau khi chạy lisp chuyển thành 314-2008.
.............[/quote]

[quote name='tuan_thietkedien' post='53000' date='Mar 21 2009, 15:20']Chào anh SSG
Trước tiên em đã dùng thử vl-string-translate, và viết được 2 cái lisp sau
1. Lisp chuyển ABC thành 123
.......................

2. Lisp chuyển ABC tiếng Anh thành ABC tiếng Nhật.
(defun c:hk ( / e d nd td )
;;; (setq chuoi_tim (getstring t "Enter string to search for: ")
;;; chuoi_thaythe (getstring t "Enter string to replace with: "))
(setq chuoi_tim "A"
chuoi_thaythe "A")
(setq e (car(entsel))
d (entget e)
nd (cdr(assoc 1 d))
td (vl-string-subst chuoi_thaythe chuoi_tim nd)
d (subst (cons 1 td) (assoc 1 d) d)
)
(entmod d)
(princ)
)


  • 1

#63 Tue_NV

Tue_NV

    KS Võ Quang Tuệ

  • Moderator
  • PipPipPipPipPipPipPip
  • 4296 Bài viết
Điểm đánh giá: 3804 (đỉnh cao)

Đã gửi 23 March 2009 - 12:49 PM

Chào bạn Tue_NV
Đúng là dòng đầu CAD-2008 là chữ tiếng Anh. Dòng thứ 2 : CAD-2008 là chữ Tiếng Nhật. "ABC" là chữ Tiếng Anh; "ABC" chính là chữ "ABC" tiếng Nhật. Bạn thấy chữ tiếng Nhật trông nó mập hơn phải không, nhưng khi vào Autocad trông nó lại nhỏ gọn hơn chữ tiếng Anh.
Mình up lại file khác rõ ràng hơn. À, bạn copy bổ sung font này vào thư mục Font của CAD luôn nha.
Kết quả sau khi mình dùng Lisp 2 để chuyển "ABC" chữ Tiếng Anh thành "ABC" chữ tiếng Nhật thì nó ra như vậy: bD-2008 .
Mong mọi người chỉ giáo cách khắc phục.

Chào bạn Tuanthietkedien
Mở file bạn ra -> bấm lệnh ed (ddedit) thì chữ CAD-2008 trong Tiếng Nhật là chữ này :
\M+18262\M+18260\M+18263\M+1815B\M+18251\M+1824F\M+1824F\M+18257
Tức là chữ C trong tiếng Nhựt tương đương với chữ \M+18262 (trong tiếng Anh)
Tức là chữ A trong tiếng Nhựt tương đương với chữ \M+18260 (trong tiếng Anh)
Tức là chữ D trong tiếng Nhựt tương đương với chữ \M+18263 (trong tiếng Anh)
Ta có thể suy ra :
Chữ B trong tiếng Nhựt tương đương với chữ \M+18261 (trong tiếng Anh)
Chữ E trong tiếng Nhựt tương đương với chữ \M+18264 (trong tiếng Anh)
Tương tự, suy ra dấu -, chữ số 2; 0; 8 tương đương với chữ gì trong tiếng Anh

Nếu điều suy luận của mình là đúng thì bạn có thể dùng hàm vl-string-subst như bác gia bách đã chỉ
Hoặc có thể sử dụng như thế này : (if (= te1 "A") (setq te1 "\\M+18260"))
Tức là nếu biến te1 ="A" trong chữ tiếng Anh thì gán cho biến te1 bằng chữ "\M+18260" (tức là chữ "A" trong tiếng Nhựt)

Bạn hãy trả lời cho mình biết, những điều mình nói trên đúng hay không vì mình cũng đang có ý tưởng để trợ giúp cho bạn.
Chào bạn
  • 1

#64 tuan_thietkedien

tuan_thietkedien

    biết lệnh mirror

  • Members
  • PipPipPip
  • 153 Bài viết
Điểm đánh giá: 15 (tàm tạm)

Đã gửi 23 March 2009 - 01:37 PM

Chào bạn Tuanthietkedien
Mở file bạn ra -> bấm lệnh ed (ddedit) thì chữ CAD-2008 trong Tiếng Nhật là chữ này :
\M+18262\M+18260\M+18263\M+1815B\M+18251\M+1824F\M+1824F\M+18257
Tức là chữ C trong tiếng Nhựt tương đương với chữ \M+18262 (trong tiếng Anh)
Tức là chữ A trong tiếng Nhựt tương đương với chữ \M+18260 (trong tiếng Anh)
Tức là chữ D trong tiếng Nhựt tương đương với chữ \M+18263 (trong tiếng Anh)
Ta có thể suy ra :
Chữ B trong tiếng Nhựt tương đương với chữ \M+18261 (trong tiếng Anh)
Chữ E trong tiếng Nhựt tương đương với chữ \M+18264 (trong tiếng Anh)
Tương tự, suy ra dấu -, chữ số 2; 0; 8 tương đương với chữ gì trong tiếng Anh

Nếu điều suy luận của mình là đúng thì bạn có thể dùng hàm vl-string-subst như bác gia bách đã chỉ
Hoặc có thể sử dụng như thế này : (if (= te1 "A") (setq te1 "\\M+18260"))
Tức là nếu biến te1 ="A" trong chữ tiếng Anh thì gán cho biến te1 bằng chữ "\M+18260" (tức là chữ "A" trong tiếng Nhựt)

Bạn hãy trả lời cho mình biết, những điều mình nói trên đúng hay không vì mình cũng đang có ý tưởng để trợ giúp cho bạn.
Chào bạn


Chào bạn Tue_NV
Không hiểu sao khi mình dùng lệnh ed (ddedit) thì chữ CAD-2008 kiểu gõ Tiếng Nhật vẫn ra chữ CAD-2008 như bình thường. Dấu -, chữ số 2; 0; 8 vẫn hiện ra bình thường. Bạn thử xem lại máy đã cài font tiếng Nhật chưa ( trong Control Panel \ Regional and Language options ), bạn dùng đĩa cài WinXp bỏ vào ổ đĩa, sau đó vào đường dẫn mình đã chỉ rồi check vào cái ô mình khoanh tròn đỏ, sau đó nhấp Apply là cài được. Bạn cũng xem thử Text Style trong CAD có giống mình hay không nhe. Có lẽ vì thế mà máy của bạn nó thể hiện như vậy.

http://www.cadviet.c...les/Book2_2.xls

Sau khi bạn cài xong rồi xem lại thử xem có còn tình trạng như vậy hay không nhé.

@Bác gia_bach:
Em giải thích lý do làm cái lisp thay thế chữ này để bác hiểu thêm. Tất cả những bản vẽ công ty làm sẽ gửi qua bên Nhật, do đó họ yêu cầu dùng kiểu gõ tiếng Nhật. Vậy để đảm bảo tất cả text trong bản vẽ đều là kiểu gõ tiếng Nhật nên em muốn làm 1 lisp tự động tìm và thay thế tất cả những ký tự tiếng Anh thành những ký tự tiếng Nhật.
Khi tạo bất kỳ 1 text và nhập nội dung, bởi vì phải chuyển đổi giữa 2 kiểu gõ nên nhiều khi sẽ có sơ suất. Ví dụ như text có nội dung AUTOCAD là không được vì lẫn lộn có kiểu gõ tiếng Anh ( chữ AU và CAD là kiểu gõ tiếng Anh). Sau khi dùng lisp sẽ chuyển thành như sau AUTOCAD ( toàn bộ ký tự đã chuyển sang kiểu gõ tiếng Nhật ).
Do đó nếu text có nội dung "A là B" ---> kết quả nhận được "1 là 2" thì đúng là kết quả không được mong đợi nhưng mục đích chính của em là cái lisp thứ 2, cái lisp 1 em chỉ làm thử nghiệm thôi.
Cái lisp của bác sửa lại cho em chạy rất OK nhưng ý của em là muốn lisp kiểm tra từng ký tự trong nội dung của tập hợp các text được chọn rồi sẽ thay thế luôn. Và nội dung text thì rất là nhiều chứ không chỉ lúc nào cũng là CAD-2008, cái này em chỉ nêu ra làm ví dụ thôi.

Nếu có gì chưa hiểu rõ thì bác gia_bach và bạn Tue_NV hỏi thêm nha.
Xin cám ơn đã nhiệt tình giúp đỡ.
  • 0

#65 gia_bach

gia_bach

    biết lệnh adcenter

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 1436 Bài viết
Điểm đánh giá: 1426 (rất tốt)

Đã gửi 23 March 2009 - 03:04 PM

......................
Sau khi dùng lisp sẽ chuyển thành như sau AUTOCAD ( toàn bộ ký tự đã chuyển sang kiểu gõ tiếng Nhật ).
.....................

Chào bạn tuan_thietkedien!
Ví dụ minh họa chuyển từ kiểu gõ tiếng Anh sang kiểu gõ tiếng Nhật.
LISP chỉ chuyển các kí tự : "A" "B" "C" "D" "0" "1" "2" "8" "9" "-" sang kiểu gõ tiếng Nhật.
Bạn có thể bổ sung các kí tự khác vào biến list_tim list_thay.

(defun ReplaceString (str str1 str2 / m)
(setq m 0)
(while (setq m (vl-string-search str1 str m))
(setq str (vl-string-subst str2 str1 str m))
(setq m (1+ m))
) ;_ end of while
str
) ;_ end of defun

;;;TxtFR : Text Find and Replace
(defun c:TxtFR (/ list_tim list_thay ss i en ed str str_thay)
(setq list_tim (list "A" "B" "C" "D" "0" "1" "2" "8" "9" "-"))
(setq list_thay (list "A" "B" "C" "D" "0" "1" "2" "8" "9" "ー"))

(setq ss (ssget '((0 . "TEXT")))
i 0)

(while (< i (sslength ss))
(setq en (ssname ss i)
ed (entget en)
str (cdr (assoc 1 ed)) )
(foreach str_tim list_tim
(if (vl-string-search str_tim str)
(setq str_thay (nth (vl-position str_tim list_tim)list_thay )
str (ReplaceString str str_tim str_thay))
)
)
(setq ed (subst (cons 1 str) (assoc 1 ed) ed))
(entmod ed)
;;; (entupd (cdr (assoc -1 ed)))
(setq i (1+ i))
)
(gc)
)

  • 1

#66 tuan_thietkedien

tuan_thietkedien

    biết lệnh mirror

  • Members
  • PipPipPip
  • 153 Bài viết
Điểm đánh giá: 15 (tàm tạm)

Đã gửi 23 March 2009 - 04:50 PM

Chào bạn tuan_thietkedien!
Ví dụ minh họa chuyển từ kiểu gõ tiếng Anh sang kiểu gõ tiếng Nhật.
LISP chỉ chuyển các kí tự : "A" "B" "C" "D" "0" "1" "2" "8" "9" "-" sang kiểu gõ tiếng Nhật.
Bạn có thể bổ sung các kí tự khác vào biến list_tim list_thay.

(defun ReplaceString (str str1 str2 / m)
(setq m 0)
(while (setq m (vl-string-search str1 str m))
(setq str (vl-string-subst str2 str1 str m))
(setq m (1+ m))
) ;_ end of while
str
) ;_ end of defun

;;;TxtFR : Text Find and Replace
(defun c:TxtFR (/ list_tim list_thay ss i en ed str str_thay)
(setq list_tim (list "A" "B" "C" "D" "0" "1" "2" "8" "9" "-"))
(setq list_thay (list "A" "B" "C" "D" "0" "1" "2" "8" "9" "ー"))

(setq ss (ssget '((0 . "TEXT")))
i 0)

(while (< i (sslength ss))
(setq en (ssname ss i)
ed (entget en)
str (cdr (assoc 1 ed)) )
(foreach str_tim list_tim
(if (vl-string-search str_tim str)
(setq str_thay (nth (vl-position str_tim list_tim)list_thay )
str (ReplaceString str str_tim str_thay))
)
)
(setq ed (subst (cons 1 str) (assoc 1 ed) ed))
(entmod ed)
;;; (entupd (cdr (assoc -1 ed)))
(setq i (1+ i))
)
(gc)
)


Chào bác gia_bach
Lisp mà bác viết cho em chạy Ok lắm, hoàn toàn đúng ý của em. Có vài chỗ, vài hàm mới em chưa biết nên sau khi em tìm hiểu nếu có gì không rõ mong bác chỉ thêm. Hầu như lisp dùng hàm vl- , mà mấy hàm này em lại mù tịt.
1 lần nữa xin cám ơn bác và mọi người đã nhiệt tình giúp đỡ.
:cry:
  • 0

#67 Tue_NV

Tue_NV

    KS Võ Quang Tuệ

  • Moderator
  • PipPipPipPipPipPipPip
  • 4296 Bài viết
Điểm đánh giá: 3804 (đỉnh cao)

Đã gửi 23 March 2009 - 05:08 PM

Chào bạn Tue_NV
Không hiểu sao khi mình dùng lệnh ed (ddedit) thì chữ CAD-2008 kiểu gõ Tiếng Nhật vẫn ra chữ CAD-2008 như bình thường. Dấu -, chữ số 2; 0; 8 vẫn hiện ra bình thường. Bạn thử xem lại máy đã cài font tiếng Nhật chưa ( trong Control Panel \ Regional and Language options ), bạn dùng đĩa cài WinXp bỏ vào ổ đĩa, sau đó vào đường dẫn mình đã chỉ rồi check vào cái ô mình khoanh tròn đỏ, sau đó nhấp Apply là cài được. Bạn cũng xem thử Text Style trong CAD có giống mình hay không nhe. Có lẽ vì thế mà máy của bạn nó thể hiện như vậy.

http://www.cadviet.c...les/Book2_2.xls

Sau khi bạn cài xong rồi xem lại thử xem có còn tình trạng như vậy hay không nhé.

@Bác gia_bach:
Em giải thích lý do làm cái lisp thay thế chữ này để bác hiểu thêm. Tất cả những bản vẽ công ty làm sẽ gửi qua bên Nhật, do đó họ yêu cầu dùng kiểu gõ tiếng Nhật. Vậy để đảm bảo tất cả text trong bản vẽ đều là kiểu gõ tiếng Nhật nên em muốn làm 1 lisp tự động tìm và thay thế tất cả những ký tự tiếng Anh thành những ký tự tiếng Nhật.
Khi tạo bất kỳ 1 text và nhập nội dung, bởi vì phải chuyển đổi giữa 2 kiểu gõ nên nhiều khi sẽ có sơ suất. Ví dụ như text có nội dung AUTOCAD là không được vì lẫn lộn có kiểu gõ tiếng Anh ( chữ AU và CAD là kiểu gõ tiếng Anh). Sau khi dùng lisp sẽ chuyển thành như sau AUTOCAD ( toàn bộ ký tự đã chuyển sang kiểu gõ tiếng Nhật ).
Do đó nếu text có nội dung "A là B" ---> kết quả nhận được "1 là 2" thì đúng là kết quả không được mong đợi nhưng mục đích chính của em là cái lisp thứ 2, cái lisp 1 em chỉ làm thử nghiệm thôi.
Cái lisp của bác sửa lại cho em chạy rất OK nhưng ý của em là muốn lisp kiểm tra từng ký tự trong nội dung của tập hợp các text được chọn rồi sẽ thay thế luôn. Và nội dung text thì rất là nhiều chứ không chỉ lúc nào cũng là CAD-2008, cái này em chỉ nêu ra làm ví dụ thôi.

Nếu có gì chưa hiểu rõ thì bác gia_bach và bạn Tue_NV hỏi thêm nha.
Xin cám ơn đã nhiệt tình giúp đỡ.

Chào bạn Tuanthietkedien
Mình đã cài rồi mà tại sao cái chữ CAD-2008 Tiếng Nhật vẫn không hiện được
chữ CAD-2008 tiếng Nhật nó ra như cũ thế này : \M+18262\M+18260\M+18263\M+1815B\M+18251\M+1824F\M+1824F\M+18257
và theo mình suy luận như trên :
Tức là chữ C trong tiếng Nhựt tương đương với chữ \M+18262 (trong tiếng Anh)
Tức là chữ A trong tiếng Nhựt tương đương với chữ \M+18260 (trong tiếng Anh)
Tức là chữ D trong tiếng Nhựt tương đương với chữ \M+18263 (trong tiếng Anh)
Không hiểu sao chữ Nhật nó không hiện. Và mình đã viết đoạn Lisp này và đã chạy thành công.
Bạn thử xem nhé :
(defun c:STRR()
(Setq stri (entget(car(entsel))))
(setq str (cdr(assoc 1 stri)))
(setq n (strlen str) i 1 te "")
(while (<= i n)

(setq te1 (substr str i 1))

(if (= te1 "A") (setq te1 "\\M+18260"))
(if (= te1 "B") (setq te1 "\\M+18261"))
(if (= te1 "C") (setq te1 "\\M+18262"))
(if (= te1 "D") (setq te1 "\\M+18263"))
(setq te (strcat te te1))

(setq i (+ i 1))

)

(setq stri (subst (cons 1 te) (assoc 1 stri) stri))
(entmod stri)
)
LISP chỉ chuyển các kí tự : "A" "B" "C" "D" tiếng Anh sang kiểu gõ tiếng Nhựt.
Cái chữ \\M+18260 chính là chữ "A" trong tiếng Nhựt đó.

Dòng (if (= te1 "A") (setq te1 "\\M+18260"))
thì "A" là kí tự tìm thấy và "\\M+18260" (chính là chữ "A") tiếng Nhựt.
Và bạn hãy thay "\\M+18260" (chữ "A") của Tiếng Nhật do mình bị lỗi Font

Bạn hãy bổ sung thêm kí tự tìm thấy và kí tự thay thế để hoàn thành tốt công việc của bạn.

Bạn hãy chạy thử và cho biết ý kiến nhé.
Chúc thành công. :cry:
  • 1

#68 tuan_thietkedien

tuan_thietkedien

    biết lệnh mirror

  • Members
  • PipPipPip
  • 153 Bài viết
Điểm đánh giá: 15 (tàm tạm)

Đã gửi 24 March 2009 - 10:35 AM

Chào bạn Tuanthietkedien
Mình đã cài rồi mà tại sao cái chữ CAD-2008 Tiếng Nhật vẫn không hiện được
chữ CAD-2008 tiếng Nhật nó ra như cũ thế này : \M+18262\M+18260\M+18263\M+1815B\M+18251\M+1824F\M+1824F\M+18257
và theo mình suy luận như trên :
Tức là chữ C trong tiếng Nhựt tương đương với chữ \M+18262 (trong tiếng Anh)
Tức là chữ A trong tiếng Nhựt tương đương với chữ \M+18260 (trong tiếng Anh)
Tức là chữ D trong tiếng Nhựt tương đương với chữ \M+18263 (trong tiếng Anh)
Không hiểu sao chữ Nhật nó không hiện. Và mình đã viết đoạn Lisp này và đã chạy thành công.
Bạn thử xem nhé :

(defun c:STRR()
(Setq stri (entget(car(entsel))))
(setq str (cdr(assoc 1 stri)))
(setq n (strlen str) i 1 te "")
(while (<= i n)

(setq te1 (substr str i 1))

(if (= te1 "A") (setq te1 "\\M+18260"))
(if (= te1 "B") (setq te1 "\\M+18261"))
(if (= te1 "C") (setq te1 "\\M+18262"))
(if (= te1 "D") (setq te1 "\\M+18263"))
(setq te (strcat te te1))

(setq i (+ i 1))

)

(setq stri (subst (cons 1 te) (assoc 1 stri) stri))
(entmod stri)
)
LISP chỉ chuyển các kí tự : "A" "B" "C" "D" tiếng Anh sang kiểu gõ tiếng Nhựt.
Cái chữ \\M+18260 chính là chữ "A" trong tiếng Nhựt đó.

Dòng (if (= te1 "A") (setq te1 "\\M+18260"))
thì "A" là kí tự tìm thấy và "\\M+18260" (chính là chữ "A") tiếng Nhựt.
Và bạn hãy thay "\\M+18260" (chữ "A") của Tiếng Nhật do mình bị lỗi Font

Bạn hãy bổ sung thêm kí tự tìm thấy và kí tự thay thế để hoàn thành tốt công việc của bạn.

Bạn hãy chạy thử và cho biết ý kiến nhé.
Chúc thành công. :cry:


Chào bạn Tue_NV
Hôm nay mình hơi bận nên sau khi mình dùng thử liền sẽ nhắn bạn biết kết quả nha.
Cám ơn bạn nhiều và chúc bạn thành công.
:cry:
  • 0

#69 tuan_thietkedien

tuan_thietkedien

    biết lệnh mirror

  • Members
  • PipPipPip
  • 153 Bài viết
Điểm đánh giá: 15 (tàm tạm)

Đã gửi 25 March 2009 - 08:50 AM

LISP chỉ chuyển các kí tự : "A" "B" "C" "D" tiếng Anh sang kiểu gõ tiếng Nhựt.
Cái chữ \\M+18260 chính là chữ "A" trong tiếng Nhựt đó.

Dòng (if (= te1 "A") (setq te1 "\\M+18260"))
thì "A" là kí tự tìm thấy và "\\M+18260" (chính là chữ "A") tiếng Nhựt.
Và bạn hãy thay "\\M+18260" (chữ "A") của Tiếng Nhật do mình bị lỗi Font

Bạn hãy bổ sung thêm kí tự tìm thấy và kí tự thay thế để hoàn thành tốt công việc của bạn.

Bạn hãy chạy thử và cho biết ý kiến nhé.
Chúc thành công. :cry:


Chào bạn Tue_NV
Lisp bạn viết chạy Ok lắm, nó vẫn thể hiện tiếng Nhật như bình thường. Hiện tại mình dùng Cad2004, không biết bạn dùng Cad bao nhiêu.
Mình đã thử viết thêm vài dòng để lisp ứng dụng cho 1 tập hợp text, khi này mình dùng thêm 1 vòng while để xét từng text thì không hiểu sao không chạy được, không biết có phải do 2 cái vòng while cùng chạy là không được hay không.
Bạn góp ý cho mình với nhé.
  • 0

#70 tuan_thietkedien

tuan_thietkedien

    biết lệnh mirror

  • Members
  • PipPipPip
  • 153 Bài viết
Điểm đánh giá: 15 (tàm tạm)

Đã gửi 25 March 2009 - 09:37 AM

Chào bác gia_bach, bạn Tue_NV
Khi bổ sung thêm các ký tự còn lại thì kết quả không được như ý muốn lắm.
Lisp của bác gia_bach mấy con số nó chuyển thành những ký tự abc gì đó.
Lisp của bạn Tue_NV có lẽ do mình dùng con số không chính xác nên nó nhảy lung tung.

http://www.cadviet.c...files/TxtFR.lsp
http://www.cadviet.c...pfiles/STRR.lsp
http://www.cadviet.c..._tieng_Nhat.dwg

Bác gia_bach, bạn Tue_NV xem lại dùm em nhé.
  • 0

#71 tuan_thietkedien

tuan_thietkedien

    biết lệnh mirror

  • Members
  • PipPipPip
  • 153 Bài viết
Điểm đánh giá: 15 (tàm tạm)

Đã gửi 25 March 2009 - 09:44 AM

Còn 1 vấn đề này xin hỏi mọi người.

Làm thế nào để mình xác định được tọa độ những điểm giao nhau do các đường thẳng tạo thành.
Ví dụ khi vẽ 1 đoạn thẳng A dài khỏang 10m. Nếu đoạn thẳng A cắt những đoạn thẳng khác có sẵn trong bản vẽ sẽ tạo ra các giao điểm. Và bây giờ muốn lấy ra tọa độ của các giao điểm ấy.

Xin cám ơn.
  • 0

#72 phamthanhbinh

phamthanhbinh

    biết lệnh adcenter

  • Moderator
  • PipPipPipPipPipPipPip
  • 6009 Bài viết
Điểm đánh giá: 3113 (tuyệt vời)

Đã gửi 25 March 2009 - 10:12 AM

Chào bạn Tue_NV
Lisp bạn viết chạy Ok lắm, nó vẫn thể hiện tiếng Nhật như bình thường. Hiện tại mình dùng Cad2004, không biết bạn dùng Cad bao nhiêu.
Mình đã thử viết thêm vài dòng để lisp ứng dụng cho 1 tập hợp text, khi này mình dùng thêm 1 vòng while để xét từng text thì không hiểu sao không chạy được, không biết có phải do 2 cái vòng while cùng chạy là không được hay không.
Bạn góp ý cho mình với nhé.

Chào bạn Tuan_thietkedien,
Không có chuyện hai vòng lặp while thì không cùng chạy được bạn ạ, bạn nên kiểm tra kỹ cấu trúc vòng lặp hoặc điều kiện lặp thôi. Nếu có thể, hãy post cái bạn viết lên mọi người sẽ góp ý cho bạn ạ.
Chúc bạn khỏe và vui.
  • 1
Chúc các quý Anh trên diễn đàn luôn khỏe, đẻ thêm được nhiều thứ để mót.

#73 phamthanhbinh

phamthanhbinh

    biết lệnh adcenter

  • Moderator
  • PipPipPipPipPipPipPip
  • 6009 Bài viết
Điểm đánh giá: 3113 (tuyệt vời)

Đã gửi 25 March 2009 - 10:17 AM

Còn 1 vấn đề này xin hỏi mọi người.

Làm thế nào để mình xác định được tọa độ những điểm giao nhau do các đường thẳng tạo thành.
Ví dụ khi vẽ 1 đoạn thẳng A dài khỏang 10m. Nếu đoạn thẳng A cắt những đoạn thẳng khác có sẵn trong bản vẽ sẽ tạo ra các giao điểm. Và bây giờ muốn lấy ra tọa độ của các giao điểm ấy.

Xin cám ơn.

Bạn hãy tìm kiếm thêm trên diễn đàn nhé. Vấn đề này đã có và được trao đổi nhiều. Mình nhớ có các lisp của bác Hoành, bác SSG rồi, trong đó không chỉ tìm giao của các line mà còn của cả các loại đối tượng khác nữa bạn ạ. Bạn hãy tham khảo và tùy nghi cải thiện theo cái bạn cần. Chúc bạn thành công. Nếu có gì chưa rõ lại post lên nhé.
  • 1
Chúc các quý Anh trên diễn đàn luôn khỏe, đẻ thêm được nhiều thứ để mót.

#74 Tue_NV

Tue_NV

    KS Võ Quang Tuệ

  • Moderator
  • PipPipPipPipPipPipPip
  • 4296 Bài viết
Điểm đánh giá: 3804 (đỉnh cao)

Đã gửi 25 March 2009 - 12:33 PM

Chào bác gia_bach, bạn Tue_NV
Khi bổ sung thêm các ký tự còn lại thì kết quả không được như ý muốn lắm.
Lisp của bác gia_bach mấy con số nó chuyển thành những ký tự abc gì đó.
Lisp của bạn Tue_NV có lẽ do mình dùng con số không chính xác nên nó nhảy lung tung.

http://www.cadviet.c...files/TxtFR.lsp
http://www.cadviet.c...pfiles/STRR.lsp
http://www.cadviet.c..._tieng_Nhat.dwg

Bác gia_bach, bạn Tue_NV xem lại dùm em nhé.

Chào bạn tuanthietkedien
Cái Lisp của mình là do bị lỗi Font nên dòng này (if (= te1 "A") (setq te1 "\\M+18260"))
Cái chữ "\\M+18260" này bạn phải thay đúng bằng chữ Tiếng Nhựt của bạn chứ? tức là thay cái chữ "\\M+18260" bằng cái chữ này nè : "A" cái chữ A của tiếng Nhật đó. Bạn hiểu không? (Do máy mình bị lỗi font chữ mà)

Còn việc tìm giao điểm của các đoạn thẳng bạn có thể tham khảo thêm hàm inters của AutoLisp
Chúc thành công. :cry:
  • 1

#75 tuan_thietkedien

tuan_thietkedien

    biết lệnh mirror

  • Members
  • PipPipPip
  • 153 Bài viết
Điểm đánh giá: 15 (tàm tạm)

Đã gửi 25 March 2009 - 01:09 PM

Bạn hãy tìm kiếm thêm trên diễn đàn nhé. Vấn đề này đã có và được trao đổi nhiều. Mình nhớ có các lisp của bác Hoành, bác SSG rồi, trong đó không chỉ tìm giao của các line mà còn của cả các loại đối tượng khác nữa bạn ạ. Bạn hãy tham khảo và tùy nghi cải thiện theo cái bạn cần. Chúc bạn thành công. Nếu có gì chưa rõ lại post lên nhé.


Cám ơn bạn đã nhắc nha. Mình đã tìm được cái lisp ấy rồi.
Đôi khi mình cũng quên mất phải search trước khi hỏi nữa, hihi..
  • 0

#76 gia_bach

gia_bach

    biết lệnh adcenter

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 1436 Bài viết
Điểm đánh giá: 1426 (rất tốt)

Đã gửi 25 March 2009 - 01:53 PM

.................
Khi bổ sung thêm các ký tự còn lại thì kết quả không được như ý muốn lắm.
Lisp của bác gia_bach mấy con số nó chuyển thành những ký tự abc gì đó.
....................

Chào bạn tuan_thietkedien.
Bạn thử dùng lại LISP này nhé.
Hy vọng kết quả khả quan hơn.
(defun ReplaceString (str str1 str2 / m)
(setq m 0)
(while (setq m (vl-string-search str1 str m))
(setq str (vl-string-subst str2 str1 str m))
(setq m (1+ m))
) ;_ end of while
str
) ;_ end of defun

;;;TxtFR : Text Find and Replace
(defun c:TxtFR (/ list_tim list_thay ss i en ed str str_thay)
(setq list_tim (list "A" "B" "C" "D" "E" "F" "G" "H" "I" "J" "K" "L" "M"
"N" "O" "P" "Q" "R" "S" "T" "U" "V" "W" "X" "Y" "Z"
"0" "1" "2" "3" "4" "5" "6" "7" "8" "9"
"-" "(" ")" "/" "." "," ))
(setq list_thay (list "A" "B" "C" "D" "E" "F" "G" "H" "I" "J" "K" "L" "M"
"N" "O" "P" "Q" "R" "S" "T" "U" "V" "W" "X" "Y" "Z"
"0" "1" "2" "3" "4" "5" "6" "7" "8" "9"
"ー" "(" ")" "/" "。" "、" ))
(setq ss (ssget '((0 . "TEXT")))
i 0)
(while (< i (sslength ss))
(setq en (ssname ss i)
ed (entget en)
str (cdr (assoc 1 ed)) )
(foreach str_tim list_tim
(if (vl-string-search str_tim str)
(setq str_thay (nth (vl-position str_tim list_tim)list_thay )
str (ReplaceString str str_tim str_thay))
)
)
(setq ed (subst (cons 1 str) (assoc 1 ed) ed))
(entmod ed)
(setq i (1+ i))
)
(gc)
)


  • 1

#77 tuan_thietkedien

tuan_thietkedien

    biết lệnh mirror

  • Members
  • PipPipPip
  • 153 Bài viết
Điểm đánh giá: 15 (tàm tạm)

Đã gửi 25 March 2009 - 03:38 PM

Chào bạn tuan_thietkedien.
Bạn thử dùng lại LISP này nhé.
Hy vọng kết quả khả quan hơn.

(defun ReplaceString (str str1 str2 / m)
(setq m 0)
(while (setq m (vl-string-search str1 str m))
(setq str (vl-string-subst str2 str1 str m))
(setq m (1+ m))
) ;_ end of while
str
) ;_ end of defun

;;;TxtFR : Text Find and Replace
(defun c:TxtFR (/ list_tim list_thay ss i en ed str str_thay)
(setq list_tim (list "A" "B" "C" "D" "E" "F" "G" "H" "I" "J" "K" "L" "M"
"N" "O" "P" "Q" "R" "S" "T" "U" "V" "W" "X" "Y" "Z"
"0" "1" "2" "3" "4" "5" "6" "7" "8" "9"
"-" "(" ")" "/" "." "," ))
(setq list_thay (list "A" "B" "C" "D" "E" "F" "G" "H" "I" "J" "K" "L" "M"
"N" "O" "P" "Q" "R" "S" "T" "U" "V" "W" "X" "Y" "Z"
"0" "1" "2" "3" "4" "5" "6" "7" "8" "9"
"ー" "(" ")" "/" "。" "、" ))
(setq ss (ssget '((0 . "TEXT")))
i 0)
(while (< i (sslength ss))
(setq en (ssname ss i)
ed (entget en)
str (cdr (assoc 1 ed)) )
(foreach str_tim list_tim
(if (vl-string-search str_tim str)
(setq str_thay (nth (vl-position str_tim list_tim)list_thay )
str (ReplaceString str str_tim str_thay))
)
)
(setq ed (subst (cons 1 str) (assoc 1 ed) ed))
(entmod ed)
(setq i (1+ i))
)
(gc)
)


Chào bác gia_bach, bạn Tue_NV
Sau khi thử chạy lisp vào file Cad kèm dưới dây thì kết quả là:

Chữ có kiểu gõ tiếng Anh --> chữ có kiểu gõ tiếng Nhật.
Chữ có kiểu gõ tiếng Nhật --> chữ có kiểu gõ tiếng Nhật.

Số có kiểu gõ tiếng Anh --> số có kiểu gõ tiếng Nhật.
Số có kiểu gõ tiếng Nhật --> xxx

Vậy những con số tiếng Nhật này làm lisp chạy không ổn định, không biết có cách khắc phục không.

http://www.cadviet.c...Drawing2_14.dwg

@Bạn Tue_NV
Mình có thử viết thêm chút ít để lisp chạy cho 1 tập hợp text, bạn xem thử góp ý cho mình với nhe.

http://www.cadviet.c...iles/STRR_1.lsp
  • 0

#78 Tue_NV

Tue_NV

    KS Võ Quang Tuệ

  • Moderator
  • PipPipPipPipPipPipPip
  • 4296 Bài viết
Điểm đánh giá: 3804 (đỉnh cao)

Đã gửi 25 March 2009 - 09:03 PM

@Bạn Tue_NV
Mình có thử viết thêm chút ít để lisp chạy cho 1 tập hợp text, bạn xem thử góp ý cho mình với nhe.

http://www.cadviet.c...iles/STRR_1.lsp

Đoạn Lisp trên của bạn chạy tốt.
Nhưng mình lưu ý với bạn một chút là với font chữ .Vn...H. Ví dụ .VNtimeH, .VnarialH, .VnnarrowH......
thì chữ mình có viiét thường thì nó cũng hiểu là chữ hoa. Và những chữ viết thường trở thành chữ hoa thì Lisp sẽ không thay thế đâu bạn nhé.
  • 2

#79 svhau

svhau

    Chưa sử dụng CAD

  • Members
  • Pip
  • 1 Bài viết
Điểm đánh giá: 0 (bình thường)

Đã gửi 11 April 2009 - 05:31 PM

thank bac nha
  • 0

#80 xuanvudk2

xuanvudk2

    biết pan

  • Members
  • Pip
  • 5 Bài viết
Điểm đánh giá: 0 (bình thường)

Đã gửi 11 April 2009 - 06:59 PM

Chào bạn Tuanthietkedien.
Chữ cái của nó nhiều hơn dăm ba kí tự nhiều bác Bình à
Đó chính là nguyên nhân dẫn đến Lisp của bạn không chạy được.

Bạn gửi cái file của bạn lên đây có 2 chữ CAD-2008 gồm 2 dòng.
Bạn nói rằng :

Phải chăng dòng đầu CAD-2008 là chữ tiếng Anh. Dòng thứ 2 : CAD-2008 là chữ Tiếng Nhật.
Và ý của bạn muốn biến chữ CAD tiếng Anh thành chữ CAD tiếng Nhật.
Và đoạn lệnh (vl-string-translate "ABC" "ABC" nd) này phải chăng "ABC" là chữ Tiếng Anh; "ABC" chính là chữ "ABC" tiếng Nhật.
Mong bạn hãy giải thích thật rõ ràng thì mọi người mới có thể giúp bạn được.
Chào bạn.

Tôi không phải là dân xây dựng nhưng cũng dùng đến CAD nhiều vì làm về xây lắp điện, Nhưng trình cad còn non nên không hiểu lập trình autolisp có ứng dụng gì? Anh em trong diễn đàn ai có tài liệu gì về nó thì up lên tôi tham khảo với
  • 0