Đến nội dung


Hình ảnh
- - - - -

[yêu cầu] Lisp thay đổi chiều cao text của dimstyle cực nhanh !


  • Please log in to reply
46 replies to this topic

#1 hanam1210

hanam1210

    biết vẽ pline

  • Members
  • PipPip
  • 61 Bài viết
Điểm đánh giá: 1 (bình thường)

Đã gửi 30 August 2011 - 08:02 AM

Em hay phải chỉnh sửa các bản vẽ có sẵn, nhiều khi bản vẽ cũ dim với chiều cao text ko cao bằng các text khác, mình phải thay đổi chiều cao text. mà nó có rất nhiều dimstyle với các tỷ lệ khác nhau. Công việc của e có tính chất lặp lại, thiết nghĩ, nếu ADMIN viết giúp em dòng lisp để hỗ trợ công việc của e thì sẽ nhanh hơn rất nhiều. Cụ thể, khi chạy lisp, em chỉ cần tích vào 1 Dim thuộc 1 DIMSTYLE nào đó, và lisp yêu cầu nhập chiều cao chữ, ta nhập vào và chiều cao chữ của dimstyle sẽ cao bằng giá trị vừa nhập đó.
Command: Hdim
select object: " Chọn vào 1 dim, giả sử thuộc kiểu dimstyle A"
Chieu cao text: 2.00
exit command : chiều cao text của Dimstyle A đã được thay đổi thành 2.0
Cảm ơn các bác đã quan tâm !
  • 1

#2 Tue_NV

Tue_NV

    KS Võ Quang Tuệ

  • Moderator
  • PipPipPipPipPipPipPip
  • 4296 Bài viết
Điểm đánh giá: 3804 (đỉnh cao)

Đã gửi 30 August 2011 - 08:07 AM

Em hay phải chỉnh sửa các bản vẽ có sẵn, nhiều khi bản vẽ cũ dim với chiều cao text ko cao bằng các text khác, mình phải thay đổi chiều cao text. mà nó có rất nhiều dimstyle với các tỷ lệ khác nhau. Công việc của e có tính chất lặp lại, thiết nghĩ, nếu ADMIN viết giúp em dòng lisp để hỗ trợ công việc của e thì sẽ nhanh hơn rất nhiều. Cụ thể, khi chạy lisp, em chỉ cần tích vào 1 Dim thuộc 1 DIMSTYLE nào đó, và lisp yêu cầu nhập chiều cao chữ, ta nhập vào và chiều cao chữ của dimstyle sẽ cao bằng giá trị vừa nhập đó.
Command: Hdim
select object: " Chọn vào 1 dim, giả sử thuộc kiểu dimstyle A"
Chieu cao text: 2.00
exit command : chiều cao text của Dimstyle A đã được thay đổi thành 2.0
Cảm ơn các bác đã quan tâm !

Nếu thay đổi toàn bộ chiều cao chữ của Dimstyle A -> Bạn sử dụng lệnh Dimstyle (tắt là DST)
Nếu thay đổi 1 số chiều cao chữ Dimstyle nào đó -> Bạn có thể sử dụng lệnh DIMOVERRIDE (tắt là DOV)
  • 1

#3 ketxu

ketxu

    Copier - Paster - Editor

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

Đã gửi 30 August 2011 - 09:05 AM

Công việc của e có tính chất lặp lại, thiết nghĩ, nếu ADMIN viết giúp em dòng lisp để hỗ trợ công việc của e thì sẽ nhanh hơn rất nhiều.
Cảm ơn các bác đã quan tâm !

Một dòng thì khó lắm bạn ạ :)

(defun c:hdim (/ ent dstyle )(setq ent (car (entsel "\n Pick dim :")) dstyle (cdr (assoc 3 (entget ent))))(command "DIMSTYLE" "R" dstyle)(setvar "DIMTXT" (getreal "\n Text Height :"))(command "DIMSTYLE" "S" dstyle "Y"))

P/S : với lại, ADMIN là bác chỉ ai vậy :|
  • 7

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


#4 hanam1210

hanam1210

    biết vẽ pline

  • Members
  • PipPip
  • 61 Bài viết
Điểm đánh giá: 1 (bình thường)

Đã gửi 30 August 2011 - 11:04 AM

Một dòng thì khó lắm bạn ạ :)

(defun c:hdim (/ ent dstyle )(setq ent (car (entsel "\n Pick dim :")) dstyle (cdr (assoc 3 (entget ent))))(command "DIMSTYLE" "R" dstyle)(setvar "DIMTXT" (getreal "\n Text Height :"))(command "DIMSTYLE" "S" dstyle "Y"))

P/S : với lại, ADMIN là bác chỉ ai vậy :|

hi ! Được rùi ạ ! Em cảm ơn bác KETXU Nhé, thì các bác viết lisp giúp e thì e gọi là ADMIN ạ ! hì.Em có j sai sót mong các bác bỏ qua nhé ! Thanks !
  • 0

#5 tinya1225

tinya1225

    biết lệnh copy

  • Members
  • PipPipPip
  • 114 Bài viết
Điểm đánh giá: 34 (tàm tạm)

Đã gửi 30 August 2011 - 11:48 AM

hi ! Được rùi ạ ! Em cảm ơn bác KETXU Nhé, thì các bác viết lisp giúp e thì e gọi là ADMIN ạ ! hì.Em có j sai sót mong các bác bỏ qua nhé ! Thanks !

Cám ơn = thanks + là ok nhất bạn ah. Mà chưa thấy bạn thanks + cho KETXU thi phải. Phụ lòng người ta quá.
@ketxu bạn ơi sao mình làm thì nó hiện:

Command:
Text Height :1000
DIMSTYLE
Current dimension style: Standard Annotative: No
Current dimension overrides:
DIMTXT 1000.0000
Enter a dimension style option
[ANnotative/Save/Restore/STatus/Variables/Apply/?] <Restore>: S
Enter name for new dimension style or [?]: Standard
That name is already in use, redefine it? <N>:Y
Command: nil

có vấn đề j thế. Mà mỗi lần chỉ làm đc 1 dim thôi, mong bạn mở rộng thêm 1 lần có thể làm với nhiều dim nhé.
  • 1
Thấy bài có ích thì ấn thật nhiều Thank + các bác nhé^^

#6 phamthanhbinh

phamthanhbinh

    biết lệnh adcenter

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

Đã gửi 30 August 2011 - 01:42 PM

hi ! Được rùi ạ ! Em cảm ơn bác KETXU Nhé, thì các bác viết lisp giúp e thì e gọi là ADMIN ạ ! hì.Em có j sai sót mong các bác bỏ qua nhé ! Thanks !

Hề hề hề. sáng tạo, sáng tạo, sáng sáng tạo
Vậy là từ điển Cadviet sẽ có thêm một nghĩa mới của từ ADMIN: các bác viết lisp thì gọi là ADMIN
Hề hề hề, oai như cóc nhể.?????? Mình bắt chước bạn một tí nhé
hay là thêm từ này : các bác viết lisp thì gọi là LISPMIN
Hề hề hề,...
  • 3
Chúc các quý Anh trên diễn đàn luôn khỏe, đẻ thêm được nhiều thứ để mót.

#7 Quang Duc Ha

Quang Duc Ha

    biết vẽ pline

  • Members
  • PipPip
  • 67 Bài viết
Điểm đánh giá: 7 (bình thường)

Đã gửi 30 August 2011 - 03:50 PM

Cảm ơn bác ketxu rất nhiều. Đúng là "một người viết cả diễn đàn được nhờ". Thaks + bác ketxu cái!
  • 1

#8 ketxu

ketxu

    Copier - Paster - Editor

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

Đã gửi 30 August 2011 - 10:01 PM

Mà mỗi lần chỉ làm đc 1 dim thôi, mong bạn mở rộng thêm 1 lần có thể làm với nhiều dim nhé.

Làm dâu trăm họ :)
Thôi thì theo cái lisp cũ, mình viết thêm vài kiểu nữa cho chắc :
1. Change cho toàn bộ DimStyle trong bản vẽ :
(defun c:hdima (/ table tH)
(grtext -1 "Free lisp from Cadviet @Ketxu")
(command "undo" "be")
(defun table (s / d r)
(while (setq d (tblnext s (null d)))
(setq r (cons (cdr (assoc 2 d)) r))
)
)
(setq tH (getreal "\n Text Height :"))
(setvar "cmdecho" 0)
(mapcar '(lambda(x)(command "DIMSTYLE" "R" x)(setvar "DIMTXT" tH)(command "DIMSTYLE" "S" x "Y")) (table "DIMSTYLE"))
(command "undo" "en"))
2. Pick đến đâu change đến đó :
(defun c:hdimb (/ lstDstyle tH ent dstyle)
(grtext -1 "Free lisp from Cadviet @Ketxu")
(command "undo" "be")
(setvar "cmdecho" 0)
(setq tH (getreal "\n Text Height :"))
(while (setq ent (car (entsel "\n Pick dim :")))
(if (setq dstyle (cdr (assoc 3 (entget ent))))
(if (not (vl-position dstyle lstDstyle))
(progn
(setq lstDstyle (cons dstyle lstDstyle))
(command "DIMSTYLE" "R" dstyle)(setvar "DIMTXT" tH)(command "DIMSTYLE" "S" dstyle "Y")
)
(princ "\nAlready Dimension Style Picked")
)
)
)
(command "undo" "en")
)
3. Chọn 1 loạt rồi change :
(defun c:hdimc (/ lstDstyle tH i ss ent dstyle)
(grtext -1 "Free lisp from Cadviet @Ketxu")
(command "undo" "be")
(setvar "cmdecho" 0)
(setq tH (getreal "\n Text Height :") i 0 ss (ssget (list (cons 0 "DIMENSION"))))
(while (setq ent (ssname ss i))
(if (setq dstyle (cdr (assoc 3 (entget ent))))
(if (not (vl-position dstyle lstDstyle))
(progn
(setq lstDstyle (cons dstyle lstDstyle))
(command "DIMSTYLE" "R" dstyle)(setvar "DIMTXT" tH)(command "DIMSTYLE" "S" dstyle "Y")
)
)
)
(setq i (1+ i))
)
(command "undo" "en")
)

Cảm ơn bác ketxu rất nhiều. Đúng là "một người viết cả diễn đàn được nhờ". Thaks + bác ketxu cái!

Đó là công việc mà mọi người trên diễn đàn đang cố gắng làm và chia sẻ bạn à :)
  • 8

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


#9 girl

girl

    biết vẽ spline

  • Members
  • PipPip
  • 92 Bài viết
Điểm đánh giá: 5 (bình thường)

Đã gửi 24 November 2011 - 04:15 PM

Lisp này rất hữu ích, Nhưng có 1 vấn đề rất to thế này ạ ! đó là với các dimstyle mà có đặt cái "Use overal scale" = a thì Lisp phải tự động tính đến giá trị đó chứ ạ ? tức là với Dimstyle đó thì H=chiều cao nhập vào / a ( sao cho đầu ra vẫn là H ) . Hiện tại lisp chưa xét đến trường hợp đó, do vậy đầu ra của chiều cao chữ chưa đảm bảo. Mong bác KETXU update để anh em cùng dùng ạ !
  • 0

#10 phamthanhbinh

phamthanhbinh

    biết lệnh adcenter

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

Đã gửi 24 November 2011 - 06:57 PM

Lisp này rất hữu ích, Nhưng có 1 vấn đề rất to thế này ạ ! đó là với các dimstyle mà có đặt cái "Use overal scale" = a thì Lisp phải tự động tính đến giá trị đó chứ ạ ? tức là với Dimstyle đó thì H=chiều cao nhập vào / a ( sao cho đầu ra vẫn là H ) . Hiện tại lisp chưa xét đến trường hợp đó, do vậy đầu ra của chiều cao chữ chưa đảm bảo. Mong bác KETXU update để anh em cùng dùng ạ !

Hề hề hề,
Bạn girl thử nhét thêm cái thằng cu này (setvar "dimscale" 1.0000) vào sau đít thằng (setvar "DIMTXT" tH) rồi thử lại coi có ưng cái bụng không nhé.
Hề hề hề,...
  • 0
Chúc các quý Anh trên diễn đàn luôn khỏe, đẻ thêm được nhiều thứ để mót.

#11 bianxd

bianxd

    Chưa sử dụng CAD

  • Members
  • Pip
  • 2 Bài viết
Điểm đánh giá: 0 (bình thường)

Đã gửi 24 November 2011 - 09:19 PM

Hi! E là thanh viên mới,mong các Sư phụ Adim giúp e với. Công việc của e cũng mới bắt đầu,trong đó e thấy chiều cao Text và Dim khác nhau. Bác Ketxu và mọi người cho e hỏi các lisp này phải bắt đầu sử dụng như thế nao đây. Cụ thể phải vào thanh Command gõ từ đầu thế nao mong các sư phụ Adim chỉ giùm.
Thanks
  • 0

#12 Doan Van Ha

Doan Van Ha

    biết lệnh adcenter

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 5454 Bài viết
Điểm đánh giá: 2626 (tuyệt vời)

Đã gửi 24 November 2011 - 09:40 PM

Hi! E là thanh viên mới,mong các Sư phụ Adim giúp e với. Công việc của e cũng mới bắt đầu,trong đó e thấy chiều cao Text và Dim khác nhau. Bác Ketxu và mọi người cho e hỏi các lisp này phải bắt đầu sử dụng như thế nao đây. Cụ thể phải vào thanh Command gõ từ đầu thế nao mong các sư phụ Adim chỉ giùm.
Thanks


Trước hết bạn phải Load file lisp. Sau đó, tại dòng command bạn nhập vào 5 ký tự tương ứng với 1 trong 3 lệnh mà bạn muốn dùng (5 ký tự đi sau "C:" ở đầu từng file lisp đó).
Thân thương!
  • 1

* Chỉ nên yêu cầu Lisp khi bạn làm việc đó mất cả ngày nhưng họ chỉ viết 1 giờ. Đừng nêu yêu cầu Lisp khi bạn chỉ làm 1 giờ nhưng bắt họ phải mất cả ngày.

* Nhờ viết lisp cũng như đi khám bệnh. Chỉ gởi căn cước và than sắp chết thì không bác sỹ nào cứu sống được.


#13 girl

girl

    biết vẽ spline

  • Members
  • PipPip
  • 92 Bài viết
Điểm đánh giá: 5 (bình thường)

Đã gửi 25 November 2011 - 02:57 AM

thanks anh nhìu ạ !
Lisp chạy lỗi trong trường hợp như ở file này ạ: http://www.cadviet.c.../100651_loi.dwg
Tức là nó làm thay đổi kích thước mũi tên, đường gióng ý ạ. Mình chỉ thay đổi nguyên chiều cao text thôi ạ !
và anh thêm giúp em chức năng nhớ giá trị chiều cao vừa nhập trong file đó( Để từ lần chạy 2 ta chỉ việc enter )

còn một trường hợp này rất khó, em hôm qua không tiện đưa ra, hôm này " Được voi rùi thì tiện thể "Đòi tiên"" hihi. Đó là các DIM nằm trong Blog ý ạ ? Mình làm sao xét đến cả trường hợp blog đó bị scale lên k lần rùi ý. Chiều cao DIM hiển thị cũng bằng giá trị nhập vào. ( em biết cái này rất khó nhưng cứ post lên xem cao cao thủ nào cứu giúp không ạ )
  • 0

#14 ketxu

ketxu

    Copier - Paster - Editor

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

Đã gửi 25 November 2011 - 07:51 AM


còn một trường hợp này rất khó, em hôm qua không tiện đưa ra, hôm này " Được voi rùi thì tiện thể "Đòi tiên"" hihi. Đó là các DIM nằm trong Blog ý ạ ? Mình làm sao xét đến cả trường hợp blog đó bị scale lên k lần rùi ý. Chiều cao DIM hiển thị cũng bằng giá trị nhập vào. ( em biết cái này rất khó nhưng cứ post lên xem cao cao thủ nào cứu giúp không ạ )

- Lỗi : k phải là lỗi, lý do do biến dimscale thay đổi toàn bộ các thiết đặt kích thước của style. Muốn thay đổi kỹ hơn thì bạn phải đi sâu 1 chút nữa vào dimstyle :)
- Trường hợp rất khó bạn nêu : đúng là rất khó, và trả lời giúp bạn luôn là không có cách nào toàn diện cho trượng hợp này( thay đổi 1 block def thì tất cả các block trong bản vẽ đều thay đổi, trong khi tỉ lệ scale là khác nhau) :) Mà dim lại còn nằm trong Blog nữa thì Cad chả biết đâu mà tìm :)
  • 1

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


#15 girl

girl

    biết vẽ spline

  • Members
  • PipPip
  • 92 Bài viết
Điểm đánh giá: 5 (bình thường)

Đã gửi 25 November 2011 - 09:05 AM

vâng, ở đây là mình không thay đổi mà anh ? tức là mình chỉ thay đổi cái text, còn mọi cái khác giữ nguyên ý ạ !
  • 0

#16 ketxu

ketxu

    Copier - Paster - Editor

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

Đã gửi 25 November 2011 - 10:04 AM

vâng, ở đây là mình không thay đổi mà anh ? tức là mình chỉ thay đổi cái text, còn mọi cái khác giữ nguyên ý ạ !

Trong tất cả các lisp trên ketxu viết, bạn dùng cái nào thì thay dòng :
(setvar "DIMTXT" tH)
thành
(setvar "DIMTXT" (/ tH (getvar "DIMSCALE")))
để dùng nhé :)
  • 1

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


#17 maihanh191

maihanh191

    biết lệnh scale

  • Members
  • PipPipPip
  • 148 Bài viết
Điểm đánh giá: 16 (tàm tạm)

Đã gửi 25 November 2011 - 10:39 AM

- Lỗi : k phải là lỗi, lý do do biến dimscale thay đổi toàn bộ các thiết đặt kích thước của style. Muốn thay đổi kỹ hơn thì bạn phải đi sâu 1 chút nữa vào dimstyle :)
- Trường hợp rất khó bạn nêu : đúng là rất khó, và trả lời giúp bạn luôn là không có cách nào toàn diện cho trượng hợp này( thay đổi 1 block def thì tất cả các block trong bản vẽ đều thay đổi, trong khi tỉ lệ scale là khác nhau) :) Mà dim lại còn nằm trong Blog nữa thì Cad chả biết đâu mà tìm :)

nhân tiện cho hỏi anh ketxu về vấn đề chiều cao chữ của bản vẽ.
cách up các dim, các text em đã nắm được.
nhưng chiều cao text trong các blog att, các kí hiệu cốt, trục ...của các bản vẽ trước cần sửa thì cách nào tối ưu để chỉnh sửa. các blog att thì bi scale rất nhiều, số lẻ..chỉnh sửa hàng loạt không quản lí được.
anh quản lí bằng cách nào chia sẻ it kinh nghiệm ạ
  • 0

#18 phamthanhbinh

phamthanhbinh

    biết lệnh adcenter

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

Đã gửi 25 November 2011 - 11:37 AM

- Lỗi : k phải là lỗi, lý do do biến dimscale thay đổi toàn bộ các thiết đặt kích thước của style. Muốn thay đổi kỹ hơn thì bạn phải đi sâu 1 chút nữa vào dimstyle :)
- Trường hợp rất khó bạn nêu : đúng là rất khó, và trả lời giúp bạn luôn là không có cách nào toàn diện cho trượng hợp này( thay đổi 1 block def thì tất cả các block trong bản vẽ đều thay đổi, trong khi tỉ lệ scale là khác nhau) :) Mà dim lại còn nằm trong Blog nữa thì Cad chả biết đâu mà tìm :)

Hề hề hề,
Đúng là khó thiệt, nhưng nếu bạn Girl chấp nhận làm cho bản vẽ nặng và cồng kềnh hơn thì có thể có cách làm được. Đó là phá các block này ra, chỉnh lại text của các dim có trong block, rồi tạo block mới chứa các đối tượng cũ với tên mới do người dùng tự chọn.
Hề hề hề, ấy là mới chỉ nghĩ, còn mình vẫn chưa thử nên cũng chưa dám khẳng định là có được hay không, vì nếu block cũ lại được insert với các tỷ lệ x và y khác nhau thì nghe chừng sẽ hơi loạn.
Nếu bạn Girl đồng ý thì mình sẽ thử làm coi sao.
Hề hề hề,....
  • 0
Chúc các quý Anh trên diễn đàn luôn khỏe, đẻ thêm được nhiều thứ để mót.

#19 girl

girl

    biết vẽ spline

  • Members
  • PipPip
  • 92 Bài viết
Điểm đánh giá: 5 (bình thường)

Đã gửi 25 November 2011 - 11:39 AM

vâng. Phá khối cũng được ạ? chỉ có điều a xét đến các trường hợp để làm sao mà không thay đổi kích thước các đối tượng sau khi phá khối ,ví dụ như kích thước các thông số của DIM ???
  • 0

#20 girl

girl

    biết vẽ spline

  • Members
  • PipPip
  • 92 Bài viết
Điểm đánh giá: 5 (bình thường)

Đã gửi 26 November 2011 - 07:29 PM

hic. anh KETXU ơi, thay cái dòng (setvar "DIMTXT" (/ tH (getvar "DIMSCALE"))) để làm gì ạ ? em thay rồi nhưng nó vẫn thay đổi kích thước arrow ạ . Mà chức năng soạn thảo của CADVIET lỗi anh ạ !
  • 0