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  
jacsonchuong

Hỏi cách đổi màu đối tượng trong CAD?

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

Chào các bạn! Cho mình hỏi một chút về vấn đề sau:

Mình đã tạo 2 số và 2 vòng tròn bao quanh 2 số đó và đều có màu vàng (1 số tạo trước và 1 số tạo sau). Bây giờ mình muốn đổi màu của cả 2 số sang màu đỏ nhưng chỉ đổi được màu của số 311 còn số 312 thì không đổi được - File ví dụ tải tại đây - file định dạng CAD 2004

Mấy anh, mấy chị làm ơn chỉ các đổi màu bên số 312 dùm em với, em muốn điên với vụ này lun. :bigsmile:

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
master_worse    87
Chào các bạn! Cho mình hỏi một chút về vấn đề sau:

Mình đã tạo 2 số và 2 vòng tròn bao quanh 2 số đó và đều có màu vàng (1 số tạo trước và 1 số tạo sau). Bây giờ mình muốn đổi màu của cả 2 số sang màu đỏ nhưng chỉ đổi được màu của số 311 còn số 312 thì không đổi được - File ví dụ tải tại đây

Mấy anh, mấy chị làm ơn chỉ các đổi màu bên số 312 dùm em với, em muốn điên với vụ này lun. :bigsmile:

 

Bạn nhấp đúp vào text 312 rối bôi đen nó - chuyển màu sang ByLayer - thoát ra

bây giờ có thể đổi sang màu khác 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
Bạn nhấp đúp vào text 312 rối bôi đen nó - chuyển màu sang ByLayer - thoát ra

bây giờ có thể đổi sang màu khác rồi đó

 

Bạn ơi nó nhiều lắm (khoản 1000 số như vậy đó), mình đã thử làm được rồi nhưng nếu làm hết chắc mình chặt tay mình mất :bigsmile: . Có cách này chuyển tất cả (số lượng nhiều) 1 lần được không 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
master_worse    87
Bạn ơi nó nhiều lắm (khoản 1000 số như vậy đó), mình đã thử làm được rồi nhưng nếu làm hết chắc mình chặt tay mình mất :bigsmile: . Có cách này chuyển tất cả (số lượng nhiều) 1 lần được không bạn

 

còn cách dùng lệnh EXPLODE chuyển mtext --> text (nếu không cần phải sử dụng mtext):bigsmile:

  • 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
tucdrom    642
Bạn ơi nó nhiều lắm (khoản 1000 số như vậy đó), mình đã thử làm được rồi nhưng nếu làm hết chắc mình chặt tay mình mất :bigsmile: . Có cách này chuyển tất cả (số lượng nhiều) 1 lần được không bạn

Cách 1:Bạn dùng lệnh Fi lọc riêng các text đó ra,sau đó đổi màu đồng loạt cho các text đó

Cách 2:Nếu các text đó nằm trên cùng 1 layer,bạn Layiso layer đó,sau đó thay đổi mà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
Tue_NV    3.841

Cách 1:Bạn dùng lệnh Fi lọc riêng các text đó ra,sau đó đổi màu đồng loạt cho các text đó

Cách 2:Nếu các text đó nằm trên cùng 1 layer,bạn Layiso layer đó,sau đó thay đổi màu.

Nói thực tình : làm như cách tucdrom và master_worse là không nên vì đối tượng là Mtext bị nổ tung ra mất rồi -> mất đi định dạng ban đầu. 2 bạn thử nghĩ lại xem : Tại sao số Mtext 311 lại thay đổi màu được trong khi đó Mtext 312 không đổi màu được????

 

Tue_NV đang suy nghĩ vấn đề này. Hy vọng là nghĩ ra để giúp cho bạn jacsonchuong :bigsmile:

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
tucdrom    642
Nói thực tình : làm như cách tucdrom và master_worse là không nên vì đối tượng là Mtext bị nổ tung ra mất rồi -> mất đi định dạng ban đầu. 2 bạn thử nghĩ lại xem : Tại sao số Mtext 311 lại thay đổi màu được trong khi đó Mtext 312 không đổi màu được????

 

Tue_NV đang suy nghĩ vấn đề này. Hy vọng là nghĩ ra để giúp cho bạn jacsonchuong :bigsmile:

Nguyên nhân là do khi ghi 312 = lệnh Mtext thì màu của số 312 lại để là ByLayer 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
tucdrom    642

Em nhầm:đúng như bác Tue_NV nói.Tại sao mtext 311 đổi đc màu còn mtext 312 thì ko?Lạ nhỉ? :bigsmile:

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
Tue_NV    3.841
Nguyên nhân là do khi ghi 312 = lệnh Mtext thì màu của số 312 lại để là ByLayer bác ạ.

Không phải-> bạn kiểm tra lại xem : số 311 và 312 đều ở màu Yellow

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
Tue_NV    3.841
Chào các bạn! Cho mình hỏi một chút về vấn đề sau:

Mình đã tạo 2 số và 2 vòng tròn bao quanh 2 số đó và đều có màu vàng (1 số tạo trước và 1 số tạo sau). Bây giờ mình muốn đổi màu của cả 2 số sang màu đỏ nhưng chỉ đổi được màu của số 311 còn số 312 thì không đổi được - File ví dụ tải tại đây - file định dạng CAD 2004

Mấy anh, mấy chị làm ơn chỉ các đổi màu bên số 312 dùm em với, em muốn điên với vụ này lun. :bigsmile:

Chào bạn jacsonchuong, tucdrom, master_worse

Tue_Nv vẫn bảo lưu phương án là không nổ MTEXT vì sẽ làm mất đii định dạng ban đầu ngay. Trường hợp MTEXT sử dụng font Symbol để viết -> nếu như nổ ra thì sẽ tan tành ngay.

 

Tue_NV đã tìm hiểu nguyên nhân mà vấn đề bạn jacsonchuong đưa ra : các MTEXT như số 312 thì ta không thể thay màu được, cũng không thể MA thay đổi nó.

Mình có viết 1 đoạn Code có tác dụng -> đổi các số 312 từ số không đổi màu được, không MA được trở thành số 312 đổi màu được, không MA được

Lisp đó đây. Các bạn sử dụng thử xem sao.

 

(defun c:cmtext(/ ss ans vitri skt i n e chuoicu tachdau tachcuoi chunoi)

(command "undo" "be")

(command "cmdecho" 0)

(setq ss (ssget "X" '((0 . "MTEXT"))) n (sslength ss) i 0)

(setq skt 4)

(while (< i n)

(setq e (entget(ssname ss i)))

(setq chuoicu (cdr(assoc 1 e)))

(setq st "\\C2")

(if (setq vitri (pos st chuoicu))

(progn

(setq tachdau (substr chuoicu 1 (- vitri 1)))

(setq tachcuoi (substr chuoicu (+ vitri skt) (+ (- (strlen chuoicu) vitri skt) 1)))

(setq chunoi (strcat tachdau tachcuoi))

(setq e (subst (cons 1 chunoi) (assoc 1 e) e))

(entmod e)

)

)

(setq i (1+ i))

)

(princ)

)

;

(defun pos (sub st / l1 l2 index)

(setq index 1

l1 (strlen sub)

l2 (strlen st)

)

(while

(and (<= (+ index l1 -1) l2) (/= sub (substr st index l1)))

(setq index (1+ index))

)

(if (= sub (substr st index l1))

index

nil

)

)

  • 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ám ơn các bạn rất nhiều! Mình đã đổi được nhờ cách của bạn master_worse do text của mình không dùng font symbol mà dùng font ABC nên khi chuyển sang không bị gì cả. Dù sau cũng cám ơn các bạn rất nhiều, khỏe quá :bigsmile: :cry: :cry: :bigsmile: :cry:

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
master_worse    87
Chào bạn jacsonchuong, tucdrom, master_worse

Tue_Nv vẫn bảo lưu phương án là không nổ MTEXT vì sẽ làm mất đii định dạng ban đầu ngay. Trường hợp MTEXT sử dụng font Symbol để viết -> nếu như nổ ra thì sẽ tan tành ngay.

 

Tue_NV đã tìm hiểu nguyên nhân mà vấn đề bạn jacsonchuong đưa ra : các MTEXT như số 312 thì ta không thể thay màu được, cũng không thể MA thay đổi nó.

Mình có viết 1 đoạn Code có tác dụng -> đổi các số 312 từ số không đổi màu được, không MA được trở thành số 312 đổi màu được, không MA được

Lisp đó đây. Các bạn sử dụng thử xem sao.

 

(defun c:cmtext(/ ss ans vitri skt i n e chuoicu tachdau tachcuoi chunoi)

........................

(setq st "\\C2")

-------------------

Tue_VN có thể xem lại không nếu vậy chỉ đổi được màu vàng thôi

Tue_VN có thể bỏ chuổi "\\C*;" bằng một hàm thay thế nào đó ra khỏi chuỗi giá trị của mtext thì áp dụng được cho nhiều màu hơ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
elleHCSC    98

Các bạn test cái elleHCSC viết xem nhé, mình chạy thấy nó ổn:

;;---------------------------------------------------------------------------------Test func
(defun C:CC ( / ss1 col)
 (vl-load-com)
 (prompt "\n<< Change color for TEXT, MTEXT only >>")
 (initget (+ 1 2 4))
 (setq col (getint "\n - Color (from 1 to 255, 256 for ByLayer)?: "))
 (setq ss1 (ssget (list(cons 0 "*TEXT"))))
 (DoiMau1 ss1 col)
 (princ)
)
;;---------------------------------------------------------------------------------Test func
(defun DoiMau1 (ss mau / ent i j Vla-obj mt mc tmp tf bef aff ret)
 (setq i 0)
 (setq tmp (strcat "C" (itoa mau)))  
 (while (< i (sslength ss))
   (setq ent (ssname ss i))
   (setq Vla-obj (vlax-ename->vla-object ent))
   (if (= (cdr (assoc 0 (entget ent))) "MTEXT")
     (progn
(setq mt (vlax-get-property Vla-obj 'TextString))	
;find color def
(setq j (vl-string-search (strcase "\\c") mt))
(if (/= j nil)
  (progn
    (setq bef (SubStr mt 1 j))
    (setq ret (vl-string-left-trim bef mt))
    (setq tf (LeftStr ";" ret))
    (setq aff (vl-string-left-trim tf ret))
    (setq mc (strcat bef "\\" tmp aff))    
    (vlax-put-property Vla-obj 'TextString mc)	    
  )
  (vlax-put-property Vla-obj 'Color mau)
);if
     );
     (vlax-put-property Vla-obj 'Color mau) ;for TEXT obj
   );if
   (setq i (1+ i))
 )
)
;;---------------------------------------------------------------------------------Test func
(Defun LeftStr (Key Str / S i n)
 (if (or Str Key)
   (Progn
     (Setq i 1 n(Strlen Str))
     (While (and (<= i n) (/= Key (SubStr Str i 1)))
(Setq i (+ 1 i))
     );while
     (Setq S (SubStr Str 1 (- i 1)))
   );progn
 );if
 S
)
;;---------------------------------------------------------------------------------Test func

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
Khangrm    0

 

Các bạn test cái elleHCSC viết xem nhé, mình chạy thấy nó ổn:

;;---------------------------------------------------------------------------------Test func(defun C:CC ( / ss1 col)  (vl-load-com)  (prompt "\n<< Change color for TEXT, MTEXT only >>")  (initget (+ 1 2 4))  (setq col (getint "\n - Color (from 1 to 255, 256 for ByLayer)?: "))  (setq ss1 (ssget (list(cons 0 "*TEXT"))))  (DoiMau1 ss1 col)  (princ));;---------------------------------------------------------------------------------Test func(defun DoiMau1 (ss mau / ent i j Vla-obj mt mc tmp tf bef aff ret)  (setq i 0)  (setq tmp (strcat "C" (itoa mau)))    (while (< i (sslength ss))    (setq ent (ssname ss i))    (setq Vla-obj (vlax-ename->vla-object ent))    (if (= (cdr (assoc 0 (entget ent))) "MTEXT")      (progn	(setq mt (vlax-get-property Vla-obj 'TextString))		;find color def	(setq j (vl-string-search (strcase "\\c") mt))	(if (/= j nil)	  (progn	    (setq bef (SubStr mt 1 j))	    (setq ret (vl-string-left-trim bef mt))	    (setq tf (LeftStr ";" ret))	    (setq aff (vl-string-left-trim tf ret))	    (setq mc (strcat bef "\\" tmp aff))    	    (vlax-put-property Vla-obj 'TextString mc)	    	  )	  (vlax-put-property Vla-obj 'Color mau)	);if      );      (vlax-put-property Vla-obj 'Color mau) ;for TEXT obj    );if    (setq i (1+ i))  ));;---------------------------------------------------------------------------------Test func(Defun LeftStr (Key Str / S i n)  (if (or Str Key)    (Progn      (Setq i 1 n(Strlen Str))      (While (and (<= i n) (/= Key (SubStr Str i 1)))	(Setq i (+ 1 i))      );while      (Setq S (SubStr Str 1 (- i 1)))    );progn  );if  S);;---------------------------------------------------------------------------------Test func

Thanks bạn

elleHCSC. Lisp chạy tốt bạn nhé

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  

×