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

cải tiến lisp dim nhanh

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

Xin chào cộng đồng, hiện em có 1 lisp dim nhanh cũng sử dụng khá lâu và cũng thấy ổn, hôm nay xin nhờ cộng đồng mình cải tiến giúp em (vì em nhờ chat GPT nó viết quài không đúng ý).

Hiện em đang viết lặp lại để lisp có thể sử dụng ở nhiều tỉ lệ khác nhau, tỉ lệ ở cty em sử dụng là thay đổi scale factor (biến DIMFAC), trình bày bản vẽ ở model thay vì layout.

Lúc trước mỗi lần muốn dim tỉ lệ nào thì em chỉ cần nhập 20 là dim tỉ lệ 1/20. Hiện em muốn gộp các tỉ lệ lại làm 1 lệnh duy nhất, rồi sau đó xuất hiện tùy chọn chọn tỷ lệ như tùy chọn lệnh PE vậy, rồi hoạt động về sau giống như lisp gốc (tạo textstyle, layer, không có dim thì tạo dim rồi thực thi lệnh, nếu có thì thực thi lệnh ngay...). Biến DIMFAC sẽ là "giá trị tỷ lệ"/20.

Lisp em để phía dưới ạ. Cảm ơn cộng đồng đã đọc và hỗ trợ.

 

(defun c:20 (/ ov)
  (command "-STYLE" "KC" "VNI-HELVE-CONDENSE.TTF" 0 1 0 "No" "No" "No")
    (setvar "DIMARCSYM" 0)
    (setvar "DIMASZ" 35)
    (setvar "DIMBLK" "ArchTick")
    (setvar "DIMBLK1" "ArchTick")
    (setvar "DIMBLK2" "ArchTick")
    (setvar "DIMCEN" 2.5)
    (setvar "DIMDEC" 0)
    (setvar "DIMDLE" 35)
    (setvar "DIMDLI" 0)
    (setvar "DIMEXE" 35)
    (setvar "DIMEXO" 0)
    (setvar "DIMFXL" 1)
    (setvar "DIMGAP" 20)
    (setvar "DIMSCALE" 1)
    (setvar "DIMTAD" 1)
    (setvar "DIMTDEC" 0)
    (setvar "DIMTMOVE" 1)
    (setvar "DIMCLRE" 9)
    (setvar "DIMCLRD" 9)
    (setvar "DIMCLRT" 3)
    (setvar "DIMTXSTY" "KC")
    (setvar "DIMTXT" 45)
    (setvar "DIMLFAC" 1);Thay đổi giá trị scale factor ở đây
(if (tblsearch "DIMSTYLE" "TL20")
  (command "-dimstyle" "s" "TL20" "Y");Neu co dimstyle TL20 thi lam gi do
  (command "-dimstyle" "s" "TL20");Neu khong thi lam gi do
)
(setq ov (getvar 'clayer))
(setvar 'clayer "KCS_DIM")    ; KCS_DIM = ten layer trong ban ve
(command "-dimstyle" "restore" "TL20")    ;TL20 = Dimstyle trong ban ve
(command "dimlinear")    ;Dimlinear = lenh can thuc hien
(setvar 'clayer ov)
)

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

Thấy bạn diễn giải khó hiểu quá, sao không lập 1 kiểu dim cho tất cả tỷ lệ, muốn đo tỷ lệ nào thì nhập tỷ lệ đó, có phải vậy 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

thì này là mỗi tỉ lệ là 1 dimstyle như thường à, em copy ra làm nhiều file lisp rồi gọi từng lệnh ví dụ nhập 20 enter là dimliner TL20, layer KCS_DIM (nếu chưa có kiểu dim TL20 trong file thì nó tự tạo), nhưng mà em muốn cải tiến nó thành 1 lệnh duy nhất (ví dụ gõ KC) rồi chọn số 20 (hiện 1 list từ 5 10 20 25....100, 200, 400) thì nó tương tự mình nhập 20 enter, còn sử dụng nhiều mục đích khác nữa

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
15 giờ trước, VoTuanKiet đã nói:

Xin chào cộng đồng, hiện em có 1 lisp dim nhanh cũng sử dụng khá lâu và cũng thấy ổn, hôm nay xin nhờ cộng đồng mình cải tiến giúp em (vì em nhờ chat GPT nó viết quài không đúng ý).

Hiện em đang viết lặp lại để lisp có thể sử dụng ở nhiều tỉ lệ khác nhau, tỉ lệ ở cty em sử dụng là thay đổi scale factor (biến DIMFAC), trình bày bản vẽ ở model thay vì layout.

Lúc trước mỗi lần muốn dim tỉ lệ nào thì em chỉ cần nhập 20 là dim tỉ lệ 1/20. Hiện em muốn gộp các tỉ lệ lại làm 1 lệnh duy nhất, rồi sau đó xuất hiện tùy chọn chọn tỷ lệ như tùy chọn lệnh PE vậy, rồi hoạt động về sau giống như lisp gốc (tạo textstyle, layer, không có dim thì tạo dim rồi thực thi lệnh, nếu có thì thực thi lệnh ngay...). Biến DIMFAC sẽ là "giá trị tỷ lệ"/20.

Lisp em để phía dưới ạ. Cảm ơn cộng đồng đã đọc và hỗ trợ.

 

Phải như này không :

(defun c:DimTL (/ ov)
  (or scale (setq scale "5"))
  (setq scale (SelectScale scale)
	dimName (strcat "TL" scale) )
  (if (not (tblsearch "DIMSTYLE" dimName))
    (progn
      (if (not (tblsearch "STYLE" "KC"))
	(command "-STYLE" "KC" "VNI-HELVE-CONDENSE.TTF" 0 1 0 "No" "No" "No"))
    (setvar "DIMARCSYM" 0)
    (setvar "DIMASZ" 35)
    (setvar "DIMBLK" "ArchTick")
    (setvar "DIMBLK1" "ArchTick")
    (setvar "DIMBLK2" "ArchTick")
    (setvar "DIMCEN" 2.5)
    (setvar "DIMDEC" 0)
    (setvar "DIMDLE" 35)
    (setvar "DIMDLI" 0)
    (setvar "DIMEXE" 35)
    (setvar "DIMEXO" 0)
    (setvar "DIMFXL" 1)
    (setvar "DIMGAP" 20)
    (setvar "DIMSCALE" 1)
    (setvar "DIMTAD" 1)
    (setvar "DIMTDEC" 0)
    (setvar "DIMTMOVE" 1)
    (setvar "DIMCLRE" 9)
    (setvar "DIMCLRD" 9)
    (setvar "DIMCLRT" 3)
    (setvar "DIMTXSTY" "KC")
    (setvar "DIMTXT" 45)
    (setvar "DIMLFAC" (/ 1.0 (atof scale)))
    (command "-dimstyle" "s" dimName "Y") ))

  (setq ov (getvar 'clayer))
  (if (tblsearch "layer" "KCS_DIM") (setvar 'clayer "KCS_DIM") )   ; KCS_DIM = ten layer trong ban ve
(command "-dimstyle" "restore" dimName)
(command "dimlinear")    ;Dimlinear = lenh can thuc hien
(setvar 'clayer ov)
)

(defun SelectScale(scale / str1 str2)
  (setq dimLst (list "5" "10" "20" "50" "100" "200"))
  (or (not (vl-position scale dimLst))(setq scale (nth 0  dimLst)))  
  (if (> (atof (substr (getvar "ACADVER") 1 4)) 16.1)
    (progn      
      (setq str1 "" str2 "")
      (foreach tmp dimLst
	(setq str1 (strcat str1 "/" tmp )
	      str2 (strcat str2 " " tmp )))      
      (setq str1 (substr str1 2)
	    str2 (substr str2 2))
      (setq cur_var (mapcar 'getvar '("DYNMODE" "DYNPROMPT")))
      (mapcar 'setvar '("DYNMODE" "DYNPROMPT") '(1 1))
      (initget str2)
      (setq tmp (getkword (strcat "\nChon ti le [" str1 "] <"(princ scale)">: ") ))
      (mapcar 'setvar '("DYNMODE" "DYNPROMPT") cur_var)
      (if tmp (setq scale tmp) )))
  scale)

 

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
3 giờ trước, gia_bach đã nói:

Phải như này không :


(defun c:DimTL (/ ov)
  (or scale (setq scale "5"))
  (setq scale (SelectScale scale)
	dimName (strcat "TL" scale) )
  (if (not (tblsearch "DIMSTYLE" dimName))
    (progn
      (if (not (tblsearch "STYLE" "KC"))
	(command "-STYLE" "KC" "VNI-HELVE-CONDENSE.TTF" 0 1 0 "No" "No" "No"))
    (setvar "DIMARCSYM" 0)
    (setvar "DIMASZ" 35)
    (setvar "DIMBLK" "ArchTick")
    (setvar "DIMBLK1" "ArchTick")
    (setvar "DIMBLK2" "ArchTick")
    (setvar "DIMCEN" 2.5)
    (setvar "DIMDEC" 0)
    (setvar "DIMDLE" 35)
    (setvar "DIMDLI" 0)
    (setvar "DIMEXE" 35)
    (setvar "DIMEXO" 0)
    (setvar "DIMFXL" 1)
    (setvar "DIMGAP" 20)
    (setvar "DIMSCALE" 1)
    (setvar "DIMTAD" 1)
    (setvar "DIMTDEC" 0)
    (setvar "DIMTMOVE" 1)
    (setvar "DIMCLRE" 9)
    (setvar "DIMCLRD" 9)
    (setvar "DIMCLRT" 3)
    (setvar "DIMTXSTY" "KC")
    (setvar "DIMTXT" 45)
    (setvar "DIMLFAC" (/ 1.0 (atof scale)))
    (command "-dimstyle" "s" dimName "Y") ))

  (setq ov (getvar 'clayer))
  (if (tblsearch "layer" "KCS_DIM") (setvar 'clayer "KCS_DIM") )   ; KCS_DIM = ten layer trong ban ve
(command "-dimstyle" "restore" dimName)
(command "dimlinear")    ;Dimlinear = lenh can thuc hien
(setvar 'clayer ov)
)

(defun SelectScale(scale / str1 str2)
  (setq dimLst (list "5" "10" "20" "50" "100" "200"))
  (or (not (vl-position scale dimLst))(setq scale (nth 0  dimLst)))  
  (if (> (atof (substr (getvar "ACADVER") 1 4)) 16.1)
    (progn      
      (setq str1 "" str2 "")
      (foreach tmp dimLst
	(setq str1 (strcat str1 "/" tmp )
	      str2 (strcat str2 " " tmp )))      
      (setq str1 (substr str1 2)
	    str2 (substr str2 2))
      (setq cur_var (mapcar 'getvar '("DYNMODE" "DYNPROMPT")))
      (mapcar 'setvar '("DYNMODE" "DYNPROMPT") '(1 1))
      (initget str2)
      (setq tmp (getkword (strcat "\nChon ti le [" str1 "] <"(princ scale)">: ") ))
      (mapcar 'setvar '("DYNMODE" "DYNPROMPT") cur_var)
      (if tmp (setq scale tmp) )))
  scale)

 

cảm ơn anh gia_bach, cơ bản lisp hoạt động giống ý em rồi, chỉ có thay đổi chút về mặt công thức trong biến dimfac với thêm số liệu vào list em có thể chỉnh đượ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

Tớ hỏi cái.

- tại sao phải xóa .ttf đi thì mới hoạt động?

- hình như không tạo được các dim phóng to. VD 2:1

- có cần thiết phải liệt kê không trong khi có thể cải tiến là chỉ cần nhập một con số là xong?

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ên dùng 
DIMSCALE
DIMLFAC
để vẽ, còn các tỷ lệ dim thì kệ phần mềm, tool nó tự tạo. b xài kcs thì nó tự tạo ra 1 rừng kiểu dim rồi còn gì

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
22 phút trước, Nguyễn Hà Huy đã nói:

nên dùng 
DIMSCALE
DIMLFAC
để vẽ, còn các tỷ lệ dim thì kệ phần mềm, tool nó tự tạo. b xài kcs thì nó tự tạo ra 1 rừng kiểu dim rồi còn gì

cách trình bày bản vẽ bên model mỗi tỉ lệ nó cho ra kích thước khác nhau ấy bạn, này do cty triển khai vậy thì mình làm theo vậy thôi, để tránh sai sót khi dim thì mình dùng cách này á, chứ dim mặt bằng TL100 quay sang TL20 quên đổi cái là giá trị kích thước nó x5 lê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
26 phút trước, VoTuanKiet đã nói:

cách trình bày bản vẽ bên model mỗi tỉ lệ nó cho ra kích thước khác nhau ấy bạn, này do cty triển khai vậy thì mình làm theo vậy thôi, để tránh sai sót khi dim thì mình dùng cách này á, chứ dim mặt bằng TL100 quay sang TL20 quên đổi cái là giá trị kích thước nó x5 lên

b biết chức năng của 2 cái này không đã 
DIMSCALE
DIMLFAC

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
10 phút trước, Nguyễn Hà Huy đã nói:

b biết chức năng của 2 cái này không đã 
DIMSCALE
DIMLFAC

mình biết chứ, 1 cái là scale dim, 1 cái là scale giá trị dim, tất nhiên là nó dùng trong trường hợp triển khai sử dụng 1 loại dimstyle, còn cty mình sử dụng nhiều dimstyle, nên không có sử dụng tính năng này

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 tìm lệnh ChangeDimStyle trên mạng, nó load các DimStyles (do user tạo) từ bản vẽ DimTemplate.dwg vào. Và chỉ cần viết lại input là được. Trước đây mình có nhưng xóa mất nên không nhớ từ trang nào.

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

×