Đến nội dung


Hình ảnh
- - - - -

Xoay text thuộc tính trong block


  • Please log in to reply
49 replies to this topic

#41 Kieu Tan

Kieu Tan

    biết vẽ rectang

  • Members
  • PipPip
  • 89 Bài viết
Điểm đánh giá: -23 (kém)

Đã gửi 02 October 2016 - 04:35 PM

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


  • 0

#42 Bee

Bee

    biết lệnh extend

  • Members
  • PipPipPip
  • 198 Bài viết
Điểm đánh giá: 68 (tàm tạm)

Đã gửi 02 October 2016 - 05:20 PM

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

  • 1

#43 Kieu Tan

Kieu Tan

    biết vẽ rectang

  • Members
  • PipPip
  • 89 Bài viết
Điểm đánh giá: -23 (kém)

Đã gửi 02 October 2016 - 08:01 PM

 

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.


  • 0

#44 Bee

Bee

    biết lệnh extend

  • Members
  • PipPipPip
  • 198 Bài viết
Điểm đánh giá: 68 (tàm tạm)

Đã gửi 04 October 2016 - 07:32 PM

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. ^_^


  • 0

#45 Kieu Tan

Kieu Tan

    biết vẽ rectang

  • Members
  • PipPip
  • 89 Bài viết
Điểm đánh giá: -23 (kém)

Đã gửi 04 October 2016 - 08:39 PM

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 ! 


  • 0

#46 Bee

Bee

    biết lệnh extend

  • Members
  • PipPipPip
  • 198 Bài viết
Điểm đánh giá: 68 (tàm tạm)

Đã gửi 04 October 2016 - 09:21 PM

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

  • 1

#47 pphung183

pphung183

    biết dimstyle

  • Members
  • PipPipPipPipPip
  • 384 Bài viết
Điểm đánh giá: 425 (tốt)

Đã gửi 04 October 2016 - 09:50 PM

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/2...161b1113/AG.rar


  • 0

#48 Kieu Tan

Kieu Tan

    biết vẽ rectang

  • Members
  • PipPip
  • 89 Bài viết
Điểm đánh giá: -23 (kém)

Đã gửi 05 October 2016 - 06:01 AM

 

Đã 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/2...161b1113/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)


  • 0

#49 pphung183

pphung183

    biết dimstyle

  • Members
  • PipPipPipPipPip
  • 384 Bài viết
Điểm đánh giá: 425 (tốt)

Đã gửi 05 October 2016 - 03:02 PM

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/...16131913/AG.rar


  • 1

#50 Kieu Tan

Kieu Tan

    biết vẽ rectang

  • Members
  • PipPip
  • 89 Bài viết
Điểm đánh giá: -23 (kém)

Đã gửi 05 October 2016 - 08:23 PM

Đã 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/...16131913/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/...16131913/AG.rar

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


  • 0