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

Nhờ viết Lisp lọc đường vành khăn

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

Em chào diễn đàn ạ! em muốn chọn tất cả các đường vành khăn được tạo bởi lệnh donut khỏi các đường khác ( polyline,line,spline,circle,....),mỗi cái đường vành khăn này nằm rải rác khắp một bản vẽ rộng lớn,chọn thủ công mất thời gian và dễ sót quá.Mong các bác trên diễn đàn có thể viết giúp em cái lisp LVK làm được việc này hay có sẵn lisp  nào làm được theo yêu cầu  thì giúp đỡ em ạ.Em cảm ơn diễn đàn ạ!

loc vanh khan.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
1 giờ} trướ}c, haiha90 đã nói:

Em chào diễn đàn ạ! em muốn chọn tất cả các đường vành khăn được tạo bởi lệnh donut khỏi các đường khác ( polyline,line,spline,circle,....),mỗi cái đường vành khăn này nằm rải rác khắp một bản vẽ rộng lớn,chọn thủ công mất thời gian và dễ sót quá.Mong các bác trên diễn đàn có thể viết giúp em cái lisp LVK làm được việc này hay có sẵn lisp  nào làm được theo yêu cầu  thì giúp đỡ em ạ.Em cảm ơn diễn đàn ạ!

loc vanh khan.png

Donut cũng là đối tượng polyline nên để lọc được chỉ dựa vào màu sắc hoặc layer của các đối tượng đó, cái này sẽ hạn chế chỉ làm được trên những file giống file mẫu. hiện tại không có file nên cũng chịu.

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ể dùng giải thuật sau:

Lọc Polyline có 3 đỉnh, khoảng cách giữa 2 đỉnh liên tiếp bằng nhau, tổng chiều dài Pline bằng chiều dài 2 đỉnh nhân 3.14.

... 

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

Có thể dùng giải thuật sau:

Lọc Polyline có 3 đỉnh, khoảng cách giữa 2 đỉnh liên tiếp bằng nhau, tổng chiều dài Pline bằng chiều dài 2 đỉnh nhân 3.14.

... 

Chưa nghiên cứu sâu về đối tượng trên. cám ơn bạn đã cung cấp thêm thông tin về đối tượng vẽ bằng donut

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
32 phút trước, huunhantvxdts đã nói:

Chưa nghiên cứu sâu về đối tượng trên. cám ơn bạn đã cung cấp thêm thông tin về đối tượng vẽ bằng donut

^^, chỉ cần xác định dxf 70 và 42 là có thể chọn được bạn à

(defun C:T1()(sssetfirst nil (ssget '((0 . "*POLYLINE")(70 . 1)(42 . 1.0)))))

 

  • 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
27 phút trước, Biet ve CAD đã nói:

^^, chỉ cần xác định dxf 70 và 42 là có thể chọn được bạn à


(defun C:T1( / e ssd)
  (setq ssd (ssadd))
(foreach e (acet-ss-to-list (ssget '((0 . "*POLYLINE"))))
  (if (and (eq (cdr (assoc 70 (entget e))) 1)
	   (eq (cdr (assoc 42 (entget e))) 1.0)
	   )
    (ssadd e ssd)
    )
  )
  (sssetfirst nil ssd)
  )

 

Cái này chỉ kiểm tra được đa tuyến đóng và có object đầu tiên trong đa tuyến là ARC có cung 180 độ 

 

new block.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
20 phút trước, Biet ve CAD đã nói:

^^, chỉ cần xác định dxf 70 và 42 là có thể chọn được bạn à


(defun C:T1( / e ssd)
  (setq ssd (ssadd))
(foreach e (acet-ss-to-list (ssget '((0 . "*POLYLINE"))))
  (if (and (eq (cdr (assoc 70 (entget e))) 1)
	   (eq (cdr (assoc 42 (entget e))) 1.0)
	   )
    (ssadd e ssd)
    )
  )
  (sssetfirst nil ssd)
  )

 

chuẩn rồi bác ạ!cảm ơn bác nhiều!với cho em hỏi có thể thêm chức năng chọn các vành khăn có cùng đường kính trong và ngoài giống nhau không hả bác  nghĩa là các hình vành khăn giống nhau ý ạ?

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 Nguyen Van đã nói:

Cái này chỉ kiểm tra được đa tuyến đóng và có object đầu tiên trong đa tuyến là ARC có cung 180 độ 

 

new block.dwg

Mục tiêu của mình là đáp ứng đúng đề bài đặt ra, chủ top thấy ok vậy là được rùi ^^. Donut là lwpolylile thì có dxf 42 là 1.0, cái này là quan trọng nhất

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, haiha90 đã nói:

chuẩn rồi bác ạ!cảm ơn bác nhiều!với cho em hỏi có thể thêm chức năng chọn các vành khăn có cùng đường kính trong và ngoài giống nhau không hả bác  nghĩa là các hình vành khăn giống nhau ý ạ?

(defun C:T1( / e ssd x y d d0 d4 d2)
  (sssetfirst nil nil)
  (setq ssd (ssadd)
	e (car(entsel "\nPick Donut mau:"))
	)
  (vla-getboundingbox (vlax-ename->vla-object e) 'x 'y)
  (setq d0(distance (vlax-safearray->list x)(vlax-safearray->list y))
	d2 (cdr (assoc 41 (entget e)))
	)
(foreach e (acet-ss-to-list (ssget '((0 . "*POLYLINE")(70 . 1)(42 . 1.0))))
  (vla-getboundingbox (vlax-ename->vla-object e) 'x 'y)
  (setq d(distance (vlax-safearray->list x)(vlax-safearray->list y))
	d4 (cdr (assoc 41 (entget e)))
	)
  (if (and (equal d  d0) (equal d2  d4)) (ssadd e ssd) )
  )
  (sssetfirst nil ssd)
  )

Đây bạn

  • 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
2 phút trước, Biet ve CAD đã nói:

(defun C:T1( / e ssd x y d d0 d4 d2)
  (sssetfirst nil nil)
  (setq ssd (ssadd)
	e (car(entsel "\nPick Donut mau:"))
	)
  (vla-getboundingbox (vlax-ename->vla-object e) 'x 'y)
  (setq d0(distance (vlax-safearray->list x)(vlax-safearray->list y))
	d2 (cdr (assoc 41 (entget e)))
	)
(foreach e (acet-ss-to-list (ssget '((0 . "*POLYLINE")(70 . 1)(42 . 1.0))))
  (vla-getboundingbox (vlax-ename->vla-object e) 'x 'y)
  (setq d(distance (vlax-safearray->list x)(vlax-safearray->list y))
	d4 (cdr (assoc 41 (entget e)))
	)
  (if (and (equal d  d0) (equal d2  d4)) (ssadd e ssd) )
  )
  (sssetfirst nil ssd)
  )

Đây bạn

dạ,em cảm ơn bác rất nhiều ạ!chúc bác và các anh em trên diễn đàn dồi dào 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ạ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  

×