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

[Nhờ chỉnh sửa] lisp xoay text theo pline

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

Nhờ các bác ở trường hợp này :

Đoạn tuyến PL dài và cong nhiều chỗ  dẫn đễn chỗ quay ngược chỗ quay suôi. Bác giải quyết hộ em với thì tốt quáhttp://www.cadviet.com/upfiles/3/70461_vd_1.dwg

Hề hề hề,

Hãy định nghĩa cho rõ thế nào là ngược và thế nào là xuôi........

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ạ! ý em là làm sao để mà chỉ để nó xoay theo chiều kim đồng hồ 1 góc <180 thôi. vì có những đoạn xoay > 180 thì khi mình in ấn nó bị ngược rất khó đọc ạ!

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ạ! ý em là làm sao để mà chỉ để nó xoay theo chiều kim đồng hồ 1 góc <180 thôi. vì có những đoạn xoay > 180 thì khi mình in ấn nó bị ngược rất khó đọc ạ!

Hề hề hề,

Vậy thì trên bản vẽ bạn gửi đâu có thấy chử nào ngược????

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

Em gửi file lên bác xem hộ em cái nhé!chứ em ko biết diễn tả nó thế nào!http://www.cadviet.com/upfiles/3/70461_vd_2.dwg

Hề hề hề,

Thử dùng cái này coi đã đúng ý chưa nhé. Thiệt tình vẫn chưa hiểu rõ ý đồ của bạn.

http://www.cadviet.com/upfiles/3/5194_xoaytext.lsp

  • 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

Hề hề hề,

Thử dùng cái này coi đã đúng ý chưa nhé. Thiệt tình vẫn chưa hiểu rõ ý đồ của bạn.

http://www.cadviet.com/upfiles/3/5194_xoaytext.lsp

Thanks bác nhiều vì đã nhiệt tình giúp em! Lisp này thì lỗi  error: bad argument type: numberp: nil bác ạ. Không thực hiện được lệnh.

Có khi em dùng cái lisp cũ trên của bác rồi thêm thủ công 1 vài chỗ nữa vậy!:((

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

Thanks bác nhiều vì đã nhiệt tình giúp em! Lisp này thì lỗi  error: bad argument type: numberp: nil bác ạ. Không thực hiện được lệnh.

Có khi em dùng cái lisp cũ trên của bác rồi thêm thủ công 1 vài chỗ nữa vậy! :((

Hề hề hề,

Lỗi này mình cũng chưa rõ tại sao. Trên bản vẽ của bạn có một số text không thể xoay được, lisp luôn báo lỗi không tìm được điểm gần nhất trên polyline của text. Tuy nhiên khi mình thay polyline bằng một polyline khác thì nó lại xoay ào ào mà chẳng hề báo lỗi. Mình đang nghi ngờ polyline của bạn có chứa các arc hoặc các đoạn cong phức tạp khác như elip nên việc xác đinh điểm gần nhất bị trục trặc. ba5n hãy thử thay thế polyline của bạn bằng một polyline đơn thuần gồm toàn các phân đọan thẳng xem sao nhé. Mình chưa rõ nguyên nhân nên chưa thể khắc phục được ngay, Vẫn còn đang mò mẫm tìm hiểu thêm.

Nếu thay bằng một polyline gồm chỉ có các phân đoạn thẳng mà lisp vẫn không chạy thì bạn hãy post cái bản vẽ đó lên để mình check thêm.

Chúc bạn vui.

  • 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

Hề hề hề,

Lỗi này mình cũng chưa rõ tại sao. Trên bản vẽ của bạn có một số text không thể xoay được, lisp luôn báo lỗi không tìm được điểm gần nhất trên polyline của text. Tuy nhiên khi mình thay polyline bằng một polyline khác thì nó lại xoay ào ào mà chẳng hề báo lỗi. Mình đang nghi ngờ polyline của bạn có chứa các arc hoặc các đoạn cong phức tạp khác như elip nên việc xác đinh điểm gần nhất bị trục trặc. ba5n hãy thử thay thế polyline của bạn bằng một polyline đơn thuần gồm toàn các phân đọan thẳng xem sao nhé. Mình chưa rõ nguyên nhân nên chưa thể khắc phục được ngay, Vẫn còn đang mò mẫm tìm hiểu thêm.

Nếu thay bằng một polyline gồm chỉ có các phân đoạn thẳng mà lisp vẫn không chạy thì bạn hãy post cái bản vẽ đó lên để mình check thêm.

Chúc bạn vui.

Lỗi xảy ra khi Text cần xoay nằm ngoài Pline.

Khắc phục : Bác Bình xoá kí tự T trong các dòng :

(vlax-curve-getclosestpointto obj (cdr (assoc 11 etxt)) T)

và (vlax-curve-getclosestpointto obj (cdr (assoc 10 etxt)) T)

là được.

 

(hình như y/cầu của thai11000 về góc của Text không đúng qui định về góc nghiêng của Text trong bản vẽ kĩ thuật)

(vlax-curve-getclosestpointto obj (cdr (assoc 11 etxt)) T)
                    (vlax-curve-getclosestpointto obj (cdr (assoc 10 etxt)) T)
(vlax-curve-getclosestpointto obj (cdr (assoc 11 etxt)) T)
                    (vlax-curve-getclosestpointto obj (cdr (assoc 10 etxt)) T)
  • 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

 

Lỗi xảy ra khi Text cần xoay nằm ngoài Pline.

Khắc phục : Bác Bình xoá kí tự T trong các dòng :

(vlax-curve-getclosestpointto obj (cdr (assoc 11 etxt)) T)

và (vlax-curve-getclosestpointto obj (cdr (assoc 10 etxt)) T)

là được.

 

(hình như y/cầu của thai11000 về góc của Text không đúng qui định về góc nghiêng của Text trong bản vẽ kĩ thuật)

(vlax-curve-getclosestpointto obj (cdr (assoc 11 etxt)) T)
                    (vlax-curve-getclosestpointto obj (cdr (assoc 10 etxt)) T)
(vlax-curve-getclosestpointto obj (cdr (assoc 11 etxt)) T)
                    (vlax-curve-getclosestpointto obj (cdr (assoc 10 etxt)) T)

Hề hề hề,

Cám ơn bác Gia_bach đã chỉ giáo, nhưng hình như lỗi không phải chỉ có vậy bác ạ. Tham số T là để tìm điểm gần nhất khi kéo dài polyline (tức là điểm đó nằm ngoài pline). do vậy sẽ không có giá trị parameter của điểm này. Tuy nhiên mình đã test kiểm tra trên bản vẽ của chủ thớt gửi thì ví dụ như hình gửi dưới đây, điểm 2.37 (khoanh màu vàng) rõ ràng là nằm trong polyline màu đỏ, nhưng vẫn bị lỗi không tìm được diểm gần nhất. Nếu mình thay đường polylone màu đỏ bằng đường màu vàng thì nó lại xoay như chảo chớp mặc dầu vẫn sử dụng cùng một lisp bác ạ.

Mình đả test khá kỹ và trên bản vẽ của chủ thớt không chỉ có một điểm bất thường này mà còn khá nhiều điểm khác. Chưa hiểu rõ nguyên nhân nên mình chưa thể khắc phục, nhờ các bác test lại và nếu có thể chỉ rõ lỗi của lisp để mình rút kinh nghiệm.

5194_diemla.jpg

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

Hề hề hề,

Lỗi này mình cũng chưa rõ tại sao. Trên bản vẽ của bạn có một số text không thể xoay được, lisp luôn báo lỗi không tìm được điểm gần nhất trên polyline của text. Tuy nhiên khi mình thay polyline bằng một polyline khác thì nó lại xoay ào ào mà chẳng hề báo lỗi. Mình đang nghi ngờ polyline của bạn có chứa các arc hoặc các đoạn cong phức tạp khác như elip nên việc xác đinh điểm gần nhất bị trục trặc. ba5n hãy thử thay thế polyline của bạn bằng một polyline đơn thuần gồm toàn các phân đọan thẳng xem sao nhé. Mình chưa rõ nguyên nhân nên chưa thể khắc phục được ngay, Vẫn còn đang mò mẫm tìm hiểu thêm.

Nếu thay bằng một polyline gồm chỉ có các phân đoạn thẳng mà lisp vẫn không chạy thì bạn hãy post cái bản vẽ đó lên để mình check thêm.

Chúc bạn vui.

Chuẩn bác Bình ạ! PL của em là liền của đường cong và các đoạn cánh tuyến. Nhưng em nối hết chúng thành 1 pl thì em nghĩ nó cũng sẽ hiểu tương tự thôi. chứ text thì em không biết nó có lỗi hay có gì bất thường không nữa!

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

 

Lỗi xảy ra khi Text cần xoay nằm ngoài Pline.

Khắc phục : Bác Bình xoá kí tự T trong các dòng :

(vlax-curve-getclosestpointto obj (cdr (assoc 11 etxt)) T)

và (vlax-curve-getclosestpointto obj (cdr (assoc 10 etxt)) T)

là được.

 

(hình như y/cầu của thai11000 về góc của Text không đúng qui định về góc nghiêng của Text trong bản vẽ kĩ thuật)

(vlax-curve-getclosestpointto obj (cdr (assoc 11 etxt)) T)
                    (vlax-curve-getclosestpointto obj (cdr (assoc 10 etxt)) T)
(vlax-curve-getclosestpointto obj (cdr (assoc 11 etxt)) T)
                    (vlax-curve-getclosestpointto obj (cdr (assoc 10 etxt)) T)

Bản vẽ của em là bản bình đồ bác ạ. Bình thường khi phun text lên thì tất cả đều quay theo hướng Bắc theo đúng quy định. Nhưng mà khi em in bình đồ thành nhiều đoạn thì phải xoay để cho nó song song với tuyến cho dọc được cao độ 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

Hề hề hề,

Cám ơn bác Gia_bach đã chỉ giáo, nhưng hình như lỗi không phải chỉ có vậy bác ạ. Tham số T là để tìm điểm gần nhất khi kéo dài polyline (tức là điểm đó nằm ngoài pline). do vậy sẽ không có giá trị parameter của điểm này. Tuy nhiên mình đã test kiểm tra trên bản vẽ của chủ thớt gửi thì ví dụ như hình gửi dưới đây, điểm 2.37 (khoanh màu vàng) rõ ràng là nằm trong polyline màu đỏ, nhưng vẫn bị lỗi không tìm được diểm gần nhất. Nếu mình thay đường polylone màu đỏ bằng đường màu vàng thì nó lại xoay như chảo chớp mặc dầu vẫn sử dụng cùng một lisp bác ạ.

Mình đả test khá kỹ và trên bản vẽ của chủ thớt không chỉ có một điểm bất thường này mà còn khá nhiều điểm khác. Chưa hiểu rõ nguyên nhân nên mình chưa thể khắc phục, nhờ các bác test lại và nếu có thể chỉ rõ lỗi của lisp để mình rút kinh nghiệm.

................

Sorry bác Bình.

Đúng là có những Text mặc dù nằm trong Pline nhưng vẫn bị lỗi.

Không chắc chắn lắm, nhưng nhiều khả năng là do Pline trong file Cad này là 2DPolyline nên có những lỗi bất thường (CadViet cũng đã có nhiều bài viết về lỗi do các Pline version cũ).

Tôi thử dùng lệnh Convert để chuyển qua Polyline thì Lisp của bác chạy êm cho toàn bộ 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

Sorry bác Bình.

Đúng là có những Text mặc dù nằm trong Pline nhưng vẫn bị lỗi.

Không chắc chắn lắm, nhưng nhiều khả năng là do Pline trong file Cad này là 2DPolyline nên có những lỗi bất thường (CadViet cũng đã có nhiều bài viết về lỗi do các Pline version cũ).

Tôi thử dùng lệnh Convert để chuyển qua Polyline thì Lisp của bác chạy êm cho toàn bộ TEXT.

Cảm ơn bác Gia_Bach! Về cơ bản vấn đề của em đã được giải quyết ở phát hiện của bác!

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

Lần đầu lên diễn đàn post bài hỏi anh em, còn nhiều bỡ ngỡ mong anh em thông cảm.

Mình có tìm kiếm trong 4rom các lisp " xoay text theo đường PL". Nhưng dowload về load lên đều không dùng được ( không nhận lệnh). A e nào co cho mình xin. Cam on ạ.

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

Lần đầu lên diễn đàn post bài hỏi anh em, còn nhiều bỡ ngỡ mong anh em thông cảm.

Mình có tìm kiếm trong 4rom các lisp " xoay text theo đường PL". Nhưng dowload về load lên đều không dùng được ( không nhận lệnh). A e nào co cho mình xin. Cam on ạ.

Hề hề hề,

Không rõ bạn đã download ra sao nhưng mình thử dowload từ diễn đàn vẫn thấy ngon lành và lisp vẫn chạy phe phé mà. Bạn hãy thử lại xem sao. Nếu không được thì cho địa chỉ mail mình sẽ gửi cho.

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

Hề hề hề,

Không rõ bạn đã download ra sao nhưng mình thử dowload từ diễn đàn vẫn thấy ngon lành và lisp vẫn chạy phe phé mà. Bạn hãy thử lại xem sao. Nếu không được thì cho địa chỉ mail mình sẽ gửi cho.

Bác Bình ơi sau khi xoay các text của mình bị lộn ngược thế này, bác có thể sửa lại dùm được ko, Lisp này có thêm tính năng như chọn được nhiều Text sau đó chọn được nhiều line và xoay song song theo Line đó nữa thì hay, cảm ơn bác

http://www.cadviet.com/upfiles/6/154521_xoay_text.dwg

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 Bình ơi sau khi xoay các text của mình bị lộn ngược thế này, bác có thể sửa lại dùm được ko, Lisp này có thêm tính năng như chọn được nhiều Text sau đó chọn được nhiều line và xoay song song theo Line đó nữa thì hay, cảm ơn bác

http://www.cadviet.com/upfiles/6/154521_xoay_text.dwg

Hề hề hề,

Đơn giản nhất là bạn tạo lại polyline theo hướng ngược lại với hướng của polyline ban đầu là OK. Vì hướng xoay của text phụ thuộc vào hướng của polyline và không rõ các polyline  và các text của bạn ra sao nên khó có thể sửa theo ý bạn được.

  • 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

Hề hề hề,

Đơn giản nhất là bạn tạo lại polyline theo hướng ngược lại với hướng của polyline ban đầu là OK. Vì hướng xoay của text phụ thuộc vào hướng của polyline và không rõ các polyline  và các text của bạn ra sao nên khó có thể sửa theo ý bạn được.

Hi bạn BÌnh (mode lisp),

Bạn có thể thêm vào Lisp lựa chọn là quay Text theo chiều kim đồng hồ hay ngược chiều kim đồng hồ là giải quyết được bài toán này thôi mà, giúp ae bài toán này với nhé

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 thử cái này nhé:

1. Chép hàm sau vào trong lisp

(defun FixTextAngle  (ang)
  (if (and (> ang (* 0.5 pi)) (<= ang (* 1.5 pi)))
   (+ ang pi)
   ang))

2. Ở gần cuối lisp thay (cons 50 goc) thành (cons 50 (FixTextAngle goc))

​3. Có gì chưa ổn phản hồi tiếp nhé!

  • 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

Cảm ơn quocmanh,

Mình tìm được lisp đáp ứng đáp ứng được yêu cầu, nhờ các bạn bổ sung thêm tính năng là text sau khi xoay Text sẽ cách Line một khoảng cách nhất định, cảm ơn các bạn

 

http://www.cadviet.com/upfiles/6/154521_copy.lsp

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 thử cái này nhé:

1. Chép hàm sau vào trong lisp

(defun FixTextAngle  (ang)

  (if (and (> ang (* 0.5 pi)) (<= ang (* 1.5 pi)))

   (+ ang pi)

   ang))

2. Ở gần cuối lisp thay (cons 50 goc) thành (cons 50 (FixTextAngle goc))

​3. Có gì chưa ổn phản hồi tiếp nhé!

cảm ơn bạn, giúp mình thêm tính năng này với nhé quocmanh

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

Khoảng nhất định phải nhập vào à?

(Nếu cho text canh lề "Bottom Center" và điểm này nằm giữa đoạn thẳng thì sao?)

P/s: Mà nếu cách Line 1 khoảng nhất định thì khi quét chọn 1 lúc nhiều Text thì các text sẽ bị chồng lên nhau.

  • 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

Khoảng nhất định phải nhập vào à?

(Nếu cho text canh lề "Bottom Center" và điểm này nằm giữa đoạn thẳng thì sao?)

P/s: Mà nếu cách Line 1 khoảng nhất định thì khi quét chọn 1 lúc nhiều Text thì các text sẽ bị chồng lên nhau.

cảm ơn bạn đã quan tâm nhé

- Khoảng cách này mặc định trong lisp luôn bạn, khỏi mất công phải nhập khoảng cách này, nhìn sao thấy đẹp là ok rồi

- Mình ko cần căn lề text bạn, chỉ cần các Text cách đường Line với khoảng cách đều mặc định là được 

Lisp này có thêm tính năng chọn liên tục (multi) nữa là quá hay, chọn Line 1 sau đó chọn Text 1; chọn Line 2 sau đó chọn Text 2.......(ko biết yêu cầu của mình quá cao ko, nhưng mong muốn của con người là vô hạn, hay đòi hỏi, hihi)

http://www.cadviet.com/upfiles/6/154521_xoay_cach_deu_text_3.dwg

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

Viết lại cho bạn:

(defun c:tt (/ FixTextAngle a ang els ent h mid p pte pts spt txt)

(defun FixTextAngle (ang)

(if (and (> ang (* 0.5 pi)) (<= ang (* 1.5 pi)))

(+ ang pi)

ang))

(while (and (setq txt (car (entsel "\nPick Text")))

(wcmatch (cdr (assoc 0 (entget txt))) "TEXT")

(setq ent (entsel "\nPick LINE, PLINE: "))

(setq els (entget (car ent)))

(wcmatch (cdr (assoc 0 els)) "*LINE"))

(setq spt (osnap (cadr ent) "NEA")

mid (osnap (cadr ent) "MID"))

(if (< (car mid) (car spt))

(setq pts mid

pte spt)

(setq pts spt

pte mid))

(setq ang (FixTextAngle (angle pts pte))

els (entget txt))

(setq h (cdr (assoc 40 els))

p (cons 10 (polar spt (+ ang (* 0.5 pi)) (* 0.5 h)))

a (cons 50 ang))

(setq els (subst a (assoc 50 els) els))

(entmod (subst p (assoc 10 els) els)))

(princ))

P/s: Chọn Text trước, Line or Pline sau:

  • 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

×