Đến nội dung


Hình ảnh
5 stars - based on 24598 reviews
* * * - - 3 Bình chọn

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


  • Please log in to reply
493 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 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

#62 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

#63 phamthanhbinh

phamthanhbinh

    biết lệnh adcenter

  • Moderator
  • PipPipPipPipPipPipPip
  • 6017 Bài viết
Điểm đánh giá: 3118 (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.

#64 phamthanhbinh

phamthanhbinh

    biết lệnh adcenter

  • Moderator
  • PipPipPipPipPipPipPip
  • 6017 Bài viết
Điểm đánh giá: 3118 (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.

#65 Tue_NV

Tue_NV

    KS Võ Quang Tuệ

  • Moderator
  • PipPipPipPipPipPipPip
  • 4321 Bài viết
Điểm đánh giá: 3825 (đỉ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

#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 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

#67 gia_bach

gia_bach

    biết lệnh adcenter

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 1448 Bài viết
Điểm đánh giá: 1434 (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

#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 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

#69 Tue_NV

Tue_NV

    KS Võ Quang Tuệ

  • Moderator
  • PipPipPipPipPipPipPip
  • 4321 Bài viết
Điểm đánh giá: 3825 (đỉ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

#70 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

#71 ndtnv

ndtnv

    biết lệnh divide

  • Members
  • PipPipPipPipPipPip
  • 440 Bài viết
Điểm đánh giá: 391 (khá)

Đã gửi 14 April 2009 - 02:37 PM

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

Lisp của bạn tôi sửa đã khắc phục lỗi số có kiểu gõ tiếng Nhật như sau:
(defun c:STRR ( / ss i j str stri n te te1 asc)
(setq ss (ssget '((0 . "TEXT,MTEXT"))) j 0 )

(while
(< j (sslength ss))
(setq stri (ssname ss j) stri (entget stri) )
(setq str (cdr(assoc 1 stri)))
(setq n (strlen str) i 1 te "")

(while (<= i n)
(setq te1 (substr str i 1) asc (ascii te1))
(if (and (> asc 127)(or (< asc 160) (> asc 223)))
(setq te1 (substr str i 2) i (1+ i))
(progn
(if (= te1 "1") (setq te1 "1"))(if (= te1 "7") (setq te1 "7"))
(if (= te1 "2") (setq te1 "2"))(if (= te1 "8") (setq te1 "8"))
(if (= te1 "3") (setq te1 "3"))(if (= te1 "9") (setq te1 "9"))
(if (= te1 "4") (setq te1 "4"))(if (= te1 "-") (setq te1 "-"))
(if (= te1 "5") (setq te1 "5"))(if (= te1 "x") (setq te1 "x"))
(if (= te1 "6") (setq te1 "6"))(if (= te1 "0") (setq te1 "0"))

(if (= te1 "A") (setq te1 "A"))(if (= te1 "N") (setq te1 "N"))
(if (= te1 "B") (setq te1 "B"))(if (= te1 "O") (setq te1 "O"))
(if (= te1 "C") (setq te1 "C"))(if (= te1 "P") (setq te1 "P"))
(if (= te1 "D") (setq te1 "D"))(if (= te1 "Q") (setq te1 "Q"))
(if (= te1 "E") (setq te1 "E"))(if (= te1 "R") (setq te1 "R"))
(if (= te1 "F") (setq te1 "F"))(if (= te1 "S") (setq te1 "S"))
(if (= te1 "G") (setq te1 "G"))(if (= te1 "T") (setq te1 "T"))
(if (= te1 "H") (setq te1 "H"))(if (= te1 "U") (setq te1 "U"))
(if (= te1 "I") (setq te1 "I"))(if (= te1 "V") (setq te1 "V"))
(if (= te1 "J") (setq te1 "J"))(if (= te1 "W") (setq te1 "W"))
(if (= te1 "K") (setq te1 "K"))(if (= te1 "X") (setq te1 "X"))
(if (= te1 "L") (setq te1 "L"))(if (= te1 "Y") (setq te1 "Y"))
(if (= te1 "M") (setq te1 "M"))(if (= te1 "Z") (setq te1 "Z"))
)
)
(setq te (strcat te te1))
(setq i (1+ i))
)
(setq stri (subst (cons 1 te) (assoc 1 stri) stri))
(entmod stri)

(setq j (+ j 1))

)

(princ)
)
Hoặc dùng lisp này vừa ngắn, lại đầy đủ hơn
(defun c:STRRnew ( / ss i j k str stri n te te1 asc)
(setq En "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-(){}/.,?~!@#$%^&*()_=" )
(setq Jp "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789ー(){}/。、~?!@#$%^&*()_=" )
(setq ss (ssget '((0 . "TEXT,MTEXT"))) j 0 )

(while
(< j (sslength ss))
(setq stri (ssname ss j) stri (entget stri) )
(setq str (cdr(assoc 1 stri)))
(setq n (strlen str) i 1 te "")

(while (<= i n)
(setq te1 (substr str i 1) asc (ascii te1))
(if (and (> asc 127)(or (< asc 160) (> asc 223)))
(setq te1 (substr str i 2) i (1+ i))
(if (setq k (vl-string-search te1 En))
(setq te1 (substr Jp (+ k k 1) 2))
)
)
(setq te (strcat te te1))
(setq i (1+ i))
)
(setq stri (subst (cons 1 te) (assoc 1 stri) stri))
(entmod stri)

(setq j (+ j 1))

)
(princ)
)

  • 3

#72 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 22 April 2009 - 11:50 AM

Xin Chào.

Nhờ các pác cao thủ giúp em cách tạo 1 lisp mới từ 2 lisp sau

1.Lisp chèn Block vào giao điểm các đoạn thẳng.
http://www.cadviet.c..._doan_thang.lsp

2.Lisp cắt đoạn thẳng tại giao điểm các đoạn thẳng
http://www.cadviet.c..._doan_thang.lsp

Em muốn tạo 1 lisp mới (lisp12)có khả năng khi mình quét khối vùng chọn, lisp12 sẽ tìm ra các giao điểm của đoạn thẳng ( theo cách của lisp 1), sau đó lisp12 sẽ cắt tại các giao điểm ấy theo cách của lisp 2.

Nếu có chỗ nào chưa rõ xin phản hồi lại, xin cám ơn nhiều.
  • 0

#73 Tue_NV

Tue_NV

    KS Võ Quang Tuệ

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

Đã gửi 22 April 2009 - 12:58 PM

Xin Chào.

Nhờ các pác cao thủ giúp em cách tạo 1 lisp mới từ 2 lisp sau

1.Lisp chèn Block vào giao điểm các đoạn thẳng.
http://www.cadviet.c..._doan_thang.lsp

2.Lisp cắt đoạn thẳng tại giao điểm các đoạn thẳng
http://www.cadviet.c..._doan_thang.lsp

Em muốn tạo 1 lisp mới (lisp12)có khả năng khi mình quét khối vùng chọn, lisp12 sẽ tìm ra các giao điểm của đoạn thẳng ( theo cách của lisp 1), sau đó lisp12 sẽ cắt tại các giao điểm ấy theo cách của lisp 2.

Nếu có chỗ nào chưa rõ xin phản hồi lại, xin cám ơn nhiều.

Tue_NV chưa hiểu ý của bạn lắm.
Có lẽ bạn nên trình bày thật rõ ràng, thật chi tiết trong 1 file .dwg rồi upload lên đây.
Bạn nhớ mô tả kỹ nhé : kiểu cắt X, Y, khoảng cách cắt : là gì......
Mục đích bạn muốn đạt được, dữ liệu đầu vào -> xử lý -> dữ liệu đầu ra. (Lisp 1 , Lisp2, Lisp 12)
Bạn nhớ trình bày thật đủ, rõ ràng và chi tiết, tránh làm mất thời gian. Bạn làm như thế nào thì làm miễn sao để ai đọc cũng hiểu được ý của bạn muốn nói cái gì và mục đích sau cùng bạn muốn đạt được.
Chào bạn. Chúc bạn vui.
  • 1

#74 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 22 April 2009 - 01:51 PM

Tue_NV chưa hiểu ý của bạn lắm.
Có lẽ bạn nên trình bày thật rõ ràng, thật chi tiết trong 1 file .dwg rồi upload lên đây.
Bạn nhớ mô tả kỹ nhé : kiểu cắt X, Y, khoảng cách cắt : là gì......
Mục đích bạn muốn đạt được, dữ liệu đầu vào -> xử lý -> dữ liệu đầu ra. (Lisp 1 , Lisp2, Lisp 12)
Bạn nhớ trình bày thật đủ, rõ ràng và chi tiết, tránh làm mất thời gian. Bạn làm như thế nào thì làm miễn sao để ai đọc cũng hiểu được ý của bạn muốn nói cái gì và mục đích sau cùng bạn muốn đạt được.
Chào bạn. Chúc bạn vui.


Mình sẽ giải thích về lisp 2
- Nhập lệnh : cat
- Nhập kiểu cắt :
* X là cắt đoạn thằng nằm ngang , giống như trục X vậy.
* Y là cắt đoạn thằng nằm dọc , giống như trục Y vậy.
- Nhập khoảng cách cắt : 100 ( tùy ý người dùng )
- Chọn đối tượng :
* Nếu kiểu cắt là X phải chọn đối tượng theo phương X
* Nếu kiểu cắt là Y phải chọn đối tượng theo phương Y
- Nhập điểm ( là điểm giao nhau các đoạn thẳng )
--> Kết quả tham khảo file đính kèm. http://www.cadviet.c...Drawing2_17.dwg

Cái nhược điểm ở cái lisp 2 là sau khi nhập kiểu cắt và khoảng cách cắt,
người dùng phải chọn đoạn thẳng , rồi chọn từng giao điểm của các đoạn thẳng.
Vậy nếu có mấy chục cái giao điểm thì làm rất lâu.

Do đó, mình thấy có cái lisp 1 tự động tìm giao điểm của đường thẳng,
nhưng mày mò hoài cũng không tài nào ghép 2 cái lisp này với nhau được.

Rút kinh nghiệm về sau phải cố gắng giải thích thật kỹ cho mọi người dễ hiểu.
Chắc mình không làm giáo viên được rùi quá. hihi

Còn chỗ nào chưa rõ xin phản hồi lại nha.

Cám ơn.
  • 0

#75 Tue_NV

Tue_NV

    KS Võ Quang Tuệ

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

Đã gửi 22 April 2009 - 02:52 PM

Mình sẽ giải thích về lisp 2
- Nhập lệnh : cat
- Nhập kiểu cắt :
* X là cắt đoạn thằng nằm ngang , giống như trục X vậy.
* Y là cắt đoạn thằng nằm dọc , giống như trục Y vậy.
- Nhập khoảng cách cắt : 100 ( tùy ý người dùng )
- Chọn đối tượng :
* Nếu kiểu cắt là X phải chọn đối tượng theo phương X
* Nếu kiểu cắt là Y phải chọn đối tượng theo phương Y
- Nhập điểm ( là điểm giao nhau các đoạn thẳng )
--> Kết quả tham khảo file đính kèm. http://www.cadviet.c...Drawing2_17.dwg

Cái nhược điểm ở cái lisp 2 là sau khi nhập kiểu cắt và khoảng cách cắt,
người dùng phải chọn đoạn thẳng , rồi chọn từng giao điểm của các đoạn thẳng.
Vậy nếu có mấy chục cái giao điểm thì làm rất lâu.

Do đó, mình thấy có cái lisp 1 tự động tìm giao điểm của đường thẳng,
nhưng mày mò hoài cũng không tài nào ghép 2 cái lisp này với nhau được.

Rút kinh nghiệm về sau phải cố gắng giải thích thật kỹ cho mọi người dễ hiểu.
Chắc mình không làm giáo viên được rùi quá. hihi

Còn chỗ nào chưa rõ xin phản hồi lại nha.

Cám ơn.

Bạn hãy đọc những đoạn Code này của mình. Hy vọng bạn tự xây dựng được chương trình :
Hỏi về lệnh Break
Chúc thành công nhé :cheers:
  • 1

#76 phamthanhbinh

phamthanhbinh

    biết lệnh adcenter

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

Đã gửi 22 April 2009 - 07:45 PM

Bạn hãy đọc những đoạn Code này của mình. Hy vọng bạn tự xây dựng được chương trình :
Hỏi về lệnh Break
Chúc thành công nhé :cheers:

Chào bạn Tuan_thietkeden,
Để thực hiện việc ghep lisp này bạn cần lưu ý tới những vấn đề như sau:
1/- Việc tạo và sử dụng các hàm con trong hàm chính
2/- Các biến toàn cục và biến cục bộ trong các hàm con
3/- Các hàm lặp.

Với yêu cầu của bạn, theo mình bạn có thể tách toàn bộ yêu cầu của bạn thành từng nhiệm vụ độc lập tức là các hàm con như sau:
Bước 1: Chọn đối tượng
Bước 2: Lấy tập hợp các điểm giao nhau.(dùng lisp 1, bỏ phần insert block đi)
Bước 3: Chọn các đối tượng muốn cắt theo hướng X và các đối tượng muốn cắt theo hướng Y
Bước 4: Thực hiện lệnh cắt (dùng lisp2 kết hợp với các vòng lặp qua tất cả các điểm căt và qua tất cả các đối tượng theo mỗi hướng cắt.)
Cần lưu ý các biến toàn cục trong hàm con phải được khai báo đầy đủ trong hàm chính.

Bạn thử xem nhé, sau đó post lên, có gì mình sẽ cùng xem xét.
  • 1
Chúc các quý Anh trên diễn đàn luôn khỏe, đẻ thêm được nhiều thứ để mót.

#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 23 April 2009 - 11:43 AM

Bạn hãy đọc những đoạn Code này của mình. Hy vọng bạn tự xây dựng được chương trình :
Hỏi về lệnh Break
Chúc thành công nhé :cheers:


Chào bạn Tue_NV, bạn phamthanhbinh

Cái lệnh Break của bạn Tue_NV mình thấy hay hay nên mình mạo muội sửa chút đỉnh theo ý của mình
nhưng nó chạy không ổn định. Nó không cắt được cho 1 tập hợp, với lại đôi khi nó không cắt chính xác thì phải.

http://www.cadviet.c...pfiles/new2.lsp
http://www.cadviet.c...iles/test_1.dwg

Bạn Tue và bạn bình góp ý cho mình với nhé.
  • 0

#78 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 April 2009 - 02:41 PM

Chào bạn Tuan_thietkeden,
Để thực hiện việc ghep lisp này bạn cần lưu ý tới những vấn đề như sau:
1/- Việc tạo và sử dụng các hàm con trong hàm chính
2/- Các biến toàn cục và biến cục bộ trong các hàm con
3/- Các hàm lặp.

Với yêu cầu của bạn, theo mình bạn có thể tách toàn bộ yêu cầu của bạn thành từng nhiệm vụ độc lập tức là các hàm con như sau:
Bước 1: Chọn đối tượng
Bước 2: Lấy tập hợp các điểm giao nhau.(dùng lisp 1, bỏ phần insert block đi)
Bước 3: Chọn các đối tượng muốn cắt theo hướng X và các đối tượng muốn cắt theo hướng Y
Bước 4: Thực hiện lệnh cắt (dùng lisp2 kết hợp với các vòng lặp qua tất cả các điểm căt và qua tất cả các đối tượng theo mỗi hướng cắt.)
Cần lưu ý các biến toàn cục trong hàm con phải được khai báo đầy đủ trong hàm chính.

Bạn thử xem nhé, sau đó post lên, có gì mình sẽ cùng xem xét.


Chào bạn phamthanhbinh
Mình đã thử làm theo cách bạn gợi ý nhưng cũng chưa hoàn thiện lắm.
Cái lisp này mình tạm mặc định cho nó cắt đoạn 100 theo phương ngang.
Bạn xem rồi góp ý nha.
http://www.cadviet.c...files/new_4.lsp
http://www.cadviet.c...iles/test_1.dwg
  • 0

#79 Tue_NV

Tue_NV

    KS Võ Quang Tuệ

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

Đã gửi 23 April 2009 - 09:52 PM

Chào bạn Tue_NV, bạn phamthanhbinh

Cái lệnh Break của bạn Tue_NV mình thấy hay hay nên mình mạo muội sửa chút đỉnh theo ý của mình
nhưng nó chạy không ổn định. Nó không cắt được cho 1 tập hợp, với lại đôi khi nó không cắt chính xác thì phải.

http://www.cadviet.c...pfiles/new2.lsp
http://www.cadviet.c...iles/test_1.dwg

Bạn Tue và bạn bình góp ý cho mình với nhé.

Sau mỗi vòng lặp while bạn thực hiện break thì đôi tượng bị bẽ gãy làm đôi => như vậy biến sL sẽ bị thay đổi kéo theo các biến cL,dL, eL, hL bị thay đổi theo. Như vậy đoạn Code bạn viết ra sẽ không bao giờ cắt được cho 1 tập hợp. Vấn đề ở đây là bạn giải quyết là xác định cho được tập hợp chọn sau mỗi lần thực hiện lệnh Break sau mỗi lần lặp bằng vòng lặp while
  • 1

#80 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 April 2009 - 10:48 AM

Sau mỗi vòng lặp while bạn thực hiện break thì đôi tượng bị bẽ gãy làm đôi => như vậy biến sL sẽ bị thay đổi kéo theo các biến cL,dL, eL, hL bị thay đổi theo. Như vậy đoạn Code bạn viết ra sẽ không bao giờ cắt được cho 1 tập hợp. Vấn đề ở đây là bạn giải quyết là xác định cho được tập hợp chọn sau mỗi lần thực hiện lệnh Break sau mỗi lần lặp bằng vòng lặp while


Cám ơn bạn Tue đã nhắc nha.
Mình đã làm được rồi. :(
Nhưng đôi khi lệnh không cắt trong hình chữ nhật màu đỏ, bạn biết nguyên nhân không.
http://www.cadviet.c...iles/new2_1.lsp
http://www.cadviet.c...les/Book1_6.xls
  • 0