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ị

Em có thư mục chứa thư viện nằm trong CD. Có cách nào khi load file lisp nằm trong thu mục này thì nó gán cho biến tenduongan là đường dẩn thư mục chứa file líp này không.

Ví dụ: đường dẩn file lisp như thế này E:\BV\DUY\DUONGAN.LSP

sau khi load lên thì thu được biến tenđuongan là E:\BV\DUY\

Bác nào biết chỉ giúp vớ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
Em có thư mục chứa thư viện nằm trong CD. Có cách nào khi load file lisp nằm trong thu mục này thì nó gán cho biến tenduongan là đường dẩn thư mục chứa file líp này không.

Ví dụ: đường dẩn file lisp như thế này E:\BV\DUY\DUONGAN.LSP

sau khi load lên thì thu được biến tenđuongan là E:\BV\DUY\

Bác nào biết chỉ giúp với.

 

 

Dùng hàm FINDFILE

 

(setq fpath (FINDFILE filename))

 

trong trường hợp của bạn thì có thể dùng là:

 

(setq fpath (FINDFILE "DUONGAN.LISP"))

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
Dùng hàm FINDFILE

 

(setq fpath (FINDFILE filename))

 

trong trường hợp của bạn thì có thể dùng là:

 

(setq fpath (FINDFILE "DUONGAN.LISP"))

Không được đâu!

vndesperados test lại đi!

hàm findfile chỉ tìm file trong các "AutoCAD library path" thô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ông được đâu!

vndesperados test lại đi!

hàm findfile chỉ tìm file trong các "AutoCAD library path" thôi.

 

Ừ nhỉ, quên mất, cảm ơn bác Hòanh

Nhưng mà cũng có thể dùng nếu trước đó đã được Add vào Support File Searh Path.

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
Ừ nhỉ, quên mất, cảm ơn bác Hòanh

Nhưng mà cũng có thể dùng nếu trước đó đã được Add vào Support File Searh Path.

 

Mục đích em hỏi đoạn lisp trên là để đưa thư mục đó vào Support File Searh Path mà.

Với lại còn phải cắt bớt đi một đoạn nửa.

Ý là có cách nào đọc được các thao tác khi chọn file và lưu thành chuổi hay 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
Cho mình xin hỏi lệnh (setvar "osmode" 33 ) có nghĩa là gì?

Cám ơn nhiều.

Giá trị của osmode có nghĩa như sau:

0 NONe

1 ENDpoint

2 MIDpoint

4 CENter

8 NODe

16 QUAdrant

32 INTersection

64 INSertion

128 PERpendicular

256 TANgent

512 NEArest

1024 Clears all object snaps

2048 APParent Intersection

4096 EXTension

8192 PARallel

 

Như vậy, khi osmode bằng 33 = 32+1 tức là lệnh (setvar "osmode" 33) bật osnap ENDPoint và INTersection.

  • 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
Cho mình xin hỏi lệnh (setvar "osmode" 33 ) có nghĩa là gì?

Cám ơn nhiều.

 

Nó chuyển chế độ tự động bắt điểm thành Enđpoin và Intersection (điểm đầu, điểm cuối và điểm giao nhau)

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ục đích em hỏi đoạn lisp trên là để đưa thư mục đó vào Support File Searh Path mà.

Với lại còn phải cắt bớt đi một đoạn nửa.

Ý là có cách nào đọc được các thao tác khi chọn file và lưu thành chuổi hay không.

 

 

Mình nghĩ là được và cách đó là ta không dùng lệnh APPLOAD mà ta dùng (LOAD LispFile)

Có nghĩa là ta sẽ viết một đọan LISP để thực hiện mục đích của mình

(DEFUN EXCUTE()
 (setq fname (getfiled "Chon mot file LISP" "" "lsp" 8))
 (if (/= fname Nil)
(progn
;;;   code here
  (princ fname)
)
 )
 (princ)
)
(DEFUN C:LF()
 (EXCUTE)
)

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 nghĩ là được và cách đó là ta không dùng lệnh APPLOAD mà ta dùng (LOAD LispFile)

Có nghĩa là ta sẽ viết một đọan LISP để thực hiện mục đích của mình

(DEFUN EXCUTE()
 (setq fname (getfiled "Chon mot file LISP" "" "lsp" 8))
 (if (/= fname Nil)
(progn
;;;   code here
  (princ fname)
)
 )
 (princ)
)
(DEFUN C:LF()
 (EXCUTE)
)

 

Vẫn chưa đúng ý bác ạ. Em nói sơ tác dụng của lisp như thế này.

Em cho đĩa CD vào máy (hoặc thư mục có sẳn trong máy) Khi chọn load file này lên thì nó thực hiện coppy file, tạp đường dẩn đến thư mục chứa file lisp này. Nhửng bước sau thì em đã làm được rối nhưngcái phần lấy đường dẩn em phải khai thủ công bây giờ muốn tự động luôn.

Cái lisp trên cũng giải quyết được nhưng hơi vòng vèo. với lại còn đoạn cắt bỏ bớt tên file trong đường dẫn thì làm sao bác.

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
Vẫn chưa đúng ý bác ạ. Em nói sơ tác dụng của lisp như thế này.

Em cho đĩa CD vào máy (hoặc thư mục có sẳn trong máy) Khi chọn load file này lên thì nó thực hiện coppy file, tạp đường dẩn đến thư mục chứa file lisp này. Nhửng bước sau thì em đã làm được rối nhưngcái phần lấy đường dẩn em phải khai thủ công bây giờ muốn tự động luôn.

Cái lisp trên cũng giải quyết được nhưng hơi vòng vèo. với lại còn đoạn cắt bỏ bớt tên file trong đường dẫn thì làm sao bác.

Cám ơn !

Jin nghĩ cách như VnDesperados là đã đủ giải quyết vấn dề của đồng chí rồi.

Còn việc lấy trên đường dẫn thì sử dụng vòng lặp dò từng ký tự từ bên phải sang (bằng lệnh substr), khi nào thấy xuất hiện ký tự "\" thì cắt toàn bộ phần đuôi đi, thế là xong!

 

Theo Jin, một lisp như duy782006 muốn chuyên nghiệp hơn thì cần có thêm giao diện như sau:

 

lmss2.jpg

 

Nó bao gồm một danh sách các lisp đã chọn trước đó (được lưu vào file hệ thống), và command button cho phép chọn để load lisp mới.

Lisp này sử dụng cho trường hợp lisp bị dấu vào CD như duy782006 nói, chắc là bị vướng bản quyền :s_dead:

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
Jin nghĩ cách như VnDesperados là đã đủ giải quyết vấn dề của đồng chí rồi.

Còn việc lấy trên đường dẫn thì sử dụng vòng lặp dò từng ký tự từ bên phải sang (bằng lệnh substr), khi nào thấy xuất hiện ký tự "\" thì cắt toàn bộ phần đuôi đi, thế là xong!

 

Theo Jin, một lisp như duy782006 muốn chuyên nghiệp hơn thì cần có thêm giao diện như sau:

 

lmss2.jpg

 

Nó bao gồm một danh sách các lisp đã chọn trước đó (được lưu vào file hệ thống), và command button cho phép chọn để load lisp mới.

Lisp này sử dụng cho trường hợp lisp bị dấu vào CD như duy782006 nói, chắc là bị vướng bản quyền :s_dead:

 

Không phài là vấn đề bản quyền mà mình cí thư viện và 1 số lệnh lisp dùng quen rồi nếu đi máy khác thì không có mà dùng nên cho vào CD để đi máy nào củng làm viễc được nhưng không ảnh hưởng đến ACAD của máy khác. (cơ quan mình nhiều khi chạy lung tunh hế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ông phài là vấn đề bản quyền mà mình cí thư viện và 1 số lệnh lisp dùng quen rồi nếu đi máy khác thì không có mà dùng nên cho vào CD để đi máy nào củng làm viễc được nhưng không ảnh hưởng đến ACAD của máy khác. (cơ quan mình nhiều khi chạy lung tunh hết) .

Chà, vậy thì tiện quá rồi.

Sau khi mọi người bàn bạc như thế, đề nghị duy782006 tạo thành một lisp hoàn chỉnh rồi share cho mọi người với nha :s_dead:

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à, vậy thì tiện quá rồi.

Sau khi mọi người bàn bạc như thế, đề nghị duy782006 tạo thành một lisp hoàn chỉnh rồi share cho mọi người với nha :s_dead:

 

 

Đang đọc sách chứ hồi giờ có biết hàm substr là gì đâ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
Đang đọc sách chứ hồi giờ có biết hàm substr là gì đâu ????

Ở đầu topic này có nói về hàm ấy đấy. Hàm này cho phép truy xuất một chuỗi con trong một chuỗi mẹ, chẳng hạn lấy ra hai ký tự ab trong chuỗi dfabcd.

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ác ơi , cho em hỏi 1 chút

em rất thích lệnh arctext trong bonus của cad R14

nhưng khi cài lại không cài thêm thanh công cụ là Bonus

em tìm trong đường dẫn cadR14 có file lisp là arctext.lsp

appload dùng không được

có bác nào biết không chỉ cho em với, thanks trước

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ác ơi , cho em hỏi 1 chút

em rất thích lệnh arctext trong bonus của cad R14

nhưng khi cài lại không cài thêm thanh công cụ là Bonus

em tìm trong đường dẫn cadR14 có file lisp là arctext.lsp

appload dùng không được

có bác nào biết không chỉ cho em với, thanks trước

 

Trong ACAD đời sau, vẫn còn arctext mà bạn. Nó nằm trong bộ Express của AutoCAD (Tôi đang dùng ACAD2007 thấy lệnh arctext vẫn ngon lành).

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 anh, nhưng bác ơi sao em tìm mãi không thấy folder express trong thư mục

progam\autocad 200x anh à, bác có thể chỉ giúp em đượ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

Có bác nào có lisp có nội dung như sau:

trên màn hình có text như sau 2*2=6

đây là kết quả sai

khi chạy lisp yêu cầu chọn text cần tính toán

Sau khi chọn text trên thì sẽ cho kết quả là

2*2=4 tại đúng vị trí đó (tức là thay thế text cũ)

tất nhiên màu và font chữ như cũ thì càng tốt

thanks các bác trước!

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ó bác nào có lisp có nội dung như sau:

trên màn hình có text như sau 2*2=6

đây là kết quả sai

khi chạy lisp yêu cầu chọn text cần tính toán

Sau khi chọn text trên thì sẽ cho kết quả là

2*2=4 tại đúng vị trí đó (tức là thay thế text cũ)

tất nhiên màu và font chữ như cũ thì càng tốt

thanks các bác trước!

Lệnh là CALTEXT.

(defun c:caltext (/ ent tt old gt vt gtmoi)
 (if (not c:cal)
   (load "geomcal.arx")
 )
 (setq
   ent	  (car (entsel "\nHay pick vao doi tuong text: "))
   tt	  (entget ent)
   old	  (assoc 1 tt)
   gt	  (cdr old)
   vt	  (vl-string-position (ascii "=") gt)
   gtmoi (substr gt 1 vt)
   kq	  (rtos (c:cal gtmoi))
   kq    (vl-string-right-trim "0" kq)
   kq    (vl-string-right-trim "." kq)
   gtmoi (strcat gtmoi "=" kq)
   tt	  (subst (cons 1 gtmoi) old tt)
 )
 (entmod tt)
 (entupd ent)
 (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

Bác Hoanh ơi, lisp này đúng ý em rồi

nhưng em muốn "nâng cấp" 1 chút như sau:

không phải chỉ chọn 1 text , mà có thể chọn nhiều text

khác nhau cùng 1 lúc được không bác?!

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

Ngày xưa dùng menuimage của menu có dòng như thế này mục đích là chọn hatchname là duy-05 sau đó gọi lệnh hatch của ACAD lên.

[duy-05]^C^C_setvar hpname "duy-05" _.bhatch

Bây giờ muốn chuyển qua sử dụng hộp thoại chuyển thành đoạn lisp như sau:

(setvar hpname "duy-05")

(command ".bhatch")

Nhưng sao nó không chọn được hatchname cũng như không hiển thị được hộp thoại của lệnh bhatch. bác nào biết xin chỉ giúp.

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
Ngày xưa dùng menuimage của menu có dòng như thế này mục đích là chọn hatchname là duy-05 sau đó gọi lệnh hatch của ACAD lên.

[duy-05]^C^C_setvar hpname "duy-05" _.bhatch

Bây giờ muốn chuyển qua sử dụng hộp thoại chuyển thành đoạn lisp như sau:

(setvar hpname "duy-05")

(command ".bhatch")

Nhưng sao nó không chọn được hatchname cũng như không hiển thị được hộp thoại của lệnh bhatch. bác nào biết xin chỉ giúp.

2 dòng lệnh của bạn, dòng trên sai cú pháp, dòng dưới không tương đương với mã lệnh của menu.

 

Dòng trên cần sửa lại thành: (setvar "hpname" "duy-05"). Dòng dưới bó tay, vì không có mã lệnh lisp tương đương (do cấu trúc của lisp).

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
2 dòng lệnh của bạn, dòng trên sai cú pháp, dòng dưới không tương đương với mã lệnh của menu.

 

Dòng trên cần sửa lại thành: (setvar "hpname" "duy-05"). Dòng dưới bó tay, vì không có mã lệnh lisp tương đương (do cấu trúc của lisp).

 

Cám ơn! Vậy là không có cách nào gọi lệnh bhatch từ mã lisp sao?

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

×