Đến nội dung


Hình ảnh
- - - - -

[Hỏi] Lisp chọn tập hợp đối tượng gần nhất được sinh ra bởi 1 lênh.


  • Please log in to reply
28 replies to this topic

#1 Thaistreetz

Thaistreetz

    biết lệnh adcenter

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

Đã gửi 22 March 2012 - 11:08 PM

Rất nhiều lần mình có nhu cầu cần chọn được tập hợp đối tượng gần nhất được sinh ra bởi 1 lệnh nào đó (có thể là lệnh của cad hoặc lệnh của lisp) nên định viết 1 lisp chức năng như vây. nôm na thì nó cũng tương tự (ssget "L") nhưng ra cả đám chứ không chỉ 1 thằng ku cuối cùng.
Tuy nhiên hiện tại mình đang bí về cách thức giải quyết vấn đề đành phải lập topic xin các bác cao kiến để viết nó. Các bác cùng thảo luận nhé.

Edit: Đã xong. Các bạn có thể down lisp ở bài số #21 (trang 2)
  • 1

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


#2 Doan Van Ha

Doan Van Ha

    biết lệnh adcenter

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 5447 Bài viết
Điểm đánh giá: 2624 (tuyệt vời)

Đã gửi 23 March 2012 - 08:12 AM

Rất nhiều lần mình có nhu cầu cần chọn được tập hợp đối tượng gần nhất được sinh ra bởi 1 lệnh nào đó (có thể là lệnh của cad hoặc lệnh của lisp) nên định viết 1 lisp chức năng như vây. nôm na thì nó cũng tương tự (ssget "L") nhưng ra cả đám chứ không chỉ 1 thằng ku cuối cùng.
Tuy nhiên hiện tại mình đang bí về cách thức giải quyết vấn đề đành phải lập topic xin các bác cao kiến để viết nó. Các bác cùng thảo luận nhé.

Có phải tương tự cái này không?

;----- LÊy tËp hîp chän sau lÖnh Copy.
(defun C:HA(/ sst sss p1 p2)
(princ "\nChon cac doi tuong...")
(setq sst (ssget) sss (ssadd) ent (entlast))
(command "copy" sst "" (setq p1 (getpoint "\nDiem goc: ")) (getpoint p1 "\nDiem den: ")) ;tuong tu: Offset, Mirror...
(while (setq ent (entnext ent))
(setq sss (ssadd ent sss)))
(sssetfirst nil sss) ;co the delete dong nay.
sss)

  • 2

* Chỉ nên yêu cầu Lisp khi bạn làm việc đó mất cả ngày nhưng họ chỉ viết 1 giờ. Đừng nêu yêu cầu Lisp khi bạn chỉ làm 1 giờ nhưng bắt họ phải mất cả ngày.

* Nhờ viết lisp cũng như đi khám bệnh. Chỉ gởi căn cước và than sắp chết thì không bác sỹ nào cứu sống được.


#3 Thaistreetz

Thaistreetz

    biết lệnh adcenter

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

Đã gửi 23 March 2012 - 09:27 AM

Không. Bác Hà hiểu sai rồi.
Lisp trên lấy ra tập hợp đối tượng sau 1 lệnh cụ thể. (là lệnh HA)
Mình cần lisp lấy ra tập hợp đối tượng tạo ra bởi lệnh bất kỳ trước đó. nghĩa là...:
trong quá trình vẽ chúng ta thường xuyên phải select đối tượng. Cad đã cung cấp nhiều kiểu Select: P-Previuos; L-last; ...
Giờ mình muốn viết thêm 1 lệnh để select được tập hợp đối tượng cuối cùng được tạo ra.
  • 0

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


#4 Detailing

Detailing

    biết lệnh imageclip

  • Members
  • PipPipPipPipPipPipPip
  • 667 Bài viết
Điểm đánh giá: 278 (khá)

Đã gửi 23 March 2012 - 10:20 AM

Không. Bác Hà hiểu sai rồi.
Lisp trên lấy ra tập hợp đối tượng sau 1 lệnh cụ thể. (là lệnh HA)
Mình cần lisp lấy ra tập hợp đối tượng tạo ra bởi lệnh bất kỳ trước đó. nghĩa là...:
trong quá trình vẽ chúng ta thường xuyên phải select đối tượng. Cad đã cung cấp nhiều kiểu Select: P-Previuos; L-last; ...
Giờ mình muốn viết thêm 1 lệnh để select được tập hợp đối tượng cuối cùng được tạo ra.

CAD tạo ra từng đối tượng nên tập hợp cuối cùng chính là đối tượng cuối (ssget "L")
Nếu muốn lấy tất cả các đối tượng dc tạo mới sau 1 lệnh nào đó bạn nghiên cứu cái này thử: http://exchange.auto...6b7ccc-67d2.htm
Good luck!
  • 0

Ideas don't matter, execution does!

1908412_308002392716743_8165279281236341


#5 duy782006

duy782006

    PHẠM QUỐC DUY

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 2155 Bài viết
Điểm đánh giá: 1360 (rất tốt)

Đã gửi 23 March 2012 - 10:29 AM

Lấy kiểu đa năng nếu khó thì có khi nào làm vầy dể hơn chút nào không.
-Làm 1 lệnh đánh dấu.
-Làm 1 lệnh lấy các đối tượng mới sinh ra từ thời điểm đánh dấu.
  • 1

Cứ ngỡ trần gian là cõi thật.Cho nên tất bật đến bây giờ.
Tạo hộp thoại bằng lisp My blog QUY ĐỊNH ĐẶT TÊN TOPIC TRONG CHUYÊN MỤC LISPD http://ktsduy.wordpress.com/
Để cám ơn chỉ cần nhấn rep_up.png
(Là nhấn vào nút đó phía bài viết của người ta í chứ đừng có nhè cái hình này mà nhấn miết đi nha :-D


#6 Doan Van Ha

Doan Van Ha

    biết lệnh adcenter

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 5447 Bài viết
Điểm đánh giá: 2624 (tuyệt vời)

Đã gửi 23 March 2012 - 10:44 AM

Lấy kiểu đa năng nếu khó thì có khi nào làm vầy dể hơn chút nào không.
-Làm 1 lệnh đánh dấu.
-Làm 1 lệnh lấy các đối tượng mới sinh ra từ thời điểm đánh dấu.

Ý tưởng này có lẻ khả thi nhỉ!
  • 0

* Chỉ nên yêu cầu Lisp khi bạn làm việc đó mất cả ngày nhưng họ chỉ viết 1 giờ. Đừng nêu yêu cầu Lisp khi bạn chỉ làm 1 giờ nhưng bắt họ phải mất cả ngày.

* Nhờ viết lisp cũng như đi khám bệnh. Chỉ gởi căn cước và than sắp chết thì không bác sỹ nào cứu sống được.


#7 duy782006

duy782006

    PHẠM QUỐC DUY

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 2155 Bài viết
Điểm đánh giá: 1360 (rất tốt)

Đã gửi 23 March 2012 - 10:49 AM

Ý tưởng này có lẻ khả thi nhỉ!

Em có trông cái như thế lâu rồi nhưng ứ làm được = chờ :D. Nhớ xưa bác Hoành với cả bác nào đấy có bàn mớ về vụ này và củng có viết rồi nhưng em ko nạp vào đầu được nên giờ cũng ko nhớ là vấn đề đã giải quyết tới đâu.
  • 0

Cứ ngỡ trần gian là cõi thật.Cho nên tất bật đến bây giờ.
Tạo hộp thoại bằng lisp My blog QUY ĐỊNH ĐẶT TÊN TOPIC TRONG CHUYÊN MỤC LISPD http://ktsduy.wordpress.com/
Để cám ơn chỉ cần nhấn rep_up.png
(Là nhấn vào nút đó phía bài viết của người ta í chứ đừng có nhè cái hình này mà nhấn miết đi nha :-D


#8 Tue_NV

Tue_NV

    KS Võ Quang Tuệ

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

Đã gửi 23 March 2012 - 11:13 AM

Em có trông cái như thế lâu rồi nhưng ứ làm được = chờ :D. Nhớ xưa bác Hoành với cả bác nào đấy có bàn mớ về vụ này và củng có viết rồi nhưng em ko nạp vào đầu được nên giờ cũng ko nhớ là vấn đề đã giải quyết tới đâu.

Ý tưởng trên hoàn toàn có thể làm được.
1. Xây dựng 1 hàm đánh dấu : Là 1 hàm lấy Ename cuối cùng ->
Lưu trữ Ename này vào 1 "chổ đâu đó". Nếu "chỗ đâu đó" đã tồn tại ename thì thay ename cũ bằng ename cuối cùng đó

2. Xây dựng hàm lấy đối tượng mới sinh từ thời điểm đánh dấu :
Bằng cách lấy ename ở "chổ đâu đó" và xây dựng hàm lấy đối tượng mới sinh.
  • 0

#9 Thaistreetz

Thaistreetz

    biết lệnh adcenter

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

Đã gửi 23 March 2012 - 02:42 PM

Về nguyên tắc cơ bản thì trình tự làm như Bác Duy đã nêu.
Hqua em cũng viết thử dựa trên nguyên tắc này. sử dụng reactor theo dõi 2 sự kiện: lispWillStart và CommadWillStart của Vlr-editor-reactor. Tuy nhiên chỉ hoàn thành được 80% yêu cầu vì còn 1 vài điểm chưa giải quyết được. Tối về em post để các bác xem rồi ý kiến gỡ rối giúp em.
@Detailing Mình chưa thử nghiên cứu các sự kiện của vlr-acdb-reactor. Để mình thư xem có lôi ra được gì từ nó không.
  • 0

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


#10 Detailing

Detailing

    biết lệnh imageclip

  • Members
  • PipPipPipPipPipPipPip
  • 667 Bài viết
Điểm đánh giá: 278 (khá)

Đã gửi 23 March 2012 - 03:17 PM

Về nguyên tắc cơ bản thì trình tự làm như Bác Duy đã nêu.
Hqua em cũng viết thử dựa trên nguyên tắc này. sử dụng reactor theo dõi 2 sự kiện: lispWillStart và CommadWillStart của Vlr-editor-reactor. Tuy nhiên chỉ hoàn thành được 80% yêu cầu vì còn 1 vài điểm chưa giải quyết được. Tối về em post để các bác xem rồi ý kiến gỡ rối giúp em.
@Detailing Mình chưa thử nghiên cứu các sự kiện của vlr-acdb-reactor. Để mình thư xem có lôi ra được gì từ nó không.

2 reactor lispWillStart và CommadWillStart theo dõi việc start command của CAD và lisp vậy .Net và ARX thì sao?
vlr-acdb-reactor là reactor theo dõi sự thay đổi của database của bản vẽ (tương tự biến DBmod) -> khi có đối tượng nào tạo ra thì lưu vào list, khi nào xem list xong thì xóa các item của nó đi, bắt đầu lưu lại list mới.
Good luck!
  • 1

Ideas don't matter, execution does!

1908412_308002392716743_8165279281236341


#11 Thaistreetz

Thaistreetz

    biết lệnh adcenter

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

Đã gửi 23 March 2012 - 03:49 PM

2 reactor lispWillStart và CommadWillStart theo dõi việc start command của CAD và lisp vậy .Net và ARX thì sao?
vlr-acdb-reactor là reactor theo dõi sự thay đổi của database của bản vẽ (tương tự biến DBmod) -> khi có đối tượng nào tạo ra thì lưu vào list, khi nào xem list xong thì xóa các item của nó đi, bắt đầu lưu lại list mới.
Good luck!

Các trường hợp bạn nêu chính là những vấn đề thuộc về số 20% còn lại mà mình chưa giải quyết được nên đành chuyển hướng khác là ... lập topic này :D
  • 0

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


#12 gia_bach

gia_bach

    biết lệnh adcenter

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 1433 Bài viết
Điểm đánh giá: 1426 (rất tốt)

Đã gửi 23 March 2012 - 04:18 PM

Rất nhiều lần mình có nhu cầu cần chọn được tập hợp đối tượng gần nhất được sinh ra bởi 1 lệnh nào đó (có thể là lệnh của cad hoặc lệnh của lisp) nên định viết 1 lisp chức năng như vây. nôm na thì nó cũng tương tự (ssget "L") nhưng ra cả đám chứ không chỉ 1 thằng ku cuối cùng.
Tuy nhiên hiện tại mình đang bí về cách thức giải quyết vấn đề đành phải lập topic xin các bác cao kiến để viết nó. Các bác cùng thảo luận nhé.

'Thaistreetz' tham khảo đoạn code của CAB trong BreakAll :

CAB - get last entity in datatbase
(defun GetLastEnt ( / ename result )
(if (setq result (entlast))
(while (setq ename (entnext result))
(setq result ename) ) )
result)
;;===================================
;; CAB - return a list of new enames
(defun GetNewEntities (ename / new)
(cond
((null ename) (alert "Ename nil"))
((eq 'ENAME (type ename))
(while (setq ename (entnext ename))
(if (entget ename) (setq new (cons ename new))) ) )
((alert "Ename wrong type.")) )
new
)
;;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
;; S T A R T S U B R O U T I N E H E R E
;;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

(setq LastEntInDatabase (GetLastEnt))

Viết lệnh ở đây .
;;==============================================================
(GetNewEntities LastEntInDatabase) ; return list of enames of new objects
  • 0

#13 Thaistreetz

Thaistreetz

    biết lệnh adcenter

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

Đã gửi 23 March 2012 - 09:44 PM

2. Xây dựng hàm lấy đối tượng mới sinh từ thời điểm đánh dấu :
Bằng cách lấy ename ở "chổ đâu đó" và xây dựng hàm lấy đối tượng mới sinh.

Cái này thì tương đối đơn giản, chúng ta đã có nhiều lisp từng sử dụng thuật toán này. đây là kết quả em làm được
(defun C:SX (/ last-en lst)
(if (vl-member-if '(lambda (x) (= (vlr-data x) "Acdb Reactor: Select The new Objects")) (cdar (vlr-reactors :vlr-acdb-reactor)))
(if *Last-Objects*
(progn (setq last-en *Last-Objects*) (while (setq last-en (entnext last-en)) (setq lst (cons last-en lst))) (sssetfirst nil (list->ss lst)))
(prompt (TCVN3-Unicode "** Khong co doi tuong moi nao duoc chon (progn
(setq *Last-Objects* nil)
(prompt (TCVN3-Unicode " << bat che do theo doi doi tuong entlast>>"))
(vlr-acdb-reactor "Acdb Reactor: Select The new Objects" '((:vlr-objectAppended . Callback-objectAppended)))))
(princ))
Phần bôi đậm là ý tưởng xây dựng cho ý 1 sau đây

Ý tưởng trên hoàn toàn có thể làm được.
1. Xây dựng 1 hàm đánh dấu : Là 1 hàm lấy Ename cuối cùng -> Lưu trữ Ename này vào 1 "chổ đâu đó". Nếu "chỗ đâu đó" đã tồn tại ename thì thay ename cũ bằng ename cuối cùng đó.

Việc đánh dấu này khi đặt vấn đề thì nghĩ là đơn giản. nhưng thực ra nó không hề dễ 1 chút nào.
Tốt nhất là dùng 1 reactor để làm việc này nếu muốn tự động hóa hoàn toàn, mục đích là để có thể "select the new objecs" bất cứ lúc nào chúng ta muốn trong khi vẽ. Đã có 2 ý tưởng:

1 Của mình: Dùng 1 reactor để theo dõi các sự kiện: sự kiện bắt đầu dùng 1 lệnh autocad :VLR-CommandWillStart và sự kiện bắt đầu 1 lệnh lisp :VLR-LispWillStart. khi sảy ra 1 trong 2 sự kiện này thì gọi hàm callback và gán đối tượng cuối cùng cho 1 biến. Hàm callback cho 2 sự kiện này được đại khái như sau:
(defun callback (reactor pramlist) (setq *Object-last* (entlast)) .....);end
Các vấn đề mình chưa giải quyết được khi sử dụng cách trên:
- không biết nó có tác dụng với các lệnh được viết bằng các ngôn ngữ khác hay không hay chỉ có tác dụng với lệnh cad và lệnh lisp, khả năng 99% là không (như Detailing đã nêu)
- Nếu chỉ dùng với lệnh của cad thôi thì coi như xong. ý tưởng đã được thực hiện. nhưng đa số chúng ta ai cũng dùng lisp. Nếu 1 lệnh lisp có bao gồm 1 hoặc nhiều lệnh của cad thì toi rồi.
Cụ thể: Khi lệnh lisp được gọi thì sự kiên VLR-LispWillStart. sảy ra. hàm callback được gọi, biến *object-last* được gán giá trị. tuy nhiên nếu trong quá trình chạy lisp, 1 lệnh của cad được gọi thông quahàm (command "tenlenh") thì sự kiện :VLR-CommandWillStart lại sảy ra và hàm callback lại tiếp tục được gọi *object-last* được gán giá trị mới. cứ như vậy bao nhiêu lần thực hiện hàm command thì sẽ có bấy lần hàm callback được gọi, kết quả là biến *object-last* chỉ là đồ bỏ đi.
- Nếu trường hợp lệnh cad và lệnh lisp không được hoàn thành. người dùng thoát giữa chừng thì *object-last* cũng không dùng được nữa
Túm lại là cách này không dùng được

2. Ý tưởng của bác Detailing: theo dõi sự kiện dữ liệu bản vẽ (database) bị thay đổi bằng vlr-acdb-reactor. Cụ thể là sự kiện dữ liệu bản vẽ được ghi thêm đối tượng :vlr-objectAppended mà mình sử dụng ở trên. hàm callback được gọi khi dữ liệu bản vẽ xuất hiện đối tượng mới. nó cũng được viết đại khái giống hàm callback bên trên.
- Cách này càng không được. mình lấy ví dụ thế này cho dễ hiểu: Giả sử mình sử dụng lệnh copy để copy 2 đối tượng. như vậy có 2 lần sự kiện :vlr-objectAppended kết quả là 2 lần hàm callback được gọi và *object-last* sẽ được gán là đối tượng cuối cùng được tạo ra sau lệnh copy, huề cả làng rồi. (entnext *object-last*) = nil

Vậy nên mời các bác tiếp tục đóng góp ý kiến :(
@ bác gia_bach: bác hiểu sai ý em giống như bác DVH bên trên. thành thât xin lỗi các bác vì diễn đạt chưa rõ nghĩa.
  • 0

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


#14 Detailing

Detailing

    biết lệnh imageclip

  • Members
  • PipPipPipPipPipPipPip
  • 667 Bài viết
Điểm đánh giá: 278 (khá)

Đã gửi 24 March 2012 - 11:24 AM

Bạn xem clip này và load file đính kèm xem có đúng ý ko. Nguyên lý thì đã nói ở trên rồi.

http://www.youtube.com/watch?v=aCR6oCnHecA

>>Download Here<<

Lưu ý:
  • chỉ load file trackingDatabaseChanged.dll (lệnh NETLOAD)
  • cái check box xóa/ko xóa các đối tượng sau khi get selection.

  • 2

Ideas don't matter, execution does!

1908412_308002392716743_8165279281236341


#15 Thaistreetz

Thaistreetz

    biết lệnh adcenter

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

Đã gửi 24 March 2012 - 01:16 PM

Nếu như chỉ cần kết quả như bạn đã làm thì vấn đề lại khá đơn giản, mình làm được bằng lisp, nhưng nó không phải là cái mà mình muốn. Có lẽ mình cần phải nói rõ hơn về ý định viết lệnh này của mình để các bác không bị lạc hướng đi nữa nhé:

- trong quá trình vẽ mình có nhu cầu chọn được tập hợp đối tượng cuối cùng được sinh ra bởi 1 lệnh trước đó.
- tập hợp đối tượng cuối cùng được sinh ra phải được hiểu là tập hợp được sinh ra bởi 1 lệnh duy nhất (cái của bạn là của rất nhiều lệnh tính từ thời điểm tập hợp đối tượng chọn của bạn ở trạng thái rỗng. thực tế, chúng ta không có nhu đó trong khi vẽ).
- 1 lệnh trước đó: Phải được hiểu là lệnh cuối cùng có phát sinh đối tượng mới chứ không nhất thiết phải là lệnh cuối cùng.

ví dụ đơn giản để minh họa:
1. bạn bạn dùng lệnh line để vẽ 1 line: bản vẽ có 1 line
2. bạn dùng lệnh copy để copy line đó thành 2 line: bản vẽ có 3 line (2 đối tượng đươc tạo mới)
3. bạn lại dùng lệnh copy 1 lần nữa để copy 2 line mới đó thành 4 line mới: bản vẽ có 7 line (4 đối tượng được tạo mới)
4. tiếp theo bạn dùng rất nhiều lênh khác, nhưng không có phát sinh đối tượng mới.
5. lúc này bạn có nhu cầu sử dụng 4 đối tượng line ở bước 3. chỉ việc gõ lệnh lệnh trên là chọn được: Tập hợp cuối cùng là 4 đối tượng được tạo bởi lệnh copy ở bước 3.
Yêu cầu bắt buộc của lệnh mình muốn viết: bất kể lúc nào người dùng cần, chỉ cần gõ lệnh là chọn được tập hợp đối tượng mới tạo mà không cần phải thủ công xác định điểm mốc.
  • 0

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


#16 Detailing

Detailing

    biết lệnh imageclip

  • Members
  • PipPipPipPipPipPipPip
  • 667 Bài viết
Điểm đánh giá: 278 (khá)

Đã gửi 24 March 2012 - 11:36 PM

Nếu như chỉ cần kết quả như bạn đã làm thì vấn đề lại khá đơn giản, mình làm được bằng lisp, nhưng nó không phải là cái mà mình muốn. Có lẽ mình cần phải nói rõ hơn về ý định viết lệnh này của mình để các bác không bị lạc hướng đi nữa nhé:

- trong quá trình vẽ mình có nhu cầu chọn được tập hợp đối tượng cuối cùng được sinh ra bởi 1 lệnh trước đó.
- tập hợp đối tượng cuối cùng được sinh ra phải được hiểu là tập hợp được sinh ra bởi 1 lệnh duy nhất (cái của bạn là của rất nhiều lệnh tính từ thời điểm tập hợp đối tượng chọn của bạn ở trạng thái rỗng. thực tế, chúng ta không có nhu đó trong khi vẽ).
- 1 lệnh trước đó: Phải được hiểu là lệnh cuối cùng có phát sinh đối tượng mới chứ không nhất thiết phải là lệnh cuối cùng.

ví dụ đơn giản để minh họa:
1. bạn bạn dùng lệnh line để vẽ 1 line: bản vẽ có 1 line
2. bạn dùng lệnh copy để copy line đó thành 2 line: bản vẽ có 3 line (2 đối tượng đươc tạo mới)
3. bạn lại dùng lệnh copy 1 lần nữa để copy 2 line mới đó thành 4 line mới: bản vẽ có 7 line (4 đối tượng được tạo mới)
4. tiếp theo bạn dùng rất nhiều lênh khác, nhưng không có phát sinh đối tượng mới.
5. lúc này bạn có nhu cầu sử dụng 4 đối tượng line ở bước 3. chỉ việc gõ lệnh lệnh trên là chọn được: Tập hợp cuối cùng là 4 đối tượng được tạo bởi lệnh copy ở bước 3.
Yêu cầu bắt buộc của lệnh mình muốn viết: bất kể lúc nào người dùng cần, chỉ cần gõ lệnh là chọn được tập hợp đối tượng mới tạo mà không cần phải thủ công xác định điểm mốc.

Bạn thử file này xem
Load bằng lệnh NETLOAD
lệnh để lấy tập chọn là "ZZ"

>>DownLoad Here<<
  • 1

Ideas don't matter, execution does!

1908412_308002392716743_8165279281236341


#17 Thaistreetz

Thaistreetz

    biết lệnh adcenter

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

Đã gửi 25 March 2012 - 12:48 AM

Cảm ơn Detailing đã nhiệt tình với topic của mình. Tuy nhiên lần này cũng vẫn chưa đạt yêu cầu. không biết có sự khác biệt nào giữa máy của bạn và máy của mình (Cad 2010) hay không? tuy nhiên trên máy của mình tập hợp đối tượng được chọn sau khi gõ lệnh zz vẫn cứ là tập hợp đối tượng được tạo của rất nhiều lênh trước đó.
Cụ thể khi mình test với ví dụ 5 bước như bài số #15 thì tại bước 5 gõ lệnh zz chương trình chọn luôn đủ 7 đối tượng. không fải chỉ 4 đối tượng cuối cùng.
  • 0

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


#18 Detailing

Detailing

    biết lệnh imageclip

  • Members
  • PipPipPipPipPipPipPip
  • 667 Bài viết
Điểm đánh giá: 278 (khá)

Đã gửi 25 March 2012 - 12:09 PM

Bạn xem clip này nha. file trên ko work với lisp có xài (command "...") ^^
mình update luôn trường hợp đó trong file mới.

http://www.youtube.com/watch?v=q5ZiyD5iNn8

>>Download Here<<

Enjoy
  • 1

Ideas don't matter, execution does!

1908412_308002392716743_8165279281236341


#19 Thaistreetz

Thaistreetz

    biết lệnh adcenter

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

Đã gửi 25 March 2012 - 08:16 PM

Bạn xem lại xem có post nhầm file không. mình down về dùng với 5 bước như trên nó vẫn chọn đủ đám 7 đối tượng bình thường,
Các lệnh mình đã dùng:
- Line (command) : bước 1
- Copy (command trong lisp) : bước 2 và 3 (defun C:C (/ SS) (if (setq SS (ssget))(vl-cmdf "Copy" SS "" "M")(vl-cmdf "Copy" "P" "" "M"))(princ))
- Move (command) :bước 4
Hoặc có thể thuật toán hay ngôn ngữ của bạn dùng không ổn định với các đời cad. mình dùng cad 2010 .net3
  • 1

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


#20 Detailing

Detailing

    biết lệnh imageclip

  • Members
  • PipPipPipPipPipPipPip
  • 667 Bài viết
Điểm đánh giá: 278 (khá)

Đã gửi 25 March 2012 - 10:34 PM

Bạn xem lại xem có post nhầm file không. mình down về dùng với 5 bước như trên nó vẫn chọn đủ đám 7 đối tượng bình thường,
Các lệnh mình đã dùng:
- Line (command) : bước 1
- Copy (command trong lisp) : bước 2 và 3 (defun C:C (/ SS) (if (setq SS (ssget))(vl-cmdf "Copy" SS "" "M")(vl-cmdf "Copy" "P" "" "M"))(princ))
- Move (command) :bước 4
Hoặc có thể thuật toán hay ngôn ngữ của bạn dùng không ổn định với các đời cad. mình dùng cad 2010 .net3

Câu hỏi hay, hay ở chổ cái lisp của bạn có cách hoạt động khác với bình thường: start lisp - invoke command (trong lisp) - end lisp - end command (ngoài lisp).
Trường hợp này mình ko ngờ tới. Tuy nhiên mình đã update ở post trên rồi (post #18). Bạn check thử nha.
Enjoy!
  • 1

Ideas don't matter, execution does!

1908412_308002392716743_8165279281236341