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

Khắc phục lisp dim nhanh

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

 

Em chào toàn thể cộng đồng, hiện em có 1 lisp về dim nhanh theo từng dimstyle mà em viết dựa trên việc tham khảo 1 số bài trên diễn đàn. Lisp ban đầu chỉ là dim nhanh ví dụ như lệnh 20 là dim theo tỉ lệ 1/20 (dimstyle TL20). Nhưng sau đó nhận ra là khi có 1 số dimstyle chưa có trong file thì nó sẽ lấy dimstyle hiện hành, và em khắc phục bằng cách thêm các dòng lệnh giữa (giật vào). Ấy vậy lại phát sinh khi đã có dimstyle đó rồi thì nó lỗi.

Hiện em muốn thêm 1 câu điều kiện để lisp hoạt động (chẳng hạn như khi chưa có dimstyle đó thì mới thực hiện câu lệnh giữa).

Và nếu thành công thì nhờ cộng đồng chỉ giúp cách tạo textstyle lồng vào trong đây  để thay thế textstyle Standard

(hiện vì lý do công việc dùng dimscale TL20 làm chuẩn nên em muốn làm lisp này để dim nhanh 1 số tỉ lệ 1/25, 1/50, 1/100 , 1/200 thường dùng khác)

Nhờ cộng đồng hỗ trợ ạ!

Lisp em có trình bày dưới bài và có up file đính kèm. 

(defun c:20 (/ ov)
    (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" 7)
    (setvar "DIMCLRD" 7)
    (setvar "DIMCLRT" 3)
    (setvar "DIMTXSTY" "Standard")
    (setvar "DIMTXT" 45)
    (setvar "DIMLFAC" 1) (command "-dimstyle" "s" "TL20")
(setq ov (getvar 'clayer))
(setvar 'clayer "0")    ; 0 = ten layer trong ban ve
(command "-dimstyle" "restore" "TL20")    ;TL20 = Dimstyle trong ban ve
(command "dimlinear")    ;Dimlinear = lenh can thuc hien
(setvar 'clayer ov)
)
;*******************************************************************************

DIM20.lsp

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

Hàm kiểm tra dimstyle có tồn tại hay không:

(tblsearch "DIMSTYLE" "tendimstyle")

 

Hàm tạo textstyle:

(command "-STYLE" "Arial" "Arial.ttf" 0 1 0 "No" "No" "No")

 

Góp ý: lisp của bạn chạy đến dòng gần cuối: (command "dimlinear") là hết lệnh rồi, nên dòng (setvar 'clayer ov) sẽ không thực hiện được. Cách giải quyết: dùng biến pause

(command "DIMLINEAR")
(while (> (getvar "CMDACTIVE") 0)
  (command pause)
  )
(setvar 'clayer ov)

 

  • Like 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
2 giờ trước, Duong Nhat Duy đã nói:

Hàm kiểm tra dimstyle có tồn tại hay không:


(tblsearch "DIMSTYLE" "tendimstyle")

 

Hàm tạo textstyle:


(command "-STYLE" "Arial" "Arial.ttf" 0 1 0 "No" "No" "No")

 

Góp ý: lisp của bạn chạy đến dòng gần cuối: (command "dimlinear") là hết lệnh rồi, nên dòng (setvar 'clayer ov) sẽ không thực hiện được. Cách giải quyết: dùng biến pause


(command "DIMLINEAR")
(while (> (getvar "CMDACTIVE") 0)
  (command pause)
  )
(setvar 'clayer ov)

 

Cảm ơn anh rất nhiều. Hiện lisp có chạy được nhưng câu lệnh đầu em chưa sử dụng vào được.

Hiện tại kiến thức autolisp của em còn hạn chế, phần hàm kiểm tra lisp có tồn tại không thì làm thế nào xử lý khi mà kiểm tra có dimstyle đó rồi nó có thể bỏ qua các câu lệnh giữa mà thực thi luôn dòng:  (setq ov (getvar 'clayer))  , tại vì khi em add lisp vào cad thì 1 số file có sẵn dim đó rồi nó hỏi là có redefine dimstyle TL20 hay k. Các dòng giữa đại loại là em muốn khi nào tìm k thấy dimstyle đó thì mới tạo dimstyle để thực thi lệnh dim theo dimstyle TL20, nếu có sẵn dimstyle đó rồi thì bỏ qua k tạo lại.

Em có thử dùng hàm if và while nhưng hình như sai dẫn đến lisp k chạy được.

Nhờ anh hỗ trợ giúp em. Cảm ơn anh nhiều ạ!

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
27 phút trước, VoTuanKiet đã nói:

Cảm ơn anh rất nhiều. Hiện lisp có chạy được nhưng câu lệnh đầu em chưa sử dụng vào được.

Hiện tại kiến thức autolisp của em còn hạn chế, phần hàm kiểm tra lisp có tồn tại không thì làm thế nào xử lý khi mà kiểm tra có dimstyle đó rồi nó có thể bỏ qua các câu lệnh giữa mà thực thi luôn dòng:  (setq ov (getvar 'clayer))  , tại vì khi em add lisp vào cad thì 1 số file có sẵn dim đó rồi nó hỏi là có redefine dimstyle TL20 hay k. Các dòng giữa đại loại là em muốn khi nào tìm k thấy dimstyle đó thì mới tạo dimstyle để thực thi lệnh dim theo dimstyle TL20, nếu có sẵn dimstyle đó rồi thì bỏ qua k tạo lại.

Em có thử dùng hàm if và while nhưng hình như sai dẫn đến lisp k chạy được.

Nhờ anh hỗ trợ giúp em. Cảm ơn anh nhiều ạ!

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

 

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
11 giờ trước, Duong Nhat Duy đã nói:

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

 

Anh có thể hoàn thiện lisp này hộ em được không ạ. Em mới nhập môn tập viết, viết chồng thêm 2 câu lệnh này cái là lisp k chạy đượ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
10 giờ trước, VoTuanKiet đã nói:

Anh có thể hoàn thiện lisp này hộ em được không ạ. Em mới nhập môn tập viết, viết chồng thêm 2 câu lệnh này cái là lisp k chạy được luôn @@

(defun c:20 (/ ov)
    (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" 7)
    (setvar "DIMCLRD" 7)
    (setvar "DIMCLRT" 3)
    (setvar "DIMTXSTY" "Standard")
    (setvar "DIMTXT" 45)
    (setvar "DIMLFAC" 1)
(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 "0")    ; 0 = ten layer trong ban ve
(command "-dimstyle" "restore" "TL20")    ;TL20 = Dimstyle trong ban ve
(command "dimlinear")    ;Dimlinear = lenh can thuc hien
(setvar 'clayer ov)
)

Mỗi copy paste thôi mà bạ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

Em vẫn không chạy được lisp này anh ơi

lệnh nó lại ra cái hộp thoại @@ image.png.50802a1b192214f061cdf3cbc3914c9c.png

em mới tìm hiểu viết lisp nên nhiều cái copy patse cũng chưa đúng nên nhờ anh ạ @@

Ý muốn ban đầu của em là muốn khi nào k có dimstyle đó thì nó sẽ tự tạo, còn nếu có sẵn rồi thì chạy tiếp mấy câu lệnh cuối để tự chọn dimstyle đó để vẽ

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, VoTuanKiet đã nói:

Em vẫn không chạy được lisp này anh ơi

lệnh nó lại ra cái hộp thoại @@ 

em mới tìm hiểu viết lisp nên nhiều cái copy patse cũng chưa đúng nên nhờ anh ạ @@

Ý muốn ban đầu của em là muốn khi nào k có dimstyle đó thì nó sẽ tự tạo, còn nếu có sẵn rồi thì chạy tiếp mấy câu lệnh cuối để tự chọn dimstyle đó để vẽ

Bạn F2 chụp lại mình xem lỗi ở đâu.

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

×