Đến nội dung


Hình ảnh
- - - - -

Nghệ thuật lập trình Lisp


  • Please log in to reply
29 replies to this topic

#21 h2c

h2c

    biết vẽ ellipse

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

Đã gửi 10 May 2008 - 06:30 PM

Nếu bạn thực hiện đúng hoàn toàn như mình gợi ý, dòng màu đỏ trên không thể xảy ra được. Bạn kiểm tra lại các dòng code sau đó có cái gì làm thay đổi TT0 hay không?

Bạn có thể thử chương trình đơn giản sau. User nhập chiều dài và chỉ định điểm chuẩn -> chương trình vẽ 1 line từ điểm chuẩn, nằm ngang, với chiều dài đã nhập. Chạy lần đầu, chiều dài mặc định là 100 đã gán. Các lần sau, giá trị mặc định là giá trị vừa chạy của lần kề trước đó.
(defun C:VD( / L p)
(if (not L0) (setq L0 100))
(setq L (getreal (strcat "\nChieu dai <" (rtos L0) ">: ")))
(if (not L) (setq L L0) (setq L0 L))
(setq p (getpoint "\nBase point:"))
(command "line" p (polar p 0 L) "")
(princ)
)

Tất nhiên, L0 chỉ nhớ trong phiên làm việc hiện tại. Bạn close bản vẽ nó sẽ mất.
Nếu bạn muốn nhớ luôn cho các phiên làm việc sau (save luôn trong bản vẽ) thì dùng các biến UserR1, UserR2... như bạn hnhmai đã bày ở trên.

Lưu ý thêm
1) Giả sử các biến L và L0 là string thì có khác một chút:
Thay vì: (if (not L) (setq L L0) (setq L0 L))
Sửa thành: (if (= L "") (setq L L0) (setq L0 L))

2) 3 biểu thức (not L), (= L nil) và (null L) tương đương nhau. Viết sao cũng được, tuỳ thói quen mỗi người.


Hoàn toàn đồng ý với ssg , dòng if màu đỏ này là mấu chốt đây . Mình cũng đã nói đến dòng if này ở post trên . Cám ơn ssg đã rất nhiệt tình .
  • 0

#22 Nộ Thiên

Nộ Thiên

    biết lệnh ddedit

  • Members
  • PipPipPipPip
  • 297 Bài viết
Điểm đánh giá: 133 (tàm tạm)

Đã gửi 10 May 2008 - 09:50 PM

Một thực tế là chỉ có 5 giá trị user là kg đủ dùng. Nên mình chọn p.án là lưu vào 1file txt
  • 0

#23 Thaistreetz

Thaistreetz

    biết lệnh adcenter

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

Đã gửi 22 July 2009 - 10:00 AM

đây là đoạn code ghi kết quả tính toán mà em hay dùng
(setq res (entsel "\n Chon text ghi ket qua, Click hoac Enter de ghi ket qua ra man hinh "))
(if res
(progn
(setq res (entget (car res)))
(setq res (subst (cons 1 (rtos L 2 2)) (assoc 1 res) res))
(entmod res)
)
(progn
(setq p (getpoint "\n Chon diem nhap ket qua" ))
(wtxt (rtos L 2 2) p)
)

Đối với kết quả là số nguyên thì nó không ghi 2 chữ số 0 sau dấu thập phân. Do nhu cầu trình bày bản vẽ được đẹp hơn, em muốn ghi kết quả luôn giữ 2 số 0 sau dấu phẩy.
ví dụ kết quả tính toán là 10 kết quả ghi là màn hình mà em muốn là 10.00 chứ không phải 10. như vậy em phải sửa đoạn code này như thế nào?
  • 0

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


#24 duy782006

duy782006

    PHẠM QUỐC DUY

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

Đã gửi 22 July 2009 - 10:08 AM

đây là đoạn code ghi kết quả tính toán mà em hay dùng

(setq res (entsel "\n Chon text ghi ket qua, Click hoac Enter de ghi ket qua ra man hinh "))
(if res
(progn
(setq res (entget (car res)))
(setq res (subst (cons 1 (rtos L 2 2)) (assoc 1 res) res))
(entmod res)
)
(progn
(setq p (getpoint "\n Chon diem nhap ket qua" ))
(wtxt (rtos L 2 2) p)
)

Đối với kết quả là số nguyên thì nó không ghi 2 chữ số 0 sau dấu thập phân. Do nhu cầu trình bày bản vẽ được đẹp hơn, em muốn ghi kết quả luôn giữ 2 số 0 sau dấu phẩy.
ví dụ kết quả tính toán là 10 kết quả ghi là màn hình mà em muốn là 10.00 chứ không phải 10. như vậy em phải sửa đoạn code này như thế nào?

(setvar "dimzin" 0)
  • 2

Cứ ngỡ trần gian là cõi thật.Cho nên tất bật đến bây giờ.
Tạo hộp thoại bằng lisp My blog QUY ĐỊNH ĐẶT TÊN TOPIC TRONG CHUYÊN MỤC LISPD http://ktsduy.wordpress.com/
Để cám ơn chỉ cần nhấn rep_up.png
(Là nhấn vào nút đó phía bài viết của người ta í chứ đừng có nhè cái hình này mà nhấn miết đi nha :-D


#25 Thaistreetz

Thaistreetz

    biết lệnh adcenter

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

Đã gửi 15 August 2009 - 01:09 AM

Em thấy trong Cad hay sử dụng một loại option điều kiện [Yes/No] để xem xét việc có thực hiện một bước nào đó trong quá trình thao tác lệnh hay không. hiện em đang muốn dùng loại option điều kiện này nhưng viết mãi không được đoạn code ấy.
hic! em nhức đầu với nó quá! mọi người giúp em với, em chịu thua với nó rồi. :bigsmile:
  • 0

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


#26 TRUNGNGAMY

TRUNGNGAMY

    biết lệnh block

  • Members
  • PipPipPipPipPipPip
  • 401 Bài viết
Điểm đánh giá: 91 (tàm tạm)

Đã gửi 15 August 2009 - 02:49 AM

Em thấy trong Cad hay sử dụng một loại option điều kiện [Yes/No] để xem xét việc có thực hiện một bước nào đó trong quá trình thao tác lệnh hay không. hiện em đang muốn dùng loại option điều kiện này nhưng viết mãi không được đoạn code ấy.
hic! em nhức đầu với nó quá! mọi người giúp em với, em chịu thua với nó rồi. :bigsmile:

(defun c:yn()
(initget "Y N")
(if (= (getkword "Y/N") "Y") T nil)
)
  • 1

#27 Tue_NV

Tue_NV

    KS Võ Quang Tuệ

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

Đã gửi 15 August 2009 - 06:25 AM

Em thấy trong Cad hay sử dụng một loại option điều kiện [Yes/No] để xem xét việc có thực hiện một bước nào đó trong quá trình thao tác lệnh hay không. hiện em đang muốn dùng loại option điều kiện này nhưng viết mãi không được đoạn code ấy.
hic! em nhức đầu với nó quá! mọi người giúp em với, em chịu thua với nó rồi. :bigsmile:

Bạn có thể xem thêm ở đây :
Lisp offset liên tục - Bài viết số 8
  • 1

#28 thiep

thiep

    biết dimbaseline

  • Members
  • PipPipPipPipPip
  • 369 Bài viết
Điểm đánh giá: 260 (khá)

Đã gửi 15 August 2009 - 08:33 AM

Em thấy trong Cad hay sử dụng một loại option điều kiện [Yes/No] để xem xét việc có thực hiện một bước nào đó trong quá trình thao tác lệnh hay không. hiện em đang muốn dùng loại option điều kiện này nhưng viết mãi không được đoạn code ấy.
hic! em nhức đầu với nó quá! mọi người giúp em với, em chịu thua với nó rồi. :bigsmile:

Đoạn lisp này rất hay:
(defun c:yes-no ()
(setq bit (cond (bit)
("Yes")
)
)
(initget "Yes No")
(setq Tmp (strcat "\nAnother Quension? [Yes/No] <" bit ">: ")
bit (cond ((getkword Tmp))
(bit)
)
)
(if (eq bit "Yes")
(Print "I am Thiep")
(Print "You are Thaistreetz")
)
(princ)
)

Chỉ cần đánh Y hay N
  • 1

#29 Thaistreetz

Thaistreetz

    biết lệnh adcenter

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

Đã gửi 15 August 2009 - 09:47 AM

Tuyệt quá! đúng là những gì em đang cần. cảm ơn mọi người :bigsmile:
  • 0

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


#30 thiep

thiep

    biết dimbaseline

  • Members
  • PipPipPipPipPip
  • 369 Bài viết
Điểm đánh giá: 260 (khá)

Đã gửi 21 August 2009 - 02:08 PM

Tuyệt quá! đúng là những gì em đang cần. cảm ơn mọi người :bigsmile:

Cũng chưa tuyệt quá đâu Thaistreetz ạ. Có 1 mã trong Express còn hay hơn.
Thiep dành mã này để đố các bạn trong CADVIET đó là mã gì?
  • 1