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

Nhờ viết lisp chuyển Style Text và Dim nhanh

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

Chào anh em!

Nhờ ae viết giúp mình lisp về style text và style dim cụ thể như sau:

Hiện bản vẽ mình có các Dim style: DIM 1-1; DIM 1-100; DIM 1-50.....và có các Text style: TEXT GHI CHU; TEXT TIEU DE; TEXT DIM....

1. Khi mình chọn các Dimension trên bản vẽ (1 hoặc nhiều dimstyle), đánh lệnh D100 thì các Dim này chuyển về dimstyle DIM 1-100; và có thể đánh lệnh trước hoặc chọn các Dim để thay đổi, hoặc nhấn enter để dimstyle DIM 1-100 làm hiện hành. Tương tự với D50, D1....

2. Khi mình chọn các Text, Mtext trên bản vẽ (1 hoặc nhiều textstyle), đánh lệnh TGC thì các Text này chuyển về textstyle TEXT GHI CHU; và có thể đánh lệnh trước rồi chọn các text hoặc enter để textstyle TEXT CHI CHU làm hiện hành.

Mong anh em hiểu ý và giúp đỡ, cảm ơn trước nha!!

Bản vẽ minh hoạ: http://www.cadviet.com/upfiles/4/136880_nho_viet_lisp_2.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

Không biết có đúng ý bạn không?

(vl-load-com)
(defun change_dt_style (stl dim / ss adoc)
(or adoc (setq adoc (vla-get-activedocument (vlax-get-acad-object))))
(if (not (tblsearch (if dim "DIMSTYLE" "STYLE") stl))
(alert (strcat (if dim "Dimension style < " "Text style < ") stl " > is not found in current drawing!"))
(if (progn (princ (strcat (if dim "\nSelect Dimension to change to Dimension Style: <"
"\nSelect Text, Mtext to change to Text Style: <") stl ">"))
(if dim (ssget "_:L" '((0 . "*DIMENSION")))
(ssget "_:L" '((0 . "*TEXT")))))
(progn (vla-startundomark adoc)
(vlax-for x (setq ss (vla-get-activeselectionset adoc))
(vla-put-stylename x stl))
(vla-delete ss)
(vla-endundomark adoc))
(if dim (vla-put-activedimstyle adoc (vla-item (vla-get-dimstyles adoc) stl))
(vla-put-activetextstyle adoc (vla-item (vla-get-textstyles adoc) stl))))))
(defun c:D100 () (change_dt_style "DIM 1-100" t) (princ))
(defun c:TGC () (change_dt_style "TEXT GHI CHU" nil) (princ))
  • 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

Không biết có đúng ý bạn không?

(vl-load-com)

(defun change_dt_style (stl dim / ss adoc)

(or adoc (setq adoc (vla-get-activedocument (vlax-get-acad-object))))

(if (not (tblsearch (if dim "DIMSTYLE" "STYLE") stl))

(alert (strcat (if dim "Dimension style < " "Text style < ") stl " > is not found in current drawing!"))

(if (progn (princ (strcat (if dim "\nSelect Dimension to change to Dimension Style: <"

"\nSelect Text, Mtext to change to Text Style: <") stl ">"))

(if dim (ssget "_:L" '((0 . "*DIMENSION")))

(ssget "_:L" '((0 . "*TEXT")))))

(progn (vla-startundomark adoc)

(vlax-for x (setq ss (vla-get-activeselectionset adoc))

(vla-put-stylename x stl))

(vla-delete ss)

(vla-endundomark adoc))

(if dim (vla-put-activedimstyle adoc (vla-item (vla-get-dimstyles adoc) stl))

(vla-put-activetextstyle adoc (vla-item (vla-get-textstyles adoc) stl))))))

(defun c:D100 () (change_dt_style "DIM 1-100" t) (princ))

(defun c:TGC () (change_dt_style "TEXT GHI CHU" nil) (princ))

Cảm ơn bạn nhiều nhé, phần DIM thì oke rồi; còn phần text thì khi gán mình muốn chiều cao và rộng chữ lấy theo Style text luôn bạn ơi! sửa giúp mình xíu nữa 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

Có thanh toolbar, có ribbon, có bảng thuộc tính, k hiểu sao bạn phải đau đầu để nghĩ cách đơn giản 1 việc vốn dĩ đã cực kỳ đơn giản này ^^ Gluck

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

Thanks ketxu đã góp ý, do mình thao tác về các style nhiều (chỉnh sửa bản vẽ) mà màn hình mình làm việc không được lớn nên khi làm mình tắt hết các thanh hỗ trợ và chỉ sử dụng lệnh là chủ yếu. Có lẻ mình đã quá lạm dụng lisp, mò hoài mà không ra mới lên nhờ vả anh em, cảm ơn! Chúc thành cô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

Không hay lắm, nhưng nếu bạn cần thì:

Thêm dòng này:(if (not dim)  (progn (vla-put-height x (vlax-get-property (vlax-ename->vla-object (tblobjname "STYLE" stl)) 'height))  (vla-put-scalefactor x (vlax-get-property (vlax-ename->vla-object (tblobjname "STYLE" stl)) 'width)))) Ngay sau dòng : (vla-put-stylename x stl).

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

Không hay lắm, nhưng nếu bạn cần thì:

Thêm dòng này:(if (not dim)  (progn (vla-put-height x (vlax-get-property (vlax-ename->vla-object (tblobjname "STYLE" stl)) 'height))  (vla-put-scalefactor x (vlax-get-property (vlax-ename->vla-object (tblobjname "STYLE" stl)) 'width)))) Ngay sau dòng : (vla-put-stylename x stl).

Thanks bạn nhé, nhưng vẫn không được 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

Tại sao không được? mình test ok rồi mà. Chú ý: Ở sau dòng: (vla-put-stylename x stl) , chỉ có 1 dấu ). Chính xác như hướng dẫn. Có nghĩa là: Bạn copy dòng ở trên và paste vào giữa hai dấu )) của: (vla-put-stylename x stl)). Giải thích hơi lôm côm, ko biết bạn có hiểu không?

  • 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ại sao không được? mình test ok rồi mà. Chú ý: Ở sau dòng: (vla-put-stylename x stl) , chỉ có 1 dấu ). Chính xác như hướng dẫn. Có nghĩa là: Bạn copy dòng ở trên và paste vào giữa hai dấu )) của: (vla-put-stylename x stl)). Giải thích hơi lôm côm, ko biết bạn có hiểu không?

Oke, mình sơ ý, hehe, cảm ơn bạn rất nhiều nhiều, bạn có ở tphcm không mình sẽ hậu tạ, cảm ơn Cadviet!

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

Ồ...! Không. Mình ko ở trỏng.

Oh, hehe, cảm ơn bạn đã nhiệt tình nhé, tiện bạn có thể viết giúp mình một code dùng để kết hợp các lệnh của lisp thành 1 lệnh được không, là khi đánh một lệnh là nó sẽ tự chạy hết các lệnh mà mình đặt trong các lisp!

  • Vote giảm 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

Mình chưa hiểu. Có phải là tự động load các file lisp?

Ví dụ mình có lisp tạo layer đặt tên là: TLA, lisp tạo dimstyle: TDI, lisp tạo textstyle: TTE; giờ mình muốn đánh một lệnh TST là nó sẽ tự load các lisp đó 1 lần 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

Nếu vậy, thì đơn giản thế này: (defun c:TST () (C:TLA)(C:TDI)(C:TTE)).

haha, zậy mà mình mò hoài cứ dùng (commend " "), cảm ơn người anh em nhiều nhé! mình tên Tài, hiện đang làm ở Tp.hcm, làm quen với bạn 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

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  

×