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

[Đã xong] Lisp gán TEXT cho các đường đồng mức

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

Em nhờ các bác sửa cho em đoạn lisp "Gán Text cho các đường đồng mức" sau:

(em đã gán được Text cho các đường Đ.Mức nhưng không vẽ được hình chữ nhật hoặc

hình ô van bao quanh Text - để che một phần đường ĐM dưới Text).

- Yêu cầu của em là các hình này (hình chữ nhật hoặc hình ô van) bao quanh Text

và quay (xoay or cùng chiềU) theo chiều của các đường Đ.Mức...

Xin cảm ơn các Bác trước !

Link đến Files ACAD và Video ví dụ: http://www.mediafire.com/?fczlrdmn9a92l6z#1

 

Hề hề hề,

Bạn có thể làm ơn post luôn cái hàm con (Du-rtd ....) lên không???

Thực tình mình chưa hiểu rõ cái hàm này vì mình thấy bạn dùng nó hơi khó hiểu:

1/- Ở trong dòng code này:

(command "_text" "J" "ML" (polar pi1 AM 0.05) (Du-rtd AM) (rtos cdo 2 2))

Thì mình hiểu rắng đây là hàm đổi số đo góc từ radian sang độ

2/- Nhưng ở các dòng code này :

(setq pi1a (polar pi1 (- (Du-rtd (- 6.28319 AM)) 90) (+ (* caotext 0.5) 0.1))

pi1b (polar pi1 (Du-rtd AM) (+ (* caotext 0.5) 0.1))

thì cái hàm đó có nghĩa chi nhỉ ??? Nếu là đổi số đo góc từ radian ra độ thì sao lại dùng với hàm polar được vì hàm polar yêu cầu tham số góc phải đo bằng radian cơ mà.....

Rất mong bạn gửi hàm đó lên để mình coi thử xem sao nhé.

 

Theo đoạn code :

(command "Osmode" 0 "_Wipeout" pi1a pi3a pi3b pi1b "")

thì đúng ra sau khi bạn tạo wipeout nó phải còn lại cái khung chữ nhật chứ tại sao lại không có nhỉ???

Do chưa có hàm con (du-rtd ...) nên mình chưa thể test cái lisp của bạn được. Chỉ là đọc code và phán đoán mà thôi. Trùng trật mong bạn chớ giận.

 

Hề hề hề, chúc bạn vui

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ề,

Bạn có thể làm ơn post luôn cái hàm con (Du-rtd ....) lên không???

Thực tình mình chưa hiểu rõ cái hàm này vì mình thấy bạn dùng nó hơi khó hiểu:

1/- Ở trong dòng code này:

(command "_text" "J" "ML" (polar pi1 AM 0.05) (Du-rtd AM) (rtos cdo 2 2))

Thì mình hiểu rắng đây là hàm đổi số đo góc từ radian sang độ

2/- Nhưng ở các dòng code này :

(setq pi1a (polar pi1 (- (Du-rtd (- 6.28319 AM)) 90) (+ (* caotext 0.5) 0.1))

pi1b (polar pi1 (Du-rtd AM) (+ (* caotext 0.5) 0.1))

thì cái hàm đó có nghĩa chi nhỉ ??? Nếu là đổi số đo góc từ radian ra độ thì sao lại dùng với hàm polar được vì hàm polar yêu cầu tham số góc phải đo bằng radian cơ mà.....

Rất mong bạn gửi hàm đó lên để mình coi thử xem sao nhé.

Xin lỗi các Bác, em xin bổ sung hàm đổi Radial thành độ:

(defun Du-dtr (a) (/ (* a 3.141592654) 180.0))

(defun Du-rtd (a) (/ (* a 180.0) 3.141592654))

và đúng là đoạn code đó em đã nhầm dơn vị đo...

Nhờ các Bác và bác PhamThanhBinh sửa lại luôn cho em.

(defun Du-rtd (a) (/ (* a 180.0) 3.141592654))
(defun C:Du-text (/ n cdo che pi1 pi2 pi3 Am sokytu caotext daitext AM
                   pi1a pi1b pi3a pi3b)

 (setq cdo (getreal "\nCao Do Bat Dau Cua Duong Dong_Muc...: "))
 (setq che (getreal "\nChenh Cao or Buoc nhay Cua Duong D.Muc...: "))
 (while (setq n 1)
   (command "Osmode" 512)
   (setq pi1 (getpoint "\nDiem Dat Text <Esc to  Cancel>...: "))
   (setq pi2 (getpoint "\nDiem Thu Hai <Esc to  Cancel>...: "))
   (setq AM (angle pi1 pi2))
   (setq sokytu (strlen (rtos cdo 2 2)) caotext (getvar "Textsize")
         daitext (* sokytu caotext) pi3 (polar pi1 AM daitext))
   (cond
     ((> (cadr pi1) (cadr pi2))
      (setq pi1a (polar pi1 (- (Du-rtd (- 6.28319 AM)) 90) (+ (* caotext 0.5) 0.1))
            pi1b (polar pi1 (Du-rtd AM) (+ (* caotext 0.5) 0.1))
            pi3a (polar pi3 (/ pi 2) (+ (* caotext 0.5) 0.1))
            pi3b (polar pi3 (-(/ pi 2)) (+ (* caotext 0.5) 0.1))))
     ((< (cadr pi1) (cadr pi2))      
      (setq pi1a (polar pi1 (/ pi 2) (+ (* caotext 0.5) 0.1))
            pi1b (polar pi1 (-(/ pi 2)) (+ (* caotext 0.5) 0.1))     
            pi3a (polar pi3 (/ pi 2) (+ (* caotext 0.5) 0.1))
            pi3b (polar pi3 (-(/ pi 2)) (+ (* caotext 0.5) 0.1))))
     ((= (cadr pi1) (cadr pi2))
      (setq pi1a (polar pi1 (- pi) (+ (* caotext 0.5) 0.1))
            pi1b (polar pi1 0.0 (+ (* caotext 0.5) 0.1))
            pi3a (polar pi3 (- pi) (+ (* caotext 0.5) 0.1))
            pi3b (polar pi3 0.0 (+ (* caotext 0.5) 0.1))))
     (T
      (setq pi1a (polar pi1 (/ pi 2) (+ (* caotext 0.5) 0.1))
            pi1b (polar pi1 (-(/ pi 2)) (+ (* caotext 0.5) 0.1))
            pi3a (polar pi3 (/ pi 2) (+ (* caotext 0.5) 0.1))
            pi3b (polar pi3 (-(/ pi 2)) (+ (* caotext 0.5) 0.1))))
   )
   (command "Layer" "M" "Wipeout" "") 
   (command "Osmode" 0 "_Wipeout" pi1a pi3a pi3b pi1b "")
   (command "layer" "M" "Text_Cai" "")
   (command "_text" "J" "ML" (polar pi1 AM 0.05) (Du-rtd AM) (rtos cdo 2 2))
   (setq n (+ n 1) cdo (+ cdo che))
 )
   (command "layer" "S" "0" "")
   (command "Osmode" 33 "color" "Bylayer" "cmdecho" 1 "ortho" "on" "redraw")
)

Link đến Files ACAD và Video ví dụ: hthttp://www.mediafire...zlrdmn9a92l6z#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

Xin lỗi các Bác, em xin bổ sung hàm đổi Radial thành độ:

(defun Du-dtr (a) (/ (* a 3.141592654) 180.0))

(defun Du-rtd (a) (/ (* a 180.0) 3.141592654))

và đúng là đoạn code đó em đã nhầm dơn vị đo...

Nhờ các Bác và bác PhamThanhBinh sửa lại luôn cho em.

Link đến Files ACAD và Video ví dụ: hthttp://www.mediafire...zlrdmn9a92l6z#1

Hề hề hề,

Vấn đề của bạn chỉ là việc xác định các điểm pi1a pi3a pi3b pi1b sai mà thôi chứ cái wipeout hổng có sai.

Mình chưa rõ vì sao bạn phải dùng hàm cond phức tạp đến thế ????

Bạn hãy kiểm tra lại nhé vì việc so sánh hai giá trị (cadr pi1) và (cadr pi2) chỉ có thể có 3 dạng là < = > thôi chứ .....

Hề hề hề,...

Mình sửa tạm cái này để bạn dùng thử, hãy chú ý so sánh cái mình sửa và cái bạn có để rút kinh nghiệm nhé.

Đặc biệt cái hàm cond, mình để bạn tự chỉnh sửa cho phù hợp nhé. Mình sửa vậy để bạn thấy sự bất hợp lý của nó mà thôi. Bạn nên suy nghĩ tìm cách loại nó đi nhé.....


(defun C:Du-text (/ n cdo che pi1 pi2 pi3 Am sokytu caotext daitext AM
                   pi1a pi1b pi3a pi3b)
 (command "undo" "be")
 (setq cdo (getreal "\nCao Do Bat Dau Cua Duong Dong_Muc...: "))
 (setq che (getreal "\nChenh Cao or Buoc nhay Cua Duong D.Muc...: "))
 (setq n 1)
 (while n
   (command "Osmode" 512)
   (setq pi1 (getpoint "\nDiem Dat Text <Esc to  Cancel>...: "))
   (setq pi2 (getpoint "\nDiem Thu Hai <Esc to  Cancel>...: "))
   (if (and pi1 pi2)
   (progn
   (setq AM (angle pi1 pi2))
   (setq sokytu (strlen (rtos cdo 2 2)) caotext (getvar "Textsize")
         daitext (* sokytu caotext) pi3 (polar pi1 AM daitext))
   (cond
     ((> (cadr pi1) (cadr pi2))
      (setq pi1a (polar pi1 (+ AM (/ pi 2)) (+ (* caotext 0.5) 0.1))
            pi1b (polar pi1 (- AM (/ pi 2)) (+ (* caotext 0.5) 0.1))
            pi3a (polar pi3 (+ AM (/ pi 2)) (+ (* caotext 0.5) 0.1))
            pi3b (polar pi3 (- AM (/ pi 2)) (+ (* caotext 0.5) 0.1))))
     ((< (cadr pi1) (cadr pi2))      
      (setq pi1a (polar pi1 (+ AM (/ pi 2)) (+ (* caotext 0.5) 0.1))
            pi1b (polar pi1 (- AM (/ pi 2)) (+ (* caotext 0.5) 0.1))     
            pi3a (polar pi3 (+ AM (/ pi 2)) (+ (* caotext 0.5) 0.1))
            pi3b (polar pi3 (- AM (/ pi 2)) (+ (* caotext 0.5) 0.1))))
     ((= (cadr pi1) (cadr pi2))
      (setq pi1a (polar pi1 (+ AM (/ pi 2)) (+ (* caotext 0.5) 0.1))
            pi1b (polar pi1 (- AM (/ pi 2)) (+ (* caotext 0.5) 0.1))     
            pi3a (polar pi3 (+ AM (/ pi 2)) (+ (* caotext 0.5) 0.1))
            pi3b (polar pi3 (- AM (/ pi 2)) (+ (* caotext 0.5) 0.1))))
     (T
      (setq pi1a (polar pi1 (+ AM (/ pi 2)) (+ (* caotext 0.5) 0.1))
            pi1b (polar pi1 (- AM (/ pi 2)) (+ (* caotext 0.5) 0.1))     
            pi3a (polar pi3 (+ AM (/ pi 2)) (+ (* caotext 0.5) 0.1))
            pi3b (polar pi3 (- AM (/ pi 2)) (+ (* caotext 0.5) 0.1))))
   )
   (command "Layer" "M" "Wipeout" "") 
   (command "Osmode" 0 "_Wipeout" pi1a pi3a pi3b pi1b "")
   (command "layer" "M" "Text_Cai" "")
   (command "_text" "J" "ML" (polar pi1 AM 0.05) (Du-rtd AM) (rtos cdo 2 2))
   (setq n (+ n 1) cdo (+ cdo che))
   )
   (setq n nil)
   )
 )
   (command "layer" "S" "0" "")
   (command "Osmode" 33 "color" "Bylayer" "cmdecho" 1 "ortho" "on" "redraw")
   (command "undo" "e")
   (princ)
)

(defun Du-dtr (a) (/ (* a 3.141592654) 180.0))
(defun Du-rtd (a) (/ (* a 180.0) 3.141592654))

Chúc bạn vui.

Chỉnh sửa theo phamthanhbinh
Bổ sung lisp

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ấn đề của bạn chỉ là việc xác định các điểm pi1a pi3a pi3b pi1b sai mà thôi chứ cái wipeout hổng có sai.

Mình chưa rõ vì sao bạn phải dùng hàm cond phức tạp đến thế ????

Bạn hãy kiểm tra lại nhé vì việc so sánh hai giá trị (cadr pi1) và (cadr pi2) chỉ có thể có 3 dạng là < = > thôi chứ .....

Hề hề hề,...

Mình sửa tạm cái này để bạn dùng thử, hãy chú ý so sánh cái mình sửa và cái bạn có để rút kinh nghiệm nhé.

Đặc biệt cái hàm cond, mình để bạn tự chỉnh sửa cho phù hợp nhé. Mình sửa vậy để bạn thấy sự bất hợp lý của nó mà thôi. Bạn nên suy nghĩ tìm cách loại nó đi nhé...

Cám ơn bác PhamThanhBinh đã sửa giúp và chỉ dẫn, cám ơn mọi người

Lisp chay rất tốt, rất đúng yêu cầu...

Chúc mọi người vui, khỏe, mong Chủ đề và diễn đàn luôn phát triển.

(Tiện đây cho em hỏi làm sao add được tên như sau: "phamthanhbinh, on 19 June 2011 - 09:49 PM, said:" lên tiêu đề của phần trích dẫn ?)

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 bác PhamThanhBinh đã sửa giúp và chỉ dẫn, cám ơn mọi người

Lisp chay rất tốt, rất đúng yêu cầu...

Chúc mọi người vui, khỏe, mong Chủ đề và diễn đàn luôn phát triển.

(Tiện đây cho em hỏi làm sao add được tên như sau: "phamthanhbinh, on 19 June 2011 - 09:49 PM, said:" lên tiêu đề của phần trích dẫn ?)

mình nhập xong các dòng lệnh nhưng chỉ vẽ được ô vuông, ko ra cao độ text bạn ạ. giúp mình vớ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

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

×