Chuyển đến nội dung
Diễn đàn CADViet
  • Thông báo

    • Nguyen Hoanh

      CADViet đã hoàn tất nâng cấp   14/09/2017

      Chào các bạn, CADViet đã hoàn tất việc nâng cấp lên phiên bản mới. Tất cả các chức năng đã hoạt động theo kỳ vọng của ban quản trị. Nếu có vấn đề gì cần phản hồi, các bản post ở đây nhé: Trân trọng, Nguyễn Hoành.
Đăng nhập để thực hiện theo  
hhhhgggg

Thêm dòng lệnh vào Lisp tính tổng chiều dài Line, Pline ???

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

hhhhgggg    30

Em có cái Lisp tính tổng chiều dài các Line,

bi jờ nó đang chạy như sau :

Command: da

Select object: Chọn vào Line

tong chieu dai: 50

 

Sửa thành

Command: da

Select object: Chọn vào Line

tong chieu dai: 50

Select object to add value: ( Chọn Text để ghi kết quả)

 

End.

 

CODE

;========= Tong chieu dai Line...=========

(defun C:da (/ tot_len ss e_name e_record e_type)

(setq tot_len 0.0)

(setq ss (ssget))

(if (null ss)

(exit)

)

(while (> (sslength ss) 0)

(setq e_name (ssname ss 0))

(setq e_record (entget e_name))

(setq e_type (cdr (assoc '0 e_record)))

(cond ((wcmatch e_type "LINE,ARC,CIRCLE,POLYLINE,LWPOLYLINE,ELLIPSE,SPLINE")

(command "lengthen" e_name "")

(setq tot_len (+ tot_len (getvar "PERIMETER")))

(ssdel e_name ss)

)

((wcmatch e_type "MLINE") (add_mline))

(e_type (ssdel e_name ss))

)

)

 

(prompt (strcat "\nTong chieu dai: " (rtos tot_len 2 2)))

(princ)

)

(princ "\n Hoang Giang")

(princ)

 

Các bác sửa giúp em với !!!! Thanks !

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
VoHoan    8
Em có cái Lisp tính tổng chiều dài các Line,

bi jờ nó đang chạy như sau :

Command: da

Select object: Chọn vào Line

tong chieu dai: 50

 

Sửa thành

Command: da

Select object: Chọn vào Line

tong chieu dai: 50

Select object to add value: ( Chọn Text để ghi kết quả)

 

End.

 

CODE

;========= Tong chieu dai Line...=========

(defun C:da (/ tot_len ss e_name e_record e_type)

(setq tot_len 0.0)

(setq ss (ssget))

(if (null ss)

(exit)

)

(while (> (sslength ss) 0)

(setq e_name (ssname ss 0))

(setq e_record (entget e_name))

(setq e_type (cdr (assoc '0 e_record)))

(cond ((wcmatch e_type "LINE,ARC,CIRCLE,POLYLINE,LWPOLYLINE,ELLIPSE,SPLINE")

(command "lengthen" e_name "")

(setq tot_len (+ tot_len (getvar "PERIMETER")))

(ssdel e_name ss)

)

((wcmatch e_type "MLINE") (add_mline))

(e_type (ssdel e_name ss))

)

)

 

(prompt (strcat "\nTong chieu dai: " (rtos tot_len 2 2)))

(princ)

)

(princ "\n Hoang Giang")

(princ)

 

Các bác sửa giúp em với !!!! Thanks !

Bạn thử dùng list này xem sao nhe: http://www.cadviet.com/upfiles/Tinh_va_ghi...g_chieu_dai.rar

  • 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
Doan Van Ha    2.678

Nhờ các Bác có thể bổ sung lisp của Bác VoHoan tính tổng chiều dài "LINE,ARC,CIRCLE,POLYLINE,LWPOLYLINE,ELLIPSE,SPLINE" nằm trong 1 vùng polyline khép kín được không.

Bổ sung cái gì?

Lisp đó ở đâ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

;-----------------Tinh tong chieu dai c¸c doan thang----------------------------

(defun C:da (/ tot_len ss e_name e_record e_type)

(setq tot_len 0.0)

(prompt "\nChon cac doan can tinh chieu tong chieu dai: ")

(setq ss (ssget))

(setq diem (getpoint "\nChän vÞ trÝ ghi tæng chiÒu dµi"))

(setq sdt 0)

(if (null ss)

(exit)

)

(while (> (sslength ss) 0)

(setq e_name (ssname ss 0))

(setq e_record (entget e_name))

(setq e_type (cdr (assoc '0 e_record)))

(cond ((wcmatch e_type "LINE,ARC,CIRCLE,POLYLINE,LWPOLYLINE,ELLIPSE,SPLINE")

(command "lengthen" e_name "")

(setq tot_len (+ tot_len (getvar "PERIMETER")))

(ssdel e_name ss)

(setq sdt (1+ sdt))

)

((wcmatch e_type "MLINE") (add_mline))

(e_type (ssdel e_name ss))

)

)

(setq ttong (strcat "\nTæng chiÒu dµi: " (rtos tot_len 2 3)))

(command "TEXT" diem "" "" ttong)

(prompt (strcat "\nChieu dai trung binh <" (itoa sdt) " doan>: " (rtos (/ tot_len sdt) 2 3)))

(princ)

)

 

 

===========================================================

Khi các line, polyline của em nằm trong 1 đường bao kín (là 1 đường Polyline khép kín ) khi em chọn đường bao polyline khép kín sẽ cho ra kết quả tổng chiều dài của các line, polyline nằm trong đường bao đó.Không hiểu sao mình không up được ví dụ lên thì sẽ .

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    2.678

;-----------------Tinh tong chieu dai c¸c doan thang----------------------------

===========================================================

Khi các line, polyline của em nằm trong 1 đường bao kín (là 1 đường Polyline khép kín ) khi em chọn đường bao polyline khép kín sẽ cho ra kết quả tổng chiều dài của các line, polyline nằm trong đường bao đó.Không hiểu sao mình không up được ví dụ lên thì sẽ .

Nếu Lwpolyline không chứa arc thì chọn chính xác 100% được. Nếu lwpolyline chứa arc thì mức chính xác khó đạt tuyệt đối.

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
ketxu    2.652

Nếu Lwpolyline không chứa arc thì chọn chính xác 100% được. Nếu lwpolyline chứa arc thì mức chính xác khó đạt tuyệt đối.

Ketxu đang nghĩ là có thể được bác ạ ^^

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    2.678

Vâng Bác bổ sung lisp đó giúp em nhé!

Đây bạn: Lisp tính tổng chiều dài các đối tượng trong 1 curve kín.

;Doan Van Ha - CADViet.com - Ngay 22/4/2012
;Muc dich: Tinh tong chieu dai cac doi tuong trong 1 vung kin.
(defun C:HA ( / e ss p cdai entlst)
(command "undo" "be") (vl-load-com)
(setq osm (getvar "osmode") cmd (getvar "cmdecho") dmz (getvar "dimzin"))
(if
 (and
  (setq e (car (entsel "\nChon curve kin Circle/Ellipse/Spline/Lwpolyline/Polyline: ")))
  (member (cdr (assoc 0 (entget e))) '("CIRCLE" "ELLIPSE" "SPLINE" "LWPOLYLINE" "POLYLINE")))
 (acet-ss-redraw (setq ss (SelectInside e 100)) 3))
(setq p (getpoint "\nChon vi tri ghi tong chieu dai: "))
(mapcar 'setvar '("osmode" "cmdecho" "dimzin") '(0 0 0))
(setq entlst (vl-remove-if 'listp (mapcar 'cadr (ssnamex ss))))
(setq cdai 0)
(foreach ent entlst
 (setq cdai (+ cdai (vlax-curve-getDistAtParam ent (vlax-curve-getEndParam ent)))))
(if (= 0 (cdr (assoc 40 (tblsearch "style" (getvar "textstyle")))))
 (command "TEXT" p "" "" (rtos cdai 2 2))
 (command "TEXT" p "" (rtos cdai 2 2)))
(princ (strcat "\nChieu dai trung binh " (itoa (length entlst)) " curve la: " (rtos (/ cdai (length entlst)) 2 2)))
(mapcar 'setvar '("osmode" "cmdecho" "dimzin") (list osm cmd dmz))
(acet-ss-redraw ss 4)
(command "undo" "end")
(princ))
(defun SelectInside ( entity acc / i j l )	;by Lee Mac
(cond
 ((vlax-curve-isclosed entity)
  (setq i (/ (vlax-curve-getdistatparam entity (vlax-curve-getendparam entity)) acc) j (- i))
  (repeat (fix acc)
(setq l (cons (vlax-curve-getpointatdist entity (setq j (+ j i))) l)))
  (ssget "_WP" l '((0 . "LINE,ARC,CIRCLE,POLYLINE,LWPOLYLINE,ELLIPSE,SPLINE"))))))

@Ketxu: Chỉ biết cách vi phân curve thôi (như đã có trong lisp này). Và mức độ chính xác tuỳ thuộc khoảng cách vi phân. Không biết Ket có cách hay hơn không?

P/S: đã sửa lại highlight cho dễ nhìn hơn grip.

  • 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
ketxu    2.652

Đó là "nhìn" bác ạ ^^ Sau khi ssget rồi thì highlight nó lên, người dùng phải check thôi :D

  • 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  

×