duclong010888 0 Báo cáo bài đăng Đã đăng Tháng 10 1, 2021 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! 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
cuongtk2 337 Báo cáo bài đăng Đã đăng Tháng 10 2, 2021 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)) ) ) 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
duclong010888 0 Báo cáo bài đăng Đã đăng Tháng 10 2, 2021 9 giờ trước, cuongtk2 đã nói: Block có màu thì mới có tác dụng nhé: test.lsp [✎] (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 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
cuongtk2 337 Báo cáo bài đăng Đã đăng Tháng 10 2, 2021 (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) ) ) ) 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
duclong010888 0 Báo cáo bài đăng Đã đăng Tháng 10 3, 2021 12 giờ trước, cuongtk2 đã nói: test.lsp [✎] (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