Chuyển đến nội dung
Diễn đàn CADViet
Chia.se.Hoc.hoi

Bổ sung thêm mã màu True color cho Lisp thay đổi màu

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

Nhờ bổ sung thêm cho Lisp đổi màu
Mình tìm được trên diễn đàn có Lisp đổi màu , nhưng khi chọn màu để đổi thì chỉ cho phép chọn màu trong bảng 256 màu(Index Color), mình muốn bổ sung thêm màu True color để có thêm tùy chọn mã màu, nhờ các bạn bổ sung thêm tính năng này vào Lisp giúp .cảm ơn tất cả mọi người!

e1b0c283-93a6-4b3b-912f-899ade619f1e.png.806693b2fece0718b0694e3fd2b2a25a.png

 

 

(defun C:DMTC ( / doc col)
(vl-load-com)
(setq doc (vla-get-activedocument (vlax-get-acad-object)))
(vla-startundomark doc)
(mip:layer-status-save)
(if (setq col (acad_colordlg 7 t))
(ChangeAllObjectsColor doc col);_ col ・color number
)
(mip:layer-status-restore)
(vla-endundomark doc)
(princ)
)
(princ "\nType ColorX in command line")
(defun mip:layer-status-restore ()
(foreach item *MIP_LAYER_LST*
(if (not (vlax-erased-p (car item)))
(vl-catch-all-apply
'(lambda ()
(vla-put-lock (car item) (cdr (assoc "lock" (cdr item))))
(vla-put-freeze (car item) (cdr (assoc "freeze" (cdr item))))
) ;_ end of lambda
) ;_ end of vl-catch-all-apply
) ;_ end of if
) ;_ end of foreach
(setq *MIP_LAYER_LST* nil)
) ;_ end of defun

(defun mip:layer-status-save ()
(setq *MIP_LAYER_LST* nil)
(vlax-for item (vla-get-layers (vla-get-activedocument (vlax-get-acad-object)))
(setq *MIP_LAYER_LST* (cons (list item
(cons "freeze" (vla-get-freeze item))
(cons "lock" (vla-get-lock item))
) ;_ end of cons
*MIP_LAYER_LST*
) ;_ end of cons
) ;_ end of setq
(vla-put-lock item :vlax-false)
(if (= (vla-get-freeze item) :vlax-true)
(vl-catch-all-apply '(lambda () (vla-put-freeze item :vlax-false))))
) ;_ end of vlax-for
) ;_ end of defun
(defun ChangeAllObjectsColor (Doc Color )
(vlax-for Blk (vla-get-Blocks Doc)
(if (= (vla-get-IsXref Blk) :vlax-false)
(vlax-for Obj Blk
(if (vlax-property-available-p Obj 'Color)
(vla-put-Color Obj Color)
)
)
)
)
)

 

 

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
24 phút trước, tannguyen291 đã nói:

bổ xung thêm màu TrueColor gần bằng viết lại code. thôi bạn dùng cái đó đi :))

Ủa, nãy thấy em đưa hàm kia lên là đúng rồi mà sao lại xóa?

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ũng được 

(defun C:DMTC ( / doc col r g b )
  (vl-load-com)
  (setq doc (vla-get-activedocument (vlax-get-acad-object)))
  (vla-startundomark doc)
  (mip:layer-status-save)
  (cond 
    ((not (setq col (acad_truecolordlg '(62 . 7)))))
    ( (assoc 420 col)
      (setq 
        col (cdr (assoc 420 col))
        r (fix (/ col 65536))
        g (fix (/ (- col (* 65536 r)) 256))
        b (- col (* 65536 r) (* 256 g))
      )
      (ChangeAllObjectsColor doc (list r g b))
    )
    (t (ChangeAllObjectsColor doc (cdar col)))
  )
  (mip:layer-status-restore)
  (vla-endundomark doc)
  (princ)
)
(princ "\nType ColorX in command line")
(defun mip:layer-status-restore ()
  (foreach item *MIP_LAYER_LST*
    (if (not (vlax-erased-p (car item)))
      (vl-catch-all-apply
        '(lambda ()
          (vla-put-lock (car item) (cdr (assoc "lock" (cdr item))))
          (vla-put-freeze (car item) (cdr (assoc "freeze" (cdr item))))
        ) ;_ end of lambda
      ) ;_ end of vl-catch-all-apply
    ) ;_ end of if
  ) ;_ end of foreach
  (setq *MIP_LAYER_LST* nil)
) ;_ end of defun

(defun mip:layer-status-save ()
  (setq *MIP_LAYER_LST* nil)
  (vlax-for item (vla-get-layers (vla-get-activedocument (vlax-get-acad-object)))
    (setq *MIP_LAYER_LST* (cons (list item
                                  (cons "freeze" (vla-get-freeze item))
                                  (cons "lock" (vla-get-lock item))
                                ) ;_ end of cons
                            *MIP_LAYER_LST*
                          ) ;_ end of cons
    )  ;_ end of setq
    (vla-put-lock item :vlax-false)
    (if (= (vla-get-freeze item) :vlax-true)
      (vl-catch-all-apply '(lambda () (vla-put-freeze item :vlax-false)))
    )
  ) ;_ end of vlax-for
) ;_ end of defun
(defun ChangeAllObjectsColor (Doc Color / tc )
  (vlax-for Blk (vla-get-Blocks Doc)
    (if (= (vla-get-IsXref Blk) :vlax-false)
      (vlax-for Obj Blk
        (if (vlax-property-available-p Obj 'Color)
          (if (listp Color)
            (progn
              (setq tc (vla-get-truecolor Obj))
              (apply 'vla-setrgb (cons tc Color))
              (vla-put-truecolor Obj tc)
            )
            (vla-put-Color Obj Color)
          )
        )
      )
    )
  )
)

 

  • 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
2 phút trước, Doan Van Ha đã nói:

 Ủa, nãy thấy em đưa hàm kia lên là đúng rồi mà sao lại xóa?

sửa bên trên nó không chạy bên dưới bá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

Cho mình hỏi khi chọn về hệ màu True Color vậy có cách chỉnh plotstyle theo hệ màu True color ko ạh, nhờ bác hướng dẫn giúp ạh

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ũng là Lisp này nhưng có thể chỉnh sửa thành đổi màu cho các đối tượng được chọn( đối tượng được chọn bằng cách Click hoặc Quét chọn), vì Lisp hiện tại sẽ đổi màu cho tất cả đối tượng có trong bản vẽ. Nhờ các bạn biết cách chỉnh sửa giúp. Thanh All!

  • Vote giảm 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

Đã chọn được đối tượng rồi thì mở bảng properties ra mà đổi màu.

Những thứ không nhất thiết cần đến lisp thì bạn đừng nhờ kiểu như vậy.

tên bạn là chia sẻ học hỏi mà lên forum chỉ thấy nhờ.

  • 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

Gửi bạn tannguyen291: ban đầu cái Lisp này là mình nhờ Bổ sung thêm mã màu True color cho Lisp. và được chính bạn giúp , mình rất cảm ơn vì điều này.

Vì cái Lisp này hiện tại nó chưa có tính năng lựa chọn cho đối tượng mình muốn đổi nên đã đăng tiếp thêm yêu cầu và lại được bạn góp ý, thank bạn.

Như bạn góp ý khi đã chọn được đối tượng thì mở  bảng properties mà thay đổi, cái này bạn nói không sai, nhưng chưa đủ vì không phải bất kỳ đối tượng nào cũng chỉnh sữa được thuộc tính trong bảng properties.

Cái Lisp này có những tính năng hay mà mình tin sẽ có nhiều người cần dùng đến như:

-Đổi màu được tất cả các đối tượng có trong bản vẽ như Block, Kích thước..... cái này trong  bảng properties không làm được

-Nó có thể ứng dụng cho các bạn nào cần trong việc chỉnh sửa bản vẽ không phải do tự mình làm( vì mình làm thì sẽ quản lý đối tượng từ đầu)

-Hoặc có thể chỉnh sửa màu cho các bản vẽ xuất ra từ các Soft khác như Revit, SOLIDWORKS... mà không ảnh hưởng tới đặc tính riêng của đối tượng.

-Tất nhiên là có cách khác khi muốn thay đổi màu cho các đối tượng khi sủ dụng Lisp này nhưng phải qua bước trung gian.

-Đặc biệt máy có cấu hình yếu thực hiện chức năng này rất đơn giản

....

Nhưng hiện tại nó không có tính năng chọn cho các đối tượng muốn thay đổi, nên mình mới đăng thêm cái yêu cầu này nhờ mọi người bổ sung thêm, không biết tannguyen291 đã đọc hết nội dung chưa mà thấy bạn góp ý mình chưa đúng lắm.

Do mình không biết gì về Lisp nên khi đặt vấn đề nhờ mọi người giúp có thể chưa truyền đạt hết được ý tưởng nên làm cho bạn không thích, mong các bạn thông cảm

RIÊNG VỚI LISP NÀY nếu có thể phát triển theo hướng như thế này thì mình nghỉ sẽ có rất nhiều người caand đến nó.

1. Thêm tính năng chọn đối tượng muốn thay đổi ( đối tượng được chọn bằng cách Click hoặc Quét chọn)

2. Ngoài tính năng đổi màu ,nếu có thể thêm được Linetype,Lineweight thì quá tốt, cái này chỉ là ý tưởng thôi, do không biết gì về Lisp nên không biết có gộp chung trong 1 lisp có được không, mong các bạn thông cảm.

3.Sau khi nhập lệnh có thể xuất hiện bảng thể hiện các tùy chọn , để có thể chọn các thuộc tính muốn thay đổi thì quá tuyệt.

 

Trên đây chỉ là những ý tưởng muốn đữa lên diễn đàn, mong các bạn có khả năng giải quyết vấn đề vào giúp đở, Thank All.

Thực ra trên diễn đàn mình thấy có rất nhiều người giỏi, các bạn ấy vừa có Tâm lại vừa có Tầm, đã giúp được rất nhiều bạn khác giải quyết vấn đề đặt ra. bản thân mình cũng tìm kiếm được rất nhiều điều bổ ích từ những bài đăng của các bạn có yêu cầu cần giúp đở, chính vì thế mình nghỉ yêu cầu cần giúp đở của chính bản thân mình được người khác giúp đở,rồi người khác cũng tìm thấy kết quả mong muốn như mình thì đó chính là chia sẽ, thông tin đến bạn tannguyen291 nhé.

Nếu bạn tannguyen291 có khả năng bổ sung thêm tính năng cho Lisp này thì trước hết xin gửi lời cảm ơn đến 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
Vào lúc 15/4/2024 tại 11:53, Chia.se.Hoc.hoi đã nói:

Thank bạn tannguyen291: vì mình cần cái mã màu bên đó nên nhờ mọi người giúp , nếu bạn có thể giúp xin cảm ơn bạn nhiều!

 

Tớ tham gia hỏi 1 câu, true color dùng để làm gì vậy bạn? 255 màu vẫn thiếu à, nếu để thêm màu phân biệt thì không đúng vì mắt người không nhận biết được.

 

Tớ cũng không rành lisp, nhưng để dùng đến true color thì tớ chưa dùng bao giờ. Đây cũng là ý tưởng để bạn chia sẻ về ứng dụng của true color.

 

  • 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
11 phút trước, amateurday đã nói:

Tớ tham gia hỏi 1 câu, true color dùng để làm gì vậy bạn? 255 màu vẫn thiếu à, nếu để thêm màu phân biệt thì không đúng vì mắt người không nhận biết được.

Tớ cũng không rành lisp, nhưng để dùng đến true color thì tớ chưa dùng bao giờ. Đây cũng là ý tưởng để bạn chia sẻ về ứng dụng của true color.

 

Sao bạn biết không đúng?

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
53 phút trước, Doan Van Ha đã nói:

Sao bạn biết không đúng?

Thì 2 màu kế nhau là em chịu không phân biệt được, có thể mắt hơi yếu. He he.

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
13 giờ trước, Doan Van Ha đã nói:

Sao bạn biết không đúng?

Em cũng không hiểu true color để làm gì vì mình quản lý nét in bằng index color. 

việc màu gần nhau có thể hơi khác một chút nhưng với công nghệ máy in thông thường khi in ra cũng không nhận biết được.

không biết các ngành khác thế nào chứ ngành quy hoạch em đang làm thì có thông tư 04/2022 đã định rõ màu cho từng loại layer được sử dụng. nên cũng không nhất thiết phải true color làm gì.

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 mã màu True color hôm trước mình nhờ bổ sung là như thế này:

-Do có 1 công ty họ đặt hàng yêu cầu chỉnh sửa bản vẽ, mà những đối tượng trong bản vẽ phải theo quy định của bên công ty họ như layer, đường nét, màu sắc...mà màu sắc họ dùng thì toàn trong bảng màu đó, Cái lisp trên thì nó hổ trợ đổi màu cho tất cả đối tượng (đặc biệt bản vẽ có nhiều Block thì nó rất hữu ích) nhưng ko có mã màu True color, vì thế mình đã lên diễn đàn nhờ giúp đở, Tuy nhiên nó lại thiếu tính năng chọn riêng cho những đối tượng mình muốn thay đổi, nên mình đã thêm yêu cầu mới để nhờ các bạn phát triển thêm Lisp nhằm có thêm tùy chọn khi sử dụng.

-Cũng có 1 Soft tương tự như Cad (Jw_cad), nó Free, tính năng thì không bằng Cad, nhưng dung lượng bản vẽ rất nhẹ so với Cad. Việc chuyển đổi qua lại giữa Jw-cad bằng cách lưu file với đuôi DXF, và cái Soft này nó cũng quản lý màu theo True color, nếu màu chọn không tương thích thì nó sẽ bị chuyển thành màu trắng hết. Nhược điểm của Soft này là giao diện hiển thị bằng tiếng nhật(Soft của Nhật). nên không nhập tiếng việt có dấu được, bạn nào thích vọc thì vào tải vè dùng nó rất nhẹ và Free (https://www.jwcad.net/).

Đó là lý do ban đầu mình nhở diễn đàn bổ sung thêm mã màu cho Lisp này, thông tin đến các bạn.

Jw-cad.thumb.png.c5cea4af13e714e26db3867aeee2b0ff.png

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

Theo mình biết, một số khách hàng họ có nhu cầu file cuối cùng ở dạng vector để đưa lên web (... có thể convert từ file *.dwg ), yêu cầu màu sắc cụ thể.

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

Không ai đổi toàn bộ objects trong bản vẽ về thành 1 màu duy nhất. Do đó phải điều chỉnh lệnh là đương nhiên.

Nếu bạn cần đổi cả linetype, lineweight thì nên dùng lệnh MACHPROP từ đối tượng 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
22 phút trước, NTHAHT đã nói:

Theo mình biết, một số khách hàng họ có nhu cầu file cuối cùng ở dạng vector để đưa lên web (... có thể convert từ file *.dwg ), yêu cầu màu sắc cụ thể.

nếu theo nhu cầu đó thì viết 1 lisp convert index ra true. nhanh hơn đỡ phải chọn đi chọn lại nhiều lần. màu sắc tương tự, bác thấy sao. :)

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 không biết gì về Lisp nên không dám ý kiến về cách làm , Nhưng mong muốn có 1 Lisp tương tự như Lisp trên, có thể thay đổi riêng cho từng đối tượng được chọn, Nếu bổ sung thêm được thuộc tính Linetype,Lineweight có thể thay đổi nữa thì trên cả tuyệt vời.Thank!

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
2 giờ trước, tannguyen291 đã nói:

nếu theo nhu cầu đó thì viết 1 lisp convert index ra true. nhanh hơn đỡ phải chọn đi chọn lại nhiều lần. màu sắc tương tự, bác thấy sao. :)

Trước đây, từ nhu cầu của 1 người khác mình làm theo hướng nà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

Trình lisp mình không đọc hiểu được lisp trên nên ko thể gia công lại được. Tạm thời chôm đoạn đọc mã màu làm cái đơn giản này (ko đổi được dim, block ...). Dùng tạm nếu xử được cho các đối tượng còn lại mình sẽ cập nhật. 

 

(defun c:dmkk ( / dchon mc r g b mautr)
(princ "Chon cac doi tuong muon doi mau")
(setq dchon (ssget))
(setq col (acad_truecolordlg 7 T))
      (setq 
        col (cdr (assoc 420 col))
        r (fix (/ col 65536))
        g (fix (/ (- col (* 65536 r)) 256))
        b (- col (* 65536 r) (* 256 g))
      )
(setq mautr (strcat (itoa r) "," (itoa g) "," (itoa b)))
(command "change"  dchon "" "p" "c"  "t" mautr "")
(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

AutoLISP, khi mình nghĩ nó rất là đơn giản thì ... đúng vậy.

 


(defun C:DMTC (/ doc col)

(defun mip:layer-status-restore	()
  (foreach item	*MIP_LAYER_LST*
    (if	(not (vlax-erased-p (car item)))
      (vl-catch-all-apply
	'(lambda ()
	   (vla-put-lock (car item) (cdr (assoc "lock" (cdr item))))
	   (vla-put-freeze
	     (car item)
	     (cdr (assoc "freeze" (cdr item)))  ) ) ) ) ) 
  (setq *MIP_LAYER_LST* nil)) 

(defun mip:layer-status-save ()
  (setq *MIP_LAYER_LST* nil)
  (vlax-for item (vla-get-layers (vla-get-activedocument (vlax-get-acad-object)) )
    (setq *MIP_LAYER_LST*
	   (cons (list item
		       (cons "freeze" (vla-get-freeze item))
		       (cons "lock" (vla-get-lock item)) ) 
		 *MIP_LAYER_LST* )  ) 
    (vla-put-lock item :vlax-false)
    (if	(= (vla-get-freeze item) :vlax-true)
      (vl-catch-all-apply
	'(lambda () (vla-put-freeze item :vlax-false))  ) ) ) )

(defun ChangeAllObjectsColor (Doc Color)
  (vlax-for Blk	(vla-get-Blocks Doc)
    (if	(= (vla-get-IsXref Blk) :vlax-false)
      (vlax-for	Obj Blk
	(entmod (append (entget (vlax-vla-object->ename obj)) color))  )    )  ))
  
  (vl-load-com)
  (setq doc (vla-get-activedocument (vlax-get-acad-object)))
  (vla-startundomark doc)
  (mip:layer-status-save)
  (if (setq col (acad_truecolordlg 1))
    (ChangeAllObjectsColor doc col)  )
  (mip:layer-status-restore)
  (vla-endundomark doc)
  (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

Chào bạn gia_bach: Lisp của bạn kết quả nó giống với Lisp của bạn tannguyen291. Chưa có chức năng chọn cho những đối tượng muốn thay đổi bạn nhé.Vẫn bị thay đổi hết các đối tượng trong bản vẽ.Thank 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

×