Đến nội dung


Hình ảnh
- - - - -

nhờ cao thủ sửa lisp


  • Please log in to reply
14 replies to this topic

#1 minhtanx2

minhtanx2

    biết lệnh stretch

  • Members
  • PipPipPip
  • 169 Bài viết
Điểm đánh giá: 3 (bình thường)

Đã gửi 02 February 2015 - 08:16 PM

 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)

)


  • 0

Khi bạn tán tỉnh một cô gái đẹp, một giờ đồng hồ chẳng qua như một giây. Khi bạn ngồi trên một hòn than nóng bỏng, một giây như thể một giờ. Đó chính là tính tương đối. (Albert Einstein)


#2 trinhhoanghieu090

trinhhoanghieu090

    Edu level: li8

  • Members
  • PipPipPipPipPip
  • 309 Bài viết
Điểm đánh giá: 29 (tàm tạm)

Đã gửi 02 February 2015 - 08:46 PM

Bạn có thể dùng lệnh explode để chuyển từ mtext về text trước khi dùng lisp mà
  • 0

#3 nhoclangbat

nhoclangbat

    Edu level: li10

  • Members
  • PipPipPipPipPipPipPip
  • 1409 Bài viết
Điểm đánh giá: 379 (khá)

Đã gửi 02 February 2015 - 10:11 PM

- 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


  • 1
"...................][)e\/i][_ /\/\@Y CrY....................."

(defun THỔ_DÂN_HỌC_CAD (xxxx) ...) ^_^








#4 trinhhoanghieu090

trinhhoanghieu090

    Edu level: li8

  • Members
  • PipPipPipPipPip
  • 309 Bài viết
Điểm đánh giá: 29 (tàm tạm)

Đã gửi 02 February 2015 - 10:25 PM

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

  • 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 03 February 2015 - 01:06 AM

Hai bạn này chăm ghê. ^^


  • 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







#6 Tue_NV

Tue_NV

    KS Võ Quang Tuệ

  • Moderator
  • PipPipPipPipPipPipPip
  • 4296 Bài viết
Điểm đánh giá: 3805 (đỉnh cao)

Đã gửi 03 February 2015 - 07:28 AM

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ễ......


  • 0

#7 trinhhoanghieu090

trinhhoanghieu090

    Edu level: li8

  • Members
  • PipPipPipPipPip
  • 309 Bài viết
Điểm đánh giá: 29 (tàm tạm)

Đã gửi 03 February 2015 - 07:57 AM

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.
  • 0

#8 Tue_NV

Tue_NV

    KS Võ Quang Tuệ

  • Moderator
  • PipPipPipPipPipPipPip
  • 4296 Bài viết
Điểm đánh giá: 3805 (đỉnh cao)

Đã gửi 03 February 2015 - 08:23 AM

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 


  • 0

#9 trinhhoanghieu090

trinhhoanghieu090

    Edu level: li8

  • Members
  • PipPipPipPipPip
  • 309 Bài viết
Điểm đánh giá: 29 (tàm tạm)

Đã gửi 03 February 2015 - 09:04 AM

 

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


  • 0

#10 nhoclangbat

nhoclangbat

    Edu level: li10

  • Members
  • PipPipPipPipPipPipPip
  • 1409 Bài viết
Điểm đánh giá: 379 (khá)

Đã gửi 03 February 2015 - 09:50 AM

 

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

  • 0
"...................][)e\/i][_ /\/\@Y CrY....................."

(defun THỔ_DÂN_HỌC_CAD (xxxx) ...) ^_^








#11 minhtanx2

minhtanx2

    biết lệnh stretch

  • Members
  • PipPipPip
  • 169 Bài viết
Điểm đánh giá: 3 (bình thường)

Đã gửi 03 February 2015 - 12:00 PM

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 đỡ!


  • 0

Khi bạn tán tỉnh một cô gái đẹp, một giờ đồng hồ chẳng qua như một giây. Khi bạn ngồi trên một hòn than nóng bỏng, một giây như thể một giờ. Đó chính là tính tương đối. (Albert Einstein)


#12 nhoclangbat

nhoclangbat

    Edu level: li10

  • Members
  • PipPipPipPipPipPipPip
  • 1409 Bài viết
Điểm đánh giá: 379 (khá)

Đã gửi 03 February 2015 - 12:03 PM

- 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


  • 0
"...................][)e\/i][_ /\/\@Y CrY....................."

(defun THỔ_DÂN_HỌC_CAD (xxxx) ...) ^_^








#13 trinhhoanghieu090

trinhhoanghieu090

    Edu level: li8

  • Members
  • PipPipPipPipPip
  • 309 Bài viết
Điểm đánh giá: 29 (tàm tạm)

Đã gửi 03 February 2015 - 12:03 PM

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 đỡ!


  • 0

#14 trinhhoanghieu090

trinhhoanghieu090

    Edu level: li8

  • Members
  • PipPipPipPipPip
  • 309 Bài viết
Điểm đánh giá: 29 (tàm tạm)

Đã gửi 03 February 2015 - 12:07 PM

Hi, nếu chỉ để "cho nó đẹp thôi" thì bạn down 1 trong 2 cái lisp đầu tiên về dùng là được rồi. Nó giống hệt cái lisp gốc chỉ bổ sung cho mtext, chúc bạn thành công
  • 1

#15 minhtanx2

minhtanx2

    biết lệnh stretch

  • Members
  • PipPipPip
  • 169 Bài viết
Điểm đánh giá: 3 (bình thường)

Đã gửi 03 February 2015 - 12:57 PM

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


  • 0

Khi bạn tán tỉnh một cô gái đẹp, một giờ đồng hồ chẳng qua như một giây. Khi bạn ngồi trên một hòn than nóng bỏng, một giây như thể một giờ. Đó chính là tính tương đối. (Albert Einstein)