Đến nội dung


Hình ảnh

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


  • Please log in to reply
11 replies to this topic

#1 790312

790312

    biết lệnh fillet

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

Đã gửi 01 August 2009 - 07:06 PM

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.
  • 1

#2 matran

matran

    biết vẽ line

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

Đã gửi 01 August 2009 - 07:39 PM

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.
  • 0

#3 Tue_NV

Tue_NV

    KS Võ Quang Tuệ

  • Moderator
  • PipPipPipPipPipPipPip
  • 4296 Bài viết
Điểm đánh giá: 3804 (đỉnh cao)

Đã gửi 01 August 2009 - 08:11 PM

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 (< 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)
)

  • 2

#4 790312

790312

    biết lệnh fillet

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

Đã gửi 02 August 2009 - 07:35 AM

Đ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
  • 0

#5 Tue_NV

Tue_NV

    KS Võ Quang Tuệ

  • Moderator
  • PipPipPipPipPipPipPip
  • 4296 Bài viết
Điểm đánh giá: 3804 (đỉnh cao)

Đã gửi 02 August 2009 - 08:58 AM

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
  • 0

#6 790312

790312

    biết lệnh fillet

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

Đã gửi 02 August 2009 - 09:52 AM

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.
  • 0

#7 Tue_NV

Tue_NV

    KS Võ Quang Tuệ

  • Moderator
  • PipPipPipPipPipPipPip
  • 4296 Bài viết
Điểm đánh giá: 3804 (đỉnh cao)

Đã gửi 02 August 2009 - 01:56 PM

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 (< 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)
)

  • 0

#8 790312

790312

    biết lệnh fillet

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

Đã gửi 02 August 2009 - 02:15 PM

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.c...2/new_block.dwg
  • 0

#9 Tue_NV

Tue_NV

    KS Võ Quang Tuệ

  • Moderator
  • PipPipPipPipPipPipPip
  • 4296 Bài viết
Điểm đánh giá: 3804 (đỉnh cao)

Đã gửi 05 August 2009 - 08:24 PM

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.c...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.c.../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é :
  • 1

#10 Tue_NV

Tue_NV

    KS Võ Quang Tuệ

  • Moderator
  • PipPipPipPipPipPipPip
  • 4296 Bài viết
Điểm đánh giá: 3804 (đỉnh cao)

Đã gửi 05 August 2009 - 09:42 PM

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

  • 0

#11 790312

790312

    biết lệnh fillet

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

Đã gửi 06 August 2009 - 10:50 AM

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.
  • 0

#12 ntv770306

ntv770306

    biết pan

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

Đã gửi 04 May 2012 - 03:36 PM

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.


  • 0