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

Hỏi về Lisp (thuật toán, ý tưởng, coding,...)

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

- ah đc ^^, nhoc ít xài bên 3d nên ít để ý trục Z, mới xực nhớ có đọc qua dùng lệnh 3dpoly có thể add Z lun ^^, code sẽ đc viết lại như thế này ^^

(defun c:rrr(/ )
(setq a '(1 2 3 4))
(setq b '(2 7 8 9))
(setq lst_new (mapcar '(lambda (x) (cdr x)) (list a b)))
(apply 'command (append (list ".3dPoly") lst_new (list "")))
) 

- các điểm đó sẽ đúng theo lst vd:  x=2 y=3 z=4, 

  • 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

@nhoc: Grread thì không thể nhập số kiểu như bạn trình bày được

Nhưng kết hợp grread và dialog để nhập thì được

Ví dụ như TH này :

- Khi User rê chuột thì "Grread" phát huy tác dụng

- Khi User bấm phím số "56" độ chẳng hạn thì lúc đầu User phải bấm số 5 rồi mới bấm số 6

Ta đi thiết lập cho việc User bấm phím số đầu đưa vào hộp thoại. User chỉ việc nhập số tiếp theo trong hộp thoại. TH nhập số khác khoảng 0 -> 180 thì khi ok -> "Grread rê chuôt" phát huy tác dụng tiếp ^_^

 

Hàm grread chỉ nhập được 1 ký tự, hoặc pick 1 điểm, hoặc pick vào 1 icon... >> e rằng không thể dùng được để nhập 1 số có nhiều chữ số (VD: 123.45).

 

Chỉ được nhập 1 ký tự không có nghĩa là ta không thể có cách nào nhập 2 ký tự hoặc hơn khi vận dụng nó. Cho grread vào vòng lặp while và khai báo điều kiện thoát lặp thì ta có thể nhập bao nhiêu ký tự cũng được.

 

Ví dụ như cách làm của Tue_NV, bạn hoàn toàn có thể thay thế việc gọi hộp thoại bằng 1 hoặc nhiều lần grread nữa. theo hướng giải quyết như của bạn, ta có thể dùng while hoặc lặp đệ quy để thay cho dialog đều được. Với cách này, thậm chí có thể viết để đối tượng xoay theo thời gian thực khi người dùng nhập số hoặc di chuyển con trỏ luôn nữa cơ.

 

Trước đây mình có chia sẻ lên diễn đàn lisp máy tính dòng lệnh. Phương thức nhập liệu mình sử dụng cũng tương tự vậy.

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ác bạn cho mình hỏi.

Mình đang viết một lisp, và trong lisp này mình muốn gọi để thực thi một lisp khác được không, nếu được thì câu lệnh như thế nào.

Mì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

Bạn hoàn toàn có thể làm được bằng cách đưa lisp cần gọi làm hàm con, bằng cách thay dòng (defun c:tenlenh () ) bang (defun tenlenh()) va khai báo tham số đầu vào cho nó. Bạn có thể tìm hiểu thêm về hàm con trên diễn đà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ác bạn cho mình hỏi.

Mình đang viết một lisp, và trong lisp này mình muốn gọi để thực thi một lisp khác được không, nếu được thì câu lệnh như thế nào.

Mình cảm ơn!

Giả sử lisp thứ nhất có 1 lệnh tên là ABC.

Lisp thứ 2 muốn thực thi được lệnh ABC của lisp thứ nhất thì bạn viết kiểu như vầy:

(defun C:XYZ()

 (load "Ten_file_lisp_thu_nhat_kem_duong_dan")

 (C: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

Hàm chọn các đối tượng là TEXT:

(ssget '((0 . "TEXT")))

Ý mình không phải vậy cái đó mình đã biết rồi. Ở đây mình đang lấy dữ liệu để tính toán nên ở dòng cần nhập dữ liệu là có thể chọn trên màn hình hoặc có thể là nhập vào từ bàn phím

cám ơn bạn nhiều

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ế thì tôi không hiểu gì hết nên không giúp được.

Nói nôm na là dữ liệu đó có thể nhập ngoài vào hoặc có trên bản vẽ rồi thì khỏi phải nhập mà là chọn nó luô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

Nói nôm na là dữ liệu đó có thể nhập ngoài vào hoặc có trên bản vẽ rồi thì khỏi phải nhập mà là chọn nó luôn

 

Không phải như ý bác DoanVanHa thì khó hiểu quá bạn ơi! Bạn nói rõ ràng, cụ thể hơn đi

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 mà tôi chậm hiểu thế chứ nhỉ! Đến lần thứ 3 mà tôi vẫn chưa hiểu. Có ai hiểu không, giúp bạn í với? Hoặc giả là bạn post bản vẽ lên, hoặc giả là bạn cho ví dụ?

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

Theo như "ngu ý" của em thì là thế này: ý của bạn ấy là tham số đầu vào cho lisp là một con số hoặc một cái tên gì đó dạng text. Nếu nó có trên bản vẽ rồi thì kick chuột chọn, hoặc chưa có thì nhập vào bàn phím.

Còn trường hợp khác là kiểu dùng lệnh nhiều lần, giá trị đã nhập một lần khi dùng lệnh lần đầu rồi các lần sau enter luôn không cần nhập lại nữa

Nếu vẫn không đúng ý chủ thớt thì em cũng chịu, đợi chủ thớt up bản vẽ lên vậy

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

Theo như "ngu ý" của em thì là thế này: ý của bạn ấy là tham số đầu vào cho lisp là một con số hoặc một cái tên gì đó dạng text. Nếu nó có trên bản vẽ rồi thì kick chuột chọn, hoặc chưa có thì nhập vào bàn phím.

Còn trường hợp khác là kiểu dùng lệnh nhiều lần, giá trị đã nhập một lần khi dùng lệnh lần đầu rồi các lần sau enter luôn không cần nhập lại nữa

Nếu vẫn không đúng ý chủ thớt thì em cũng chịu, đợi chủ thớt up bản vẽ lên vậy

Đúng như ý đầu của bạn rồi ở đây là các con số thôi (cộng các cao độ đó mà) trường hợp có trên bản vẽ thì chọn nó cho nhanh còn không có thì phải nhập vào, mình viết cho từng trường hợp (hoặc nhập hoặc chọn) thì được rồi. Bây giờ muốn gộp lại cho nó tiện.

Cám ơn mọi người đã quan tâ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

Sao mà tôi chậm hiểu thế chứ nhỉ! Đến lần thứ 3 mà tôi vẫn chưa hiểu. Có ai hiểu không, giúp bạn í với? Hoặc giả là bạn post bản vẽ lên, hoặc giả là bạn cho ví dụ?

Sorry bạn. Chắc bạn nghỉ quá cao siêu quá mà do mình lại diễn đạt không thấu đáo. Mình thì viết lisp dựa vào mấy cái lisp có sẵn rồi chế lại thôi nên hiểu đơn giản nên nói vậy.

Trường hợp của mình là như vậy nè:

sau khi gõ lệnh: caodo

yêu cầu nhập cao độ chuẩn.

Lúc này có thể chọn trên màn hình luôn hoặc đánh số vào,

Vậy đó.

Không biết thế này được chưa nữa

mong bạn bỏ qua nếu không hiểu

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

Sorry bạn. Chắc bạn nghỉ quá cao siêu quá mà do mình lại diễn đạt không thấu đáo. Mình thì viết lisp dựa vào mấy cái lisp có sẵn rồi chế lại thôi nên hiểu đơn giản nên nói vậy.

Trường hợp của mình là như vậy nè:

sau khi gõ lệnh: caodo

yêu cầu nhập cao độ chuẩn.

Lúc này có thể chọn trên màn hình luôn hoặc đánh số vào,

Vậy đó.

Không biết thế này được chưa nữa

mong bạn bỏ qua nếu không hiểu

- vậy ban thử cách nhoc nêu xem có đúng ý bạn ko ^^, yêu cầu nhập cao độ, ko nhập thì enter hay chuột phải bỏ qua lsp sẽ nhảy qua bước chọn text trên màn hình

^^

(if (setq c_do (getreal "\nnhap cao do chuan:"))
c_do
(setq c_do (distof (cdr (assoc 1 (entget (car (entsel "\nchon cao do chuan:")))))))
)
  • 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

- vậy ban thử cách nhoc nêu xem có đúng ý bạn ko ^^, yêu cầu nhập cao độ, ko nhập thì enter hay chuột phải bỏ qua lsp sẽ nhảy qua bước chọn text trên màn hình

^^

(if (setq c_do (getreal "\nnhap cao do chuan:"))
c_do
(setq c_do (distof (cdr (assoc 1 (entget (car (entsel "\nchon cao do chuan:")))))))
)

cám ơn bạn nhiều

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

 

 

 

- vậy ban thử cách nhoc nêu xem có đúng ý bạn ko ^^, yêu cầu nhập cao độ, ko nhập thì enter hay chuột phải bỏ qua lsp sẽ nhảy qua bước chọn text trên màn hình

^^

(if (setq c_do (getreal "\nnhap cao do chuan:"))
c_do
(setq c_do (distof (cdr (assoc 1 (entget (car (entsel "\nchon cao do chuan:")))))))
)

 

Cách viết của Nhóc vẫn thừa 1 thao tác Enter

Nhóc nghiên cứu Làm sao viết được như thế này :

Select object: 15.6

"15.6"

 

Ở bước chọn đối tượng Select object -> nếu chọn đối tượng Text thì Lisp tự nhận đối tượng text. Còn nếu nhập số (như 15.6) vào dòng Select object thì Lisp tự nhận số 15.6 luôn khỏi phải enter chi cả

Select object: 15.6
"15.6"
 
Select object: 15.6
"15.6"

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ách viết của Nhóc vẫn thừa 1 thao tác Enter

Nhóc nghiên cứu Làm sao viết được như thế này :

Select object: 15.6

"15.6"

 

Ở bước chọn đối tượng Select object -> nếu chọn đối tượng Text thì Lisp tự nhận đối tượng text. Còn nếu nhập số (như 15.6) vào dòng Select object thì Lisp tự nhận số 15.6 luôn khỏi phải enter chi cả

Select object: 15.6
"15.6"
 
Select object: 15.6
"15.6"

Mình cũng thấy thừa 1 cái enter đó định hỏi bạn có cách nào khác khô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

Mình cũng thấy thừa 1 cái enter đó định hỏi bạn có cách nào khác không???

 

Đương nhiên là có cách rồi, nhưng mình khoan viết vội, để bạn nhóc ngâm cứu cái đã ^_^

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

- ^^, khó phết anh Tue nhỉ, khuya rùi nhoc mới mò đc vậy ko biết  có ổn ko, nhưng hơi dài kaka,mai lại bận cả ngày ko có thời gian ngâm tiếp ^^

(defun c:caodo(/ chon hh kk c_do c)
(setq chon (car (entsel "\nchon cao do chuan:")))
(if (= chon nil)
(progn
(setq hh (getvar "lastprompt"))
(setq kk (strlen "chon cao do chuan: "))
(setq c_do (distof (substr hh kk)))
)
(setq c_do (distof (cdr (assoc 1 (entget chon)))))
)
(princ (setq c (+ 0.5 c_do)))
(princ)
)
  • 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

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


×