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  
quochuyksxd

[Hỏi] Cần tìm lisp về thiết lập cho toàn bộ Dim

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

quochuyksxd    24

Cho e xin hỏi trong diễn đàn có lisp nào có thể xử lý công việc như sau không?:

-Trong bản vẽ có nhiều kiểu tỷ lệ (TL1-100; TL1-50; TL1-25...) nhưng vì một lý do cần thay đổi kiểu cách dim như là kiểu text, hình dáng, màu sắc, text offset, các thông số khác...của các tỷ lệ đã thiết lập. Nếu giờ thiết lập lại cho toàn bộ các kiểu dim đã có thì rất mất thời gian. Xin hỏi có lệnh gì hoặc lisp gì hoặc nhờ các cao thủ lisp viết có thể xử lý công việc như sau:

-Thiết lập lại các thay đổi cho 1 dim do mình chọn (VD: TL1-100) sau đó chọn các dim cần thiết lập giống như kiểu tỷ lệ này-->apply-->OK

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ử lisp sau, chọn dimstyle nguồn qua 1 đối tượng của nó, sửa thông số, rồi chọn đối tượng thuộc dimstyle đích.

 

(defun c:ddi(/ a entg0 entg1 li tm name)
  (setq a (car (entsel "\nChon doi tuong thuoc dimstyle nguon:"))
entg0 (tblsearch "DIMSTYLE" (cdr (assoc 3 (entget a)))))
  (command "-dimstyle" "R" (cdr (assoc 3 (entget a))))
  (command "ddim")
  (setq entg1 (tblsearch "DIMSTYLE" (cdr (assoc 3 (entget a))))
li (vl-remove nil (mapcar '(lambda(x y)
(if (not (equal x y)) y nil)) entg0 entg1)))
  
  (prompt "\nChon doi tuong thuoc dimstyle dich can doi:")
  (mapcar '(lambda(x)
    (setq name (cdr (assoc 3 (entget x)))
  tm (tblobjname "DIMSTYLE" name))
    (foreach y li
      (entmod (if (assoc (car y) (entget tm))
      (subst y (assoc (car y) (entget tm)) (entget tm))
      (append (entget tm) (list y)))))
    (command "-dimstyle" "R" name)
    (command "-dimstyle" "A" (ssget "X" (list '(0 . "DIMENSION") (cons 3 name))) ""))
 (vl-remove-if 'listp (mapcar 'cadr (ssnamex (ssget '((0 . "DIMENSION")))))))
  
  (princ)
)
  • Vote tăng 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
quochuyksxd    24

Bạn thử lisp sau, chọn dimstyle nguồn qua 1 đối tượng của nó, sửa thông số, rồi chọn đối tượng thuộc dimstyle đích.

 

(defun c:ddi(/ a entg0 entg1 li tm name)
  (setq a (car (entsel "\nChon doi tuong thuoc dimstyle nguon:"))
entg0 (tblsearch "DIMSTYLE" (cdr (assoc 3 (entget a)))))
  (command "-dimstyle" "R" (cdr (assoc 3 (entget a))))
  (command "ddim")
  (setq entg1 (tblsearch "DIMSTYLE" (cdr (assoc 3 (entget a))))
li (vl-remove nil (mapcar '(lambda(x y)
(if (not (equal x y)) y nil)) entg0 entg1)))
  
  (prompt "\nChon doi tuong thuoc dimstyle dich can doi:")
  (mapcar '(lambda(x)
    (setq name (cdr (assoc 3 (entget x)))
  tm (tblobjname "DIMSTYLE" name))
    (foreach y li
      (entmod (if (assoc (car y) (entget tm))
      (subst y (assoc (car y) (entget tm)) (entget tm))
      (append (entget tm) (list y)))))
    (command "-dimstyle" "R" name)
    (command "-dimstyle" "A" (ssget "X" (list '(0 . "DIMENSION") (cons 3 name))) ""))
 (vl-remove-if 'listp (mapcar 'cadr (ssnamex (ssget '((0 . "DIMENSION")))))))
  
  (princ)
)

Cảm ơn bạn đã chia sẻ. Lisp này cơ bản đã thực hiện đúng theo ý tưởng của mình như trên rồi. Tuy nhiên khi sử dụng mình thấy bất cập  là mỗi lần cần ánh xạ thì buộc phải thay đổi tối thiểu 1 thông số ở dim nguồn. Bạn có thể hiểu chỉnh sao cho có thể không cần phải thay đổi ở dim nguồn (hoặc chỉ thay đổi thông số 1 lần duy nhất) và chọn đến dim đích là OK. có thể chọn nhiều dim đích thì càng tốt. 

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

Tôi không hiểu ý bạn lắm:

1. Lisp trên có thể chọn nhiều dim đích một lúc mà.

2. Bạn phải sửa thông số của dim nguồn thì lisp mới biết bạn muốn thay đổi thông số nào chứ vì mỗi dim có vài chục thông số khác nhau mà, nếu dim nguồn không đổi gì hết thì những cái dim đích kia cũng sẽ không đổi gì hết.  Hay bạn muốn toàn bộ thông số của cái này gán hết cho cái kia?

Còn nếu bạn muốn giống như lệnh MA của cad thì bạn phải thuộc lòng ý nghĩa và tên của từng thông số để gõ đúng tên nó.

  • 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
quochuyksxd    24

Ý mình nếu như mình ánh xạ còn sót dim đích thì khi chọn lại lại phải thay đổi thông số dim nguồn, trong khi đó dim nguồn đã set rồ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

Nếu bạn thường xuyên thay đổi dim thì nên tạo một cái dim tạm thời nào đó, rồi sửa thoải mái trên cái dim đó, lấy đó làm dim nguồn. Chứ tôi nghĩ chẳng có cách nào khác.

  • 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

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  

×