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

Cách scale nhiều đối tượng một lúc?

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

Ví dụ mình có nhiều hình tròn trong bản vẽ. Giờ mình muốn scale tất cả cùng một lúc nhưng có tâm scale là tâm của từng đường tròn. Liệu có cách nào không? Mong các bác chỉ giúp.

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í dụ mình có nhiều hình tròn trong bản vẽ. Giờ mình muốn scale tất cả cùng một lúc nhưng có tâm scale là tâm của từng đường tròn. Liệu có cách nào không? Mong các bác chỉ giúp.

đặt các đối tượng của bạn thành 1 block với tâm bất kỳ, sau đó insert block đó ra với tỉ lệ Scale

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í dụ mình có nhiều hình tròn trong bản vẽ. Giờ mình muốn scale tất cả cùng một lúc nhưng có tâm scale là tâm của từng đường tròn. Liệu có cách nào không? Mong các bác chỉ giúp.

Với những yêu cầu như này thì có thể viết lisp nhưng các bạn cứ ví dụ thì chẳng ai giúp bạn được pahỉ là yêu cầu cụ thể là circle, text, block thì người ta mới giúp được

  • 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 các đối tượng của bạn thành 1 block với tâm bất kỳ, sau đó insert block đó ra với tỉ lệ Scale

Ko hiểu ý của anh nhưng em nghĩ sẽ lâu hơn là scale từng hình một

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ới những yêu cầu như này thì có thể viết lisp nhưng các bạn cứ ví dụ thì chẳng ai giúp bạn được pahỉ là yêu cầu cụ thể là circle, text, block thì người ta mới giúp được

Tue_NV đồng ý với ý kiến của anh Duy782006.

Đây là lisp scale tất cả đường tròn cùng một lúc nhưng có tâm scale là tâm của từng đường tròn

(defun c:SCT(/ ci tl n i)
(prompt "\n Moi ban chon CIRCLE")
(setq ci (ssget '((0 . "CIRCLE"))))
(setq tl (getreal "\n Nhap ti le scale :") n (sslength ci) i 0)

(while ((setq ent (ssname ci i))
(command "scale" ent "" (cdr(assoc 10 (entget ent))) tl)
(setq i (1+ i))
)
(princ)
)

:s_big:

  • 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
Tue_NV đồng ý với ý kiến của anh Duy782006.

Đây là lisp scale tất cả đường tròn cùng một lúc nhưng có tâm scale là tâm của từng đường tròn

(defun c:SCT(/ ci tl n i)
(prompt "\n Moi ban chon CIRCLE")
(setq ci (ssget '((0 . "CIRCLE"))))
(setq tl (getreal "\n Nhap ti le scale :") n (sslength ci) i 0)

(while (< i n)
(setq ent (ssname ci i))
(command "scale" ent "" (cdr(assoc 10 (entget ent))) tl)
(setq i (1+ i))
)
(princ)
)

:s_big:

Cảm ơn anh. Với text thì em đã thấy lisp scale tại điểm chèn của text rùi. Với block thì việc scale là đơn giản. Em muôn hỏi với một hình bất kỳ. Nếu là hình scale nhiều hình chữ nhật, wipeout một lúc. Tâm scale tại điểm pick chuột trên cạnh của hình chữ nhật. Cũng giống như với hình tròn nhưng giơ tâm scale là điểm pick chuột trên cạnh hình chữ nhật hay một điểm lằm bên cạnh hình chữ nhật. Mong anh giúp đỡ.

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 anh. Với text thì em đã thấy lisp scale tại điểm chèn của text rùi. Với block thì việc scale là đơn giản. Em muôn hỏi với một hình bất kỳ. Nếu là hình scale nhiều hình chữ nhật, wipeout một lúc. Tâm scale tại điểm pick chuột trên cạnh của hình chữ nhật. Cũng giống như với hình tròn nhưng giơ tâm scale là điểm pick chuột trên cạnh hình chữ nhật hay một điểm lằm bên cạnh hình chữ nhật. Mong anh giúp đỡ.

Bạn có thể chia sẽ cái đơn giản này cho mình học hỏi không mình phải dùng lisp cho nó cơ đấy!

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 có thể chia sẽ cái đơn giản này cho mình học hỏi không mình phải dùng lisp cho nó cơ đấy!

Cái này chắc Thong_kt dùng cách scale theo hai phương x và y trong bảng properties đó bác Duy à. :s_big: em nghĩ cái này chắc bác biết rồi :s_big:

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ái này chắc Thong_kt dùng cách scale theo hai phương x và y trong bảng properties đó bác Duy à. :s_big: em nghĩ cái này chắc bác biết rồi :s_big:

Cách đấy làm sao tác dụng với tất cả block trong khi tỉ lệ và góc quay khác nhau được. Thế mình mới ngạc nhiên. :s_big:

  • 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ách đấy làm sao tác dụng với tất cả block trong khi tỉ lệ và góc quay khác nhau được. Thế mình mới ngạc nhiên. :s_big:

Ui. Mình dùng lệnh BE rùi scale block thui. Như vậy tất cả block sẽ có tác dụng. Không biết làm vậy có vấn đề gì khô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
Ui. Mình dùng lệnh BE rùi scale block thui. Như vậy tất cả block sẽ có tác dụng. Không biết làm vậy có vấn đề gì không.

Nó có tác dụng với mọi block cùng tên như vậy không có hay.

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
Nó có tác dụng với mọi block cùng tên như vậy không có hay.

ùh. Còn nếu chỉ scale những block muốn chọn thì mình dùng lisp của bác Hoành. Thế còn trường hợp mình đưa ra đấy. Không phải là block mà chỉ là đối tường như hình rectang thui. Thi có lệnh hay lisp gì không vậy hả bạn duy 782006. Mong bạn chỉ giúp.

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. Còn nếu chỉ scale những block muốn chọn thì mình dùng lisp của bác Hoành. Thế còn trường hợp mình đưa ra đấy. Không phải là block mà chỉ là đối tường như hình rectang thui. Thi có lệnh hay lisp gì không vậy hả bạn duy 782006. Mong bạn chỉ giúp.

Với hình bấy kỳ thì khó lắm vì không xác định được điểm làm cơ sở.

Mặc dù bạn đề nghị chọ 1 điểm cơ sở bằng cách pick điểm nhưng với chỉ 1 đối tượng thôi cón các đối tượng khác nó (lisp) không biết lấy gì để làm tương quan mà suy ra cái điểm cơ sở này đượ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
Với hình bấy kỳ thì khó lắm vì không xác định được điểm làm cơ sở.

Mặc dù bạn đề nghị chọ 1 điểm cơ sở bằng cách pick điểm nhưng với chỉ 1 đối tượng thôi cón các đối tượng khác nó (lisp) không biết lấy gì để làm tương quan mà suy ra cái điểm cơ sở này được.

Ùh. Mình cũng nghĩ vậy. Với đường tròn thì có điểm tẩm. Mình không biết viết lisp nhưng với hình chũ nhật ABCD. Giả sử điểm pick M lằm trên đoạn AB. Lisp sẽ tính tỉ lệ AM và BM rùi áp dụng cho với tất cả các hình chữ nhật khác. Không biết thế có đuớc không. Làm phiền bác và mọi người quá.

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. Mình cũng nghĩ vậy. Với đường tròn thì có điểm tẩm. Mình không biết viết lisp nhưng với hình chũ nhật ABCD. Giả sử điểm pick M lằm trên đoạn AB. Lisp sẽ tính tỉ lệ AM và BM rùi áp dụng cho với tất cả các hình chữ nhật khác. Không biết thế có đuớc không. Làm phiền bác và mọi người quá.

Thế tâm scale của các hình chữ nhật này ở đâu hở bạn? Nói rõ ra 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
Thế tâm scale của các hình chữ nhật này ở đâu hở bạn? Nói rõ ra nhé.

Với hình chữ nhật ABCD thì tâm scale là điểm M. Còn các hình chữ nhật khác A'B'C'D' thì tâm scale là điểm M'. Điểm M' sẽ đuợc lisp xác định dựa vào tỉ lệ AM / BM. Tức A'M'/B'M' = AM/BM. Không biết có thễ làm đuợc lisp như vậy không. Bạn Tue_NV xém có làm đuợc khô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
Với hình chữ nhật ABCD thì tâm scale là điểm M. Còn các hình chữ nhật khác A'B'C'D' thì tâm scale là điểm M'. Điểm M' sẽ đuợc lisp xác định dựa vào tỉ lệ AM / BM. Tức A'M'/B'M' = AM/BM. Không biết có thễ làm đuợc lisp như vậy không. Bạn Tue_NV xém có làm đuợc không.

Vấn đề này mình rất hay gặp khi nhận bản vẽ từ nguời khác và cần chỉnh sửa lại. Mình thấy rất nhiều nguời quan tâm vào đọc topic này vậy mà không bác nào giúp ah?

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ới hình chữ nhật ABCD thì tâm scale là điểm M. Còn các hình chữ nhật khác A'B'C'D' thì tâm scale là điểm M'. Điểm M' sẽ đuợc lisp xác định dựa vào tỉ lệ AM / BM. Tức A'M'/B'M' = AM/BM. Không biết có thễ làm đuợc lisp như vậy không. Bạn Tue_NV xém có làm đuợc không.

Cái này scale theo ý của bạn nè :

(defun c:scn()

(setq hcnc (entget(car(entsel "\n Chon hinh chu nhat chuan :"))))
(setq a (cdr(nth 14 hcnc)))
(setq b (cdr(nth 18 hcnc)))
(setq m (getpoint "\n Chon diem tam scale tren hinh chu nhat chuan :"))
(setq TL (/ (distance m a) (distance m b)))

(prompt "\n Moi ban chon cac hinh chu nhat :")
(setq ssg (ssget '((0 . "LWPOLYLINE"))) n (sslength ssg) i 0)

(while ((setq sn (ssname ssg i))
(setq ent (entget sn))
(setq c (cdr(nth 14 ent)))
(setq d (cdr(nth 18 ent)))
(setq md (/ (distance c d) (+ 1 TL)))
(setq mp (list (- (car d) md) (cadr d) 0))

(command "scale" sn "" mp tl)
(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
Với hình chữ nhật ABCD thì tâm scale là điểm M. Còn các hình chữ nhật khác A'B'C'D' thì tâm scale là điểm M'. Điểm M' sẽ đuợc lisp xác định dựa vào tỉ lệ AM / BM. Tức A'M'/B'M' = AM/BM. Không biết có thễ làm đuợc lisp như vậy không. Bạn Tue_NV xém có làm đuợc không.

 

Vấn đề dđuwọc Tue_NV giải quyết

Nhưng theo mình hay hơn cả là chọn tập các điểm tương ứng các hình,

 

nếu không phải hình chữ nhật thì cách của tue_NV cũng khó thà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
Vấn đề dđuwọc Tue_NV giải quyết

Nhưng theo mình hay hơn cả là chọn tập các điểm tương ứng các hình,

 

nếu không phải hình chữ nhật thì cách của tue_NV cũng khó thành?

Bạn thử Code này xem :

(defun c:scn()
(prompt "\n Moi ban chon cac doi tuong :")
(setq ssg (ssget))

(setq tl (getreal "\n Ti le scale :"))

(setq n (sslength ssg) i 0)

(while ((setq sn (ssname ssg i))
(HLI sn)
(setq ent (entget sn))
(setq mp (getpoint "\n Ban chon tam cho doi tuong nay :"))

(command "scale" sn "" mp tl)
(setq i (1+ i))

)
(princ)
)
;
(defun HLI(ent)
(sssetfirst (ssadd ent (ssadd)) (ssadd ent (ssadd)))
)

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ái này scale theo ý của bạn nè :

(defun c:scn()

(setq hcnc (entget(car(entsel "\n Chon hinh chu nhat chuan :"))))
(setq a (cdr(nth 14 hcnc)))
(setq b (cdr(nth 18 hcnc)))
(setq m (getpoint "\n Chon diem tam scale tren hinh chu nhat chuan :"))
(setq TL (/ (distance m a) (distance m b)))

(prompt "\n Moi ban chon cac hinh chu nhat :")
(setq ssg (ssget '((0 . "LWPOLYLINE"))) n (sslength ssg) i 0)

(while (< i n)
(setq sn (ssname ssg i))
(setq ent (entget sn))
(setq c (cdr(nth 14 ent)))
(setq d (cdr(nth 18 ent)))
(setq md (/ (distance c d) (+ 1 TL)))
(setq mp (list (- (car d) md) (cadr d) 0))

(command "scale" sn "" mp tl)
(setq i (1+ i))

)
(princ)
)

Lai làm phiền bạn. Lisp sau mình đã dùng đuợc còn lisp này minh không sử dụng được . sao vậu nhỉ bạn. khi chương trình báo chọn các hình chữ nhật khác. Chọn xong thấy nó hết lệnh luô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
Lai làm phiền bạn. Lisp sau mình đã dùng đuợc còn lisp này minh không sử dụng được . sao vậu nhỉ bạn. khi chương trình báo chọn các hình chữ nhật khác. Chọn xong thấy nó hết lệnh luôn.

Đoạn Code trên của Tue_NV không có lỗi . Bạn test lại xem.

Chon hinh chu nhat chuan : Pick chon hinh chu nhat (pick trúng nhé)

Chon diem tam scale tren hinh chu nhat chuan :

Moi ban chon cac hinh chu nhat :

Select objects:

 

 

Tuy nhiên, Tue_NV đồng ý với ý kiến của bạn tigertiger và đã viét ra code dưới để xác định tâm tương ứng của các hình

Nhưng theo mình hay hơn cả là chọn tập các điểm tương ứng các hình,

nếu không phải hình chữ nhật thì cách của tue_NV cũng khó thành?

 

Bạn thử Code này xem :

(defun c:scn()
(prompt "\n Moi ban chon cac doi tuong :")
(setq ssg (ssget))

(setq tl (getreal "\n Ti le scale :"))

(setq n (sslength ssg) i 0)

(while ((setq sn (ssname ssg i))
(HLI sn)
(setq ent (entget sn))
(setq mp (getpoint "\n Ban chon tam cho doi tuong nay :"))

(command "scale" sn "" mp tl)
(setq i (1+ i))

)
(princ)
)
;
(defun HLI(ent)
(sssetfirst (ssadd ent (ssadd)) (ssadd ent (ssadd)))
)

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
Đoạn Code trên của Tue_NV không có lỗi . Bạn test lại xem.

Chon hinh chu nhat chuan : Pick chon hinh chu nhat (pick trúng nhé)

Chon diem tam scale tren hinh chu nhat chuan :

Moi ban chon cac hinh chu nhat :

Select objects:

Tuy nhiên, Tue_NV đồng ý với ý kiến của bạn tigertiger và đã viét ra code dưới để xác định tâm tương ứng của các hình

Mình không thấy dòng nhập tỉ lệ scale đâu. Muốn chỉnh sửa tỉ lệ scale thỉ sửa thế nào trong lisp vậy bạn. Hình như lisp scale theo tỉ lệ cố định rùi đúng không bạ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
Mình không thấy dòng nhập tỉ lệ scale đâu. Muốn chỉnh sửa tỉ lệ scale thỉ sửa thế nào trong lisp vậy bạn. Hình như lisp scale theo tỉ lệ cố định rùi đúng không bạn.

Yeuu cầu của bạn đây nè :

Với hình chữ nhật ABCD thì tâm scale là điểm M. Còn các hình chữ nhật khác A'B'C'D' thì tâm scale là điểm M'. Điểm M' sẽ đuợc lisp xác định dựa vào tỉ lệ AM / BM. Tức A'M'/B'M' = AM/BM. Không biết có thễ làm đuợc lisp như vậy không. Bạn Tue_NV xém có làm đuợc không.

 

Theo ý kiến của Tue_NV thì bạn nên sử dụng Code ở bài viết số 22 là hay nhất

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

×