Chuyển đến nội dung
Diễn đàn CADViet
Đăng nhập để thực hiện theo  
AUTOCAD_2019

Tìm chỗ bị hở khi vùng chưa khép kín

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

1 giờ} trướ}c, AUTOCAD_2019 đã nói:

anh ơi sao sau khi sử dụng lisp cho ra kết quả khi move hay sử dụng lệnh thì nó biến mất dấu x đỏ ạ nên không tài nào biết vị trí được

Bạn muốn đánh dấu vị trí hở theo kiểu gì:

1. Vẽ line nối 2 điểm

2. Vẽ circle tại 2 điểm hở

3. ...

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
13 giờ trước, Doan Van Ha đã nói:

Bạn muốn đánh dấu vị trí hở theo kiểu gì:

1. Vẽ line nối 2 điểm

2. Vẽ circle tại 2 điểm hở

3. ...

em muốn vẽ circle tại hai điểm hở ạ

  • Vote giảm 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
5 phút trước, AUTOCAD_2019 đã nói:

em muốn vẽ circle tại hai điểm hở ạ


(defun C:HA3(/ bk ho ss i j e1 e2 sta1 end1 sta2 end2 dis1 dis2 dis3 dis4 dis5)
 (setq bk (/ (getvar "viewsize") 100)) ; user co the sua so 100 de lay ban kinh
 (setq ho (getreal "\nNhap khoang cach ho min: "))
 (princ "\nChon cac doi tuong kiem tra do ho...")
 (setq ss (ssget '((0 . "ARC,*LINE"))))
 (repeat (setq i (sslength ss))
  (setq i (1- i) e1 (ssname ss i) sta1 (vlax-curve-getstartpoint e1) end1 (vlax-curve-getendpoint e1) dis1 (distance sta1 end1))
  (if (< dis1 ho) (progn (VePoint-GR sta1 bk 1) (MkCircle end1 bk 1)))
  (repeat (setq j (sslength ss))
   (setq j (1- j) e2 (ssname ss j) sta2 (vlax-curve-getstartpoint e2) end2 (vlax-curve-getendpoint e2))
   (setq dis2 (distance end1 end2) dis3 (distance end1 sta2) dis4 (distance sta1 sta2) dis5 (distance sta1 end2))
   (if (< dis2 ho) (progn (MkCircle end1 bk 1) (MkCircle end2 bk 1)))
   (if (< dis3 ho) (progn (MkCircle end1 bk 1) (MkCircle sta2 bk 1)))
   (if (< dis4 ho) (progn (MkCircle sta1 bk 1) (MkCircle sta2 bk 1)))
   (if (< dis5 ho) (progn (MkCircle sta1 bk 1) (MkCircle end2 bk 1))))))
(defun MkCircle(pt bk col)
 (entmake (list '(0 . "CIRCLE") (cons 62 col) (cons 10 pt) (cons 40 bk))))
(vl-load-com)   

  • Like 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
5 phút trước, Doan Van Ha đã nói:

 


(defun C:HA3(/ bk ho ss i j e1 e2 sta1 end1 sta2 end2 dis1 dis2 dis3 dis4 dis5)
 (setq bk (/ (getvar "viewsize") 100)) ; user co the sua so 100 de lay ban kinh
 (setq ho (getreal "\nNhap khoang cach ho min: "))
 (princ "\nChon cac doi tuong kiem tra do ho...")
 (setq ss (ssget '((0 . "ARC,*LINE"))))
 (repeat (setq i (sslength ss))
  (setq i (1- i) e1 (ssname ss i) sta1 (vlax-curve-getstartpoint e1) end1 (vlax-curve-getendpoint e1) dis1 (distance sta1 end1))
  (if (< dis1 ho) (progn (VePoint-GR sta1 bk 1) (MkCircle end1 bk 1)))
  (repeat (setq j (sslength ss))
   (setq j (1- j) e2 (ssname ss j) sta2 (vlax-curve-getstartpoint e2) end2 (vlax-curve-getendpoint e2))
   (setq dis2 (distance end1 end2) dis3 (distance end1 sta2) dis4 (distance sta1 sta2) dis5 (distance sta1 end2))
   (if (< dis2 ho) (progn (MkCircle end1 bk 1) (MkCircle end2 bk 1)))
   (if (< dis3 ho) (progn (MkCircle end1 bk 1) (MkCircle sta2 bk 1)))
   (if (< dis4 ho) (progn (MkCircle sta1 bk 1) (MkCircle sta2 bk 1)))
   (if (< dis5 ho) (progn (MkCircle sta1 bk 1) (MkCircle end2 bk 1))))))
(defun MkCircle(pt bk col)
 (entmake (list '(0 . "CIRCLE") (cons 62 col) (cons 10 pt) (cons 40 bk))))
(vl-load-com)   

 

em cam on a

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
17 phút trước, Doan Van Ha đã nói:

 


(defun C:HA3(/ bk ho ss i j e1 e2 sta1 end1 sta2 end2 dis1 dis2 dis3 dis4 dis5)
 (setq bk (/ (getvar "viewsize") 100)) ; user co the sua so 100 de lay ban kinh
 (setq ho (getreal "\nNhap khoang cach ho min: "))
 (princ "\nChon cac doi tuong kiem tra do ho...")
 (setq ss (ssget '((0 . "ARC,*LINE"))))
 (repeat (setq i (sslength ss))
  (setq i (1- i) e1 (ssname ss i) sta1 (vlax-curve-getstartpoint e1) end1 (vlax-curve-getendpoint e1) dis1 (distance sta1 end1))
  (if (< dis1 ho) (progn (VePoint-GR sta1 bk 1) (MkCircle end1 bk 1)))
  (repeat (setq j (sslength ss))
   (setq j (1- j) e2 (ssname ss j) sta2 (vlax-curve-getstartpoint e2) end2 (vlax-curve-getendpoint e2))
   (setq dis2 (distance end1 end2) dis3 (distance end1 sta2) dis4 (distance sta1 sta2) dis5 (distance sta1 end2))
   (if (< dis2 ho) (progn (MkCircle end1 bk 1) (MkCircle end2 bk 1)))
   (if (< dis3 ho) (progn (MkCircle end1 bk 1) (MkCircle sta2 bk 1)))
   (if (< dis4 ho) (progn (MkCircle sta1 bk 1) (MkCircle sta2 bk 1)))
   (if (< dis5 ho) (progn (MkCircle sta1 bk 1) (MkCircle end2 bk 1))))))
(defun MkCircle(pt bk col)
 (entmake (list '(0 . "CIRCLE") (cons 62 col) (cons 10 pt) (cons 40 bk))))
(vl-load-com)   

 

lisp chạy rất tốt nhưng có vài vấn đề à là có những chỗ bị hở tại vị trí em khoan tròn màu vàng nó lại không phát hiện được...anh xem giúp em ạ

file cad mau 4.dwg

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

Không có Cad, không test được, viết dễ lỗi. Nhớ nhập khoảng hở càng nhỏ càng tốt.


; Tim khoang ho giua cac doi tuong.
(defun C:HA4(/ bk ho ss i j e1 e2 p1 p2 q1 q2 pv kc)
 (setq bk (/ (getvar "viewsize") 100)) ; user co the sua so 100 de lay ban kinh
 (setq ho (getreal "\nNhap khoang cach ho min: "))
 (princ "\nChon cac doi tuong kiem tra do ho...")
 (setq ss (ssget '((0 . "ARC,*LINE"))))
 (repeat (setq i (sslength ss))
  (setq i (1- i) e1 (ssname ss i) p1 (vlax-curve-getstartpoint e1) p2 (vlax-curve-getendpoint e1))
  (repeat (setq j (sslength ss))
   (setq j (1- j) e2 (ssname ss j) q1 (vlax-curve-getstartpoint e2) q2 (vlax-curve-getendpoint e2))
   (mapcar '(lambda(p e) (setq pv (vlax-curve-getClosestPointTo e p)) (if (< (distance p pv) ho) (progn (MkCircle p bk 1) (MkCircle pv bk 1)))) (list p1 p1 p2 p2 q1 q1 q2 q2) (list e1 e2 e1 e2 e1 e2 e1 e2)))))
(defun MkCircle(pt bk col)
 (entmake (list '(0 . "CIRCLE") (cons 62 col) (cons 10 pt) (cons 40 bk))))
;----- 
(vl-load-com)   

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
1 giờ trước, Doan Van Ha đã nói:

Không có Cad, không test được, viết dễ lỗi. Nhớ nhập khoảng hở càng nhỏ càng tốt.

 



; Tim khoang ho giua cac doi tuong.
(defun C:HA4(/ bk ho ss i j e1 e2 p1 p2 q1 q2 pv kc)
 (setq bk (/ (getvar "viewsize") 100)) ; user co the sua so 100 de lay ban kinh
 (setq ho (getreal "\nNhap khoang cach ho min: "))
 (princ "\nChon cac doi tuong kiem tra do ho...")
 (setq ss (ssget '((0 . "ARC,*LINE"))))
 (repeat (setq i (sslength ss))
  (setq i (1- i) e1 (ssname ss i) p1 (vlax-curve-getstartpoint e1) p2 (vlax-curve-getendpoint e1))
  (repeat (setq j (sslength ss))
   (setq j (1- j) e2 (ssname ss j) q1 (vlax-curve-getstartpoint e2) q2 (vlax-curve-getendpoint e2))
   (mapcar '(lambda(p e) (setq pv (vlax-curve-getClosestPointTo e p)) (if (< (distance p pv) ho) (progn (MkCircle p bk 1) (MkCircle pv bk 1)))) (list p1 p1 p2 p2 q1 q1 q2 q2) (list e1 e2 e1 e2 e1 e2 e1 e2)))))
(defun MkCircle(pt bk col)
 (entmake (list '(0 . "CIRCLE") (cons 62 col) (cons 10 pt) (cons 40 bk))))
;----- 
(vl-load-com)   

 

lần này nó có chọn ví trí đó nhưng số vòng tròn ra khá là nhiều là những vị trí khác cũng bị nữa, em chọn min là 0.1...

pic 5.png

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

Dù không có Cad nhưng đoán chắc là bản vẽ của bạn vẽ trùng tùm lum tà la. Rút lui, mệt quá rồi. Không chơi với các bản vẽ kiểu này.

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

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  

×