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

Làm sao để chỉnh bé kích thước cái mũi tên này !

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

Quick Code để bạn tham khảo.

1. Kiểu scale :

(defun c:test(/ ss tl i en)
(setq  ss (ssget "X" (list (cons 0 "POLYLINE")(cons 8 "ENTTNTHIETKE")))
 tl (getreal "Ti le scale :")
 i -1
)
(vl-load-com)
(while  (setq en (ssname ss (setq i (1+ i))))
 (vla-setwidth (vlax-ename->vla-object en) 0 0 (* 0.18 tl))
)
)

2. Kiểu cố định giá trị

(defun c:test(/ ss tl i en)
(setq  ss (ssget "X" (list (cons 0 "POLYLINE")(cons 8 "ENTTNTHIETKE")))
 tl (getreal "Kich thuoc mui ten :")
 i -1
)
(vl-load-com)
(while  (setq en (ssname ss (setq i (1+ i))))
 (vla-setwidth (vlax-ename->vla-object en) 0 0 tl)
)
)

 

@Truongngocdat

Các bài viết của bạn đều không có dấu và không có tính chất xây dựng, đề nghị bạn tôn trọng người đọc và diễn đàn! Thân

 

 

 

 

Hi. Anh KETXU viết lisp dễ sử dụng và nhanh, nhưng mà cái mũi tên như yêu cầu của em là nó bé lại thì đúng rồi nhưng mà mất cân đối quá, tức là khi mình chỉnh bé lại thì đồng nghĩa với việc phải ngắn lại theo kiểu Scale đối tượng nhìn cho đẹp và đỡ tốn diện tích chứ ạ ? Anh chỉnh để mình điều chỉnh cái mũi tên đó ngắn lại theo cái tỷ lệ Scale mà mình nhập vào được không ạ ? Cảm ơn anh nhìu nhì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

Hi, mình cũng tập tành viết cái lisp mong là có ích cho bạn.

Nguyên lý hoạt động là bạn phải chọn những thằng mũi tên, rồi lisp sẽ thay thế các mũi tên này bằng một block. trong file mình gửi đây là block có tên Girl, hình dạng thì mình scale mũi tên nhỏ chút xíu, bạn có thể chỉnh sửa cái block này theo dúng ý bạn. bạn cũng có thể thay đổi tên block nhưng lúc này bạn phải thay đổi luôn tên trong lisp nhá!

đây là file cad có block Gilr là cái mũi tên màu đỏ nha:

http://www.mediafire..._cau%5B2%5D.dwg

(defun c:ic (/ dt sdt ent id ang p1 p2 os)
 (setq dt (ssget)
sdt (sslength dt)
id 0
os (getvar "osmode"))
 (command "undo" "be")
 (setvar "osmode" 0)
 (repeat sdt
(setq ent (ssname dt id)
  id (1+ id)
  p1 (vlax-curve-getPointAtParam ent 0)
  p2 (vlax-curve-getPointAtParam ent 1)
  ang (/(*(angle p1 p2)180)pi)
  )
(command "insert" "Girl" p1 "1" "" ang)
(entdel ent)
)
 (setvar "osmode" os)
 (command "undo" "end")
 )

Anh LP_HAI ạ, lisp của anh áp dụng với file đó thì chạy, nhưng khi dùng với file khác thì nó bị lệch vị trí của mũi tên đi.em gửi anh 1 file khác làm ví dụ để a tham khảo nhé, anh chạy thử với file này sẽ thấy lỗi ạ !

http://www.mediafire.com/?6qz5rhw6euect8s

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

hic. Scale thì nói làm gì ạ ? vì nó có cả 1000 đối tượng. Ngồi scale đến bao h ạ ? hic !

bạn nên trách mình thì hơn.Trước khi làm thì phải định hướng trước.những chi tiết giống nhau thì nên sài 1 cái block thôi.1 tỉ cái cũng đc bạn sửa 1 cái thì 1 tỉ cái kia sẽ thay đổi theo.Nếu trong truong hợp này chỉ có 1 cách duy nhất là sc thôi, vì nó chỉ là đối tượng PL.Hoặc có thể tạo ra cái mũi tên mới sà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 nên trách mình thì hơn.Trước khi làm thì phải định hướng trước.những chi tiết giống nhau thì nên sài 1 cái block thôi.1 tỉ cái cũng đc bạn sửa 1 cái thì 1 tỉ cái kia sẽ thay đổi theo.Nếu trong truong hợp này chỉ có 1 cách duy nhất là sc thôi, vì nó chỉ là đối tượng PL.Hoặc có thể tạo ra cái mũi tên mới sài nhé!

 

Hic, anh mắng oan em rồi. CÁi mũi tên đó là do chương trình phần mềm chạy ra. không phải do e tự vẽ ra được. hic

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

Anh LP_HAI ạ, lisp của anh áp dụng với file đó thì chạy, nhưng khi dùng với file khác thì nó bị lệch vị trí của mũi tên đi.em gửi anh 1 file khác làm ví dụ để a tham khảo nhé, anh chạy thử với file này sẽ thấy lỗi ạ !

http://www.mediafire...6qz5rhw6euect8s

Bạn đổi UCS lai trước khi dùng lệnh, UCS -> W

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

 

 

 

 

Hi. Anh KETXU viết lisp dễ sử dụng và nhanh, nhưng mà cái mũi tên như yêu cầu của em là nó bé lại thì đúng rồi nhưng mà mất cân đối quá, tức là khi mình chỉnh bé lại thì đồng nghĩa với việc phải ngắn lại theo kiểu Scale đối tượng nhìn cho đẹp và đỡ tốn diện tích chứ ạ ? Anh chỉnh để mình điều chỉnh cái mũi tên đó ngắn lại theo cái tỷ lệ Scale mà mình nhập vào được không ạ ? Cảm ơn anh nhìu nhìu !

Bạn biết để scale ngoài tỉ lệ scale còn cần có điểm gốc base Point, vậy theo bạn điểm đó sẽ là điểm nào trong pline (hiển thị mũi tê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

Bạn biết để scale ngoài tỉ lệ scale còn cần có điểm gốc base Point, vậy theo bạn điểm đó sẽ là điểm nào trong pline (hiển thị mũi tên) đó ?

Theo Tue_NV thì ý bạn ấy muốn cân đối lại mũi tên. Không nhất thiết phải scale rồi chỉnh lại. Và cái điểm mà Ketxu nói đó nằm trên đoạn thẳng nối từ điểm đầu đến điểm cuối của mũi tên

 

Có 2 thông số đặt ra để bạn Girl nhập vào để chạy chương trình:

- Một là Độ lớn của mũi tên : Trong hình vẽ của bạn là 0.18

- Hai là : Khoảng cách từ đỉnh của mũi tên tới chân mũi tên để bạn girl có thể cân đối lại mũi tên

Thử nhé :

(defun c:test(/ ss tl i e e1 e2 eg1 eg2 kc)
;;;;;copyright by Tue_NV
(setq ss (ssget "X" (list (cons 0 "POLYLINE")(cons 8 "ENTTNTHIETKE")))
tl (getreal "Kich thuoc mui ten :")
kc (getreal "Dinh mui ten den chan mui ten:")
i -1
)
(vl-load-com)
(while (setq e (ssname ss (setq i (1+ i))))
(setq e1 (entnext e) eg1 (entget e1) e2 (entnext e1) eg2 (entget e2) )
(entmod (subst (cons 41 tl) (assoc 41 eg1) eg1))
(entmod (subst (cons 10 (polar (vlax-curve-getstartpoint e)
(angle (vlax-curve-getstartpoint e) (vlax-curve-getendpoint e)) kc) )
(assoc 10 eg2) eg2))
(entupd e1) (entupd e2)
)
)

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

hihi ! lisp hay thật, Nó làm được những việc mà CAD không thể làm được ! Thanks anh nhìu nhìu na ! hii. Mà a xem chỉnh lại cái chế độ gõ của trang CADVIET, hiện tại đang bị lỗi cụ thể như sau: Khi mình tích vào trả lời thì bị mất con trỏ trong mục soạn thảo, và đánh chữ hay bị lỗi, khó sửa lỗi đó. Muốn hết lỗi thì pải bấm vào gửi bài viết rùi sửa lại thì mới nhìn thấy con trỏ. Phiền anh phản ánh lại với bên lập trình WEB về lỗi này và để fix lỗi. THanks anh. cảm ơn diễn đà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

Hic ! Xin lỗi anh Tuệ hôm trước em test không kỹ, hì, bi giờ cái mũi tên thì chỉnh đẹp chuẩn rùi, nhưng khi mình chỉnh bé đi thì với cái đuôi cũ thì sẽ bị dài, Không biết anh có cách nào để chỉnh chiều dài cái đuôi mũi tên ko ạ ?

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
Hic ! Xin lỗi anh Tuệ hôm trước em test không kỹ, hì, bi giờ cái mũi tên thì chỉnh đẹp chuẩn rùi, nhưng khi mình chỉnh bé đi thì với cái đuôi cũ thì sẽ bị dài, Không biết anh có cách nào để chỉnh chiều dài cái đuôi mũi tên ko ạ ?

Có 3 thông số cho bạn nhập vào :

- Một là Độ lớn của mũi tên : Trong hình vẽ của bạn là 0.18 -> (1)

- Hai là : Khoảng cách từ đỉnh của mũi tên tới chân mũi tên để bạn girl có thể cân đối lại mũi tên (2)

- Ba là : Tổng chiều dài mũi tên để bạn có thể chỉnh "đuôi mũi tên" (3)

(3) > (2) nhé


(defun c:test(/ ss tl i e e1 e2 e3 eg1 eg2 eg3 kc kc2)
;;;;;copyright by Tue_NV
(setq ss (ssget "X" (list (cons 0 "POLYLINE")(cons 8 "ENTTNTHIETKE")))
tl (getreal "Kich thuoc mui ten :")
kc (getreal "Dinh mui ten den chan mui ten:")
kc2 (getreal "Tong chieu dai mui ten:")
i -1
)
(vl-load-com)
(if (> kc2 kc)
(while (setq e (ssname ss (setq i (1+ i))))
(setq e1 (entnext e) eg1 (entget e1) e2 (entnext e1) eg2 (entget e2) 
     e3 (entnext e2) eg3 (entget e3) )
(entmod (subst (cons 41 tl) (assoc 41 eg1) eg1))
(entmod (subst (cons 10 (polar (vlax-curve-getstartpoint e)
(angle (vlax-curve-getstartpoint e) (vlax-curve-getendpoint e)) kc) )
(assoc 10 eg2) eg2))
(entmod (subst (cons 10 (polar (vlax-curve-getstartpoint e)
(angle (vlax-curve-getstartpoint e) (vlax-curve-getendpoint e)) kc2) )
(assoc 10 eg3) eg3))

(entupd e1) (entupd e2) (entupd e3)
)
)
)

  • 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

×