Đến nội dung


Hình ảnh
- - - - -

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


  • Please log in to reply
14 replies to this topic

#1 NguyenNgocSon

NguyenNgocSon

    biết dimbaseline

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

Đã gửi 28 October 2012 - 03:00 PM

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)
)
;;;-------------------------------------------------------------------

  • 0

#2 Tue_NV

Tue_NV

    KS Võ Quang Tuệ

  • Moderator
  • PipPipPipPipPipPipPip
  • 4296 Bài viết
Điểm đánh giá: 3804 (đỉnh cao)

Đã gửi 28 October 2012 - 03:09 PM

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

#3 NguyenNgocSon

NguyenNgocSon

    biết dimbaseline

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

Đã gửi 28 October 2012 - 05:43 PM

Có cách nào sử lý làm tròn L theo đối tượng không ?
  • 0

#4 Doan Van Ha

Doan Van Ha

    biết lệnh adcenter

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 5447 Bài viết
Điểm đánh giá: 2624 (tuyệt vời)

Đã gửi 28 October 2012 - 06:34 PM

Có cách nào sử lý làm tròn L theo đối tượng không ?

Câu hỏi khó hiểu quá bạn ơi!
  • 0

* Chỉ nên yêu cầu Lisp khi bạn làm việc đó mất cả ngày nhưng họ chỉ viết 1 giờ. Đừng nêu yêu cầu Lisp khi bạn chỉ làm 1 giờ nhưng bắt họ phải mất cả ngày.

* Nhờ viết lisp cũng như đi khám bệnh. Chỉ gởi căn cước và than sắp chết thì không bác sỹ nào cứu sống được.


#5 NguyenNgocSon

NguyenNgocSon

    biết dimbaseline

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

Đã gửi 28 October 2012 - 06:57 PM

Bác cho em hỏi hàm Vla lấy góc của PL, LWPL hoặc Line ?
  • 0

#6 Doan Van Ha

Doan Van Ha

    biết lệnh adcenter

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 5447 Bài viết
Điểm đánh giá: 2624 (tuyệt vời)

Đã gửi 28 October 2012 - 07:56 PM

Lấy điểm đầu và điểm cuối của 1 curve:
(vlax-curve-getStartPoint ent)
(vlax-curve-getEndPoint ent)
  • 1

* Chỉ nên yêu cầu Lisp khi bạn làm việc đó mất cả ngày nhưng họ chỉ viết 1 giờ. Đừng nêu yêu cầu Lisp khi bạn chỉ làm 1 giờ nhưng bắt họ phải mất cả ngày.

* Nhờ viết lisp cũng như đi khám bệnh. Chỉ gởi căn cước và than sắp chết thì không bác sỹ nào cứu sống được.


#7 NguyenNgocSon

NguyenNgocSon

    biết dimbaseline

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

Đã gửi 30 October 2012 - 10:43 AM

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 ?
  • 0

#8 Doan Van Ha

Doan Van Ha

    biết lệnh adcenter

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 5447 Bài viết
Điểm đánh giá: 2624 (tuyệt vời)

Đã gửi 30 October 2012 - 10:47 AM

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?
  • 1

* Chỉ nên yêu cầu Lisp khi bạn làm việc đó mất cả ngày nhưng họ chỉ viết 1 giờ. Đừng nêu yêu cầu Lisp khi bạn chỉ làm 1 giờ nhưng bắt họ phải mất cả ngày.

* Nhờ viết lisp cũng như đi khám bệnh. Chỉ gởi căn cước và than sắp chết thì không bác sỹ nào cứu sống được.


#9 NguyenNgocSon

NguyenNgocSon

    biết dimbaseline

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

Đã gửi 30 October 2012 - 10:52 AM

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 !
  • 0

#10 Doan Van Ha

Doan Van Ha

    biết lệnh adcenter

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 5447 Bài viết
Điểm đánh giá: 2624 (tuyệt vời)

Đã gửi 30 October 2012 - 11:01 AM

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?
  • 1

* Chỉ nên yêu cầu Lisp khi bạn làm việc đó mất cả ngày nhưng họ chỉ viết 1 giờ. Đừng nêu yêu cầu Lisp khi bạn chỉ làm 1 giờ nhưng bắt họ phải mất cả ngày.

* Nhờ viết lisp cũng như đi khám bệnh. Chỉ gởi căn cước và than sắp chết thì không bác sỹ nào cứu sống được.


#11 NguyenNgocSon

NguyenNgocSon

    biết dimbaseline

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

Đã gửi 30 October 2012 - 11:05 AM

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 !
  • 0

#12 Doan Van Ha

Doan Van Ha

    biết lệnh adcenter

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 5447 Bài viết
Điểm đánh giá: 2624 (tuyệt vời)

Đã gửi 30 October 2012 - 02:41 PM


;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))))

  • 1

* Chỉ nên yêu cầu Lisp khi bạn làm việc đó mất cả ngày nhưng họ chỉ viết 1 giờ. Đừng nêu yêu cầu Lisp khi bạn chỉ làm 1 giờ nhưng bắt họ phải mất cả ngày.

* Nhờ viết lisp cũng như đi khám bệnh. Chỉ gởi căn cước và than sắp chết thì không bác sỹ nào cứu sống được.


#13 NguyenNgocSon

NguyenNgocSon

    biết dimbaseline

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

Đã gửi 31 October 2012 - 01:42 PM

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 !
  • 0

#14 Doan Van Ha

Doan Van Ha

    biết lệnh adcenter

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 5447 Bài viết
Điểm đánh giá: 2624 (tuyệt vời)

Đã gửi 31 October 2012 - 01:47 PM

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.
  • 1

* Chỉ nên yêu cầu Lisp khi bạn làm việc đó mất cả ngày nhưng họ chỉ viết 1 giờ. Đừng nêu yêu cầu Lisp khi bạn chỉ làm 1 giờ nhưng bắt họ phải mất cả ngày.

* Nhờ viết lisp cũng như đi khám bệnh. Chỉ gởi căn cước và than sắp chết thì không bác sỹ nào cứu sống được.


#15 NguyenNgocSon

NguyenNgocSon

    biết dimbaseline

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

Đã gửi 31 October 2012 - 04:27 PM

Cám ơn bạn. không để ý thêm hàm itoa là oke :)
  • 0