Chuyển đến nội dung
Diễn đàn CADViet
  • Thông báo

    • Nguyen Hoanh

      CADViet đã hoàn tất nâng cấp   14/09/2017

      Chào các bạn, CADViet đã hoàn tất việc nâng cấp lên phiên bản mới. Tất cả các chức năng đã hoạt động theo kỳ vọng của ban quản trị. Nếu có vấn đề gì cần phản hồi, các bản post ở đây nhé: Trân trọng, Nguyễn Hoành.
Trnghiado

[Help] Sửa Lisp Thêm Dung Sai Cho Kích Thước Có Sẵn

Các bài được khuyến nghị

Trnghiado    11

Chào anh em trên diễn đàn.
Mình có đoạn lisp này cho phép thêm dung sai cho kích thước có sẵn.

 

(defun c:T2 () 
(command "dimtol" "on")
(command "dimtp" "0.02")
(command "dimtm" "0.02")
(command "dim" "update" pause "" "exit")
(command "dimtol" "off")
(princ)
)

 

Tuy nhiên lisp này có một số vấn đề như sau:
1) Lisp chỉ cho chọn một kích thước một lần, mình muốn nhờ sửa lại cho chọn đc nhiều kích thước cùng một lúc.
2) Lisp khi thực hiện sẽ chuyển dim style của kích thước về dim style hiện hành, mình muốn vẫn giữ nguyên đc dim style cũ của kích thước.
Nhờ anh em xem sửa giúp
Thanks

  • Vote giảm 1

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
Bee    108

Chào anh em trên diễn đàn.

Mình có đoạn lisp này cho phép thêm dung sai cho kích thước có sẵn.

 

(defun c:T2 () 

(command "dimtol" "on")

(command "dimtp" "0.02")

(command "dimtm" "0.02")

(command "dim" "update" pause "" "exit")

(command "dimtol" "off")

(princ)

)

 

Tuy nhiên lisp này có một số vấn đề như sau:

1) Lisp chỉ cho chọn một kích thước một lần, mình muốn nhờ sửa lại cho chọn đc nhiều kích thước cùng một lúc.

2) Lisp khi thực hiện sẽ chuyển dim style của kích thước về dim style hiện hành, mình muốn vẫn giữ nguyên đc dim style cũ của kích thước.

Nhờ anh em xem sửa giúp

Thanks

Lisp chua test nhe. Chắc không vấn đề ^_^

(defun c:T2 ()
  (if (setq ss (ssget '((0 . "DIMENSION"))))
    (progn
      (setq n 0)
      (repeat (sslength ss)
	(if (/= (getvar 'dimstyle) (cdr (assoc 3 (entget (ssname ss n)))))
	  (command "dimstyle" "r" (cdr (assoc 3 (entget (ssname ss n)))))
	  )
	(command "dimtol" "on")
	(command "dimtp" "0.02")
	(command "dimtm" "0.02")
	(command "dim" "update" (ssname ss n) "" "exit")
	(command "dimtol" "off")
	(setq n (1+ n))
	)
      )
    (princ "\nBan da khong chon DIM.")
    )
  (princ)
  )
  • Vote tăng 1

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
Trnghiado    11

 

Lisp chua test nhe. Chắc không vấn đề ^_^

(defun c:T2 ()
  (if (setq ss (ssget '((0 . "DIMENSION"))))
    (progn
      (setq n 0)
      (repeat (sslength ss)
	(if (/= (getvar 'dimstyle) (cdr (assoc 3 (entget (ssname ss n)))))
	  (command "dimstyle" "r" (cdr (assoc 3 (entget (ssname ss n)))))
	  )
	(command "dimtol" "on")
	(command "dimtp" "0.02")
	(command "dimtm" "0.02")
	(command "dim" "update" (ssname ss n) "" "exit")
	(command "dimtol" "off")
	(setq n (1+ n))
	)
      )
    (princ "\nBan da khong chon DIM.")
    )
  (princ)
  )

Thanks Bee rất nhiều, chuẩn như Lê Duẩn luôn, ko lỗi lầm gì cả. Cho mình hỏi mở rộng chút, nếu mình muốn đánh lệnh t2 mà nó hiện ra các dòng ghi các loại dung sai khác nhau, mình chỉ cần pick chọn vào dung sai cần dùng trc khi chọn các kích thước cần thay đổi dung sai thì có thay đổi đc ko ??? 

:D  :D  :D

  • Vote giảm 1

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
Bee    108

Thanks Bee rất nhiều, chuẩn như Lê Duẩn luôn, ko lỗi lầm gì cả. Cho mình hỏi mở rộng chút, nếu mình muốn đánh lệnh t2 mà nó hiện ra các dòng ghi các loại dung sai khác nhau, mình chỉ cần pick chọn vào dung sai cần dùng trc khi chọn các kích thước cần thay đổi dung sai thì có thay đổi đc ko ??? 

:D  :D  :D

Đây là lisp nhập thêm 2 gia trị dimtp và dimtm nhé. ^_^

(defun c:T2 (/ ss dimtp dimtm n)
  (if (setq ss (ssget '((0 . "DIMENSION"))))
    (progn
      (setq dimtp (getreal "\nChon gia tri dimtp <0.02>: "))
      (if (not dimtp)
	(setq dimtp 0.02)
	)
      (setq dimtm (getreal "\nChon gia tri dimtm <0.02>: "))
      (if (not dimtm)
	(setq dimtm 0.02)
	)
      (setq n 0)
      (repeat (sslength ss)
	(if (/= (getvar 'dimstyle) (cdr (assoc 3 (entget (ssname ss n)))))
	  (command "dimstyle" "r" (cdr (assoc 3 (entget (ssname ss n)))))
	  )
	(command "dimtol" "on")
	(command "dimtp" dimtp)
	(command "dimtm" dimtm)
	(command "dim" "update" (ssname ss n) "" "exit")
	(command "dimtol" "off")
	(setq n (1+ n))
	)
      )
    (princ "\nBan da khong chon DIM.")
    )
  (princ)
  )
 
  • Vote tăng 1

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
Trnghiado    11

 

Đây là lisp nhập thêm 2 gia trị dimtp và dimtm nhé. ^_^

(defun c:T2 (/ ss dimtp dimtm n)
  (if (setq ss (ssget '((0 . "DIMENSION"))))
    (progn
      (setq dimtp (getreal "\nChon gia tri dimtp <0.02>: "))
      (if (not dimtp)
	(setq dimtp 0.02)
	)
      (setq dimtm (getreal "\nChon gia tri dimtm <0.02>: "))
      (if (not dimtm)
	(setq dimtm 0.02)
	)
      (setq n 0)
      (repeat (sslength ss)
	(if (/= (getvar 'dimstyle) (cdr (assoc 3 (entget (ssname ss n)))))
	  (command "dimstyle" "r" (cdr (assoc 3 (entget (ssname ss n)))))
	  )
	(command "dimtol" "on")
	(command "dimtp" dimtp)
	(command "dimtm" dimtm)
	(command "dim" "update" (ssname ss n) "" "exit")
	(command "dimtol" "off")
	(setq n (1+ n))
	)
      )
    (princ "\nBan da khong chon DIM.")
    )
  (princ)
  )
 

Tuyệt vời ông mặt trời, cám ơn Bee rất nhiều. Công việc ghi kích thước của mình giờ ko còn vất vả nữa rồi  :D  :D  :D

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
Trnghiado    11

Cho mình hỏi thêm một chút nữa. Nếu giờ bài toán thay đổi là mình chỉ có 1 dim style có thể thay đổi chiều cao chữ, arow thì khi dùng lisp của Bee sẽ bị nhảy về kích cỡ chữ mặc định ban đầu của dim style. Có thể thay đổi câu lệnh nào của lisp để dùng đc cho trg hợp này ko   :blink:  :blink:  :blink:

  • Vote tăng 1

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
Kieu Tan    22

 

Đây là lisp nhập thêm 2 gia trị dimtp và dimtm nhé. ^_^

(defun c:T2 (/ ss dimtp dimtm n)
  (if (setq ss (ssget '((0 . "DIMENSION"))))
    (progn
      (setq dimtp (getreal "\nChon gia tri dimtp <0.02>: "))
      (if (not dimtp)
	(setq dimtp 0.02)
	)
      (setq dimtm (getreal "\nChon gia tri dimtm <0.02>: "))
      (if (not dimtm)
	(setq dimtm 0.02)
	)
      (setq n 0)
      (repeat (sslength ss)
	(if (/= (getvar 'dimstyle) (cdr (assoc 3 (entget (ssname ss n)))))
	  (command "dimstyle" "r" (cdr (assoc 3 (entget (ssname ss n)))))
	  )
	(command "dimtol" "on")
	(command "dimtp" dimtp)
	(command "dimtm" dimtm)
	(command "dim" "update" (ssname ss n) "" "exit")
	(command "dimtol" "off")
	(setq n (1+ n))
	)
      )
    (princ "\nBan da khong chon DIM.")
    )
  (princ)
  )

Them số thap phan(2 số) cho dung sai thi hay hon do Bạn

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
Bee    108

Cho mình hỏi thêm một chút nữa. Nếu giờ bài toán thay đổi là mình chỉ có 1 dim style có thể thay đổi chiều cao chữ, arow thì khi dùng lisp của Bee sẽ bị nhảy về kích cỡ chữ mặc định ban đầu của dim style. Có thể thay đổi câu lệnh nào của lisp để dùng đc cho trg hợp này ko   :blink:  :blink:  :blink:

Mình không hiểu. Bạn post dwg ví dụ xem thế nào!

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
Bee    108

Bee có thể đổi cho mình cái màu của dung sai đó sang màu mặc định là màu green không. bởi vì mình muốn màu của dung sai khác màu với màu của kích thước.

Bạn nghiên cứu thêm \C3 vào Primary Units / Dim suffix ở các dimstyle.

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
Trnghiado    11

Bạn nghiên cứu thêm \C3 vào Primary Units / Dim suffix ở các dimstyle.

Bee cho mình hỏi thêm chút, nếu kích thước cần đo có tỷ lệ 1:1 thì lisp trên của Bee ok. Tuy nhiên mình nhận thấy nếu để tỷ lệ kích thước khác thì khi dùng lisp nó sẽ nhảy về kích thước với tỷ lệ 1:1 . Vậy Bee có thể giúp mình để tình trạng trên ko xảy ra nữa ko

Thanks :)

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
Bee    108

Bee cho mình hỏi thêm chút, nếu kích thước cần đo có tỷ lệ 1:1 thì lisp trên của Bee ok. Tuy nhiên mình nhận thấy nếu để tỷ lệ kích thước khác thì khi dùng lisp nó sẽ nhảy về kích thước với tỷ lệ 1:1 . Vậy Bee có thể giúp mình để tình trạng trên ko xảy ra nữa ko

Thanks :)

Update nhé. 

Chắc là chạy ngon 

^_^

(defun c:T2 (/ ss dimtp dimtm n scl old)
  (setq old (getvar "DIMLFAC"))
  (if (setq ss (ssget '((0 . "DIMENSION"))))
    (progn
      (setq dimtp (getreal "\nChon gia tri dimtp <0.02>: "))
      (if (not dimtp)
	(setq dimtp 0.02)
	)
      (setq dimtm (getreal "\nChon gia tri dimtm <0.02>: "))
      (if (not dimtm)
	(setq dimtm 0.02)
	)
      (setq n 0)
      (repeat (sslength ss)
	(setq scl (vlax-get (vlax-ename->vla-object (ssname ss n)) 'LinearScaleFactor))
	(setvar "DIMLFAC" scl)
	(if (/= (getvar 'dimstyle) (cdr (assoc 3 (entget (ssname ss n)))))
	  (command "dimstyle" "r" (cdr (assoc 3 (entget (ssname ss n)))))
	  )
	(command "dimtol" "on")
	(command "dimtp" dimtp)
	(command "dimtm" dimtm)	
	(command "dim" "update" (ssname ss n) "" "exit")
	(command "dimtol" "off")
	(setq n (1+ n))
	)
      )
    (princ "\nBan da khong chon DIM.")
    )
  (setvar "DIMLFAC" old)
  (princ)
  ) 
  • Vote tăng 1

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
Trnghiado    11

 

Update nhé. 

Chắc là chạy ngon 

^_^

(defun c:T2 (/ ss dimtp dimtm n scl old)
  (setq old (getvar "DIMLFAC"))
  (if (setq ss (ssget '((0 . "DIMENSION"))))
    (progn
      (setq dimtp (getreal "\nChon gia tri dimtp <0.02>: "))
      (if (not dimtp)
	(setq dimtp 0.02)
	)
      (setq dimtm (getreal "\nChon gia tri dimtm <0.02>: "))
      (if (not dimtm)
	(setq dimtm 0.02)
	)
      (setq n 0)
      (repeat (sslength ss)
	(setq scl (vlax-get (vlax-ename->vla-object (ssname ss n)) 'LinearScaleFactor))
	(setvar "DIMLFAC" scl)
	(if (/= (getvar 'dimstyle) (cdr (assoc 3 (entget (ssname ss n)))))
	  (command "dimstyle" "r" (cdr (assoc 3 (entget (ssname ss n)))))
	  )
	(command "dimtol" "on")
	(command "dimtp" dimtp)
	(command "dimtm" dimtm)	
	(command "dim" "update" (ssname ss n) "" "exit")
	(command "dimtol" "off")
	(setq n (1+ n))
	)
      )
    (princ "\nBan da khong chon DIM.")
    )
  (setvar "DIMLFAC" old)
  (princ)
  ) 

Chạy ổn lắm, thanks Bee nhé. Mình hỏi ngược lại chút, nhé :P

Nếu mình đã có các kích thước có dung sai khác nhau rồi và tất cả đang ở tỷ lệ 1:1. Giờ mình muốn chuyển toàn bộ kích thước đó sang tỷ lệ nào đó khác (cái này do mình nhập) mà đống dung sai vẫn còn và ko thay đổi thì sao  ^_^  ^_^  ^_^

Cái này có thể làm lisp riêng ko dính vào lisp trên cho mình nhé, thanks Bee

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
Bee    108

Chạy ổn lắm, thanks Bee nhé. Mình hỏi ngược lại chút, nhé :P

Nếu mình đã có các kích thước có dung sai khác nhau rồi và tất cả đang ở tỷ lệ 1:1. Giờ mình muốn chuyển toàn bộ kích thước đó sang tỷ lệ nào đó khác (cái này do mình nhập) mà đống dung sai vẫn còn và ko thay đổi thì sao  ^_^  ^_^  ^_^

Cái này có thể làm lisp riêng ko dính vào lisp trên cho mình nhé, thanks Bee

Loanh quanh nhỉ ^_^ Thử cái này nhé

 (defun c:T3 (/ ss dimtp dimtm n scl old)
   (setq old (getvar "DIMLFAC"))
   (if (setq ss (ssget '((0 . "DIMENSION"))))
     (progn
      (setq scl (getreal "\nChon ti le: "))
      (if (not scl)
	(setq scl 1.)
	)
      (setq n 0)
      (repeat (sslength ss)
        (setq dimtm (vlax-get (vlax-ename->vla-object (ssname ss n)) 'ToleranceLowerLimit))
        (setq dimtp (vlax-get (vlax-ename->vla-object (ssname ss n)) 'ToleranceUpperLimit))
        (setvar "DIMLFAC" scl)
        (if (/= (getvar 'dimstyle) (cdr (assoc 3 (entget (ssname ss n)))))
	  (command "dimstyle" "r" (cdr (assoc 3 (entget (ssname ss n)))))
	  )
	(command "dimtol" "on")
	(command "dimtp" dimtp)
	(command "dimtm" dimtm)	
	(command "dim" "update" (ssname ss n) "" "exit")
	(command "dimtol" "off")
	(setq n (1+ n))
	)
      )
    (princ "\nBan da khong chon DIM.")
    )
  (setvar "DIMLFAC" old)
  (princ)
  ) 

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
Trnghiado    11

 

Loanh quanh nhỉ ^_^ Thử cái này nhé

 (defun c:T3 (/ ss dimtp dimtm n scl old)
   (setq old (getvar "DIMLFAC"))
   (if (setq ss (ssget '((0 . "DIMENSION"))))
     (progn
      (setq scl (getreal "\nChon ti le: "))
      (if (not scl)
	(setq scl 1.)
	)
      (setq n 0)
      (repeat (sslength ss)
        (setq dimtm (vlax-get (vlax-ename->vla-object (ssname ss n)) 'ToleranceLowerLimit))
        (setq dimtp (vlax-get (vlax-ename->vla-object (ssname ss n)) 'ToleranceUpperLimit))
        (setvar "DIMLFAC" scl)
        (if (/= (getvar 'dimstyle) (cdr (assoc 3 (entget (ssname ss n)))))
	  (command "dimstyle" "r" (cdr (assoc 3 (entget (ssname ss n)))))
	  )
	(command "dimtol" "on")
	(command "dimtp" dimtp)
	(command "dimtm" dimtm)	
	(command "dim" "update" (ssname ss n) "" "exit")
	(command "dimtol" "off")
	(setq n (1+ n))
	)
      )
    (princ "\nBan da khong chon DIM.")
    )
  (setvar "DIMLFAC" old)
  (princ)
  ) 

Hi Bee

Đây là kết quả sau khi dùng lisp của bạn

https://drive.google.com/file/d/0B-gIuhLk2Nw1bm5TMVVuaGpHblU/view?usp=sharing

Với các kích thước đã có dung sai thì kết quả rất ok. Tuy nhiên với kích thước cuối ko có dung sai thì xảy ra lỗi bị nhảy ra dung sai như trên hình vẽ. Bee xem lại giúp mình xem nhé. Thanks

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
Bee    108

Hi Bee

Đây là kết quả sau khi dùng lisp của bạn

https://drive.google.com/file/d/0B-gIuhLk2Nw1bm5TMVVuaGpHblU/view?usp=sharing

Với các kích thước đã có dung sai thì kết quả rất ok. Tuy nhiên với kích thước cuối ko có dung sai thì xảy ra lỗi bị nhảy ra dung sai như trên hình vẽ. Bee xem lại giúp mình xem nhé. Thanks

fix dim ko dung sai. ^_^

 (defun c:T3 (/ ss dimtp dimtm n scl old)
   (setq old (getvar "DIMLFAC"))
   (if (setq ss (ssget '((0 . "DIMENSION"))))
     (progn
      (setq scl (getreal "\nChon ti le: "))
      (if (not scl)
	(setq scl 1.)
	)
      (setq n 0)
      (repeat (sslength ss)
        (setq dimtm (vlax-get (vlax-ename->vla-object (ssname ss n)) 'ToleranceLowerLimit))
        (setq dimtp (vlax-get (vlax-ename->vla-object (ssname ss n)) 'ToleranceUpperLimit))
        (setvar "DIMLFAC" scl)
        (if (and (= dimtm 0.0)
                 (= dimtp 0.0)
                 )
          (progn
            (command "dimtol" "off")
            (command "dim" "update" (ssname ss n) "" "exit")
            )
          (progn
            (if (/= (getvar 'dimstyle) (cdr (assoc 3 (entget (ssname ss n)))))
              (command "dimstyle" "r" (cdr (assoc 3 (entget (ssname ss n)))))
              )
            (command "dimtol" "on")
            (command "dimtp" dimtp)
            (command "dimtm" dimtm)
            (command "dim" "update" (ssname ss n) "" "exit")
            (command "dimtol" "off")
            )
          )
	(setq n (1+ n))
	)
      )
    (princ "\nBan da khong chon DIM.")
    )
  (setvar "DIMLFAC" old)
  (princ)
  ) 
       

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
Trnghiado    11

 

fix dim ko dung sai. ^_^

 (defun c:T3 (/ ss dimtp dimtm n scl old)
   (setq old (getvar "DIMLFAC"))
   (if (setq ss (ssget '((0 . "DIMENSION"))))
     (progn
      (setq scl (getreal "\nChon ti le: "))
      (if (not scl)
	(setq scl 1.)
	)
      (setq n 0)
      (repeat (sslength ss)
        (setq dimtm (vlax-get (vlax-ename->vla-object (ssname ss n)) 'ToleranceLowerLimit))
        (setq dimtp (vlax-get (vlax-ename->vla-object (ssname ss n)) 'ToleranceUpperLimit))
        (setvar "DIMLFAC" scl)
        (if (and (= dimtm 0.0)
                 (= dimtp 0.0)
                 )
          (progn
            (command "dimtol" "off")
            (command "dim" "update" (ssname ss n) "" "exit")
            )
          (progn
            (if (/= (getvar 'dimstyle) (cdr (assoc 3 (entget (ssname ss n)))))
              (command "dimstyle" "r" (cdr (assoc 3 (entget (ssname ss n)))))
              )
            (command "dimtol" "on")
            (command "dimtp" dimtp)
            (command "dimtm" dimtm)
            (command "dim" "update" (ssname ss n) "" "exit")
            (command "dimtol" "off")
            )
          )
	(setq n (1+ n))
	)
      )
    (princ "\nBan da khong chon DIM.")
    )
  (setvar "DIMLFAC" old)
  (princ)
  ) 
       

Vẫn bị lỗi như vậy Bee ạ :p

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
Bee    108

 

 

fix dim ko dung sai. ^_^

 (defun c:T3 (/ ss dimtp dimtm n scl old)
   (setq old (getvar "DIMLFAC"))
   (if (setq ss (ssget '((0 . "DIMENSION"))))
     (progn
      (setq scl (getreal "\nChon ti le: "))
      (if (not scl)
	(setq scl 1.)
	)
      (setq n 0)
      (repeat (sslength ss)
        (setq dimtm (vlax-get (vlax-ename->vla-object (ssname ss n)) 'ToleranceLowerLimit))
        (setq dimtp (vlax-get (vlax-ename->vla-object (ssname ss n)) 'ToleranceUpperLimit))
        (setvar "DIMLFAC" scl)
        (if (and (= dimtm 0.0)
                 (= dimtp 0.0)
                 )
          (progn
            (command "dimtol" "off")
            (command "dim" "update" (ssname ss n) "" "exit")
            )
          (progn
            (if (/= (getvar 'dimstyle) (cdr (assoc 3 (entget (ssname ss n)))))
              (command "dimstyle" "r" (cdr (assoc 3 (entget (ssname ss n)))))
              )
            (command "dimtol" "on")
            (command "dimtp" dimtp)
            (command "dimtm" dimtm)
            (command "dim" "update" (ssname ss n) "" "exit")
            (command "dimtol" "off")
            )
          )
	(setq n (1+ n))
	)
      )
    (princ "\nBan da khong chon DIM.")
    )
  (setvar "DIMLFAC" old)
  (princ)
  ) 
       

Vẫn bị lỗi như vậy Bee ạ :P

 

up file lên đây mình xem nào.

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
Bee    108

Bản vẽ gửi dim ko sạch, nghĩa là dim vẫn có dung sai ở trong dữ liệu là 0.1 Theo mình nên tách những thằng ko có dung sai ra một dimstyle riêng. Để trộn lẫn trong cùng 1 dimstyle sẽ phức tạp cho người quản lý. Kiểu này vẽ như kiểu để tất cả đối tượng trênlisayer 0 sau đó chỉ thay color đối tượng. Bản vẽ bạn gửi chạy lệnh lisp T3 thì vẫn ra 2 cái dung sai 0.1, bản vẽ ko sạch. :( Bạn mở bản vẽ mới tinh và vẽ dim sẽ thấy dim sạch sẽ.

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
Bee    108

Thử lisp này xem thế nào. ^_^

(defun c:T3 (/ ss dimtp dimtm n scl old)
   (setq old (getvar "DIMLFAC"))
   (if (setq ss (ssget '((0 . "DIMENSION"))))
     (progn
      (setq scl (getreal "\nChon ti le: "))
      (if (not scl)
	(setq scl 1.)
	)
      (setq n 0)
      (repeat (sslength ss)
        (setq dimtm (vlax-get (vlax-ename->vla-object (ssname ss n)) 'ToleranceLowerLimit))
        (setq dimtp (vlax-get (vlax-ename->vla-object (ssname ss n)) 'ToleranceUpperLimit))
        (setvar "DIMLFAC" scl)
        (if (not (check (ssname ss n)))
          (progn
            (command "dimtol" "off")
            (command "dim" "update" (ssname ss n) "" "exit")
            )
          (progn
            (if (/= (getvar 'dimstyle) (cdr (assoc 3 (entget (ssname ss n)))))
              (command "dimstyle" "r" (cdr (assoc 3 (entget (ssname ss n)))))
              )
            (command "dimtol" "on")
            (command "dimtp" dimtp)
            (command "dimtm" dimtm)
            (command "dim" "update" (ssname ss n) "" "exit")
            (command "dimtol" "off")
            )
          )
	(setq n (1+ n))
	)
      )
    (princ "\nBan da khong chon DIM.")
    )
  (setvar "DIMLFAC" old)
  (princ)
  )
(defun check (ename / ss1 flag)
  (command "_explode" ename "")
  (setq ss1 (ssget "_P"))
  (mapcar '(lambda (o)
	     (if (wcmatch (cdr (assoc 0 (entget (cadr o)))) "MTEXT")
	       (if (wcmatch (cdr (assoc 1 (entget (cadr o)))) "*+*,*-*,*±*")
		 (setq flag T)
		 (setq flag nil)
		 )
	       )
	     )
	  (ssnamex ss1)
	  )
  (command "_undo" "")
  flag
  )

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
Trnghiado    11

 

Thử lisp này xem thế nào. ^_^

(defun c:T3 (/ ss dimtp dimtm n scl old)
   (setq old (getvar "DIMLFAC"))
   (if (setq ss (ssget '((0 . "DIMENSION"))))
     (progn
      (setq scl (getreal "\nChon ti le: "))
      (if (not scl)
	(setq scl 1.)
	)
      (setq n 0)
      (repeat (sslength ss)
        (setq dimtm (vlax-get (vlax-ename->vla-object (ssname ss n)) 'ToleranceLowerLimit))
        (setq dimtp (vlax-get (vlax-ename->vla-object (ssname ss n)) 'ToleranceUpperLimit))
        (setvar "DIMLFAC" scl)
        (if (not (check (ssname ss n)))
          (progn
            (command "dimtol" "off")
            (command "dim" "update" (ssname ss n) "" "exit")
            )
          (progn
            (if (/= (getvar 'dimstyle) (cdr (assoc 3 (entget (ssname ss n)))))
              (command "dimstyle" "r" (cdr (assoc 3 (entget (ssname ss n)))))
              )
            (command "dimtol" "on")
            (command "dimtp" dimtp)
            (command "dimtm" dimtm)
            (command "dim" "update" (ssname ss n) "" "exit")
            (command "dimtol" "off")
            )
          )
	(setq n (1+ n))
	)
      )
    (princ "\nBan da khong chon DIM.")
    )
  (setvar "DIMLFAC" old)
  (princ)
  )
(defun check (ename / ss1 flag)
  (command "_explode" ename "")
  (setq ss1 (ssget "_P"))
  (mapcar '(lambda (o)
	     (if (wcmatch (cdr (assoc 0 (entget (cadr o)))) "MTEXT")
	       (if (wcmatch (cdr (assoc 1 (entget (cadr o)))) "*+*,*-*,*±*")
		 (setq flag T)
		 (setq flag nil)
		 )
	       )
	     )
	  (ssnamex ss1)
	  )
  (command "_undo" "")
  flag
  )

Hi Bee, Lisp này khắc phục đc lỗi kích thước ko có dung sai ko bị nhảy thành có dung sai. Tuy nhiên những kích thước có dung sai thì lại ko chuyển đc tỷ lệ scale bạn ạ :p

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
Bee    108

Mình test bản vẽ đã up thì chạy vẫn ngon lành.

 

https://youtu.be/RKSFpMYT_b4

(defun c:T3 (/ ss dimtp dimtm n scl old)
  (setq old (getvar "DIMLFAC"))
  (command "_undo" "be")
  (if (setq ss (ssget '((0 . "DIMENSION"))))
    (progn
      (setq scl (getreal "\nChon ti le: "))
      (if (not scl)
	(setq scl 1.)
      )
      (setq n 0)
      (repeat (sslength ss)
	(setq dimtm (vlax-get (vlax-ename->vla-object (ssname ss n))
			      'ToleranceLowerLimit
		    )
	)
	(setq dimtp (vlax-get (vlax-ename->vla-object (ssname ss n))
			      'ToleranceUpperLimit
		    )
	)
	(setvar "DIMLFAC" scl)
	(if (not (check (ssname ss n)))
	  (progn
	    (command "dimtol" "off")
	    (command "dim" "update" (ssname ss n) "" "exit")
	  )
	  (progn
	    (if	(/= (getvar 'dimstyle)
		    (cdr (assoc 3 (entget (ssname ss n))))
		)
	      (command "dimstyle"
		       "r"
		       (cdr (assoc 3 (entget (ssname ss n))))
	      )
	    )
	    (command "dimtol" "on")
	    (command "dimtp" dimtp)
	    (command "dimtm" dimtm)
	    (command "dim" "update" (ssname ss n) "" "exit")
	    (command "dimtol" "off")
	  )
	)
	(setq n (1+ n))
      )
    )
    (princ "\nBan da khong chon DIM.")
  )
  (command "_undo" "end")
  (setvar "DIMLFAC" old)
  (princ)
)
(defun check (ename / BlkEnt EntData Str flag)
  (if
    (and
      (= (cdr (assoc 0 (setq EntData (entget ename))))
	 "DIMENSION"
      )
      (setq BlkEnt (tblobjname "block" (cdr (assoc 2 EntData))))
    )
     (while (setq BlkEnt (entnext BlkEnt))
       (if (= (cdr (assoc 0 (setq EntData (entget BlkEnt)))) "MTEXT")
	 (progn
	   (setq Str (cdr (assoc 1 EntData)))	   
	   (if
	     (wcmatch Str "*+*,*-*,*±*")
	      (setq flag T)
	      (setq flag nil)
	   )
	 )
       )
     )
  )
  flag
)

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

Tạo một tài khoản hoặc đăng nhập để nhận xét

Bạn cần phải là một thành viên để lại một bình luận

Tạo tài khoản

Đăng ký một tài khoản mới trong cộng đồng của chúng tôi. Điều đó dễ mà.

Đăng ký tài khoản mới

Đăng nhập

Bạn có sẵn sàng để tạo một tài khoản ? Đăng nhập tại đây.

Đăng nhập ngay


×