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.
proconeng86

[yêu cầu] lisp scale dynamic block để áp dụng cho chuyển tỉ lệ bản vẽ

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

Công việc của mình đa phần vẽ trên model, khi phải chuyển 1 bản vẽ sang 1 tỉ lệ mới hay chuyển sang khung mới mất rất nhiều thời gian.

với các đối tượng là text hoặc dim thì chuyển rất nhanh rồi, không có vấn đề gì hết, riêng thằng dynamic block thì rất vất vả, nếu chọn tất cả và scale thì nó chạy lung tung mất, mình toàn phải scale từng thằng một nên mất khá nhiều thời gian

Do đó mình nhờ các bạn viết hộ mình 1 lisp để có thể scale dynamic block theo điểm gốc của từng cái, cụ thể lisp như sau:

 - đưa ra lựa chọn các dynamic block cần scale

 - tự động scale tất cả các dynamic block đã chọn heo điểm gốc của chúng

 - kết thúc lệnh

Mình xin 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

Chắc là vậy?


; Doan Van Ha - CadViet.com - ngay 16/5/2014
; Chuc nang: Scale Dynamic Blocks at Center.
(defun C:HA (/ ss ent obj i)
 (vl-load-com)
 (if (not *tl*) (setq *tl* 1.0))
 (initget 6)
 (setq tl (getreal (strcat "\nHe so Scale <" (rtos *tl* 2) ">: ")))
 (if (not tl) (setq tl *tl*) (setq *tl* tl))
 (princ "\nChon cac Block can Scale...")
 (setq ss (ssget '((0 . "INSERT"))) i -1)
 (while (< (setq i (1+ i)) (sslength ss))
  (setq ent (ssname ss i))
  (if (and (eq (vla-get-IsDynamicBlock (vlax-ename->vla-object ent)) :vlax-true) (/= tl 1))
   (command "scale" ent "" (cdr (assoc 10 (entget ent))) tl))))
 

  • Vote tăng 4

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ông việc của mình đa phần vẽ trên model, khi phải chuyển 1 bản vẽ sang 1 tỉ lệ mới hay chuyển sang khung mới mất rất nhiều thời gian.

với các đối tượng là text hoặc dim thì chuyển rất nhanh rồi, không có vấn đề gì hết, riêng thằng dynamic block thì rất vất vả, nếu chọn tất cả và scale thì nó chạy lung tung mất, mình toàn phải scale từng thằng một nên mất khá nhiều thời gian

Do đó mình nhờ các bạn viết hộ mình 1 lisp để có thể scale dynamic block theo điểm gốc của từng cái, cụ thể lisp như sau:

 - đưa ra lựa chọn các dynamic block cần scale

 - tự động scale tất cả các dynamic block đã chọn heo điểm gốc của chúng

 - kết thúc lệnh

Mình xin chân thành cám ơn

Hề hề hề,

Hãy gửi bản vẽ chứa các dynamic block cần scale lên và một bản vẽ thể hiện ví dụ kết quả bạn cần 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

Chắc là vậy?


; Doan Van Ha - CadViet.com - ngay 16/5/2014
; Chuc nang: Scale Dynamic Blocks at Center.
(defun C:HA (/ ss ent obj i)
 (vl-load-com)
 (if (not *tl*) (setq *tl* 1.0))
 (initget 6)
 (setq tl (getreal (strcat "\nHe so Scale <" (rtos *tl* 2) ">: ")))
 (if (not tl) (setq tl *tl*) (setq *tl* tl))
 (princ "\nChon cac Block can Scale...")
 (setq ss (ssget '((0 . "INSERT"))) i -1)
 (while (< (setq i (1+ i)) (sslength ss))
  (setq ent (ssname ss i))
  (if (and (eq (vla-get-IsDynamicBlock (vlax-ename->vla-object ent)) :vlax-true) (/= tl 1))
   (command "scale" ent "" (cdr (assoc 10 (entget ent))) tl))))
 

 

Cám ơn bạn Ha nhiều lắm, lisp của bạn đúng ý mình rồi nhưng bạn xem lại hộ mình chút là điểm gốc lúc nó đổi lúc nó không đổi vị trí. mình muốn điểm gốc của nó không thay đổi vị trí

block của mình trong file đính kèm

http://www.cadviet.com/upfiles/3/9928_scale_khung.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

Hề hề hề,

Hãy gửi bản vẽ chứa các dynamic block cần scale lên và một bản vẽ thể hiện ví dụ kết quả bạn cần có.

 

mình gửi file ở comment trên rồ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

Cám ơn bạn Ha nhiều lắm, lisp của bạn đúng ý mình rồi nhưng bạn xem lại hộ mình chút là điểm gốc lúc nó đổi lúc nó không đổi vị trí. mình muốn điểm gốc của nó không thay đổi vị trí

block của mình trong file đính kèm

http://www.cadviet.com/upfiles/3/9928_scale_khung.dwg

 

Sao bạn không tạo thêm action Scale cho block dynamic?

  • 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

Sao bạn không tạo thêm action Scale cho block dynamic?

 

Tức ý bạn là khilaaop dynamic block thì cho thêm lựa chọn scale vào ah, như thế khi chuyển khung còn lâu hơn cả gõ lệnh scale bình thường đó.

Giả sử bản vẽ có 100 dynamic block, dùng lệnh scale thông thường làm đến 100 lần đã mệt rồi, chứ dùng lựa chọn scale trong dynamic block ,click chọn cho 100 dynamic block thì còn mệt hơn.

Do đó mới cần lisp scale theo điểm gốc của từng dynamic block

Lisp của bạn Ha mình thấy là tương đối ổn rồi, chỉ có chút lỗi là thi thoảng điểm gốc cứ bị chạy đi khỏi vị trí ban đầu, nếu là block tên dầm thì có thể châm trước được chứ block cốt cao độ thì lại phải move lại. Lisp đó chỉ cần sửa lại chút đó thôi là OK

Chỉnh sửa theo proconeng86

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

Sorry bạn vì mình quên tắt osnap.

Bạn sửa dòng này:

(command "scale" ent "" (cdr (assoc 10 (entget ent))) tl))))

Thành:

(command "scale" ent "" "non" (cdr (assoc 10 (entget ent))) tl))))

  • 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

Sorry bạn vì mình quên tắt osnap.

Bạn sửa dòng này:

(command "scale" ent "" (cdr (assoc 10 (entget ent))) tl))))

Thành:

(command "scale" ent "" "non" (cdr (assoc 10 (entget ent))) tl))))

 

OK, lisp ngon rồi. có cái này khi chuyển khung sẽ nhẹ nhàng hơn nhiều rồi. cám ơn bạn Doan Van Ha nhiều 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ới việc gán action scale vào thì : Dùng quickselect để chọn

Còn việc scale nó thì chỉ có 1 lần thôi. Đó và vào lệnh MO -> chỉnh mục custom 

 

- Có 1 điểm nữa, có thể bạn chưa biết đó là sử dụng lệnh scaletext để hiệu chỉnh chiều cao chữ của Attribute, Text, Mtext hàng loạ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 việc gán action scale vào thì : Dùng quickselect để chọn

Còn việc scale nó thì chỉ có 1 lần thôi. Đó và vào lệnh MO -> chỉnh mục custom 

 

- Có 1 điểm nữa, có thể bạn chưa biết đó là sử dụng lệnh scaletext để hiệu chỉnh chiều cao chữ của Attribute, Text, Mtext hàng loạt 

 

lệnh scale text có thể chỉnh được hết chiều cao attribute nhưng block thì gồm nhiều hình nữa chứ có phải có mỗi attribbbute đâu, đơn cử như cái block cốt cao độ của mình, attribute đổi được chiều cao nhưng hình có đổi tỉ lệ được đâu, như vậy không đúng nữa

còn ý 1 của bạn, bạn nói cụ thể hơn được không, mình vẫn chưa biết gán scale 1 lần là sao

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

lệnh scale text có thể chỉnh được hết chiều cao attribute nhưng block thì gồm nhiều hình nữa chứ có phải có mỗi attribbbute đâu, đơn cử như cái block cốt cao độ của mình, attribute đổi được chiều cao nhưng hình có đổi tỉ lệ được đâu, như vậy không đúng nữa

còn ý 1 của bạn, bạn nói cụ thể hơn được không, mình vẫn chưa biết gán scale 1 lần là sao

 

1. Mình chỉ góp ý có lệnh Scaletext  để hiệu chỉnh hàng loạt chiều cao ATT, text, mtext

2.  Gửi bạn file này

- Bạn chọn block dynamic (có thể dùng Quick select chọn theo tên

- Bấm Ctrol+1 -> Vào Custom -> Chỉnh thông số SCALE

File : https://www.mediafire.com/?2xoc9zkyod63jod

  • 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

1. Mình chỉ góp ý có lệnh Scaletext  để hiệu chỉnh hàng loạt chiều cao ATT, text, mtext

2.  Gửi bạn file này

- Bạn chọn block dynamic (có thể dùng Quick select chọn theo tên

- Bấm Ctrol+1 -> Vào Custom -> Chỉnh thông số SCALE

File : https://www.mediafire.com/?2xoc9zkyod63jod

 

Mình hiểu rồi, cách của bạn rất hay, giờ mình mới biết có cách đó, tuy có thể giải quyết tốt vấn đề của mình nhưng vẫn chậm hơn là dùng lisp

Nay mình học hỏi được rất nhiều. Cám ơn bạn nhiều 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

Mình hiểu rồi, cách của bạn rất hay, giờ mình mới biết có cách đó, tuy có thể giải quyết tốt vấn đề của mình nhưng vẫn chậm hơn là dùng lisp

Nay mình học hỏi được rất nhiều. Cám ơn bạn nhiều nhé

 

Có thể chậm hơn trong cách chọn so với Lisp. Và nó cũng có tác dụng là scale 1 số thứ trong block, một số giữ nguyên (không scale) chẳng hạn...... Và cũng đừng quá lạm dụng vào Lisp!

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

Dù mình đã viết lisp này cho bạn và trong trường hợp của bạn thì dùng lisp có thể nhanh hơn. Tuy nhiên, mình vẫn đồng quan điểm với bác Tue_NV: cái gì có thể dùng cad thì nên dùng cad, đừng quá cậy vào lisp. Bởi lisp đôi khi là con dao 2 lưỡi, nó phụ thuộc vào người viết và người sử dụng nên rất có thể bị sai, trong khi cad thì chuẩn mực hơn nhiề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

Cám ơn các bạn đã góp ý, mỗi cái có ưu nhược điểm riêng, trong quá trình sử dụng thấy cái nào ưu việt hơn, áp dụng tốt hơn trong trường hợp nào thì mình dùng thô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

Chắc là vậy?


; Doan Van Ha - CadViet.com - ngay 16/5/2014
; Chuc nang: Scale Dynamic Blocks at Center.
(defun C:HA (/ ss ent obj i)
 (vl-load-com)
 (if (not *tl*) (setq *tl* 1.0))
 (initget 6)
 (setq tl (getreal (strcat "\nHe so Scale <" (rtos *tl* 2) ">: ")))
 (if (not tl) (setq tl *tl*) (setq *tl* tl))
 (princ "\nChon cac Block can Scale...")
 (setq ss (ssget '((0 . "INSERT"))) i -1)
 (while (< (setq i (1+ i)) (sslength ss))
  (setq ent (ssname ss i))
  (if (and (eq (vla-get-IsDynamicBlock (vlax-ename->vla-object ent)) :vlax-true) (/= tl 1))
   (command "scale" ent "" (cdr (assoc 10 (entget ent))) tl))))
 

 

Bạn Ha ơi, bạn sửa cho mình lisp này chút được không, lisp này áp dụng được cho dynamic block là tốt rồi nhưng mình quên có vài block không phải là dynamic block mà chỉ là block thuộc tính thôi, nên không dùng được lisp này của bạn. bạn sửa giúp mình chút nhé

Mình cám ơn nhiề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

Bạn Ha ơi, bạn sửa cho mình lisp này chút được không, lisp này áp dụng được cho dynamic block là tốt rồi nhưng mình quên có vài block không phải là dynamic block mà chỉ là block thuộc tính thôi, nên không dùng được lisp này của bạn. bạn sửa giúp mình chút nhé

Mình cám ơn nhiều

 

Chắc bạn Ha đang bận j rồi, có bạn nào giúp mình cái,Mình cám ơn nhiề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

Bạn sửa 2 dòng này:

(if (and (eq (vla-get-IsDynamicBlock (vlax-ename->vla-object ent)) :vlax-true) (/= tl 1))

(command "scale" ent "" (cdr (assoc 10 (entget ent))) tl))))

 

Thành 2 dòng này:

(if (/= tl 1)

(command "scale" ent "" "non" (cdr (assoc 10 (entget ent))) tl))))

  • 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

Bạn sửa 2 dòng này:

(if (and (eq (vla-get-IsDynamicBlock (vlax-ename->vla-object ent)) :vlax-true) (/= tl 1))

(command "scale" ent "" (cdr (assoc 10 (entget ent))) tl))))

 

Thành 2 dòng này:

(if (/= tl 1)

(command "scale" ent "" "non" (cdr (assoc 10 (entget ent))) tl))))

 

Ok rồi, cám ơn bạn Ha nhiều nhé. Chúc bạn mạnh khỏe công tác tố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

Cái này rất hay nhưng có điều là khi block đó đã scale tỷ lệ sẵn là 50, khi muốn scale lên tỷ 75 thì phải tính xem hệ số 75/50 bao nhiêu. Nếu chia số lẻ thì sợ k chính xác. Mình muốn nhập luôn tỷ lệ cần scale. Ví dụ nhập tỷ lệ 50 thì scale đúng tỷ lệ 50. Cám ơn ad

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


×