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

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

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

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.

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

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.

  • Vote tăng 2

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

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

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

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


×