Đến nội dung


Hình ảnh
- - - - -

[Yêu cầu] Nhờ viết Lisp Move Text vuông góc với Pline hoặc Line


  • Please log in to reply
10 replies to this topic

#1 thanhduan2407

thanhduan2407

    biết lệnh adcenter

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

Đã gửi 18 May 2014 - 12:15 PM

Do thời gian hơi gấp nên những công việc nhỏ lẻ này em phải làm thủ công move từng Text đến Pline, Line. Rất mất thời gian. Nếu ngồi nghiên cứu viết thì sẽ mất tgian để em làm các công đoạn khác. Rất mong các bác có thể giúp em viết Code chương trình cho việc này được không ạ? Cảm ơn các bác rất nhiều. Thao tác: Chọn Pline (hoặc Line) Quét chọn các text cần move vuông góc đến Pline (line) đó. Chân thành cảm ơn các bác nhiều. P/s: Điểm chuẩn của Text dạng Center hay dạng gì cũng được, em sẽ đưa nó về dạng đó. Đỡ cho việc xác định điểm chuẩn của Text.
  • 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 18 May 2014 - 01:58 PM

Nếu chỉ move text tới "dính" vào pline hoặc line mà không cần xoay text thì dùng cái dưới đây.

Ở đây text là left, và không kéo dài line hoặc pline, nếu bạn muốn kéo dài thì tìm chỗ nào có chữ "nil" đổi thành "t".

(defun c:tmp()
  (setq obj (vlax-ename->vla-object (car (entsel "\nChon Line hoac Polyline:"))))
  (prompt "\nChon text:")
  (setq ss (ssget '((0 . "TEXT"))))
  (mapcar '(lambda(x) (entmod (subst
(cons 10 (vlax-curve-getClosestPointTo obj (cdr (assoc 10 (entget x))) nil))
(assoc 10 (entget x)) (entget x))))  (acet-ss-to-list ss))
)

 

Chỗ nào có chữ <span> thì bạn xóa đi dùm, gửi theo kiểu này hay bị ba cái vụ đó.

Ở đây tôi hiểu "move vuông góc" tức là dời text theo hướng vuông góc với pline, chứ không phải xoay text vuông góc với pline.


  • 2

#3 thanhduan2407

thanhduan2407

    biết lệnh adcenter

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

Đã gửi 18 May 2014 - 04:09 PM

Nếu chỉ move text tới "dính" vào pline hoặc line mà không cần xoay text thì dùng cái dưới đây.

Ở đây text là left, và không kéo dài line hoặc pline, nếu bạn muốn kéo dài thì tìm chỗ nào có chữ "nil" đổi thành "t".

(defun c:tmp()
  (setq obj (vlax-ename->vla-object (car (entsel "\nChon Line hoac Polyline:"))))
  (prompt "\nChon text:")
  (setq ss (ssget '((0 . "TEXT"))))
  (mapcar '(lambda(x) (entmod (subst
(cons 10 (vlax-curve-getClosestPointTo obj (cdr (assoc 10 (entget x))) nil))
(assoc 10 (entget x)) (entget x))))  (acet-ss-to-list ss))
)

 

Chỗ nào có chữ <span> thì bạn xóa đi dùm, gửi theo kiểu này hay bị ba cái vụ đó.

Ở đây tôi hiểu "move vuông góc" tức là dời text theo hướng vuông góc với pline, chứ không phải xoay text vuông góc với pline.

Tuyệt vời bác Tot77 ạ. Bác làm em càng ngày càng thích Autolisp hơn rồi đấy ạ. Lisp chạy tuyệt vời. Code ngắn mà hiệu quả. Một lần nữa cảm ơn bác nhiều


  • 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 ketxu

ketxu

    Copier - Paster - Editor

  • Moderator
  • PipPipPipPipPipPipPip
  • 5678 Bài viết
Điểm đánh giá: 2605 (tuyệt vời)

Đã gửi 19 May 2014 - 09:12 AM

Tại sao a Duân lại k thể làm cái lisp này nhỉ???


  • 0

Thành viên nhóm CadMagic.
Mời bạn ghé thăm facebook nhóm - Page viết lisp theo yêu cầu  :
CAD MAGIC


#5 nguyentan1991

nguyentan1991

    biết vẽ pline

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

Đã gửi 19 May 2014 - 10:43 PM

sao em dùng lisp này, mà khi lisp bắt chọn pl. xong rồi ấn gì ạ


  • 0

#6 trangnhung

trangnhung

    biết vẽ pline

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

Đã gửi 29 May 2014 - 10:35 AM

nều các text không vuông góc với pline, line thì bác chỉnh cho nó vuông góc với pline, line được không. Chân thành cảm ơn


  • 0

#7 Tot77

Tot77

    biết lệnh adcenter

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

Đã gửi 29 May 2014 - 05:14 PM

Vừa move vừa xoay thì dùng cái này.

(defun c:tmp (/ obj tm tm1)
  (setq obj (vlax-ename->vla-object (car (entsel "\nChon Line hoac Polyline:"))))
  (prompt "\nChon text:")
  (mapcar '(lambda (x)
    (entmod (subst (cons 10 (setq tm (vlax-curve-getClosestPointTo obj (cdr (assoc 10 (entget x))) nil)))
        (setq tm1 (assoc 10 (entget x))) (entget x)))
    (entmod (subst (cons 50 (angle tm (cdr tm1))) (assoc 50 (entget x)) (entget x))))
 (acet-ss-to-list (ssget '((0 . "TEXT"))))
  )
)
 

  • 1

#8 trangnhung

trangnhung

    biết vẽ pline

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

Đã gửi 05 June 2014 - 09:49 AM

Cảm ơn bác tot77 nha !


  • 0

#9 batitus

batitus

    Chưa sử dụng CAD

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

Đã gửi 06 November 2014 - 09:26 AM

bác xem lại giúp e với. e load về rồi dùng lênh tmp nhưng text không vuông góc pline !
  • 0

#10 Tot77

Tot77

    biết lệnh adcenter

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

Đã gửi 06 November 2014 - 10:27 AM

Bạn dưa file lên để test.


  • 1

#11 batitus

batitus

    Chưa sử dụng CAD

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

Đã gửi 06 November 2014 - 01:25 PM

đc rùi bác ạ, sáng nay ko hiểu sao nó lại ko vuông góc ! Cảm ơn bác nha
  • 0