Đến nội dung


Hình ảnh
- - - - -

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


  • Please log in to reply
10 replies to this topic

#1 hhhhgggg

hhhhgggg

    biết dimedit

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

Đã gửi 11 June 2009 - 04:49 PM

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 !
  • 0
Hoàng Giang

#2 VoHoan

VoHoan

    biết lệnh move

  • Members
  • PipPipPip
  • 129 Bài viết
Điểm đánh giá: 8 (bình thường)

Đã gửi 11 June 2009 - 05:10 PM

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.c...g_chieu_dai.rar
  • 1

#3 hhhhgggg

hhhhgggg

    biết dimedit

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

Đã gửi 12 June 2009 - 08:03 AM

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

Cảm ơn bạn nhé. Mình tự làm được rồi !!!
  • 0
Hoàng Giang

#4 xuannhan1978

xuannhan1978

    biết zoom

  • Members
  • Pip
  • 10 Bài viết
Điểm đánh giá: 0 (bình thường)

Đã gửi 21 April 2012 - 04:50 PM

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

#5 Doan Van Ha

Doan Van Ha

    biết lệnh adcenter

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

Đã gửi 21 April 2012 - 04:54 PM

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


#6 xuannhan1978

xuannhan1978

    biết zoom

  • Members
  • Pip
  • 10 Bài viết
Điểm đánh giá: 0 (bình thường)

Đã gửi 22 April 2012 - 08:55 AM

;-----------------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ẽ .
  • 0

#7 Doan Van Ha

Doan Van Ha

    biết lệnh adcenter

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

Đã gửi 22 April 2012 - 09:18 AM

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


#8 xuannhan1978

xuannhan1978

    biết zoom

  • Members
  • Pip
  • 10 Bài viết
Điểm đánh giá: 0 (bình thường)

Đã gửi 22 April 2012 - 09:27 AM

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

#9 ketxu

ketxu

    Copier - Paster - Editor

  • Moderator
  • PipPipPipPipPipPipPip
  • 5682 Bài viết
Điểm đánh giá: 2605 (tuyệt vời)

Đã gửi 22 April 2012 - 10:10 AM

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 ạ ^^
  • 0

Thành viên nhóm CadMagic.
Mời bạn ghé thăm facebook nhóm - Page viết lisp theo yêu cầu  :
CAD MAGIC


#10 Doan Van Ha

Doan Van Ha

    biết lệnh adcenter

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

Đã gửi 22 April 2012 - 10:52 AM

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

ketxu

    Copier - Paster - Editor

  • Moderator
  • PipPipPipPipPipPipPip
  • 5682 Bài viết
Điểm đánh giá: 2605 (tuyệt vời)

Đã gửi 22 April 2012 - 11:05 AM

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

Thành viên nhóm CadMagic.
Mời bạn ghé thăm facebook nhóm - Page viết lisp theo yêu cầu  :
CAD MAGIC