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

nhờ cao thủ sửa lisp

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

 E chào các bác, e có tải 1 lisp của diễn đàn về, lisp căn chỉnh text vào chính giữa ô của 1 hình chữ nhat. bjo em muốn làm k chỉ với text mà cả mtext nên muốn nhờ các bác chỉnh giúp lại cho e cái code để có thể căn cả cho text và mtext vào chính giữa ô của 1 hình chữ nhật với ạ. E k giỏi khoản này. Thanks các bác nhiều!

Đây là code cũ ạ:

 

;move text 2 center rectang
(defun c:cg()

  (setvar "cmdecho" 0)
  (setq OS (getvar "OSMODE"))
  (setvar "OSMODE" 32)

  (setq P1 (getpoint "\nPick a corner of the rectangle: "))
  (setq P2 (getcorner P1 "\nPick opposite corner of the rectangle: "))
  (setq A (angle P1 P2))
  (setq D (distance P1 P2))
  (setq P3 (polar P1 A (/ D 2.0)))

(setq ST (entsel "\nSelect *text to center inside rectangle: "))

  (while
    (= ST nil)
     (progn
       (prompt "\nText was not selected...")
       (setq ST (entsel "\nSelect *text to center inside rectangle: "))
     )
  )

  (command "justifytext" ST "" "MC")
  (setq TMC (cdr (assoc 11 (entget (car ST)))))
  (command "move" ST "" TMC P3)

  (setvar "OSMODE" OS)
  (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

- hi đôi lúc dùng mtext có cái hay của nó ^^, sửa tí theo mong mún của bạn

(defun c:cg(/ info os p1 p2 p3 tmc d st)

  (setvar "cmdecho" 0)
  (setq OS (getvar "OSMODE"))
  (setvar "OSMODE" 32)

  (setq P1 (getpoint "\nPick a corner of the rectangle: "))
  (setq P2 (getcorner P1 "\nPick opposite corner of the rectangle: "))
  (setq A (angle P1 P2))
  (setq D (distance P1 P2))
  (setq P3 (polar P1 A (/ D 2.0)))

(setq ST (entsel "\nSelect *text to center inside rectangle: "))

  (while
    (= ST nil)
     (progn
       (prompt "\nText was not selected...")
       (setq ST (entsel "\nSelect *text to center inside rectangle: "))
     )
  )
  (setq info (entget (car ST)))
  (command "justifytext" ST "" "MC")
  (if (= (cdr (assoc 0 info)) "TEXT")
  (setq TMC (cdr (assoc 11 info)))
   )
  (if (= (cdr (assoc 0 info)) "MTEXT")
  (setq TMC (cdr (assoc 10 info)))
  )
  (command "move" ST "" TMC P3)

  (setvar "OSMODE" OS)
(setvar "cmdecho" 1)
  (princ)

)

-p/s: mặc dù nhoc chưa dùng mtext bao giờ :P

  • 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

Hi hi, lại chậm hơn nhóc rồi, thôi đã làm thì cứ post

(defun c:cg( / os p1 p2 a d p3 st ent loai tmc )
  (prompt "\nEdit_By_Trinhhoanghieu090_Source_Code_Of_CadvietLisp")
  (setvar "cmdecho" 0)
  (setq OS (getvar "OSMODE"))
  (setvar "OSMODE" 32)

  (setq P1 (getpoint "\nPick a corner of the rectangle: "))
  (setq P2 (getcorner P1 "\nPick opposite corner of the rectangle: "))
  (setq A (angle P1 P2))
  (setq D (distance P1 P2))
  (setq P3 (polar P1 A (/ D 2.0)))

(setq ST (entsel "\nSelect *text to center inside rectangle: "))

  (while
    (= ST nil)
     (progn
       (prompt "\nText was not selected...")
       (setq ST (entsel "\nSelect *text to center inside rectangle: "))
     )
  )
  (Setq ent (entget (car ST))
		loai (cdr(assoc 0 ent))
  )
  (cond	
		((= loai "TEXT")
		 (command "justifytext" ST "" "MC")
		 (setq TMC (cdr (assoc 11 ent)))
		)
		((= loai "MTEXT")
		 (setq	ST (cdr(car(entmod (subst '(71 . 5) (assoc 71 ent) ent))))
				TMC (cdr (assoc 10 ent))
		  )
		)
	)
  (command "move" ST "" TMC P3)

  (setvar "OSMODE" OS)
  (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

Theo mình thấy thì yêu cầu của bài là canh điểm chính giữa của MTEXT chứ không phải căn điểm chèn giữa của MTEXT

-> Nếu đúng như vậy 2 lisp của bạn nhoc và trinhhoanghieu đều chưa đạt yêu cầu.

Xem ra nó không phải 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

Bác Tue ơi em chỉ giúp chủ thớt cái phần "không chỉ với text mà cả với mtext" thôi bác ạ. :D.

 

Mình đang nói tới MTEXT đó. Điểm chính giữa MTEXT có Trường hợp khác với điểm chèn giữa của MTEXT 

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 đang nói tới MTEXT đó. Điểm chính giữa MTEXT có Trường hợp khác với điểm chèn giữa của MTEXT 

Hì hì, bác có thể nói rõ hơn được không? để lần sau có gặp em còn biết.mà tránh sai sót :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
 

- ý anh Tue nói nhoc thấy cũng hay ^^, chưa pit nhoc hiểu đúng ko nhoc cũng mạo mụi sửa lại thử, giờ mình sẽ ko quan tam điểm canh lề của text hay mtext có giữa hay ko mà sẽ kím tọa độ điểm giữa của 2 loại đó, giữ nguyên justify của đối tượng, mượn tí của lee-mac ^^






(defun c:cg(/ os p1 p2 p3 tmc d st lstp pdau pcuoi pgiua obj)
(vl-load-com)
(setvar "cmdecho" 0)
(setq OS (getvar "OSMODE"))
(setvar "OSMODE" 32)

(setq P1 (getpoint "\nPick a corner of the rectangle: "))
(setq P2 (getcorner P1 "\nPick opposite corner of the rectangle: "))
(setq A (angle P1 P2))
(setq D (distance P1 P2))
(setq P3 (polar P1 A (/ D 2.0)))

(setq ST (entsel "\nSelect *text to center inside rectangle: "))

(while
(= ST nil)
(progn
(prompt "\nText was not selected...")
(setq ST (entsel "\nSelect *text to center inside rectangle: "))
)
)
(if ST
(progn
(setq obj (vlax-ename->vla-object (car st)))
(setq lstp (vla-getBoundingBox obj 'minp 'maxp))
(setq pdau (vlax-safearray->list minp))
(setq pcuoi (vlax-safearray->list maxp))
(setq pgiua (polar pdau (angle pdau pcuoi) (* (distance pdau pcuoi) 0.5)))
(LM:TranslateByMatrix obj (trans pgiua 1 0) (trans P3 1 0))
)
)


(setvar "OSMODE" OS)
(setvar "cmdecho" 1)
(princ)

)
;//////////////////
(defun LM:TranslateByMatrix ( target p1 p2 )

(LM:ApplyMatrixTransformation target
(list
(list 1. 0. 0.)
(list 0. 1. 0.)
(list 0. 0. 1.)
)
(mapcar '- p2 p1)
)
)
;/////////////////////////////
(defun LM:ApplyMatrixTransformation ( target matrix vector ) (vl-load-com)
(cond
( (eq 'VLA-OBJECT (type target))

(vla-TransformBy target
(vlax-tMatrix
(append (mapcar '(lambda ( x v ) (append x (list v))) matrix vector)
'((0. 0. 0. 1.))
)
)
)
)
( (listp target)

(mapcar
(function
(lambda ( point ) (mapcar '+ (mxv matrix point) vector))
)
target
)
)
)
)
;////////////
(defun mxv ( m v )
(mapcar '(lambda ( r ) (apply '+ (mapcar '* r v))) 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

Dạ, ý của em là muốn căn chữ (text, mtext) vào chính giữa của 1 ô hình chữ nhật các bác ạ ( căn đều trên, dưới, trái, phải ấy ạ). cả chữ và ô đều có hết rồi, chữ thì e mới đặt ở vị trí tương đối trong ô thôi. Tại e phải làm nhiều với bảng thống kê nên muốn căn cho nó đẹp thôi. Cái lisp cũ e gửi chỉ làm đc với text, k đc với mtext (gặp mtext thì mtext nó biến mất tiêu đâu luôn). Các bác cứ thử cái lisp cũ của e trước đã thì sẽ biết ngay đc mong muốn của e. Có nhiều chỗ em k muốn explode mtext vì bị phá khối nên phải căn chỉnh lại, mất thời gian hơn. Mong đc các bác giúp đỡ!

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 cứ thử tải cả 3 lsp trên test thử xem, cái nào vừa ý thì dùng ^^, lsp #3 nhoc viết với lsp #4 bạn Hieu thì giống nhau thôi, chì khác nhau về giải thuật, còn lsp cuối #10 là nhoc mới sửa lại ko phá mất canh lề cũ của text

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ạ, ý của em là muốn căn chữ (text, mtext) vào chính giữa của 1 ô hình chữ nhật các bác ạ ( căn đều trên, dưới, trái, phải ấy ạ). cả chữ và ô đều có hết rồi, chữ thì e mới đặt ở vị trí tương đối trong ô thôi. Tại e phải làm nhiều với bảng thống kê nên muốn căn cho nó đẹp thôi. Cái lisp cũ e gửi chỉ làm đc với text, k đc với mtext (gặp mtext thì mtext nó biến mất tiêu đâu luôn). Các bác cứ thử cái lisp cũ của e trước đã thì sẽ biết ngay đc mong muốn của e. Có nhiều chỗ em k muốn explode mtext vì bị phá khối nên phải căn chỉnh lại, mất thời gian hơn. Mong đc các bác giúp đỡ!

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

vâng e đã tải tất cả các lisp của các bác và đều đã thành công, đúng như ý em ạ. E xin cảm ơn tất cả các bác đã dành thời gian cho em. Chúc các bác sức khỏe! :) <3

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


×