Đến nội dung


Hình ảnh
- - - - -

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


  • Please log in to reply
4 replies to this topic

#1 thanhduan2407

thanhduan2407

    biết lệnh adcenter

  • Advance Member
  • PipPipPipPipPipPipPip
  • 995 Bài viết
Điểm đánh giá: 223 (khá)

Đã gửi 10 May 2014 - 02:08 AM

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

  • 0



Tôi là con kiến bò trên sa mạc kiến thức bao la. Biển học thật rộng lớn







#2 Tot77

Tot77

    biết lệnh adcenter

  • Members
  • PipPipPipPipPipPipPip
  • 990 Bài viết
Điểm đánh giá: 498 (tốt)

Đã gửi 10 May 2014 - 10:15 AM

Bạn xem lại lệnh -plot với 1 đống "" có thể gây ra lỗi.


  • 0

#3 thanhduan2407

thanhduan2407

    biết lệnh adcenter

  • Advance Member
  • PipPipPipPipPipPipPip
  • 995 Bài viết
Điểm đánh giá: 223 (khá)

Đã gửi 10 May 2014 - 10:18 AM

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


  • 0



Tôi là con kiến bò trên sa mạc kiến thức bao la. Biển học thật rộng lớn







#4 Tot77

Tot77

    biết lệnh adcenter

  • Members
  • PipPipPipPipPipPipPip
  • 990 Bài viết
Điểm đánh giá: 498 (tốt)

Đã gửi 10 May 2014 - 11:55 AM

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


  • 1

#5 thanhduan2407

thanhduan2407

    biết lệnh adcenter

  • Advance Member
  • PipPipPipPipPipPipPip
  • 995 Bài viết
Điểm đánh giá: 223 (khá)

Đã gửi 10 May 2014 - 12:00 PM

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


  • 0



Tôi là con kiến bò trên sa mạc kiến thức bao la. Biển học thật rộng lớn