Chuyển đến nội dung
Diễn đàn CADViet
dhyl

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

Các bài được khuyến nghị

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!

  • Vote tăng 1

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
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.com/forum/index.php?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)]

  • Vote tăng 2

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
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.com/forum/index.php?showtopic=27353

Hướng dẫn rất cụ thế đó. Chúc bạn thành công

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

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!

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
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

  • Vote tăng 1

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

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ạ!

  • Vote tăng 1

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
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!!!

  • Vote tăng 2

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

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ạ!

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
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:

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
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))

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

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!

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
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ề.....

Chỉnh sửa theo phamthanhbinh
Sai chính tả

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
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"........

  • Vote tăng 1

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
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ề

  • Vote tăng 1

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
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 à!

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
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)

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

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!

  • Vote tăng 1

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
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))
  )
)

 )

  • Vote tăng 2

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
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))
  )
)

 )

Có anh em nào sửa lại LSP này được không, LSP này không chạy được nè!

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
Có anh em nào sửa lại LSP này được không, LSP này không chạy được nè!

Chạy OK mà.

cái lisp trên cahỵ kèm với tệp DCL bạn đã post lần trước (Copy vào ổ C:\). Nếu vẫn còn lỗi bạn vui lòng post thông báo lỗi lên nhé.

Polygon : dialog {
label = "POLYGON - dhyl - www.cadviet.com";
: column {
: popup_list {
key = "numside";
label = "So canh da giac deu:";
width = 5;
fixed_width = true;
}
: edit_box {
key = "L";
label = "Chieu dai canh:";
edit_width = 5;
}
: button {
key = "accept";
label = " Dong y ";
is_default = true;
}
}
}

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

Anh em cho mình hỏi cách gọi file HELP?

 

Giả sử mình đã soạn sẵn một file Help tên là: ABC.chm

Và trong code DCL đã có:

v.v...

: button {

fixed_width=true;

width=13;

key="help";

label= "&Help";

is_help=true;

}

v.v...

 

Như vậy, phải viết liên kết LSP làm sao? Để khi nhập lệnh gọi, hộp thoại chương trình hiện lên, khi nhấp vào nút Help, sẽ hiển thị file ABC.chm để người dùng tham khảo chương trình! (giá sử rằng các file *.chm; *.dcl & *.lsp đề đã có mặt trong C>ACAD>Support).

 

Xin cảm ơn!

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
Anh em cho mình hỏi cách gọi file HELP?

 

Giả sử mình đã soạn sẵn một file Help tên là: ABC.chm

Và trong code DCL đã có:

v.v...

: button {

fixed_width=true;

width=13;

key="help";

label= "&Help";

is_help=true;

}

v.v...

 

Như vậy, phải viết liên kết LSP làm sao? Để khi nhập lệnh gọi, hộp thoại chương trình hiện lên, khi nhấp vào nút Help, sẽ hiển thị file ABC.chm để người dùng tham khảo chương trình! (giá sử rằng các file *.chm; *.dcl & *.lsp đề đã có mặt trong C>ACAD>Support).

 

Xin cảm ơn!

 

DCL để gọi lệnh thôi mà. Còn help bạn gọi trong LSP.

Vi dụ bạn có 1 hàm (myhelp) thì trong DCL bạn định nghĩa

 

(action_tile "help" "(myhelp)")

 

và myhelp có chứa lệnh help của autolisp: (defun myhelp (/) (help [helpfile ]]))

 

Chúc bạn thành công.

  • Vote tăng 1

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

Rất cảm ơn sự nhiệt tình của anh npham, nhưng xin lỗi, tôi lại không làm được!!!

 

Bây giờ ví dụ cụ thể như thế này nhé:

 

Trước tiên download file này: http://s.cadviet.com/kv

 

1. Có sẵn một file help (trong file download trên!)

2. Sứa DCL Dialog.dcl hôm trước để có thêm nút help như sau:

(có sẵn trong file download trên!!)

 

===================dialog.dcl======

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 = "";

}

: row {

: button {

fixed_width=true;

width=13;

key="help";

label= "&Help";

is_help=true;

}: button {

key = "accept";

label = " Dong y ";

is_default = true;

}

}

}

}

===================dialog.dcl======

Anh npham có thể sửa lại cái LISP: dagiac.lsp (hôm trước anh viết) thêm vào nội dung: khi người dùng nhấp vào nút Help --> màn hình ACAD hiển thị file: Dialog.chm em đã cung cấp ở trên.

 

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

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

Tạo một tài khoản hoặc đăng nhập để nhận xét

Bạn cần phải là một thành viên để lại một bình luận

Tạo tài khoản

Đăng ký một tài khoản mới trong cộng đồng của chúng tôi. Điều đó dễ mà.

Đăng ký tài khoản mới

Đăng nhập

Bạn có sẵn sàng để tạo một tài khoản ? Đăng nhập tại đây.

Đăng nhập ngay


×