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

[Yêu cầu] Truy xuất các đối tượng trong Group và cập nhật Group

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

Chào các bác!

Em có ý tưởng quản lý các đối tượng bằng Group và dựa vào tên của Group đó để truy xuất và cập nhật Group.

Hiện tại em đã có một đoạn mã Code để lấy được tên của Group, dựa vào tên đó em đã lấy được các Entity Name trong Group đó.

Sau khi truy xuất được thông tin của các Entity name, thay đổi các đối tượng trong đó. Giờ em muốn cập nhật Group đó thì làm như thế nào được ạ?

 

(defun obtername_grupo (group_object / ent_name acad_reactors vlx_objetc); group_name
(setq ent_name (entget group_object))
	(if (setq acad_reactors (member '(102 . "{ACAD_REACTORS") ent_name))
		(while
			(and
				(setq acad_reactors (cdr acad_reactors))
				(eq (caar acad_reactors) 330)
				(eq (vla-get-ObjectName (setq vlx_objetc (vlax-ename->vla-object (cdar acad_reactors)))) "AcDbGroup")
		        ); end of and
			(if (equal (cadr acad_reactors) '(102 . "}"))
			(setq acad_reactors nil)); end of if
			(setq group_name (vla-get-Name vlx_objetc))
		); end of while
	); end of if
); end of defun obtername_grupo

 

(defun obtername_grupo (group_object / ent_name acad_reactors vlx_objetc); group_name
(setq ent_name (entget group_object))
(if (setq acad_reactors (member '(102 . "{ACAD_REACTORS") ent_name))
(while
(and
(setq acad_reactors (cdr acad_reactors))
(eq (caar acad_reactors) 330)
(eq (vla-get-ObjectName (setq vlx_objetc (vlax-ename->vla-object (cdar acad_reactors)))) "AcDbGroup")
       ); end of and
(if (equal (cadr acad_reactors) '(102 . "}"))
(setq acad_reactors nil)); end of if
(setq group_name (vla-get-Name vlx_objetc))
); end of while
); end of if
 
(defun obtername_grupo (group_object / ent_name acad_reactors vlx_objetc); group_name
(setq ent_name (entget group_object))
(if (setq acad_reactors (member '(102 . "{ACAD_REACTORS") ent_name))
(while
(and
(setq acad_reactors (cdr acad_reactors))
(eq (caar acad_reactors) 330)
(eq (vla-get-ObjectName (setq vlx_objetc (vlax-ename->vla-object (cdar acad_reactors)))) "AcDbGroup")
       ); end of and
(if (equal (cadr acad_reactors) '(102 . "}"))
(setq acad_reactors nil)); end of if
(setq group_name (vla-get-Name vlx_objetc))
); end of while
); end of if
); end of defun obtername_grupo

 

 

(defun C:grm( / )
  (setq a (car (entsel "\n Chon doi tuong:  ")))
  (if (assoc 102 (entget a))
    (progn
      (setq b (assoc 330 (entget a)))
      (vl-remove-if-not '(lambda(x) (member b (entget x)))
 (vl-remove-if 'listp (mapcar 'cadr (ssnamex (ssget "X"))))))
  )
)

 

(defun obtername_grupo (group_object / ent_name acad_reactors vlx_objetc); group_name
(setq ent_name (entget group_object))
(if (setq acad_reactors (member '(102 . "{ACAD_REACTORS") ent_name))
(while
(and
(setq acad_reactors (cdr acad_reactors))
(eq (caar acad_reactors) 330)
(eq (vla-get-ObjectName (setq vlx_objetc (vlax-ename->vla-object (cdar acad_reactors)))) "AcDbGroup")
       ); end of and
(if (equal (cadr acad_reactors) '(102 . "}"))
(setq acad_reactors nil)); end of if
(setq group_name (vla-get-Name vlx_objetc))
); end of while
); end of if
); end of defun obtername_grupo

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

Không hiểu bạn muốn cập nhật cái gì, tên thì nó không đổi rồi, các entities của nó thì vẫn thuộc group đó, rừ khi bạn xoá bớt hay thêm vào thì mới cần cập nhật.

Thật ra group là 1 reactor, chỉ có nhiệm vụ duy nhất là khi select 1 cái thì các cái kia cũng bị select theo.

  • Vote tăng 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

Không hiểu bạn muốn cập nhật cái gì, tên thì nó không đổi rồi, các entities của nó thì vẫn thuộc group đó, trừ khi bạn xoá bớt hay thêm vào thì mới cần cập nhật.

Thật ra group là 1 reactor, chỉ có nhiệm vụ duy nhất là khi select 1 cái thì các cái kia cũng bị select theo.

Chính xác là xóa đi và thêm vào anh Tot77 ạ.

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

Bạn thử cái này. Với ss là 1 cái list chứa các ename, và vlx_object là cái group object.

 

(defun add_to_group(ss)
  (setq ssl (mapcar 'vlax-ename->vla-object ss))
  (vla-AppendItems vlx_object
    (vlax-make-variant (vlax-safearray-fill (vlax-make-safearray vlax-vbObject  (cons 0 (1- (length ssl)))) ssl)))
)
 
(defun del_from_group(ss)
  (setq ssl (mapcar 'vlax-ename->vla-object ss))
  (vla-RemoveItems vlx_object
    (vlax-make-variant (vlax-safearray-fill (vlax-make-safearray vlax-vbObject  (cons 0 (1- (length ssl)))) ssl)))
)
  • Vote tăng 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

 

Bạn thử cái này. Với ss là 1 cái list chứa các ename, và vlx_object là cái group object.

 

(defun add_to_group(ss)
  (setq ssl (mapcar 'vlax-ename->vla-object ss))
  (vla-AppendItems vlx_object
    (vlax-make-variant (vlax-safearray-fill (vlax-make-safearray vlax-vbObject  (cons 0 (1- (length ssl)))) ssl)))
)
 
(defun del_from_group(ss)
  (setq ssl (mapcar 'vlax-ename->vla-object ss))
  (vla-RemoveItems vlx_object
    (vlax-make-variant (vlax-safearray-fill (vlax-make-safearray vlax-vbObject  (cons 0 (1- (length ssl)))) ssl)))
)

Rất cảm ơn anh về mã Code này.

Anh có thể cho em hỏi 1 chút nữa. Về phương thức ấy ạ, sau khi truy xuất vào đối tượng Group, thay đổi 1 số đối tượng trong đó, sau đó thì cập nhật sự thay đổi đó như thế nào ạ? Anh có thể cho em 1 đoạn mã code về phương thức đó được không ạ?

Cảm ơn anh về tất cả các câu trả lời của anh. Nó rất bổ ích với em. 

Em thích sự sáng tạo, sự thu lượm kiến thức sẽ giúp em có thể thực hiện được một số ý tưởng cho chuyên ngành của mình anh ạ.

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

Thì bạn (vla-Update vlx_object) thôi. Thật ra group không chứa nhiều thông tin lắm đâu (bạn entget nó sẽ thấy), chỉ có mã 340 là tên (mã -1) của các phần tử của nó.

  • Vote tăng 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

Thì bạn (vla-Update vlx_object) thôi. Thật ra group không chứa nhiều thông tin lắm đâu (bạn entget nó sẽ thấy), chỉ có mã 340 là tên (mã -1) của các phần tử của nó.

Cảm ơn anh. Em sẽ thử. :)

Em đang dang dở 1 số thứ nên mò mẫm dần dần anh ạ

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


×