Đến nội dung


Hình ảnh
- - - - -

Lisp tính tổng các text


  • Please log in to reply
15 replies to this topic

#1 vuanhdung

vuanhdung

    Chưa sử dụng CAD

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

Đã gửi 31 March 2008 - 06:19 PM

em muon co lisp tính tổng được các chữ số trong bản vễ khi mình chọn đó, cac ban giup em voi em dang rat can. thank cac bac nhe
  • 0
Vũ Anh Dũng

#2 tienlagiay_dxt

tienlagiay_dxt

    biết lệnh trim

  • Members
  • PipPipPip
  • 191 Bài viết
Điểm đánh giá: 185 (tàm tạm)

Đã gửi 31 March 2008 - 08:14 PM

em muon co lisp tính tổng được các chữ số trong bản vễ khi mình chọn đó, cac ban giup em voi em dang rat can. thank cac bac nhe

Đây là code, mình lấy trên diễn đàn, bạn dùng thử xem

;;;-----------------------------------------
(defun CheckObj(e MyType) (equal (cdr (assoc 0 (entget e))) MyType))
;;;-----------------------------------------
(defun FilObj(ss1 MyType / ss2 i e)
(setq ss2 (ssadd) i 0)
(repeat (sslength ss1)
(setq e (ssname ss1 i) i (1+ i))
(if (CheckObj e MyType) (ssadd e ss2) )
)
(eval ss2)
)
;;;-----------------------------------------
(defun SelData( / OK)
(setq OK nil)
(while (not OK)
(prompt "\tChon cac text can tinh:")
(setq ss (FilObj (ssget) "TEXT"))
(if (> (sslength ss) 0) (setq OK T) (princ "\nDoi tuong chon khong phai text"))
)
)
;;;-----------------------------------------
(defun WriteRes(kq / OK e data)
(setq OK nil)
(while (not OK)
(setq e (car (entsel "\tChon text ghi ket qua:")))
(if (CheckObj e "TEXT") (setq OK T) (princ "\nDoi tuong chon khong phai text"))
)
(entmod (subst (cons 1 (rtos kq)) (assoc 1 (setq data (entget e))) data))
(princ)
)
;;;-----------------------------------------
(defun C:MUL( / i m e ss)
(SelData) (setq i 0 m 1.0)
(repeat (sslength ss) (setq e (ssname ss i) i (1+ i) m (* m (atof (cdr (assoc 1 (entget e)))))))
(WriteRes m)
)
;;;-----------------------------------------
(defun C:SUM( / i s e ss)
(SelData) (setq i 0 s 0.0)
(repeat (sslength ss) (setq e (ssname ss i) i (1+ i) s (+ s (atof (cdr (assoc 1 (entget e)))))))
(WriteRes s)
)
;;;-----------------------------------------
  • 1

#3 duong_nguyen411

duong_nguyen411

    biết zoom

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

Đã gửi 28 November 2008 - 08:31 AM

Đây là code, mình lấy trên diễn đàn, bạn dùng thử xem

;;;-----------------------------------------
(defun CheckObj(e MyType) (equal (cdr (assoc 0 (entget e))) MyType))
;;;-----------------------------------------
(defun FilObj(ss1 MyType / ss2 i e)
(setq ss2 (ssadd) i 0)
(repeat (sslength ss1)
(setq e (ssname ss1 i) i (1+ i))
(if (CheckObj e MyType) (ssadd e ss2) )
)
(eval ss2)
)
;;;-----------------------------------------
(defun SelData( / OK)
(setq OK nil)
(while (not OK)
(prompt "\tChon cac text can tinh:")
(setq ss (FilObj (ssget) "TEXT"))
(if (> (sslength ss) 0) (setq OK T) (princ "\nDoi tuong chon khong phai text"))
)
)
;;;-----------------------------------------
(defun WriteRes(kq / OK e data)
(setq OK nil)
(while (not OK)
(setq e (car (entsel "\tChon text ghi ket qua:")))
(if (CheckObj e "TEXT") (setq OK T) (princ "\nDoi tuong chon khong phai text"))
)
(entmod (subst (cons 1 (rtos kq)) (assoc 1 (setq data (entget e))) data))
(princ)
)
;;;-----------------------------------------
(defun C:MUL( / i m e ss)
(SelData) (setq i 0 m 1.0)
(repeat (sslength ss) (setq e (ssname ss i) i (1+ i) m (* m (atof (cdr (assoc 1 (entget e)))))))
(WriteRes m)
)
;;;-----------------------------------------
(defun C:SUM( / i s e ss)
(SelData) (setq i 0 s 0.0)
(repeat (sslength ss) (setq e (ssname ss i) i (1+ i) s (+ s (atof (cdr (assoc 1 (entget e)))))))
(WriteRes s)
)
;;;-----------------------------------------


Bác ơi dùng thế nào mà em không chọn đc text số, nó toàn báo "Doi tuong chon khong phai text Chon cac text can tinh:" thôi
  • 0

#4 Nguyen Hoanh

Nguyen Hoanh

    biết lệnh adcenter

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

Đã gửi 28 November 2008 - 08:48 AM

Bác ơi dùng thế nào mà em không chọn đc text số, nó toàn báo "Doi tuong chon khong phai text Chon cac text can tinh:" thôi

Có thể đối tượng của bạn là mtext,
bạn hãy dùng lệnh explode để phá vỡ nó thành text trước khi dùng lệnh.
  • 0

#5 hoai46ctt

hoai46ctt

    biết vẽ spline

  • Members
  • PipPip
  • 91 Bài viết
Điểm đánh giá: 33 (tàm tạm)

Đã gửi 28 November 2008 - 09:29 AM

Tương tự như lisp tính tổng, mình muốn có lisp tích các text khi được chọn, các bác giúp mình với, thanks.
  • 0
Lần 1: Một hai ba z...ô...zô.
Lần 2: Một hai ba z...ô...zô.
Lần...: Một hai ba z...ô...zô.
Lần 10: Một hai ba "z...a...za".
*************************
Ym! hoai46ctt

#6 Tue_NV

Tue_NV

    KS Võ Quang Tuệ

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

Đã gửi 28 November 2008 - 10:01 AM

Tương tự như lisp tính tổng, mình muốn có lisp tích các text khi được chọn, các bác giúp mình với, thanks.

Trong đoạn code ở trên của ban tienlagiay có lệnh MUL là lệnh tính tích các text khi được chọn rồi đấy.
  • 1

#7 xuanhai

xuanhai

    biết vẽ line

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

Đã gửi 29 November 2008 - 02:40 PM

Trong đoạn code ở trên của ban tienlagiay có lệnh MUL là lệnh tính tích các text khi được chọn rồi đấy.

Sao không thấy tính hiệu(-) nhỉ?
  • 0

#8 Tue_NV

Tue_NV

    KS Võ Quang Tuệ

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

Đã gửi 29 November 2008 - 03:16 PM

Sao không thấy tính hiệu(-) nhỉ?

Bạn xem ở đây nhé : http://www.cadviet.com/forum/index.php?showtopic=205&st=1300
  • 0

#9 tien2005

tien2005

    biết lệnh properties

  • Members
  • PipPipPipPip
  • 255 Bài viết
Điểm đánh giá: 92 (tàm tạm)

Đã gửi 06 June 2013 - 03:45 PM

mình đánh lệnh là j vậy

 Bạn hãy đọc bài số 1 ở đây

http://www.cadviet.c...u-dung-ma-lisp/


  • 0

#10 trinhngoctri

trinhngoctri

    biết vẽ pline

  • Members
  • PipPip
  • 62 Bài viết
Điểm đánh giá: -1 (bình thường)

Đã gửi 11 June 2013 - 08:01 AM

cảm ơn bạn 

tien2005 nhiều 
  • 0

#11 vsy

vsy

    Chưa sử dụng CAD

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

Đã gửi 10 July 2016 - 09:06 AM

Nhờ mấy A viết dùm lisp theo nội dung :

Ví dụ:

-Trong bản vẽ có nhiều text, Mtext, như: 1P56(5m), 1P56(3m), 2P110+2P56(3m), 2P110+2P56(2m)… sau khi dùng Polyline bao quang các text trên nó tính ra bảng thống kê khối lượng có 4 cột như sau:

1) Stt.(1,2,3...)

2) Tên text: (1P56; 2P110+2P56...)

3) Đơn vị: (m)

4) Khối lượng: (khối lượng là tổng số trong ngoặc tương ứng  với các text. Ví dụ: 1P56:8; 2P110+2P56: 5).

 

Và sau đó xuất ra Excel.

 

Xin cảm ơn!http://www.cadviet.c...new_block_2.dwg


  • 0

#12 Tot77

Tot77

    biết lệnh adcenter

  • Members
  • PipPipPipPipPipPipPip
  • 985 Bài viết
Điểm đánh giá: 494 (tốt)

Đã gửi 10 July 2016 - 10:27 AM

Cái này xuất ra excel file csv thì ok, còn lập bảng kẻ line thì chỉ viết ra kết quả thôi.

(defun c:ton(/ B1 B2 B3 FILE LI N SS TM VT X)
(setq ss (ssget '((0 . "TEXT")))
li nil
file (open (strcat (getvar "dwgprefix") "1.csv") "a")
v0 (ssname ss 0)
n 0
dd (getpoint "\nVi tri dat bang:"))
 
(foreach v (mapcar '(lambda(x) (cdr (assoc 1 (entget x))))
(vl-remove-if 'listp (mapcar 'cadr (ssnamex ss))))
(if (and (setq vt (vl-string-search "(" v)) (vl-string-search ")" v))
(progn
(setq b1 (substr v 1 (1- vt))
b2 (substr v (+ 2 vt))
b3 (vl-list->string (vl-remove-if '(lambda(x) (or (= 41 x) (<= 48 x 57))) (vl-string->list b2)))
)
(if (setq tm (assoc b1 li))
(setq li (subst (cons b1 (+ (cdr tm) (atof b2))) tm li))
(setq li (cons (cons b1 (atof b2)) li))
)
)
)
)
(foreach v li
(entmake (list (cons 0 "TEXT") (cons 10 dd) (cons 11 dd) (cons 40 (cdr (assoc 40 (entget v0)))) (cons 8 (cdr (assoc 8 (entget v0))))
(cons 41 (cdr (assoc 41 (entget v0)))) (cons 7 (cdr (assoc 7 (entget v0))))
(cons 72 (cdr (assoc 72 (entget v0)))) (cons 73 (cdr (assoc 73 (entget v0))))
(cons 1 (strcat (itoa (setq n (1+ n))) "\t\t\t" (car v) "\t\t\t" (strcase b3) "\t\t\t" (rtos (cdr v))))))
(write-line (strcat (itoa n) "," (car v) "," (strcase b3) "," (rtos (cdr v))) file)
(setq dd (polar dd (* 1.5 pi) (* 2 (cdr (assoc 40 (entget v0))))))
) 
(close file)
)

  • 0

#13 vsy

vsy

    Chưa sử dụng CAD

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

Đã gửi 10 July 2016 - 10:15 PM

Cảm ơn A Tot77 rất nhiều.

A đã giải quyết dùm e được vấn đề quang trọng nhất là thống kê khối lương.

A có thể giúp dùm e sửa thêm yêu cầu như sau:

- Text thống kê chia ra thành 4 cột (Thành 4 text riêng biệt).

- Hướng dẫn Cách xuất ra file Excel. 

 

E chưa rành về cad lắm nên Anh thông cảm.


  • 0

#14 enix

enix

    biết vẽ ellipse

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

Đã gửi 24 August 2016 - 08:09 AM

Đây là code, mình lấy trên diễn đàn, bạn dùng thử xem

;;;-----------------------------------------
(defun CheckObj(e MyType) (equal (cdr (assoc 0 (entget e))) MyType))
;;;-----------------------------------------
(defun FilObj(ss1 MyType / ss2 i e)
(setq ss2 (ssadd) i 0)
(repeat (sslength ss1)
(setq e (ssname ss1 i) i (1+ i))
(if (CheckObj e MyType) (ssadd e ss2) )
)
(eval ss2)
)
;;;-----------------------------------------
(defun SelData( / OK)
(setq OK nil)
(while (not OK)
(prompt "\tChon cac text can tinh:")
(setq ss (FilObj (ssget) "TEXT"))
(if (> (sslength ss) 0) (setq OK T) (princ "\nDoi tuong chon khong phai text"))
)
)
;;;-----------------------------------------
(defun WriteRes(kq / OK e data)
(setq OK nil)
(while (not OK)
(setq e (car (entsel "\tChon text ghi ket qua:")))
(if (CheckObj e "TEXT") (setq OK T) (princ "\nDoi tuong chon khong phai text"))
)
(entmod (subst (cons 1 (rtos kq)) (assoc 1 (setq data (entget e))) data))
(princ)
)
;;;-----------------------------------------
(defun C:MUL( / i m e ss)
(SelData) (setq i 0 m 1.0)
(repeat (sslength ss) (setq e (ssname ss i) i (1+ i) m (* m (atof (cdr (assoc 1 (entget e)))))))
(WriteRes m)
)
;;;-----------------------------------------
(defun C:SUM( / i s e ss)
(SelData) (setq i 0 s 0.0)
(repeat (sslength ss) (setq e (ssname ss i) i (1+ i) s (+ s (atof (cdr (assoc 1 (entget e)))))))
(WriteRes s)
)
;;;-----------------------------------------

Xin lỗi đào mộ nhưng có bác nào biết cách chỉnh lại xuất kết quả là không có thập phân không, mình cộng giá trị tròn mà xuất giá trị nó lấy tới 4 số thập phân .0000


  • -1

#15 Doan Van Ha

Doan Van Ha

    biết lệnh adcenter

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

Đã gửi 24 August 2016 - 08:11 AM

Có biết!


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

* Nếu đến bác sỹ 3 phút, bạn mất ít nhất 30 ngàn, đó là học phí phải trả cho họ. Đừng kỳ vọng quá nhiều vào Lisp free.


#16 jangboko

jangboko

    biết vẽ circle

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

Đã gửi 24 August 2016 - 01:34 PM

Có biết!

bác trả lời đúng trọng tâm luôn, không thừa cũng không thiếu,


  • 0