Đến nội dung


Hình ảnh
- - - - -

hỏi vấn đề tạo liên kết LSP và dialog DCL


  • Please log in to reply
51 replies to this topic

#1 dhyl

dhyl

    biết zoom

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

Đã gửi 05 November 2010 - 11:04 AM

Thân chào các bạn!

Chư vị đại ka, cho đệ hỏi chút xíu, đại ka nào có tài liệu về tạo liên kết giữa LSP và dialog DCL, làm ơn Share cho mình với!

Uh, còn vấn đề này nữa, trong Autolisp, nếu muốn biểu diễn: [[(nếu A đúng) và (nếu B đúng)] thì thực thi C], mình phải lồng hàm IF! Có cách nào đơn giản hơn không?!

Kiến thức còn nông nỗi, cảm phiền anh em tương cứu!
  • 1

#2 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 05 November 2010 - 12:19 PM

Thân chào các bạn!

Chư vị đại ka, cho đệ hỏi chút xíu, đại ka nào có tài liệu về tạo liên kết giữa LSP và dialog DCL, làm ơn Share cho mình với!

Uh, còn vấn đề này nữa, trong Autolisp, nếu muốn biểu diễn: [[(nếu A đúng) và (nếu B đúng)] thì thực thi C], mình phải lồng hàm IF! Có cách nào đơn giản hơn không?!

Kiến thức còn nông nỗi, cảm phiền anh em tương cứu!

Giao diện hộp thoại trong AutoLisp, tạo các dialog (đã share hơn 3 năm rùi) : http://www.cadviet.c...?showtopic=1793

Có 2 cách này, không biết có đơn giản hơn không?!
[IF [AND (A đúng) (B đúng)] (thực thi C)]
hay
[AND (A đúng) (B đúng) (thực thi C)]
  • 2

#3 thanhduan2407

thanhduan2407

    biết lệnh adcenter

  • Advance Member
  • PipPipPipPipPipPipPip
  • 995 Bài viết
Điểm đánh giá: 223 (khá)

Đã gửi 05 November 2010 - 12:36 PM

Thân chào các bạn!

Chư vị đại ka, cho đệ hỏi chút xíu, đại ka nào có tài liệu về tạo liên kết giữa LSP và dialog DCL, làm ơn Share cho mình với!

Uh, còn vấn đề này nữa, trong Autolisp, nếu muốn biểu diễn: [[(nếu A đúng) và (nếu B đúng)] thì thực thi C], mình phải lồng hàm IF! Có cách nào đơn giản hơn không?!

Kiến thức còn nông nỗi, cảm phiền anh em tương cứu!

Bạn tìm hiểu cái này xem: http://www.cadviet.c...showtopic=27353
Hướng dẫn rất cụ thế đó. Chúc bạn thành công
  • 0



Tôi là con kiến bò trên sa mạc kiến thức bao la. Biển học thật rộng lớn







#4 dhyl

dhyl

    biết zoom

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

Đã gửi 08 November 2010 - 10:40 AM

Chân thành cảm ơn anh GIA_BACH và Mr. DUÂN!
  • 0

#5 dhyl

dhyl

    biết zoom

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

Đã gửi 15 November 2010 - 07:05 PM

Trước tiên rất cảm ơn các huynh đài đã nhiệt tình tương cứu!

Tuy nhiên, khi đệ muốn tổng hợp 2 điều kiện (hoặc nhiều hơn) nếu thoả mãn --> thực thi 2 lệnh (hoặc nhiều hơn) đồng thời, sẽ viết như thế nào? kiểu như:

... (Nếu((A=1) (B=2)) --> Thực thi((C:AA) (C:BB)))
(Nếu((A=3) (B=4)) --> Thực thi((C:AAA) (C:BBB)))
(Nếu((A=5) (B=6)) --> Thực thi((C:AAAA) (C:BBBB)))
...

Trong đó: A và B là các đối số của các hàm lệnh: AA; AAA; AAAA; BB; BBB; BBBB ... đã được định nghĩa trước.

Đệ đã thử áp dụng cách hunnh đài GIA_BACH hướng dẫn, nhưng CAD chỉ hiểu và thực thi được câu lệnh đầu tiên mà thui. Có lẽ cần thiết phải sử dụng vòng lặp chăng?

Rất mong các huynh chỉ bảo tận tình!

Chân thành cám ơn!
  • 0

#6 Tue_NV

Tue_NV

    KS Võ Quang Tuệ

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

Đã gửi 15 November 2010 - 10:30 PM

Trước tiên rất cảm ơn các huynh đài đã nhiệt tình tương cứu!

Tuy nhiên, khi đệ muốn tổng hợp 2 điều kiện (hoặc nhiều hơn) nếu thoả mãn --> thực thi 2 lệnh (hoặc nhiều hơn) đồng thời, sẽ viết như thế nào? kiểu như:

... (Nếu((A=1) (B=2)) --> Thực thi((C:AA) (C:BB)))
(Nếu((A=3) (B=4)) --> Thực thi((C:AAA) (C:BBB)))
(Nếu((A=5) (B=6)) --> Thực thi((C:AAAA) (C:BBBB)))
...

Trong đó: A và B là các đối số của các hàm lệnh: AA; AAA; AAAA; BB; BBB; BBBB ... đã được định nghĩa trước.

Đệ đã thử áp dụng cách hunnh đài GIA_BACH hướng dẫn, nhưng CAD chỉ hiểu và thực thi được câu lệnh đầu tiên mà thui. Có lẽ cần thiết phải sử dụng vòng lặp chăng?

Rất mong các huynh chỉ bảo tận tình!

Chân thành cám ơn!

Bạn có thể xem thêm hàm COND trong Help
Ví dụ :
(setq s (getstring "\n Nhap chu :"))
(cond
((= s "Y") 1)
((= s "y") 1)
((= s "N") 0)
((= s "n") 0)
)

Nếu ở dòng
Nhap chu : -> Bạn nhập Y hoặc y thì kết quả hàm COND sẽ trả về 1
Nhap chu : -> Bạn nhập N hoặc n thì kết quả hàm COND sẽ trả về 0
Nhap chu : -> Bạn nhập khác kí tự Y, y, N, n thì hàm COND sẽ trả về nil
  • 1

#7 dhyl

dhyl

    biết zoom

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

Đã gửi 21 November 2010 - 07:22 PM

Chân thành cám ơn Tue_NV ca ca!

Cho đệ làm phiền thêm tý nhé.

Giả sử đoạn code như sau:

(Defun C:AAA()
...
(if (= "A" 1) (alert "\n ...THOAT LENH...\n "))
(if (= "A" 2)
(progn
(cond
(and (= "B" 1) (= "C" 1) (C:L11))
(and (= "B" 1) (= "C" 2) (C:L12))
(and (= "B" 2) (= "C" 1) (C:L21))
...
(and (= "B" i) (= "C" j) (C:Lij))
)
)
)
(alert "\n ...HOAN TAT LENH...\n ")
(princ)
)


Trong đó các hàm lệnh Lij {(i;j) = (1;n)} và các biến A; B; C đã được định nghĩa.
Khi đệ cho chạy thử, thì:
+ Nếu {A=1} --> ACAD báo thoát lệnh.
+ Nếu {A=2} -->ACAD chỉ thực thi lệnh đầu tiên L11, bất chấp giá trị của các biến B & C.

Mong các huynh đài chỉ bảo cặn kẽ dzùm!
Nếu được, các huynh có thể post cho đệ một đoạn code có tình huống - bố cục tương tự, để đệ tự tham khảo và nhìn nhận cái SAI của mình, xin đa tạ!
  • 1

#8 ssg

ssg

    biết lệnh adcenter

  • Vip
  • PipPipPipPipPipPipPip
  • 1228 Bài viết
Điểm đánh giá: 1087 (rất tốt)

Đã gửi 21 November 2010 - 11:25 PM

Chân thành cám ơn Tue_NV ca ca!

Cho đệ làm phiền thêm tý nhé.

Giả sử đoạn code như sau:

(Defun C:AAA()
...
(if (= "A" 1) (alert "\n ...THOAT LENH...\n "))
(if (= "A" 2)
(progn
(cond
(and (= "B" 1) (= "C" 1) (C:L11))
(and (= "B" 1) (= "C" 2) (C:L12))
(and (= "B" 2) (= "C" 1) (C:L21))
...
(and (= "B" i) (= "C" j) (C:Lij))
)
)
)
(alert "\n ...HOAN TAT LENH...\n ")
(princ)
)


Trong đó các hàm lệnh Lij {(i;j) = (1;n)} và các biến A; B; C đã được định nghĩa.
Khi đệ cho chạy thử, thì:
+ Nếu {A=1} --> ACAD báo thoát lệnh.
+ Nếu {A=2} -->ACAD chỉ thực thi lệnh đầu tiên L11, bất chấp giá trị của các biến B & C.

Mong các huynh đài chỉ bảo cặn kẽ dzùm!
Nếu được, các huynh có thể post cho đệ một đoạn code có tình huống - bố cục tương tự, để đệ tự tham khảo và nhìn nhận cái SAI của mình, xin đa tạ!

Bạn có 2 cái sai:
1- Tên biến không được đặt trong dấu nháy kép! "B" được hiểu là ký tự B, do đó (= "B" 1) luôn luôn false!
2- (and (= B 1) (= C 2) (C:L12)) tương đương với hàm if đơn lẻ:
(if (and (= B 1) (= C 2)) (C:L12))
nhưng không thể lồng vào cond kiểu như bạn được.

Bạn tham khảo ví dụ sau:

;;;-------------------------------------
(defun C:VD1( / X)
(setq X (getint "\nHow old are you? "))
(cond
((< X 18) (alert "You're a baby yet!"))
((and (> X 30) (<= x 40)) (alert "So-so!"))
((> X 40) (alert "I'm sorry..."))
((alert "OK!"))
)
)
;;;-------------------------------------
(defun C:VD2( / X)
(setq X (getint "\nHow old are you? "))
(cond
(and (< X 18) (alert "You're a baby yet!"))
(and (> X 30) (<= x 40) (alert "So-so!"))
(and (> X 40) (alert "I'm sorry..."))
((alert "OK!"))
)
)
;;;-------------------------------------


VD1 chạy đúng ý, nhưng VD2 thì sai bét!!!
  • 2

#9 dhyl

dhyl

    biết zoom

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

Đã gửi 25 November 2010 - 04:19 PM

Chân thành cảm ơn SSG đại ka!
  • 0

#10 dhyl

dhyl

    biết zoom

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

Đã gửi 27 November 2010 - 12:53 PM

Tiếp theo cho đệ hỏi thêm vấn đề này

Biểu diễn LIST (danh sách sổ xuống)
DCL code:
...
:popup_list {
key = "abc";
label = "database";
fixed_width_font = true;
}
...


LISP code:
...
(setq ABC (list "1" "2" "3" "4" "5"))
(start_list "abc" 3)
(end_list)
...


Mong các huynh đài giúp đệ viết dùm liên kết: người dùng --> Dialog --> LISP, sao cho:
Khi người dùng chọn giá trị tại List sổ xuống database của Dialog (ví dụ bằng 2 chẳng hạn (hoặc bằng 1; 3; 4; 5)) => Gán giá trị này (ABC=2) cho một biến A (ví dụ vậy) để sử dụng cho các mục đích tiếp theo!!!

Đệ xin đa tạ!
  • 0

#11 Thaistreetz

Thaistreetz

    biết lệnh adcenter

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

Đã gửi 27 November 2010 - 03:01 PM

Tiếp theo cho đệ hỏi thêm vấn đề này

Biểu diễn LIST (danh sách sổ xuống)
DCL code:
...
:popup_list {
key = "abc";
label = "database";
fixed_width_font = true;
}
...


LISP code:
...
(setq ABC (list "1" "2" "3" "4" "5"))
(start_list "abc" 3)
(end_list)
...


Mong các huynh đài giúp đệ viết dùm liên kết: người dùng --> Dialog --> LISP, sao cho:
Khi người dùng chọn giá trị tại List sổ xuống database của Dialog (ví dụ bằng 2 chẳng hạn (hoặc bằng 1; 3; 4; 5)) => Gán giá trị này (ABC=2) cho một biến A (ví dụ vậy) để sử dụng cho các mục đích tiếp theo!!!

Đệ xin đa tạ!

Giả sử List_box hoặc popup_list của bạn có key là "XXX". muốn lấy giá trị của 1 phần tử bất kỳ trong list ABC khi nguời dùng kích chuột vào List_box bạn dùng hàm action_tile
(action_tile "xxx" "(setq A (nth (fix (atof (get_tile "xxx")))ABC))")
Hậu tạ mình đi :leluoi:
  • 0

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


#12 npham

npham

    biết lệnh rotate

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

Đã gửi 27 November 2010 - 08:37 PM

Giả sử List_box hoặc popup_list của bạn có key là "XXX". muốn lấy giá trị của 1 phần tử bất kỳ trong list ABC khi nguời dùng kích chuột vào List_box bạn dùng hàm action_tile
(action_tile "xxx" "(setq A (nth (fix (atof (get_tile "xxx")))ABC))")
Hậu tạ mình đi :leluoi:


Sao bạn không viết thế này cho gọn:

(action_tile "xxx" "(setq A (nth (atoi $value) ABC))")

Nhưng cách viết này gặp vấn đề khi bạn cần gán ngược lại giá trị của A vào "xxx" (hiển thị lại hộp thoại sau khi đóng tạm thời chẳng hạn) .

Tôi thường lấy : (action_tile "xxx" (setq A $value))
Sau khi xứ lý xong hộp thoại mới lấy (setq #A (nth (atoi A) ABC))
  • 0

#13 dhyl

dhyl

    biết zoom

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

Đã gửi 30 November 2010 - 04:19 PM

Cảm ơn các huynh đã nhiệt tình tương cứu!

Giả sử List_box hoặc popup_list của bạn có key là "XXX". Ủa trong đoạn code DCL đệ có đặt key cho popup_list là abc rồi mà, sao không lấy giá trị thực mà sài, tại sao phải giả định? Đệ không hỉu chổ này! Tuy vậy, đệ cứ giả sử như các huynh đã không đọc kỹ câu hỏi đệ, nên không để ý. Nhưng sao đệ áp dụng theo mà không được nhỉ?!

Hay là, nếu được, có huynh nào post cho đệ một LISP và giao diện DCL của nó, có chứa một POPUP_LISP đơn giản (sử dụng trực tiếp số (NUM) chọn tại giao diện của Popup_list để tính toán, chứ không phải điều kiện cho phép thực thi hành động tiếp theo!!!), để đệ tham khảo theo thì thật là biết ơn nhìu lắm!
  • 0

#14 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 30 November 2010 - 04:28 PM

Chân thành cám ơn Tue_NV ca ca!

Cho đệ làm phiền thêm tý nhé.

Giả sử đoạn code như sau:

(Defun C:AAA()
...
(if (= "A" 1) (alert "\n ...THOAT LENH...\n "))
(if (= "A" 2)
(progn
(cond
(and (= "B" 1) (= "C" 1) (C:L11))
(and (= "B" 1) (= "C" 2) (C:L12))
(and (= "B" 2) (= "C" 1) (C:L21))
...
(and (= "B" i) (= "C" j) (C:Lij))
)
)
)
(alert "\n ...HOAN TAT LENH...\n ")
(princ)
)


Trong đó các hàm lệnh Lij {(i;j) = (1;n)} và các biến A; B; C đã được định nghĩa.
Khi đệ cho chạy thử, thì:
+ Nếu {A=1} --> ACAD báo thoát lệnh.
+ Nếu {A=2} -->ACAD chỉ thực thi lệnh đầu tiên L11, bất chấp giá trị của các biến B & C.

Mong các huynh đài chỉ bảo cặn kẽ dzùm!
Nếu được, các huynh có thể post cho đệ một đoạn code có tình huống - bố cục tương tự, để đệ tự tham khảo và nhìn nhận cái SAI của mình, xin đa tạ!

Hề hề hề,
Sai đâu chửa biết, nhưng viết như thế này là lisp nó ngủ luôn đấy:
(if (= "A" 1) (alert "\n ...THOAT LENH...\n "))
(if (= "A" 2)

"A" là chuỗi (string)
1 , 2 là số (integer)
Vậy chứ làm sao mà so sánh để If....
Hề hề hề.....

Bài viết đã được chỉnh sửa nội dung bởi phamthanhbinh: 24 December 2010 - 04:45 PM
Sai chính tả

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

#15 npham

npham

    biết lệnh rotate

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

Đã gửi 30 November 2010 - 04:50 PM

Cảm ơn các huynh đã nhiệt tình tương cứu!

Giả sử List_box hoặc popup_list của bạn có key là "XXX". Ủa trong đoạn code DCL đệ có đặt key cho popup_list là abc rồi mà, sao không lấy giá trị thực mà sài, tại sao phải giả định? Đệ không hỉu chổ này! Tuy vậy, đệ cứ giả sử như các huynh đã không đọc kỹ câu hỏi đệ, nên không để ý. Nhưng sao đệ áp dụng theo mà không được nhỉ?!

Hay là, nếu được, có huynh nào post cho đệ một LISP và giao diện DCL của nó, có chứa một POPUP_LISP đơn giản (sử dụng trực tiếp số (NUM) chọn tại giao diện của Popup_list để tính toán, chứ không phải điều kiện cho phép thực thi hành động tiếp theo!!!), để đệ tham khảo theo thì thật là biết ơn nhìu lắm!



list="dong 1\nDòng 2\nDòng 3" : Là dữ liệu hiển thị trong listbox
(action_tile "key" "(setq chon $value)") : sẽ trả ra giá trị của chon là "0" hoặc "1" hoặc "2" .... tương ứng với việc bạn chọn dòng 1 hay dòng 2.....

bạn dùng biến chon này để lấy giá trị trong 1 list định trước hoặc xử lý nó theo nhu cầu.

"Giá trị thực" của nó là "0" hoặc "1" hoặc "2".... chứ không phải là "dòng 1" "dòng 2"........
  • 1

#16 Thaistreetz

Thaistreetz

    biết lệnh adcenter

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

Đã gửi 01 December 2010 - 12:16 AM

Sao bạn không viết thế này cho gọn:

(action_tile "xxx" "(setq A (nth (atoi $value) ABC))")

Để tiện cho việc copy - paste trong quá trình viết code điều khiển hộp thoại ý mà.
giả sử hộp thoại của mình phức tạp 1 chút, có vài cái list và việc chọn 1 phần tử ở list này sẽ kéo theo sự thay đổi tự động của list khác. khi đó buộc phải dùng cách của mình nếu muốn lấy giá trị của key khác. và cách viết của mình cũng tiện để copy cho những trường hợp này. hề hề
  • 1

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


#17 dhyl

dhyl

    biết zoom

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

Đã gửi 01 December 2010 - 04:16 PM

Hề hề hề,
Sai đâu chửa biết, nhưng viết như thế này là lisp nó ngu luôn đấy:
(if (= "A" 1) (alert "\n ...THOAT LENH...\n "))
(if (= "A" 2)

"A" là chuỗi (string)
1 , 2 là số (integer)
Vậy chứ làm sao mà so sánh để If....
Hề hề hề.....


Chân thành cám ơn anh phamthanhbinh!
Vấn đề mà anh vừa chỉ tôi, SSG đại ca đã chỉ tôi rồi. Anh là MOD mà sao vội vã quá vậy, là MOD thì không cần đọc câu trả lời của pà kol à!
  • 0

#18 npham

npham

    biết lệnh rotate

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

Đã gửi 01 December 2010 - 04:54 PM

Hề hề hề,
Sai đâu chửa biết, nhưng viết như thế này là lisp nó ngu luôn đấy:
(if (= "A" 1) (alert "\n ...THOAT LENH...\n "))
(if (= "A" 2)

"A" là chuỗi (string)
1 , 2 là số (integer)
Vậy chứ làm sao mà so sánh để If....
Hề hề hề.....


heeehe. Mấy bác nóng ghê.
Bạn ấy quên làm cái dấu nháy thôi mà.
Thực ra cách viết (= "A" 2) cũng đâu có làm lisp nó "ngu". Tôi cũng hay thường dùng cái này để làm mẹo. (lừa các phần mềm dò source code)
  • 0

#19 dhyl

dhyl

    biết zoom

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

Đã gửi 02 December 2010 - 07:34 AM

Giả sử có một trường hợp nhảm nhí như thế này nhé.

Đệ muốn viết một LISP vẽ đa giác đều có số cạnh là số nguyên tố, có giao diện DCL như sau:
======================================
Polygon : dialog {
label = "POLYGON - dhyl - www.cadviet.com";
: column {
: popup_list {
key = "numside";
label = "So canh da giac deu:";
width = 5;
fixed_width_font = false;
}
: edit_box {
key = "L";
label = "Chieu dai canh:";
edit_width = 30;
value = "";
}
: button {
key = "accept";
label = " Dong y ";
is_default = true;
}
}
}
=============download: http://s.cadviet.com/fv===

Trong đó số cạnh được giới hạn: (list “3” “5” “7” “11” “13” “17”)

Về phần viết code cho Lisp, đệ muốn: khi hoàn tất, nếu người dùng chọn trong list sổ xuống: số cạnh đa giác đều: 5 (chẳng hạn, hay một số khác bất kỳ trong list trên). Phải viết làm sao để gán giá trị (numside = 5) này cho một biến độc lập x (chẳng hạn!).

Nếu có thời gian rảnh, mong các huynh viết giùm đệ hoàn chỉnh Lisp này, để đệ tham khảo sẽ tốt hơn. Tất nhiên, các huynh có thể đề nghị thêm một số điều kiện khác để có thể xuất ra đa giác đều được, ví dụ góc quay chẳng hạn, làm sao cho trục đối xứng của nó song song trục Y, đi qua một đỉnh và trung điểm cạnh đối diện. Gán tâm đa giác tại gốc tọa độ (0,0) chẳng hạn v.v…

Chúc các huynh một ngày mới hạnh phúc. Đệ rất mong chờ hồi đáp!
  • 1

#20 npham

npham

    biết lệnh rotate

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

Đã gửi 02 December 2010 - 08:35 AM

Giả sử có một trường hợp nhảm nhí như thế này nhé.

Đệ muốn viết một LISP vẽ đa giác đều có số cạnh là số nguyên tố, có giao diện DCL như sau:
======================================
Polygon : dialog {
label = "POLYGON - dhyl - www.cadviet.com";
: column {
: popup_list {
key = "numside";
label = "So canh da giac deu:";
width = 5;
fixed_width_font = false;
}
: edit_box {
key = "L";
label = "Chieu dai canh:";
edit_width = 30;
value = "";
}
: button {
key = "accept";
label = " Dong y ";
is_default = true;
}
}
}
=============download: http://s.cadviet.com/fv===

Trong đó số cạnh được giới hạn: (list “3” “5” “7” “11” “13” “17”)

Về phần viết code cho Lisp, đệ muốn: khi hoàn tất, nếu người dùng chọn trong list sổ xuống: số cạnh đa giác đều: 5 (chẳng hạn, hay một số khác bất kỳ trong list trên). Phải viết làm sao để gán giá trị (numside = 5) này cho một biến độc lập x (chẳng hạn!).

Nếu có thời gian rảnh, mong các huynh viết giùm đệ hoàn chỉnh Lisp này, để đệ tham khảo sẽ tốt hơn. Tất nhiên, các huynh có thể đề nghị thêm một số điều kiện khác để có thể xuất ra đa giác đều được, ví dụ góc quay chẳng hạn, làm sao cho trục đối xứng của nó song song trục Y, đi qua một đỉnh và trung điểm cạnh đối diện. Gán tâm đa giác tại gốc tọa độ (0,0) chẳng hạn v.v…

Chúc các huynh một ngày mới hạnh phúc. Đệ rất mong chờ hồi đáp!



bạn có thể tham khảo đoạn code thô dưới đây.
bạn cần :
- Tên dialog, key trong DCL không nên có chữ hoa vì dễ quên dẫn tới lỗi.
- Trình bày lại DCL cho đẹp và khoa học.
- Định các biến cục bộ trong hàm
- Định việc lưu hay không lưu các biến đã chọn cho lần gọi hàm kế tiếp.
Chúc bạn thành công
(defun c:dagiac (/)


(setq datalist (list 3 5 7 9 11 13 15 17))
(setq numside 5)
(setq L 30)

(setq id (load_dialog "c:/dagiac.dcl"))
(new_dialog "Polygon" id)

(start_list "numside")
(mapcar 'add_list (mapcar 'itoa datalist))
(end_list)

(set_tile "numside" (itoa (vl-position numside datalist)))
(set_tile "L" (rtos L 2 2))

(action_tile "numside" "(setq numside (nth (atoi $value) datalist))")
(action_tile "L" "(setq L (distof $value))")

(setq sta (start_dialog))
(done_dialog)
(unload_dialog id)

(if (> sta 0)
(progn
(setq a (/ pi numside))
(setq R (/ L 2 (sin a)))

(command "polygon" numside (setq p1 (getpoint "Center point")) "" (polar p1 (* pi 0.5) R))
)
)

)

  • 2