Chuyển đến nội dung
Diễn đàn CADViet
Đăng nhập để thực hiện theo  
790312

Hỏi về chỉnh kích thước hình tròn vẽ bằng lệnh donut

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

Các bạn cho mình hỏi: khi ta vẽ nhiều hình tròn bằng lện donut có cách nào làm làm tăng đường kính hoặc giảm đường kính các đường tròn nhưng tâm các đường này vẫn tại vị trí ban đầu.Chân thành cảm ơn.

  • 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ác bạn cho mình hỏi: khi ta vẽ nhiều hình tròn bằng lện donut có cách nào làm làm tăng đường kính hoặc giảm đường kính các đường tròn nhưng tâm các đường này vẫn tại vị trí ban đầu.Chân thành cảm ơn.

Thật chất nó là 1 lwpolyline đc tạo bởi 2 nữa đg tròn đồng tâm nên sau khi chọn đối tượng bạn bắt dính kiểu tâm đg tròn để thu phóng.

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
Thật chất nó là 1 lwpolyline đc tạo bởi 2 nữa đg tròn đồng tâm nên sau khi chọn đối tượng bạn bắt dính kiểu tâm đg tròn để thu phóng.

Điều này là đúng nhưng có rất nhiều donut thì điều này khi làm thì rất mất thời gian . Do đó nên có sự trợ giúp của Auto Lisp

Bạn 790312 sử dụng Lisp này Tue_nv Mới viết xem sao :

(defun c:scdo()
(vl-load-com)
(setq ss (ssget '((0 . "*POLYLINE"))) i 0)
(setq tle (getdist "\n Nhap he so ti le : "))

(while ((setq ent (ssname ss i))
(setq ddau (vlax-curve-getStartPoint ent))
(setq diem (vlax-curve-getPointAtParam ent 2))
(setq po (list (/ (+ (car ddau) (car diem)) 2) (/ (+ (cadr ddau) (cadr diem)) 2) 0))
(command "scale" ent "" po tle)
(setq i (1+ i))
)
(princ)
)

  • 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
Điều này là đúng nhưng có rất nhiều donut thì điều này khi làm thì rất mất thời gian . Do đó nên có sự trợ giúp của Auto Lisp

Bạn 790312 sử dụng Lisp này Tue_nv Mới viết xem sao :

(defun c:scdo()
(vl-load-com)
(setq ss (ssget '((0 . "*POLYLINE"))) i 0)
(setq tle (getdist "\n Nhap he so ti le : "))

(while (< i (sslength ss))
(setq ent (ssname ss i))
(setq ddau (vlax-curve-getStartPoint ent))
(setq diem (vlax-curve-getPointAtParam ent 2))
(setq po (list (/ (+ (car ddau) (car diem)) 2) (/ (+ (cadr ddau) (cadr diem)) 2) 0))
(command "scale" ent "" po tle)
(setq i (1+ i))
)
(princ)
)

Cảm ơn bạn nhưng khi scale lai thi tâm các đường donut lại không còn tại vị trí ban đầu.Bạn ktra lại xem có thể sửa làm sao sau khi scale tâm nó vẫn giữ nguyên.Thanks

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ạn nhưng khi scale lai thi tâm các đường donut lại không còn tại vị trí ban đầu.Bạn ktra lại xem có thể sửa làm sao sau khi scale tâm nó vẫn giữ nguyên.Thanks

Khi sử lệnh scale thì Tue_NV đã cho tâm scale ngay chính tâm của donut

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
Khi sử lệnh scale thì Tue_NV đã cho tâm scale ngay chính tâm của donut

Khi sử dụng lệnh của bạn thì tâm nắm trên trục X không thay đổi nhưng trên trục Y vẫn thay đổi,bạn có thể chỉnh lại cho cả tâm trên trục Y không thay đổi được không?Cảm ơn bạn trướ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
Khi sử dụng lệnh của bạn thì tâm nắm trên trục X không thay đổi nhưng trên trục Y vẫn thay đổi,bạn có thể chỉnh lại cho cả tâm trên trục Y không thay đổi được không?Cảm ơn bạn trước.

Tue_NV đã chỉnh lại.

Bạn thử Code này xem :

(defun c:scdo()
(vl-load-com)
(setq ss (ssget '((0 . "*POLYLINE"))) i 0)
(setq tle (getdist "\n Nhap he so ti le : "))

(while ((setq ent (ssname ss i))
(setq diem1 (cdr (assoc 10 (entget (entnext ent)))))
(setq diem2 (cdr (assoc 10 (entget(entnext (entnext ent))))))

(setq po (list (/ (+ (car diem1) (car diem2)) 2) (/ (+ (cadr diem1) (cadr diem2)) 2) 0))
(command "scale" ent "" po tle)
(setq i (1+ i))
)
(princ)
)

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
Tue_NV đã chỉnh lại.

Bạn thử Code này xem :

(defun c:scdo()
(vl-load-com)
(setq ss (ssget '((0 . "*POLYLINE"))) i 0)
(setq tle (getdist "\n Nhap he so ti le : "))

(while (< i (sslength ss))
(setq ent (ssname ss i))
(setq diem1 (cdr (assoc 10 (entget (entnext ent)))))
(setq diem2 (cdr (assoc 10 (entget(entnext (entnext ent))))))

(setq po (list (/ (+ (car diem1) (car diem2)) 2) (/ (+ (cadr diem1) (cadr diem2)) 2) 0))
(command "scale" ent "" po tle)
(setq i (1+ i))
)
(princ)
)

Đoạn viết này nó còn sai tọa độ nằm trên trục Y còn nhiều hơn code trước,mình gửi file đính kèm nhờ bạn xem giúp.Thanks

http://www.cadviet.com/upfiles/2/new_block.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
Tue_NV đã chỉnh lại.

Bạn thử Code này xem :

(defun c:scdo()
(vl-load-com)
(setq ss (ssget '((0 . "*POLYLINE"))) i 0)
(setq tle (getdist "\n Nhap he so ti le : "))

(while ((setq ent (ssname ss i))
(setq diem1 (cdr (assoc 10 (entget (entnext ent)))))
(setq diem2 (cdr (assoc 10 (entget(entnext (entnext ent))))))

(setq po (list (/ (+ (car diem1) (car diem2)) 2) (/ (+ (cadr diem1) (cadr diem2)) 2) 0))
(command "scale" ent "" po tle)
(setq i (1+ i))
)
(princ)
)

 

Đoạn viết này nó còn sai tọa độ nằm trên trục Y còn nhiều hơn code trước,mình gửi file đính kèm nhờ bạn xem giúp.Thanks

http://www.cadviet.com/upfiles/2/new_block.dwg

Chào 790312. Bạn thử file này với code trên xem sao. Nó không bị lỗi nữa.

http://www.cadviet.com/upfiles/2/drawing1.dwg

 

Còn vấn đề của bạn thì Tue_NV đã tìm ra nguyên nhân rồi có điều là mình chưa có thời gian chữa lại. Bạn chịu chờ 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

góp ý với 790312 : Bạn không nên post bài của bạn vào 2 chủ đề khác nhau

Đây là code Tue_NV đã chỉnh lại. Hy vọng bạn hài lòng.

Bạn sử dụng thử và cho ý kiến nhé :

(defun c:scdo()
(vl-load-com)
(command "undo" "be")
(setq oldos (getvar "osmode"))
(setvar "osmode" 0)
(setq ss (ssget '((0 . "*POLYLINE"))) i 0)
(setq tle (getdist "\n Nhap he so ti le : "))

(while ((setq ent (ssname ss i))

(if (= (cdr(assoc 0 (entget ent))) "POLYLINE")
(progn
(setq diem1 (cdr (assoc 10 (entget (entnext ent)))))
(setq diem2 (cdr (assoc 10 (entget(entnext (entnext ent))))))

(setq po (list (/ (+ (car diem1) (car diem2)) 2) (/ (+ (cadr diem1) (cadr diem2)) 2) 0))
)
)

(if (= (cdr(assoc 0 (entget ent))) "LWPOLYLINE")
(progn
(setq ddau (vlax-curve-getStartPoint ent))
(setq diem (vlax-curve-getPointAtParam ent 1))
(setq po (list (/ (+ (car ddau) (car diem)) 2) (/ (+ (cadr ddau) (cadr diem)) 2) 0))
)
)
(command "scale" ent "" po tle)
(setq i (1+ i))
)
(setvar "osmode" oldos)
(command "undo" "end")
(princ)
)

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
góp ý với 790312 : Bạn không nên post bài của bạn vào 2 chủ đề khác nhau

Đây là code Tue_NV đã chỉnh lại. Hy vọng bạn hài lòng.

Bạn sử dụng thử và cho ý kiến nhé :

(defun c:scdo()
(vl-load-com)
(command "undo" "be")
(setq oldos (getvar "osmode"))
(setvar "osmode" 0)
(setq ss (ssget '((0 . "*POLYLINE"))) i 0)
(setq tle (getdist "\n Nhap he so ti le : "))

(while (< i (sslength ss))
(setq ent (ssname ss i))

(if (= (cdr(assoc 0 (entget ent))) "POLYLINE")
(progn
(setq diem1 (cdr (assoc 10 (entget (entnext ent)))))
(setq diem2 (cdr (assoc 10 (entget(entnext (entnext ent))))))

(setq po (list (/ (+ (car diem1) (car diem2)) 2) (/ (+ (cadr diem1) (cadr diem2)) 2) 0))
)
)

(if (= (cdr(assoc 0 (entget ent))) "LWPOLYLINE")
(progn
(setq ddau (vlax-curve-getStartPoint ent))
(setq diem (vlax-curve-getPointAtParam ent 1))
(setq po (list (/ (+ (car ddau) (car diem)) 2) (/ (+ (cadr ddau) (cadr diem)) 2) 0))
)
)
(command "scale" ent "" po tle)
(setq i (1+ i))
)
(setvar "osmode" oldos)
(command "undo" "end")
(princ)
)

Chân thành cảm ơn sự nhiệt tình của bạn.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

Các bạn cho mình hỏi: khi ta vẽ nhiều hình tròn bằng lện donut có cách nào làm làm tăng đường kính hoặc giảm đường kính các đường tròn nhưng tâm các đường này vẫn tại vị trí ban đầu.Chân thành cảm ơ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

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
Đăng nhập để thực hiện theo  

×