Đến nội dung


Hình ảnh
- - - - -

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


  • Please log in to reply
11 replies to this topic

#1 victor85

victor85

    biết lệnh stretch

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

Đã gửi 15 May 2012 - 10:13 AM

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

#2 lp_hai

lp_hai

    biết lệnh measure

  • Members
  • PipPipPipPipPipPip
  • 456 Bài viết
Điểm đánh giá: 202 (khá)

Đã gửi 15 May 2012 - 02:52 PM

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

#3 victor85

victor85

    biết lệnh stretch

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

Đã gửi 15 May 2012 - 03:25 PM

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

#4 ketxu

ketxu

    Copier - Paster - Editor

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

Đã gửi 15 May 2012 - 03:34 PM

Dùng group đi cho nhanh :)
  • 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


#5 victor85

victor85

    biết lệnh stretch

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

Đã gửi 15 May 2012 - 04:15 PM

chưa hiểu ý ketxu lắm. hai vấn đề khác nhau mà.
  • 0

#6 ketxu

ketxu

    Copier - Paster - Editor

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

Đã gửi 15 May 2012 - 04:24 PM

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 :)
  • 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


#7 victor85

victor85

    biết lệnh stretch

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

Đã gửi 15 May 2012 - 04:33 PM

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

#8 lp_hai

lp_hai

    biết lệnh measure

  • Members
  • PipPipPipPipPipPip
  • 456 Bài viết
Điểm đánh giá: 202 (khá)

Đã gửi 15 May 2012 - 05:25 PM

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

#9 ketxu

ketxu

    Copier - Paster - Editor

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

Đã gửi 15 May 2012 - 06:38 PM

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


#10 victor85

victor85

    biết lệnh stretch

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

Đã gửi 16 May 2012 - 08:50 AM

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

#11 lp_hai

lp_hai

    biết lệnh measure

  • Members
  • PipPipPipPipPipPip
  • 456 Bài viết
Điểm đánh giá: 202 (khá)

Đã gửi 16 May 2012 - 09:19 AM

@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>)
  • 1
Hình đã gửi

#12 victor85

victor85

    biết lệnh stretch

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

Đã gửi 17 May 2012 - 09:37 AM

ok, đã test ổn rồi. Mình cảm ơn lp_hai nhé.
  • 0