Chuyển đến nội dung
Diễn đàn CADViet
  • Thông báo

    • Nguyen Hoanh

      CADViet đã hoàn tất nâng cấp   14/09/2017

      Chào các bạn, CADViet đã hoàn tất việc nâng cấp lên phiên bản mới. Tất cả các chức năng đã hoạt động theo kỳ vọng của ban quản trị. Nếu có vấn đề gì cần phản hồi, các bản post ở đây nhé: Trân trọng, Nguyễn Hoành.
Đăng nhập để thực hiện theo  
ui_troi_2005

Scale tất cả trên bẻn vẽ

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

Bạn dùng tạm lisp này xem thử có ổn không.

Lưu ý: mỗi lần chạy lệnh SCC, các đối tượng được chọn phải có cùng 1 kiểu dimstyle

 

;;;-------------------------------------------------------------
(defun ss2ent (ss / i Le e);;;Convert ss to list of ename
(setq i 0 Le nil)
(repeat (sslength ss)
(setq
e (ssname ss i)
Le (append Le (list e))
i (1+ i)
)
)
Le
)
;;;-------------------------------------------------------------
(defun upd_dim( ssd)
(setq
   e (ssname ssd 0)
   d (entget e)
   dtype (cdr (assoc 3 d))
   dt (tblsearch "dimstyle" dtype)
   k0 (cdr (assoc 144 dt))
   ks (cdr (assoc 40 dt))
   newdtype (strcat dtype "x" (rtos k))
)
(command "dimstyle" "r" dtype)
(setvar "dimlfac" (/ k0 k))
(setvar "dimscale" (* ks k))
(if (tblsearch "dimstyle" newdtype)
   (command "dimstyle" "r" newdtype)
   (command "dimstyle" "s" newdtype)
)
(command "dimstyle" "a" ssd "")
)
;;;-------------------------------------------------------------
(defun C:SCC( / ss ssd L p k ks e d dtype dt k0 newdtype)
(setq
   ss (ssget)
   ssd (ssget "p" '((0 . "DIMENSION")))
   L (ss2ent ss)
   p (getpoint "\nDiem chuan:")
   k (getreal "\nScale factor:")
)
(if (> k 1)
   (progn (command "scale" ss "" p k) (if ssd (upd_dim ssd)))
   (progn (if ssd (upd_dim ssd)) (command "scale" ss "" p k))
)
(princ)
)
;;;-------------------------------------------------------------

 

Chào bác SSG.

Em cảm ơn bác đã giúp em, cái lisp rất hay, nó đã scc đúng tất cả như em muốn. Nhưng đúng như lời bác nói nó ko thể làm tốt khi bản vẽ có nhiều Dimension style, có lẽ lần sau em sẽ hạn chế các Dimension style.

 

Rất cảm ơn bác.

 

Chúc bác luôn luôn vui vẻ với những gì đã chia sẻ với mọi ngườ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
ssg    1.088
Chào bác SSG.

Em cảm ơn bác đã giúp em, cái lisp rất hay, nó đã scc đúng tất cả như em muốn. Nhưng đúng như lời bác nói nó ko thể làm tốt khi bản vẽ có nhiều Dimension style, có lẽ lần sau em sẽ hạn chế các Dimension style.

 

Rất cảm ơn bác.

 

Chúc bác luôn luôn vui vẻ với những gì đã chia sẻ với mọi người.

Mời bạn sang đây:

 

http://www.cadviet.com/forum/index.php?showtopic=9561

 

Lệnh SCC đã hoàn thiện, chấp nhận Multi-Dimstyle, kèm theo một số bonus khác nữa...

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ộ Thiên    133
Mời bạn sang đây:

 

http://www.cadviet.com/forum/index.php?showtopic=9561

 

Lệnh SCC đã hoàn thiện, chấp nhận Multi-Dimstyle, kèm theo một số bonus khác nữa...

Lúc trước trong topic fakedim mình cũng có 1 chút suy nghĩ về vấn đề này nhưng khi nghĩ đến yếu tố "khoảng cách từ đường kích thước đến Object" thì nản (tạm đặt là biến Ldim nào đó đi).

Bởi lúc đầu các Object ở tỷlệ x nào đó Ldim = 8 --> 10mm (đơn vị giấy), cái này tuỳ người vẽ.

Sau khi scale lên thì liệu giá trị Ldim nó có còn giữ nguyên đc hay kg?

Nếu giải quyết đc vấn đề này thì còn tiếp phải xử lý ở lớp Dim thứ 2, 3...liệu vị trí các lớp dim này có chính xác chưa?

 

Kg biết Bác SSG đã có hướng giải quyết vấn đề này chưa?

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
ssg    1.088
Lúc trước trong topic fakedim mình cũng có 1 chút suy nghĩ về vấn đề này nhưng khi nghĩ đến yếu tố "khoảng cách từ đường kích thước đến Object" thì nản (tạm đặt là biến Ldim nào đó đi).

Bởi lúc đầu các Object ở tỷlệ x nào đó Ldim = 8 --> 10mm (đơn vị giấy), cái này tuỳ người vẽ.

Sau khi scale lên thì liệu giá trị Ldim nó có còn giữ nguyên đc hay kg?

Nếu giải quyết đc vấn đề này thì còn tiếp phải xử lý ở lớp Dim thứ 2, 3...liệu vị trí các lớp dim này có chính xác chưa?

 

Kg biết Bác SSG đã có hướng giải quyết vấn đề này chưa?

Ssg chưa đặt vấn đề này ra bao giờ, vì thật sự ssg rất ít khi có nhu cầu. Nếu phải sử dụng SCC thì chỉ thực hiện cho một vài hình đơn giản, trong vài trường hợp bất đắc dĩ nào đó, vị trí Dim mình tự xử bằng tay.

 

Nếu cần, bạn thử làm theo hướng sau đây xem sao. Tham khảo hình vẽ sau:

DXF_Dim.jpg

 

Bình thường, nếu để yên như vậy, khi chạy Scale với tỷ lệ k chẳng hạn (SCC thực chất là dùng Scale), khoảng cách L sẽ bị co dãn tương ứng theo k.

Dim được định vị bằng các điểm p1, p2, p3 (là các điểm do user pick khi chạy lệnh Dim). Các mã DXF tương ứng của chúng là 13, 14, 11. Trước khi chạy scale, ta làm trước các động tác sau:

1. Lấy toạ độ p1, p2, p3

2. Xác định vị trí điểm p4 (vuông góc với p1p2 từ p3)

3. Tính L1 = L/k -> xác định được điểm p5

4. Subst data và Entmod cho p3 về p5

Kết quả: sau khi scale, khoảng cách từ dim đến đường p1p2 sẽ đúng bằng L như ban đầu.

Cách thức này chỉ dùng được nếu các điểm p1, p2 của Dim còn nằm trên đối tượng. Nếu đã bị edit (cắt chân đi) thì... bó tay!

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
kts_k80    3
Lý do: Ssg luôn luôn ủng hộ cách vẽ theo kích thước thật của đối tượng. Khi cần thể hiện nhiều tỷ lệ trong 1 bản vẽ thì dùng layout. Các thao tác scale hình rồi sửa dim là việc làm không khuyến khích.

Có lẽ mình quá cực đoan chăng?

;-----------

Tôi cũng thấy đồng ý với ý kiến của bạn ssg. Trong một trường hợp khác, ví dụ bản vẽ tl1/100, thấy giấy còn trống quá, muốn chèn chi tiết tỉ lệ 1/20, mà chi tiết ấy được tuân thủ vẽ theo tỉ lệ thực, nên nó bé tí ti, đành phải phóng to lên, gấp 5 lần.

Trường hợp thứ nhất, chưa ghi kích thước cho hình vẽ, Việc phóng to gấp 5 lần cái hình vẽ giá trị khi ghi kích thước sẽ to gấp 5 lần, còn hình dạng của chi tiết tạo nên kích thước không đổi. Như vậy, chỉ sửa một biến của dim thôi. (dimlfac)

Trường hợp thứ hai, hình vẽ tl 1/20 đã ghi kích thước với kiểu phù hợp, thì ngoài sửa biến trên, cần sửa thêm một biến nữa. (dimscale)

Việc dùng layout khi vẽ cad thì riêng tôi thấy ...không khoái lắm, nếu chỉ là bản vẽ 2d.

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
quansla    232

Bạn nên tìm hiểu cách dùng layout đi, với việc sử dụng nhìu tỷ lệ thì layout là có lợi 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
only102    15

Em nhờ các bác viết hộ em một Lisp về scale

trong cad có lệnh sc nhưng sử dụng lệnh đó không thể giữ nguyên các kích thước mà nó bị thay đổi theo tỉ lệ scale, khi scale nhỏ lại nó sẽ bị các đường ghi KT che kín hết, khi đó phải đi ghi lại KT

trong diễn đàn có lisp scc nhưng nó không scale các đường kthước và cỡ chữ ghi trên đó, sũng như lệnh trên khi scale nhỏ lại nó sẽ bị các đường ghi KT che kín hết, khi đó phải đi ghi lại KT

Em muốn các bác giúp em scale mà toàn bộ mọi loại đường, chữ số, mũi tên nghi KT, ... đều theo tỉ lệ scale đã chọn

Em xin chân thành cảm ơn.

Chao ban 'ui_troi_2005'

Theo mình hiểu thì bạn muốn scale bản vẽ nhỏ xuống mà vẫn giữ nguyên giá trị kích thước, tỷ lệ của text dim với bản vẽ vẫn giữ nguyên.

Vậy bạn có thể sử dụng ngay các phương pháp hiệu chỉnh trong cad mà cũng chẳng tốn công tẹo nào.

Bạn hãy cứ scale toàn bộ bản vẽ, ví dụ 1/10, sau đó vào dimstyle trong "Fit" trong mục "Use overall scale of" bạn cho nhỏ xuống 10 lần. Rồi chuyển sang "Primary Units" trong mục "Measurement scale" bạn đặt Scale factor là 0.1. Mọi thứ sẽ như ý bạn muố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  

×