Chuyển đến nội dung
Diễn đàn CADViet
  • Thông báo

    • Nguyen Hoanh

      CADViet đã hoàn tất nâng cấp   14/09/2017

      Chào các bạn, CADViet đã hoàn tất việc nâng cấp lên phiên bản mới. Tất cả các chức năng đã hoạt động theo kỳ vọng của ban quản trị. Nếu có vấn đề gì cần phản hồi, các bản post ở đây nhé: Trân trọng, Nguyễn Hoành.
Đăng nhập để thực hiện theo  
victor85

[Yêu cầu] Nhờ viết lisp chọn đối tượng theo cửa sổ tương đồng

Các bài được khuyến nghị

Đặt vấn đề:

Autocad có điểm mạnh là copy số lượng lớn các đối tượng nhanh chóng và tận dụng điều đó sẽ không phải vẽ lại cho những hình đã vẽ. Tuy nhiên khi cần chỉnh sửa ta phải chọn một số lượng lớn các đối tượng ở vị trí tương tự nhau nhưng thao tác này ta phải làm hoàn toàn bằng thủ công rất mất thời gian và đôi khi còn nhầm lẫn dẫn đến sai xót.

 

Giải quyết vấn đề: Chính vì vậy em nhờ các bác viết dùm lisp lựa chọn đối tượng theo cửa sổ như sau:

Lisp super_select: Lệnh ss

Đầu vào:

+ Chọn các hình chữ nhật để kẻ cửa sổ chọn (giống như lựa chọn WP trong select object)

+ Chọn điểm gốc để chọn các đối tượng trong nhóm thứ nhất

+ Chọn điểm kế tiếp để chọn các đối tượng trong nhóm thứ 2 lần lượt cho đến nhóm thứ n

+ Nhấn enter để kết thúc

 

Kết quả mình sẽ chọn được các đối tượng trong các hình chữ nhật của nhóm thứ nhất và các đối tượng tương tự của nhóm thứ 2 cho đến nhóm thứ n.

 

Hình minh họa: http://www.mediafire...jfom0e94aicw9s8

http://www.cadviet.c...uper_select.dwg

 

Kết:

Mình nghĩ các bạn hay vẽ autocad sẽ thường gặp phải trường hợp này thôi. Mong các lisper giúp đỡ mình với.

P/s: Nếu bạn nào thấy ý tưởng lisp hay thanks mình cái nhé. :D

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

P/s: Nếu bạn nào thấy ý tưởng lisp hay thanks mình cái nhé. :D

 

heheheh, lần đầu tiên mình mới thấy một người yêu cầu lisp muốn được thank đó! hehehhe

Mình ý tưởng của bạn cũng cao siêu quá đấy. Vấn đề ở đây là bạn có chắc chắn là "đối tượng theo cửa sổ tương đồng" có tuyệt đối giống nhau 100% không? Vì khi bạn vẽ bằng cad 2 đối tượng (có thể là line, circle...) cũng chưa chắc là chúng giống nhau tuyệt đối đâu bạn ah!

  • 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

Mình không quan trọng đối tượng trong cửa sổ tương đồng của mình có nhất thiết phải tuyệt đối giống nhau không. Mà mình sẽ lựa cách vẽ hình chữ nhật lựa chọn và lấy các đối tượng lọc riêng ra để chỉnh sửa tùy trong các trường hợ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ưa hiểu ý ketxu lắm. hai vấn đề khác nhau mà.

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óm tất cả thằng mầu đỏ lại thành 1 group trước thao tác copy thì sau này số thao tác chọn sẽ giảm đi số group * (số đối tượng -1) lầ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

Nếu mà cái đối tượng mình vẽ ban đầu nó chưa block hay group j cả ý. Bây giờ cần chọn tiếp và chỉnh sửa tiếp. Mà group thì chỉ chỉnh sửa được text chứ còn chỉnh sửa đối tượng thì chịu. Nếu vẽ từ đầu quản lý đầy đủ thì block có khi còn ưu điểm hơn group. Nhưng trong trường hợp số hình vẽ đã vẽ rồi mà cần chỉnh sửa thì mình nghĩ đến trường hợp dùng lisp này ket ạ.

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 chạy thử xem thế nào:

(defun c:ss(/ dt lstp p01 p02 n id dtc p1 p2 stdc spt)
 (setq dt (ssadd)
osm (getvar "osmode")
)
 (setq p01(getpoint "\nchon diem goc 1:"))
 (command "ucs" "n" p01)
 (setvar "osmode" 0)
 (while (setq p1(getpoint"\nchon doi tuong:"))
(setq p2(getcorner p1)
  lstp (append (list p1 p2) lstp))
)
 (setq spt (/(length lstp)2)
n 0)
 (repeat spt
(setq dtc (ssget "W" (nth n lstp) (nth (+ n 1) lstp))
  n (+ n 2)
  )
(setq sdtc (sslength dtc)
  id 0)
(repeat sdtc
 	(setq dt (ssadd (ssname dtc id) dt)
	id (1+ id))
 	)
)
 (setvar "osmode" osm)
 ;;;;
 (while (setq p02 (getpoint "\nchon diem goc tiep theo:"))
(command "ucs" "n" p02)
(setvar "osmode" 0)
(setq n 0)
(repeat spt
 	(setq dtc (ssget "W" (nth n lstp) (nth (+ n 1) lstp))
  n (+ n 2)
  )
 	(setq sdtc (sslength dtc)
  id 0)
 	(repeat sdtc
(setq dt (ssadd (ssname dtc id) dt)
  	id (1+ id))
)
 	)
(setvar "osmode" osm)
)
 (command "ucs" "w")
 (sssetfirst dt dt) 
 (princ)
 )

Ở đây bạn chú ý trình tự chọn điểm gốc: Mình viết chọn điểm gốc đầu tiên ngay từ đầu, kế tiếp là mở cửa sổ chọn dt (khi nào ko chọn dt nữa thì enter), cuối cùng là các điểm gốc tiếp theo (không chọn nữa thì enter)

  • 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

Mà group thì chỉ chỉnh sửa được text chứ còn chỉnh sửa đối tượng thì chịu. Nếu vẽ từ đầu quản lý đầy đủ thì block có khi còn ưu điểm hơn group.

Sao group lại không chỉnh được đối tượng ? :) Group có ưu điểm là chọn nhanh như block mà thích chỉnh từng thằng 1 thì chỉnh, k ảnh hưởng đến những thằng khác :)

 

@lp_hai vs victor : lisp lp_hai đã viết r, tuy nhiên mình cũng gợi ý là nếu đi sâu vào ssnamex thì có thể làm được việc này với mọi phương thức chọn. Tuy nhiên thực tế có nhiều người áp dụng lisp này không thì hơi khó trả 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

@ketxu: he he, đúng là group có chỉnh sửa được đối tượng. he he, hiểu biết thiếu xót quá. thêm được một công cụ sử dụng hữu hiệu đây. Nhưng mà mình nghĩ cái trường hợp của mình vẫn hay gặp với đối tượng đã vẽ rồi.

@lp_hai: lisp chạy báo lỗi bạn ạ. hic hic

 

Command: ss

chon diem goc 1:ucs

Current ucs name: *NO NAME*

Specify origin of UCS or [Face/NAmed/OBject/Previous/View/World/X/Y/Z/ZAxis]

<World>: n

Specify origin of new UCS or [ZAxis/3point/OBject/Face/View/X/Y/Z] <0,0,0>:

Command:

chon doi tuong:

chon doi tuong:

chon doi tuong:

; error: bad argument type: lselsetp nil

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

@lp_hai: lisp chạy báo lỗi bạn ạ. hic hic

lạ nhỉ! mình test thấy chạy bình thường mà,

Bạn load lại cái lisp mình mới sửa rồi test lại, thử cho ucs về world trước khi xài xem thế nào

 

Command: ss

chon diem goc 1:ucs

Current ucs name: *WORLD*

Specify origin of UCS or [Face/NAmed/OBject/Previous/View/World/X/Y/Z/ZAxis]

<World>: n

Specify origin of new UCS or [ZAxis/3point/OBject/Face/View/X/Y/Z] <0,0,0>:

Command:

chon doi tuong:

chon doi tuong:

chon doi tuong:

chon diem goc tiep theo:ucs

Current ucs name: *NO NAME*

Specify origin of UCS or [Face/NAmed/OBject/Previous/View/World/X/Y/Z/ZAxis]

<World>: n

Specify origin of new UCS or [ZAxis/3point/OBject/Face/View/X/Y/Z] <0,0,0>:

Command:

chon diem goc tiep theo:ucs

Current ucs name: *NO NAME*

Specify origin of UCS or [Face/NAmed/OBject/Previous/View/World/X/Y/Z/ZAxis]

<World>: n

Specify origin of new UCS or [ZAxis/3point/OBject/Face/View/X/Y/Z] <0,0,0>:

Command:

chon diem goc tiep theo: ucs

Current ucs name: *NO NAME*

Specify origin of UCS or [Face/NAmed/OBject/Previous/View/World/X/Y/Z/ZAxis]

<World>: w

Command: (<Selection set: 31> <Selection set: 31>)

  • 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

ok, đã test ổn rồi. Mình cảm ơn lp_hai 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

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

Đăng nhập để thực hiện theo  

×