Đến nội dung


Hình ảnh
- - - - -

Nhờ chỉnh giúp lisp ðiều khiển Dialog


  • Please log in to reply
16 replies to this topic

#1 txchuong

txchuong

    biết vẽ circle

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

Đã gửi 23 October 2013 - 01:14 PM

Em ðang viết cái lisp con con ðể thiết lập các thông số cho bản vẽ và tuyến trên bản vẽ, nhýng quả thật em rất gà mờ trong việc ðiều khiển Dialog nhờ các bác chỉ giúp ðể cái lsp của em nó chạy ðýợc.

Hộp thoại của em nhý thế này:

(Không load ðc ảnh, các bác xem trong file ðính kèm vậy)

Trong ðó: Nếu chýa có tim tuyến hiện thời nào thì ðể trống, còn có thì nó hiện tên (Cái này chỉ ðể biết cái ðang hiện thời thôi) em muốn chỉ cho thấy chứ không gõ vào ðýợc nhý cái em ðang làm.

Nếu chýa có tuyến hiện thời hoặc có rồi nhýng không phải tuyến mình làm việc thì chọn lại. Nhýng ðến cái buton "Chon tuyen" này thì nó không chịu chạy cái hàm mà em gán cho nó. Nhờ các bác chỉ giúp em phải làm thế nào thì nó mới chịu chạy, nó chạy rồi thì lấy kết quả hiện lên cái tim tuyến hiện thời.

Còn 3 cái phía dýới thì em gán cho các biến thýờng trực trong bản vẽ ðể khi cân lôi lên thôi, không vấn ðề gì.

Mong các bác bớt chút thời gian giúp em, và chỉ cho em cách làm việc với thằng buton này cho hiệu quả. Cảm õn các bác nhiều.

 

http://www.cadviet.c...3735_dialog.rar


  • 0

#2 txchuong

txchuong

    biết vẽ circle

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

Đã gửi 24 October 2013 - 03:22 PM

Các bác giúp em cái này với. Em học mót nên phải hỏi nhiều nhiều, mong các bác bỏ thời gian giúp đỡ.


  • 0

#3 txchuong

txchuong

    biết vẽ circle

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

Đã gửi 25 October 2013 - 09:49 AM

Em làm được rồi nhưng vẫn còn cái để hỏi các bác, mong các bác giải thích cho em hiểu cái khúc mắc này cái. Em mới viết, mà lại chủ yếu học mót nên gà mờ lắm.

Em học theo cái lsp của bác nào đó để gọi lại dialog khi click vào buton bằng vòng lặp While nhưng không hiểu sao cái của bác đó dùng điều kiện của vòng while là (not (vl-position Flag '(1 0))) thì OK.

Vậy mà em dùng điều kiện là (>= Flag 2) thì nó lại không chịu chạy.

Mặc dù theo em hiểu thì khi (done_dialog 2) trả về là 2 thì:

Với cú pháp  (not (vl-position Flag '(1 0))), thì  (vl-position Flag '(1 0)) sẽ trả về nil và (not nil) = T

Với kiểu của em làm là (>= flag 2) cũng = T

Vậy sao cái bác làm thì nó chạy mà em làm thì nó lại không chịu chạy cho.

http://www.cadviet.c...adks_dialog.lsp


  • 0

#4 Doan Van Ha

Doan Van Ha

    biết lệnh adcenter

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

Đã gửi 25 October 2013 - 10:11 AM

Lúc mới gọi dialog lên thì flag=nil >> (>= flag 2)=nil


  • 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.


#5 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 October 2013 - 10:21 AM

Em làm được rồi nhưng vẫn còn cái để hỏi các bác, mong các bác giải thích cho em hiểu cái khúc mắc này cái. Em mới viết, mà lại chủ yếu học mót nên gà mờ lắm.

Em học theo cái lsp của bác nào đó để gọi lại dialog khi click vào buton bằng vòng lặp While nhưng không hiểu sao cái của bác đó dùng điều kiện của vòng while là (not (vl-position Flag '(1 0))) thì OK.

Vậy mà em dùng điều kiện là (>= Flag 2) thì nó lại không chịu chạy.

Mặc dù theo em hiểu thì khi (done_dialog 2) trả về là 2 thì:

Với cú pháp  (not (vl-position Flag '(1 0))), thì  (vl-position Flag '(1 0)) sẽ trả về nil và (not nil) = T

Với kiểu của em làm là (>= flag 2) cũng = T

Vậy sao cái bác làm thì nó chạy mà em làm thì nó lại không chịu chạy cho.

http://www.cadviet.c...adks_dialog.lsp

Hề hề hề,

Bạn xem lại biến flag của bạn.

Bởi (setq flag (start_dialog))

Vậy cái biến này có thể lấy giá trị 2 không hè????


  • 0
Chúc các quý Anh trên diễn đàn luôn khỏe, đẻ thêm được nhiều thứ để mót.

#6 txchuong

txchuong

    biết vẽ circle

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

Đã gửi 25 October 2013 - 11:19 AM

Hề hề hề,

Bạn xem lại biến flag của bạn.

Bởi (setq flag (start_dialog))

Vậy cái biến này có thể lấy giá trị 2 không hè????

Bác giải thích cho em rõ hơn tý được không. 

Em đang hiểu nó sẽ tra về 0 nếu cancel và 1 nếu accept và gtri nếu mình đặt cho done_dialog .

Vậy thì chỉ khi mình click mới có gtri >=2 chư?

Với lại cho em hỏi thêm tý.

Cad của em mới phát sinh cái lỗi là khi thực hiện phép tính chia chỉ trả về kết quả là phần nguyên chứ phần thập phân thì coi như nó vứt hết.

VD (/ 1 3) =0, (/ 2 3) =0, (/ 4 3) =1, (/ 5 3) =1

$ (/ 1 3)
0
_$ (* 2.123 2)
4.246
_$ (/ 2 3)
0
_$ (/ 1 3)
0
_$ (/ 4 3)
1
_$ (/ 5 3)
 
$ (/ 1 3)
0
_$ (* 2.123 2)
4.246
_$ (/ 2 3)
0
_$ (/ 1 3)
0
_$ (/ 4 3)
1
_$ (/ 5 3)

  • 0

#7 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 October 2013 - 12:14 PM

Bác giải thích cho em rõ hơn tý được không. 

Em đang hiểu nó sẽ tra về 0 nếu cancel và 1 nếu accept và gtri nếu mình đặt cho done_dialog .

Vậy thì chỉ khi mình click mới có gtri >=2 chư?

Với lại cho em hỏi thêm tý.

Cad của em mới phát sinh cái lỗi là khi thực hiện phép tính chia chỉ trả về kết quả là phần nguyên chứ phần thập phân thì coi như nó vứt hết.

VD (/ 1 3) =0, (/ 2 3) =0, (/ 4 3) =1, (/ 5 3) =1

$ (/ 1 3)
0
_$ (* 2.123 2)
4.246
_$ (/ 2 3)
0
_$ (/ 1 3)
0
_$ (/ 4 3)
1
_$ (/ 5 3)
 
$ (/ 1 3)
0
_$ (* 2.123 2)
4.246
_$ (/ 2 3)
0
_$ (/ 1 3)
0
_$ (/ 4 3)
1
_$ (/ 5 3)

Hề hề hề,

Cái lỗi phép chia là không phải đâu. Theo dịnh nghĩa của lisp thì khi chia số nguyên cho sốn nguyên sẽ được kết quả là số nguyên, Muốn lấy số thực ở kết quả thì một trong 2 số bị chia và số chia phải là số thực.

Nếu muốn có 1.5 ở kết quả thì (/ 3 2.0) hoặc (/ 3.0 2)

 

về hộp thoại mình cũng không rành lắm nhưng hình như (start_dialog) chỉ nhận các giá trị 0 và 1 mà thôi. Cái này hoàn toàn khác với biến ddialog bạn ạ. Biến ddialog thì bạn có thể cho nó các giá trị thoải mái khi kích hoạt các button.


  • 0
Chúc các quý Anh trên diễn đàn luôn khỏe, đẻ thêm được nhiều thứ để mót.

#8 txchuong

txchuong

    biết vẽ circle

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

Đã gửi 25 October 2013 - 01:13 PM

Cảm ơn bác phamthanhbinh  nhiều, thế mà em cứ tưởng nó lỗi.

 

 

Lúc mới gọi dialog lên thì flag=nil >> (>= flag 2)=nil

Hỏi thêm bác tý, em đã thử (setq flag 2) trước vòng while rồi nhưng nó vẫn không chịu chạy nghĩa là sao hả bác. Mặc dù hiện tại em dùng cách của bác nào đó thì nó vẫn chạy, lsp của em vẫn OK nhưng em muốn hiểu cho cụ tỷ hơn tý về thằng này. Mong bác giúp đỡ.

Em đang học mà ngu nhất là món dialog và mấy hàm vl-xxxxx. Lỡ có hỏi nhiều thì các cũng cố giúp nhé


  • 0

#9 Doan Van Ha

Doan Van Ha

    biết lệnh adcenter

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

Đã gửi 25 October 2013 - 01:40 PM

Vậy thì bạn gởi lên đây:

1). File dcl

2). File lisp chạy được, kèm những dòng edit nào khiến nó không chạy được.

3). Và: không chạy được cụ thể là như thế nào?

---

P/s: dòm sơ qua file thì bạn thử làm cách này xem:

(setq flag 3)

(while (> flag 2)...

...


  • 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.


#10 txchuong

txchuong

    biết vẽ circle

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

Đã gửi 25 October 2013 - 01:57 PM

http://www.cadviet.c...ks_dialog_1.lsp

 

Đây là file em chạy được. Nhưng nếu em thay đoạn

(while (not (vl-position Flag '(1 0)))

bằng 

(setq flag 2)

(While (>= flag 2)

thì nó không chịu chạy

Bác xem giúp em lý do sao nó không chạy đc vì theo ngu ý của em thì cái thứ 2 tổng quát hơn trong trường hợp dialog có nhiều buton thì dùng cái này có vẻ dễ chịu hơn (không biết có đúng không nữa). Bác giải thích giúp cho.


  • 0

#11 Doan Van Ha

Doan Van Ha

    biết lệnh adcenter

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

Đã gửi 25 October 2013 - 02:01 PM

Dòm sơ qua file thì bạn thử làm cách này xem:

(setq flag 3)

(while (> flag 2)...

...

Còn vẫn chưa được thì bạn gởi lên đây:

 

1). File dcl

2). File lsp chạy được, kèm những dòng edit nào khiến nó không chạy được.

3). Và: không chạy được cụ thể là như thế nào?

---


  • 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.


#12 txchuong

txchuong

    biết vẽ circle

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

Đã gửi 25 October 2013 - 02:05 PM

Em gui lại các file bác xem giúp em (lúc nãy em quên file DCL)

http://www.cadviet.c...123735_file.rar


  • 0

#13 Doan Van Ha

Doan Van Ha

    biết lệnh adcenter

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

Đã gửi 25 October 2013 - 02:18 PM

Không hiểu nội dung dialog của bạn làm gì >> Không hiểu khái niệm "không chạy được" khi bạn (setq flag 2) và (while (>= flag 2)

Bạn có thể giải thích khái niệm "không chạy được"?


  • 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.


#14 txchuong

txchuong

    biết vẽ circle

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

Đã gửi 25 October 2013 - 03:24 PM

Nó treo luôn bác à, không thoát ra khỏi cái Dialog đó được.

Nội dung Dialog thì em đã giải thích ở bài trên cùng rồi nhờ bác liếc qua tý.


  • 0

#15 Doan Van Ha

Doan Van Ha

    biết lệnh adcenter

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

Đã gửi 25 October 2013 - 03:41 PM

Tôi thử OK mà. Bạn xem file nhé.

http://www.cadviet.c...adks_dialog.lsp


  • 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.


#16 txchuong

txchuong

    biết vẽ circle

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

Đã gửi 25 October 2013 - 03:51 PM

File của bác thì chạy OK, không biết em sai chỗ nào mà nó không chịu chạy.

Để em kiểm tra lại xem cái chỗ ngu ngu đó nó nằm ở đâu. Cảm ơn bác nhiều.


  • 0

#17 Doan Van Ha

Doan Van Ha

    biết lệnh adcenter

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

Đã gửi 25 October 2013 - 04:00 PM

Tôi chỉ sửa đúng 2 dòng:

(setq flag 2)

(while (>= flag 2)


  • 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.