Chuyển đến nội dung
Diễn đàn CADViet
duclong010888

Nhờ viết lisp đổi màu đối tượng BY BLOCK thành màu của block hiện hành sau khi XPLODE BLOCK

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

Xin chào cả nhà, mình theo dõi diễn đàn đã lâu nhưng nay mới lần đầu post bài mạo muội mong anh em và các tiền bối trợ giúp mình ca này, do tìm rất nhiều nguồn nhưng chưa thấy lisp nào tương tự đúng với nhu cầu của mình. Cụ thể như sau:

Trong các bock mình đã tạo, những đối tượng phụ mình đã đặt màu cụ thể, còn các đối tượng chính mình để màu là BY BLOCK. Giờ nhu cầu của mình là sau khi XPLODE block, thì các đối tượng phụ được đặt màu cụ thể vẫn giữ nguyên, còn đối tượng BYBLOCK sẽ tự động nhận màu của block trước khi Xplode. Ví dụ trước khi Xplode mình để block màu đỏ, thì sau khi phá, những đối tượng BYBLOCK sẽ tự động chuyển sang màu đỏ, còn các đối tượng khác giữ nguyên thuộc tính.

Do bản vẽ mình nhiều block kiểu như vậy nên mình cũng muốn lisp cho phép quét chọn toạn bộ, tự nhận diện block -> XPLODE -> kết quả thu được như mình nói trên.

Rất mong anh em giúp đỡ, mình xin cảm ơn và chúc anh em cuối tuần thật nhiều niềm vui! ;-D

 

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

Block có màu thì mới có tác dụng nhé:

(defun c:test (/ A LS OBJ)
  (setq	obj   (vlax-ename->vla-object (car (entsel)) )
	color (vla-get-color obj))
  (setq	ls (vlax-safearray->list (vlax-variant-value (vla-Explode obj))))
  (foreach n ls
    ; by block = 0
    (if	(= (vla-get-color n) 0) (vla-put-color n 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
9 giờ trước, cuongtk2 đã nói:

Block có màu thì mới có tác dụng nhé:


(defun c:test (/ A LS OBJ)
  (setq	obj   (vlax-ename->vla-object (car (entsel)) )
	color (vla-get-color obj))
  (setq	ls (vlax-safearray->list (vlax-variant-value (vla-Explode obj))))
  (foreach n ls
    ; by block = 0
    (if	(= (vla-get-color n) 0) (vla-put-color n color))
  )
)

 

rất cảm ơn anh Cường đã hỗ trợ, em tải lisp về dùng thử thấy rất tốt, nhưng lisp ko cho quét chọn nhiều đối tượng mà chỉ có thể chọn từng block 1 lần, nếu có thể anh giúp em bổ sung khả năng chọn nhiều đối tượng cùng lúc được không ạ?

Em nhận thấy 1 cái nữa là sau khi lisp thực hiện lệnh thì block cũ vẫn còn và nằm dưới lớp layer mới vừa tạo, em muốn sau khi tạo xong thì block cũ sẽ bị xóa, giống như việc mình explode 1 block thông thường vậy, hơi phiền nhưng rất mong anh trợ giúp ^T^

 

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
(defun c:test (/ A LS OBJ ss )
  (setq ss (mapcar '(lambda (x) (vlax-ename->vla-object x))
		   (ACET-SS-TO-LIST (ssget '((0 . "INSERT"))))
		   ))
  (foreach obj ss
    (progn
      (setq   color (vla-get-color obj)
	    ls (vlax-safearray->list (vlax-variant-value (vla-Explode obj)))
	     )
    (foreach n ls (if (= (vla-get-color n) 0) (vla-put-color n color))  )
      (vla-Erase obj)
      )
    )
)

 

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

(defun c:test (/ A LS OBJ ss )
  (setq ss (mapcar '(lambda (x) (vlax-ename->vla-object x))
		   (ACET-SS-TO-LIST (ssget '((0 . "INSERT"))))
		   ))
  (foreach obj ss
    (progn
      (setq   color (vla-get-color obj)
	    ls (vlax-safearray->list (vlax-variant-value (vla-Explode obj)))
	     )
    (foreach n ls (if (= (vla-get-color n) 0) (vla-put-color n color))  )
      (vla-Erase obj)
      )
    )
)

 

chuẩn nguyện vọng luôn rồi anh ah, cảm ơn anh rất nhiều :D

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

×