Đến nội dung


Hình ảnh
- - - - -

[Yêu cầu] Lisp lọc các số sau chữ L, rồi tính tổng.


  • Please log in to reply
31 replies to this topic

#21 bach1212

bach1212

    biết lệnh trim

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

Đã gửi 12 April 2012 - 04:47 PM

Nhiều khi nói ra thì hơi quê (mà quê thiệt!): tôi rất sợ dùng 3 hàm: vl-string-trim, vl-string-left-trim, vl-string-right-trim, vì cú pháp nó dễ nhầm lẫn.
Nhân tiện, chơi luôn cái lisp tính chung cho các loại đường kính luôn (cầu mong nó không lỗi!)


(defun C:HA( / entlst dialst)
(princ "\nChon tat ca doi tuong can thong ke...")
(setq entlst (vl-remove-if 'listp (mapcar 'cadr (ssnamex (ssget '((0 . "TEXT") (1 . "D*#*`,L#*")))))))
(foreach ent entlst
(setq dialst (cons (atoi (phai_str (trai_str (cdr (assoc 1 (entget ent))) ",") "D")) dialst)))
(setq dialst (vl-sort dialst '<))
(foreach dia dialst
(princ (strcat "\nD" (itoa dia) " = " (rtos (HA dia entlst) 2 2)))
(princ)))
(defun HA(dia lstent) ;muon code cua Ketxu. Thanks!
(apply '+ (mapcar '(lambda(x) (atof (if (wcmatch (acet-dxf 1 (entget x)) (strcat "D" (itoa dia) "`,L*")) (phai_str (acet-dxf 1 (entget x)) ",L") "0"))) entlst)))
(defun TRAI_STR(str str1) (if (acet-str-find str1 str) (substr str 1 (- (acet-str-find str1 str) 1))))
(defun PHAI_STR(str str1) (if (TRAI_STR str str1) (substr str (+ 1 (strlen str1) (strlen (TRAI_STR str str1))))))

E thay tất cả các kí tự "D" trong code của bác thành "B" mà sao nó không nhận đối tượng có dạng tượng tự: D400,L30B400,L30?
Vì bản vẽ của e cần thống kê cả dạng B400,L30 này nữa. Mong bác chỉ giáo
  • 0

Một môn tập luyện mang lại vô vàn lợi ích sức khỏe cho mọi người, nhiều bệnh tật nan y đều được chữa khỏi, hoàn toàn miễn phí. Hiệu quả chữa khỏi bệnh tật của nó lên đến hơn 90%.
Tài liệu tại đây: http://phapluan.org/

Rất vui được làm quen với mọi người trên facebook:
https://www.facebook...67946371&type=1

 

 


#22 Tue_NV

Tue_NV

    KS Võ Quang Tuệ

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

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

E thay tất cả các kí tự "D" trong code của bác thành "B" mà sao nó không nhận đối tượng có dạng tượng tự: D400,L30B400,L30?
Vì bản vẽ của e cần thống kê cả dạng B400,L30 này nữa. Mong bác chỉ giáo

Bạn đã thay code như thế nào? Phiền bạn post lên code mà bạn đã sửa lên đây nhé.
Chúc vui!
  • 0

#23 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 12 April 2012 - 04:54 PM

E thay tất cả các kí tự "D" trong code của bác thành "B" mà sao nó không nhận đối tượng có dạng tượng tự: D400,L30B400,L30?
Vì bản vẽ của e cần thống kê cả dạng B400,L30 này nữa. Mong bác chỉ giáo

Coi chừng bạn replace nhầm. Gởi code lên xem đi!
Trong lisp có 4 chữ D. Bạn lần lượt thay từng chữ D bởi B thì khỏi sợ nhầm.
  • 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.


#24 bach1212

bach1212

    biết lệnh trim

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

Đã gửi 12 April 2012 - 05:02 PM


;; free lisp from cadviet.com
;;; this lisp was downloaded from http://www.cadviet.com/forum/index.php?showtopic=62723&pid=193865&st=0&#entry193865
(defun C:tgr( / entlst dialst)
(princ "\nChon tat ca doi tuong can thong ke...")
(setq entlst (vl-remove-if 'listp (mapcar 'cadr (ssnamex (ssget '((0 . "TEXT") (1 . "B*#*`,L#*")))))))
(foreach ent entlst
(setq dialst (cons (atoi (phai_str (trai_str (cdr (assoc 1 (entget ent))) ",") "B")) dialst)))
(setq dialst (vl-sort dialst '<))
(foreach dia dialst
(princ (strcat "\nB" (itoa dia) " = " (rtos (HA dia entlst) 2 2)))
(princ)))
(defun HA(dia lstent) ;muon code cua Ketxu. Thanks!
(apply '+ (mapcar '(lambda(x) (atof (if (wcmatch (acet-dxf 1 (entget x)) (strcat "B" (itoa dia) "`,L*")) (phai_str (acet-dxf 1 (entget x)) ",L") "0"))) entlst)))
(defun TRAI_STR(str str1) (if (acet-str-find str1 str) (substr str 1 (- (acet-str-find str1 str) 1))))
(defun PHAI_STR(str str1) (if (TRAI_STR str str1) (substr str (+ 1 (strlen str1) (strlen (TRAI_STR str str1))))))

4 chữ D đã được thay = 4 chữ B
Bác xem sao??
  • 0

Một môn tập luyện mang lại vô vàn lợi ích sức khỏe cho mọi người, nhiều bệnh tật nan y đều được chữa khỏi, hoàn toàn miễn phí. Hiệu quả chữa khỏi bệnh tật của nó lên đến hơn 90%.
Tài liệu tại đây: http://phapluan.org/

Rất vui được làm quen với mọi người trên facebook:
https://www.facebook...67946371&type=1

 

 


#25 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 12 April 2012 - 05:29 PM


;; free lisp from cadviet.com
;;; this lisp was downloaded from http://www.cadviet.com/forum/index.php?showtopic=62723&pid=193865&st=0&#entry193865
(defun C:tgr( / entlst dialst)
(princ "\nChon tat ca doi tuong can thong ke...")
(setq entlst (vl-remove-if 'listp (mapcar 'cadr (ssnamex (ssget '((0 . "TEXT") (1 . "B*#*`,L#*")))))))
(foreach ent entlst
(setq dialst (cons (atoi (phai_str (trai_str (cdr (assoc 1 (entget ent))) ",") "B")) dialst)))
(setq dialst (vl-sort dialst '<))
(foreach dia dialst
(princ (strcat "\nB" (itoa dia) " = " (rtos (HA dia entlst) 2 2)))
(princ)))
(defun HA(dia lstent) ;muon code cua Ketxu. Thanks!
(apply '+ (mapcar '(lambda(x) (atof (if (wcmatch (acet-dxf 1 (entget x)) (strcat "B" (itoa dia) "`,L*")) (phai_str (acet-dxf 1 (entget x)) ",L") "0"))) entlst)))
(defun TRAI_STR(str str1) (if (acet-str-find str1 str) (substr str 1 (- (acet-str-find str1 str) 1))))
(defun PHAI_STR(str str1) (if (TRAI_STR str str1) (substr str (+ 1 (strlen str1) (strlen (TRAI_STR str str1))))))

4 chữ D đã được thay = 4 chữ B
Bác xem sao??

Bạn đã thay đúng. Bạn thay TEXT bởi *TEXT để dùng cho mtext luôn xem sao. Tôi test thì ok. Nếu không được nữa thì post bản vẽ lên thô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.


#26 bach1212

bach1212

    biết lệnh trim

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

Đã gửi 12 April 2012 - 09:29 PM

Bạn đã thay đúng. Bạn thay TEXT bởi *TEXT để dùng cho mtext luôn xem sao. Tôi test thì ok. Nếu không được nữa thì post bản vẽ lên thôi.

B400,L30 của e rõ ràng copy từ D400,L30 ra (là text). Thay B vào, nếu không đổi sang *TEXT thì không nhận B400,L30, trong khi nếu là D thì vẫn nhận D400,L30. Lạ thía....
Cám ơn bác, đổi *TEXT xong, nó nhận em B400,L30 của e roài. :D
  • 0

Một môn tập luyện mang lại vô vàn lợi ích sức khỏe cho mọi người, nhiều bệnh tật nan y đều được chữa khỏi, hoàn toàn miễn phí. Hiệu quả chữa khỏi bệnh tật của nó lên đến hơn 90%.
Tài liệu tại đây: http://phapluan.org/

Rất vui được làm quen với mọi người trên facebook:
https://www.facebook...67946371&type=1

 

 


#27 Demigod

Demigod

    biết pan

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

Đã gửi 19 April 2012 - 11:04 AM

Tặng mọi người Lisp giải bài toán này.
Lệnh: Csum
- Xuất thống kê (txt hoặc excel).
- Có 2 tùy chọn để nhặt đối tượng (TEXT và MTEXT)
M: chọn 1 text mẫu -> trình tự động nhặt tất cả
C: Chọn trên màn hình
- Xuất txt chọn: T
Xuất Excel chọn: E

Good Luck :D.


(defun CreateDataList(text / i truoc sau)
(vl-load-com)
(setq i (1+ (vl-string-search "," text))
truoc (substr text 1 (1- i))
sau (substr text (1+ i) (- (strlen text) i))
sau (vl-string-subst "" " " sau)
sau (vl-string-subst "" "l" sau)
sau (vl-string-subst "" "L" sau)
)
(list truoc sau)
)
;======================================================================================================
(defun GetObject(/ kw)
(initget "M C")
(if (= key nil)
(progn
(setq kw (getkword (strcat "\nKi\U+1EC3u ch\U+1ECDn [M\U+1EABu/Ch\U+1ECDn \U+0111\U+1ED1i t\U+01B0\U+1EE3ng] <C>: ")))
(if (= kw nil) (setq kw "C"))
)
(progn
(setq kw (getkword (strcat "\nKi\U+1EC3u ch\U+1ECDn [M\U+1EABu/Ch\U+1ECDn \U+0111\U+1ED1i t\U+01B0\U+1EE3ng] <" key ">: ")))
(if (= kw nil) (setq kw key))
)
)
(setq key kw)
(defun Mselect(/ chk mau ssx)
(setq chk T)
(while chk
(setq mau (car (entsel "\nCh\U+1ECDn \U+0111\U+1ED1i t\U+01B0\U+1EE3ng m\U+1EABu: ")))
(if mau (setq chk nil))
)
(setq ssx (ssget "_X" (list
(cons -4 "<OR")
(cons 0 "TEXT")
(cons 0 "MTEXT")
(cons -4 "OR>")
(cons 8 (cdr (assoc 8 (entget mau))))
(cons -4 "<OR")
(cons 1 "*#*`,L#*")
(cons 1 "*#*`, L#*")
(cons -4 "OR>")
)
)
)
)
(defun Cselect(/ ssx)
(setq ssx (ssget (list
(cons -4 "<OR")
(cons 0 "TEXT")
(cons 0 "MTEXT")
(cons -4 "OR>")
(cons -4 "<OR")
(cons 1 "*#*`,L#*")
(cons 1 "*#*`, L#*")
(cons -4 "OR>")
)
)
)
)
(cond
((= kw "C") (setq ssx (Cselect)))
((= kw "M") (setq ssx (Mselect)))
)
ssx
)
;======================================================================================================
(defun Summary(/ ssx DataList di AllType Dtype TypeI xi Tsum ExportData)
(setq ssx (GetObject)
DataList '()
di 0
)
(while (< di (sslength ssx))
(setq DataList (append DataList (list (CreateDataList (cdr (assoc 1 (entget (ssname ssx di))))))))
(setq di (1+ di))
)
(setq AllType (mapcar 'car Datalist) Dtype '())
(while AllType
(setq Dtype (append Dtype (list (car AllType))))
(setq AllType (vl-remove (car AllType) AllType))
)
(setq ExportData '())
(while Dtype
(setq TypeI (car Dtype) xi 0 Tsum 0.0)
(while (< xi (length DataList))
(if (= (car (nth xi DataList)) TypeI) (setq Tsum (+ Tsum (atof (cadr (nth xi DataList))))))
(setq xi (1+ xi))
)
(setq ExportData (append ExportData (list (list TypeI Tsum))))
(setq Dtype (cdr Dtype))
)
ExportData
)
;======================================================================================================
(defun 2excel(ExportData / xlapp ex ex-wb nwb sheet cell exi coci Xchen Ychen)
(VL-LOAD-COM)
(setq xlapp (vlax-create-object "Excel.Application"))
(setq ex (vlax-put-property xlapp "Visible" T))
(setq ex-wb (vlax-get-property xlapp "Workbooks"))
(setq nwb (vlax-invoke-method ex-wb "add"))
(setq sheet (vlax-get-property nwb "ActiveSheet"))
(setq cell (vlax-get-property sheet "Cells"))
(setq exi 0)
(vlax-put-property cell "item" (1+ exi) 1 "LOAI")
(vlax-put-property cell "item" (1+ exi) 2 "TONG DAI")

(while (< exi (length ExportData))
(setq coci (nth exi ExportData))
(setq Xchen (nth 0 coci))
(setq Ychen (nth 1 coci))
(vlax-put-property cell "item" (+ exi 2) 1 Xchen)
(vlax-put-property cell "item" (+ exi 2) 2 ychen)
(setq exi (1+ exi))
)
(princ)
(princ)
)
;======================================================================================================
(defun 2txt(ExportData / Path txtFile file i coci Xchen Ychen)
(setq Path (getvar "DWGPREFIX"))
(setq txtFile (strcat Path "Summary.txt"))
(setq file (Open txtFile "w"))
(setq txi 0)
(write-line (strcat "LOAI" " " "TONG DAI") file)
(while (< txi (length ExportData))
(setq typi (nth txi ExportData))
(setq Xchen (nth 0 typi))
(setq Ychen (nth 1 typi))
(write-line (strcat Xchen " " (rtos Ychen 2 3)) file)
(setq txi (1+ txi))
)
(close file)
(startapp "Notepad" txtFile)
(princ)
(princ)
)
;======================================================================================================
(defun c:Csum(/ kw ExportData)
(setq ExportData (Summary))
(initget "E T")
(if (= keyx nil)
(progn
(setq kw (getkword (strcat "\nXu\U+1EA5t [Txt/Excel] <T>: ")))
(if (= kw nil) (setq kw "T"))
)
(progn
(setq kw (getkword (strcat "\nXu\U+1EA5t [Txt/Excel] <" keyx ">: ")))
(if (= kw nil) (setq kw keyx))
)
)
(setq keyx kw)
(cond
((= kw "T") (setq ssx (2txt ExportData)))
((= kw "E") (setq ssx (2excel ExportData)))
)
(princ)
(princ)
)

  • 3

#28 anhhungcute

anhhungcute

    biết zoom

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

Đã gửi 25 July 2012 - 09:21 AM

Bản vẽ của em được định dạng : D600-L5.0m-0.35%, em muốn tổng hợp chiều dài cống, số sau chữ L đó; Em không biết viết lisp như thế nào, các bác giúp em nhé!
  • 0

#29 SoftvnBin

SoftvnBin

    biết vẽ ellipse

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

Đã gửi 28 July 2012 - 03:03 PM

Hề hề hề,
Bạn dùng thử cái này coi đã ưng ý chưa nhé.
Cái này được viết theo yêu cầu của người khác nên cách dùng có khác với cách bạn trình bày.
1/- Gõ lệnh tko
2/- Quét chọn toàn bộ vùng chứa các text mà bạn muốn tính.
3/- Nhập giá trị đường kính mà bạn muốn tính
4/- Lisp trả ra kết quả tổng chiều dài các đoạn ống có đường kính đã chọn và nằm trong vùng chọn của bạn.
5/- Nếu muốn lisp có thể thay thế giá trị này vào một text đã có trên bản vẽ của bạn.

Hãy dùng thử và nếu có ý kiến gì thì post lên mình sẽ sửa lại.

 (defun c:tko ( / sst L DK n els )(command "undo" "be")(setq sst (acet-ss-to-list (ssget (list (cons 0 "text") (cons 8 "chu_thich") (cons 1 "*L#*")))))(setq L 0)(setq DK (getstring "\n Nhap loai ong can tinh tong chieu dai: ")          n (strlen DK))(foreach en sst(setq els (entget en))(cond   	((= (substr (cdr (assoc 1 els)) 1 n)  DK)        (setq L (+ L  (atof (substr (cdr (assoc 1 els)) (+ n 3))))) ) 				(T nil)))(alert (strcat "\n Tong chieu dai ong duong kinh " DK " la: "  (rtos L 2 2) "m"))   (if (= (strcase (getstring "\n Ban muon chon text ghi ket qua <y or n>: ")) "Y") 	(progn 	(setq els (entget (car (entsel "\n Chon text can thay the "))))   		(entmod (subst (cons 1 (rtos L 2 2)) (assoc 1 els) els)) 	))  (command "undo" "e")(princ))


Chúc bạn vui...


Nhờ các bạn giúp mình sửa như sau:

1. Nhập tên lệnh: AAA
2. Chọn vùng tính toán
3. Pick vị trí đặt bảng <đỉnh mép trái>:
4. Ghi chú: Lisp chỉ chọn các *text có định dạng chung là "*** D***, L = *****m
Kết quả sẽ cho ra như sau:
Hình đã gửi
http://www.cadviet.c...toan_nuoc_1.dwg
  • 0

#30 phamthanhbinh

phamthanhbinh

    biết lệnh adcenter

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

Đã gửi 30 July 2012 - 11:43 AM


Nhờ các bạn giúp mình sửa như sau:

1. Nhập tên lệnh: AAA
2. Chọn vùng tính toán
3. Pick vị trí đặt bảng <đỉnh mép trái>:
4. Ghi chú: Lisp chỉ chọn các *text có định dạng chung là "*** D***, L = *****m
Kết quả sẽ cho ra như sau:

http://www.cadviet.c...toan_nuoc_1.dwg

Hề hề hề,
Không hiểu yêu cầu của bạn... Đừng đánh đố mọi người vì không phải ai cũng làm cái công việc của bạn để có thể hiểu tất cả những gì bạn không nói ra.
  • 1
Chúc các quý Anh trên diễn đàn luôn khỏe, đẻ thêm được nhiều thứ để mót.

#31 SoftvnBin

SoftvnBin

    biết vẽ ellipse

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

Đã gửi 30 July 2012 - 02:34 PM

Ý mình là từ cái lisp Demigod post lên:

Tặng mọi người Lisp giải bài toán này.
Lệnh: Csum
- Xuất thống kê (txt hoặc excel).
- Có 2 tùy chọn để nhặt đối tượng (TEXT và MTEXT)
M: chọn 1 text mẫu -> trình tự động nhặt tất cả
C: Chọn trên màn hình
- Xuất txt chọn: T
Xuất Excel chọn: E

Good Luck :D.


(defun CreateDataList(text / i truoc sau)
(vl-load-com)
(setq i (1+ (vl-string-search "," text))
truoc (substr text 1 (1- i))
sau (substr text (1+ i) (- (strlen text) i))
sau (vl-string-subst "" " " sau)
sau (vl-string-subst "" "l" sau)
sau (vl-string-subst "" "L" sau)
)
(list truoc sau)
)
;======================================================================================================
(defun GetObject(/ kw)
(initget "M C")
(if (= key nil)
(progn
(setq kw (getkword (strcat "\nKi\U+1EC3u ch\U+1ECDn [M\U+1EABu/Ch\U+1ECDn \U+0111\U+1ED1i t\U+01B0\U+1EE3ng] <C>: ")))
(if (= kw nil) (setq kw "C"))
)
(progn
(setq kw (getkword (strcat "\nKi\U+1EC3u ch\U+1ECDn [M\U+1EABu/Ch\U+1ECDn \U+0111\U+1ED1i t\U+01B0\U+1EE3ng] <" key ">: ")))
(if (= kw nil) (setq kw key))
)
)
(setq key kw)
(defun Mselect(/ chk mau ssx)
(setq chk T)
(while chk
(setq mau (car (entsel "\nCh\U+1ECDn \U+0111\U+1ED1i t\U+01B0\U+1EE3ng m\U+1EABu: ")))
(if mau (setq chk nil))
)
(setq ssx (ssget "_X" (list
(cons -4 "<OR")
(cons 0 "TEXT")
(cons 0 "MTEXT")
(cons -4 "OR>")
(cons 8 (cdr (assoc 8 (entget mau))))
(cons -4 "<OR")
(cons 1 "*#*`,L#*")
(cons 1 "*#*`, L#*")
(cons -4 "OR>")
)
)
)
)
(defun Cselect(/ ssx)
(setq ssx (ssget (list
(cons -4 "<OR")
(cons 0 "TEXT")
(cons 0 "MTEXT")
(cons -4 "OR>")
(cons -4 "<OR")
(cons 1 "*#*`,L#*")
(cons 1 "*#*`, L#*")
(cons -4 "OR>")
)
)
)
)
(cond
((= kw "C") (setq ssx (Cselect)))
((= kw "M") (setq ssx (Mselect)))
)
ssx
)
;======================================================================================================
(defun Summary(/ ssx DataList di AllType Dtype TypeI xi Tsum ExportData)
(setq ssx (GetObject)
DataList '()
di 0
)
(while (< di (sslength ssx))
(setq DataList (append DataList (list (CreateDataList (cdr (assoc 1 (entget (ssname ssx di))))))))
(setq di (1+ di))
)
(setq AllType (mapcar 'car Datalist) Dtype '())
(while AllType
(setq Dtype (append Dtype (list (car AllType))))
(setq AllType (vl-remove (car AllType) AllType))
)
(setq ExportData '())
(while Dtype
(setq TypeI (car Dtype) xi 0 Tsum 0.0)
(while (< xi (length DataList))
(if (= (car (nth xi DataList)) TypeI) (setq Tsum (+ Tsum (atof (cadr (nth xi DataList))))))
(setq xi (1+ xi))
)
(setq ExportData (append ExportData (list (list TypeI Tsum))))
(setq Dtype (cdr Dtype))
)
ExportData
)
;======================================================================================================
(defun 2excel(ExportData / xlapp ex ex-wb nwb sheet cell exi coci Xchen Ychen)
(VL-LOAD-COM)
(setq xlapp (vlax-create-object "Excel.Application"))
(setq ex (vlax-put-property xlapp "Visible" T))
(setq ex-wb (vlax-get-property xlapp "Workbooks"))
(setq nwb (vlax-invoke-method ex-wb "add"))
(setq sheet (vlax-get-property nwb "ActiveSheet"))
(setq cell (vlax-get-property sheet "Cells"))
(setq exi 0)
(vlax-put-property cell "item" (1+ exi) 1 "LOAI")
(vlax-put-property cell "item" (1+ exi) 2 "TONG DAI")

(while (< exi (length ExportData))
(setq coci (nth exi ExportData))
(setq Xchen (nth 0 coci))
(setq Ychen (nth 1 coci))
(vlax-put-property cell "item" (+ exi 2) 1 Xchen)
(vlax-put-property cell "item" (+ exi 2) 2 ychen)
(setq exi (1+ exi))
)
(princ)
(princ)
)
;======================================================================================================
(defun 2txt(ExportData / Path txtFile file i coci Xchen Ychen)
(setq Path (getvar "DWGPREFIX"))
(setq txtFile (strcat Path "Summary.txt"))
(setq file (Open txtFile "w"))
(setq txi 0)
(write-line (strcat "LOAI" " " "TONG DAI") file)
(while (< txi (length ExportData))
(setq typi (nth txi ExportData))
(setq Xchen (nth 0 typi))
(setq Ychen (nth 1 typi))
(write-line (strcat Xchen " " (rtos Ychen 2 3)) file)
(setq txi (1+ txi))
)
(close file)
(startapp "Notepad" txtFile)
(princ)
(princ)
)
;======================================================================================================
(defun c:Csum(/ kw ExportData)
(setq ExportData (Summary))
(initget "E T")
(if (= keyx nil)
(progn
(setq kw (getkword (strcat "\nXu\U+1EA5t [Txt/Excel] <T>: ")))
(if (= kw nil) (setq kw "T"))
)
(progn
(setq kw (getkword (strcat "\nXu\U+1EA5t [Txt/Excel] <" keyx ">: ")))
(if (= kw nil) (setq kw keyx))
)
)
(setq keyx kw)
(cond
((= kw "T") (setq ssx (2txt ExportData)))
((= kw "E") (setq ssx (2excel ExportData)))
)
(princ)
(princ)
)


Mình cải tiến cái lisp này thành như sau:
1. bỏ các tùy chọn sau:
- Xuất thống kê (txt hoặc excel).
- Có 2 tùy chọn để nhặt đối tượng (TEXT và MTEXT)
M: chọn 1 text mẫu -> trình tự động nhặt tất cả
C: Chọn trên màn hình
- Xuất txt chọn: T
Xuất Excel chọn: E

2. Thay thế bằng:

1. Nhập tên lệnh: AAA
2. Chọn vùng tính toán
3. Pick vị trí đặt bảng <đỉnh mép trái>: pick điểm đặt
Ghi chú: - Lisp chỉ chọn các *text có định dạng ký tự chung là "*** D***, L = *****m. (các *text có định dạng ký tự khác thì bỏ qua)
- Trên ống đã ghi "BBB D25, L = 2,5m" và có Block tên "Chech D25" (cùng là D25) thì sẽ lấy ký tự trước trên ống, chính là ký tự BBB và lấy tên tên Block "Chech D25" để cho ra text trong bảng là chech BBB D25......

5. Lisp sẽ tính toán và thống kê ra bảng như sau:
Hình đã gửi
File cad như sau:
http://www.cadviet.c...toan_nuoc_1.rar
  • 0

#32 khac_pro

khac_pro

    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 July 2012 - 09:56 AM

File đính kèm: http://www.cadviet.c...ua_khu_11_1.rar
Bản vẽ của e có các text ghi chú có nội dung: D600,L30 hay D800,L60
Đây là thông số đường kính và chiều dài của cống. Để thống kê chiều dài của 1 loại cống nào đó (D600 chẳng hạn) e phải cộng lần lượt các số như số 30 sau chữ L, nên rất mất thời gian. Hic hic...
Mong các bác viết giúp e lisp: tính tổng các số sau chữ L mỗi khi pick chọn vào từng text như trên, kết quả thể hiện trên dòng command hoặc trên màn hình
Lisp đưa ra lựa chọn:
1.Chọn các text cần tính: Người dùng sẽ pick chọn vào lần lượt các text như trên. (Text được thể hiện là đã chọn rồi, và chỉ tính 1 lần, để không bị nhầm lẫn nếu lỡ pick lại text đó lần nữa)
2.Kết quả cho trên thanh command hoặc màn hình.
3.Kết thúc lệnh
VD: có 3 text: D600,L30 D600,L40 D600,L50
Dùng lisp: kết quả được: 120
Mong tin các bác ah! Thanks nhìu ah!

bach1212 ơi! Cậu cho mình hỏi file cad của cậu làm thế nào để zoom lại để xem toàn bộ bản vẽ nhỉ? tớ thấy khó xem bản vẽ này quá. hihi. Rất mong mọi người giúp đỡ
  • 0