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

[Nhờ chỉnh sửa] Lisp Zoom và in trong Layout theo tọa độ Text

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

Chào các bác trên diễn đàn Cadviet.com

Lọ mọ mấy ngày nay mà em chưa tìm được cách để chương trình nó chạy.

Trong bản vẽ  Model có các Text nằm trong từng 1 vùng kín.

Trong Layout  đã tạo Mview

Mục đích của em là chui vào trong cửa sổ Mview đó, quét chọn các Text.

Từ mỗi Text quét chọn được tìm ra được tọa độ của nó

Từ Tọa độ đó tiến hành Boundary để tạo 1 Pline khép kín

Tìm được  Max và Min của Pline này => Tâm của hình chữ nhật bao quanh Pline đó

Từ đó cũng dễ dàng tìm ra được 4 đỉnh hình chữ nhật to hơn (em cho lớn hơn 1.5 lần) hình chữ nhật bao quanh Pline đó.

Tiến hành Zoom Window theo hình chữ nhật đó

Thoát khỏi cửa sổ Mview (Lệnh “PSpace”) và tiến hành in  

Sau khi in xong thì lại tiếp tục chui vào Mview (Lệnh MSpace) duyệt Text tiếp theo để Zoom và in.

Nhưng sao nó chỉ cho in thằng Text cuối cùng thôi các bác ạ

Mong các bác chỉ cho cách.

Chân thành cảm ơn

 

Link file mẫu: https://www.mediafire.com/?rm015me8nxvpb2f

 

 

(defun c:ITT ( / olmode  i ss item  temp  Tdo minp maxp  pt a2 b2 P1 P2 P3 P4     )
(vl-load-com)
(setvar "CMDECHO" 0)
(setq olmode (getvar "OSMODE"))
(setq i 0)
(setvar "tilemode" 0)
(setvar "OSMODE" 0)
(command "MSPACE")
(setq ss (ssget (list (cons 0 "TEXT"))))
(foreach item (acet-ss-to-list ss)
	(setq temp  (entget item))
	(setq   Tdo (TD:Text-Base item ))
	(vl-cmdf  "-boundary" Tdo "")
	(setq e (entlast))
	(vla-getboundingbox (vlax-ename->vla-object e) 'minp 'maxp)
	(setq minp (safearray-value minp))
	(setq maxp (safearray-value maxp))
	(setq pt (list (/ (+ (car minp) (car maxp)) 2) (/ (+ (cadr minp) (cadr maxp)) 2)))
	(setq a2 (* (/ (- (car maxp) (car minp)) 2) 1.5))
	(setq b2 (* (/ (- (cadr maxp) (cadr minp)) 2) 1.5))
	(setq	P1 (list (- (car pt) a2) (- (cadr pt) b2))
		P2 (list (- (car pt) a2) (+ (cadr pt) b2))
		P3 (list (+ (car pt) a2) (+ (cadr pt) b2))
		P4 (list (+ (car pt) a2) (- (cadr pt) b2))
	)
  	(entdel e)
	(command "._zoom" "_w" "_non" P2 "_non" P4)
	(command "PSPACE")
	(command "_plot" "" "" "" "" "" "" "")
  	(command "MSPACE")
)
(command "PSPACE")
(setvar "OSMODE" olmode)
(setvar "tilemode" 0)
(princ)
)


(defun TD:Text-Base (ent)
  (setq Ma10  (cdr (assoc 10 (entget ent))))
  (setq Ma11  (cdr (assoc 11 (entget ent))))
  (setq X11 (car Ma11))
  (setq Ma71  (cdr (assoc 71 (entget ent))))
  (setq Ma72  (cdr (assoc 72 (entget ent))))
  (if (or (and (= Ma71 0) (= Ma72 0) (= X11 0))
	  (and (= Ma71 0) (= Ma72 3) )
	  (and (= Ma71 0) (= Ma72 5) )
      )
    Ma10
    Ma11
   )
)

 

(vl-load-com)
(setvar "CMDECHO" 0)
(setq olmode (getvar "OSMODE"))
(setq i 0)
(setvar "tilemode" 0)
(setvar "OSMODE" 0)
(command "MSPACE")
(setq ss (ssget (list (cons 0 "TEXT"))))
(foreach item (acet-ss-to-list ss)
(setq temp  (entget item))
(setq   Tdo (TD:Text-Base item ))
(vl-cmdf  "-boundary" Tdo "")
(setq e (entlast))
(vla-getboundingbox (vlax-ename->vla-object e) 'minp 'maxp)
(setq minp (safearray-value minp))
(setq maxp (safearray-value maxp))
(setq pt (list (/ (+ (car minp) (car maxp)) 2) (/ (+ (cadr minp) (cadr maxp)) 2)))
(setq a2 (* (/ (- (car maxp) (car minp)) 2) 1.5))
(setq b2 (* (/ (- (cadr maxp) (cadr minp)) 2) 1.5))
(setq P1 (list (- (car pt) a2) (- (cadr pt) b2))
P2 (list (- (car pt) a2) (+ (cadr pt) b2))
P3 (list (+ (car pt) a2) (+ (cadr pt) b2))
P4 (list (+ (car pt) a2) (- (cadr pt) b2))
)
  (entdel e)
(command "._zoom" "_w" "_non" P2 "_non" P4)
(command "PSPACE")
(command "_plot" "" "" "" "" "" "" "")
  (command "MSPACE")
)
(command "PSPACE")
(setvar "OSMODE" olmode)
(setvar "tilemode" 0)
(princ)
)
 
 
(defun TD:Text-Base (ent)
  (setq Ma10  (cdr (assoc 10 (entget ent))))
  (setq Ma11  (cdr (assoc 11 (entget ent))))
  (setq X11 (car Ma11))
  (setq Ma71  (cdr (assoc 71 (entget ent))))
  (setq Ma72  (cdr (assoc 72 (entget ent))))
  (if (or (and (= Ma71 0) (= Ma72 0) (= X11 0))
 (and (= Ma71 0) (= Ma72 3) )
 (and (= Ma71 0) (= Ma72 5) )
      )
    Ma10
    Ma11
   )
)

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

Dạ không ạ. Em đã in cái đó rất ổn rồi anh ạ. 

Chỉ là thoát khỏi Mview và in layout bình thường thôi ạ.

Em đang băn khoăn là sao nó ko duyệt từng text và in từng Text.

Nó in có 1 cái cuối cùng và in lung tung. Em chưa tìm dc nguyên nhâ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

Tôi hiểu tại sao rồi, vì lệnh -boundary thì màn hình phải zoom toàn bộ thì nó mới tạo được pline.

Bạn sửa lại như sau:


(defun c:ITT ( / olmode  i ss item  temp  Tdo minp maxp  pt a2 b2 P1 P2 P3 P4 )
(vl-load-com)
(setvar "CMDECHO" 0)
(setq olmode (getvar "OSMODE"))
(setvar "OSMODE" 0)
(setq ss (ssget (list (cons 0 "TEXT"))))  
(foreach item (acet-ss-to-list ss)
        (setvar "tilemode" 1)
        (command "._zoom" "e")
(vl-cmdf "-boundary" (TD:Text-Base item) "")
(setq e (entlast))
(vla-getboundingbox (vlax-ename->vla-object e) 'minp 'maxp)
(setq minp (safearray-value minp))
(setq maxp (safearray-value maxp))
(setq pt (list (/ (+ (car minp) (car maxp)) 2) (/ (+ (cadr minp) (cadr maxp)) 2)))
(setq a2 (* (/ (- (car maxp) (car minp)) 2) 1.5))
(setq b2 (* (/ (- (cadr maxp) (cadr minp)) 2) 1.5))
(setq P1 (list (- (car pt) a2) (- (cadr pt) b2))
P2 (list (- (car pt) a2) (+ (cadr pt) b2))
P3 (list (+ (car pt) a2) (+ (cadr pt) b2))
P4 (list (+ (car pt) a2) (- (cadr pt) b2))
)
  (entdel e)
(command "._zoom" "_w" "_non" P2 "_non" P4)
(setvar "tilemode" 0)
(command "_plot" "" "" "" "" "" "" "")
)
(setvar "tilemode" 1)
(setvar "OSMODE" olmode)
(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

Tuyệt vời bác ạ. 

Em thêm đúng cái thằng như bác nói. Bài toán đã được giải quyết xong. 

Cảm ơn bác nhiều lắm.

(command "._zoom" "e")

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

×