Đến nội dung


Hình ảnh
- - - - -

[Xin] lisp chuyển màu các thuộc tính dynamic block


  • Please log in to reply
96 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 20 April 2014 - 08:53 PM

Chào các bạn

mình có 1 yêu cầu nhỏ là muốn có 1 lisp có thể đổi màu được dynamic block. mình làm việc nhiều với dynamic block, ví dụ dynamic block tên dầm như file mình đính kèm, mỗi dầm có 1 tiết diện khác nhau nên những tiết diện giống nhau thì mình sẽ cho cùng 1 mầu,khi đó vẽ sẽ ít bị nhầm. Nhưng đổi màu thủ công lâu quá, ngoài ra khi kích thước bị thay đổi lại đổi lại bằng thủ công rất mất thời gian nên mình muốn nhờ các bạn viết hộ mình 1 lisp như vậy.

cụ thể nội dung là:

- gõ lệnh

- đưa ra lựa chọn các dynamic block cần đổi mầu

- đưa ra lựa chọn các attribute trong các block đã lựa chọn để đổi màu

- đưa ra lựa chọn màu để đổi

- kết thúc lệnh

 

Chân thành cám ơn các bạn


  • 0

#2 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 20 April 2014 - 09:12 PM

Mình upload file lên mà không được, nên up lại file dynamic block cần đổi mầu

Mong các bạn giúp đỡ

 

 http://www.mediafire...namic_block.dwg


  • 0

#3 phamthanhbinh

phamthanhbinh

    biết lệnh adcenter

  • Moderator
  • PipPipPipPipPipPipPip
  • 6007 Bài viết
Điểm đánh giá: 3113 (tuyệt vời)

Đã gửi 20 April 2014 - 10:29 PM

Mình upload file lên mà không được, nên up lại file dynamic block cần đổi mầu

Mong các bạn giúp đỡ

 

 http://www.mediafire...namic_block.dwg

Hề hề hề,

Thử dùng cái này coi đã ưng ý chưa hè???

(defun c:dmat (/ ss tag col i a b )
(alert "\n Chon cac block chua thuoc tinh can doi mau")
(setq ss (ssget (list (cons 0 "insert") (cons 66 1))))
(setq tag (getstring "\n Nhap tag name cua thuoc tinh can doi mau : ")
          col (getint "\n Nhap so hieu mau muon doi thanh: ") 
          i 0)
(while (setq a (ssname ss i))
     (setq b (entnext a))
(while (and b (/= (cdr (assoc 0 (entget b))) "SEQEND"))
             (if (and (= (cdr (assoc 0 (entget b))) "ATTRIB") (= (cdr (assoc 2 (entget b))) tag))
                 (progn
                        (entmod (subst (cons 62 col) (assoc 62 (entget b)) (entget b)))
                        (entupd b)
                 )
             )
             (setq b (entnext b))
     )
     (setq i (1+ i))
)
)
(defun c:dmat (/ ss tag col i a b )
(alert "\n Chon cac block chua thuoc tinh can doi mau")
(setq ss (ssget (list (cons 0 "insert") (cons 66 1))))
(setq tag (getstring "\n Nhap tag name cua thuoc tinh can doi mau : ")
          col (getint "\n Nhap so hieu mau muon doi thanh: ") 
          i 0)
(while (setq a (ssname ss i))
     (setq b (entnext a))
     (while (and b (/= (cdr (assoc 0 (entget B))) "SEQEND"))
             (if (and (= (cdr (assoc 0 (entget B))) "ATTRIB") (= (cdr (assoc 2 (entget B))) tag))
                 (progn
                        (entmod (subst (cons 62 col) (assoc 62 (entget B)) (entget B)))
                        (entupd B)
                 )
             )
             (setq b (entnext B))
     )
     (setq i (1+ i))
)

  • 1
Chúc các quý Anh trên diễn đàn luôn khỏe, đẻ thêm được nhiều thứ để mót.

#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 21 April 2014 - 09:26 AM


 

Hề hề hề,

Thử dùng cái này coi đã ưng ý chưa hè???

 

(defun c:dmat (/ ss tag col i a b )
(alert "\n Chon cac block chua thuoc tinh can doi mau")
(setq ss (ssget (list (cons 0 "insert") (cons 66 1))))
(setq tag (getstring "\n Nhap tag name cua thuoc tinh can doi mau : ")
          col (getint "\n Nhap so hieu mau muon doi thanh: ") 
          i 0)
(while (setq a (ssname ss i))
     (setq b (entnext a))
(while (and b (/= (cdr (assoc 0 (entget b))) "SEQEND"))
             (if (and (= (cdr (assoc 0 (entget b))) "ATTRIB") (= (cdr (assoc 2 (entget b))) tag))
                 (progn
                        (entmod (subst (cons 62 col) (assoc 62 (entget b)) (entget b)))
                        (entupd b)
                 )
             )
             (setq b (entnext b))
     )
     (setq i (1+ i))
)
)
(defun c:dmat (/ ss tag col i a b )
(alert "\n Chon cac block chua thuoc tinh can doi mau")
(setq ss (ssget (list (cons 0 "insert") (cons 66 1))))
(setq tag (getstring "\n Nhap tag name cua thuoc tinh can doi mau : ")
          col (getint "\n Nhap so hieu mau muon doi thanh: ") 
          i 0)
(while (setq a (ssname ss i))
     (setq b (entnext a))
     (while (and b (/= (cdr (assoc 0 (entget B))) "SEQEND"))
             (if (and (= (cdr (assoc 0 (entget B))) "ATTRIB") (= (cdr (assoc 2 (entget B))) tag))
                 (progn
                        (entmod (subst (cons 62 col) (assoc 62 (entget B)) (entget B)))
                        (entupd B)
                 )
             )
             (setq b (entnext B))
     )
     (setq i (1+ i))
)

Lisp rất hay, rất đúng ý mình, cám ơn bạn phamthanhbinh nhiều lắm nhưng có 3 điều nho nhỏ nữa phát sinh, bạn sửa giúp mình luôn nha

 

1. lúc ban đầu đưa ra lựa chọn dynamic block để đổi màu, nó lại hiện lên cái bảng, cứ phải ấn ok mới chọn được, bạn có thể bỏ các bảng đó đi, mình đưa ra lựa chọn dynamic block luôn được không

2. có thể liệt kê tên các attribute trong dynamic block để từ đó mình lựa chọn, như thế sẽ tiện hơn nhiều vì nhiều khi mình không nhớ tên attribute, cứ phải click đúp vào xem rồi mới gõ lệnh sửa mầu được

3. khi lựa chọn màu có thể hiện lên cả bảng màu để lựa chọn thì tốt, như thế sẽ trực quan dễ dàng hơn

 

Bạn giúp mình cái nha. chân thành cám ơn


  • 0

#5 Tot77

Tot77

    biết lệnh adcenter

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

Đã gửi 21 April 2014 - 03:16 PM

Có cái lisp này của bác Lee Mac, bạn xài thử, tên lệnh AttCol.

 

http://www.mediafire...ibuteColour.lsp


  • 1

#6 Tot77

Tot77

    biết lệnh adcenter

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

Đã gửi 21 April 2014 - 09:57 PM

Có lẽ bác Bình bận nên không làm tiếp, thôi thì xin mạn phép lấy cái lisp của bác thêm thắt chút đỉnh theo yêu cầu của chủ thớt vậy.

Khi dùng thì bạn nhấp vào text nào thì nó sẽ hiện bảng màu hiện tại của tag đó, bạn không cần nhớ tên tag, sau khi chọn màu khác xong, bấm ok rồi chọn một loat att cần đổi, nó sẽ chỉ đổi tag nào bạn chỉ định thôi.

Nhưng khi nhấp chọn text thì nên chọn ở giữa text thì chính xác hơn (vì lisp căn cứ trên cự ly để biết bạn chọn tag nào).

 

http://www.mediafire...ka7ptg/dmat.lsp


  • 1

#7 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 21 April 2014 - 10:21 PM

Đang thắc mắc là tại sao bạn không dùng nentsel mà là entsel?


  • 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.


#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 21 April 2014 - 11:14 PM

Có cái lisp này của bác Lee Mac, bạn xài thử, tên lệnh AttCol.

 

http://www.mediafire...ibuteColour.lsp

Lisp này rất đúng ý mình, cám ơn bạn Tot7 nhiều nhé


  • 0

#9 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 21 April 2014 - 11:20 PM

Có lẽ bác Bình bận nên không làm tiếp, thôi thì xin mạn phép lấy cái lisp của bác thêm thắt chút đỉnh theo yêu cầu của chủ thớt vậy.

Khi dùng thì bạn nhấp vào text nào thì nó sẽ hiện bảng màu hiện tại của tag đó, bạn không cần nhớ tên tag, sau khi chọn màu khác xong, bấm ok rồi chọn một loat att cần đổi, nó sẽ chỉ đổi tag nào bạn chỉ định thôi.

Nhưng khi nhấp chọn text thì nên chọn ở giữa text thì chính xác hơn (vì lisp căn cứ trên cự ly để biết bạn chọn tag nào).

 

http://www.mediafire...ka7ptg/dmat.lsp

mình thấy lisp của Leemac thế là được rồi, nó hiện lên cho mình bảng lựa chọn tên attribute rất trực quan, dễ dùng và cả bảng mầu nữa.

Còn lisp trên của bạn có 1 nhược điểm là mình phải chú ý click đúng attribute thì mới được, nếu đổi 1, 2 block thì nhanh nhưng đổi một loạt thì lại khá lâu, lisp của leemac như bạn đưa khi đổi 1 loạt thì rất nhanh, chọn hết luôn rồi chọn tên attribute thôi

nên theo mình thấy tùy theo mục đích sử dụng, nếu đổi ít block và không nhớ đúng tên thì lấy lisp của bạn Tot77, còn nhiều thì của Leemac

cám ơn bạn nhiều nhé


  • 0

#10 Tue_NV

Tue_NV

    KS Võ Quang Tuệ

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

Đã gửi 22 April 2014 - 04:46 AM

Chào các bạn

mình có 1 yêu cầu nhỏ là muốn có 1 lisp có thể đổi màu được dynamic block. mình làm việc nhiều với dynamic block, ví dụ dynamic block tên dầm như file mình đính kèm, mỗi dầm có 1 tiết diện khác nhau nên những tiết diện giống nhau thì mình sẽ cho cùng 1 mầu,khi đó vẽ sẽ ít bị nhầm. Nhưng đổi màu thủ công lâu quá, ngoài ra khi kích thước bị thay đổi lại đổi lại bằng thủ công rất mất thời gian nên mình muốn nhờ các bạn viết hộ mình 1 lisp như vậy.

cụ thể nội dung là:

- gõ lệnh

- đưa ra lựa chọn các dynamic block cần đổi mầu

- đưa ra lựa chọn các attribute trong các block đã lựa chọn để đổi màu

- đưa ra lựa chọn màu để đổi

- kết thúc lệnh

 

Chân thành cám ơn các bạn

 

Sao bạn không đi theo hướng là : nếu tiết diện dầm giống nhau thì đưa về cùng 1 màu luôn?

Mần luôn 1 loạt ...........


  • 1

#11 Tot77

Tot77

    biết lệnh adcenter

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

Đã gửi 22 April 2014 - 07:53 AM

Cám ơn bác HA đã nhắc mình hàm nentsel, thú thực trước giờ tôi chưa xài tới hàm đó, cũng như  Lee Mac chỉ cách sử dụng hàm acad_colordlg và lisp bác Bình với dxf code 66.

Nói chung viết lisp trên forum giúp mình hoàn thiện hơn, tuy tôi không được khiêm tốn như bác hochoaivandot (nghe tên là thấy khiêm tốn rồi) nhưng công nhận là mình cũng học hỏi được nhiều thứ từ cadviet.

Nếu chủ thớt thích xài của bác lee mac thì cũng tốt, hoặc tôi viết lại theo hàm nentsel như dưới đây.

 

http://www.mediafire...pp1ns7/tmp1.lsp


  • 0

#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 22 April 2014 - 10:10 PM

Sao bạn không đi theo hướng là : nếu tiết diện dầm giống nhau thì đưa về cùng 1 màu luôn?

Mần luôn 1 loạt ...........

 

Ý của bạn Tue_NV tuyệt vời đó, như vậy thì mình không cần để ý đến tiết diện nữa. Mình cũng vừa áp dụng cho 1 công trình của mình, tiết diện khá nhiều, ngồi nhìn từng loại rồi chọn vẫn rất lâu, nếu mà có lisp như ý của bạn Tue_NV thì tốt quá, rất tự động, rất nhanh, giảm được nhiều thời gian

Mình có thể đưa cụ thể nội dung lisp là: 

1. gõ lệnh

2. đưa ra lựa chọn các dynamic block cần đổi mầu

3. đưa ra 1 bảng để liệt kê ra các attribute có nội dung giống nhau (chỉ những attribute có nội dung giống nhau thôi)

4. chọn attribute cần đổi màu

5. đưa ra bảng màu để lựa chọn

6. hỏi có muốn đổi attribute khác có nội dung giống nhau khác không, nếu có lặp lại bước 3, còn không thì kết thúc lệnh

bạn nào làm giúp mình cái nhé. cám ơn nhiều nhiều


Bài viết đã được chỉnh sửa nội dung bởi proconeng86: 22 April 2014 - 11:45 PM

  • 0

#13 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 23 April 2014 - 01:32 AM

Khi làm lại phát sinh ra một số vấn đề, đó là đã có sẵn 1 tiết diện trong attribute rồi, muốn có 1 dầm khác cùng tiết diện như vậy lại click vào sửa, rất mất công nên mình 1 lisp copy nội dung và mầu của nó cho 1 attribute khác như kiểu lệnh machop ý

cụ thể như sau:

LISP : copy nội dung và mầu của attribute trong dynamic block cho 1 attribute trong 1 dynamic block khác

 1. đưa ra lựa chọn attribute của 1 dynamic block chọn làm mẫu (lựa chọn bằng cách click thẳng vào attribute nào thì lấy luôn attribute đó làm gốc)

 2. đưa ra lựa chọn những atribute của dynamic block nào muốn đổi mầu và nội dung theo attribute mẫu

 3. kết thúc lệnh

Các bạn giúp mình cái nhé. Mình cám ơn nhiều


  • 0

#14 phamthanhbinh

phamthanhbinh

    biết lệnh adcenter

  • Moderator
  • PipPipPipPipPipPipPip
  • 6007 Bài viết
Điểm đánh giá: 3113 (tuyệt vời)

Đã gửi 23 April 2014 - 02:32 PM

Hề hề hề,

Thử dùng cái này coi đã ưng ý chưa hè???

 

(defun c:dmat (/ ss tag col i a b )
(alert "\n Chon cac block chua thuoc tinh can doi mau")
(setq ss (ssget (list (cons 0 "insert") (cons 66 1))))
(setq tag (getstring "\n Nhap tag name cua thuoc tinh can doi mau : ")
          col (getint "\n Nhap so hieu mau muon doi thanh: ") 
          i 0)
(while (setq a (ssname ss i))
     (setq b (entnext a))
(while (and b (/= (cdr (assoc 0 (entget b))) "SEQEND"))
             (if (and (= (cdr (assoc 0 (entget b))) "ATTRIB") (= (cdr (assoc 2 (entget b))) tag))
                 (progn
                        (entmod (subst (cons 62 col) (assoc 62 (entget b)) (entget b)))
                        (entupd b)
                 )
             )
             (setq b (entnext b))
     )
     (setq i (1+ i))
)
)
(defun c:dmat (/ ss tag col i a b )
(alert "\n Chon cac block chua thuoc tinh can doi mau")
(setq ss (ssget (list (cons 0 "insert") (cons 66 1))))
(setq tag (getstring "\n Nhap tag name cua thuoc tinh can doi mau : ")
          col (getint "\n Nhap so hieu mau muon doi thanh: ") 
          i 0)
(while (setq a (ssname ss i))
     (setq b (entnext a))
     (while (and b (/= (cdr (assoc 0 (entget B))) "SEQEND"))
             (if (and (= (cdr (assoc 0 (entget B))) "ATTRIB") (= (cdr (assoc 2 (entget B))) tag))
                 (progn
                        (entmod (subst (cons 62 col) (assoc 62 (entget B)) (entget B)))
                        (entupd B)
                 )
             )
             (setq b (entnext B))
     )
     (setq i (1+ i))
)

Lisp rất hay, rất đúng ý mình, cám ơn bạn phamthanhbinh nhiều lắm nhưng có 3 điều nho nhỏ nữa phát sinh, bạn sửa giúp mình luôn nha

 

1. lúc ban đầu đưa ra lựa chọn dynamic block để đổi màu, nó lại hiện lên cái bảng, cứ phải ấn ok mới chọn được, bạn có thể bỏ các bảng đó đi, mình đưa ra lựa chọn dynamic block luôn được không

2. có thể liệt kê tên các attribute trong dynamic block để từ đó mình lựa chọn, như thế sẽ tiện hơn nhiều vì nhiều khi mình không nhớ tên attribute, cứ phải click đúp vào xem rồi mới gõ lệnh sửa mầu được

3. khi lựa chọn màu có thể hiện lên cả bảng màu để lựa chọn thì tốt, như thế sẽ trực quan dễ dàng hơn

 

Bạn giúp mình cái nha. chân thành cám ơn

Hề hề hề,

Sorry bạn vì chậm trả lời.

Đây là lisp mình đã bổ sung theo yêu cầu của bạn. hãy dùng thử và cho ý kiến.

 
(defun c:dmat (/ ss tag col i a b taglst tagname ssl tag0)
(prompt "\n Chon cac block chua thuoc tinh can doi mau")
(setq ss (ssget (list (cons 0 "insert") (cons 66 1))))
(setq ssl (acet-ss-to-list ss))
(setq taglst (list))
(foreach blk ssl
        (setq a (entnext blk))
        (while (and a (/= (cdr (assoc 0 (entget a))) "SEQEND"))
                (if (=  (cdr (assoc 0 (entget a))) "ATTRIB") 
                    (progn
                           (setq tag0 (cdr (assoc 2 (entget a))))
                           (if (not (member tag0 taglst))
                               (setq taglst (append taglst (list tag0)))
                           )
                     )
                  )
                  (setq a (entnext a))
         )
)
(setq tagname "")
(foreach tag taglst 
      (setq tagname (strcat tagname tag " , "))
)
(prompt (strcat "\n Cac thuoc tinh bao gom: " tagname))
(setq tag (getstring "\n Nhap tag name cua thuoc tinh can doi mau : ")
          col (acad_colordlg  1) 
          i 0)
(while (setq a (ssname ss i))
     (setq b (entnext a))
     (while (and b (/= (cdr (assoc 0 (entget b))) "SEQEND"))
             (if (and (= (cdr (assoc 0 (entget b))) "ATTRIB") (= (cdr (assoc 2 (entget b))) tag))
                 (progn
                        (entmod (subst (cons 62 col) (assoc 62 (entget b)) (entget b)))
                        (entupd b)
                 )
             )
             (setq b (entnext b))
     )
     (setq i (1+ i))
)
(princ)
)
 

  • 1
Chúc các quý Anh trên diễn đàn luôn khỏe, đẻ thêm được nhiều thứ để mót.

#15 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 23 April 2014 - 09:36 PM

Hề hề hề,

Sorry bạn vì chậm trả lời.

Đây là lisp mình đã bổ sung theo yêu cầu của bạn. hãy dùng thử và cho ý kiến.

 

 
(defun c:dmat (/ ss tag col i a b taglst tagname ssl tag0)
(prompt "\n Chon cac block chua thuoc tinh can doi mau")
(setq ss (ssget (list (cons 0 "insert") (cons 66 1))))
(setq ssl (acet-ss-to-list ss))
(setq taglst (list))
(foreach blk ssl
        (setq a (entnext blk))
        (while (and a (/= (cdr (assoc 0 (entget a))) "SEQEND"))
                (if (=  (cdr (assoc 0 (entget a))) "ATTRIB") 
                    (progn
                           (setq tag0 (cdr (assoc 2 (entget a))))
                           (if (not (member tag0 taglst))
                               (setq taglst (append taglst (list tag0)))
                           )
                     )
                  )
                  (setq a (entnext a))
         )
)
(setq tagname "")
(foreach tag taglst 
      (setq tagname (strcat tagname tag " , "))
)
(prompt (strcat "\n Cac thuoc tinh bao gom: " tagname))
(setq tag (getstring "\n Nhap tag name cua thuoc tinh can doi mau : ")
          col (acad_colordlg  1) 
          i 0)
(while (setq a (ssname ss i))
     (setq b (entnext a))
     (while (and b (/= (cdr (assoc 0 (entget b))) "SEQEND"))
             (if (and (= (cdr (assoc 0 (entget b))) "ATTRIB") (= (cdr (assoc 2 (entget b))) tag))
                 (progn
                        (entmod (subst (cons 62 col) (assoc 62 (entget b)) (entget b)))
                        (entupd b)
                 )
             )
             (setq b (entnext b))
     )
     (setq i (1+ i))
)
(princ)
)
 

 

Cám ơn bạn phamthanhbinh nhiều lắm, mình đã dùng thử và lisp bạn rất tốt, đúng ý của mình cần, nhưng qua trao đổi trên diễn đàn mình thấy bạn Tue_NV đưa ra 1 ý rất hay, đó là tạo 1 lisp có thể liệt kê hàng loạt ra các attribute có nội dung giống nhau để từ đó đổi màu luôn thế, như thế sẽ rất tiện lợi, mình làm hết 1 lượt, cuối cùng chọn tất cả để đổi màu thôi, rất là hay. cụ thể nội dung lisp đó là:

1. gõ lệnh

2. đưa ra lựa chọn các dynamic block cần đổi mầu

3. đưa ra 1 bảng để liệt kê ra các attribute có nội dung giống nhau (chỉ những attribute có nội dung giống nhau thôi)

4. chọn attribute cần đổi màu

5. đưa ra bảng màu để lựa chọn

6. hỏi có muốn đổi attribute khác có nội dung giống nhau khác không, nếu có lặp lại bước 3, còn không thì kết thúc lệnh

 

Ngoài ra mình còn cần 1 lisp kiểu như lệnh machop nhưng dùng được với attribute trong dynamic block để đổi nội dung và màu của 1 attribute theo 1 attribute mẫu. nội dung lisp đó là:

 1. đưa ra lựa chọn attribute của 1 dynamic block chọn làm mẫu (lựa chọn bằng cách click thẳng vào attribute nào thì lấy luôn attribute đó làm gốc)

 2. đưa ra lựa chọn những atribute của dynamic block nào muốn đổi theo attribute mẫu (đưa ra bảng liệt kê tên các attribute trong các dynamic block đã được lựa chọn)

 3. kết thúc lệnh

 

Rất mong bạn phamthanhbinh cũng như các bạn trên diễn đàn giúp mình, mình cám ơn nhiều


  • 0

#16 Tue_NV

Tue_NV

    KS Võ Quang Tuệ

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

Đã gửi 24 April 2014 - 04:08 AM

- Theo ý mình để đơn giản và tiện sử dụng, với cấu kiện như vầy thì nên đưa ra cụ thể là 2 ATT thôi, một ATT quy định tên cấu kiện và 1 ATT quy định tiết diện của cấu kiện đó, không nên đưa ra nhiều ATT như bản vẽ mẫu của bạn

 

- Tỷ như cái y/c "Match" nội dung và màu của ATT thì những cái nào có cùng tên Block và cùng Tag của ATT thì đổi, không thì thôi, giảm bớt việc đưa ra lựa chọn. (có thể bỏ mục lựa chọn số 2 trong nội dung y/c "Match" nội dung và màu của ATTcủa bạn được rồi)..........

 

 

- Đổi nội dung theo màu cũng có cần công đoạn kiểm tra, nhờ máy tính hay tự bản thân phải đi kiểm tra lại, bởi nội dung tiết diện do mình nhập vào. Máy tính chỉ làm hộ công đoạn đổi màu cho bạn mà thôi.....

 

Ngoài ra, xung quanh cái vấn đề này còn có nhiều y/c khác nữa..............

 

@tot77: Bạn Tot77 mần thêm điều kiện nếu pick "hụt" hoặc pick không đúng ATT thì cho pick lại  đi ^ _ ^

P/S Thời gian này Tue_NV bận quá, không mần lisp được 


  • 0

#17 Tot77

Tot77

    biết lệnh adcenter

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

Đã gửi 24 April 2014 - 07:49 AM

Đọc một hồi tôi "tẩu hoả nhập ma" luôn, chẳng hiểu các bác nói gì luôn!!


  • 0

#18 phamthanhbinh

phamthanhbinh

    biết lệnh adcenter

  • Moderator
  • PipPipPipPipPipPipPip
  • 6007 Bài viết
Điểm đánh giá: 3113 (tuyệt vời)

Đã gửi 24 April 2014 - 12:30 PM

Cám ơn bạn phamthanhbinh nhiều lắm, mình đã dùng thử và lisp bạn rất tốt, đúng ý của mình cần, nhưng qua trao đổi trên diễn đàn mình thấy bạn Tue_NV đưa ra 1 ý rất hay, đó là tạo 1 lisp có thể liệt kê hàng loạt ra các attribute có nội dung giống nhau để từ đó đổi màu luôn thế, như thế sẽ rất tiện lợi, mình làm hết 1 lượt, cuối cùng chọn tất cả để đổi màu thôi, rất là hay. cụ thể nội dung lisp đó là:

1. gõ lệnh

2. đưa ra lựa chọn các dynamic block cần đổi mầu

3. đưa ra 1 bảng để liệt kê ra các attribute có nội dung giống nhau (chỉ những attribute có nội dung giống nhau thôi)

4. chọn attribute cần đổi màu

5. đưa ra bảng màu để lựa chọn

6. hỏi có muốn đổi attribute khác có nội dung giống nhau khác không, nếu có lặp lại bước 3, còn không thì kết thúc lệnh

 

Ngoài ra mình còn cần 1 lisp kiểu như lệnh machop nhưng dùng được với attribute trong dynamic block để đổi nội dung và màu của 1 attribute theo 1 attribute mẫu. nội dung lisp đó là:

 1. đưa ra lựa chọn attribute của 1 dynamic block chọn làm mẫu (lựa chọn bằng cách click thẳng vào attribute nào thì lấy luôn attribute đó làm gốc)

 2. đưa ra lựa chọn những atribute của dynamic block nào muốn đổi theo attribute mẫu (đưa ra bảng liệt kê tên các attribute trong các dynamic block đã được lựa chọn)

 3. kết thúc lệnh

 

Rất mong bạn phamthanhbinh cũng như các bạn trên diễn đàn giúp mình, mình cám ơn nhiều

Hề hề hề,

Cần giải thích thêm cho rõ các yêu cầu sau:

3/- đưa ra 1 bảng để liệt kê ra các attribute có nội dung giống nhau (chỉ những attribute có nội dung giống nhau thôi)

a/- cần tìm các thuộc tính có nội dung giống nhau ( tức là giá trị của mã dxf 1) hay cần tìm các thuộc tính có tên thuộc tính giống nhau (tức là tag của thuộc tính (mà dxf 2) ???

b/- Cái bảng líệt kê ấy ra sao, nếu sử dụng như lisp trước mình làm là đưa ra một chuỗi các tag của thuộc tính thì có đuộc hay không???

4/-  chọn attribute cần đổi màu

a/- chon các thuộc tính này theo cách nào??? Pick vào thuộc tính hay người dùng tự nhập giá trị  hay tag của thuộc tính ???

b/- Chọn các thuộc tính này theo " bảng liệt kê " phía trên hay chọn ngẫu nhiên ???


  • 0
Chúc các quý Anh trên diễn đàn luôn khỏe, đẻ thêm được nhiều thứ để mót.

#19 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 24 April 2014 - 10:45 PM

Mình không hiểu ý của bạn phamthanhbinh nói về dxf 1, dxf 2 là gì, mình không biết lập trình lisp mà

Hề hề hề,

Cần giải thích thêm cho rõ các yêu cầu sau:

3/- đưa ra 1 bảng để liệt kê ra các attribute có nội dung giống nhau (chỉ những attribute có nội dung giống nhau thôi)

a/- cần tìm các thuộc tính có nội dung giống nhau ( tức là giá trị của mã dxf 1) hay cần tìm các thuộc tính có tên thuộc tính giống nhau (tức là tag của thuộc tính (mà dxf 2) ???

b/- Cái bảng líệt kê ấy ra sao, nếu sử dụng như lisp trước mình làm là đưa ra một chuỗi các tag của thuộc tính thì có đuộc hay không???

4/-  chọn attribute cần đổi màu

a/- chon các thuộc tính này theo cách nào??? Pick vào thuộc tính hay người dùng tự nhập giá trị  hay tag của thuộc tính ???

b/- Chọn các thuộc tính này theo " bảng liệt kê " phía trên hay chọn ngẫu nhiên ???

Mình sẽ đưa ra 1 ví dụ cụ thể để bạn hiểu nhé:

 

Mình có 1 file chứa rất nhiều dynamic block tên cấu kiện dầm, trong mỗi block đều có 4 attribute là KT1, KT2, SH1, SH2. SH1, SH2 là để chỉ số hiệu dầm. KT1, KT2 là để chỉ kích thước tiết diện dầm (file đính kèm)

Giờ đang có rất nhiều dầm có tiết diện khác nhau và mình muốn những dầm có tiết diện giống nhau thì sẽ cùng 1 mầu như thế dễ quản lí và vẽ sẽ không bị nhầm. giờ dùng lisp của các bạn như trên trao đổi thì đã đảm bảo việc đổi mầu đó rồi nhưng giờ muốn nâng cao hơn nữa để làm nhanh hơn nữa

 

đó là mình sẽ chọn hết 1 loạt tất cả các dynamic block đó, khi đó sẽ hiện lên 1 bảng thống kê tất cả các attribute (tương tự lisp của LeeMac nhưng khác là chỉ những attribute nào có giá trị tiết diện giống nhau mới hiện lên) như trong file mình gửi kèm gồm 3 cột: cột 1 là Tag của attribute, cột 2 là Value của attribute, cột 3 là màu hiện tại của attribute đó. mình có thể click vào ô mầu để chọn màu cho 1 attribute trong bảng đã liệt kê, tiếp tục chọn màu cho các attirbute khác, sau khi chọn xong thì OK để kết thúc lệnh

 

Ngoài ra mình cần thêm 1 lisp nữa tương tự như lệnh Machop nhưng dùng được với dynamic block. lí do là khi thiết kế thay đổi tiết diện dầm mà tiết diện đó đã có sắn rồi thì chỉ việc dùng lisp đó lấy tiết diện và mầu của attribute mẫu gán cho attribute cần thay đổi. nội dung lisp là:

 

1. đưa ra lựa chọn attribute của 1 dynamic block chọn làm mẫu (lựa chọn bằng cách click thẳng vào attribute nào thì lấy luôn attribute đó làm mẫu)

 2. đưa ra lựa chọn những atribute của dynamic block nào muốn đổi theo attribute mẫu. nếu chọn 1 attribute thì không cần hiện bảng liệt kê, đổi luôn nội dung và mầu attribute đã chọn theo attribute mẫu, nếu chọn nhiều attribute thì đưa ra bảng liệt kê tên các attribute trong các dynamic block đã được lựa chọn, tương tự bảng trong lisp trên

 3. kết thúc lệnh

 

http://www.cadviet.c...mic_block_1.dwg

 

trước bạn Tot7 có đưa ra 1 lisp của LeeMac dùng khá trực quan,đưa ra bảng lựa chọn rất trực quan, bạn phamthanhbinh tham khảo nhé

 

 

http://www.cadviet.c...ibutecolour.lsp

 

Mong các bạn phamthanhbinh, Tue_NV, Tot7, Doan van Ha cũng như các cao thủ lisp trong diễn đàn giúp đỡ. mình cám ơn nhiều


  • 0

#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 24 April 2014 - 11:06 PM

- Theo ý mình để đơn giản và tiện sử dụng, với cấu kiện như vầy thì nên đưa ra cụ thể là 2 ATT thôi, một ATT quy định tên cấu kiện và 1 ATT quy định tiết diện của cấu kiện đó, không nên đưa ra nhiều ATT như bản vẽ mẫu của bạn

 

- Tỷ như cái y/c "Match" nội dung và màu của ATT thì những cái nào có cùng tên Block và cùng Tag của ATT thì đổi, không thì thôi, giảm bớt việc đưa ra lựa chọn. (có thể bỏ mục lựa chọn số 2 trong nội dung y/c "Match" nội dung và màu của ATTcủa bạn được rồi)..........

 

 

- Đổi nội dung theo màu cũng có cần công đoạn kiểm tra, nhờ máy tính hay tự bản thân phải đi kiểm tra lại, bởi nội dung tiết diện do mình nhập vào. Máy tính chỉ làm hộ công đoạn đổi màu cho bạn mà thôi.....

 

Ngoài ra, xung quanh cái vấn đề này còn có nhiều y/c khác nữa..............

 

@tot77: Bạn Tot77 mần thêm điều kiện nếu pick "hụt" hoặc pick không đúng ATT thì cho pick lại  đi ^ _ ^

P/S Thời gian này Tue_NV bận quá, không mần lisp được 

 

Cám ơn bạn Tue_NV đã góp ý. Mình xin trả lời bạn là:

 

 - "Theo ý mình để đơn giản và tiện sử dụng, với cấu kiện như vầy thì nên đưa ra cụ thể là 2 ATT thôi, một ATT quy định tên cấu kiện và 1 ATT quy định tiết diện của cấu kiện đó, không nên đưa ra nhiều ATT như bản vẽ mẫu của bạn"

    => Trả lời: Tại vì bản vẽ với tỉ lệ nhỏ, nhiều hình với text rất rối, không để 1 loại được, mình toàn phải dùng loại 2 là có leader để chỉ vô những dầm không có đủ chỗ để bố trí loại 1

 

 - "Tỷ như cái y/c "Match" nội dung và màu của ATT thì những cái nào có cùng tên Block và cùng Tag của ATT thì đổi, không thì thôi, giảm bớt việc đưa ra lựa chọn. (có thể bỏ mục lựa chọn số 2 trong nội dung y/c "Match" nội dung và màu của ATTcủa bạn được rồi)."

    => Trả lời: ok, ý của bạn rất hay, nhưng chỉ đổi tag KT1 và KT2 thôi vì đó là attribute kích thước tiết diện dầm, còn SH1, SH2 thì không được thay đổi vì tuy tiết diện giống nhau nhưng tên dầm khác nhau do khác thép hay chiều dài dầm chẳng hạn

 

- " Đổi nội dung theo màu cũng có cần công đoạn kiểm tra, nhờ máy tính hay tự bản thân phải đi kiểm tra lại, bởi nội dung tiết diện do mình nhập vào. Máy tính chỉ làm hộ công đoạn đổi màu cho bạn mà thôi"

    => Trả lời: mình chưa hiểu ý bạn lắm. ý mình là attribute nào có value giống nhau thì liệt kê hết ra để mình sẽ chọn đổi màu (như comment trên mình trả lời bạn phamthanhbinh đó)


  • 0