Chuyển đến nội dung
Diễn đàn CADViet
Đăng nhập để thực hiện theo  
h123ngoisao

[Nhờ viết Lisp] Lisp thay đổi giá trị mặc định của Atribuite

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

Chào các bác,

Em muốn nhờ các bác viết giúp em lisp để chỉnh sửa giá trị mặc định của 1 Tag Atribuite (có thể chọn được) của nhiều bản vẽ trong cùng 1 thư mục.

Các bản vẽ này không có block mà chỉ có các Atribuite (các file này khi Insert sẽ thành block atribuite, nó là file thư viện của Autocad Electrical).

Em có tìm được 1 số file chỉnh atribuite trên mạng nhưng chúng đều yêu cầu chọn block mới dùng được.

Em có đính kèm 1 số file mẫu như dưới.

Mong các bác giúp đỡ.

 

 

mẫu.png

PB.zip

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

Thao tác này hiếm gặp, nên viết lisp sẽ mất công hơn nhiều so với bạn làm thủ công.

Ví dụ nếu bạn làm bằng tay thì mất bao nhiêu thời gian?

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
3 giờ trước, Nguyen Hoanh đã nói:

Thao tác này hiếm gặp, nên viết lisp sẽ mất công hơn nhiều so với bạn làm thủ công.

Ví dụ nếu bạn làm bằng tay thì mất bao nhiêu thời gian?

Cám ơn bác đã trả lời,

Em nghĩ nếu làm bằng tay thì sẽ phải mất 3-5 ngày đó, nếu chỉ ngồi chỉnh sửa.

thư mục có hơn 3500 file bác à, mà thư viện có khoảng 10 thư mục như vậy!

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

Mình đã viết lisp cho bạn như bên dưới.

 

Cách dùng:

1- Download file lisp về

2- Mở file lisp, Sửa chữ chỗ ("DESC3"."S"..... theo nguyên tắc: Phía bên trái dấu chấm là tên tag, phía bên phải dấu chấm là giá trị default value. Mỗi dòng là 1 lần thay. Lưu lại.

3- Add file lisp này vào mục chạy tự động, bằng lệnh Appload > Contents > Add

4- Dùng một chức năng nào đó để mở 3500 file của bạn, mỗi lần file được mở lên, lisp sẽ tự động chạy, sửa, lưu lại và tự động close bản vẽ.

 

Sau khi dùng xong, thì xóa hoặc rename file lisp thành tên khác, rồi remove file lisp ra khỏi việc chạy tự động.

(setq
  cv:thay '(
	 ("DESC3" . "S")
	 ("DESC1" . "XY")
	)
)

(defun c:thayattr( / dt ss ent tt find repl)
(foreach dt cv:thay
  (setq ss (ssget "X" (list (cons 0 "ATTDEF") (cons 2 (car dt)))))
  (foreach ent (vl-remove-if 'listp (mapcar 'cadr (ssnamex ss)))
    (setq tt (entget ent)
	  find (assoc 1 tt)
	  repl (cons 1 (cdr dt))
	  tt (if find
	       (subst repl find tt)
	       (cons repl find)
	     )
     )
     (entmod tt)
  )
)
  (command ".qsave" "y")
  (command ".close")
)
(c:thayattr)

 

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
3 phút trước, Nguyen Hoanh đã nói:

Mình đã viết lisp cho bạn như bên dưới.

 

Cách dùng:

1- Download file lisp về

2- Mở file lisp, Sửa chữ chỗ ("DESC3"."S"..... theo nguyên tắc: Phía bên trái dấu chấm là tên tag, phía bên phải dấu chấm là giá trị default value. Mỗi dòng là 1 lần thay. Lưu lại.

3- Add file lisp này vào mục chạy tự động, bằng lệnh Appload > Contents > Add

4- Dùng một chức năng nào đó để mở 3500 file của bạn, mỗi lần file được mở lên, lisp sẽ tự động chạy, sửa, lưu lại và tự động close bản vẽ.

 

Sau khi dùng xong, thì xóa hoặc rename file lisp thành tên khác, rồi remove file lisp ra khỏi việc chạy tự động.


(setq
  cv:thay '(
	 ("DESC3" . "S")
	 ("DESC1" . "XY")
	)
)

(defun c:thayattr( / dt ss ent tt find repl)
(foreach dt cv:thay
  (setq ss (ssget "X" (list (cons 0 "ATTDEF") (cons 2 (car dt)))))
  (foreach ent (vl-remove-if 'listp (mapcar 'cadr (ssnamex ss)))
    (setq tt (entget ent)
	  find (assoc 1 tt)
	  repl (cons 1 (cdr dt))
	  tt (if find
	       (subst repl find tt)
	       (cons repl find)
	     )
     )
     (entmod tt)
  )
)
  (command ".qsave" "y")
  (command ".close")
)
(c:thayattr)

 

cám ơn bác đã giúp đỡ, để em chạy thử.

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
19 phút trước, Nguyen Hoanh đã nói:

Mình đã viết lisp cho bạn như bên dưới.

 

Cách dùng:

1- Download file lisp về

2- Mở file lisp, Sửa chữ chỗ ("DESC3"."S"..... theo nguyên tắc: Phía bên trái dấu chấm là tên tag, phía bên phải dấu chấm là giá trị default value. Mỗi dòng là 1 lần thay. Lưu lại.

3- Add file lisp này vào mục chạy tự động, bằng lệnh Appload > Contents > Add

4- Dùng một chức năng nào đó để mở 3500 file của bạn, mỗi lần file được mở lên, lisp sẽ tự động chạy, sửa, lưu lại và tự động close bản vẽ.

 

Sau khi dùng xong, thì xóa hoặc rename file lisp thành tên khác, rồi remove file lisp ra khỏi việc chạy tự động.


(setq
  cv:thay '(
	 ("DESC3" . "S")
	 ("DESC1" . "XY")
	)
)

(defun c:thayattr( / dt ss ent tt find repl)
(foreach dt cv:thay
  (setq ss (ssget "X" (list (cons 0 "ATTDEF") (cons 2 (car dt)))))
  (foreach ent (vl-remove-if 'listp (mapcar 'cadr (ssnamex ss)))
    (setq tt (entget ent)
	  find (assoc 1 tt)
	  repl (cons 1 (cdr dt))
	  tt (if find
	       (subst repl find tt)
	       (cons repl find)
	     )
     )
     (entmod tt)
  )
)
  (command ".qsave" "y")
  (command ".close")
)
(c:thayattr)

 

Bác Hoành ơi, phải mở lần lượt từng file lên hả bác.

Bác có cách nào mở file trong thư mục lần lượt rồi đóng lại không?

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

Mỗi thư mục của bạn, tổng hợp lại có nhiều Tag không? Mấy file bạn gửi trên kia, lisp tổng hợp được 19 cái Tag, nếu nhiều quá sẽ tràn màn hình và nếu phân thành nhiều côt cũng phức tạp.

image.png.53195509b2b0ef376a0a73601b9c3f80.png

 

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
1 giờ} trướ}c, h123ngoisao đã nói:

Bác Hoành ơi, phải mở lần lượt từng file lên hả bác.

Bác có cách nào mở file trong thư mục lần lượt rồi đóng lại không?

Em tìm được cách mở rồi, cơ mà e mở cả thư mục lên máy gần như treo luôn.

cám ơn bác lần nữa

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
7 phút trước, NTHAHT đã nói:

Mỗi thư mục của bạn, tổng hợp lại có nhiều Tag không? Mấy file bạn gửi trên kia, lisp tổng hợp được 19 cái Tag, nếu nhiều quá sẽ tràn màn hình và nếu phân thành nhiều côt cũng phức tạp.

image.png.53195509b2b0ef376a0a73601b9c3f80.png

 

mỗi thư mục khoảng hơn 2500 file, hiện tại thì mình chỉ muốn chỉnh sửa giá trị của tag "TAG1" thôi 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

Ý mình hỏi ở trên là tổng hợp tất cả các file trong 1 thư mục lại (chứ không hỏi số lượng file). Mình làm thử khi chọn được thư mục thì lisp liệt kê được từng đó Tag. Nếu nhu cầu của bạn chỉ chỉnh sửa mỗi TAG1 thì đơn giản hơn.

Như hình ảnh ở trên thì có thể sửa được tất cả các Tag.

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
9 phút trước, NTHAHT đã nói:

Ý mình hỏi ở trên là tổng hợp tất cả các file trong 1 thư mục lại (chứ không hỏi số lượng file). Mình làm thử khi chọn được thư mục thì lisp liệt kê được từng đó Tag. Nếu nhu cầu của bạn chỉ chỉnh sửa mỗi TAG1 thì đơn giản hơn.

vừa nãy mình hiểu nhầm ý của bạn, xin lỗi nhé.

các file hầu như đều có các tag có tên như vậy, số lượng tag xê dịch không 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
1 giờ} trướ}c, Doan Nguyen Van đã nói:

Bài toán này thật ra cũng không cần mở file mà vẫn chỉnh được

Có cách nào vậy, bác hướng dẫn em đ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

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  

×