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ị

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

- ^^, 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)
)

Đang thức chờ nhoc viết đây heheehè

cám ơn bạn nhiều lấy về dùng thử thế nào mai sẽ nhận xé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

- ^^, 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)
)

Đã đúng như yêu cầu rồi

Bây giờ muốn ràng buộc điều kiện vào cho nó nhưng làm hoài mà không xong mới được 50%

muốn chọn đối tượng là text còn cao hơn nữa bắt buộc text đó phải là số

Đây là lisp chế thêm

(defun c:caod () ;(/ chon hh kk c_do c)
(setq chon (car (entsel "\nCao do chuan chon hoac nhap so:")))
(if (/= chon nil)
(while
 	 (or
	 (null chon)
   	 (/= "TEXT" (cdr (assoc 0 (entget chon))))
	 )
	(princ "\nDoi tuong khong phai la text! Chon lai")
	(setq chon (car (entsel "\nCao do chuan chon hoac nhap so:")))
)
)
(if (= chon nil)
(progn
(setq hh (getvar "lastprompt"))
(setq kk (strlen "Cao do chuan chon hoac nhap so: "))
(setq c_do (distof (substr hh kk)))
)
(setq c_do (distof (cdr (assoc 1 (entget chon)))))
)
(princ (setq c (+ 0.5 c_do)))
(princ)
)

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

Đưa

(while
  (null c_do)

)

ra ngoài cùng, kiểm tra nội dung text hoặc giá trị nhập hh là số

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ái này cũng tàm tạm nè!

 

(defun C:HA(/ ent cd)
 (if (setq ent (car (entsel "\nChon hoac nhap cao do: ")))
  (while (not (setq cd (distof (cdr (assoc 1 (entget ent))))))
   (if (setq ent (car (entsel "\nChon hoac nhap cao do: ")))
    (setq cd (distof (cdr (assoc 1 (entget ent)))))))
  (setq cd (distof (substr (getvar "lastprompt") (strlen "Chon hoac nhap cao do: ")))))
 cd) 
 
  • 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

×