Đến nội dung


Hình ảnh
- - - - -

[Cần giúp đỡ] gộp giúp em lisp lệnh bật, tắt Layer với


  • Please log in to reply
19 replies to this topic

#1 hoangkimoanh

hoangkimoanh

    biết vẽ spline

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

Đã gửi 25 May 2012 - 12:46 PM

hoangkimoanh
Gửi vào Hôm qua, 01:20 AM
em hay dùng tắt, bật layer khi vẽ. em cần giúp gộp đoạn code dưới đây thành 1 lệnh tắt hay bật Layer đều bằng 1 lệnh.
VD: bấm số 1 lúc đầu là tắt Layer, sau muốn hiện Layer lên lại thì lại bấm số 1 là nó hiện lại nhưng Layer đã tắt. cảm ơn các anh rất nhiều.
CODE:
(defun c:1() (prompt "\nGO SO 1: DE TAT TUNG LAYER TUY CHON")(c:LAYOFF))
(defun c:11() (prompt "\nGO SO 2: DE MO TAT CA CAC LAYER DA TAT")(c:LAYON))

Thaistreetz
Gửi vào Hôm qua, 08:28 AM
Làm được nhưng lời khuyên là đừng làm thế.
Giả sử tại 1 thời điểm nào đó bản vẽ đang có 1 số layer bị tắt. giờ bạn muốn tắt thêm 1 số layer nữa thì làm thế nào? Lại bật tất cả lên rồi mới tắt à?


hoangkimoanh
Gửi vào Hôm nay, 04:06 AM
em muốn biết cái hàm gộp lệnh nó như thế nào để có thể thực hiện cho 1 số lệnh khác nữa anh ạ. vấn đề không phải là em lười, mà các lệnh tắt cần thiết hay dùng em đặt hết trên dãy số tứ 1->9 rồi.
trường hợp khi muốn tắt thêm 1 số layer nữa thì em có thể đặt tên khác VD: 11 là tắt Layer; 111 là mở Layer, còn lệnh gộp là 1. nếu muốn tắt thêm thì gõ 11, còn bình thường thì chỉ cần dùng bằng 1 lệnh là số 1 để chuyển qua lại thôi.
trân thành cảm ơn các anh
(EM MỜI VÀO DIỄN ĐÀN THAM GIA NÊN CHƯA BIẾT CÁCH POST BÀI, BỞI VẬY BÀI TRƯỚC CỦA EM ĐÃ BỊ VÀO THÙNG RÁC. EM GỬI LẠI NHƯ THẾ NÀY KHÔNG BIẾT CÓ SAI SÓT GÌ KHÔNG, MONG CÁC CÁCH THÔNG CẢM NHÉ!)
  • 0

#2 Doan Van Ha

Doan Van Ha

    biết lệnh adcenter

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 5447 Bài viết
Điểm đánh giá: 2624 (tuyệt vời)

Đã gửi 25 May 2012 - 02:33 PM

Lisp gộp 2 lệnh LAYOFF và LAYON thành 1 lệnh.

(defun c:1()
(cond
((or (not n) (= n 1))
(c:LAYOFF)
(setq n 2))
((= n 2)
(c:LAYON)
(setq n 1))))

  • 4

* Chỉ nên yêu cầu Lisp khi bạn làm việc đó mất cả ngày nhưng họ chỉ viết 1 giờ. Đừng nêu yêu cầu Lisp khi bạn chỉ làm 1 giờ nhưng bắt họ phải mất cả ngày.

* Nhờ viết lisp cũng như đi khám bệnh. Chỉ gởi căn cước và than sắp chết thì không bác sỹ nào cứu sống được.


#3 ngocthienthann

ngocthienthann

    Chưa sử dụng CAD

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

Đã gửi 25 May 2012 - 03:36 PM

Nhờ các bác viết giúp em list vẽ trọng tâm của hình 2D bất kỳ. Nghĩa là khi mình có 1 hình bất kỳ, nhấp vào 1 điểm giữa hình thì sẽ vẽ ra được trong tâm của hình đó dưới dạng +. Cảm ơn các bác pro nhiều!...
  • 0

#4 Doan Van Ha

Doan Van Ha

    biết lệnh adcenter

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 5447 Bài viết
Điểm đánh giá: 2624 (tuyệt vời)

Đã gửi 25 May 2012 - 04:24 PM

Chơi kiểu gì mà tung tin lên các topic khác với cùng 1 nội dung, mà nội dung này không ăn nhập gì với chủ đề của topic vậy?
Nếu chủ đề chưa có thì mở topic mới nhé! Riêng Lisp tìm trọng tâm thì trên forum có nhiều rồi, bạn search sẽ thấy.
Hoặc xem link dưới đây.
http://xaydungit.vn/...-phang-1014.htm
  • 2

* Chỉ nên yêu cầu Lisp khi bạn làm việc đó mất cả ngày nhưng họ chỉ viết 1 giờ. Đừng nêu yêu cầu Lisp khi bạn chỉ làm 1 giờ nhưng bắt họ phải mất cả ngày.

* Nhờ viết lisp cũng như đi khám bệnh. Chỉ gởi căn cước và than sắp chết thì không bác sỹ nào cứu sống được.


#5 ketxu

ketxu

    Copier - Paster - Editor

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

Đã gửi 25 May 2012 - 05:41 PM


(defun c:1()
(if *n (c:layoff)(c:layon))
(setq *n (not *n))
)

  • 5

Thành viên nhóm CadMagic.
Mời bạn ghé thăm facebook nhóm - Page viết lisp theo yêu cầu  :
CAD MAGIC


#6 Doan Van Ha

Doan Van Ha

    biết lệnh adcenter

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 5447 Bài viết
Điểm đánh giá: 2624 (tuyệt vời)

Đã gửi 25 May 2012 - 05:59 PM

Code lật ngược thế trận này đẹp quá:
(setq *n (not *n))
  • 1

* Chỉ nên yêu cầu Lisp khi bạn làm việc đó mất cả ngày nhưng họ chỉ viết 1 giờ. Đừng nêu yêu cầu Lisp khi bạn chỉ làm 1 giờ nhưng bắt họ phải mất cả ngày.

* Nhờ viết lisp cũng như đi khám bệnh. Chỉ gởi căn cước và than sắp chết thì không bác sỹ nào cứu sống được.


#7 Thaistreetz

Thaistreetz

    biết lệnh adcenter

  • Advance Member
  • PipPipPipPipPipPipPip
  • 903 Bài viết
Điểm đánh giá: 505 (tốt)

Đã gửi 25 May 2012 - 06:40 PM

Code lật ngược thế trận này đẹp quá:
(setq *n (not *n))

Đẹp nhưng tăng 1 biến toàn cục. => không nên

để viết được lệnh này như bạn chủ topic yêu cầu mà không fải sử dụng 1 biến toàn cục thì cần kiểm tra màu của các layer. layer bị off nếu màu của nó = màu thực nhân với -1.
từ nguyên tắc này có thể viết được 3 lệnh layon; layoff và layiso mà không cần express
  • 2

Hình đã gửi
IN HIM, I TRUST. THE TRUST IN MY GOD


#8 hoangkimoanh

hoangkimoanh

    biết vẽ spline

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

Đã gửi 25 May 2012 - 11:52 PM

cảm ơn các anh quan tâm rất nhiều!
đoạn code của anh Ha và anh ketxu đều làm đúng ý của em nhưng có 1 chút nữa em cần sự giúp đỡ: em thực hiện lisp của anh ketxu khi nhấn lệnh số 1 rồi Enter nó hiện ra "All layers have been turned on.T" em nhấn tiếp Enter lần nữa mới được và sau đó thì dùng bình thường, còn mở 1 file mới thì khi thực hiện lệnh lần đầu tiên thì lại bị như trên vậy là làm sao để không phải nhấn Enter 2 lần khi muốn thực hiện lệnh đó lần đầu tiên a?
  • 0

#9 ngocthienthann

ngocthienthann

    Chưa sử dụng CAD

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

Đã gửi 26 May 2012 - 12:30 AM

Chơi kiểu gì mà tung tin lên các topic khác với cùng 1 nội dung, mà nội dung này không ăn nhập gì với chủ đề của topic vậy?
Nếu chủ đề chưa có thì mở topic mới nhé! Riêng Lisp tìm trọng tâm thì trên forum có nhiều rồi, bạn search sẽ thấy.
Hoặc xem link dưới đây.
http://xaydungit.vn/...-phang-1014.htm

Sory vì đã hỏi trong topic này! Lâu lắp rồi mới xài lại forum nên hơi ..."vịt", tìm hoài mà không mở được topic mới nên ghé vào đây ké tạm! Cảm ơn Mr Ha nhiều nhoa!!! :)
  • 0

#10 Doan Van Ha

Doan Van Ha

    biết lệnh adcenter

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 5447 Bài viết
Điểm đánh giá: 2624 (tuyệt vời)

Đã gửi 26 May 2012 - 09:22 AM

Đẹp nhưng tăng 1 biến toàn cục. => không nên
để viết được lệnh này như bạn chủ topic yêu cầu mà không fải sử dụng 1 biến toàn cục thì cần kiểm tra màu của các layer. layer bị off nếu màu của nó = màu thực nhân với -1.
từ nguyên tắc này có thể viết được 3 lệnh layon; layoff và layiso mà không cần express

Tôi chỉ nói code đẹp hơn của tôi thôi (mặc dầu cả 2 đều đẻ ra 1 biến toàn cục, là nhược điểm).
Cách của bác tuy code hơi dài, hoặc tất cả cách nào không đẻ biến toàn cục đều văn minh cả. OK!
  • 0

* Chỉ nên yêu cầu Lisp khi bạn làm việc đó mất cả ngày nhưng họ chỉ viết 1 giờ. Đừng nêu yêu cầu Lisp khi bạn chỉ làm 1 giờ nhưng bắt họ phải mất cả ngày.

* Nhờ viết lisp cũng như đi khám bệnh. Chỉ gởi căn cước và than sắp chết thì không bác sỹ nào cứu sống được.


#11 031

031

    biết zoom

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

Đã gửi 22 June 2012 - 04:10 PM

Xin cho hỏi, mình có cái này trước đây dùng CAD2008 thì ok, giờ dùng CAD2009 thì nó cứ dừng ở dòng lệnh đánh tên kg cho chọn đối tượng cần tắt.
Còn nếu dùng lệnh _LA của CAD thì khi enter ở dòng lệnh đánh tên thì nó lại nhảy tới dòng lệnh chọn đối tượng....(cái này mình cần tìm).

(defun C:LLF () (COMMAND "_LAYER" "OFF" ))
  • 0

#12 031

031

    biết zoom

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

Đã gửi 22 June 2012 - 04:12 PM

Có cao thủ nào giúp mình với..
  • 0

#13 ketxu

ketxu

    Copier - Paster - Editor

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

Đã gửi 22 June 2012 - 04:44 PM

4:10 post bài 4:12 re-post ?
  • 0

Thành viên nhóm CadMagic.
Mời bạn ghé thăm facebook nhóm - Page viết lisp theo yêu cầu  :
CAD MAGIC


#14 031

031

    biết zoom

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

Đã gửi 22 June 2012 - 04:59 PM

4:12 là phần còn thiếu của 4:10.....
  • 0

#15 SoftvnBin

SoftvnBin

    biết vẽ ellipse

  • Advance Member
  • PipPip
  • 51 Bài viết
Điểm đánh giá: 3 (bình thường)

Đã gửi 22 July 2012 - 12:13 PM

Lisp gộp 2 lệnh LAYOFF và LAYON thành 1 lệnh.


(defun c:1()
(cond
((or (not n) (= n 1))
(c:LAYOFF)
(setq n 2))
((= n 2)
(c:LAYON)
(setq n 1))))


Từ lisp nhờ chỉnh sửa trên, em cũng xin ké tý, nhu cầu của em mong muốn nhờ các bác cũng na ná như trên, cụ thể như sau:
1. Em đã có sẵn lisp với các lệnh thực thi tương ứng là: n1, n2, n3, n4, n5
2. Nhờ các bác viết 1 lisp (ví dụ lệnh: a1)
3. Sau khi load các lisp với các lệnh n1, n2, n3, n4, n5, a1 xong
4. Gọi lệnh a1 thì lisp sẽ tự động thực hiện lệnh n1
5. Thực hiện xong lệnh n1 sẽ hiện bảng thông báo "Done to n1, space to continue, esc to stop"
6. Nếu nhấn nút space thì lisp sẽ tự động thực hiện tiếp lệnh n2, nhấn nút esc thì lisp sẽ tự động kết thức lệnh
7. Thực hiện xong lệnh n2 sẽ hiện bảng thông báo "Done to n1, space to continue, esc to stop"
8. Nếu nhấn nút space thì lisp sẽ tự động thực hiện tiếp lệnh n2, nhấn nút esc thì lisp sẽ tự động kết thức lệnh
9. Tiếp tục như thế đến hết lệnh n5 (nếu thực hiện đến n5 thì lisp tự động kết thúc lệnh và hiện lên bảng thông báo "good luck")
10. Nhấn space để hoàn thành.

Xin cảm ơn các bác trước!
  • 0

#16 Tue_NV

Tue_NV

    KS Võ Quang Tuệ

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

Đã gửi 22 July 2012 - 02:18 PM


Từ lisp nhờ chỉnh sửa trên, em cũng xin ké tý, nhu cầu của em mong muốn nhờ các bác cũng na ná như trên, cụ thể như sau:
1. Em đã có sẵn lisp với các lệnh thực thi tương ứng là: n1, n2, n3, n4, n5
2. Nhờ các bác viết 1 lisp (ví dụ lệnh: a1)
3. Sau khi load các lisp với các lệnh n1, n2, n3, n4, n5, a1 xong
4. Gọi lệnh a1 thì lisp sẽ tự động thực hiện lệnh n1
5. Thực hiện xong lệnh n1 sẽ hiện bảng thông báo "Done to n1, space to continue, esc to stop"
6. Nếu nhấn nút space thì lisp sẽ tự động thực hiện tiếp lệnh n2, nhấn nút esc thì lisp sẽ tự động kết thức lệnh
7. Thực hiện xong lệnh n2 sẽ hiện bảng thông báo "Done to n1, space to continue, esc to stop"
8. Nếu nhấn nút space thì lisp sẽ tự động thực hiện tiếp lệnh n2, nhấn nút esc thì lisp sẽ tự động kết thức lệnh
9. Tiếp tục như thế đến hết lệnh n5 (nếu thực hiện đến n5 thì lisp tự động kết thúc lệnh và hiện lên bảng thông báo "good luck")
10. Nhấn space để hoàn thành.

Xin cảm ơn các bác trước!

Bạn thử code này :

(defun c:a1(/ str)
(c:n1)
(if (= "" (getstring "\nDone to n1, space to continue, esc to stop"))
(progn (c:n2)
(if (= "" (getstring "\nDone to n2, space to continue, esc to stop"))
(progn (c:n3)
(if (= "" (getstring "\nDone to n3, space to continue, esc to stop"))
(progn (c:n4)
(if (= "" (getstring "\nDone to n4, space to continue, esc to stop"))
(progn (c:n5)(alert "Good luck"))
)
)
)
)
)
)
)
)

Viết gọn gàng lại như sau :

(defun c:a1(/ lst_tenlenh defun_tenlenh i)
(setq lst_tenlenh '("n1" "n2" "n3" "n4" "n5")); danh sach ten lenh o day
(setq defun_tenlenh (mapcar '(lambda(x) (strcat "(c:" x ")")) lst_tenlenh) i 0)
(eval (read (nth 0 defun_tenlenh)))
(while (and (< i (1- (length lst_tenlenh)))
(getstring (strcat "Done to " (nth i lst_tenlenh) ", Press any key to continue, esc to stopp"))
)
(eval (read (nth (setq i (1+ i)) defun_tenlenh)))
(if (= i (1- (length lst_tenlenh) )) (alert "Good luck"))
)
)

Bài viết đã được chỉnh sửa nội dung bởi Tue_NV: 22 July 2012 - 06:10 PM

  • 1

#17 SoftvnBin

SoftvnBin

    biết vẽ ellipse

  • Advance Member
  • PipPip
  • 51 Bài viết
Điểm đánh giá: 3 (bình thường)

Đã gửi 22 July 2012 - 03:36 PM

Cảm ơn Tue_NV, bạn thật nhiệt tình và chu đáo, vấn đề đã được bạn giải quyết triệt để, xin chân thành cảm ơn!
  • 0

#18 ketxu

ketxu

    Copier - Paster - Editor

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

Đã gửi 22 July 2012 - 04:23 PM

Khi ấn Esc thì bạn khỏi bảo nó cũng thoát lệnh rồi ^^

(defun c:test ()
(mapcar '(lambda(x)(eval (read (strcat "(c:" x ")")))
(getstring (strcat "\nDone to " x ", space to continue, esc to stop"))
) '("n1" "n2" "n3"))
(alert "Done! Good luck!")
(princ)
)

  • 1

Thành viên nhóm CadMagic.
Mời bạn ghé thăm facebook nhóm - Page viết lisp theo yêu cầu  :
CAD MAGIC


#19 Tue_NV

Tue_NV

    KS Võ Quang Tuệ

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

Đã gửi 22 July 2012 - 05:00 PM

Khi ấn Esc thì bạn khỏi bảo nó cũng thoát lệnh rồi ^^


(defun c:test ()
(mapcar '(lambda(x)(eval (read (strcat "(c:" x ")")))
(getstring (strcat "\nDone to " x ", space to continue, esc to stop"))
) '("n1" "n2" "n3"))
(alert "Done! Good luck!")
(princ)
)

Khi thực hiện xong lệnh n3 thì chưa "Good luck" được. "Chúc may mắn" phải thông qua "press any key".
Chưa đạt yêu cầu vì : (nếu thực hiện đến n3 thì lisp tự động kết thúc lệnh hiện lên bảng thông báo "good luck"). Phải thêm code nữa Ket mới đạt được yêu cầu

Cái của Tue_NV tuy dài hơn ketxu 1 tí nhưng "Good luck" ngay khi kết thúc lệnh cuối cùng, chẳng phải thông qua "press any key" nào cả.
  • 1

#20 SoftvnBin

SoftvnBin

    biết vẽ ellipse

  • Advance Member
  • PipPip
  • 51 Bài viết
Điểm đánh giá: 3 (bình thường)

Đã gửi 26 July 2012 - 01:15 AM

Kiểu này mình cũng sắp mất ăn mất ngủ vì mê lisp mất thôi, xong đợt này quyết tâm.... học lisp. nhiều ý định về lisp quá mà chưa thực hiện được, nhờ vả nhiều quá rồi, chắc cũng chỉ nhờ khoảng 1000 lần nữa thoai, hê hê, cảm ơn lisp muôn năm, cảm ơn các bro nhiều lém :)
  • 0