Chuyển đến nội dung
Diễn đàn CADViet

SoftvnBin

Nhà quảng cáo
  • Số lượng nội dung

    58
  • Đã tham gia

  • Lần ghé thăm cuối

Bài đăng được đăng bởi SoftvnBin


  1. 16 phút trước, CadExTools đã nói:

    Rồi xác định toạ độ Y 2 bên thế nào bạn?

    Như trường hợp đầu tiên, có 2 đỉnh bên trái có toạ độ X giống nhau, sao ko phải là điểm bên dưới mà là điểm bên trên?

    Mình sửa lại và bổ sung "Dữ liệu đầu vào rồi ạ!. Cảm ơn bạn đã chỉ ra thiếu sót của mình

    • Like 1

  2. Mình có nhu cầu như hình sau:

    Vì cần làm với khoảng 2000 cấu kiện nên phương án làm tay là không tiện

    Nhu cầu như sau:

    1. Nhập tên lệnh

    2. Select nhiều Polyline kín

    3. Trim Polyline như hình với kết quả là Layer hiện hành

    4. Hỏi có xóa đối tượng cũ hay không (để mặc định là không xóa)

    * Cảm ơn các bạn đã đọc nhiều

    Ps: Mình chỉ biết tý ty về Vba Excel chứ món này thì mình chịu hẳn nên không làm gì được ạ

    (Hình như sau ạ)

    DDDDD.jpg

    Link file như sau ạ:

    https://file.io/whBqvxL0u6V6


  3. Mình đang có cần các bạn giúp lisp sắp xếp Text theo góc được chọn.

    Cụ thể như trong file mình đã ghi rõ như sau:

     

    * Thực hiện:

    - Gõ lệnh thực hiện Lisp

    - Nhập khoảng cách (ở đây = 2) biến số này sẽ nhớ trong 1 phiên làm việc

    - Selsect thứ tự lần lượt text, dùng thủ công chọn được lần lượt là 1z, 2z, 3z, 4z (Mục đích lấy Layer để làm tiếp) - Số text <=4 - biến này sẽ nhớ trong 1 phiên làm việc

    - Select Text và các đối tượng giao nhau (đối tượng giao nhau là Line hoặc Pline và chỉ giao nhau tại 1 điểm duy nhất)

    - Xếp các text vào 4 phía của nút giao với thứ tự lần lượt là:

                1Z: Phía trên bên trái

                2Z: Phía trên bên phải

                3Z: Phía dưới bên trái

                4Z: Phía dưới bên phải

    Trường hợp nếu hình bị nghiêng thì xác định phía bên trái như sau:

    - Phía trái có chứa điểm đầu của Line (hoặc Pline) và có chiều dài lớn hơn cạnh còn lại

    - Phía trên là phía có chứa điểm cuối của lien (hoặc Pline) mà có chiều dài ngắn hơn cạnh còn lại

     

    https://www.mediafire.com/file/si98lhsg9rft77g/Lisp_Cad_%28Nho_chinh_sua%29.dwg/file

    Trên đây là link file ạ

    Cảm ơn nhiều các bạn trước ạ


  4. Vào lúc 14/8/2011 tại 23:14, ketxu đã nói:

    Lệnh : brh

    Thao tác : Chọn Pline chia, Pick vào 1 phía của miếng Hatch

     

    
    (defun c:brh ()
    (grtext -1 "Free Lisp From Cadviet @Ketxu")
    (setq Pline (car (entsel "\n Pick vao Pline"))
      e (entsel "\nPick vao vung Hatch ")
         hObj (car e)
      pt (cadr e)
    )
    (command ".trim"  Pline "" pt "" "-hatch" pt "" "_MATCHPROP" hObj (entlast) ""))
    
     

     

    Các bạn có thẻ giúp mình (vẫn theo bản vẽ trên) với thứ tự phương pháp này không a:

    * Cách thực hiện Lisp:

    1. Gõ lệnh

    2. Chọn Pline

    3. Chọn Hatch

    * Cách Lisp thực hiện:

    1. Bo lại Hatch (với Layer là layer hiện hành)

    2. Trim Hatch 1 phía với Pline đã chọn

    3. Hatch lại phía đã Trim

    4. Xóa đường bo cũ vừa tạo ở bước 1

    5. Tạo đường bo mới với mỗi miếng Hatch (với Layer là Layer hiện hành)

    Cảm ơn các bạn trước ạ!!!

     


  5. lisp k ra 1 cái kiểu gì và cũng mất luôn bắt điểm các giá trị dim thì về 0

    Bạn không nên nói vậy, dù gì thì tien2005 cũng rất nhiệt tình share cho ae dùng và test thử mà, lisp ngon thì liệu tien2005 có được gì không, hay chỉ có mấy bạn load về có lợi thôi, không có những người share như tien2005 liệu bạn sẽ làm kiểu gì (nếu không biết lập trình lisp)

    • Vote tăng 1

  6. A nên sử dụng menu / toolbar cho những trường hợp phân nhánh như thế này.

    Về lisp này thì k khó, nên thử mày mò trước (nếu aT định học lisp).

    Ở đây chỉ có 2 vấn đề cần chú tâm là lọc dxf của text, lọc dxf 1, 42 của dim (nhớ trường hợp measurement của DIm được thay bằng dấu <>)

    Oke, để toa thử sức xem sao hén, he he, trình độ mới chỉ copy paste lần mò thôi, (đổi tên lệnh là mình giỏi nhất trong vấn đề lập trình lisp), hi hi


  7. Góp ý:

    1). Thật khó tin khi bạn chọn tập text mà có textstyle, layer, color, string .... giống text mẫu. Hóa ra các text này giống nhau về tất cả thông số à (vì bạn có dấu "...")?

    2). Gộp tất cả mọi thứ vào 1 lệnh thì có nên chăng? Kiểu ví dụ thế này thì có nên làm không?

    Chọn cách vẽ: Line/Arc/Pline/Text/Hatch/...

    Cảm ơn bạn đã chỉ bảo, mình xin giải trình như sau (do đặc thù công việc):

    1. Các text này giống nhau về tất cả thông số

    2. Trí nhớ mình không được tốt nên mình muốn vẽ, chỉnh sửa kiểu cầm tay chi việc bạn ạ (chỉ nhớ mỗi lệnh A5 thì dẽ với mình hơn là nhớ 1 loạt lệnh)

    Vẫn mong các bro chi bảo thêm ạ!

    P/S: Minh muốn áp dụng cho nhiều vấn đề khác (sau khi được các bro giúp đỡ, mình sẽ chế biến cho ra thêm lisp khác để sử lý các vấn đề khác, hi hi.


  8. Hi hi, khi chưa biết lisp thì chưa biết điều kỳ diệu, biết rồi không dứt ra được, bạn mĩnh biết mà. Vấn đề nhớ lệnh thì nhanh và dễ hơn mà, nhớ mỗi lệnh A5 thôi, tiếp theo là lệnh gì thì khi chạy lisp đã có hướng dẫn lựa chọn nhập lệnh luôn mà, như cái trên chỉ cần nhớ lệnh A5 sau đó cứ lệnh là số 1 hoặc 2 thôi (mà 1 hay 2 thì lisp cũng cho biết tương ứng với bước đó thì 1 có tác dụng gì, 2 có tác dụng gì mà) hi hi

     

     

    Câu hỏi chưa rõ ở text mẫu là textstyle, layer, color, ....

    Text mẫu lấy tất cả textstyle, layer, color, string .... bạn ạ, Text nhập chỉ xét mình String thôi, mình thiếu sót thật, Cảm ơn bạn đã nhắc nhở nha


  9. Hình như cái này:

    (defun c:andim(/ ssd)
    (setq dimsty (cdr (assoc 3 (entget (car (entsel "\nChon kieu Dim mau can giu lai: "))))))
    (princ "\nChon cac Dim...")
     (if (setq ssd (ssget '((0 . "DIMENSION"))))
    (acet-ss-visible (ssget "X" (list '(0 . "DIMENSION") '(-4 . "<NOT") (cons 3 dimsty) '(-4 . "NOT>"))) 1)))
    

     

    Từ lisp trên em mới nghĩ đến mình hay phải chỉnh sửa các bản vẽ do người người khác chuyển đến (tính chất công việc hơi kỳ dị) nên rất hay phải sử lý với text và Dim, nay có một nhu cầu muốn nhờ các bro bớt chút thời gian vàng ngọc (hi hi) giúp em cái lisp với nhu cầu lựa chọn Text và Dim như sau:

    I.1: Trường hợp 1 :

    1. Nhập tên lệnh: A5

    2. Hỏi kiểu lựa chọn (1. Dim hoặc 2. Text): 1

    3. Kiểu chọn Dim (1. Nhập giá trị dim hoặc 2. Cận Dim): 1

    4. Giá trị dim cần chọn: 1200

    5. Select vùng lựa chọn: (Kéo chọn)

    Lisp sẽ chọn tất cả các Dim có giá trị 1200 thuộc vùng chọn (mục 5)

    I.1: Trường hợp 2:

    1. Nhập tên lệnh: A5

    2. Hỏi kiểu lựa chọn (1. Dim hoặc 2. Text): 1

    3. Kiểu chọn Dim (1. Nhập giá trị dim hoặc 2. Cận Dim): 2

    4. Chọn cận Dim trên hoặc dưới (1. Cận trên hoặc 2. Cận dưới): 1

    5. Nhập giá trị Cận trên: 1200

    6. Select vùng lựa chọn: (Kéo chọn)

    Lisp sẽ chọn tất cả các Dim có giá trị lớn hơn 1200 thuộc vùng chọn (mục 6)

    I.1: Trường hợp 3:

    1. Nhập tên lệnh: A5

    2. Hỏi kiểu lựa chọn (1. Dim hoặc 2. Text): 1

    3. Kiểu chọn Dim (1. Nhập giá trị dim hoặc 2. Cận Dim): 2

    4. Chọn cận Dim trên hoặc dưới (1. Cận trên hoặc 2. Cận dưới): 2

    5. Nhập giá trị Cận dưới: 1200

    6. Select vùng lựa chọn: (Kéo chọn)

    Lisp sẽ chọn tất cả các Dim có giá trị hơn hơn 1200 thuộc vùng chọn (mục 6)

    I.1: Trường hợp 4:

    1. Nhập tên lệnh: A5

    2. Hỏi kiểu lựa chọn (1. Dim hoặc 2. Text): 2

    3. Kiểu chọn Text (1. Nhập chuổi text 2. Pick chọn Text mẫu): 1

    4. Select vùng lựa chọn: (Kéo chọn)

    Lisp sẽ chọn tất cả các chuỗi Text giống chuỗi Text đã nhập thuộc vùng chọn (mục 4)

    I.1: Trường hợp 5:

    1. Nhập tên lệnh: A5

    2. Hỏi kiểu lựa chọn (1. Dim hoặc 2. Text): 2

    3. Kiểu chọn Text (1. Nhập chuổi text 2. Pick chọn Text mẫu): 2

    4. Select vùng lựa chọn: (Kéo chọn)

    Lisp sẽ chọn tất cả các chuỗi Text giống chuỗi Text mẫu thuộc vùng chọn (mục 4)

     

    Ghi chú: - Cận Dim trên là Dim lớn hơn (ví dụ: cận Dim trên 1500 là các giá trị Dim >1500)

    - Cận Dim dưới là Dim nhỏ hơn (ví dụ: cận Dim dưới 1500 là các giá trị Dim <1500)

    - Tất cả các giá trị Dim có thể là Dim chế (Dim fake)

    Cảm ơn các Bro trước nhé!


  10. Lisp này Tue_NV mới viết ngày hôm qua

    Đây : http://www.cadviet.com/forum/index.php?sho...amp;#entry66554

    Link bị hỏng rồi bác ơi! mà em cũng nhờ các bác với mong muốn như trên nhưng sẽ thực hiện như sau:

    1. Gõ lệnh: aaa

    2. Xuất hiện hộp thoại có chứa các tên block (giống hộp thoại của lệnh BEDIT trong cad)

    3. Chọn tên Block (giống hộp thoại của lệnh BEDIT trong cad) (pick đúp hoặc pick 1 lần rồi ấn Oke) (ví dụ mình chọn Block tên Huong)

    4. Quét chọn vùng mong muốn (có thể quét đi, quét lại mà không bị tính lại đối tượng được chọn)

    5. Toàn bộ các Block tên Huong trong vùng chọn mong muốn (4) sẽ được chọn

    6. Đồng thời xuất hiện dòng thông báo dưới thanh Comand: So Block ten Huong là: 6 cai (giả sử có 6 Block tên Huong)

    Cảm ơn các bác trước!


  11. Đây là Lisp mình sưu tập được. Hy vọng đúng ý của bạn. Khi sử dụng lệnh sẽ cho kết quả là: Thứ-ngày/tháng/năm-Giờ/phút/giây. Chúc bạn thành công

    Lệnh dùng là: TGV

    http://www.cadviet.com/upfiles/tgv.vlx

    Rất hay, tuy nhiên sao nó cứ dựng ngược lên nhỉ, hơi khó đọc, chỉnh năm ngang được thì tốt, chủ nhân vlx có lòng share file lsp không nhỉ?


  12. Ý 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:

    17200_gui_lai.jpg

    File cad như sau:

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


  13. Cảm ơn Tue_NV đã giúp mình nhưng mình thấy có mấy vấn đề sau:

    1. Chia khoảng cách nhập Dim thành 2 bước

    I. "nhap khoang cach" thành 2 bước

    bước 1: "Dim lan <1, 2, 3, 4, 5>: 1"

    bước 2: Nếu nhập 1 thì:

    Nhap khoang cach <500>: 500 " với 500 là số gợi nhớ

    Nếu nhập 2 thì:

    Nhap khoang cach <1000>: 1000 " với 1000 là số gợi nhớ

    Nếu nhập 3 thì:

    Nhap khoang cach <1500>: 1500 " với 1500 là số gợi nhớ

    Nếu nhập 4 thì:

    Nhap khoang cach <2000>: 2000 " với 2000 là số gợi nhớ

    Nếu nhập 5 thì:

    Nhap khoang cach <2500>: 2500 " với 2500 là số gợi nhớ

     

    Cái này thì lisp mới đi được 1/3 chặng đường :)

     

    2. Lisp mất chế độ chọn hướng ghi kích thước :(

    3. Với *line (cái này quá ổn rồi)

    Các bro giúp mình nốt nhé!!!


  14. Em có cái lisp ghi kích thước sưu tầm được của 1 bác trên diễn đàn. Xin các bác giúp em chỉnh sửa lisp này để có thể chọn đường thằng cần ghi kích thước theo một layer nào đó. Thanks!

     

     

    ;----kich thuoc duong thang --------
    (defun c:kt2(/ vl ov ss d1 d2 d3 d4 d5 ent kc)
     (vl-load-com)
     (command "_.undo" "_begin")
     (setq vl '("osmode" "orthomode" "cmdecho") ; Sys Var list
    ov (mapcar 'getvar vl))   		; Get Old values
     (mapcar 'setvar vl '(0 0 0))
     (princ "\nChon duong thang can ghi kich thuoc : ")
     (if (and
    (setq ss (ssget (list (cons 0 "LINE")) ))
    (setq kc (getdist "\nNhap khoang cach : "))
    (setq d4 (getpoint "\nHuong dat kich thuoc ? ") ) )
    (foreach ent (vl-remove-if 'listp (mapcar 'cadr (ssnamex ss)))
      (setq d1 (vlax-curve-getStartPoint ent)
     d2 (vlax-curve-getEndPoint ent)
     d5 (vlax-curve-getClosestPointTo ent d4 T)
     d3 (polar d5 (angle d5 d4) kc))
      (command "dimaligned" d1 d2 d3)
      )
    )
     (mapcar 'setvar vl ov) ; reset Sys Vars
     (command "_.undo" "_end")
     (princ)
     )
    
    

    Bạn đổi dòng (setq ss (ssget (list (cons 0 "LINE")))) thành 2 dòng sau :

     

    Nếu giờ mình muốn:

    I. "nhap khoang cach" thành 2 bước

    bước 1: "Dim lan <1, 2, 3, 4, 5>: 1"

    bước 2: Nếu nhập 1 thì:

    Nhap khoang cach <500>: 500 " với 500 là số gợi nhớ

    Nếu nhập 2 thì:

    Nhap khoang cach <1000>: 1000 " với 1000 là số gợi nhớ

    Nếu nhập 3 thì:

    Nhap khoang cach <1500>: 1500 " với 1500 là số gợi nhớ

    Nếu nhập 4 thì:

    Nhap khoang cach <2000>: 2000 " với 2000 là số gợi nhớ

    Nếu nhập 5 thì:

    Nhap khoang cach <2500>: 2500 " với 2500 là số gợi nhớ

     

    II. Đo Pline thì tự đo từ đỉnh 1 đến đỉnh 2, từ đỉnh 2 đến đỉnh 3,....

     

    (Mình sửa LINE thành *LINE thì đo được Pline rồi, nhưng Lisp đo từ điểm đầu tiên đến điểm cuối cùng mà bỏ qua các điểm đỉnh trung gian thuộc PLINE)

    Nhờ Ketxu sửa giúp mình nhé!

    Cẳm ơn Ket trước nhé


  15. 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:

    17200_thong_ke_ong_nuoc_1.jpg

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

×