Chuyển đến nội dung
Diễn đàn CADViet
Đăng nhập để thực hiện theo  
nguyenkienAgr

Sửa lại lệnh DIM cho tiện dụng hơn

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

Chào cả nhà,

Xin giúp mình viết 1 lisp để gọi lệnh DIM:

;;;Khi gõ lệnh thi chuyển sang lớp "Dim" - nếu ko có lớp "Dim" thì tạo lớp "Dim" -
;;;Sau khi xong lệnh hoặc "error" thi chuyển về lớp hiện tại

 

Mình viết lisp sau mà nó ko chạy như ý muốn. Mọi người chỉnh giúp mình sai ở chỗ nào. Xin cám ơn !

(defun C:D (/ CLA)
  (setq CLA (getvar "clayer"))
  (setvar "clayer" "DIM")
  (setq PT1 (getpoint "Pick the first point: "))
  (setq PT2 (getpoint PT1 "Pick second point: "))
  (command "._dimlinear" PT1 PT2)
  (setvar "clayer" CLA)
  (princ)

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ếu bạn sài cad đời cao thì bạn gán biến dimlayer là dim thì dim nó sẽ tạo ở layer dim.

còn bạn muốn viết lisp thì phải kết thúc lệnh command thì mới setvar clayer lại được.

ví dụ:

(defun c:dl(/ ll)
  (setq ll (getvar 'clayer))
  (setvar 'clayer "dim")
  (command "_dimlinear")
  (while (/= (getvar 'cmdactive) 0) (command pause))
  (setvar 'clayer ll))

 

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

Nếu bạn sài cad đời cao thì bạn gán biến dimlayer là dim thì dim nó sẽ tạo ở layer dim.

còn bạn muốn viết lisp thì phải kết thúc lệnh command thì mới setvar clayer lại được.

ví dụ:


(defun c:dl(/ ll)
  (setq ll (getvar 'clayer))
  (setvar 'clayer "dim")
  (command "_dimlinear")
  (while (/= (getvar 'cmdactive) 0) (command pause))
  (setvar 'clayer ll))

 

 

Lisp của bạn rất hay, cách gán biến dimlayer cũng rất hay! Cám ơn bạn 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
Vào lúc 9/8/2020 tại 20:07, ngokiet đã nói:

Nếu bạn sài cad đời cao thì bạn gán biến dimlayer là dim thì dim nó sẽ tạo ở layer dim.

còn bạn muốn viết lisp thì phải kết thúc lệnh command thì mới setvar clayer lại được.

ví dụ:


(defun c:dl(/ ll)
  (setq ll (getvar 'clayer))
  (setvar 'clayer "dim")
  (command "_dimlinear")
  (while (/= (getvar 'cmdactive) 0) (command pause))
  (setvar 'clayer ll))

 

 

Mình muốn thêm 1 tùy chọn, bạn sửa giúp mình với:

- Khi gọi lệnh dim nhưng hủy lệnh (ấn phím hủy 'ESC hoặc phải chuột) thì lớp hiện hành trở về lớp trước khi gọi lệnh dim. 

Cám ơn bạn 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

(defun c:dl(/ ll *error*)

  (setq ll (getvar 'clayer))

  (setvar 'clayer "dim")

  (defun *error*(msg)

    (princ "Error: ") (princ msg) 

     (setvar 'clayer ll) (princ))

  (command "_dimlinear")

  (while (/= (getvar 'cmdactive) 0) (command pause))

  (setvar 'clayer ll))

 

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

(defun c:dl(/ ll *error*)

  (setq ll (getvar 'clayer))

  (setvar 'clayer "dim")

  (defun *error*(msg)

    (princ "Error: ") (princ msg) 

     (setvar 'clayer ll) (princ))

  (command "_dimlinear")

  (while (/= (getvar 'cmdactive) 0) (command pause))

  (setvar 'clayer ll))

 

Tuyệt vời! Cám ơn bạn 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

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
Đăng nhập để thực hiện theo  

×