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

Xoay text thuộc tính trong block

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

load ok rồi nhưng khi sử dụng thì lsp:

gõ lệnh xong sau đó chọn đối tượng rồi là bị lỗi ah! 

Uhm bạn gửi bản vẽ lên đây xem nào !

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

Nếu điểm insert của block trùng với tâm đường tròn thì dùng lsp sửa lại này cho nhanh (Block gốc kệ nó - chỉ sửa các block được chọn)

(defun c:XO  (/ ent i lse lst poi ss)
 (if (setq ss (ssget '((0 . "INSERT") (66 . 1))))
  (repeat (setq i (sslength ss))
   (setq ent (ssname ss (setq i (1- i)))
         poi (cdr (assoc 10 (entget ent)))
         ent (entnext ent)
         lst (list (cons 50 0.0) (cons 10 poi) (cons 71 0) (cons 72 1) (cons 11 poi))
         lse (entget ent))
   (mapcar '(lambda (x) (entmod (subst x (assoc (car x) lse) lse))) lst)
   (entupd ent)))
 (princ))

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

Nếu điểm insert của block trùng với tâm đường tròn thì dùng lsp sửa lại này cho nhanh (Block gốc kệ nó - chỉ sửa các block được chọn)

(defun c:XO  (/ ent i lse lst poi ss)

 (if (setq ss (ssget '((0 . "INSERT") (66 . 1))))

  (repeat (setq i (sslength ss))

   (setq ent (ssname ss (setq i (1- i)))

         poi (cdr (assoc 10 (entget ent)))

         ent (entnext ent)

         lst (list (cons 50 0.0) (cons 10 poi) (cons 71 0) (cons 72 1) (cons 11 poi))

         lse (entget ent))

   (mapcar '(lambda (x) (entmod (subst x (assoc (car x) lse) lse))) lst)

   (entupd ent)))

 (princ))

Chuẩn, nếu trùng tâm và điểm chèn thì nhàn hơi 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

Uhm bạn gửi bản vẽ lên đây xem nào !

Bạn test thử chưa ? Do lsp bi lỗi mà

Do điễn đàn bị lỗi nên mình up bv lên không được nữa

 

Nếu điểm insert của block trùng với tâm đường tròn thì dùng lsp sửa lại này cho nhanh (Block gốc kệ nó - chỉ sửa các block được chọn)

(defun c:XO  (/ ent i lse lst poi ss)

 (if (setq ss (ssget '((0 . "INSERT") (66 . 1))))

  (repeat (setq i (sslength ss))

   (setq ent (ssname ss (setq i (1- i)))

         poi (cdr (assoc 10 (entget ent)))

         ent (entnext ent)

         lst (list (cons 50 0.0) (cons 10 poi) (cons 71 0) (cons 72 1) (cons 11 poi))

         lse (entget ent))

   (mapcar '(lambda (x) (entmod (subst x (assoc (car x) lse) lse))) lst)

   (entupd ent)))

 (princ))

Vấn đề là điểm chèn của nó không trùng với tâm đường tròn đó 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 test thử chưa ? Do lsp bi lỗi mà

Do điễn đàn bị lỗi nên mình up bv lên không được nữa

 

Vấn đề là điểm chèn của nó không trùng với tâm đường tròn đó bạn .

Mình test lại rồi mà, không thấy lỗi. Up lên mediafire hoặc fshare.... mới được. Diễn đàn còn ko up đc ảnh xem lỗi gì. :(

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

Mình test lại rồi mà, không thấy lỗi. Up lên mediafire hoặc fshare.... mới được. Diễn đàn còn ko up đc ảnh xem lỗi gì. :(

load thì thành công rồi nhưng khi dùng lệnh:

1/ lệnh test : thì nó báo lỗi (lsp không chọn được nhiều đối tượng) : 

 ; error: bad DXF group: (11)

2/ lệnh mac : thì nó báo lỗi (lsp cũng không chọn được nhiều đối tượng) : 

Chon block: ; error: bad 3D point: nil

Mình không biết up lên  mediafire hoặc fshare, gà lắm  :)

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

Cần j chọn nhiều đối tượng. Chon 1 block trục là xong mà. Báo lỗi kiểu này mà ko có file xem thì ai fix dc.

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

Lisp này chỉ cần chọn 1 block điển hình là toàn bộ block khác cùng loại sẽ auto move att về tâm đường tròn mà.

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

Cần j chọn nhiều đối tượng. Chon 1 block trục là xong mà. Báo lỗi kiểu này mà ko có file xem thì ai fix dc.

Vi du; minh co 6 truc (6 att block) theo phuong X va 5 truc (5 att block) theo phuong Y thi phai chon het chung de xoay ma

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

Vi du; minh co 6 truc (6 att block) theo phuong X va 5 truc (5 att block) theo phuong Y thi phai chon het chung de xoay ma

X hay Y hay góc bất kỳ thì cứ chọn đại 1 cái nhìn nó thích thích, em số 3 hay 2 hay 1 hay n theo phương X hoặc Y   :D xong rồi việc còn lại là ngồi xem các em nó diễn  :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

X hay Y hay góc bất kỳ thì cứ chọn đại 1 cái nhìn nó thích thích, em số 3 hay 2 hay 1 hay n theo phương X hoặc Y :D xong rồi việc còn lại là ngồi xem các em nó diễn :D

Khong up bv len dc tiec that.

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

Khong up bv len dc tiec that.

pm mail mình xem nào.! Kiểu khám qua net này cũng hay nhỉ :D ngồi đoán mò hế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

kiennt.vncc@gmail.com. Thêm vài  tiếng việt   :D ko bài viết bị xóa.

Tong một bản vẽ có nhiều trục (nhiếu att block) theo mình nghĩ lsp nên chọn những att block nào cần thay góc quay thôi 

(có những att block ở những vị trí khác nhưng trong cùng một bản vẽ có khi không cần thay góc quay)

Mình đã gửi file cho bạn 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

Tong một bản vẽ có nhiều trục (nhiếu att block) theo mình nghĩ lsp nên chọn những att block nào cần thay góc quay thôi 

(có những att block ở những vị trí khác nhưng trong cùng một bản vẽ có khi không cần thay góc quay)

Mình đã gửi file cho bạn rồi đó. 

 

"Vay co cach nao lam cho no trung voi tam duong tron khong vay ban? Boi vi att block nay do nguoi khac tao truoc do roi. "

Uhm trong block đấy là ellip mà. không phải đường tròn. Mình có sửa code lại đây. Có bản vẽ khám bênh mới chính xác được. Lisp này là move att vào tâm thôi không xoay att. Muốn xoay thì dùng lisp XO hoặc torrient tùy bạn. Dùng kết hợp 2 lisp. Còn muốn add thêm xoay att vào lisp của mình thì để sau thứ 3 mình semina xong sẽ sửa lại lisp.

Thử lisp mới và ngồi xem nhé. ^_^

(defun c:MAC (/ acdoc mspace blk center temp)
  (setq acdoc (vla-get-activedocument (vlax-get-acad-object)))
  (setq mspace (vla-get-modelspace acdoc))
  (if (setq blk (car (entsel "\nChon block: ")))
    (progn
      (vlax-for	blks (vla-get-blocks acdoc)
	(if (wcmatch (vla-get-Name blks) (cdr (assoc 2 (entget blk))))
	  (progn
	    (vlax-for obj blks
	      (if (or (= (vla-get-ObjectName obj) "AcDbCircle")
		      (= (vla-get-ObjectName obj) "AcDbEllipse")
                      (= (vla-get-ObjectName obj) "AcDbArc")
		      )
		(setq center (vlax-get obj 'Center))
	      )
	    )
	   
	    (vlax-for obj blks
	      (if
		(= (vla-get-ObjectName obj) "AcDbAttributeDefinition")
		 (progn
		   ;(vla-put-Rotation obj 0.0)
		   (vla-put-Alignment obj acAlignmentMiddleCenter)
		   (vla-put-TextAlignmentPoint
		     obj
		     (vlax-3d-point center)
		   )
		 )			;progn
	      )				;if
	    )				;vlax-for obj
	  )				;progn then
	)				;if
      )					;vlax-for blks
      (setq temp (vla-insertblock
		   mspace
		   (vlax-3d-point '(0. 0. 0.))
		   (cdr (assoc 2 (entget blk)))
		   1
		   1
		   1
		   0
		 )
      )
      (vla-sendcommand
	acdoc
	(strcat	"ATTSYNC\n"
		"Name\n"
		""
		(cdr (assoc 2 (entget blk)))
		"\n"
		""
	)
      )
      (vla-delete temp)
    )					;progn
    (princ "\nBan da khong chon block.")
  )					;if
  (princ)
)					;defun

;;;END CODE VISUAL LISP HERE
  • 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

 

Uhm trong block đấy là ellip mà. không phải đường tròn. Mình có sửa code lại đây. Có bản vẽ khám bênh mới chính xác được. Lisp này là move att vào tâm thôi không xoay att. Muốn xoay thì dùng lisp XO hoặc torrient tùy bạn. Dùng kết hợp 2 lisp. Còn muốn add thêm xoay att vào lisp của mình thì để sau thứ 3 mình semina xong sẽ sửa lại lisp.

Thử lisp mới và ngồi xem nhé. ^_^

(defun c:MAC (/ acdoc mspace blk center temp)
  (setq acdoc (vla-get-activedocument (vlax-get-acad-object)))
  (setq mspace (vla-get-modelspace acdoc))
  (if (setq blk (car (entsel "\nChon block: ")))
    (progn
      (vlax-for	blks (vla-get-blocks acdoc)
	(if (wcmatch (vla-get-Name blks) (cdr (assoc 2 (entget blk))))
	  (progn
	    (vlax-for obj blks
	      (if (or (= (vla-get-ObjectName obj) "AcDbCircle")
		      (= (vla-get-ObjectName obj) "AcDbEllipse")
                      (= (vla-get-ObjectName obj) "AcDbArc")
		      )
		(setq center (vlax-get obj 'Center))
	      )
	    )
	   
	    (vlax-for obj blks
	      (if
		(= (vla-get-ObjectName obj) "AcDbAttributeDefinition")
		 (progn
		   ;(vla-put-Rotation obj 0.0)
		   (vla-put-Alignment obj acAlignmentMiddleCenter)
		   (vla-put-TextAlignmentPoint
		     obj
		     (vlax-3d-point center)
		   )
		 )			;progn
	      )				;if
	    )				;vlax-for obj
	  )				;progn then
	)				;if
      )					;vlax-for blks
      (setq temp (vla-insertblock
		   mspace
		   (vlax-3d-point '(0. 0. 0.))
		   (cdr (assoc 2 (entget blk)))
		   1
		   1
		   1
		   0
		 )
      )
      (vla-sendcommand
	acdoc
	(strcat	"ATTSYNC\n"
		"Name\n"
		""
		(cdr (assoc 2 (entget blk)))
		"\n"
		""
	)
      )
      (vla-delete temp)
    )					;progn
    (princ "\nBan da khong chon block.")
  )					;if
  (princ)
)					;defun

;;;END CODE VISUAL LISP HERE

Nếu kết hợp vừa move vào tâm và xoay luôn thì còn gì bằng nữa. Tuyệt vời

Mong tin từ bạn. 

Trong 1 bản vẽ thì có nhiều att block, lsp nên chọn những đối tượng att block nào cần move và xoay thôi thì hay hơn

bởi vì có những cái không cần tác đến chúng.

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

Nếu kết hợp vừa move vào tâm và xoay luôn thì còn gì bằng nữa. Tuyệt vời

Mong tin từ bạn. 

Trong 1 bản vẽ thì có nhiều att block, lsp nên chọn những đối tượng att block nào cần move và xoay thôi thì hay hơn

bởi vì có những cái không cần tác đến chúng.

Uhm, không sửa block gốc thì sài tạm cái này tổng hợp mấy cái cho nhanh vậy ^_^

(defun c:XOM (/ ss ss1 center n i ent lst lse)
  (c:torient)
  (setq ss (ssget "_P"))
  (setq n 0)
  (repeat (sslength ss)
    (command "_explode" (ssname ss n))
    (setq ss1 (ssget "_P"))
    (setq center nil)
    (setq i 0)
    (while (not center)
      (if (or (eq (cdr (assoc 0 (entget (ssname ss1 i)))) "CIRCLE")
	      (eq (cdr (assoc 0 (entget (ssname ss1 i)))) "ELLIPSE")
	      )
	(setq center (cdr (assoc 10 (entget (ssname ss1 i)))))
      )
      (setq i (1+ i))
    )
    (command "undo" "")
    (setq ent (ssname ss n)
	  ent (entnext ent)
	  lst (list (cons 71 0)
		    (cons 72 1)
		    (cons 11 center)
	      )
	  lse (entget ent)
    )
    (mapcar '(lambda (x) (entmod (subst x (assoc (car x) lse) lse)))
	    lst
    )
    (entupd ent)
    (setq n (1+ n))
  )
  (princ)
) 

Đúng ý nhé. Chén thô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

Uhm, không sửa block gốc thì sài tạm cái này tổng hợp mấy cái cho nhanh vậy ^_^

(defun c:XOM (/ ss ss1 center n i ent lst lse)
  (c:torient)
  (setq ss (ssget "_P"))
  (setq n 0)
  (repeat (sslength ss)
    (command "_explode" (ssname ss n))
    (setq ss1 (ssget "_P"))
    (setq center nil)
    (setq i 0)
    (while (not center)
      (if (or (eq (cdr (assoc 0 (entget (ssname ss1 i)))) "CIRCLE")
	      (eq (cdr (assoc 0 (entget (ssname ss1 i)))) "ELLIPSE")
	      )
	(setq center (cdr (assoc 10 (entget (ssname ss1 i)))))
      )
      (setq i (1+ i))
    )
    (command "undo" "")
    (setq ent (ssname ss n)
	  ent (entnext ent)
	  lst (list (cons 71 0)
		    (cons 72 1)
		    (cons 11 center)
	      )
	  lse (entget ent)
    )
    (mapcar '(lambda (x) (entmod (subst x (assoc (car x) lse) lse)))
	    lst
    )
    (entupd ent)
    (setq n (1+ n))
  )
  (princ)
) 

Đúng ý nhé. Chén thôi. ^_^

Thanks bạn !

Cái này cũng giống với lệnh torient nhưng sau khi quay đi 1 góc nó cũng bị lệch tâm ah bạn ơ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

Thanks bạn !

Cái này cũng giống với lệnh torient nhưng sau khi quay đi 1 góc nó cũng bị lệch tâm ah bạn ơi ! 

Đã test bản vẽ của bạn. Ok nhé ^_^

(defun c:XOM (/ ss ss1 center n i ent lse)
  (c:torient)
  (setq ss (ssget "_P"))
  (command "_justifytext" ss "" "MC")
  (setq n 0)
  (repeat (sslength ss)
    (command "_explode" (ssname ss n))
    (setq ss1 (ssget "_P"))
    (setq center nil)
    (setq i 0)
    (while (not center)
      (if (or (eq (cdr (assoc 0 (entget (ssname ss1 i)))) "CIRCLE")
	      (eq (cdr (assoc 0 (entget (ssname ss1 i)))) "ELLIPSE")
	  )
	(setq center (cdr (assoc 10 (entget (ssname ss1 i)))))
      )
      (setq i (1+ i))
    )
    (command "undo" "")
    (setq ent (ssname ss n)
	  ent (entnext ent)
	  lse (entget ent)
    )
    (entmod (subst (cons 11 center) (assoc 11 lse) lse))
    (entupd ent)
    (setq n (1+ n))
  )
  (princ)
)
  • 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

 

Đã test bản vẽ của bạn. Ok nhé ^_^

(defun c:XOM (/ ss ss1 center n i ent lse)
  (c:torient)
  (setq ss (ssget "_P"))
  (command "_justifytext" ss "" "MC")
  (setq n 0)
  (repeat (sslength ss)
    (command "_explode" (ssname ss n))
    (setq ss1 (ssget "_P"))
    (setq center nil)
    (setq i 0)
    (while (not center)
      (if (or (eq (cdr (assoc 0 (entget (ssname ss1 i)))) "CIRCLE")
	      (eq (cdr (assoc 0 (entget (ssname ss1 i)))) "ELLIPSE")
	  )
	(setq center (cdr (assoc 10 (entget (ssname ss1 i)))))
      )
      (setq i (1+ i))
    )
    (command "undo" "")
    (setq ent (ssname ss n)
	  ent (entnext ent)
	  lse (entget ent)
    )
    (entmod (subst (cons 11 center) (assoc 11 lse) lse))
    (entupd ent)
    (setq n (1+ n))
  )
  (princ)
)

Cái này thì ok rồi 

Thanks bạn nhiều nhé! 

Bạn có thường sử dụng lệnh torient không? Đôi khi sau khi gõ lệnh torient để sử dụng thì không dùng được(nó bị thoát ra ah, không cho dùng đến bước 2)

Cho nên lsp này kết hợp với lệnh torient mình sợ đôi khi nó cũng bị như trên (mình chỉ nói lên trường hợp mình gặp phải thôi ah)

thaks bạn nhiều lắm !

 

 

Bạn thử Lisp này xem có khá hơn ko :)  chỉ đoán và làm đại chứ ko có bản vẽ để Test :D :

http://4share.vn/f/23161214161b1113/AG.rar

Lsp của bạn chạy tốt nhưng khi quay att block đi 1 góc thì nó bị lệch tâm ah ! 

(cái khó ở đây là sau khi quay att block xong nó phải ở ngay tâm)

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

Cái này thì ok rồi 

Thanks bạn nhiều nhé! 

Bạn có thường sử dụng lệnh torient không? Đôi khi sau khi gõ lệnh torient để sử dụng thì không dùng được(nó bị thoát ra ah, không cho dùng đến bước 2)

Cho nên lsp này kết hợp với lệnh torient mình sợ đôi khi nó cũng bị như trên (mình chỉ nói lên trường hợp mình gặp phải thôi ah)

thaks bạn nhiều lắm !

 

 

Lsp của bạn chạy tốt nhưng khi quay att block đi 1 góc thì nó bị lệch tâm ah ! 

(cái khó ở đây là sau khi quay att block xong nó phải ở ngay tâm)

Đã nói làm đại chứ có Tét đâu :lol: , nếu có bản vẽ up lên thỉ bắn trúng tâm ngay :D ... Thử lần nữa xem trúng tâm không nhé :)

(Lisp này ko dùng lệnh torient) , nếu trật nữa thì trốn thôi :wub: :

https://4share.vn/f/2114101616131913/AG.rar

  • 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

Đã nói làm đại chứ có Tét đâu :lol: , nếu có bản vẽ up lên thỉ bắn trúng tâm ngay :D ... Thử lần nữa xem trúng tâm không nhé :)

(Lisp này ko dùng lệnh torient) , nếu trật nữa thì trốn thôi :wub: :

https://4share.vn/f/2114101616131913/AG.rar

 

 

Đã nói làm đại chứ có Tét đâu :lol: , nếu có bản vẽ up lên thỉ bắn trúng tâm ngay :D ... Thử lần nữa xem trúng tâm không nhé :)

(Lisp này ko dùng lệnh torient) , nếu trật nữa thì trốn thôi :wub: :

https://4share.vn/f/2114101616131913/AG.rar

Cái này ok rồi bạn ! Tuyệt vời  B)

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


×