Chuyển đến nội dung
Diễn đàn CADViet
Đăng nhập để thực hiện theo  
levanduy

Backwards hàng loạt Attribute block ?

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

Em vô tình dùng attribute block có text bị mirror.Sau đó em dùng lệnh ATTSYNC thì tất cả Attribute block có text bị đảo lộn không thể đọc được nữa.Bây giờ mà ngồi click đúp vào từng block và chọn backward thì chắc mất cả ngày.

Các bác có cách nào giúp em vớ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

Lisp dưới đây (của Lee Mac) có chức năng Matchprop nhiều thông số của Attribute, bao gồm:

Backward ; Height ; Layer ; Linetype ; LinetypeScale ; Lineweight ; ObliqueAngle ; Rotation ; ScaleFactor ; StyleName ; Thickness ; UpsideDown.

Cách sử dụng cho trường hợp của bạn:

- Copy 1 block_att làm mẫu, sau đó mirror để att không còn đảo ngược => được Block_Att mẫu.

- Chạy lisp: chọn Block_Att mẫu => lần lượt chọn từng Bolck_att cần Backward => kết quả.

;;-------------------=={ Match Attribs }==--------------------;;
;;  Prompts for selection of source attribute, then proceeds to match the listed properties for subsequently picked attributes.
;;  Author: Lee Mac, Copyright © 2010 - www.lee-mac.com   	;;
(defun c:MatchAttribs ( / properties source )
 (vl-load-com)
;; List of Properties to Match, may be edited to suit
 (setq properties
  '(Backward
	Height
	Layer
	Linetype
	LinetypeScale
	Lineweight
	ObliqueAngle
	Rotation
	ScaleFactor
	StyleName
	Thickness
	UpsideDown))
;;------------------------------------------------------------;;
 (if (setq source
   	(LM:Selectif
     	(lambda ( x )
       	(eq "ATTRIB" (cdr (assoc 0 (entget x)))))
     	nentsel "\nSelect Source Attribute: "))
((lambda ( properties values / dest )
   	(while
     	(setq dest
       	(LM:Selectif
         	(lambda ( x )
           	(eq "ATTRIB" (cdr (assoc 0 (entget x)))))
         	nentsel "\nSelect Destination Attributes: "))
     	(setq dest (vlax-ename->vla-object dest))
     	(mapcar
       	(function
         	(lambda ( property value )
           	(vlax-put-property dest property value)))
       	properties values)))
 	properties
 	(progn (setq source (vlax-ename->vla-object source))
   	(mapcar
     	(function
       	(lambda ( property ) (vlax-get-property source property)))
     	properties))))
 (princ))
;;---------------------=={ Select if }==----------------------;;
;;  Continuous selection prompts until the predicate function foo is validated.
;;  Author: Lee Mac, Copyright © 2010 - www.lee-mac.com   	;;
;;  Arguments:                                            	;;
;;  foo - optional predicate function taking ename argument   ;;
;;  fun - selection function to invoke                    	;;
;;  str - prompt string                                   	;;
;;  Returns:  selected entity ename if successful, else nil   ;;
(defun LM:Selectif ( foo fun str / e )
 (while
(progn (setq e (car (fun str)))     
 	(cond
   	( (eq 'ENAME (type e))
     	(if (and foo (not (foo e)))
       	(princ "\n** Invalid Object Selected **"))))))
 e)

  • Vote tăng 2

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 thật tuyệt vời bác ah.Ngóng reply của bác cả sáng nay,cuối cùng đã được đền đáp xứng đáng.Bác ở Hà Nội ko ?Có dịp offline được chạm cốc với bác.

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

Thay vì pick từng block thì có thể chọn bằng cửa sổ hoặc Quick Select và Filter không bác ?Bác phát triển tiếp lisp trên được không ah ?Em hơi tham lam 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

Thay vì pick từng block thì có thể chọn bằng cửa sổ hoặc Quick Select và Filter không bác ?Bác phát triển tiếp lisp trên được không ah ?Em hơi tham lam tí :)

Bạn sài thử :

(defun c:setAtt (/ ent elst val ss tag)
 (if
(and
 	(setq ent (car (nentsel "\nSelect attribute: ")))
 	(setq elst (entget ent))
 	(= (cdr (assoc 0 elst)) "ATTRIB")
 	(setq pro (vlax-get-property (vlax-Ename->Vla-Object ent)'Backward))
 	(princ "\nSelect blocks : ")
 	(setq ss (ssget (list '(0 . "INSERT") (assoc 2 (entget (cdr (assoc 330 elst))))))    	)
 	(setq tag (cdr (assoc 2 elst)))
 	(setq i -1)	)
(while (setq e (ssname ss (setq i (1+ i))))
(setq obj (vlax-Ename->Vla-Object e))
(foreach att (vlax-invoke obj 'GetAttributes)
  (if (= (vla-get-TagString att) tag)
	(vlax-put-property att 'Backward pro) ) ) )
	(princ "\nInvalid input")  )
 (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

Thay vì pick từng block thì có thể chọn bằng cửa sổ hoặc Quick Select và Filter không bác ?Bác phát triển tiếp lisp trên được không ah ?Em hơi tham lam tí :)

Ừ thì nhanh gọn lẹ.

(defun c:BackAtt (/ e ss i obj)
 (if (setq i -1 ss (ssget (list '(0 . "INSERT") (cons 66 1))) )
(while (setq e (ssname ss (setq i (1+ i))))
 	(foreach att (vlax-invoke (vlax-Ename->Vla-Object e) 'GetAttributes)
(if (= (vlax-get-property att'Backward) :vlax-false)
  (vlax-put-property att 'Backward :vlax-true) ) ) )   )
 (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

Ừ thì nhanh gọn lẹ.

Quá tuyệt bác ah.Không biết trên thế giới mạng có diễn đàn nào cầu được ước thấy như cadviet.com không ?

Các bác tu ở đỉnh núi nào mà nội công thâm hậu vậy ?Cho em theo vớ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

Đăng nhập để thực hiện theo  

×