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

Bee

Thành viên
  • Số lượng nội dung

    553
  • Đã tham gia

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

  • Ngày trúng

    37

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


  1. 3 giờ trước, khanhkasu đã nói:

    Đúng là lỗi này đây anh.

    Anh xem giúp em với.

    Thank anh.

    Lỗi funtion này:

    (setq lstdwg (ts:directoryfiles path (strcat name "-R*.dwg") t))

    nếu lstdwg mà nil thì sẽ báo lỗi đó.

    Check lại funtion này thôi hoặc là khi setq 1 biến thì phải check biến đó. Bạn đã viết được cả 1 loạt lisp thế thì có thể tự điều chỉnh lại được.

    Good luck.

    ^_^


  2. 46 phút trước, quocmanh04tt đã nói:

     

    Lần này Mr. Bee cưỡi trâu đuổi thằng hái trộm hoa. KKK.

    @huunhantvxdts với Line đâu có "Command" "area" ...  được??? (à được nhưng không có kết quả). hehehe...

    Hê hê, tại hạ làm luôn mấy thằng khác, không lại thêm từng thằng thì lại sửa tiếp. ^_^


  3. Vào lúc 20/10/2018 tại 17:01, khanhkasu đã nói:

    Chào các anh chị diễn đàn Cadviet.

    Em có đoạn lisp lọc tên bản vẽ theo file *txt có sẵn. Em xin giải thích sơ về đoạn lisp này:

    Giả sử em có các tên bản vẽ lần lượt là: NS1CL001, NS1CL002. NS1CL003, NS1CL004, NS1CL005. Bây giờ em cần lấy 3 bản vẽ có tên NS1CL002,NS1CL003, NS1CL005.

    Cách làm của em: Tạo 1 file *TXT có tên bất kỳ, trong file này em viết tên 3 bản vẽ cần lấy ra là: NS1CL002,NS1CL003, NS1CL005.

    Sau đó em chạy lisp với tên CFFBYLIST, nó hiện cái bang yêu cầu chon file *TXT, em chon và nó sẽ lọc cho em.

    .............................................................................................

    Vấn đề của e là nó chạy nhưng báo lỗi " bad argument".

     

    Error: bad argument type: stringp nil

    Hay là lỗi nào vậy ?


  4. Vào lúc 20/10/2018 tại 09:40, Nguyễn Minh Chương đã nói:

    Chào mọi người, mình không hiểu lắm về lisp cad nên nhờ mọi người giúp đỡ.

    Mình có lisp tính tổng độ dài, hiện tại nó chỉ tính được đường Polyline và xuất kết quả ra 1 text đã có sẵn trên mặt bằng. Giờ mình muốn sửa lại lisp một tí là muốn nó tính được cả đường line và tự xuất ra text.

    Mong mọi người giúp đỡ ạ. (file mình có đính kèm)

     

    cc.lsp

    Chỉnh lại lisp khác cho bạn dùng ^_^

    (defun c:cc  (/ ss tl n ent itm obj l txt)
      (setq ss (ssget)
            tl 0
            n  (1- (sslength ss)))
      (while (>= n 0)
        (setq ent (entget (setq itm (ssname ss n)))
              obj (cdr (assoc 0 ent))
              l   (cond
                    ((= obj "LINE")
                     (distance (cdr (assoc 10 ent)) (cdr (assoc 11 ent))))
                    ((= obj "ARC")
                     (* (cdr (assoc 40 ent))
                        (if (minusp (setq l (- (cdr (assoc 51 ent))
                                               (cdr (assoc 50 ent)))))
                          (+ pi pi l)
                          l)))
                    ((or (= obj "CIRCLE")
                         (= obj "SPLINE")
                         (= obj "POLYLINE")
                         (= obj "LWPOLYLINE")
                         (= obj "ELLIPSE"))
                     (command "_.area" "_o" itm)
                     (getvar "perimeter"))
                    (t 0))
              tl  (+ tl l)
              n   (1- n)))
      
      (setq txt (car (entsel "Ch\U+1EC9 vào text c\U+1EA7n ghi: ")))
      
      (if (= (cdr (assoc 0 (entget txt))) "TEXT")
        (progn
          (setq txt (entmod (subst (cons 1 (strcat "L= " (rtos tl 2 0) " mm")) (assoc 1 (entget txt)) (entget txt))))
    
          (if (assoc 62 txt)
            (entmod (subst (cons 62 4) (assoc 62 txt) txt))
            (entmod (append txt (list (cons 62 4))))
            )
          )
    
        )
      (princ)
      )

     

    • Like 1

  5. 15 phút trước, khanhkasu đã nói:

    Hàm con đây mấy anh (chị) ơi.

    ------------------------------------------------------

    (defun TS:readcsv (csv / des lst sep str)
       (if (setq des (open csv "r"))
       (progn
       (setq sep
         (cond ((vl-registry-read "HKEY_CURRENT_USER\\Control Panel\\International" "sList"))
            (",")
         )
       )
       (while (setq str (read-line des))
       (setq lst (cons (vl-string-trim " " (car (TS:csv->lst str sep 0))) lst))
       )
       (close des)
       )
       )
       (reverse lst)
    )

    -----------------------------------------------------------

    (defun TS:ParseNumbers (s)
       (
     (lambda (l)
        (read
        (strcat "("
          (vl-list->string
          (mapcar
          (function
             (lambda (a b c)
             (if
             (or
             (< 47 b 58)
             (and (= 45 b) (< 47 c 58) (not (< 47 a 58)))
             (and (= 46 b) (< 47 a 58) (< 47 c 58))
             )
               b
               32
             )
             )
          )
          (cons nil l)
          l
          (append (cdr l) (list nil))
          )
          )
          ")"
        )
        )
     )
       (vl-string->list s)
       )
    )

    -----------------------------------------------------------------------------------------

    (defun TS:delFolder (folder)
       (vl-load-com)
       (setq fso (vlax-create-object "Scripting.FileSystemObject"))
       (vlax-invoke-method fso 'DeleteFolder folder :vlax-false)
       (vlax-release-object fso)
    )

    ----------------------------------------------------------------------------------------

    Mong anh (chị) giúp đỡ.

    Thân mến!

    Có bao nhiêu hàm con thì pót hết lên đi ^_^

    Vẫn thiếu TS:directoryfiles, TS:csv->lst. 

    Quăng luôn cái file ví dụ lên thì mn mới test đc. 


  6. 2 giờ trước, khanhkasu đã nói:

    Chào các anh chị diễn đàn Cadviet.

    Em có đoạn lisp lọc tên bản vẽ theo file *txt có sẵn. Em xin giải thích sơ về đoạn lisp này:

    Giả sử em có các tên bản vẽ lần lượt là: NS1CL001, NS1CL002. NS1CL003, NS1CL004, NS1CL005. Bây giờ em cần lấy 3 bản vẽ có tên NS1CL002,NS1CL003, NS1CL005.

    Cách làm của em: Tạo 1 file *TXT có tên bất kỳ, trong file này em viết tên 3 bản vẽ cần lấy ra là: NS1CL002,NS1CL003, NS1CL005.

    Sau đó em chạy lisp với tên CFFBYLIST, nó hiện cái bang yêu cầu chon file *TXT, em chon và nó sẽ lọc cho em.

    .............................................................................................

    Vấn đề của e là nó chạy nhưng báo lỗi " bad argument".

    Mong anh chị giúp em tìm lỗi với.

    ...............................Code của em đây..........................

    (defun c:CFFbyList (/ data dwgfinal file lstdwg lst_err path path_dwgfinal path_final)
       (vl-load-com)
       (setvar "Modemacro" "@ Tr\U+1EA7n C\U+00F4ng S\U+01A1n _ Detail SS")
       (if
       (and
       (setq file (getfiled "Ch\U+1ECDn File TXT,CSV c\U+1EA7n loc Final." "" "txt" 16))
       (setq path (vl-filename-directory file))
       (setq data (TS:readcsv file))
       )
      (progn
         ;;-------------------------------------------------------------------------------;;
         (setq lstdir (vl-remove-if
             '(lambda (x) (wcmatch x ".,.."))
             (vl-directory-files path "*" -1)
          )
         )
         (if
         (not (vl-file-directory-p (setq Path_final (strcat path "\\" (vl-filename-base file)))))
        (vl-mkdir Path_final)
         )
         (foreach name data
         (if (> (length (setq lstdwg (TS:directoryfiles path (strcat name "-R*.dwg") T))) 1)
         (progn
         (setq lstdwg
           (vl-sort
              lstdwg
              '(lambda (x1 x2)
               (> (last (TS:ParseNumbers (vl-filename-base x1)))
               (last (TS:ParseNumbers (vl-filename-base x2)))
               )
            )
           )
         )
         )
         )
         (setq path_dwgfinal (car lstdwg)
         dwgfinal   (strcat
              (vl-filename-base path_dwgfinal)
              (vl-filename-extension path_dwgfinal)
              )
         )
         (if (vl-file-copy
          path_dwgfinal
          (strcat Path_final
            "\\"
            dwgfinal
          )
          )
         (vl-file-delete path_dwgfinal)
         (setq lst_err (cons file lst_err))
         )
         )
         (if lstdir
         (mapcar (function (lambda (x)
               (TS:delFolder (strcat path "\\" x))
            )
           )
           lstdir
         )
         )
         (if
         lst_err
         (acet-ui-message
         (strcat
         "\nM\U+1ED9t v\U+00E0i b\U+1EA3n v\U+1EBD kh\U+00F4ng Copy \U+0111\U+01B0\U+1EE3c:  \n+ "
         (TS:lst->str lst_err "\n+ ")
         )
         "@ Tr\U+1EA7n C\U+00F4ng S\U+01A1n _ Detail SS"
         48
         )
         (acet-ui-message
         (strcat "Kh\U+00E1nh \U+01A1i! \n"
           "S\U+1ED1 b\U+1EA3n v\U+1EBD \U+0111\U+00E3 l\U+1ECDc \U+0111\U+01B0\U+1EE3c l\U+00E0:   "
           (itoa (length (vl-directory-files Path_final "*.dwg")))
           " (DWG)"
         )
         "Cao Thanh Kh\U+00E1nh - Steel Structure - Design Division."
         48
         )
         )
        
      )
       )
       (princ)
    )

    .......................................................................

    Mong anh (chị) giúp đỡ.

    Thân mến!

    Funtion TS:readcsv, TS:ParseNumbers, TS:delFolder ở đâu vậy ?


  7. 1 phút trước, Học Sinh Lớp 1 đã nói:

     

    e hơi dốt :(( tiện thể đây nhờ bác giải thích cho e cái này với ạ :(

    (vlax-ename->vla-object (car (entsel "\nChon text de ghi ket qua:")))

    và hàm này nữa

    vla-put-TextString

    Help thôi

    (setq e (car (entsel))) <Entity name: 27e0540>

    (vlax-ename->vla-object e) #<VLA-OBJECT IAcadLWPolyline 03f713a0>

    --> (car (entsel)) return ename

    -->(vlax-ename->vla-object ename) return 1 activex object

    --> (vla-get....) lấy 1 property nào đấy của vlaobj

    -->(vla-put...) đặt 1 property nào đấy của vlaobj theo giá trị mình muốn.

    --> muốn xem object có những property gì thì dùng (vlax-dump-object vlaobj)

    Tìm hiểu sâu hơn thì ngcuu về ActiveX của Window. Vlisp có thể control ActiveX object trong win của tất cả các phần mềm: word, excell, .......

    Tạm thế còn lại hóng các repply khác. ^_^

     


  8. 1 phút trước, Học Sinh Lớp 1 đã nói:

    hehe e có sđt rồi mờ bữa say quá mất luôn đt thế là mất liên lạc với bác luôn ^^ a có tài liệu về làm vl-.... và hàm acet-... gửi cho e xin với ^^ :P

     

    cần hàm gì thì google hàm đấy. Hoặc đọc help là được mà. Diễn đàn cũng nhiều bài nói rồi, em chịu khó tìm nhé. Hàm nào khó thì pót lên ai rảnh sẽ trả lời ngay mà. ^_^


  9. Vào lúc 25/9/2018 tại 11:22, Ba Thang đã nói:

    Chào anh chị em, mọi người cho em hỏi là làm sao khóa bản vẽ khi gửi file cad để khi họ xem họ không sửa kích thước hay coopy đc a ?

    Print khung tên thành JPG. Insert JPG vào CAD save thành file CAD. Thích CAD thì gửi file CAD này . ^_^


  10. 4 giờ trước, Danh Cong đã nói:

    Mình có đoạn code như sau:

    (defun c:ABC ()  (or name (setq name "Con meo"))
      (initget 128 "Con meo/Con chuot")
      (setq name (cond ((getkword (strcat "\nBan thich con nao : [Con meo/Con chuot] <" name ">")))(name)))
      (princ))

    Mình nhận thấy thấy hàm "Initget" không chấp nhận với "Con meo" , do nó có chứa dấu cách.

    Tức là phải thay "Con meo" = "CON-MEO" , "Con chuot" = "CON_CHUOT" thì lisp mới chạy được.

    Vậy các bác cho hỏi có cách nào sử dụng dấu cách,  sử dụng chữ thường với trường hợp ở trên không ạ. Em xin cảm ơn :)))

     

    He he

    Trường hợp này cho chọn chữ cái đầu thôi: M hoặc C

    không phải gõ dài dòng con mèo với con chuột.

    ^_^

    • Vote tăng 1

  11. 21 giờ trước, simmung đã nói:

    em mở file cad lên nó báo lỗi contains authoring elements. open in block editor? em nhấn yes,no,cancel đều bị hủy.Dưới đây là file của em.Mong mọi người giúp đỡ

    01.BD CAU 63.dwg

    Mình mở bình thường không thấy báo lỗi gì. CAD 2018. Chắc do CAD của bạn lỗi rồi.

×