Đến nội dung


Hình ảnh
- - - - -

Lisp chuyển layer và giữ nguyên màu của block


  • Please log in to reply
8 replies to this topic

#1 theducw87

theducw87

    biết vẽ circle

  • Members
  • PipPip
  • 31 Bài viết
Điểm đánh giá: 0 (bình thường)

Đã gửi 10 May 2014 - 09:48 PM

Mình cần một lisp chuyển nhanh tất cả các layer của các đối tượng của block về layer của block và vẫn giữ nguyên màu sắc của các đối tượng cũ. Bác nào biết chỉ giúp mình với. Mình tìm trên diễn đàn thì có lisp chuyển tất cả layer của đối tượng về layer của block nhưng lại thay đổi cả màu của các đối tượng trong block ấy.


  • 0

#2 Tot77

Tot77

    biết lệnh adcenter

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

Đã gửi 11 May 2014 - 02:37 PM

Bạn thử cái này.

(defun c:tmp()
  (vl-load-com)
  (setq v (car (entsel))
lay (cdr (assoc 8 (entget v)))
name (vla-get-effectivename (vlax-ename->vla-object v)))
  (if (tblsearch "BLOCK" name)
    (progn
      (setq en (tblobjname "BLOCK" name))
      (while (setq en (entnext en))
        (entmod (subst (cons 8 lay) (assoc 8 (entget en)) (entget en)))
        (entupd en)
      ))
  )
  (vla-regen (vla-get-ActiveDocument (vlax-get-acad-object))  acAllViewports)
)


  • 1

#3 theducw87

theducw87

    biết vẽ circle

  • Members
  • PipPip
  • 31 Bài viết
Điểm đánh giá: 0 (bình thường)

Đã gửi 11 May 2014 - 08:06 PM

Bạn Tot77 ơi minh dùng lisp này thì thấy có block chuyển được mà vẫn giữ nguyên màu sắc ban đầu nhưng vẫn có block chuyển thì bị thay đổi màu hết. Mình không hiểu lỗi ở đâu. Bạn kiểm tra hộ mình với! thank!


  • 0

#4 Tot77

Tot77

    biết lệnh adcenter

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

Đã gửi 11 May 2014 - 08:32 PM

Bạn xem có phải màu của entity đó có phải là bylayer
không? nếu đúng thì đương nhiên nó sẽ phải đổi màu, còn không thì bạn gửi file lên tôi test lại.
  • 0

#5 theducw87

theducw87

    biết vẽ circle

  • Members
  • PipPip
  • 31 Bài viết
Điểm đánh giá: 0 (bình thường)

Đã gửi 11 May 2014 - 08:47 PM

Vậy bạn có biết cách nào để chuyển layer của entify đó để không còn là bylayer rồi dùng tiếp lisp của bạn không? như là kết hợp 2 lisp ấy!


  • 0

#6 Tot77

Tot77

    biết lệnh adcenter

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

Đã gửi 11 May 2014 - 08:57 PM

Cái đó bạn phải định nghĩa lại block, insert rồi nổ ra, cho từng cái theo màu bạn muốn rồi block nó lại, miễn sao không có cái nào có màu bylayer là được.
Bạn gửi lisp lên (gửi qua mediafire).
  • 0

#7 theducw87

theducw87

    biết vẽ circle

  • Members
  • PipPip
  • 31 Bài viết
Điểm đánh giá: 0 (bình thường)

Đã gửi 11 May 2014 - 08:58 PM

Mình có một lisp chuyển về layer hiện hành nhưng vẫn giữ nguyên màu sắc...nhưng lại không áp dụng được với block. Nếu bạn hiểu về autolisp thì sửa giúp mình với!http://www.cadviet.c..._nguyen_mau.lsp


  • 0

#8 Tot77

Tot77

    biết lệnh adcenter

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

Đã gửi 11 May 2014 - 10:02 PM

Bạn dùng thử cái này có tính trường hợp bylayer, còn cái lisp của bạn chưa down được, link cadviet up được mà down không được.

(defun c:tmp()
  (defun dxf(id v) (cdr (assoc id (entget v))))
  
  (vl-load-com)
  (setq v (car (entsel))
lay (dxf 8 v)
name (vla-get-effectivename (vlax-ename->vla-object v)))
  (if (tblsearch "BLOCK" name)
    (progn
      (setq en (tblobjname "BLOCK" name))
      (while (setq en (entnext en))
(if (not (dxf 62 en))
 (entmod (cons (assoc 62 (tblsearch "LAYER" (dxf 8 en))) (entget en))))
        (entmod (subst (cons 8 lay) (assoc 8 (entget en)) (entget en)))
        (entupd en)
      ))
  )
  (vla-regen (vla-get-ActiveDocument (vlax-get-acad-object))  acAllViewports)
)


  • 1

#9 theducw87

theducw87

    biết vẽ circle

  • Members
  • PipPip
  • 31 Bài viết
Điểm đánh giá: 0 (bình thường)

Đã gửi 11 May 2014 - 10:04 PM

Tuyệt! Cảm ơn Tot77 nhiều!


  • 0