Đến nội dung


Hình ảnh
5 stars - based on 24598 reviews
* * * - - 3 Bình chọn

Hướng dẫn lập trình Lisp


  • Please log in to reply
493 replies to this topic

#21 tulipden87

tulipden87

    biết vẽ line

  • Members
  • PipPip
  • 25 Bài viết
Điểm đánh giá: 27 (tàm tạm)

Đã gửi 02 June 2008 - 11:55 PM

Em cảm ơn bác.
Bây giờ trong file .dwg của em chỉ chứa một đoạn thẳng. Ý của em là muốn dùng lệnh offset để tạo thêm một đoạn thẳng nữa nhưng chương trình sẽ tự chọn đoạn thằng đã có sẵn kia mà ko bắt người sử dụng phải chọn nó, tức là lệnh offset sẽ chạy một mạch mà ko yêu cầu người sử dụng phải động chân động tay thêm.
Mong các bác giúp đỡ.
  • 0

#22 ssg

ssg

    biết lệnh adcenter

  • Vip
  • PipPipPipPipPipPipPip
  • 1228 Bài viết
Điểm đánh giá: 1088 (rất tốt)

Đã gửi 03 June 2008 - 07:02 AM

Em cảm ơn bác.
Bây giờ trong file .dwg của em chỉ chứa một đoạn thẳng. Ý của em là muốn dùng lệnh offset để tạo thêm một đoạn thẳng nữa nhưng chương trình sẽ tự chọn đoạn thằng đã có sẵn kia mà ko bắt người sử dụng phải chọn nó, tức là lệnh offset sẽ chạy một mạch mà ko yêu cầu người sử dụng phải động chân động tay thêm.
Mong các bác giúp đỡ.

Lệnh AO -> lisp sẽ chạy "một mạch". Còn việc có đúng ý user hay không thì người lập trình không chịu trách nhiệm!
(defun C:AO( / ss e);;;AutoOffset!
(setq
ss (ssget "X" '((0 . "LINE")))
e (ssname ss 0)
)
(command "offset" 10 e (list 0 0 0) "")
)

  • 1

#23 Snowman

Snowman

    biết lệnh mirror

  • Members
  • PipPipPip
  • 155 Bài viết
Điểm đánh giá: 90 (tàm tạm)

Đã gửi 20 July 2008 - 10:36 PM

Lệnh AO -> lisp sẽ chạy "một mạch". Còn việc có đúng ý user hay không thì người lập trình không chịu trách nhiệm!

(defun C:AO( / ss e);;;AutoOffset!
(setq
ss (ssget "X" '((0 . "LINE")))
e (ssname ss 0)
)
(command "offset" 10 e (list 0 0 0) "")
)

Bác SSg làm thế này là hại người ta rồi còn gì nữa :rolleyes: :gun:
Người ta chưa hiểu biết nhiều mà bác cho người ta một công cụ "chạy một mạch mà không cần động tay động chân" (chắc hắn cũng không hiểu công cụ đó chạy một mạch như thế nào :lol: ) vừa làm cho họ ...lười lao động, vừa làm cho họ ...lười suy nghĩ.
@ tulipden87:
Không có một lisp nào chạy một mạch mà không cần động chân động tay đâu. Chí ít ra là bạn cũng phải ...động não xem nó sẽ làm gì, làm như thế nào chứ
Lisp thực ra cũng chỉ làm thay cho bạn những động tác mà bạn phải click, type, di chuột, ... còn thuật toán của lisp chính là suy nghĩ, tính toán của bạn để giải quyết 1 vấn đề. Nếu bạn lười động tay động chân (ví dụ vậy :gun: ) thì lisp của bạn viết ra cũng không thể làm việc "chăm chỉ" thay bạn được.
Ý mình là nếu bạn "động tay động chân, động não" nhiều, bạn sẽ có được nhiều kinh nghiệm, nhiều cách tư duy mới, sáng tạo và từ đó mới có được những thuật toán lisp "chạy một mạch" không cần động tay động chân được :gun:
  • 0

. - ' * ' - .. - ... "Sống trong đời sống cần có một tấm lòng..." . - ' * ' - .. -
-----------------------------------------------------------------------------------

Hình đã gửi Hình đã gửi


#24 ssg

ssg

    biết lệnh adcenter

  • Vip
  • PipPipPipPipPipPipPip
  • 1228 Bài viết
Điểm đánh giá: 1088 (rất tốt)

Đã gửi 21 July 2008 - 07:12 AM

Bác SSg làm thế này là hại người ta rồi còn gì nữa <_< :rolleyes:
Người ta chưa hiểu biết nhiều mà bác cho người ta một công cụ "chạy một mạch mà không cần động tay động chân" (chắc hắn cũng không hiểu công cụ đó chạy một mạch như thế nào :lol: ) vừa làm cho họ ...lười lao động, vừa làm cho họ ...lười suy nghĩ.
@ tulipden87:
Không có một lisp nào chạy một mạch mà không cần động chân động tay đâu. Chí ít ra là bạn cũng phải ...động não xem nó sẽ làm gì, làm như thế nào chứ
Lisp thực ra cũng chỉ làm thay cho bạn những động tác mà bạn phải click, type, di chuột, ... còn thuật toán của lisp chính là suy nghĩ, tính toán của bạn để giải quyết 1 vấn đề. Nếu bạn lười động tay động chân (ví dụ vậy :gun: ) thì lisp của bạn viết ra cũng không thể làm việc "chăm chỉ" thay bạn được.
Ý mình là nếu bạn "động tay động chân, động não" nhiều, bạn sẽ có được nhiều kinh nghiệm, nhiều cách tư duy mới, sáng tạo và từ đó mới có được những thuật toán lisp "chạy một mạch" không cần động tay động chân được :gun:


Ssg cũng có cùng quan điểm với bạn, nhưng bạn cho rằng ssg "hại người ta" có lẽ không xác đáng.
Bạn đọc lại bài trả lời trước của ssg sẽ thấy:

Xét về logic, giả sử có tính năng "tự chọn" như bạn nói thì khi chạy chương trình, nó "thích" chọn đối tượng nào để thực thi lệnh cũng được à? Thật ra thì có thể lập trình như vậy nếu bạn muốn, chỉ e rằng các đối tượng được chọn không đúng ý của bạn lẫn của user!
Tóm lại, không có chuyện "tự chọn" đối tượng. Hoặc là bạn chọn, hoặc là user chọn.


Đã nói vậy, nhưng có thể bạn tulip chưa hiểu nhiều về lisp và vẫn chưa thông. Đoạn lisp mình post là một ví dụ phản diện, ai chạy lisp trên cũng thấy rõ cái bất hợp lý của nó và tự khắc sẽ hiểu ra vấn đề.
  • 0

#25 ngmtuong

ngmtuong

    biết zoom

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

Đã gửi 24 August 2008 - 08:25 PM

chào các bác!
em muốn hỏi dùng lisp để vẽ hình chữ nhật có bo tròn các đỉnh thì viết thế nào?
em nghĩ mãi nhưng chưa viết dc
thanks!
  • 0

#26 ssg

ssg

    biết lệnh adcenter

  • Vip
  • PipPipPipPipPipPipPip
  • 1228 Bài viết
Điểm đánh giá: 1088 (rất tốt)

Đã gửi 25 August 2008 - 07:21 AM

chào các bác!
em muốn hỏi dùng lisp để vẽ hình chữ nhật có bo tròn các đỉnh thì viết thế nào?
em nghĩ mãi nhưng chưa viết dc
thanks!


(command "rectangle" "f" (getreal "\nRadius:") pause)
  • 0

#27 tiger99

tiger99

    biết vẽ line

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

Đã gửi 07 December 2008 - 09:34 AM

Tự tay mình lập một chương trình Lisp có gì khác so với nhờ ai đó làm? Chưa cần xét kết quả, điểm khác nhau rất cơ bản là bạn sẽ có được cái cảm giác rất là khoái chí (không thể diễn tả) khi chạy thử chương trình.
Ssg lập topic này không ngoài mục đích tạo điều kiện cho các bạn tự mình tìm hiểu và khám phá cái cảm giác "khoái chí không thể diễn tả" nói trên.
Với tinh thần "Share is Receive", ssg cũng mong các bạn đã thành thạo Lisp quan tâm giúp đỡ các bạn mới để cộng đồng Lisp của CadViet ngày càng đông vui và tạo được nhiều chương trình hữu ích.
Để bắt đầu, ssg post lại một bài viết cũ, nhưng có lẽ vẫn còn mới đối với một số bạn. Hy vọng sẽ giúp được chút gì đó cho các bạn mới tiếp cận với Lisp:

http://www.cadviet.c...les/Relax_1.zip

Download, giải nén rồi đọc file *.doc

Hay quá đi thôi cách này học thực tế ví dụ sinh động dễ hiểu cám ơn bác ssg nhé.Bác tiếp tục phát huy nhé.
  • 0

#28 undo

undo

    biết pan

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

Đã gửi 23 December 2008 - 03:42 PM

Tự tay mình lập một chương trình Lisp có gì khác so với nhờ ai đó làm? Chưa cần xét kết quả, điểm khác nhau rất cơ bản là bạn sẽ có được cái cảm giác rất là khoái chí (không thể diễn tả) khi chạy thử chương trình.
Ssg lập topic này không ngoài mục đích tạo điều kiện cho các bạn tự mình tìm hiểu và khám phá cái cảm giác "khoái chí không thể diễn tả" nói trên.
Với tinh thần "Share is Receive", ssg cũng mong các bạn đã thành thạo Lisp quan tâm giúp đỡ các bạn mới để cộng đồng Lisp của CadViet ngày càng đông vui và tạo được nhiều chương trình hữu ích.
Để bắt đầu, ssg post lại một bài viết cũ, nhưng có lẽ vẫn còn mới đối với một số bạn. Hy vọng sẽ giúp được chút gì đó cho các bạn mới tiếp cận với Lisp:

http://www.cadviet.c...les/Relax_1.zip

Download, giải nén rồi đọc file *.doc

em vừa đọc xong cái file của pác up lên, em thấy bài viết này hay, nó làm cho một người chưa biết gì về lish như em được mở rộng tầm mắt, nhưng quả thật với pác...em còn mơ hồ lắm...giống như đi giữa sương mù trời đà lạt ấy! Pác đã giúp, nay em tham lam xin pác đây hoặc các pác trong diễn đàn, ai biết tên sách hay file nào nói đầy đủ về lish (đầy đủ tức là từ A cho tới Zách đấy các pác à), thì up lên cho mọi người cùng học hỏi.... cám ơn pác đây nhiều nhiều !!!
  • 0

#29 phamthanhbinh

phamthanhbinh

    biết lệnh adcenter

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

Đã gửi 23 December 2008 - 04:02 PM

em vừa đọc xong cái file của pác up lên, em thấy bài viết này hay, nó làm cho một người chưa biết gì về lish như em được mở rộng tầm mắt, nhưng quả thật với pác...em còn mơ hồ lắm...giống như đi giữa sương mù trời đà lạt ấy! Pác đã giúp, nay em tham lam xin pác đây hoặc các pác trong diễn đàn, ai biết tên sách hay file nào nói đầy đủ về lish (đầy đủ tức là từ A cho tới Zách đấy các pác à), thì up lên cho mọi người cùng học hỏi.... cám ơn pác đây nhiều nhiều !!!


Sách và tài liệu về lisp thì khá nhiều. Đây là một trong số đó mà tôi đã đọc và cảm thấy phù hợp với mình. Bạn có thể tham khảo. Trong tài liệu này tôi tự dịch ra tiếng Việt để học nên có thể có nhiều sai sót do trình độ còn kém. Bạn có thể tham khảo bản gốc bằng tiếng Anh mà tôi vẫn giữ nguyên trong đó. Chỗ nào bạn không rõ có thể post lên để cùng trao đổi nhé.
http://www.cadviet.c...sp_tu_hoc_1.doc
  • 5
Chúc các quý Anh trên diễn đàn luôn khỏe, đẻ thêm được nhiều thứ để mót.

#30 undo

undo

    biết pan

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

Đã gửi 23 December 2008 - 04:26 PM

Sách và tài liệu về lisp thì khá nhiều. Đây là một trong số đó mà tôi đã đọc và cảm thấy phù hợp với mình. Bạn có thể tham khảo. Trong tài liệu này tôi tự dịch ra tiếng Việt để học nên có thể có nhiều sai sót do trình độ còn kém. Bạn có thể tham khảo bản gốc bằng tiếng Anh mà tôi vẫn giữ nguyên trong đó. Chỗ nào bạn không rõ có thể post lên để cùng trao đổi nhé.
http://www.cadviet.c...sp_tu_hoc_1.doc


Em dow ve rồi pác à! :s_big: để tối nay về em luyện, em cảm ơn pác nhá, em mới nhờ mà đã có người giúp rồi, ôi!sống trên đời quý nhau cái tình người là thế. Bữa nào rảnh em với pác đi làm vài ve nhẩy !!! :cheers:
  • 0

#31 vminh_ct

vminh_ct

    biết lệnh stretch

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

Đã gửi 02 February 2009 - 11:17 PM

Bác ssp cho em hỏi đoạn code này có nghĩa như thế nào,các hàm if, not ,tblsearch có nghĩa là như thế nào???
(defun layer_style ()
(if (not (tblsearch "layer" "7TEXT_45" ))
(command "-layer" "new" "7TEXT_45" "color" 45 "7TEXT_45" ""))
(if (not (tblsearch "layer" "8THEP_1" ))
(command "-layer" "new" "8THEP_1" "color" 1 "8THEP_1" ""))
(if (not (tblsearch "layer" "1TIM_99" ))
(command "-layer" "new" "1TIM_99" "color" 99 "1TIM_99" "L" "DASHDOT" "1TIM_99" "")))
  • 0
" Sống trên đời cần có 1 tấm lòng,để gió mãi cuốn đi"

#32 nataca

nataca

    biết lệnh adcenter

  • Members
  • PipPipPipPipPipPipPip
  • 712 Bài viết
Điểm đánh giá: 553 (tốt)

Đã gửi 02 February 2009 - 11:42 PM

Bác ssp cho em hỏi đoạn code này có nghĩa như thế nào,các hàm if, not ,tblsearch có nghĩa là như thế nào???
(defun layer_style ()
(if (not (tblsearch "layer" "7TEXT_45" ))
(command "-layer" "new" "7TEXT_45" "color" 45 "7TEXT_45" ""))

Nghĩa cả đoạn lệnh này như sau:
-tblsearch là tìm tất cả các bảng, "layer" là bảng layer, "7TEXT_45" là tên layer -> tức là tìm layer "7TEXT_45" trong tất cả các layer. Nếu thấy thỏa mãn thì kết quả trả về "T" và nếu không tìm thấy thì kết quả trả về "nil"
-not là lấy phủ định lại kết quả vừa ra
- if là lệnh rẽ nhánh nếu đúng thì thực hiện lệnh (command "-layer" "new" "7TEXT_45" "color" 45 "7TEXT_45" "") còn nếu sai thì bỏ qua
=> Túm lại dịch đoạn này theo "văn học" như sau: tìm layer 7TEXT_45 trong số các layer trên bản vẽ, nếu không thấy ( (tblsearch "layer" "7TEXT_45" ) trả về nil và (not nil)=T ) thì thực hiện lệnh tạo mới layer 7TEXT_45 và gán cho nó màu số 45.
(if T ->(command "-layer" "new" "7TEXT_45" "color" 45 "7TEXT_45" "")
nil -> bỏ qua
)

  • 0

#33 vminh_ct

vminh_ct

    biết lệnh stretch

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

Đã gửi 03 February 2009 - 02:57 PM

Nghĩa cả đoạn lệnh này như sau:
-tblsearch là tìm tất cả các bảng, "layer" là bảng layer, "7TEXT_45" là tên layer -> tức là tìm layer "7TEXT_45" trong tất cả các layer. Nếu thấy thỏa mãn thì kết quả trả về "T" và nếu không tìm thấy thì kết quả trả về "nil"
-not là lấy phủ định lại kết quả vừa ra
- if là lệnh rẽ nhánh nếu đúng thì thực hiện lệnh (command "-layer" "new" "7TEXT_45" "color" 45 "7TEXT_45" "") còn nếu sai thì bỏ qua
=> Túm lại dịch đoạn này theo "văn học" như sau: tìm layer 7TEXT_45 trong số các layer trên bản vẽ, nếu không thấy ( (tblsearch "layer" "7TEXT_45" ) trả về nil và (not nil)=T ) thì thực hiện lệnh tạo mới layer 7TEXT_45 và gán cho nó màu số 45.
(if T ->(command "-layer" "new" "7TEXT_45" "color" 45 "7TEXT_45" "")
nil -> bỏ qua
)

hi hi, mình cũng bắt đầu lơ tơ mơ hiểu dần rồi,mong các bro chỉ trỏ nhiều hơn,thanks nataca nhé.
  • 0
" Sống trên đời cần có 1 tấm lòng,để gió mãi cuốn đi"

#34 vminh_ct

vminh_ct

    biết lệnh stretch

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

Đã gửi 03 February 2009 - 04:09 PM

nataca ơi cho mình hỏi mình viết lại đoạn lisp này
(defun layer_style ()
(if (not (tblsearch "layer" "1text_23" ))
(command "-layer" "new" "1text_23" "color" 1 "1text_23" "")))
appload được rồi mà khi bật hộp thoại layer properties manager sao trong hộp thoại không tạo được layer 1text_23 với color là 1 được nhỉ.
  • 0
" Sống trên đời cần có 1 tấm lòng,để gió mãi cuốn đi"

#35 nataca

nataca

    biết lệnh adcenter

  • Members
  • PipPipPipPipPipPipPip
  • 712 Bài viết
Điểm đánh giá: 553 (tốt)

Đã gửi 03 February 2009 - 04:28 PM

nataca ơi cho mình hỏi mình viết lại đoạn lisp này
(defun layer_style ()
(if (not (tblsearch "layer" "1text_23" ))
(command "-layer" "new" "1text_23" "color" 1 "1text_23" "")))
appload được rồi mà khi bật hộp thoại layer properties manager sao trong hộp thoại không tạo được layer 1text_23 với color là 1 được nhỉ.

- Một là bỏ hàm defun đi, chỉ để :
(if (not (tblsearch "layer" "1text_23" ))
(command "-layer" "new" "1text_23" "color" 1 "1text_23" ""))

- Hai là để nguyên nhưng khi ap xong phải đánh dòng lệnh (layer_style)
- Ba là đổi (defun layer_style () thành (defun C:layer_style () sau đó đánh lệnh layer_style
=> Đoạn lisp bạn làm có ý nghĩa là tạo ra hàm con với tên hàm là layer_style . Nhưng để hàm con này chạy bạn phải thêm C: trước tên hàm để chuyển tên hàm đó thành lệnh đánh trên dòng command. Còn nếu bạn muốn chỉ cần ap lisp trên vào là tự động chạy (tức là tạo ra layer 1text_23 và gán màu 1) thì bạn bỏ dòng (defun layer_style () và bỏ dấu ) cuối cùng đi.
  • 0

#36 vminh_ct

vminh_ct

    biết lệnh stretch

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

Đã gửi 03 February 2009 - 10:09 PM

hi hi, 1 câu hỏi mà có 3 đáp án được đưa ra,đáp án nào cũng đúng,xin phép cho nataca 9,5 nhé,thanks ,có gì lai xin được thỉnh giáo
  • 0
" Sống trên đời cần có 1 tấm lòng,để gió mãi cuốn đi"

#37 nguyenkhoadung98

nguyenkhoadung98

    biết vẽ pline

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

Đã gửi 19 February 2009 - 09:28 AM

Em dow ve rồi pác à! :cheers: để tối nay về em luyện, em cảm ơn pác nhá, em mới nhờ mà đã có người giúp rồi, ôi!sống trên đời quý nhau cái tình người là thế. Bữa nào rảnh em với pác đi làm vài ve nhẩy !!! :cheers:

hic sao em kô down đc vậy bác ơi, nhờ bác nào up lại cho e với :s_big:
  • 0

#38 tuan_thietkedien

tuan_thietkedien

    biết lệnh mirror

  • Members
  • PipPipPip
  • 153 Bài viết
Điểm đánh giá: 15 (tàm tạm)

Đã gửi 28 February 2009 - 11:59 AM

Xin các bác pro chỉ giáo nếu mình sử dụng SSget thì mình sẽ chọn được 1 tập hợp đủ thứ như Line, Text, Circle,... Vậy mình sử dụng vòng lặp thế nào để mình xét từng thằng Line, Text, Circle và tiếp đó là xét từng thằng con của nó như Color Line, Color Text, Color Circle,...
Xin cám ơn rất nhiều.
  • 0

#39 phamthanhbinh

phamthanhbinh

    biết lệnh adcenter

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

Đã gửi 28 February 2009 - 02:20 PM

Xin các bác pro chỉ giáo nếu mình sử dụng SSget thì mình sẽ chọn được 1 tập hợp đủ thứ như Line, Text, Circle,... Vậy mình sử dụng vòng lặp thế nào để mình xét từng thằng Line, Text, Circle và tiếp đó là xét từng thằng con của nó như Color Line, Color Text, Color Circle,...
Xin cám ơn rất nhiều.

Chào bạn Tuan_thietkedien,
Chưa rõ ý bạn hỏi lắm.
1/- Nếu bạn muốn chọn tập hợp các line, Text, circle, arc .... riêng rẽ thì bạn sử dụng lệnh (ssget "x" (filter list)) trong đó filter list là một association list trong list các mã dxf của các đối tượng bạn chọn. Ví dụ : hàm (ssget "x" '( 0. "LINE")) sẽ cho bạn tất cả các line có trên bản vẽ.
2/- Nếu bạn muốn tách riêng các line, text, circle, arc,... có trong một tập hợp các đối tượng đã có để xử lý tiếp thì bạn có thể sử dụng các hàm điếu kiện như if, while, ... Ví dụ bạn muốn tách các line trong một tập hợp các đối tượng có sẵn ss chẳng hạn, sử dụng hàm while như sau: (while (= (cdr (assoc 0 (entget (ssname ss i)))) "LINE") (....................) (setq i (1+ i))) trong đó (....) là hàm mà bạn định dùng để xử lý. Và tất nhiên trước khi dùng hàm while bạn phải xác định biến i (setq i 0)
3/- Để xử lý các thuộc tính của các đối tượng này bạn cần biết rõ các mã DXF của chúng. Điều này không hề dễ vì rất hay nhầm lẫn. Cách tốt nhất là bạn nên có một bảng mã DXF của các đối tượng này để tham khảo khi cần xử lý bạn ạ. Mình vẫn phải xài như vậy thôi chứ nhớ thì không xuể được. Ví dụ mã DXF thể hiện màu của line là 62, tuy nhiên nếu line có màu là bylayer thì mã này sẽ không xuất hiện trong list mã dxf của nó.
4/- Bạn nên thực hành dần dần từng bước một , từng nhiệm vụ cụ thể cho từng đối tượng cụ thể để hiểu rõ hơn các bước xử lý, đừng gộp cả lại sẽ rất khó thấy được vấn đề. Sau khi đã giải quyết tốt từng vấn đề hãy tiến hành ghép các nhiệm vụ với nhau bạn ạ.

Chúc bạn vui và thành công.
  • 0
Chúc các quý Anh trên diễn đàn luôn khỏe, đẻ thêm được nhiều thứ để mót.

#40 tuan_thietkedien

tuan_thietkedien

    biết lệnh mirror

  • Members
  • PipPipPip
  • 153 Bài viết
Điểm đánh giá: 15 (tàm tạm)

Đã gửi 28 February 2009 - 03:58 PM

Chào bạn Tuan_thietkedien,
Chưa rõ ý bạn hỏi lắm.
1/- Nếu bạn muốn chọn tập hợp các line, Text, circle, arc .... riêng rẽ thì bạn sử dụng lệnh (ssget "x" (filter list)) trong đó filter list là một association list trong list các mã dxf của các đối tượng bạn chọn. Ví dụ : hàm (ssget "x" '( 0. "LINE")) sẽ cho bạn tất cả các line có trên bản vẽ.
2/- Nếu bạn muốn tách riêng các line, text, circle, arc,... có trong một tập hợp các đối tượng đã có để xử lý tiếp thì bạn có thể sử dụng các hàm điếu kiện như if, while, ... Ví dụ bạn muốn tách các line trong một tập hợp các đối tượng có sẵn ss chẳng hạn, sử dụng hàm while như sau: (while (= (cdr (assoc 0 (entget (ssname ss i)))) "line") (....................) (setq i (1+ i))) trong đó (....) là hàm mà bạn định dùng để xử lý. Và tất nhiên trước khi dùng hàm while bạn phải xác định biến i (setq i 0)
3/- Để xử lý các thuộc tính của các đối tượng này bạn cần biết rõ các mã DXF của chúng. Điều này không hề dễ vì rất hay nhầm lẫn. Cách tốt nhất là bạn nên có một bảng mã DXF của các đối tượng này để tham khảo khi cần xử lý bạn ạ. Mình vẫn phải xài như vậy thôi chứ nhớ thì không xuể được. Ví dụ mã DXF thể hiện màu của line là 62, tuy nhiên nếu line có màu là bylayer thì mã này sẽ không xuất hiện trong list mã dxf của nó.
4/- Bạn nên thực hành dần dần từng bước một , từng nhiệm vụ cụ thể cho từng đối tượng cụ thể để hiểu rõ hơn các bước xử lý, đừng gộp cả lại sẽ rất khó thấy được vấn đề. Sau khi đã giải quyết tốt từng vấn đề hãy tiến hành ghép các nhiệm vụ với nhau bạn ạ.

Chúc bạn vui và thành công.


Chào bạn phamthanhbinh
Ý của mình như số 2 và 3 bạn đã nêu đó, số 1 mình đã hiểu cách lọc rồi còn cách lọc rắc rối hơn thì mình chưa làm được nên mới hỏi mọi người. Để mình thử làm theo hướng dẫn của bạn ha, nếu khó quá mình sẽ phải làm từ từ như ý số 4 bạn đã nêu.
Cám ơn thanhbinh nhiều nha.
Chúc bạn cuối tuần vui vẻ.
:undecided:
  • 0