Đến nội dung


Hình ảnh
- - - - -

[YÊU CẦU] sửa lisp đổi màu đối tượng


  • Please log in to reply
23 replies to this topic

#1 proconeng86

proconeng86

    biết lệnh break

  • Members
  • PipPipPipPip
  • 221 Bài viết
Điểm đánh giá: -9 (bình thường)

Đã gửi 11 November 2014 - 05:54 PM

Trước mình có down trên cadviet 1 lisp đổi mầu đối tượng nhưng lisp không áp dụng được cho đường kích thước nên giờ muốn nhờ các bạn chỉnh lại để có thể áp dụng được với dim (chỉ đổi mầu text của dim lựa chọn thôi)

   Do down lâu rồi nên mình tìm mãi không được topic cũ đâu, đành phải tạo topic mới, mong mọi người thông cảm

Mình cám ơn nhiều

 

 http://www.mediafire...u_doi_tuong.lsp

 


  • 0

#2 nhoclangbat

nhoclangbat

    Edu level: li10

  • Members
  • PipPipPipPipPipPipPip
  • 1409 Bài viết
Điểm đánh giá: 379 (khá)

Đã gửi 11 November 2014 - 08:46 PM

- nhoc thì ko rành về dim, viết lsp đơn giản nhưng cũng hơi thủ công bạn xem thừ ^^

p/s: up hộ bạn ^^

(defun c:dmd(/ mau kdim)
(vl-load-com)
(setvar 'cmdecho 0)
(setq mau (getint "\nNh\U+1EADp m\U+00E3 m\U+00E0u mu\U+1ED1n \U+0111\U+1ED5i:"))
(setq kdim (entget (car (nentsel "\nCh\U+1ECDn \U+0111\U+00FAng text dim:"))))
(entmod (subst (cons 62 mau) (assoc 62 kdim) kdim))
(vl-cmdf "regen")
(setvar 'cmdecho 1)
(princ)
)

 


  • 1
"...................][)e\/i][_ /\/\@Y CrY....................."

(defun THỔ_DÂN_HỌC_CAD (xxxx) ...) ^_^








#3 Tot77

Tot77

    biết lệnh adcenter

  • Members
  • PipPipPipPipPipPipPip
  • 990 Bài viết
Điểm đánh giá: 498 (tốt)

Đã gửi 11 November 2014 - 09:00 PM

Lsp của nhoc phải nhấp ngay cái dimtext thì nó mới làm.

Sửa cái lsp của chủ thớt.

(defun changecolor (en col)
  (if (= (cdr (assoc 0 (entget en))) "DIMENSION")
    (vlax-for item (vla-item (vla-get-blocks (vla-get-ActiveDocument (vlax-get-acad-object)))
  (cdr (assoc 2 (entget en))))
      (if (= "AcDbMText" (vla-get-ObjectName item)) (vla-put-Color item col))
    )
    (command "change" en "" "P" "c" col "")
  )
)
 
(defun c:cl (/ m ss)
  (command "undo" "be") (setvar 'cmdecho 0)
  (princ "\nChon doi tuong muon doi mau:")
  (setq ss (ssget))
  (princ "\nChon mau muon doi :") (setq m (acad_colordlg 7))
  (mapcar '(lambda (x) (changecolor x m)) (vl-remove-if 'listp (mapcar 'cadr (ssnamex ss))))
  (vl-cmdf "regen")
  (command "undo" "end") (setvar 'cmdecho 1)
  (setvar "MODEMACRO" "**KTS_DUY**")
  (princ)
)
 
(defun c:ck (/ m ss)
  (command "undo" "be") (setvar 'cmdecho 0)
  (princ "\nChon doi tuong muon doi mau:")
  (setq ss (ssget))
  (setq m (getint "\nChon mau muon doi: "))
  (mapcar '(lambda (x) (changecolor x m)) (vl-remove-if 'listp (mapcar 'cadr (ssnamex ss))))
  (vl-cmdf "regen")  
  (command "undo" "end") (setvar 'cmdecho 1)
  (setvar "MODEMACRO" "**KTS_DUY**")
  (princ)
)
 

  • 1

#4 proconeng86

proconeng86

    biết lệnh break

  • Members
  • PipPipPipPip
  • 221 Bài viết
Điểm đánh giá: -9 (bình thường)

Đã gửi 11 November 2014 - 09:30 PM

- nhoc thì ko rành về dim, viết lsp đơn giản nhưng cũng hơi thủ công bạn xem thừ ^^

p/s: up hộ bạn ^^

(defun c:dmd(/ mau kdim)
(vl-load-com)
(setvar 'cmdecho 0)
(setq mau (getint "\nNh\U+1EADp m\U+00E3 m\U+00E0u mu\U+1ED1n \U+0111\U+1ED5i:"))
(setq kdim (entget (car (nentsel "\nCh\U+1ECDn \U+0111\U+00FAng text dim:"))))
(entmod (subst (cons 62 mau) (assoc 62 kdim) kdim))
(vl-cmdf "regen")
(setvar 'cmdecho 1)
(princ)
)

 

 

Lisp của ban cũng rất hay nhưng sao mình có cảm giác nó làm máy mình giật giật nhỉ, máy mình yếu quá chăng.

Bạn có thể ghép vào lisp trên của mình được không vì cùng 1 lisp áp dụng cho nhiều đối tượng sẽ hay hơn, đỡ phải nhớ nhiểu, ngoài ra lisp trên của mình nó hiện lên được cái bảng màu sẽ trực quan chọn màu hơn

Mình cám ơn nhiều


  • 0

#5 proconeng86

proconeng86

    biết lệnh break

  • Members
  • PipPipPipPip
  • 221 Bài viết
Điểm đánh giá: -9 (bình thường)

Đã gửi 11 November 2014 - 09:41 PM

Lsp của nhoc phải nhấp ngay cái dimtext thì nó mới làm.

Sửa cái lsp của chủ thớt.

 

(defun changecolor (en col)
  (if (= (cdr (assoc 0 (entget en))) "DIMENSION")
    (vlax-for item (vla-item (vla-get-blocks (vla-get-ActiveDocument (vlax-get-acad-object)))
  (cdr (assoc 2 (entget en))))
      (if (= "AcDbMText" (vla-get-ObjectName item)) (vla-put-Color item col))
    )
    (command "change" en "" "P" "c" col "")
  )
)
 
(defun c:cl (/ m ss)
  (command "undo" "be") (setvar 'cmdecho 0)
  (princ "\nChon doi tuong muon doi mau:")
  (setq ss (ssget))
  (princ "\nChon mau muon doi :") (setq m (acad_colordlg 7))
  (mapcar '(lambda (x) (changecolor x m)) (vl-remove-if 'listp (mapcar 'cadr (ssnamex ss))))
  (vl-cmdf "regen")
  (command "undo" "end") (setvar 'cmdecho 1)
  (setvar "MODEMACRO" "**KTS_DUY**")
  (princ)
)
 
(defun c:ck (/ m ss)
  (command "undo" "be") (setvar 'cmdecho 0)
  (princ "\nChon doi tuong muon doi mau:")
  (setq ss (ssget))
  (setq m (getint "\nChon mau muon doi: "))
  (mapcar '(lambda (x) (changecolor x m)) (vl-remove-if 'listp (mapcar 'cadr (ssnamex ss))))
  (vl-cmdf "regen")  
  (command "undo" "end") (setvar 'cmdecho 1)
  (setvar "MODEMACRO" "**KTS_DUY**")
  (princ)
)
 

 

Cám ơn bạn nhoclangbat nhiệt tình giúp đỡ

Lisp này là được rồi :D


  • 1

#6 nhoclangbat

nhoclangbat

    Edu level: li10

  • Members
  • PipPipPipPipPipPipPip
  • 1409 Bài viết
Điểm đánh giá: 379 (khá)

Đã gửi 11 November 2014 - 09:58 PM

- hì hì ^^, nhoc chỉ up hộ thui mà  :P


  • 1
"...................][)e\/i][_ /\/\@Y CrY....................."

(defun THỔ_DÂN_HỌC_CAD (xxxx) ...) ^_^








#7 Tue_NV

Tue_NV

    KS Võ Quang Tuệ

  • Moderator
  • PipPipPipPipPipPipPip
  • 4296 Bài viết
Điểm đánh giá: 3804 (đỉnh cao)

Đã gửi 12 November 2014 - 05:13 AM

Lisp của ban cũng rất hay nhưng sao mình có cảm giác nó làm máy mình giật giật nhỉ, máy mình yếu quá chăng.

........

 

Do các bác viết Lisp sử dụng Regen nên với bản vẽ lớn sẽ thấy chậm đó

Nếu là mình thì mình viết kiểu khác, không sử dụng Regen...........

Cơ mà cái này chỉ cần chọn đối tượng -> Ctrol+1 -> hiệu chỉnh là được mà..........


  • 1

#8 proconeng86

proconeng86

    biết lệnh break

  • Members
  • PipPipPipPip
  • 221 Bài viết
Điểm đánh giá: -9 (bình thường)

Đã gửi 13 November 2014 - 02:47 PM

Do các bác viết Lisp sử dụng Regen nên với bản vẽ lớn sẽ thấy chậm đó

Nếu là mình thì mình viết kiểu khác, không sử dụng Regen...........

Cơ mà cái này chỉ cần chọn đối tượng -> Ctrol+1 -> hiệu chỉnh là được mà..........

 

Ctrl+1 lâu lắm, không biết do mình yếu hay ko mà Ctrl+1 rất giật, hiện lên cũng chậm nhất là khi chỉnh kích thước leader, ngoài ra tìm được phần hiệu chỉnh mất nhiều thời gian

Bạn Tue_NV thử viết lại không dùng Regen như bạn nói xem có nhanh được hơn nhiều không.

Mình cám ơn


  • 0

#9 tamnv4

tamnv4

    biết pan

  • Members
  • Pip
  • 6 Bài viết
Điểm đánh giá: -2 (bình thường)

Đã gửi 13 November 2014 - 02:50 PM

mình cũng đang cần cái này, cảm ơn nha





  • 0

#10 tamnv4

tamnv4

    biết pan

  • Members
  • Pip
  • 6 Bài viết
Điểm đánh giá: -2 (bình thường)

Đã gửi 13 November 2014 - 02:52 PM

Lsp của nhoc phải nhấp ngay cái dimtext thì nó mới làm.

Sửa cái lsp của chủ thớt.

 

(defun changecolor (en col)
  (if (= (cdr (assoc 0 (entget en))) "DIMENSION")
    (vlax-for item (vla-item (vla-get-blocks (vla-get-ActiveDocument (vlax-get-acad-object)))
  (cdr (assoc 2 (entget en))))
      (if (= "AcDbMText" (vla-get-ObjectName item)) (vla-put-Color item col))
    )
    (command "change" en "" "P" "c" col "")
  )
)
 
(defun c:cl (/ m ss)
  (command "undo" "be") (setvar 'cmdecho 0)
  (princ "\nChon doi tuong muon doi mau:")
  (setq ss (ssget))
  (princ "\nChon mau muon doi :") (setq m (acad_colordlg 7))
  (mapcar '(lambda (x) (changecolor x m)) (vl-remove-if 'listp (mapcar 'cadr (ssnamex ss))))
  (vl-cmdf "regen")
  (command "undo" "end") (setvar 'cmdecho 1)
  (setvar "MODEMACRO" "**KTS_DUY**")
  (princ)
)
 
(defun c:ck (/ m ss)
  (command "undo" "be") (setvar 'cmdecho 0)
  (princ "\nChon doi tuong muon doi mau:")
  (setq ss (ssget))
  (setq m (getint "\nChon mau muon doi: "))
  (mapcar '(lambda (x) (changecolor x m)) (vl-remove-if 'listp (mapcar 'cadr (ssnamex ss))))
  (vl-cmdf "regen")  
  (command "undo" "end") (setvar 'cmdecho 1)
  (setvar "MODEMACRO" "**KTS_DUY**")
  (princ)
)
 
mình không hiểu biến hệ thống modemacro là gì


  • 0

#11 Tue_NV

Tue_NV

    KS Võ Quang Tuệ

  • Moderator
  • PipPipPipPipPipPipPip
  • 4296 Bài viết
Điểm đánh giá: 3804 (đỉnh cao)

Đã gửi 13 November 2014 - 03:20 PM

Ctrl+1 lâu lắm, không biết do mình yếu hay ko mà Ctrl+1 rất giật, hiện lên cũng chậm nhất là khi chỉnh kích thước leader, ngoài ra tìm được phần hiệu chỉnh mất nhiều thời gian

Bạn Tue_NV thử viết lại không dùng Regen như bạn nói xem có nhanh được hơn nhiều không.

Mình cám ơn

Code như vầy :

(defun c:dmau(/ mau)
  (setq mau (ACAD_COLORDLG 7))
  (command "._DIMOVERRIDE" "dimclrt" mau "" )
 )

  • 1

#12 proconeng86

proconeng86

    biết lệnh break

  • Members
  • PipPipPipPip
  • 221 Bài viết
Điểm đánh giá: -9 (bình thường)

Đã gửi 13 November 2014 - 09:07 PM

Code như vầy :

 

(defun c:dmau(/ mau)
  (setq mau (ACAD_COLORDLG 7))
  (command "._DIMOVERRIDE" "dimclrt" mau "" )
 )

 

Lisp này đúng là rất nhanh, không bị lag máy nhưng bạn có thể ghép chung vào lisp của mình được không, khi đó nó đổi được cả cho đối tượng text sẽ hay hơn. Ngoài ra còn có cái này nhỏ thôi, ko quan trọng lắm, bạn sửa cũng được là đa phần các lisp đều chọn đối tượng trước rồi mới thực hiện lệnh, lisp của bạn lại ngược lại, hiện bảng màu trước rồi mới chọn đối tượng, do đó không quen cho lắm, nhưng cái này ko quan trọng, bạn gộp lại với lisp của mình là ngon rồi

Mình cám ơn nhiều


  • 0

#13 Tue_NV

Tue_NV

    KS Võ Quang Tuệ

  • Moderator
  • PipPipPipPipPipPipPip
  • 4296 Bài viết
Điểm đánh giá: 3804 (đỉnh cao)

Đã gửi 13 November 2014 - 09:33 PM

Viết mới sướng hơn nhiều

Code nhanh cho bạn 

(defun c:dmau(/ mau)
  (if (setq ss (ssget '((0 . "*TEXT,DIMENSION")))) (progn
            (setq mau (ACAD_COLORDLG 7))
            (command "._DIMOVERRIDE" "dimclrt" mau "" ss "")
        (command "._chprop" (ssget "P" '((0 . "*TEXT"))) "" "c" mau "")
  ))
 )
(defun c:dmau(/ mau)
  (if (setq ss (ssget '((0 . "*TEXT,DIMENSION")))) (progn
(setq mau (ACAD_COLORDLG 7))     
        (command "._chprop" (ssget "P" '((0 . "*TEXT"))) "" "c" mau "")
  (command "._DIMOVERRIDE" "dimclrt" mau "" (ssget "P" '((0 . "DIMENSION"))) )
  ))
 )

  • 1

#14 proconeng86

proconeng86

    biết lệnh break

  • Members
  • PipPipPipPip
  • 221 Bài viết
Điểm đánh giá: -9 (bình thường)

Đã gửi 14 November 2014 - 10:42 AM

Viết mới sướng hơn nhiều

Code nhanh cho bạn 

 

(defun c:dmau(/ mau)
  (if (setq ss (ssget '((0 . "*TEXT,DIMENSION")))) (progn
            (setq mau (ACAD_COLORDLG 7))
            (command "._DIMOVERRIDE" "dimclrt" mau "" ss "")
        (command "._chprop" (ssget "P" '((0 . "*TEXT"))) "" "c" mau "")
  ))
 )
(defun c:dmau(/ mau)
  (if (setq ss (ssget '((0 . "*TEXT,DIMENSION")))) (progn
(setq mau (ACAD_COLORDLG 7))     
        (command "._chprop" (ssget "P" '((0 . "*TEXT"))) "" "c" mau "")
  (command "._DIMOVERRIDE" "dimclrt" mau "" (ssget "P" '((0 . "DIMENSION"))) )
  ))
 )

 

Bạn Tue_NV siêu thật đó, li sp nhìn ngắn ghê mà dùng rất tốt, chuyển màu nhanh không bị lag. Tuy nhiên có 1 lỗi nhỏ đó là khi chuyển màu dim xong nó hiện "nil" và dòng lệnh thấy lại báo có vẻ như là lỗi mặc dù đã đổi màu thành công. Mình không hiểu vì sao, mình chụp ảnh lại đây, bạn xem lại chút nhé

Mình cám ơn

9928_loi_lisp_doi_mau_dim.jpg


  • 0

#15 Doan Van Ha

Doan Van Ha

    biết lệnh adcenter

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 5447 Bài viết
Điểm đánh giá: 2624 (tuyệt vời)

Đã gửi 14 November 2014 - 10:51 AM

Xui cho bác Tue_NV và xui cho bạn là nếu tập chọn không có Text thì bị lỗi.


  • 0

* Chỉ nên yêu cầu Lisp khi bạn làm việc đó mất cả ngày nhưng họ chỉ viết 1 giờ. Đừng nêu yêu cầu Lisp khi bạn chỉ làm 1 giờ nhưng bắt họ phải mất cả ngày.

* Nhờ viết lisp cũng như đi khám bệnh. Chỉ gởi căn cước và than sắp chết thì không bác sỹ nào cứu sống được.


#16 pphung183

pphung183

    biết dimstyle

  • Members
  • PipPipPipPipPip
  • 384 Bài viết
Điểm đánh giá: 425 (tốt)

Đã gửi 14 November 2014 - 11:19 AM

Sửa chút :

(defun c:cl (/ ss m)
(command "undo" "be")
(if (setq ss (ssget)) 
(progn            (setq m (acad_colordlg 7))                                                     
        (command "change" ss "" "P" "c" m "")
        (command "._DIMOVERRIDE" "dimclrt" m "" (ssget "P" '((0 . "DIMENSION"))) "" )
  ))
(command "undo" "end")
(princ))

  • 0

#17 pphung183

pphung183

    biết dimstyle

  • Members
  • PipPipPipPipPip
  • 384 Bài viết
Điểm đánh giá: 425 (tốt)

Đã gửi 14 November 2014 - 11:20 AM

Sửa chút :

(defun c:cl (/ ss m)
(command "undo" "be")
(if (setq ss (ssget)) 
(progn            (setq m (acad_colordlg 7))                                                     
        (command "change" ss "" "P" "c" m "")
        (command "._DIMOVERRIDE" "dimclrt" m "" (ssget "P" '((0 . "DIMENSION"))) "" )
  ))
(command "undo" "end")
(princ))

  • 1

#18 pphung183

pphung183

    biết dimstyle

  • Members
  • PipPipPipPipPip
  • 384 Bài viết
Điểm đánh giá: 425 (tốt)

Đã gửi 14 November 2014 - 11:26 AM

Diễn đàn bị ji thế nhỉ???


  • 0

#19 Doan Van Ha

Doan Van Ha

    biết lệnh adcenter

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 5447 Bài viết
Điểm đánh giá: 2624 (tuyệt vời)

Đã gửi 14 November 2014 - 11:29 AM

Sửa vậy nó đổi màu hết các item của Dim mất.


  • 1

* Chỉ nên yêu cầu Lisp khi bạn làm việc đó mất cả ngày nhưng họ chỉ viết 1 giờ. Đừng nêu yêu cầu Lisp khi bạn chỉ làm 1 giờ nhưng bắt họ phải mất cả ngày.

* Nhờ viết lisp cũng như đi khám bệnh. Chỉ gởi căn cước và than sắp chết thì không bác sỹ nào cứu sống được.


#20 proconeng86

proconeng86

    biết lệnh break

  • Members
  • PipPipPipPip
  • 221 Bài viết
Điểm đánh giá: -9 (bình thường)

Đã gửi 14 November 2014 - 11:35 AM

Sửa chút :

(defun c:cl (/ ss m)
(command "undo" "be")
(if (setq ss (ssget)) 
(progn            (setq m (acad_colordlg 7))                                                     
        (command "change" ss "" "P" "c" m "")
        (command "._DIMOVERRIDE" "dimclrt" m "" (ssget "P" '((0 . "DIMENSION"))) "" )
  ))
(command "undo" "end")
(princ))

 

Li sp này ngon rồi. Mình cám ơn nhiều nhé :D


  • 0