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.
Đăng nhập để thực hiện theo  
proconeng86

[yêu cầu] lisp tính tổng số đai trong dim

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

proconeng86    8

Mình hay phải vẽ dầm và thống kê cốt đai dầm, theo mẫu của bên mình thì số lượng đai dầm đã nằm ngay trong dim đo khoảng cách dưới dầm (như file đính kèm), việc thống kê chỉ là cộng số lượng đai lại nhưng nếu dầm dài cũng rất mất công ngồi ấn máy tính hoặc gõ vào excel tính

Nên mình nhờ các bạn viết hộ mình 1 lisp để có thể tính tổng các đai trong các dim được lựa chọn. nội dung lisp là:

   - gõ lệnh

   - đưa ra lựa chọn những dim cần tính đai

   - tính toán và đưa ra số lượng đai trên màn hình

   - kết thúc lệnh

Mình cám ơn nhiều

http://www.cadviet.com/upfiles/3/9928_yeu_cau_lisp_tinh_so_dai_trong_nhieu_khoang_dim.dwg

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
hiepttr    523

level lisp còn thấp cộng với thời gian hạn chế nên chỉ làm đc khung xương cho bạn

Phần bẫy lỗi còn kém, bạn dùng tạm, có gì thắc mắc sẽ chỉnh sửa thêm

;; Lisp cong gia tri Dim, phuc vu tinh tong so cot dai theo y/c:
;;http://www.cadviet.com/forum/topic/102605-yeu-cau-lisp-tinh-tong-so-dai-trong-dim/
(defun c:SD (/ old i tong ent text_dim start end n)
;;sum dim
(setq old (getvar "cmdecho"))
(setvar "cmdecho" 0)
(setq i 0
	  tong 0)
(while (setq ent (nentsel "\n Pick dung vao text Dim: "))
	(setq i (1+ i)
		  text_dim (cdr(assoc 1 (entget (car ent))))
		  start (vl-string-search "[" text_dim)
		  end (vl-string-search "%%C" text_dim)
		  n (atoi (substr text_dim (+ 2 start) (- end start 1)))
		  tong (+ n tong)
	)
)
(alert (strcat "Tong cong " (itoa i) " dim la: " (itoa tong) " dai"))
(setvar "cmdecho" 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
proconeng86    8

 

level lisp còn thấp cộng với thời gian hạn chế nên chỉ làm đc khung xương cho bạn

Phần bẫy lỗi còn kém, bạn dùng tạm, có gì thắc mắc sẽ chỉnh sửa thêm

;; Lisp cong gia tri Dim, phuc vu tinh tong so cot dai theo y/c:
;;http://www.cadviet.com/forum/topic/102605-yeu-cau-lisp-tinh-tong-so-dai-trong-dim/
(defun c:SD (/ old i tong ent text_dim start end n)
;;sum dim
(setq old (getvar "cmdecho"))
(setvar "cmdecho" 0)
(setq i 0
	  tong 0)
(while (setq ent (nentsel "\n Pick dung vao text Dim: "))
	(setq i (1+ i)
		  text_dim (cdr(assoc 1 (entget (car ent))))
		  start (vl-string-search "[" text_dim)
		  end (vl-string-search "%%C" text_dim)
		  n (atoi (substr text_dim (+ 2 start) (- end start 1)))
		  tong (+ n tong)
	)
)
(alert (strcat "Tong cong " (itoa i) " dim la: " (itoa tong) " dai"))
(setvar "cmdecho" old)
(princ)
)

 

Cám ơn bạn hiepttr đã giúp đỡ

Lisp này đúng với yêu cầu của mình rồi, mình đã dùng thử nhưng vẫn còn 1 số hạn chế sau:

   - phải click đúng vào phần text của dim thì mới dùng được, click vào các đường trên dim là không dùng được

   - hiện tại đang phải click vào từng dim nên khá là lâu nếu dầm nhiều nhịp, ví dụ như mình có 1 dầm có 10 nhịp, sẽ có 30 khoảng bố trí đai như vậy phải click 30 lần mới tính được, khá mất thời gian. bạn có thể sửa lại hộ mình là có thể quét để chọn nhiều dim thay vì click vào từng dim được không

 

Mong bạn sửa giúp mình, mình cám ơn nhiều

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
hiepttr    523

Bạn dùng tạm cái này

Chú ý: đang còn hạn chế, Khi chọn nhầm các loại Dim style không phù hợp thì lisp lỗi ko chạy :D :D :D

;; Lisp cong gia tri Dim, phuc vu tinh tong so cot dai theo y/c:
;;http://www.cadviet.com/forum/topic/102605-yeu-cau-lisp-tinh-tong-so-dai-trong-dim/
(defun c:SD (/ i tong ss ent info ds ds_name hs text_dim start end n)
;;sum dim
(setq i -1
	  tong 0)
(prompt "\n Chon Dim can tinh tong: ")
(setq ss (ssget '((0 . "DIMENSION"))))
(while (and ss (< i (1- (sslength ss))))
	(setq ent (ssname ss (setq i (1+ i)))
		  info (entget ent)
		  ds (cdr (assoc 3 info))
		  ds_name (tblobjname "dimstyle" ds)
		  hs (cdr (assoc 143 (entget ds_name)))
	)
	(cond ((= (cdr(assoc 1 info)) "") (setq n (fix (+ 0.5 (* (cdr(assoc 42 info)) hs)))))
		  (t (setq text_dim  (cdr(assoc 1 info))
				   start (vl-string-search "[" text_dim)
				   end (vl-string-search "%%C" text_dim)
				   n (atoi (substr text_dim (+ 2 start) (- end start 1)))
				   )
			)
	)
	(setq tong (+ n tong))
)
(alert (strcat "Tong cong " (itoa (1+ i)) " dim la: " (itoa tong) " dai"))
(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
phamthanhbinh    3.123

Cám ơn bạn hiepttr đã giúp đỡ

Lisp này đúng với yêu cầu của mình rồi, mình đã dùng thử nhưng vẫn còn 1 số hạn chế sau:

   - phải click đúng vào phần text của dim thì mới dùng được, click vào các đường trên dim là không dùng được

   - hiện tại đang phải click vào từng dim nên khá là lâu nếu dầm nhiều nhịp, ví dụ như mình có 1 dầm có 10 nhịp, sẽ có 30 khoảng bố trí đai như vậy phải click 30 lần mới tính được, khá mất thời gian. bạn có thể sửa lại hộ mình là có thể quét để chọn nhiều dim thay vì click vào từng dim được không

 

Mong bạn sửa giúp mình, mình cám ơn nhiều

Hề hề hề,

Dùng thử cái này xem có ngứa ngáy hay nổi mụn chỗ nào không nhé.

 

 

(defun c:tida (/ ssd sd ed kt ts n b )
(setq ssd (acet-ss-to-list (ssget (list (cons 0 "dimension") (cons 3 "*00)"))))
          sd 0 )
(foreach d ssd
      (setq ed (entget d)
                kt (cdr (assoc 42 ed))
                ts (cdr (assoc 3 ed))
                n (strlen ts)
                b (atoi (substr ts (- n 3) 3))
                sd (+ sd (fix (/ kt b)) 1)
      )
)
(alert (strcat "\n Tong so dai can dung la: " (rtos sd 2 0) " dai " (chr 216) " 6"))
(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
proconeng86    8

Bạn dùng tạm cái này

Chú ý: đang còn hạn chế, Khi chọn nhầm các loại Dim style không phù hợp thì lisp lỗi ko chạy :D :D :D

;; Lisp cong gia tri Dim, phuc vu tinh tong so cot dai theo y/c:
;;http://www.cadviet.com/forum/topic/102605-yeu-cau-lisp-tinh-tong-so-dai-trong-dim/
(defun c:SD (/ i tong ss ent info ds ds_name hs text_dim start end n)
;;sum dim
(setq i -1
	  tong 0)
(prompt "\n Chon Dim can tinh tong: ")
(setq ss (ssget '((0 . "DIMENSION"))))
(while (and ss (< i (1- (sslength ss))))
	(setq ent (ssname ss (setq i (1+ i)))
		  info (entget ent)
		  ds (cdr (assoc 3 info))
		  ds_name (tblobjname "dimstyle" ds)
		  hs (cdr (assoc 143 (entget ds_name)))
	)
	(cond ((= (cdr(assoc 1 info)) "") (setq n (fix (+ 0.5 (* (cdr(assoc 42 info)) hs)))))
		  (t (setq text_dim  (cdr(assoc 1 info))
				   start (vl-string-search "[" text_dim)
				   end (vl-string-search "%%C" text_dim)
				   n (atoi (substr text_dim (+ 2 start) (- end start 1)))
				   )
			)
	)
	(setq tong (+ n tong))
)
(alert (strcat "Tong cong " (itoa (1+ i)) " dim la: " (itoa tong) " dai"))
(princ)
)

Đúng là khi chọn nhầm dim khác bị lỗi, ko chạy được nhưng cám ơn bạn đã nhiệt tình giúp mình nhé

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
proconeng86    8

 

Hề hề hề,

Dùng thử cái này xem có ngứa ngáy hay nổi mụn chỗ nào không nhé.

 

 

(defun c:tida (/ ssd sd ed kt ts n b )
(setq ssd (acet-ss-to-list (ssget (list (cons 0 "dimension") (cons 3 "*00)"))))
          sd 0 )
(foreach d ssd
      (setq ed (entget d)
                kt (cdr (assoc 42 ed))
                ts (cdr (assoc 3 ed))
                n (strlen ts)
                b (atoi (substr ts (- n 3) 3))
                sd (+ sd (fix (/ kt b)) 1)
      )
)
(alert (strcat "\n Tong so dai can dung la: " (rtos sd 2 0) " dai " (chr 216) " 6"))
(princ)
)
 

 

Lisp của bạn Phamthanhbinh không bị lỗi khi chọn cả dim không ghi đai tuy nhiên lại mặc định là đai phi6

Một dầm có nhiều nhịp có khi có nhiều loại đai đường kính khác nhau mà như file đính kèm của mình có 2 loại đai phi6 và phi10, bạn giúp mình chỉnh lại là đưa ra tổng số lượng đai của từng loại nhé

Cám ơn bạn nhiều

http://www.cadviet.com/upfiles/3/9928_yeu_cau_lisp_tinh_so_dai_trong_nhieu_khoang_dim_1.dwg

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
hiepttr    523

Bạn dùng tạm cái này

Chú ý: đang còn hạn chế, Khi chọn nhầm các loại Dim style không phù hợp thì lisp lỗi ko chạy :D :D :D

;; Lisp cong gia tri Dim, phuc vu tinh tong so cot dai theo y/c:
;;http://www.cadviet.com/forum/topic/102605-yeu-cau-lisp-tinh-tong-so-dai-trong-dim/
(defun c:SD (/ i tong ss ent info ds ds_name hs text_dim start end n)
;;sum dim
(setq i -1
	  tong 0)
(prompt "\n Chon Dim can tinh tong: ")
(setq ss (ssget '((0 . "DIMENSION"))))
(while (and ss (< i (1- (sslength ss))))
	(setq ent (ssname ss (setq i (1+ i)))
		  info (entget ent)
		  ds (cdr (assoc 3 info))
		  ds_name (tblobjname "dimstyle" ds)
		  hs (cdr (assoc 143 (entget ds_name)))
	)
	(cond ((= (cdr(assoc 1 info)) "") (setq n (fix (+ 0.5 (* (cdr(assoc 42 info)) hs)))))
		  (t (setq text_dim  (cdr(assoc 1 info))
				   start (vl-string-search "[" text_dim)
				   end (vl-string-search "%%C" text_dim)
				   n (atoi (substr text_dim (+ 2 start) (- end start 1)))
				   )
			)
	)
	(setq tong (+ n tong))
)
(alert (strcat "Tong cong " (itoa (1+ i)) " dim la: " (itoa tong) " dai"))
(princ)
)

Đúng là khi chọn nhầm dim khác bị lỗi, ko chạy được nhưng cám ơn bạn đã nhiệt tình giúp mình nhé

Mình "cố tình" làm thế vì BV mẫu bạn đưa ra & những thông tin bạn cấp ko đủ để mình lọc Dim style

Nếu muốn chạy trơn tru nữa thì bạn cần cung cấp thông tin đầy đủ từ đầu :D

Nếu chấp nhận bỏ qua dim style ko phù hợp (ko có hs chuyển đổi đơn vị) thì dùng cái này

;; Lisp cong gia tri Dim, phuc vu tinh tong so cot dai theo y/c:
;;http://www.cadviet.com/forum/topic/102605-yeu-cau-lisp-tinh-tong-so-dai-trong-dim/
(defun c:SD (/ i tong ss ent info ds ds_name hs text_dim start end n)
;;sum dim
(setq i -1
	  j 0
	  tong 0)
(prompt "\n Chon Dim can tinh tong: ")
(setq ss (ssget '((0 . "DIMENSION"))))
(while (and ss (< i (1- (sslength ss))))
	(setq ent (ssname ss (setq i (1+ i)))
		  info (entget ent)
		  ds (cdr (assoc 3 info))
		  ds_name (tblobjname "dimstyle" ds)
		  hs (cdr (assoc 143 (entget ds_name)))
	)
	(cond ((null hs) (setq n 0 j (1+ j)))
		  ((= (cdr(assoc 1 info)) "") (setq n (fix (+ 0.5 (* (cdr(assoc 42 info)) hs)))))
		  (t (setq text_dim  (cdr(assoc 1 info))
				   start (vl-string-search "[" text_dim)
				   end (vl-string-search "%%C" text_dim)
				   n (atoi (substr text_dim (+ 2 start) (- end start 1)))
				   )
			)
	)
	(setq tong (+ n tong))
)
(alert (strcat "Tong cong " (itoa (1+ (- i j))) " dim la: " (itoa tong) " dai"))
(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
proconeng86    8

 

Mình "cố tình" làm thế vì BV mẫu bạn đưa ra & những thông tin bạn cấp ko đủ để mình lọc Dim style

Nếu muốn chạy trơn tru nữa thì bạn cần cung cấp thông tin đầy đủ từ đầu :D

Nếu chấp nhận bỏ qua dim style ko phù hợp (ko có hs chuyển đổi đơn vị) thì dùng cái này

;; Lisp cong gia tri Dim, phuc vu tinh tong so cot dai theo y/c:
;;http://www.cadviet.com/forum/topic/102605-yeu-cau-lisp-tinh-tong-so-dai-trong-dim/
(defun c:SD (/ i tong ss ent info ds ds_name hs text_dim start end n)
;;sum dim
(setq i -1
	  j 0
	  tong 0)
(prompt "\n Chon Dim can tinh tong: ")
(setq ss (ssget '((0 . "DIMENSION"))))
(while (and ss (< i (1- (sslength ss))))
	(setq ent (ssname ss (setq i (1+ i)))
		  info (entget ent)
		  ds (cdr (assoc 3 info))
		  ds_name (tblobjname "dimstyle" ds)
		  hs (cdr (assoc 143 (entget ds_name)))
	)
	(cond ((null hs) (setq n 0 j (1+ j)))
		  ((= (cdr(assoc 1 info)) "") (setq n (fix (+ 0.5 (* (cdr(assoc 42 info)) hs)))))
		  (t (setq text_dim  (cdr(assoc 1 info))
				   start (vl-string-search "[" text_dim)
				   end (vl-string-search "%%C" text_dim)
				   n (atoi (substr text_dim (+ 2 start) (- end start 1)))
				   )
			)
	)
	(setq tong (+ n tong))
)
(alert (strcat "Tong cong " (itoa (1+ (- i j))) " dim la: " (itoa tong) " dai"))
(princ)
)

 

Lisp này hết bị lỗi khi chọn dim không có đai rồi nhưng bạn sửa thêm cho mình là nếu có nhiều loại đai khác nhau (ví dụ trong file đính kèm có 2 loại đai phi6 và phi10) thì tính tổng từng loại đường kính và đưa ra bảng thông báo

Mình cám ơn nhiều

http://www.cadviet.com/upfiles/3/9928_yeu_cau_lisp_tinh_so_dai_trong_nhieu_khoang_dim_2.dwg

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
phamthanhbinh    3.123

Lisp này hết bị lỗi khi chọn dim không có đai rồi nhưng bạn sửa thêm cho mình là nếu có nhiều loại đai khác nhau (ví dụ trong file đính kèm có 2 loại đai phi6 và phi10) thì tính tổng từng loại đường kính và đưa ra bảng thông báo

Mình cám ơn nhiều

http://www.cadviet.com/upfiles/3/9928_yeu_cau_lisp_tinh_so_dai_trong_nhieu_khoang_dim_2.dwg

Hề hề hề,

Bạn nên rút kinh nghiệm khi đặt yêu cầu viết lisp. nên suy nghĩ thấu đáo về cái mình cần và đưa ra đầy đủ các bản vẽ thể hiện đúng cái mình cần. Đừng làm theo kiểu mỗi lúc lại són ra một yêu cầu thêm mới. Bản vẽ lần trước bạn gửi chỉ có duy nhất một loai đường kinh đai thôi, hoàn toàn không có loại đai thứ hai nào. Bởi vậy mình mới để mặc định trong thông báo là đai phi 6. (bằng chứng vẫn còn đó)

Đây là lisp đã sửa theo yêu cầu mới và hy vọng bạn không đẻ thêm yêu cầu mới cho cái lisp này. Nếu vẫn còn thì bạn sẽ phải đợi lâu đấy, bởi mình hết hứng bổ sung rồi.

 

(defun c:tida (/ ssd sd ed kt ts n b m sdl dkl ld)
(vl-load-com)
(setq ssd (acet-ss-to-list (ssget (list (cons 0 "dimension") (cons 3 "*00)"))))
          dkl (list)
          sd 0 )
(foreach d ssd
      (setq ed (entget d)
                kt (cdr (assoc 42 ed))
                ts (cdr (assoc 3 ed))
                n (vl-string-search "d" ts)
                m (vl-string-search "a" ts)
                b (atoi (substr ts (+ 2 m) 3))
                dk (substr ts (+ 2 n) (- m n 1))
                sdl (if (>= (- (/ kt b) (fix (/ kt b))) 0.5) (1+ (fix (/ kt b))) (fix (/ kt b)))
                dkl (append dkl (list (list  dk sdl)))
      )
)
(setq dkl (vl-sort dkl  '(lambda (x y) (<= (atoi (car x)) (atoi (car y))))))
(while dkl
      (setq sd 0
                ld (caar dkl))
      (foreach lis dkl
             (if (= (car lis) ld)
                 (progn 
                      (setq sd (+ sd (cadr lis))
                                dkl (vl-remove lis dkl)  )
                 )
             )
        )
        (alert (strcat "\n Tong so dai " (chr 216) ld " can dung la: " (rtos sd 2 0) " dai " ))
)
(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
proconeng86    8

 

Hề hề hề,

Bạn nên rút kinh nghiệm khi đặt yêu cầu viết lisp. nên suy nghĩ thấu đáo về cái mình cần và đưa ra đầy đủ các bản vẽ thể hiện đúng cái mình cần. Đừng làm theo kiểu mỗi lúc lại són ra một yêu cầu thêm mới. Bản vẽ lần trước bạn gửi chỉ có duy nhất một loai đường kinh đai thôi, hoàn toàn không có loại đai thứ hai nào. Bởi vậy mình mới để mặc định trong thông báo là đai phi 6. (bằng chứng vẫn còn đó)

Đây là lisp đã sửa theo yêu cầu mới và hy vọng bạn không đẻ thêm yêu cầu mới cho cái lisp này. Nếu vẫn còn thì bạn sẽ phải đợi lâu đấy, bởi mình hết hứng bổ sung rồi.

 

(defun c:tida (/ ssd sd ed kt ts n b m sdl dkl ld)
(vl-load-com)
(setq ssd (acet-ss-to-list (ssget (list (cons 0 "dimension") (cons 3 "*00)"))))
          dkl (list)
          sd 0 )
(foreach d ssd
      (setq ed (entget d)
                kt (cdr (assoc 42 ed))
                ts (cdr (assoc 3 ed))
                n (vl-string-search "d" ts)
                m (vl-string-search "a" ts)
                b (atoi (substr ts (+ 2 m) 3))
                dk (substr ts (+ 2 n) (- m n 1))
                sdl (if (>= (- (/ kt b) (fix (/ kt b))) 0.5) (1+ (fix (/ kt b))) (fix (/ kt b)))
                dkl (append dkl (list (list  dk sdl)))
      )
)
(setq dkl (vl-sort dkl  '(lambda (x y) (<= (atoi (car x)) (atoi (car y))))))
(while dkl
      (setq sd 0
                ld (caar dkl))
      (foreach lis dkl
             (if (= (car lis) ld)
                 (progn 
                      (setq sd (+ sd (cadr lis))
                                dkl (vl-remove lis dkl)  )
                 )
             )
        )
        (alert (strcat "\n Tong so dai " (chr 216) ld " can dung la: " (rtos sd 2 0) " dai " ))
)
(princ)
)
 

 

Xin lỗi bạn nhé vì lúc đầu mình cũng chưa nghĩ đc hết, khi làm rồi mới biết dc và nảy sinh ra, lần sau mình sẽ rút kinh nghiệm. Lisp này là ngon rồi, mình cám ơn nhiều nha

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
proconeng86    8

@phamthanhbinh

Xin lỗi bạn trước nhé, giờ làm lại phát sinh thêm loại a150,a250 nữa, lisp trên lại không dùng được với loai này, bạn có thể sửa lại giúp mình cái được không. Mình cám ơn nhiều

Tính số lượng đai thì mình dùng hệ số Multipliner for alt unit trong thẻ Alternate units trong định nghĩa dim. Số đai sẽ bằng chiều dài dim nhân với hệ số Multipliner for alt unit

nên mình nghĩ bạn viết lisp với công thức trên thì có thế áp dụng được cho mọi kiểu dim bất kì luôn

Bạn cho ý kiến nhé.

Chân thành cám ơn

 

http://www.cadviet.com/upfiles/3/9928_yeu_cau_lisp_tinh_so_dai_trong_nhieu_khoang_dim_4.dwg

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
Tue_NV    3.841

@phamthanhbinh

Xin lỗi bạn trước nhé, giờ làm lại phát sinh thêm loại a150,a250 nữa, lisp trên lại không dùng được với loai này, bạn có thể sửa lại giúp mình cái được không. Mình cám ơn nhiều

Tính số lượng đai thì mình dùng hệ số Multipliner for alt unit trong thẻ Alternate units trong định nghĩa dim. Số đai sẽ bằng chiều dài dim nhân với hệ số Multipliner for alt unit

nên mình nghĩ bạn viết lisp với công thức trên thì có thế áp dụng được cho mọi kiểu dim bất kì luôn

Bạn cho ý kiến nhé.

Chân thành cám ơn

 

http://www.cadviet.com/upfiles/3/9928_yeu_cau_lisp_tinh_so_dai_trong_nhieu_khoang_dim_4.dwg

 

Góp ý cho bạn đây:

- Có quá nhiều kiểu dimstyle. Mỗi loại khoảng cách đai là 1 kiểu dimstyle là không chuyên nghiệp và có thể gây ra sự nhầm lẫn cho chính bạn và người sử dụng bản vẽ của bạn. Trong bản vẽ Nên sử dụng kiểu dimstyle thường dung mà thôi

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
Tot77    501

Bạn thử dùng cái này, nó chẳng phân biệt kiểu dim, chỉ phân biệt tẽt dim thôi.

 

(defun c:tmp()
  (defun GeD(v / l en)
    (setq l nil)
    (vlax-for item (vla-item (vla-get-blocks (vla-get-ActiveDocument (vlax-get-acad-object)))
    (cdr (assoc 2 (entget v))))
      (if (= "MTEXT" (cdr (assoc 0 (entget (setq en (vlax-vla-object->ename item))))))
(setq l en))
    ) l
  )
  (Prompt "\nChon Dim:")
  (setq l nil)
  (foreach x (acet-ss-to-list (ssget '((0 . "DIMENSION"))))
    (setq txt  (cdr (assoc 1 (entget (Ged x))))
 sl (atoi (substr txt (+ 2 (vl-string-search "[" txt))
  (- (vl-string-search "%" txt) (vl-string-search "[" txt) 1)))
 fi (atoi (substr txt (+ 4 (vl-string-search "%" txt))
  (- (vl-string-search "a" txt) (vl-string-search "%" txt) 3)))
 l (if (not (assoc fi l))
     (cons (cons fi sl) l)
     (subst (cons fi (+ sl (cdr (assoc fi l)))) (assoc fi l) l)))
  )
  (foreach x l (princ (strcat "\n" (itoa (cdr x)) (chr 216) (itoa (car x)))))
  (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
proconeng86    8

 

Bạn thử dùng cái này, nó chẳng phân biệt kiểu dim, chỉ phân biệt tẽt dim thôi.

 

(defun c:tmp()
  (defun GeD(v / l en)
    (setq l nil)
    (vlax-for item (vla-item (vla-get-blocks (vla-get-ActiveDocument (vlax-get-acad-object)))
    (cdr (assoc 2 (entget v))))
      (if (= "MTEXT" (cdr (assoc 0 (entget (setq en (vlax-vla-object->ename item))))))
(setq l en))
    ) l
  )
  (Prompt "\nChon Dim:")
  (setq l nil)
  (foreach x (acet-ss-to-list (ssget '((0 . "DIMENSION"))))
    (setq txt  (cdr (assoc 1 (entget (Ged x))))
 sl (atoi (substr txt (+ 2 (vl-string-search "[" txt))
  (- (vl-string-search "%" txt) (vl-string-search "[" txt) 1)))
 fi (atoi (substr txt (+ 4 (vl-string-search "%" txt))
  (- (vl-string-search "a" txt) (vl-string-search "%" txt) 3)))
 l (if (not (assoc fi l))
     (cons (cons fi sl) l)
     (subst (cons fi (+ sl (cdr (assoc fi l)))) (assoc fi l) l)))
  )
  (foreach x l (princ (strcat "\n" (itoa (cdr x)) (chr 216) (itoa (car x)))))
  (princ)
)

 

Lisp này rất tốt đó,đúng ý mình rồi tuy nhiên có 1 điều là nó đưa ra số đai ở dòng command, mà dòng này thì mình hay để nó bé nhất có thể để cho màn hình vẽ được lớn hơn. Bạn Tot77 có thể sửa giúp mình lại là đưa ra bảng thông báo trên màn hình như lisp của bạn phamthanhbinh được không. Lisp của bạn phamthanhbinh có bao nhiêu loại đường kính đai thì xuất hiện bấy nhiêu bảng, bạn sửa lại chỉ xuất hiện 1 bảng cho tất cả các loại đai chọn nhé (như thông báo trong dòng command của bạn đó nhưng là bảng hiện trên màn hình)

Mình cám ơn nhiều  :)

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
Tot77    501

Sửa thêm:

 

(defun c:tmp()
  (defun GeD(v / l en)
    (setq l nil)
    (vlax-for item (vla-item (vla-get-blocks (vla-get-ActiveDocument (vlax-get-acad-object)))
    (cdr (assoc 2 (entget v))))
      (if (= "MTEXT" (cdr (assoc 0 (entget (setq en (vlax-vla-object->ename item))))))
(setq l en))
    ) l
  )
  (Prompt "\nChon Dim:")
  (setq l nil)
  (foreach x (acet-ss-to-list (ssget '((0 . "DIMENSION"))))
    (setq txt  (cdr (assoc 1 (entget (Ged x))))
 sl (atoi (substr txt (+ 2 (vl-string-search "[" txt))
  (- (vl-string-search "%" txt) (vl-string-search "[" txt) 1)))
 fi (atoi (substr txt (+ 4 (vl-string-search "%" txt))
  (- (vl-string-search "a" txt) (vl-string-search "%" txt) 3)))
 l (if (not (assoc fi l))
     (cons (cons fi sl) l)
     (subst (cons fi (+ sl (cdr (assoc fi l)))) (assoc fi l) l)))
  )
  (setq st "")
  (foreach x l (setq st (strcat st "\n" (itoa (cdr x)) (chr 216) (itoa (car x)))))
  (alert st)
  (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
proconeng86    8

 

Sửa thêm:

 

(defun c:tmp()
  (defun GeD(v / l en)
    (setq l nil)
    (vlax-for item (vla-item (vla-get-blocks (vla-get-ActiveDocument (vlax-get-acad-object)))
    (cdr (assoc 2 (entget v))))
      (if (= "MTEXT" (cdr (assoc 0 (entget (setq en (vlax-vla-object->ename item))))))
(setq l en))
    ) l
  )
  (Prompt "\nChon Dim:")
  (setq l nil)
  (foreach x (acet-ss-to-list (ssget '((0 . "DIMENSION"))))
    (setq txt  (cdr (assoc 1 (entget (Ged x))))
 sl (atoi (substr txt (+ 2 (vl-string-search "[" txt))
  (- (vl-string-search "%" txt) (vl-string-search "[" txt) 1)))
 fi (atoi (substr txt (+ 4 (vl-string-search "%" txt))
  (- (vl-string-search "a" txt) (vl-string-search "%" txt) 3)))
 l (if (not (assoc fi l))
     (cons (cons fi sl) l)
     (subst (cons fi (+ sl (cdr (assoc fi l)))) (assoc fi l) l)))
  )
  (setq st "")
  (foreach x l (setq st (strcat st "\n" (itoa (cdr x)) (chr 216) (itoa (car x)))))
  (alert st)
  (princ)
)
 

 

Lisp này là chuẩn rồi. Cám ơn bạn Tot77 nhiều nhé  :)  :)  :)

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
proconeng86    8

 

Sửa thêm:

 

(defun c:tmp()
  (defun GeD(v / l en)
    (setq l nil)
    (vlax-for item (vla-item (vla-get-blocks (vla-get-ActiveDocument (vlax-get-acad-object)))
    (cdr (assoc 2 (entget v))))
      (if (= "MTEXT" (cdr (assoc 0 (entget (setq en (vlax-vla-object->ename item))))))
(setq l en))
    ) l
  )
  (Prompt "\nChon Dim:")
  (setq l nil)
  (foreach x (acet-ss-to-list (ssget '((0 . "DIMENSION"))))
    (setq txt  (cdr (assoc 1 (entget (Ged x))))
 sl (atoi (substr txt (+ 2 (vl-string-search "[" txt))
  (- (vl-string-search "%" txt) (vl-string-search "[" txt) 1)))
 fi (atoi (substr txt (+ 4 (vl-string-search "%" txt))
  (- (vl-string-search "a" txt) (vl-string-search "%" txt) 3)))
 l (if (not (assoc fi l))
     (cons (cons fi sl) l)
     (subst (cons fi (+ sl (cdr (assoc fi l)))) (assoc fi l) l)))
  )
  (setq st "")
  (foreach x l (setq st (strcat st "\n" (itoa (cdr x)) (chr 216) (itoa (car x)))))
  (alert st)
  (princ)
)
 

 

Lisp của bạn trước mình chỉ thử với dim bố trí đai rất là ok, tuy nhiên mình vừa dùng lisp của bạn để làm việc, khi chọn lẫn cả những dim thường (dim không bố trí đai) thì lisp của bạn lại bị lỗi gì đó, không tính đai được. Lỗi này trong lisp của bạn phamthanhbinh đã sửa được rồi đó.

Bạn sửa lại giúp mình nốt lần này nhé. 

Mình cám ơn nhiều

9928_loi_lisp_tinh_dai_dam.jpg

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
Tot77    501

Không nghĩ bạn "quơ" luôn dim không đai.

 

(defun c:tmp()
  (defun GeD(v / l en)
    (setq l nil)
    (vlax-for item (vla-item (vla-get-blocks (vla-get-ActiveDocument (vlax-get-acad-object)))
    (cdr (assoc 2 (entget v))))
      (if (= "MTEXT" (cdr (assoc 0 (entget (setq en (vlax-vla-object->ename item))))))
(setq l en))
    ) l
  )
  (Prompt "\nChon Dim:")
  (setq l nil)
  (foreach x (acet-ss-to-list (ssget '((0 . "DIMENSION"))))
    (setq txt  (cdr (assoc 1 (entget (Ged x)))))
    (if (and (vl-string-search "[" txt) (vl-string-search "%" txt) (vl-string-search "a" txt))
      (setq
 sl (atoi (substr txt (+ 2 (vl-string-search "[" txt))
  (- (vl-string-search "%" txt) (vl-string-search "[" txt) 1)))
 fi (atoi (substr txt (+ 4 (vl-string-search "%" txt))
  (- (vl-string-search "a" txt) (vl-string-search "%" txt) 3)))
 l (if (not (assoc fi l))
     (cons (cons fi sl) l)
     (subst (cons fi (+ sl (cdr (assoc fi l)))) (assoc fi l) l))))
  )
  (if l
    (progn
      (setq st "")
      (foreach x l (setq st (strcat st "\n" (itoa (cdr x)) (chr 216) (itoa (car x)))))
      (alert st)))
  (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
proconeng86    8

 

Không nghĩ bạn "quơ" luôn dim không đai.

 

(defun c:tmp()
  (defun GeD(v / l en)
    (setq l nil)
    (vlax-for item (vla-item (vla-get-blocks (vla-get-ActiveDocument (vlax-get-acad-object)))
    (cdr (assoc 2 (entget v))))
      (if (= "MTEXT" (cdr (assoc 0 (entget (setq en (vlax-vla-object->ename item))))))
(setq l en))
    ) l
  )
  (Prompt "\nChon Dim:")
  (setq l nil)
  (foreach x (acet-ss-to-list (ssget '((0 . "DIMENSION"))))
    (setq txt  (cdr (assoc 1 (entget (Ged x)))))
    (if (and (vl-string-search "[" txt) (vl-string-search "%" txt) (vl-string-search "a" txt))
      (setq
 sl (atoi (substr txt (+ 2 (vl-string-search "[" txt))
  (- (vl-string-search "%" txt) (vl-string-search "[" txt) 1)))
 fi (atoi (substr txt (+ 4 (vl-string-search "%" txt))
  (- (vl-string-search "a" txt) (vl-string-search "%" txt) 3)))
 l (if (not (assoc fi l))
     (cons (cons fi sl) l)
     (subst (cons fi (+ sl (cdr (assoc fi l)))) (assoc fi l) l))))
  )
  (if l
    (progn
      (setq st "")
      (foreach x l (setq st (strcat st "\n" (itoa (cdr x)) (chr 216) (itoa (car x)))))
      (alert st)))
  (princ)
)
 

 

Tại vì trong đoạn cột thì không có đai, nếu chọn từng thằng thì tốn nhiều thời gian mà

Lisp này là ok rồi

Cám ơn bạn Tot77 nhiều nhé, bạn nhiệt tình thật đó. khi nào có dịp ra hà nội pm mình nhé, ae giao lưu nha  :)  :)  :)

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

Đăng nhập để thực hiện theo  

×