Đến nội dung


Hình ảnh
- - - - -

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


  • Please log in to reply
6 replies to this topic

#1 thanhduan2407

thanhduan2407

    biết lệnh adcenter

  • Advance Member
  • PipPipPipPipPipPipPip
  • 993 Bài viết
Điểm đánh giá: 223 (khá)

Đã gửi 28 July 2014 - 05:08 PM

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

  • 0



Tôi là con kiến bò trên sa mạc kiến thức bao la. Biển học thật rộng lớn







#2 Tot77

Tot77

    biết lệnh adcenter

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

Đã gửi 28 July 2014 - 09:06 PM

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.


  • 1

#3 thanhduan2407

thanhduan2407

    biết lệnh adcenter

  • Advance Member
  • PipPipPipPipPipPipPip
  • 993 Bài viết
Điểm đánh giá: 223 (khá)

Đã gửi 28 July 2014 - 09:27 PM

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


  • 0



Tôi là con kiến bò trên sa mạc kiến thức bao la. Biển học thật rộng lớn







#4 Tot77

Tot77

    biết lệnh adcenter

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

Đã gửi 29 July 2014 - 08:56 AM

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)))
)

  • 1

#5 thanhduan2407

thanhduan2407

    biết lệnh adcenter

  • Advance Member
  • PipPipPipPipPipPipPip
  • 993 Bài viết
Điểm đánh giá: 223 (khá)

Đã gửi 29 July 2014 - 09:22 AM

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


  • 0



Tôi là con kiến bò trên sa mạc kiến thức bao la. Biển học thật rộng lớn







#6 Tot77

Tot77

    biết lệnh adcenter

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

Đã gửi 29 July 2014 - 10:55 AM

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


  • 1

#7 thanhduan2407

thanhduan2407

    biết lệnh adcenter

  • Advance Member
  • PipPipPipPipPipPipPip
  • 993 Bài viết
Điểm đánh giá: 223 (khá)

Đã gửi 29 July 2014 - 11:09 AM

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 ạ


  • 0



Tôi là con kiến bò trên sa mạc kiến thức bao la. Biển học thật rộng lớn