Đến nội dung


Hình ảnh
- - - - -

Lisp xóa toàn bộ đối tượng được ngăn bởi đường thẳng


  • Please log in to reply
47 replies to this topic

#41 TRUNGNGAMY

TRUNGNGAMY

    biết lệnh block

  • Members
  • PipPipPipPipPipPip
  • 401 Bài viết
Điểm đánh giá: 91 (tàm tạm)

Đã gửi 31 October 2009 - 01:13 AM

Cám ơn TRUNGNGAMY có lời động viên, Thiep cũng muốn nâng cấp lisp ERL thay cho lệnh EXTRIM nhưng vẫn còn nhiều vấn đề về thuật toán mình chưa giải quyết được: miền cần xóa, Thiep sẽ cố gắng.
Còn lisp chạy không đúng khi zoom to lên, ngay cả lệnh gốc của Autocad, lệnh nào khi yêu cầu chọn đối tượng trên màn hình, người dùng chọn xong các đối tượng trên màn hình, sau đó kéo rê màn hình để chọn các đối tượng khác thì các đối tượng vừa chọn xong nếu nằm ngoài màn hình sẽ có cái không còn nằm trong tập hợp chọn nữa. Vì vậy để cho các lệnh Autocad chạy chuẩn thì người dùng phải zoom E trước.
Thiep sẽ bổ sung zoom E vào lisp ERL

Muốn làm được việc này mình nghĩ bạn phải viết đc một số hàm toán học như xác định điểm ở trong hay ngoài đa giác, giao của các đối tượng như đg thẳng, đg tròn ... với đa giác, sau đó xác định phần nằm trong hay ngài đa giác để cắt và xóa chúng đi. Có thể có những hàm đã có trong vl.
  • 0

#42 thiep

thiep

    biết dimbaseline

  • Members
  • PipPipPipPipPip
  • 369 Bài viết
Điểm đánh giá: 260 (khá)

Đã gửi 31 October 2009 - 10:58 AM

sao mình load cái lisp rồi dùng thử mà có thấy có thay đổi gì đâu . lệnh gọi là er2l đúng ko nhỉ .gọi xong nó ko cho mình chọn khung thì làm sao mà cắt nhỉ. ban Thiệp giải thích dùm mình đc ko vậy???

Lisp này chỉ xóa các đối tượng ở miền 1 bên đường thẳng thôi, sau khi phát lệnh er2l, lisp sẽ hỏi chọn đường thẳng chặn, pick vào miền cần xoá, OK.
  • 0

#43 thiep

thiep

    biết dimbaseline

  • Members
  • PipPipPipPipPip
  • 369 Bài viết
Điểm đánh giá: 260 (khá)

Đã gửi 31 October 2009 - 12:04 PM

Muốn làm được việc này mình nghĩ bạn phải viết đc một số hàm toán học như xác định điểm ở trong hay ngoài đa giác, giao của các đối tượng như đg thẳng, đg tròn ... với đa giác, sau đó xác định phần nằm trong hay ngài đa giác để cắt và xóa chúng đi. Có thể có những hàm đã có trong vl.

Thiep đã viết được thuật toán xác định được miền cần xóa giống như trong lệnh offset: pick điểm vào bên nào của curve cần offset.
Giao của các đối tượng thì cũng xử lý được, chỉ còn 1 loại đối tượng là hatch, Thiep đang nghiên cứu xử lý bằng cách nhờ hàm trim. Các block hay xref thì không thể được, vì đụng tới nó thì phải nổ nó ra.
Ngoài ra cái vất vả nhất là phải chia rất nhiều trường hợp vị trí và kiểu của curve, chỉ riêng curve là đường thẳng mà đã có 12 trường hợp rồi! Hiện giờ Thiep đang bận rộn với công việc, chưa rảnh tay sờ tới 1 lisp nào, cho Thiep nợ 1 thời gian nữa nhé. Nếu TRUNGNGAMY hoặc các bạn nào trên diễn đàn rảnh tay thì giúp cho Thiep chia hết các trường hợp ra (các điều kiện cho hàm cond) Thiep sẽ gắn mã lisp cho từng trường hợp.
  • 1

#44 TRUNGNGAMY

TRUNGNGAMY

    biết lệnh block

  • Members
  • PipPipPipPipPipPip
  • 401 Bài viết
Điểm đánh giá: 91 (tàm tạm)

Đã gửi 31 October 2009 - 04:57 PM

Thiep đã viết được thuật toán xác định được miền cần xóa giống như trong lệnh offset: pick điểm vào bên nào của curve cần offset.
Giao của các đối tượng thì cũng xử lý được, chỉ còn 1 loại đối tượng là hatch, Thiep đang nghiên cứu xử lý bằng cách nhờ hàm trim. Các block hay xref thì không thể được, vì đụng tới nó thì phải nổ nó ra.
Ngoài ra cái vất vả nhất là phải chia rất nhiều trường hợp vị trí và kiểu của curve, chỉ riêng curve là đường thẳng mà đã có 12 trường hợp rồi! Hiện giờ Thiep đang bận rộn với công việc, chưa rảnh tay sờ tới 1 lisp nào, cho Thiep nợ 1 thời gian nữa nhé. Nếu TRUNGNGAMY hoặc các bạn nào trên diễn đàn rảnh tay thì giúp cho Thiep chia hết các trường hợp ra (các điều kiện cho hàm cond) Thiep sẽ gắn mã lisp cho từng trường hợp.

Mình kg hiểu ý tưởng và các trường hợp mà Thiep nói. Mình nghĩ mấu chốt của vấn đề ở đây chỉ là tìm giao của 2 đối tg. nếu bạn đã tìm đc giao của hai dối tg rồi thì chỉ cần tìm các phần của đối tg bị cắt ra nằm ở trong hay ngoài đối tg cơ sở là đc. Giả sử một đường thẳng bị chia thành 3 đoạn, trên 1 đoạn ta lấy 1 điểm để xét, nếu điểm này nằm trong (hay ngoài) đối tượng cơ sở thì đoạn đó cũng sẽ nằm trong (hay ngoài) đối tượng cơ sở. Sau đó xét cho các TH cao hơn khi đối tg bị cắt là cung tròn, đg tròn, elip ... cũng làm tương tự.
Mình xin lỗi Thiep và các bạn là mình kg thể viết lisp này đc chỉ đơn giản là mình kg có kiến thức về vl. Vì trong vl có rất nhiều hàm hữu ích mà nếu kg có nó khó lòng viết đc lisp này. Mình chỉ tham gia ý tưởng xem có giúp gì đc cho Thiep kg thôi.
  • 0

#45 michoma

michoma

    biết zoom

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

Đã gửi 31 October 2009 - 08:49 PM

Lisp này chỉ xóa các đối tượng ở miền 1 bên đường thẳng thôi, sau khi phát lệnh er2l, lisp sẽ hỏi chọn đường thẳng chặn, pick vào miền cần xoá, OK.



xin lỗi nhưng mình cũng chẳng thấy nó hỏi chọn đường thẳng để mà xoá nữa , gọi lệnh xong nó chạy ra cái dòng này :
Command: er2l
Free lisp from www.cadviet.comRegenerating model.
Break objects touching selected objects.
Select object(s) to break & press enter:
too many arguments

nghĩa là gì nhỉ :tongue2:
  • 0

#46 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 01 November 2009 - 12:16 AM

xin lỗi nhưng mình cũng chẳng thấy nó hỏi chọn đường thẳng để mà xoá nữa , gọi lệnh xong nó chạy ra cái dòng này :
Command: er2l
Free lisp from www.cadviet.comRegenerating model.
Break objects touching selected objects.
Select object(s) to break & press enter:
too many arguments

nghĩa là gì nhỉ :tongue2:


Bạn đừng nhấn vào Download lisp file,bạn copy nội dung lisp rồi dán vào Notepad,sao lưu dưới định dạng er2l.lsp
  • 0

#47 michoma

michoma

    biết zoom

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

Đã gửi 01 November 2009 - 07:42 AM

ko đc nó vẫn thế , ai biết chỉ dùm với :tongue2:
  • 0

#48 NguyenNgocSon

NguyenNgocSon

    biết dimbaseline

  • Members
  • PipPipPipPipPip
  • 368 Bài viết
Điểm đánh giá: 39 (tàm tạm)

Đã gửi 11 March 2012 - 09:50 PM

Trong trường hợp xóa đối tượng ở giữa 2 đường thẳng lisp không đáp ứng được ?
  • 0