Đến nội dung


Hình ảnh
- - - - -

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


  • Please log in to reply
15 replies to this topic

#1 pawuta

pawuta

    biết lệnh move

  • Members
  • PipPipPip
  • 126 Bài viết
Điểm đánh giá: -12 (hơi kém)

Đã gửi 09 June 2015 - 11:53 PM

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.c...viet_lisp_2.dwg

 


  • 0

#2 quocmanh04tt

quocmanh04tt

    biết lệnh imageclip

  • Members
  • PipPipPipPipPipPipPip
  • 673 Bài viết
Điểm đánh giá: 314 (khá)

Đã gửi 10 June 2015 - 03:18 AM

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


  • 1

#3 pawuta

pawuta

    biết lệnh move

  • Members
  • PipPipPip
  • 126 Bài viết
Điểm đánh giá: -12 (hơi kém)

Đã gửi 10 June 2015 - 08:44 AM

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é!


  • 0

#4 pawuta

pawuta

    biết lệnh move

  • Members
  • PipPipPip
  • 126 Bài viết
Điểm đánh giá: -12 (hơi kém)

Đã gửi 10 June 2015 - 05:43 PM

Mọi người chỉnh lisp lại giúp mình cái! Thanks!


  • 0

#5 ketxu

ketxu

    Copier - Paster - Editor

  • Moderator
  • PipPipPipPipPipPipPip
  • 5682 Bài viết
Điểm đánh giá: 2605 (tuyệt vời)

Đã gửi 10 June 2015 - 06:49 PM

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


  • 0

Thành viên nhóm CadMagic.
Mời bạn ghé thăm facebook nhóm - Page viết lisp theo yêu cầu  :
CAD MAGIC


#6 pawuta

pawuta

    biết lệnh move

  • Members
  • PipPipPip
  • 126 Bài viết
Điểm đánh giá: -12 (hơi kém)

Đã gửi 10 June 2015 - 07:57 PM

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!


  • 0

#7 quocmanh04tt

quocmanh04tt

    biết lệnh imageclip

  • Members
  • PipPipPipPipPipPipPip
  • 673 Bài viết
Điểm đánh giá: 314 (khá)

Đã gửi 10 June 2015 - 08:26 PM

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


  • 0

#8 pawuta

pawuta

    biết lệnh move

  • Members
  • PipPipPip
  • 126 Bài viết
Điểm đánh giá: -12 (hơi kém)

Đã gửi 10 June 2015 - 09:19 PM

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!


  • 0

#9 quocmanh04tt

quocmanh04tt

    biết lệnh imageclip

  • Members
  • PipPipPipPipPipPipPip
  • 673 Bài viết
Điểm đánh giá: 314 (khá)

Đã gửi 10 June 2015 - 09:26 PM

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?


  • 1

#10 pawuta

pawuta

    biết lệnh move

  • Members
  • PipPipPip
  • 126 Bài viết
Điểm đánh giá: -12 (hơi kém)

Đã gửi 10 June 2015 - 09:42 PM

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!


  • 0

#11 quocmanh04tt

quocmanh04tt

    biết lệnh imageclip

  • Members
  • PipPipPipPipPipPipPip
  • 673 Bài viết
Điểm đánh giá: 314 (khá)

Đã gửi 10 June 2015 - 09:44 PM

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


  • 0

#12 pawuta

pawuta

    biết lệnh move

  • Members
  • PipPipPip
  • 126 Bài viết
Điểm đánh giá: -12 (hơi kém)

Đã gửi 10 June 2015 - 10:07 PM

Ồ...! 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!


  • -1

#13 quocmanh04tt

quocmanh04tt

    biết lệnh imageclip

  • Members
  • PipPipPipPipPipPipPip
  • 673 Bài viết
Điểm đánh giá: 314 (khá)

Đã gửi 10 June 2015 - 10:17 PM

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


  • 0

#14 pawuta

pawuta

    biết lệnh move

  • Members
  • PipPipPip
  • 126 Bài viết
Điểm đánh giá: -12 (hơi kém)

Đã gửi 10 June 2015 - 10:33 PM

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


  • 0

#15 quocmanh04tt

quocmanh04tt

    biết lệnh imageclip

  • Members
  • PipPipPipPipPipPipPip
  • 673 Bài viết
Điểm đánh giá: 314 (khá)

Đã gửi 10 June 2015 - 10:50 PM

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


  • 0

#16 pawuta

pawuta

    biết lệnh move

  • Members
  • PipPipPip
  • 126 Bài viết
Điểm đánh giá: -12 (hơi kém)

Đã gửi 10 June 2015 - 10:58 PM

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é!


  • 0