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

Chọn đối tượng với lệnh "SSGET" trong Lisp

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

Gửi Bác Hoành cùng anh chị em trên CADVIET.

Mong mọi người chỉ giao giúp mình một chút. Chuyện là thế này, mình sử dụng lệnh "SSGET" để lựa chọn đối tượng text theo đoạn Lisp sau:

(defun chgtext_VT (objs / last_o tot_o ent o_str n_str st s_temp 
				   n_slen o_slen si chf chm cont ans)
 (if (null objs)
(setq objs (ssget))
)

khi đó nhận được biến "Objs", đối tượng được chọn nằm trong một hình chữ nhật với lựa chon "W" tại dòng nhắc và sau đó là pickpoint hai điểm P1, P2. Nhưng khi sử dụng phép gán biến (Setq ent Objs) hoặc (Set ent Objs) thì biến này khác hoàn toàn với biến Objs

=> Mình không hiểu thế là sao, mong mọi người góp ý chỉ bảo giúp.

=> Mình sử dụng đoạn mã sau (setq objs (ssget "c" p1 p2)) để tự động chọn thì lại có thông báo lỗi, chẳng hiểu sai chỗ nào nữa ????

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
Gửi Bác Hoành cùng anh chị em trên CADVIET.

Mong mọi người chỉ giao giúp mình một chút. Chuyện là thế này, mình sử dụng lệnh "SSGET" để lựa chọn đối tượng text theo đoạn Lisp sau:

(defun chgtext_VT (objs / last_o tot_o ent o_str n_str st s_temp 
				   n_slen o_slen si chf chm cont ans)
 (if (null objs)
(setq objs (ssget))
)

khi đó nhận được biến "Objs", đối tượng được chọn nằm trong một hình chữ nhật với lựa chon "W" tại dòng nhắc và sau đó là pickpoint hai điểm P1, P2. Nhưng khi sử dụng phép gán biến (Setq ent Objs) hoặc (Set ent Objs) thì biến này khác hoàn toàn với biến Objs

=> Mình không hiểu thế là sao, mong mọi người góp ý chỉ bảo giúp.

=> Mình sử dụng đoạn mã sau (setq objs (ssget "c" p1 p2)) để tự động chọn thì lại có thông báo lỗi, chẳng hiểu sai chỗ nào nữa ????

Bạn đừng trích một góc của code lên, vì như vậy không thể biết được bạn sai ở đâu.

 

Bạn hãy post code đầy đủ của bạn lên, hoặc chí ít bạn hãy viết 1 chương trình ngắn, đầy đủ, đúng theo tư duy của bạn (nhưng sai với tư duy của ACAD) rồi post lên. Chúng tôi sẽ giúp được bạn.

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 đừng trích một góc của code lên, vì như vậy không thể biết được bạn sai ở đâu.

 

Bạn hãy post code đầy đủ của bạn lên, hoặc chí ít bạn hãy viết 1 chương trình ngắn, đầy đủ, đúng theo tư duy của bạn (nhưng sai với tư duy của ACAD) rồi post lên. Chúng tôi sẽ giúp được bạn.

Mấy hôm nay ở công ty nhiều việc quá, về đến nhà chẳng còn tâm trí gì cả. Hôm nay mới có chút thời gian lướt Web. Dù sao cũng xin gửi lời cảm ơn tới bác Hoành trước nhé. Toàn bộ code bây giờ mới đưa lên diễn đàn được, có vẻ như nó chạy ngon rồi bác Hoành a.

(defun chgtext (objs / last_o tot_o ent o_str n_str st s_temp 
				   n_slen o_slen si chf chm cont ans)
 (if (null objs)
(setq objs (ssget))			  
 )
 (setq chm 0)
 (if objs 
(progn				   
  (if (= (type objs) 'ENAME) 
	(progn
	  (setq ent (entget objs))
	  (princ (strcat "\nExisting string: " (cdr (assoc 1 ent))))
	)
	(if (= (sslength objs) 1)
	  (progn
		(setq ent (entget (ssname objs 0)))
		(princ (strcat "\nExisting string: " (cdr (assoc 1 ent))))
	  )
	)
  )
  (setq o_str (getstring "\nMatch string   : " t))
  (setq o_slen (strlen o_str))
  (if (/= o_slen 0)
	(progn
	  (setq n_str (getstring "\nNew string	 : " t))
	  (setq n_slen (strlen n_str))
	  (setq last_o 0 
			tot_o  (if (= (type objs) 'ENAME)
					 1
					 (sslength objs)
				   )
	  )
	  (while (< last_o tot_o)	 
		(if (or (= "TEXT"   ; Look for TEXT entity type (group 0)
				(cdr (assoc 0 (setq ent (entget (ssname objs last_o))))))
				(= "MTEXT"   ; Look for MTEXT entity type (group 0)
				(cdr (assoc 0 (setq ent (entget (ssname objs last_o))))))
			 )	
		  (progn
			(setq chf nil si 1)
			(setq s_temp (cdr (assoc 1 ent)))
			(while (= o_slen (strlen (setq st (substr s_temp si o_slen))))
			  (if (= st o_str)
				(progn
				  (setq s_temp (strcat 
								 (if (> si 1)
								   (substr s_temp 1 (1- si)) 
								   ""
								 )
								 n_str
								 (substr s_temp (+ si o_slen))
							   )
				  )
				  (setq chf t)	
				  (setq si (+ si n_slen))
				)
				(setq si (1+ si))
			  )
			)
			(if chf 
			  (progn			 
			   ; Modify the TEXT entity
				(entmod (subst (cons 1 s_temp) (assoc 1 ent) ent))
				(setq chm (1+ chm))
			  )
			)
		  )
		)
		(setq last_o (1+ last_o))
	  )
	)
   ;; else go on to the next line...
  )
)
 )
 (if (/= (type objs) 'ENAME)
(if (/= (sslength objs) 1)	
  (princ (strcat "Changed "
				 (rtos chm 2 0)
				 " text lines."
		 )
  )
)
 )
 (terpri)
)

Đoạn lisp này tìm và thay đổi một hoặc nhiều ký tự trong text có lẽ trên diễn đàn cũng đã có khá nhiều rồi.

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

×