Đến nội dung


Hình ảnh

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


  • Please log in to reply
76 replies to this topic

#21 phamthanhbinh

phamthanhbinh

    biết lệnh adcenter

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

Đã gửi 27 February 2013 - 09:06 AM

Còn 1 vấn đề với các text căn lề trái thì xoay chưa đúng (căn lề giữa thì ok).

Bác xem giúp em nhé.

Hề hề hề,

Hãy gửi bản vẽ có text căn lề trái lên nhé. Trong file bạn gửi thì không thấy có các text này, bởi vậy không check được.


  • 0
Chúc các quý Anh trên diễn đàn luôn khỏe, đẻ thêm được nhiều thứ để mót.

#22 khaosatheco

khaosatheco

    biết vẽ circle

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

Đã gửi 27 February 2013 - 11:36 AM

Hề hề hề,

Hãy gửi bản vẽ có text căn lề trái lên nhé. Trong file bạn gửi thì không thấy có các text này, bởi vậy không check được.

File mẫu đây bác ơi.

 


  • 0

#23 phamthanhbinh

phamthanhbinh

    biết lệnh adcenter

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

Đã gửi 27 February 2013 - 12:50 PM

File mẫu đây bác ơi.
 
http://www.fshare.vn/file/17SU9UVZCE/

Hề hề hề,của bạn đây:

(defun c:xotxt (/ oldos sst pl obj p0 par pa1 pa2 pa3 etxt)

(vl-load-com)

(setq oldos (getvar "osmode"))

(setvar "osmode" 0)

(command "undo" "be")

(alert "Chon tap hop text can xoay")

(setq sst (acet-ss-to-list (ssget (list (cons 0 "text")))))

(setq pl (car (entsel "\n Chon polyline dinh huong")))

(setq obj (vlax-ename->vla-object pl))

(foreach txt sst

(setq p0 (if (or (/= (cdr (assoc 72 (setq etxt (entget txt)))) 0) (/= (cdr (assoc 73 etxt)) 0))

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

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

              )

       par (vlax-curve-getparamatpoint obj p0) 

       pa1 (vlax-curve-getpointatparam obj (fix par)) 

       pa2 (vlax-curve-getpointatparam obj  par))

(if (not (equal pa1 pa2 0.000001))

        (setq goc (angle pa1 pa2))

        (if (setq pa3 (vlax-curve-getpointatparam obj (1+ par)))

            (setq goc (angle pa1 pa3))

            (setq goc (+ pi (angle pa1 (vlax-curve-getpointatparam obj (1- par))))) 

      )
)
(setq etxt (subst (cons 50 goc) (assoc 50 etxt) etxt))
(entmod etxt)
)
(command "undo" "e")
(setvar "osmode" oldos)
(princ)
)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;     


Chúc bạn vui.
PS: bạn cũng có thể sử dụng cách của bác ketxu để lấy điểm đặt text cho nó đỡ phức tạp hơn. Vì mình chưa quan dùng các hàm vla, vlax .... nên hơi ngại. Song trường hợp này thì dùng (vlax-get ....) của bác ketxu sẽ ngắn hơn nhiều.
Cụ thể: thay thế đoạn code
(if (or (/= (cdr (assoc 72 (setq etxt (entget txt)))) 0) (/= (cdr (assoc 73 etxt)) 0))
(vlax-curve-getclosestpointto obj (cdr (assoc 11 etxt)) T)
(vlax-curve-getclosestpointto obj (cdr (assoc 10 etxt)) T)
)
bằng đoạn code đơn giản:
(vlax-curve-getclosestpointto obj (vlax-get (vlax-ename->vla-object txt) 'InsertionPoint)
và thêm code xác định biến etxt
(setq etxt (entget txt))
là OK.
Hề hề hề


  • 1
Chúc các quý Anh trên diễn đàn luôn khỏe, đẻ thêm được nhiều thứ để mót.

#24 khaosatheco

khaosatheco

    biết vẽ circle

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

Đã gửi 27 February 2013 - 01:08 PM

Tuyệt vời. Thank bác!


  • 0

#25 thai11000

thai11000

    biết vẽ arc

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

Đã gửi 21 March 2014 - 04:28 PM

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.c.../70461_vd_1.dwg

 


  • 0

#26 phamthanhbinh

phamthanhbinh

    biết lệnh adcenter

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

Đã gửi 22 March 2014 - 12:05 AM

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.c.../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........


  • 0
Chúc các quý Anh trên diễn đàn luôn khỏe, đẻ thêm được nhiều thứ để mót.

#27 thai11000

thai11000

    biết vẽ arc

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

Đã gửi 22 March 2014 - 07:34 AM

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 ạ!


  • 0

#28 phamthanhbinh

phamthanhbinh

    biết lệnh adcenter

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

Đã gửi 22 March 2014 - 01:32 PM

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


  • 0
Chúc các quý Anh trên diễn đàn luôn khỏe, đẻ thêm được nhiều thứ để mót.

#29 thai11000

thai11000

    biết vẽ arc

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

Đã gửi 24 March 2014 - 09:23 AM

Hề hề hề,

Vậy thì trên bản vẽ bạn gửi đâu có thấy chử nào ngượ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.c.../70461_vd_2.dwg


  • 0

#30 phamthanhbinh

phamthanhbinh

    biết lệnh adcenter

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

Đã gửi 24 March 2014 - 12:08 PM

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.c.../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.c...94_xoaytext.lsp


  • 1
Chúc các quý Anh trên diễn đàn luôn khỏe, đẻ thêm được nhiều thứ để mót.

#31 thai11000

thai11000

    biết vẽ arc

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

Đã gửi 24 March 2014 - 12:55 PM

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.c...94_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!:((


  • 0

#32 phamthanhbinh

phamthanhbinh

    biết lệnh adcenter

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

Đã gửi 24 March 2014 - 02:33 PM

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.


  • 1
Chúc các quý Anh trên diễn đàn luôn khỏe, đẻ thêm được nhiều thứ để mót.

#33 gia_bach

gia_bach

    biết lệnh adcenter

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 1435 Bài viết
Điểm đánh giá: 1426 (rất tốt)

Đã gửi 24 March 2014 - 02:54 PM

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)

  • 1

#34 phamthanhbinh

phamthanhbinh

    biết lệnh adcenter

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

Đã gửi 24 March 2014 - 04:28 PM

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


  • 0
Chúc các quý Anh trên diễn đàn luôn khỏe, đẻ thêm được nhiều thứ để mót.

#35 thai11000

thai11000

    biết vẽ arc

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

Đã gửi 24 March 2014 - 09:19 PM

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!


  • 0

#36 thai11000

thai11000

    biết vẽ arc

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

Đã gửi 24 March 2014 - 09:22 PM

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.


  • 0

#37 gia_bach

gia_bach

    biết lệnh adcenter

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 1435 Bài viết
Điểm đánh giá: 1426 (rất tốt)

Đã gửi 25 March 2014 - 07:18 AM

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.


  • 1

#38 thai11000

thai11000

    biết vẽ arc

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

Đã gửi 25 March 2014 - 08:17 AM

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!


  • 0

#39 minhnhu.uct

minhnhu.uct

    Chưa sử dụng CAD

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

Đã gửi 03 December 2015 - 04:51 PM

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


  • 0

#40 phamthanhbinh

phamthanhbinh

    biết lệnh adcenter

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

Đã gửi 04 December 2015 - 11:25 AM

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.


  • 0
Chúc các quý Anh trên diễn đàn luôn khỏe, đẻ thêm được nhiều thứ để mót.