Chuyển đến nội dung
Diễn đàn CADViet
hanam1210

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

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

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 !

  • 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

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)

  • 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

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

  • Like 3
  • Vote tăng 8

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

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

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

  • 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

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ề,...

  • Vote tăng 3

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

  • Like 2
  • Vote tăng 8

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

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

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
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ề,...

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

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

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

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!

  • 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

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

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

  • 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

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 ý ạ !

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â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é :)

  • 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

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

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ỗ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ề,....

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â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 ???

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

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

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

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

Bạn k biết lisp, nên mình cũng k biết nói sao. Setvar nôm na là đặt. DIMSCALE là cái overscale. Dimtxt là Text Height. Dòng trên có nghĩa là Đặt Text Height bằng tH(số mình chọn) / tỉ lệ Scale all. Nếu theo cách này bạn nhớ bỏ dòng (setvar "dimscale" 1.0000) mà bác Bình nói đi 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

Lisp này quả thật rất hữu ích, nhưng còn một trường hợp lisp chưa xét đến, em sử dụng mới phát hiện ra. Đó là với các Dimstyle mà được FIX cứng chiều cao của text trong mục text style thì lisp không thay đổi được chiều cao, và em muốn có thêm cái tính năng lưu giá trị chiều cao vừa nhập của lần trước ạ. Anh ketxu này giúp em nhé

;; free lisp from cadviet.com
;;; this lisp was downloaded from http://www.cadviet.com/forum/index.php?showtopic=53208&pid=183218&st=0entry183218
(defun c:hdim (/ 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 (getvar "DIMSCALE")))
(command "DIMSTYLE" "S" dstyle "Y")
  )  
 )
)
(setq i (1+ i))
)
(command "undo" "en")
)

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

Nhờ các bác viết hộ em cái lisp thay đổi hướng text của dim, bình thường khi đo kích thước của một đối tượng thì text thường hướng từ trái qua phải hoặc từ dưới lên trên, nhiều khi trình bày bản vẽ text hay bị chèn vào đối tượng khác, các bác có thể viết giúp em một cái lisp có thể thay đổi được hướng text theo chiều ngược lại được không ạ, em cảm ơn 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

Nhờ các bác viết hộ em cái lisp thay đổi hướng text của dim, bình thường khi đo kích thước của một đối tượng thì text thường hướng từ trái qua phải hoặc từ dưới lên trên, nhiều khi trình bày bản vẽ text hay bị chèn vào đối tượng khác, các bác có thể viết giúp em một cái lisp có thể thay đổi được hướng text theo chiều ngược lại được không ạ, em cảm ơn mọi người.

Câu hỏi của bạn hơi tối nghĩa. Hướng text của dim là gì? Tuy nhiên, tôi đoán mò: không cần quan tâm trái sang phải hay dưới lên trên thì vẫn có thể di chuyển vị trí text của dim bằng cách:

Dim -> Te -> di chuyển.

Nếu sai thì mong bạn post câu hỏi cho rõ rà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

[yêu cầu] viết lisp chỉnh unit trong cad. ví dụ em muốn vẽ line có chiều dài 500 mà chỉ cần đánh là 1. 500 là đơn vị thực chứ không phải dim ạ. tiện đây các anh giúp em luô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

×