Đến nội dung


Hình ảnh
* * * - - 17 Bình chọn

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


  • Please log in to reply
2854 replies to this topic

#701 ketxu

ketxu

    Copier - Paster - Editor

  • Moderator
  • PipPipPipPipPipPipPip
  • 5682 Bài viết
Điểm đánh giá: 2605 (tuyệt vời)

Đã gửi 24 May 2011 - 03:59 PM

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 ^^)
  • 1

Thành viên nhóm CadMagic.
Mời bạn ghé thăm facebook nhóm - Page viết lisp theo yêu cầu  :
CAD MAGIC


#702 Tue_NV

Tue_NV

    KS Võ Quang Tuệ

  • Moderator
  • PipPipPipPipPipPipPip
  • 4296 Bài viết
Điểm đánh giá: 3804 (đỉnh cao)

Đã gửi 24 May 2011 - 05:43 PM

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"))
  • 1

#703 damvinhduy

damvinhduy

    biết vẽ line

  • Members
  • PipPip
  • 27 Bài viết
Điểm đánh giá: 3 (bình thường)

Đã gửi 27 May 2011 - 11:15 PM

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.
  • 0

#704 ketxu

ketxu

    Copier - Paster - Editor

  • Moderator
  • PipPipPipPipPipPipPip
  • 5682 Bài viết
Điểm đánh giá: 2605 (tuyệt vời)

Đã gửi 27 May 2011 - 11:41 PM

Đâ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
  • 0

Thành viên nhóm CadMagic.
Mời bạn ghé thăm facebook nhóm - Page viết lisp theo yêu cầu  :
CAD MAGIC


#705 pdle

pdle

    biết lệnh mtext

  • Members
  • PipPipPipPip
  • 286 Bài viết
Điểm đánh giá: 124 (tàm tạm)

Đã gửi 27 May 2011 - 11:59 PM

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!
  • 0
Share your knowledge. It is a way to achieve immortality !

***

PS: Nếu bài viết của mình có ích, xin hãy "Bình chọn cho bài viết này" nhé :D

#706 ketxu

ketxu

    Copier - Paster - Editor

  • Moderator
  • PipPipPipPipPipPipPip
  • 5682 Bài viết
Điểm đánh giá: 2605 (tuyệt vời)

Đã gửi 28 May 2011 - 12:37 AM

Bạn thử đệ quy xem sao :

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

  • 1

Thành viên nhóm CadMagic.
Mời bạn ghé thăm facebook nhóm - Page viết lisp theo yêu cầu  :
CAD MAGIC


#707 pdle

pdle

    biết lệnh mtext

  • Members
  • PipPipPipPip
  • 286 Bài viết
Điểm đánh giá: 124 (tàm tạm)

Đã gửi 28 May 2011 - 01:36 AM

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 !
  • 0
Share your knowledge. It is a way to achieve immortality !

***

PS: Nếu bài viết của mình có ích, xin hãy "Bình chọn cho bài viết này" nhé :D

#708 damvinhduy

damvinhduy

    biết vẽ line

  • Members
  • PipPip
  • 27 Bài viết
Điểm đánh giá: 3 (bình thường)

Đã gửi 28 May 2011 - 09:36 PM

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 à?
  • 0

#709 Thaistreetz

Thaistreetz

    biết lệnh adcenter

  • Advance Member
  • PipPipPipPipPipPipPip
  • 903 Bài viết
Điểm đánh giá: 505 (tốt)

Đã gửi 29 May 2011 - 09:52 AM

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>")))
  • 0

Hình đã gửi
IN HIM, I TRUST. THE TRUST IN MY GOD


#710 damvinhduy

damvinhduy

    biết vẽ line

  • Members
  • PipPip
  • 27 Bài viết
Điểm đánh giá: 3 (bình thường)

Đã gửi 29 May 2011 - 04:43 PM

(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.
  • 0

#711 damvinhduy

damvinhduy

    biết vẽ line

  • Members
  • PipPip
  • 27 Bài viết
Điểm đánh giá: 3 (bình thường)

Đã gửi 29 May 2011 - 07:47 PM

(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.
  • 0

#712 ketxu

ketxu

    Copier - Paster - Editor

  • Moderator
  • PipPipPipPipPipPipPip
  • 5682 Bài viết
Điểm đánh giá: 2605 (tuyệt vời)

Đã gửi 29 May 2011 - 10:34 PM

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
  • 0

Thành viên nhóm CadMagic.
Mời bạn ghé thăm facebook nhóm - Page viết lisp theo yêu cầu  :
CAD MAGIC


#713 Tue_NV

Tue_NV

    KS Võ Quang Tuệ

  • Moderator
  • PipPipPipPipPipPipPip
  • 4296 Bài viết
Điểm đánh giá: 3804 (đỉnh cao)

Đã gửi 30 May 2011 - 05:24 AM

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
  • 0

#714 ketxu

ketxu

    Copier - Paster - Editor

  • Moderator
  • PipPipPipPipPipPipPip
  • 5682 Bài viết
Điểm đánh giá: 2605 (tuyệt vời)

Đã gửi 30 May 2011 - 06:36 AM

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
  • 1

Thành viên nhóm CadMagic.
Mời bạn ghé thăm facebook nhóm - Page viết lisp theo yêu cầu  :
CAD MAGIC


#715 hoan2182

hoan2182

    biết lệnh adcenter

  • Members
  • PipPipPipPipPipPipPip
  • 2646 Bài viết
Điểm đánh giá: 832 (rất tốt)

Đã gửi 30 May 2011 - 06:48 AM

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ả???

Hình đã gửi
  • 0

Gió đưa cây cải về trời

Rau răm ở lại chịu lời đắng cay...


#716 Tue_NV

Tue_NV

    KS Võ Quang Tuệ

  • Moderator
  • PipPipPipPipPipPipPip
  • 4296 Bài viết
Điểm đánh giá: 3804 (đỉnh cao)

Đã gửi 30 May 2011 - 07:10 AM


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???
Hình đã gửi
  • 0

#717 phamngoctukts

phamngoctukts

    biết lệnh adcenter

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 1107 Bài viết
Điểm đánh giá: 696 (tốt)

Đã gửi 30 May 2011 - 07:27 AM

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???
Hình đã gửi

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.c...?showtopic=1024
  • 0
Tất cả vì sự phát triển của diễn đàn ...
Cám ơn đừng nói lời suông mà hãy nhấn Hình đã gửi!

#718 hoan2182

hoan2182

    biết lệnh adcenter

  • Members
  • PipPipPipPipPipPipPip
  • 2646 Bài viết
Điểm đánh giá: 832 (rất tốt)

Đã gửi 30 May 2011 - 07:35 AM

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ả???

Hình đã gửi

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

Gió đưa cây cải về trời

Rau răm ở lại chịu lời đắng cay...


#719 ketxu

ketxu

    Copier - Paster - Editor

  • Moderator
  • PipPipPipPipPipPipPip
  • 5682 Bài viết
Điểm đánh giá: 2605 (tuyệt vời)

Đã gửi 30 May 2011 - 08:24 AM

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 ^^
  • 1

Thành viên nhóm CadMagic.
Mời bạn ghé thăm facebook nhóm - Page viết lisp theo yêu cầu  :
CAD MAGIC


#720 Tue_NV

Tue_NV

    KS Võ Quang Tuệ

  • Moderator
  • PipPipPipPipPipPipPip
  • 4296 Bài viết
Điểm đánh giá: 3804 (đỉnh cao)

Đã gửi 05 June 2011 - 06:34 AM

- 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
  • 0