Đến nội dung


Hình ảnh
- - - - -

[Hỏi] Break multiple points


  • Please log in to reply
5 replies to this topic

#1 volleyball

volleyball

    biết zoom

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

Đã gửi 17 September 2013 - 02:28 PM

Mình muốn viết một Lisp để break một đối tượng (có thể là LINE, POLYLINE,  LWPOLYLINE, SPLINE, ARC, ELLIPSE, RAY, XLINE) tại n điểm (thành n+1 đối tượng khác nhau).

 (defun BreakCurveList (Curve ListPoint)
(foreach n ListPoint
(command ".break" Curve (trans n 0 1)(trans n 0 1)))
)

 

Ngặt một nỗi, sau khi Break xong thì nó tạo ra thêm một đối tượng mới. Nếu điểm ngắt lần thứ 2 không nằm trên đối tượng cũ (biến Curve) mà nằm trên đối tượng mới tạo ra thì lần gọi lệnh thứ 2 sẽ không thể thực hiện được, và như vậy, nó chỉ ngắt được mỗi một điểm đầu tiên thôi.

 

Xin hỏi các bác có cách nào khắc phục để break ở tất cả các điểm không?


  • 0

#2 Polyline

Polyline

    biết lệnh mirror

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

Đã gửi 19 September 2013 - 10:16 AM

Lệnh break sau khi ngắt xong điểm đầu tiên sẽ tạo ra đối tượng mới, bạn có thể dùng làm (entlast) để bắt lấy đối tượng này.


  • 0

#3 volleyball

volleyball

    biết zoom

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

Đã gửi 19 September 2013 - 02:08 PM

nhưng ở đây là break theo danh sách, làm sao biết được điểm nào đang nằm ở đối tượng nào hả bác?


  • 0

#4 phamthanhbinh

phamthanhbinh

    biết lệnh adcenter

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

Đã gửi 19 September 2013 - 02:52 PM

nhưng ở đây là break theo danh sách, làm sao biết được điểm nào đang nằm ở đối tượng nào hả bác?

Hề hề hề.

Bạn thử thêm dòng code sau đây vào phía trên dòng code (command .....) trong hàm foreach xem sao nhé:

(setq curve (ssname (ssget "c" (list (- (car n) 0.01) (- (cadr n) 0.01)) (list (+ (car n) 0.01) (+ (cadr n) 0.01))) 0))


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

#5 Doan Van Ha

Doan Van Ha

    biết lệnh adcenter

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

Đã gửi 19 September 2013 - 03:29 PM

Hề hề hề.

Bạn thử thêm dòng code sau đây vào phía trên dòng code (command .....) trong hàm foreach xem sao nhé:

(setq curve (ssname (ssget "c" (list (- (car n) 0.01) (- (cadr n) 0.01)) (list (+ (car n) 0.01) (+ (cadr n) 0.01))) 0))

Màu đỏ có 2 sự phiêu lưu bác Bình ơi:

1). Chưa chắc (ssname e 0) đã phải là em muốn break tiếp. Có thể nó là em kia thì sao?

2). Chưa chắc ssget quanh n thì chỉ có curve. Có thể có các đối tượng khác quanh n thì sao?


  • 1

* 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.


#6 phamthanhbinh

phamthanhbinh

    biết lệnh adcenter

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

Đã gửi 19 September 2013 - 05:14 PM

Màu đỏ có 2 sự phiêu lưu bác Bình ơi:

1). Chưa chắc (ssname e 0) đã phải là em muốn break tiếp. Có thể nó là em kia thì sao?

2). Chưa chắc ssget quanh n thì chỉ có curve. Có thể có các đối tượng khác quanh n thì sao?

Hề hề hề,

1/- Em kia thì chắc là không vì lúc đó mình chưa break mà.

2/- Em khác thì rất có khả năng nếu như bản vẽ quá đông bác ạ. Với cái ô lựa chọn có kích thước 0.02 thì mình nghĩ cái đối tượng ngoại lai hơi hiếm. Tùy theo người dùng có thể giảm nhỏ thằng cu này và cũng có thể cho thêm vào các bộ lọc cho nó tránh bớt phiền toái.

Tối ưu thì chắc là chưa ổn song đây chỉ là một cách gợi ý để mọi người suy nghĩ thêm.

Ý của mình chỉ là chọn đối tượng cần break theo điểm, Mà do chưa rành lắm nên chỉ mới nghĩ ra cách củ chuối này. Có thể còn chát, nhưng cũng có thể sử dụng với một ít gia vị nữa để xài đỡ khi đói chăng?????


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