Chuyển đến nội dung
Diễn đàn CADViet
leejang

Nhờ hoàn thiện lisp xóa đối tượng trong miền kín !

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

Em tải trên diễn đàn được cái lisp xóa tất cả các đối tượng trong hoặc ngoài 1 miền kín. Nhưng khi mình chạy với 1 bản vẽ mới, có ít đối tượng thì nó chạy ok ! Khi chạy với 1 bản vẽ bình đồ, có nhiều đối tượng thì nó báo lỗi như sau :

Command:ewb

Ban muon xoa Trong hay Ngoai duong bao <T/N>: t

error: too few arguments

 

Đây là Code

 

 

;;;;===========================

(defun C:EWB ( / en ss lst ssall bbox bit) ;EWB -> Erasre With Boudary

(vl-load-com)

(if (and (setq en (car(entsel "\n Chon duong bao : ")))

(wcmatch (cdr(assoc 0 (entget en))) "*POLYLINE"))

(progn

(setq bbox (ACET-ENT-GEOMEXTENTS en))

(setq bbox (mapcar '(lambda(x)(trans x 0 1)) bbox))

(setq lst (ACET-GEOM-OBJECT-POINT-LIST en 1e-3))

(ACET-SS-ZOOM-EXTENTS (ACET-LIST-TO-SS (list en)))

(command "_.Zoom" "0.95x")

(if (null etrim)(load "extrim.lsp"))

(initget "T N")

(setq bit (getkword "\nBan muon xoa Trong hay Ngoai duong bao <T/N>: " ) )

(if (= bit "T") ;xoa Trong duong bao

(progn

(etrim en (polar (GetInside en) (- ang) 10) )

(if (setq ss (ssget "_CP" lst))

(progn

(if (ssmemb en ss) (ssdel en ss))

(ACET-SS-ENTDEL ss)

)

)

)

(progn ;(= bit "N") ;xoa Ngoai duong bao

(progn

(etrim en (GetInside en))

(if (and

(setq ss (ssget "_CP" lst))

(setq ssall (ssget "_X" (list (assoc 410 (entget en)))))

)

(progn

(setq lst (vl-remove-if 'listp (mapcar 'cadr (ssnamex ss))))

(foreach e1 lst (ssdel e1 ssall))

(if (ssmemb en ssall) (ssdel en ssall))

(ACET-SS-ENTDEL ssall)

)

)

)

);cond

)

)

)

)

 

(defun GetInside(cEnt / param Flag pt)

(setq param (vlax-curve-getStartParam cEnt)

Flag nil

)

(while (and (not Flag) (< param (vlax-curve-getEndParam cEnt)) )

(setq pt (vlax-curve-getPointAtParam cEnt param)

ang (- (angle '(0 0 0) (vlax-curve-getFirstDeriv cEnt param)) (/ pi 2)) )

(cond

((insidep (polar pt ang 10) cEnt) (setq Flag T) )

((insidep (polar pt ang -10) cEnt) (setq Flag T) )

)

(setq param (+ param 0.1) )

)

pt

)

;; Copyright © 2009, Lee McDonnell

;; (Contact Lee Mac, CADTutor.net)

(defun insidep (pt Obj / Obj Tol ang doc spc flag int lin xV yV)

(defun vlax-list->3D-point (lst flag)

(if lst

(cons ((if flag car cadr) lst)

(vlax-list->3D-point (cdddr lst) flag))))

(or (eq 'VLA-OBJECT (type Obj))

(setq Obj (vlax-ename->vla-object Obj)))

(setq Tol (/ pi 6) ; Uncertainty

ang 0.0 flag T)

(setq doc (vla-get-ActiveDocument (vlax-get-Acad-Object))

spc (if (zerop (vla-get-activespace doc))

(if (= (vla-get-mspace doc) :vlax-true)

(vla-get-modelspace doc)

(vla-get-paperspace doc))

(vla-get-modelspace doc)))

(while (and (< ang (* 2 pi)) flag)

(setq flag (and

(setq int

(vlax-invoke

(setq lin

(vla-addLine spc

(vlax-3D-point pt)

(vlax-3D-point

(polar pt ang

(if (vlax-property-available-p Obj 'length)

(vla-get-length Obj) 1.0)))))

'IntersectWith Obj

acExtendThisEntity))

(<= 6 (length int))

(setq xV (vl-sort (vlax-list->3D-point int T) '<)

yV (vl-sort (vlax-list->3D-point int nil) '<))

(or (<= (car xV) (car pt) (last xV))

(<= (car yV) (cadr pt) (last yV))))

ang (+ ang Tol))

(vla-delete lin))

flag

T

)

 

 

 

Và em muốn rằng lisp có thể xóa được tất cả mọi loại đối tượng trong hoặc ngoài vùng đó. Kể cả đối tượng Proxy

Đây là file mà khi chạy bị lỗi :

http://www.mediafire.com/?hj7trsoxckx17d1

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

Em tải trên diễn đàn được cái lisp xóa tất cả các đối tượng trong hoặc ngoài 1 miền kín. Nhưng khi mình chạy với 1 bản vẽ mới, có ít đối tượng thì nó chạy ok ! Khi chạy với 1 bản vẽ bình đồ, có nhiều đối tượng thì nó báo lỗi như sau :

Có thể bạn down về nhưng bị lỗi. Bạn down lại cái này xem sao nhé. Chúc bạn ngày nghỉ vui vẻ

http://www.4shared.com/file/O21D3EIO/Xoa_doi_tuong_ErasreWithBoudar.html

  • 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

Có thể bạn down về nhưng bị lỗi. Bạn down lại cái này xem sao nhé. Chúc bạn ngày nghỉ vui vẻ

http://www.4shared.com/file/O21D3EIO/Xoa_doi_tuong_ErasreWithBoudar.html

Đúng là e tải về bị lỗi thật. Cảm ơn bác nhiều. Lisp này rất hay !

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

cho mình hỏi tý,sao mình vẽ một hình kín sau đó dùng lisp rồi chọn xóa các đối tượng bên trong có lúc nó xóa đúng,có lúc nó xóa cả bên ngoài,mong các cao thủ giú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

Xin chào mọi người

Mình có tìm được lisp này trên diễn đàn nhưng khi xóa đối tượng thì nó xóa luôn cả bên ngoài trong khi mình chỉ chọn xóa trong.

Mong anh em chỉnh sửa giúp mì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

Đây là ví dụ xóa bị lỗi. Khi ta chọn xóa trong nhưng lại xóa luôn cả bên ngoài nữa

http://www.cadviet.com/upfiles/3/104866_vi_du.dwg

Đây là lisp em load được trên diễn đàn

http://www.cadviet.com/upfiles/3/104866_erasrewithboudary.lsp

  • 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ãn phép bạn một chút

File cad của bạn, các đường pline hoặc line đi cắt qua cả trong và ngoài đường tròn thì tất nhiên LISP sẽ xóa đi cũng dễ hiểu thôi

Nếu bạn mong muốn nó vừa xóa, vừa TRIM cho đúng mép đường bao thì lại là vấn đề khác không dùng LISP này được nữa

Mỗi LISP thực hiện một việc khác nhau, nên tìm hiểu kỹ, chứ k phải là LISP sai đâu bạn nhé

Mình dùng LISP đó nhiều rồi, cũng thấy ngon lắ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

Lệnh Extrim này lùng bùng lắm. Nhiều khi nó chạy như... say rượu ấy.

Tôi đã thử với rất nhiều lisp xoá đối tượng trong vùng, giữa 2 vùng, ngoài vùng, kể cả extrim, nhưng đều không cho kết quả mong muốn. Hình đơn giản và ít đối tượng thì ok nhưng nhiều là loạn ngay.

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

Đây là ví dụ xóa bị lỗi. Khi ta chọn xóa trong nhưng lại xóa luôn cả bên ngoài nữa

http://www.cadviet.c...04866_vi_du.dwg

Đây là lisp em load được trên diễn đàn

http://www.cadviet.c...withboudary.lsp

Lisp này chỉ chạy đúng với các đối tựong đồng phẳng thôi.

Với các đối tuợng có cao độ khác nhau trong file cad của bạn, kết quả như bạn đã thấy ...

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

Vậy anh cho em hỏi a có lisp nào để thực hiện công việc này không anh

Nếu có anh giúp em với.

Em xin chân thành cảm ơn anh.

Chúc anh và mọi người sức khỏe

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ôi đã nói ở trên rồi: các lisp về xoá đối tượng trong/giữa/ngoài vùng mà tôi được biết (của nước ngoài nước trong đều có) đều không cho kết quả mong muốn nếu số đối tượng lớn, nhiều kiểu đối tượng... Nó chỉ ok khi bản vẽ đơn giản thôi. Với bản vẽ của bạn thì ngay cả khi đã flatten cho nó đồng phẳng rồi thì nó vẫn xoá hết sức bậy bạ (bác Gia_Bach nói nhưng chắc chưa test đấy thôi).

Lệnh Extrim cũng không đáng tin.

Bạn thử cách này xem: chia vùng cần xoá thành từng vùng nhỏ, rồi xoá từ từ (nhớ zoom đủ lớn), xem liệu có được không? Còn không được nữa thì tôi cũng bó tay.

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


×