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

Nhờ các anh chị trong forums viết hộ em lisp sau.

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

Em có 1 bản vẽ gồm : các dim chuẩn và các dim đã bị ed.

Yêu cầu lisp chuyển màu chữ trong dim đã bị ed khác với màu chữ trong dim chưa bị ed.

Em 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

 

Em có 1 bản vẽ gồm : các dim chuẩn và các dim đã bị ed.

Yêu cầu lisp chuyển màu chữ trong dim đã bị ed khác với màu chữ trong dim chưa bị ed.

Em cám ơn nhiều ạ.

Hề hề hề,

Bạn dùng thử cái này coi sao nhé:

Do bạn không chỉ định màu cần đổi nên mình cứ tạm mặc địng đó là màu vàng. Nếu bạn chưa ưng có thể thay bằng màu tùy ý. Lisp này sẽ đổi tất cả các dim đã bị edit mà không quan tâm tới việc edit ấy đúng hay sai.

http://www.cadviet.com/upfiles/3/5194_changecolorofmoddim.lsp

 

 

(defun c:edd ( / ssd els)
(vl-load-com)
(command "undo" "be")
(setq ssd (acet-ss-to-list (ssget (list (cons 0 "dimension")))))
(foreach dm ssd
     (if (/= (cdr (assoc 1 (entget dm))) "")
         (if (= (assoc 62 (entget dm)) nil)
             (setq els (append (entget dm) (list (cons 62 2)) ))
             (setq els (subst (cons 62 2) (assoc 62 (entget dm)) (entget dm)))
          )
     )
     (entmod els)
)
(command "undo" "e")
(princ)
 
(defun c:edd ( / ssd els)
(vl-load-com)
(command "undo" "be")
(setq ssd (acet-ss-to-list (ssget (list (cons 0 "dimension")))))
(foreach dm ssd
     (if (/= (cdr (assoc 1 (entget dm))) "")
         (if (= (assoc 62 (entget dm)) nil)
             (setq els (append (entget dm) (list (cons 62 2)) ))
             (setq els (subst (cons 62 2) (assoc 62 (entget dm)) (entget dm)))
          )
     )
     (entmod els)
)
(command "undo" "e")
(princ)
)
(defun c:edd ( / ssd els)
(vl-load-com)
(command "undo" "be")
(setq ssd (acet-ss-to-list (ssget (list (cons 0 "dimension")))))
(foreach dm ssd
     (if (/= (cdr (assoc 1 (entget dm))) "")
         (if (= (assoc 62 (entget dm)) nil)
             (setq els (append (entget dm) (list (cons 62 2)) ))
             (setq els (subst (cons 62 2) (assoc 62 (entget dm)) (entget dm)))
          )
     )
     (entmod els)
)
(command "undo" "e")
(princ)
)

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

 

Hề hề hề,

Bạn dùng thử cái này coi sao nhé:

Do bạn không chỉ định màu cần đổi nên mình cứ tạm mặc địng đó là màu vàng. Nếu bạn chưa ưng có thể thay bằng màu tùy ý. Lisp này sẽ đổi tất cả các dim đã bị edit mà không quan tâm tới việc edit ấy đúng hay sai.

http://www.cadviet.com/upfiles/3/5194_changecolorofmoddim.lsp

 

 

(defun c:edd ( / ssd els)
(vl-load-com)
(command "undo" "be")
(setq ssd (acet-ss-to-list (ssget (list (cons 0 "dimension")))))
(foreach dm ssd
     (if (/= (cdr (assoc 1 (entget dm))) "")
         (if (= (assoc 62 (entget dm)) nil)
             (setq els (append (entget dm) (list (cons 62 2)) ))
             (setq els (subst (cons 62 2) (assoc 62 (entget dm)) (entget dm)))
          )
     )
     (entmod els)
)
(command "undo" "e")
(princ)
 
(defun c:edd ( / ssd els)
(vl-load-com)
(command "undo" "be")
(setq ssd (acet-ss-to-list (ssget (list (cons 0 "dimension")))))
(foreach dm ssd
     (if (/= (cdr (assoc 1 (entget dm))) "")
         (if (= (assoc 62 (entget dm)) nil)
             (setq els (append (entget dm) (list (cons 62 2)) ))
             (setq els (subst (cons 62 2) (assoc 62 (entget dm)) (entget dm)))
          )
     )
     (entmod els)
)
(command "undo" "e")
(princ)
)
(defun c:edd ( / ssd els)
(vl-load-com)
(command "undo" "be")
(setq ssd (acet-ss-to-list (ssget (list (cons 0 "dimension")))))
(foreach dm ssd
     (if (/= (cdr (assoc 1 (entget dm))) "")
         (if (= (assoc 62 (entget dm)) nil)
             (setq els (append (entget dm) (list (cons 62 2)) ))
             (setq els (subst (cons 62 2) (assoc 62 (entget dm)) (entget dm)))
          )
     )
     (entmod els)
)
(command "undo" "e")
(princ)
)

 

Bác viết vầy là chưa lường hết các TH đổi màu cho dim rồi.

Trên bản vẽ dưới đây, với Dim này, với Lisp bác viết thì cho dù bác edit dim đi chăng nữa thì không chịu đổi màu đâu

http://www.cadviet.com/upfiles/3/4652_dim.dwg

  • 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

Bác viết vầy là chưa lường hết các TH đổi màu cho dim rồi.

Trên bản vẽ dưới đây, với Dim này, với Lisp bác viết thì cho dù bác edit dim đi chăng nữa thì không chịu đổi màu đâu

http://www.cadviet.com/upfiles/3/4652_dim.dwg

Hề hề hề,

Chân thành cảm ơn sự góp ý của bác Tue_NV.

Quả thực là cái dim của bác mình không đổi được màu bằng cái lisp mình viết. Lý do thì mình chưa rõ, cần phải tìm hiểu thêm vì đây là lần đầu tiên mình gặp cái dim kiểu này. Rõ ràng trong mã dxf của nó thì mã màu là 2, vậy mà hiển thị thì lại là màu số 5. Có điều chi lắt léo ở đây mà mình chưa thủng.

Mình đã thử dùng cả lệnh change-> property->color  để đổi màu, nhưng cũng không được. Chắc cái màu này ăn theo cái dim style rồi nên mình phải ngẫm đã chứ chưa thể giải quyết được.

Hề hề hề,... 

 

PS: Sau khi tò mò, mình mới phát hiện ra là dim của bác Tue_NV được lấy màu là byBlock. Cái Block dim này gồm có 10 đối tượng con tạo thành trong đó có tới 7 đối tượng có màu 5 và 3 đối tượng có màu 0.

Để đổi màu các đối tượng con này. mình phải explode cái block dim này ra và như vậy làm cho tính associate của nó bị phá vỡ cho dù sau đó mình hoàn toàn có thể tạo block lại với các đối tượng con mới này. Điều này có nhẽ là chủ thớt cũng không khoái, nhưng mình chưa biết cách nào hơn nên đành gác tay chờ các bác khác ra sức 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

1). Nếu đổi bằng cad trên bản vẽ bác Tue_NV, vào change thì bác đổi ở "Text color" chứ không phải ở "Color".

2). Xử lý Dim là cực kỳ phức tạp, nhất là dim Override, vì nó liên quan tới dữ liệu mở rộng Xdata, mã DXF 1070. Bác dùng (assoc -3 (entget ent '("ACAD"))) sẽ thấy.

3). Chọn dim Override: (ssget '((0 . "DIMENSION") (1 . "~")))

4). Tặng bác file lisp của Terry Miller để nghiên cứu thêm về dim đau khổ.

http://www.cadviet.com/upfiles/3/67029_matchprop_dim_cho_dimtextmtext.lsp

  • 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

 

......

..

PS: Sau khi tò mò, mình mới phát hiện ra là dim của bác Tue_NV được lấy màu là byBlock. Cái Block dim này gồm có 10 đối tượng con tạo thành trong đó có tới 7 đối tượng có màu 5 và 3 đối tượng có màu 0.

Để đổi màu các đối tượng con này. mình phải explode cái block dim này ra và như vậy làm cho tính associate của nó bị phá vỡ cho dù sau đó mình hoàn toàn có thể tạo block lại với các đối tượng con mới này. Điều này có nhẽ là chủ thớt cũng không khoái, nhưng mình chưa biết cách nào hơn nên đành gác tay chờ các bác khác ra sức vậy.

 

Cái này em thấy đơn giản mà bác. Code của bác đây, em chỉnh lại:

 

(defun c:edd ( / ssd els)
(vl-load-com)
(command "undo" "be")
(setq ssd (acet-ss-to-list (ssget (list (cons 0 "dimension")))))
(foreach dm ssd
     (if (/= (cdr (assoc 1 (entget dm))) "")
            (command "._DIMOVERRIDE" "DIMCLRT" "2" "DIMCLRD" "2" "DIMCLRE" "2" "" dm "")
     )
     (entmod els)
)
(command "undo" "e")
(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

 

Cái này em thấy đơn giản mà bác. Code của bác đây, em chỉnh lại:

 

(defun c:edd ( / ssd els)
(vl-load-com)
(command "undo" "be")
(setq ssd (acet-ss-to-list (ssget (list (cons 0 "dimension")))))
(foreach dm ssd
     (if (/= (cdr (assoc 1 (entget dm))) "")
            (command "._DIMOVERRIDE" "DIMCLRT" "2" "DIMCLRD" "2" "DIMCLRE" "2" "" dm "")
     )
     (entmod els)
)
(command "undo" "e")
(princ)
)

Hề hề hề,

Thanks bác Tue_NV. Quả thực là mình không nghĩ tới việc sử dụng các biến hệ thống này. Đây là một bài học tốt cho những người đang tập vỉết lisp.

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 cũng mót được cái này của Ketxu (lisp tìm dim fake) 

(defun c:edd ( / ss)
  (vl-load-com)
  (ssget "_X" '((0 . "*DIMENSION") (1 . "*?*")))
  (vlax-for x (setq ss (vla-get-activeselectionset (vla-get-activedocument (vlax-get-acad-object)))) (vla-put-TextColor x 2))
  (vla-delete ss)
  (princ)
  )

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  

×