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òn thắc mắc cái này nữa mà anh, anh ketxu chưa trả lời em dòng đỏ đậm mà :)

Srr bạn, mình đi công trường đâm ra cũng không có thời gian đọc, trả lời ... ^^

- Với các lệnh khác cũng tương tự, CAD mặc định là cứ thêm ' vào là thành lệnh transparent, nhưng có thực hiện được hay không thì lại là chuyện khác ^^

- Trong lisp của bác Tuệ, khi đánh 'cen nó sẽ gọi Thủ tục c:cen, trong thủ tục này nó lại gọi đến hàm centre, hàm này trả về 1 giá trị cen ở cuối cùng đó, không thực hiện command nào cả => Ok

 

(P/S : Ket hiểu nông cạn là thế, có thể thực tế thì khác, chẳng biết được nữa ^^)

  • 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

Srr bạn, mình đi công trường đâm ra cũng không có thời gian đọc, trả lời ... ^^

- Với các lệnh khác cũng tương tự, CAD mặc định là cứ thêm ' vào là thành lệnh transparent, nhưng có thực hiện được hay không thì lại là chuyện khác ^^

- Trong lisp của bác Tuệ, khi đánh 'cen nó sẽ gọi Thủ tục c:cen, trong thủ tục này nó lại gọi đến hàm centre, hàm này trả về 1 giá trị cen ở cuối cùng đó, không thực hiện command nào cả => Ok

 

(P/S : Ket hiểu nông cạn là thế, có thể thực tế thì khác, chẳng biết được nữa ^^)

Đây là yêu cầu của pdle ở trên. Trong 1 lệnh khác gọi hộp thoại OSNAP bằng cách nhấn 'OS

(defun os ()(command "osnap"))

  • 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ào các bạn. Mình có một câu hỏi muốn nhờ các bạn. Mình muốn dùng hàm ssget để chọn các đối tượng có đặc tính như sau: đối tượng là LWPOLYLINE hoặc đối tượng LINE(có kiểu Linetype là center hoặc center2 không phải HIDDEN hoặc HIDDEN2) hoặc đối tượng là các DIMENSION. Rất mong sự giúp đỡ của các bạn. Thanks.

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

Đây là yêu cầu của pdle ở trên. Trong 1 lệnh khác gọi hộp thoại OSNAP bằng cách nhấn 'OS

(defun os ()(command "osnap"))

Giờ e mới đọc Reply này.Khác với các lệnh khác, osnap cũng như các lệnh zoom ( hoặc 1 số lệnh nào nào #), bản thân nó đã là 1 transparent command

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ó một vấn đề sau:

Cho một danh sách. Hãy viết một hàm loại bỏ bất cứ phần tử lặp lại nào đó của một phần tử phía trước. Chẳng hạn, cho danh sách: ( 1 4 5 6 (1 2) 5 7 8 (1 2)) thì kết quả cho ra của hàm này sẽ là: (1 4 5 6 (1 2) 7 8).

 

Sau đây là hàm em tự viết, không biết ai có cách nào hay hơn không, cho em tham khảo với ạ :

 

(defun sel(lis / listran i ent lisf j )
(setq i 0)
(while (< i (length lis))
	(setq ent (nth i lis) listran (cdr (member ent lis))
	      listran(vl-remove ent listran) lisf nil j 0 ) 
	(repeat i
		(setq lisf (append lisf (list (nth j lis)) ) j (+ 1 j))
	)
	(setq lis (append lisf (list ent) listran) i(+ 1 i))
)
lis
)

 

Đánh giá kết quả:

Chưa xử lý với danh sách có các phần tử dạng (0 . "LINE") hay (10 2 . 5) vì hàm lengthappend không hàm việc với những phần tử như vậy

 

Mong mọi người cho ý kiế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 thử đệ quy xem sao :

 

(defun Remove_dup ( lst )(if lst (cons (car lst) (Remove_dup (vl-remove (car lst) (cdr lst))))))

  • 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

Bạn thử đệ quy xem sao :

 

(defun Remove_dup ( lst )(if lst (cons (car lst) (Remove_dup (vl-remove (car lst) (cdr lst))))))

 

Chuẩn quá! với mọi kiểu phần tử của danh sách đều xử lý êm đẹ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

Chào các bạn. Mình có một câu hỏi muốn nhờ các bạn. Mình muốn dùng hàm ssget để chọn các đối tượng có đặc tính như sau: đối tượng là LWPOLYLINE hoặc đối tượng LINE(có kiểu Linetype là center hoặc center2 không phải HIDDEN hoặc HIDDEN2) hoặc đối tượng là các DIMENSION. Rất mong sự giúp đỡ của các bạn. Thanks.

Không có ai giúp mình câu nà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

Chào các bạn. Mình có một câu hỏi muốn nhờ các bạn. Mình muốn dùng hàm ssget để chọn các đối tượng có đặc tính như sau: đối tượng là LWPOLYLINE hoặc đối tượng LINE(có kiểu Linetype là center hoặc center2 không phải HIDDEN hoặc HIDDEN2) hoặc đối tượng là các DIMENSION. Rất mong sự giúp đỡ của các bạn. Thanks.

(ssget(list '(-4 . "<OR")'(-4 . "<AND")(cons 0 "LINE,LWPOLYLINE")(cons 6 "CENTER,CENTER2")'(-4 . "AND>")'(0 . "DIMENSION")'(-4 . "OR>")))

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

(ssget(list '(-4 . "<OR")'(-4 . "<AND")(cons 0 "LINE,LWPOLYLINE")(cons 6 "CENTER,CENTER2")'(-4 . "AND>")'(0 . "DIMENSION")'(-4 . "OR>")))

Cảm ơn Thaistreetz nhiều. Bạn đã hiểu nhầm ý của mình. Dạng đường Center hoặc Center2 chỉ là của LINE thôi. Mình đã viết được bằng cách dùng đoạn lisp sau:

(ssget '((-4 . "<OR")

(0 . "DIMENSION")

(0 . "LWPOLYLINE")

(-4 . "<AND")

(0 . "LINE")

(-4 . "<OR")

(6 . "CENTER")

(6 . "CENTER2")

(-4 . "OR>")

(-4 . "AND>")

(-4 . "OR>")

)

)

Thanks 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

(ssget(list '(-4 . "<OR")'(-4 . "<AND")(cons 0 "LINE,LWPOLYLINE")(cons 6 "CENTER,CENTER2")'(-4 . "AND>")'(0 . "DIMENSION")'(-4 . "OR>")))

Cho mình hỏi thêm một câu: Làm thế nào để chọn được tập hợp các LINE có khoản cách nhỏ hơn 50. Thanks.

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 hỏi thêm một câu: Làm thế nào để chọn được tập hợp các LINE có khoản cách nhỏ hơn 50. Thanks.

Đây là câu hỏi vô nghĩa bạn ạ, vì Khoảng cách là phải so với đâu đó. Nếu ý bạn là chiều dài nhỏ hơn 50 thì hãy iểm tra Line, nếu nó dài hơn 50 thì loại khỏi tập chọn, sau đó sssetfirst tập còn lạ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

Chào cả nhà!

Tue_NV cũng có 1 câu thắc mắc :

Trong Lisp có 1 hàm

(setcfg cfgname cfgval)

Trong Help có diễn giải là :

Writes application data to the AppData section of the acad*.cfg file

Ví dụ trong Help :

(setcfg "AppData/ArchStuff/WallThk" "8")

 

Tue_NV không hiểu là đường dẫn "AppData/ArchStuff/WallThk" được tìm ở đâu? Dùng công cụ Search cũng không tìm thấy? Theo Tue_NV hiểu thì file acad*.cfg là file config của ACAD, nhưng sao search file acad*.cfg không thấy chi cả? Hàm setcfg được hiểu chính xác như thế nào?

 

Mong sự giúp đỡ của các bác.

Tue_NV xin cảm ơn

Chúc cả nhà một buổi sáng tốt 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

Chào cả nhà!

Tue_NV cũng có 1 câu thắc mắc :

Trong Lisp có 1 hàm

(setcfg cfgname cfgval)

Trong Help có diễn giải là :

Writes application data to the AppData section of the acad*.cfg file

Ví dụ trong Help :

(setcfg "AppData/ArchStuff/WallThk" "8")

 

Tue_NV không hiểu là đường dẫn "AppData/ArchStuff/WallThk" được tìm ở đâu? Dùng công cụ Search cũng không tìm thấy? Theo Tue_NV hiểu thì file acad*.cfg là file config của ACAD, nhưng sao search file acad*.cfg không thấy chi cả? Hàm setcfg được hiểu chính xác như thế nào?

 

Mong sự giúp đỡ của các bác.

Tue_NV xin cảm ơn

Chúc cả nhà một buổi sáng tốt lành

File acad(xxxx).cfg được lưu trong thư mục cache application của User

C:\Users\xxx\AppData\Local\Autodesk\AutoCAD xxx\Rxxx\enu\acadxxx.cfg

Đoạn ví dụ trên của bác sẽ ghi dòng :

[AppData/ArchStuff]

WallThk=8

vào file cfg này.

Tuy nhiên file cfg chỉ cập nhật sau khi đóng cad, có nghĩa là các phiên làm việc sau bác có thể truy xuất dữ liệu này bằng hàm getcfg bình thường. Chúc bác buổi sáng tốt lành

  • 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

Em vào Tools > Optins > files > Help and Miscellaneous File Names > Configuration File thì nó hiện ra đường dẫn C: \............................acad2007.cfg

Vào ổ C để theo đường dẫn , nó hiện ra bảng có nội dung:

Phạt cảnh cáo

Bạn đang cố gắng mở một tập tin thuộc loại "Microsoft Office Outlook Cấu hình File '(. Cfg)

Những tập tin này được sử dụng bởi hệ điều hành và các chương trình khác nhau. Chỉnh sửa hoặc thay đổi họ có thể làm hỏng hệ thống của bạn.

Nếu bạn vẫn muốn mở file, click Open With, nếu không, hãy nhấp Cancel.

 

Chẳng hiểu ra làm sao cả???

 

pht.jpg

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ào cả nhà!

Tue_NV cũng có 1 câu thắc mắc :

Trong Lisp có 1 hàm

(setcfg cfgname cfgval)

Trong Help có diễn giải là :

Writes application data to the AppData section of the acad*.cfg file

Ví dụ trong Help :

(setcfg "AppData/ArchStuff/WallThk" "8")

 

Tue_NV không hiểu là đường dẫn "AppData/ArchStuff/WallThk" được tìm ở đâu? Dùng công cụ Search cũng không tìm thấy? Theo Tue_NV hiểu thì file acad*.cfg là file config của ACAD, nhưng sao search file acad*.cfg không thấy chi cả? Hàm setcfg được hiểu chính xác như thế nào?

 

Mong sự giúp đỡ của các bác.

Tue_NV xin cảm ơn

Chúc cả nhà một buổi sáng tốt lành

File acad(xxxx).cfg được lưu trong thư mục cache application của User

C:\Users\xxx\AppData\Local\Autodesk\AutoCAD xxx\Rxxx\enu\acadxxx.cfg

Đoạn ví dụ trên của bác sẽ ghi dòng :

[AppData/ArchStuff]

WallThk=8

vào file cfg này.

Tuy nhiên file cfg chỉ cập nhật sau khi đóng cad, có nghĩa là các phiên làm việc sau bác có thể truy xuất dữ liệu này bằng hàm getcfg bình thường. Chúc bác buổi sáng tốt lành

Cảm ơn Ketxu.

Nhưng sao mình vào đường dẫn lại không có file acad2008.cfg nhỉ? Mặc dù setcfg và getcfg đều được.

Tue_NV đã đi theo đường dẫn trong Tools > Options > files > Help and Miscellaneous File Names > Configuration File thì nó hiện ra đường dẫn C:\Documents and Settings\XPPRESP3\Application Data\Autodesk\AutoCAD2008\R17.1\enu\acad2008.cfg

nhưng không tìm thấy acad2008.cfg và sử dụng công cụ Search của Win cũng không thấy???

cfg.jpg

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 Ketxu.

Nhưng sao mình vào đường dẫn lại không có file acad2008.cfg nhỉ? Mặc dù setcfg và getcfg đều được.

Tue_NV đã đi theo đường dẫn trong Tools > Options > files > Help and Miscellaneous File Names > Configuration File thì nó hiện ra đường dẫn C:\Documents and Settings\XPPRESP3\Application Data\Autodesk\AutoCAD2008\R17.1\enu\acad2008.cfg

nhưng không tìm thấy acad2008.cfg và sử dụng công cụ Search của Win cũng không thấy???

cfg.jpg

Hê hê do Bác dùng win XP còn ketxu dùng win vista nên đường dẫn có khác nhau tí chút.

Bác tham khảo thêm bài này :http://www.cadviet.com/forum/index.php?showtopic=1024

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 vào Tools > Optins > files > Help and Miscellaneous File Names > Configuration File thì nó hiện ra đường dẫn C: \............................acad2007.cfg

Vào ổ C để theo đường dẫn , nó hiện ra bảng có nội dung:

Phạt cảnh cáo

Bạn đang cố gắng mở một tập tin thuộc loại "Microsoft Office Outlook Cấu hình File '(. Cfg)

Những tập tin này được sử dụng bởi hệ điều hành và các chương trình khác nhau. Chỉnh sửa hoặc thay đổi họ có thể làm hỏng hệ thống của bạn.

Nếu bạn vẫn muốn mở file, click Open With, nếu không, hãy nhấp Cancel.

 

Chẳng hiểu ra làm sao cả???

 

pht.jpg

Em dùng Win7 nó lại ra thông báo trê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ảm ơn Ketxu.

Nhưng sao mình vào đường dẫn lại không có file acad2008.cfg nhỉ? Mặc dù setcfg và getcfg đều được.

Tue_NV đã đi theo đường dẫn trong Tools > Options > files > Help and Miscellaneous File Names > Configuration File thì nó hiện ra đường dẫn C:\Documents and Settings\XPPRESP3\Application Data\Autodesk\AutoCAD2008\R17.1\enu\acad2008.cfg

nhưng không tìm thấy acad2008.cfg và sử dụng công cụ Search của Win cũng không thấy???

- Bác đã chắc chắn là đã thoát CAD ra chưa ạ ^^

Sau khi thoát CAD bác dùng thằng này, tìm trong ổ C, loại file *.cfg, từ khóa là từ khóa setcfg bác vừa dùng

Astrogrep

Em dùng Win7 nó lại ra thông báo trên???

Ồ, nó cảnh báo thì cứ cảnh báo, việc ta mở lên bằng Notepad để đọc thì ta cứ đọc thôi ^^

  • 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

- Bác đã chắc chắn là đã thoát CAD ra chưa ạ ^^

Sau khi thoát CAD bác dùng thằng này, tìm trong ổ C, loại file *.cfg, từ khóa là từ khóa setcfg bác vừa dùng

Astrogrep

 

Ồ, nó cảnh báo thì cứ cảnh báo, việc ta mở lên bằng Notepad để đọc thì ta cứ đọc thôi ^^

Ồ, Tue_NV đã thoát CAD ra rồi bạn ạ. Nhưng vẫn không tìm thấy file acad2008.cfg? Không lẽ Tue_NV sử dụng WINXP? Mặc dù setcfg hay getcfg đều được? Các bác có thể gửi cho Tue_NV xem file *.cfg xem mặt mũi nó như thế nào không? Tò mò quá :lol:

 

Tue_NV còn có 1 câu hỏi nữa, chưa biết viết Lisp như thế nào?

Đó là chế độ ghi đè Text. Khi gõ lệnh dđedit -> Pick vào Text -> Bạn pick chuột phải -> Chọn editor settings -> Chọn Opapue Background -> Thì lúc này bạn viết Text đến đâu -> Chữ sẽ đè lên đối tượng mà nó đi qua.

Đọc trong Help, cũng không thấy biến hệ thống quy định cái này?

 

Rất mong các bác chỉ giúp

Tue_NV 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

Bác mà search như e RL bên trên chắc chắn là lôi được nó ra mà.Không thì bác Teamview e lôi nó ra bác xem mặt mũi nó ^^

Còn đây là của em, chẳng có gì cả :

; Configuration for AutoCAD 2008 () Microsoft Windows

; C:\Users\Laptop Thuy Duong\AppData\Local\Autodesk\AutoCAD 2008\R17.1\enu\acad2008.cfg created on 5/30/2011 at 6:27:42

 

[AppData/all2plin]

111=0

 

[AppData/ArchStuff]

WallThk=8

TUngtestne=12345

 

[Version]

Platform=Microsoft Windows

FileVersion=8

ExecutableDate&Time=junkjunkjunkjunk

 

[Digitizer/Driver]

MenuName=Current System Pointing Device

PathName=internal

Configured=1

 

[Editor]

Link=0

 

[Menu]

T_Menu=0

 

- Còn opaque background, có lẽ CAD lưu ở đâu đó, chứ e so sánh System var trước và sau khi set Opaque không thấy có thằng nào khả nghi cả, hoặc chưa thấy ^^

  • 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

Em có hai đối tượng polyline kín. Làm sao để biết vị trí tương đối của chúng (giao nhau, rời nhau, bao 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

Em có hai đối tượng polyline kín. Làm sao để biết vị trí tương đối của chúng (giao nhau, rời nhau, bao nhau) ?

Hì vấn đề này hơi loằng ngoằng à.

1. Giao nhau: dùng hàm vla-intersectwith với acextendnone kết quả false là không giao nhau.

2. rời nhau bao nhiêu: Lấy đỉnh của polyline1 sét với đỉnh của polyline2 lấy trường hợp nhỏ 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

Hì vấn đề này hơi loằng ngoằng à.

1. Giao nhau: dùng hàm vla-intersectwith với acextendnone kết quả false là không giao nhau.

2. rời nhau bao nhiêu: Lấy đỉnh của polyline1 sét với đỉnh của polyline2 lấy trường hợp nhỏ nhất.

Thế làm sao để biết là một đối tượng có nằm trong cái kia không, trong trường hợp chúng rời 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

Thế làm sao để biết là một đối tượng có nằm trong cái kia không, trong trường hợp chúng rời nhau ạ ?

Bạn tham khảo bài này: http://www.cadviet.com/forum/index.php?showtopic=34907

  • 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


×