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

[Nhờ chỉnh sửa lisp] thống kê đối tượng theo chiều dài

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

Mình có lisp này: do lượm lặt và chỉnh sửa code

Lisp tkd có chức năng thống kê các đối tượng có cùng chiều dài

Khi thực hiện nếu có 5 đối tượng cùng có chiều dài 450 ( 3 line, 2 LWPL)

Nhưng chỉ hiện thị 3 line ?

Nhờ mọi người xem giúp

Cám ơn !

; Ham lay chieu dai doi tuong
(defun Length1(e) (vlax-curve-getDistAtParam e (vlax-curve-getEndParam e)))
 ;;;--------------------------------------------------------------------
(defun c:tkd ()
(prompt "\n Chon cac doi tuong can thong ke")
 (setq ss (ssget (list (cons 0 "LINE,ARC,CIRCLE,POLYLINE,LWPOLYLINE,ELLIPSE,SPLINE")))
d (getdist "\n Nh\U+1EADp chi\U+1EC1u d\U+00E0i \U+0111\U+1ED1i t\U+01B0\U+1EE3ng c\U+1EA7n th\U+1ED1ng k\U+00EA:")
i 0)
(vl-load-com)
(while (setq e (ssname ss 0))
(setq L (length1 e))
(if (= L d)
 	(setq i (1+ i)))
(ssdel e ss)
)
(alert (strcat "C\U+00F3 " (itoa i) " \U+0111\U+1ED1i t\U+01B0\U+1EE3ng c\U+00F3 kho\U+1EA3ng c\U+00E1ch = " (rtos d) " "))
 (princ)
)
 ;;;-------------------------------------------------------------------

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ình có lisp này: do lượm lặt và chỉnh sửa code

Lisp tkd có chức năng thống kê các đối tượng có cùng chiều dài

Khi thực hiện nếu có 5 đối tượng cùng có chiều dài 450 ( 3 line, 2 LWPL)

Nhưng chỉ hiện thị 3 line ?

Nhờ mọi người xem giúp

Cám ơn !

; Ham lay chieu dai doi tuong
(defun Length1(e) (vlax-curve-getDistAtParam e (vlax-curve-getEndParam e)))
 ;;;--------------------------------------------------------------------
(defun c:tkd ()
(prompt "\n Chon cac doi tuong can thong ke")
 (setq ss (ssget (list (cons 0 "LINE,ARC,CIRCLE,POLYLINE,LWPOLYLINE,ELLIPSE,SPLINE")))
d (getdist "\n Nh\U+1EADp chi\U+1EC1u d\U+00E0i \U+0111\U+1ED1i t\U+01B0\U+1EE3ng c\U+1EA7n th\U+1ED1ng k\U+00EA:")
i 0)
(vl-load-com)
(while (setq e (ssname ss 0))
(setq L (length1 e))
(if (= L d)
 	(setq i (1+ i)))
(ssdel e ss)
)
(alert (strcat "C\U+00F3 " (itoa i) " \U+0111\U+1ED1i t\U+01B0\U+1EE3ng c\U+00F3 kho\U+1EA3ng c\U+00E1ch = " (rtos d) " "))
 (princ)
)
 ;;;-------------------------------------------------------------------

Do hàm (= L d) . Do độ dài giữa các obj có sai số . Bạn nên thay bằng hàm equal có fuzz (sai số)

Tue_NV không có CAD để test. Bạn kiểm tra lại xem

  • 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

Bạn cho mình hỏi giờ mình muốn chọn toàn bộ các đối tượng (PL,LWPL,Line) trên bản vẽ có cùng chiều dài và góc nghiêng có hàm nào không ?

1). Không có hàm lisp cơ bản, nhưng có thể viết được hàm để chọn các object cùng lenght.

2). Khái niệm cùng góc nghiêng làm sao áp dụng cho PL, LWPL khi chúng gồm nhiều đoạn và nhiều arc?

  • 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

1). Không có hàm lisp cơ bản, nhưng có thể viết được hàm để chọn các object cùng lenght.

2). Khái niệm cùng góc nghiêng làm sao áp dụng cho PL, LWPL khi chúng gồm nhiều đoạn và nhiều arc?

Cám ơn bạn.

Ý 2: Mình chỉ giải quyết cho trường hợp PL, LWPL chỉ có 2 điểm đầu và cuối.

Nếu bác quick code giùm thì cám ơn quá !

Thân !

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

OK, đợi tí! Bạn muốn len do user nhập vào? Và ang do user nhập vào? Ang là đô/phút/giây hay radian? Muốn là 1 hàm con hay 1 thủ tục gọi lệnh?

  • 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

OK, đợi tí! Bạn muốn len do user nhập vào? Và ang do user nhập vào? Ang là đô/phút/giây hay radian? Muốn là 1 hàm con hay 1 thủ tục gọi lệnh?

Mình muốn hàm con để sử dụng nhiều cho các code khác?

Len do nhập vào, góc nhập vào: độ/phút/giây.

Hoặc có thêm lựa chọn: chọn đối tượng gốc (lisp lấy Len, góc của đối tượng này làm chuẩn) thi chuẩn luôn

Cám ơn bạn !

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
;Doan Van Ha - CADViet.com - Ngay 30/10/2012
;Muc dich: Chon Line,Lwpolyline theo len va ang.
(defun ss-by-len-ang (ent ss / len ang i elst ss1 goc)
(setq len (vlax-curve-getDistAtParam ent (vlax-curve-getEndParam ent)))
(setq ang (angle (vlax-curve-getStartPoint ent) (vlax-curve-getEndPoint ent)))
(setq i (sslength ss) ss1 (ssadd))
(while (setq ename (ssname ss (setq i (1- i))))
 (setq elst (entget ename))
 (if
  (and
   (equal (vlax-curve-getDistAtParam ename (vlax-curve-getEndParam ename)) len 1E-8)
   (or
(equal (setq goc (angle (vlax-curve-getStartPoint ename) (vlax-curve-getEndPoint ename))) ang 1E-8)
(equal goc (- ang pi) 1E-8)
(equal goc (+ ang pi) 1E-8)))
  (setq ss1 (ssadd ename ss1))))
ss1)
;-----
(defun C:TEST( / ent ss)
(setq ent (car (entsel "\nChon doi tuong chuan: ")))
(setq ss (ssget '((0 . "LINE,LWPOLYLINE"))))
(if (and ent ss)
 (sssetfirst nil (ss-by-len-ang ent ss))))

  • 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

Cho mình hỏi: đếm số đối tượng sau

(sssetfirst nil (ss-by-len-ang ent ss)))

làm thế nào ?Mình thử:

(setq k (sslength (ss-by-len-ang ent ss)))

(alert (strcat "C\U+00F3" k ))

báo lỗi.Cám ơn !

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: đếm số đối tượng sau

(sssetfirst nil (ss-by-len-ang ent ss)))

làm thế nào ?Mình thử:

(setq k (sslength (ss-by-len-ang ent ss)))

(alert (strcat "C\U+00F3" k ))

báo lỗi.Cám ơn !

k là 1 số nguyên. Bạn xem lại hàm strcat nhé: nó nối 2 hoặc nhiều string.

  • 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

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  

×