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

vietduc147258

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

    169
  • Đã tham gia

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

  • Ngày trúng

    18

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


  1. Em bị vấn đề là bảng ở trong Cad khi tạo thì bình thường. Nhưng sau mở lại thì một số bảng bị nhả vị trí. Và đổi từ kiểu Down sang Up.

    Vị trí nhảy đúng bằng độ cao của bảng. Em move về đúng chỗ nhưng một thời gian sau lại bị. Cùng 1 Style bảng trong file nhưng có bảng bị bảng không bị.

    Có cao nhân biết chỉ em khắc phục với.

    11122.PNG


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

    Bạn dùng thử lisp đổi tên hàng loạt Block này xem sao.

    Nó sẽ thêm tiền tố vào tên block mà mình chọn hoặc tất cả block trong bản vẽ.

    
    (defun c:DTB (/ Blocks *error* cm r ss int sn sfx kw bks nam)
      (vl-load-com)
    ;;; 		Tharwat 31. Oct. 2012 			;;;
    ;;   Rename selected or All Blocks as User's inputs    ;;;
      (or acdoc (setq acdoc (vla-get-activedocument (vlax-get-acad-object))))
      (setq Blocks (vla-get-blocks acdoc))
      (setq cm (getvar 'cmdecho))
      (defun *error* (x)
        (if cm
          (setvar 'cmdecho cm)
        )
        (vla-EndUndoMark acdoc)
        (princ "\n")
        (princ "\n *Cancel*:")
      )
      (if (and (not (eq (setq sfx (getstring t "\n Specify Suffix :")) ""))
               (setq r (snvalid sfx))
               (progn (initget "Selected All")
                      (setq kw (cond ((getkword "\n Rename [Selected . All] Blocks < Selected > :"))
                                     ("Selected")
                               )
                      )
               )
          )
        (if (eq kw "All")
          (progn (vla-StartUndoMark acdoc)
                 (vlax-for x Blocks (vl-catch-all-apply 'vla-put-name (list x (strcat sfx (vla-get-name x)))))
                 (vla-EndUndoMark acdoc)
          )
          (if (setq ss (ssget "_:L" '((0 . "INSERT"))))
            (progn (vla-StartUndoMark acdoc)
                   (setvar 'cmdecho 0)
                   (repeat (setq int (sslength ss))
                     (setq sn (ssname ss (setq int (1- int))))
                     (setq nam (cdr (assoc 2 (entget sn))))
                     (if (not (member nam bks))
                       (progn (vl-cmdf "_.-rename" "B" nam (setq nam (strcat sfx nam))) (setq bks (cons nam bks)))
                     )
                   )
                   (vla-EndUndoMark acdoc)
                   (setvar 'cmdecho cm)
            )
          )
        )
        (cond ((not sfx) (princ "\n Cancelled by user "))
              ((not r) (princ "\n Not Valid Block name "))
              (t (princ "\n Cancelled by user "))
        )
      )
      (princ "\n Written by Tharwat Al Shoufi")
      (princ)
    )

     

    RENB_dtb.LSP

    Lisp này không đổi tên được Tên Block tiếng Trung đâu nha bạn.

    Đánh lệnh "Ren" để đổi tên thủ công nha


  3. Bạn dùng thử lisp đổi tên hàng loạt Block này xem sao.

    Nó sẽ thêm tiền tố vào tên block mà mình chọn hoặc tất cả block trong bản vẽ.

    (defun c:DTB (/ Blocks *error* cm r ss int sn sfx kw bks nam)
      (vl-load-com)
    ;;; 		Tharwat 31. Oct. 2012 			;;;
    ;;;   Rename selected or All Blocks as User's inputs    ;;;
      (or acdoc (setq acdoc (vla-get-activedocument (vlax-get-acad-object))))
      (setq Blocks (vla-get-blocks acdoc))
      (setq cm (getvar 'cmdecho))
      (defun *error* (x)
        (if cm
          (setvar 'cmdecho cm)
        )
        (vla-EndUndoMark acdoc)
        (princ "\n")
        (princ "\n *Cancel*:")
      )
      (if (and (not (eq (setq sfx (getstring t "\n Specify Suffix :")) ""))
               (setq r (snvalid sfx))
               (progn (initget "Selected All")
                      (setq kw (cond ((getkword "\n Rename [Selected . All] Blocks < Selected > :"))
                                     ("Selected")
                               )
                      )
               )
          )
        (if (eq kw "All")
          (progn (vla-StartUndoMark acdoc)
                 (vlax-for x Blocks (vl-catch-all-apply 'vla-put-name (list x (strcat sfx (vla-get-name x)))))
                 (vla-EndUndoMark acdoc)
          )
          (if (setq ss (ssget "_:L" '((0 . "INSERT"))))
            (progn (vla-StartUndoMark acdoc)
                   (setvar 'cmdecho 0)
                   (repeat (setq int (sslength ss))
                     (setq sn (ssname ss (setq int (1- int))))
                     (setq nam (cdr (assoc 2 (entget sn))))
                     (if (not (member nam bks))
                       (progn (vl-cmdf "_.-rename" "B" nam (setq nam (strcat sfx nam))) (setq bks (cons nam bks)))
                     )
                   )
                   (vla-EndUndoMark acdoc)
                   (setvar 'cmdecho cm)
            )
          )
        )
        (cond ((not sfx) (princ "\n Cancelled by user "))
              ((not r) (princ "\n Not Valid Block name "))
              (t (princ "\n Cancelled by user "))
        )
      )
      (princ "\n Written by Tharwat Al Shoufi")
      (princ)
    )

     

    RENB_dtb.LSP

    • Like 1

  4. 59 phút trước, ketxu đã nói:

    Thấy edit thủ công nhanh rồi sao bạn hỏi lisp chi vậy :D

     

    Những thao tác đó ít dùng thì edit thủ công nhanh hơn. Nhưng những thao tác hay dùng thì Edit rất lâu.

    Ví dụ phêm chữ Ø thì bạn phải nhập %%c, mất 3 ký tự (3 ký tự này nằm ở Override hay Prefix cũng được)

    chèn ký tự hình vuông thì lại nhập {\Famgdt;o} vào ô prefix.

     


  5. Có Lisp giúp chèn Vào dim nhưng sử dụng hơi phức tạp

    Khi nhập lệnh xong sẽ hỏi chèn vào đâu: Above/Below/Prefix/Suffix

    Rồi nhập nội dung nữa.

    Cái này hơi phức tạp. Vào Edit thủ công còn nhanh hơn

     

     

    (defun c:Test (/ Rtrn txt ss in vl)
      (if
        (and (/= (setq txt (getstring t "\n Specify the Text string :"))
                 ""
             )
             (progn
               (initget "Above Below Prefix Suffix")
               (setq
                 Rtrn (cond ((getkword
                               "\nType [Above/Below/Prefix/Suffix] <Below>: "
                             )
                            )
                            ("Below")
                      )
               )
             )
             (progn
               (princ "\nSelect Dimension to modify: ")
               (setq ss (ssget "_:L" '((0 . "DIMENSION"))))
             )
        )
         (progn
           (cond
             ((= Rtrn "Above") (setq Txt (strcat Txt "\\P<>")))
             ((= Rtrn "Below") (setq Txt (strcat "<>\\P" Txt)))
             ((= Rtrn "Prefix") (setq Txt (strcat Txt " <>")))
             ((= Rtrn "Suffix") (setq Txt (strcat "<> " Txt)))
           )
           (repeat (setq in (sslength ss))
             (setq vl (vlax-ename->vla-object (ssname ss (setq in (1- in)))))
             (vl-catch-all-apply 'vla-put-TextOverride (list vl txt))
           )
         )
      )
      (princ)
    )


  6. Nhờ các bác viết dùm em Lisp này với.

    Khi nhấn lệnh in thì nó sẽ nhớ máy in, vùng in trước, Hiện lại bảng cho mình chọn vùng in mới.

    Giống như lúc in mà ta chọn thuộc tính "<Previous plot>".

    Em thường dùng lisp in hàng loàn thì nó in bản vẽ không đúng thứ tự, phải sắp lại.

    Dùng lệnh "Apply to layout" thì Cad cũng nhớ các tùy chọn. Nhưng cái này dễ bị nhầm, nhiều trang mình in 2 lần.

    Với tùy chọn "<Previous plot>". thì khi chọn vùng in thì vùng in trước đó nó màu đen mình không nhầm được.

    Thank các bác.

×