Đến nội dung


Hình ảnh
- - - - -

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


  • Please log in to reply
28 replies to this topic

#21 Trnghiado

Trnghiado

    biết vẽ arc

  • Members
  • PipPip
  • 43 Bài viết
Điểm đánh giá: -11 (hơi kém)

Đã gửi 31 October 2016 - 04:58 PM

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

https://drive.google...iew?usp=sharing

Bee xem ho minh xem the nao?


  • 0

#22 Bee

Bee

    biết lệnh array

  • Members
  • PipPipPip
  • 189 Bài viết
Điểm đánh giá: 64 (tàm tạm)

Đã gửi 31 October 2016 - 05:48 PM

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ẽ.


  • 0

#23 Bee

Bee

    biết lệnh array

  • Members
  • PipPipPip
  • 189 Bài viết
Điểm đánh giá: 64 (tàm tạm)

Đã gửi 31 October 2016 - 08:24 PM

https://drive.google...iew?usp=sharing

Bee xem ho minh xem the nao?

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
  )

  • 0

#24 Trnghiado

Trnghiado

    biết vẽ arc

  • Members
  • PipPip
  • 43 Bài viết
Điểm đánh giá: -11 (hơi kém)

Đã gửi 02 November 2016 - 03:33 PM

 

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


  • 0

#25 Bee

Bee

    biết lệnh array

  • Members
  • PipPipPip
  • 189 Bài viết
Điểm đánh giá: 64 (tàm tạm)

Đã gửi 02 November 2016 - 04:09 PM

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
)

  • 0

#26 Bee

Bee

    biết lệnh array

  • Members
  • PipPipPip
  • 189 Bài viết
Điểm đánh giá: 64 (tàm tạm)

Đã gửi 02 November 2016 - 09:08 PM

 

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
)

Uhm, mình dùng ACAD 2005. test như clip trên nhé.


  • 0

#27 haanh

haanh

    biết lệnh adcenter

  • Members
  • PipPipPipPipPipPipPip
  • 2875 Bài viết
Điểm đánh giá: 1554 (rất tốt)

Đã gửi 02 November 2016 - 09:35 PM

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

 

Anh thử dùng cái ....này xem sao???

http://www.cadviet.c...cho-dan-co-khi/


  • 0

“Sống trong đời sống cần có một tấm lòng / Để làm gì em biết không ? / Để gió cuốn đi, để gió cuốn đi...”


#28 Trnghiado

Trnghiado

    biết vẽ arc

  • Members
  • PipPip
  • 43 Bài viết
Điểm đánh giá: -11 (hơi kém)

Đã gửi 02 November 2016 - 09:45 PM

Uhm, mình dùng ACAD 2005. test như clip trên nhé.

Okie Bee, thanks Bee nhiều. Mình dùng bản Mechanical 2012  nên có thể do phiên bản nên bị lỗi :)


  • 0

#29 Trnghiado

Trnghiado

    biết vẽ arc

  • Members
  • PipPip
  • 43 Bài viết
Điểm đánh giá: -11 (hơi kém)

Đã gửi 02 November 2016 - 09:49 PM

Anh thử dùng cái ....này xem sao???

http://www.cadviet.c...cho-dan-co-khi/

Thanks bạn đã góp ý, tuy nhiên cái này mình đã thử và thấy ko dùng đc do công việc của mình ko sử dụng giống với hệ dung sai như bài bạn đã gửi. Thanks :)


  • 0