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

[Yêu cầu] Lisp đánh ký hiệu khung block att

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

Vẽ kiến trúc nhiều khi thêm bớt 1 bản vẽ phải đánh lại số thứ tự 1 phần rất khó quản lý. Ý tưởng mình đưa ra nhằm tiện lợi cho anh em kiến trúc cũng như kết cấu nên mong bác nào bỏ time nghiên cứu.

- Thường block khung tên sẽ có block att ở chỗ "tên bản vẽ" và "ký hiệu" và sẽ có các block khung cho các hạng mục khác nhau.

- Ý tưởng hoạt động lisp:

1. chọn 1 block khung cần đánh số thứ tự

2. chọn att (thuộc block đã chọn) ghi ký hiệu bản vẽ (ví dụ: CT-03)

3. kích vào block khung tiếp theo (các block khung này phải trùng tên với nhau) thì ở vị trí ký hiệu là bất kỳ cái gì nó cũng chuyển thành dạng tiếp theo của block mẫu (ví dụ KT-05 sẽ được đổi thành CT-04)

Thanks các bác đã quan tâm.

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

Lisp thay đổi Att tăng dần 1 đơn vị cho các Block_Att được chọn theo Att được chọn đầu tiên.

 

;; Thay doi att tang dan 1 don vi cho cac block_att duoc chon theo att duoc chon dau tien.
;; Doan Van Ha - CadViet.com - ngay 26/7/2013
(vl-load-com)
(defun C:HA( / ent ss tag lst pre suf int len num #SS->List #String:Split-First VxSetAtts)
 (defun #SS->List (ss / i lst)
  (repeat (setq i (sslength ss))
   (setq lst (cons (ssname ss (setq i (1- i))) lst))))
 (defun #String:Split-First (string symbol / i)
  (if (setq i (vl-string-position (ascii symbol) string))
   (list (substr string 1 (1+ i)) (substr string (+ 2 i)))
   (list string)))
 (defun VxSetAtts (Obj Lst / AttVal)
  (mapcar '(lambda (Att) (if (setq AttVal (cdr (assoc (vla-get-TagString Att) Lst))) (vla-put-TextString Att AttVal))) (vlax-invoke Obj 'GetAttributes))
  (vla-update Obj))
 (if
  (and
   (setq ent (car (nentsel "\nChon Att So hieu cua ban ve dau tien: ")))
   (princ "\nChon cac Block theo thu tu de thay So hieu ban ve...")
   (setq ss (ssget '((0 . "Insert") (66 . 1)))))
  (progn
   (setq tag (cdr (assoc 2 (setq elist (entget ent)))))
   (setq lst (#String:Split-First (cdr (assoc 1 elist)) "-"))
   (setq pre (car lst))
   (setq suf (cadr lst))
   (setq int (atoi suf))
   (setq len (strlen suf))
   (foreach n (#SS->List ss)
(setq num (itoa (setq int (1+ int))))
(repeat (- len (strlen num))
(setq num (strcat "0" num)))
(VxSetAtts (vlax-ename->vla-object n) (list (cons tag (strcat pre num))))))))
 
  • Vote tăng 4

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

Lisp rat có ích. nhưng cái này sau khi pick att đầu tiên phải chọn từng khung 1 thì ok. nếu quét để chọn block nó sẽ bị đánh số hiệu ngược. Bác có thể chỉnh 1 chút để quét block, đánh thứ tự bản vẽ theo block thứ tự ưu tiên từ trên xuống dưới, trái qua phải dc ko. Thanks bác 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

:( pick thì ok mà. Nhưng có tầm 5-6 chục bản vẽ. pick cũng ngại. phần pick chọn ấy mà quét tất cả block và nó sẽ đánh từ trên xuong dưới, trái qua phải thì hay bik mấy. Hoắc có 2 options ( theo thứ tự pick/tren xuong trái qua) thì tuyệt vời :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

 

Lisp thay đổi Att tăng dần 1 đơn vị cho các Block_Att được chọn theo Att được chọn đầu tiên.

;; Thay doi att tang dan 1 don vi cho cac block_att duoc chon theo att duoc chon dau tien.
;; Doan Van Ha - CadViet.com - ngay 26/7/2013
(vl-load-com)
(defun C:HA( / ent ss tag lst pre suf int len num #SS->List #String:Split-First VxSetAtts)
 (defun #SS->List (ss / i lst)
  (repeat (setq i (sslength ss))
   (setq lst (cons (ssname ss (setq i (1- i))) lst))))
 (defun #String:Split-First (string symbol / i)
  (if (setq i (vl-string-position (ascii symbol) string))
   (list (substr string 1 (1+ i)) (substr string (+ 2 i)))
   (list string)))
 (defun VxSetAtts (Obj Lst / AttVal)
  (mapcar '(lambda (Att) (if (setq AttVal (cdr (assoc (vla-get-TagString Att) Lst))) (vla-put-TextString Att AttVal))) (vlax-invoke Obj 'GetAttributes))
  (vla-update Obj))
 (if
  (and
   (setq ent (car (nentsel "\nChon Att So hieu cua ban ve dau tien: ")))
   (princ "\nChon cac Block theo thu tu de thay So hieu ban ve...")
   (setq ss (ssget '((0 . "Insert") (66 . 1)))))
  (progn
   (setq tag (cdr (assoc 2 (setq elist (entget ent)))))
   (setq lst (#String:Split-First (cdr (assoc 1 elist)) "-"))
   (setq pre (car lst))
   (setq suf (cadr lst))
   (setq int (atoi suf))
   (setq len (strlen suf))
   (foreach n (#SS->List ss)
(setq num (itoa (setq int (1+ int))))
(repeat (- len (strlen num))
(setq num (strcat "0" num)))
(VxSetAtts (vlax-ename->vla-object n) (list (cons tag (strcat pre num))))))))
 

sao mình làm load nó bị lỗi như vậy là gì ai chỉ dùm với:

APPLOAD ha.lsp successfully loaded.

Command: ; error: syntax error
Command:
Chỉnh sửa theo namgiangduy89

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

lỗi khi download file lisp khi click vào nút DOWNLOAD.

 

tạm thời sử dụng Copy & Paste.

Diễn đàn sao í. Hôm qua tôi down ở trên (kích vào nút download) và load thì ok, không hề bị lỗ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

Vẫn báo lỗi như trên anh oi

Có thể tại bạn chưa pick vào đúng att cần chọn mà chỉ pick vào block nên lỗi 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

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  

×