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

[Nhờ viết Lisp] Nhờ các bác viết lisp gom nhóm đèn trong bản vẽ điện

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

Nhờ các bác viết 1 lisp quét chọn các nhóm đèn đã đánh số trên mặt bằng( số bất kỳ, nhóm có thể 1 đèn, 2 đèn, 3 đèn...). Sau thao tác quét chọn các nhóm đèn trên mặt bằng thì ghi tên lên mặt bằng .

 

Ví dụ: có 3 nhóm đèn( 3 đèn số 34; 3 đèn số 35; 3 đèn số 42) được điều khiển bởi 1 công tắc 3 hạt. E cần ghi tên 3 nhóm đèn đó lên mặt bằng dạng "[34,35,42]" theo thứ tự từ bé đến lớn

 

Em có gửi file đính kèm! Các bác xem giúp e với ạ! E cảm ơn!

NHOMDEN.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
4 giờ trước, ngoducdung đã nói:

Nhờ các bác viết 1 lisp quét chọn các nhóm đèn đã đánh số trên mặt bằng( số bất kỳ, nhóm có thể 1 đèn, 2 đèn, 3 đèn...). Sau thao tác quét chọn các nhóm đèn trên mặt bằng thì ghi tên lên mặt bằng .

 

Ví dụ: có 3 nhóm đèn( 3 đèn số 34; 3 đèn số 35; 3 đèn số 42) được điều khiển bởi 1 công tắc 3 hạt. E cần ghi tên 3 nhóm đèn đó lên mặt bằng dạng "[34,35,42]" theo thứ tự từ bé đến lớn

 

Em có gửi file đính kèm! Các bác xem giúp e với ạ! E cảm ơn!

NHOMDEN.dwg

add zalo trao đổi thêm nhé (cần bản vẽ thực tế)

zalo: 0848.998.045

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

Dùng cái này coi.

(defun c:test ( / E ENT I LS N ND SS)
(setq ss (ACET-SS-TO-LIST (ssget '((0 . "TEXT")) )))
(setq ls (mapcar '(lambda (e) (cdr (assoc 1 (entget e))))
                 ss)
      )
(setq ls (vl-sort ls '(lambda (st st2 ) (< (atof st) (atof st2) ))))
(setq nd "[" i 0 n (length ls))
(while ( < i n)
  (if (= i (- n 1))
    (setq nd ( strcat nd (nth i ls) "]"))
    (setq nd (strcat nd (nth i ls) ","))
    )
  (setq i (1+ i))
  )
(setq ent (entget (car (entsel "\nChon text de update:"))))
(setq ent (subst (cons 1 nd) (assoc 1 ent) ent)
      )
  
(entmod ent)
  (princ)

)

 

  • Like 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

E cảm ơn bác cuongtk2. Bác có thể sửa giúp e chức năng thay vì gán kết quả vào 1 text! Thì sẽ chèn text đó tại 1 điểm mà người dùng pick chọn! Thank bác!

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

Sửa lại đây nhé:

(defun c:test ( / E ENT I LS N ND SS)
(setq ss (ACET-SS-TO-LIST (ssget '((0 . "TEXT")) )))
(setq ls (mapcar '(lambda (e) (cdr (assoc 1 (entget e))))
                 ss)
      )
(setq ls (vl-sort ls '(lambda (st st2 ) (< (atof st) (atof st2) ))))
(setq nd "[" i 0 n (length ls))
(while ( < i n)
  (if (= i (- n 1))
    (setq nd ( strcat nd (nth i ls) "]"))
    (setq nd (strcat nd (nth i ls) ","))
    )
  (setq i (1+ i))
  )

  (setq textdxf (entget (car ss)))
  (setq pt (getpoint "\nDiem dat text:"))
  (setq ent (list
              (cons 0 "TEXT")
              (cons 1 nd)
              (cons 67 0)
              (assoc 410 textdxf)
              (assoc 40 textdxf)
              (assoc 7 textdxf)
              (assoc 41 textdxf)
              (cons 10 pt)
              )
)
  
(entmake ent)
  (princ)

)

 

  • Like 2

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  

×