Chuyển đến nội dung
Diễn đàn CADViet
HALUMGLASS@GMAIL.COM

Nhờ sửa lỗi không đưa về layer HIENHANH sau thi chạy lisp Lcen

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

;Chuong trinh ve duong tam nhap thong so Celtscale theo y muon
;;;;;;;;;;;;;;;;;;;;;
(defun c:lcen (/ HIENHANH CEL p1 p2)
  	(setvar "cmdecho" 0)
  	(setq HIENHANH (getvar "clayer"))
  	(if (not (tblsearch "layer" "CENT1"))
	(command "layer" "m" "CENT1" "c" "1" "" "lt" "center"  "" "")
	  )
  	(setvar "clayer" "CENT1")
  	(initget 7)
  	(setq CEL (getint "\nNhap ty le CELTSCALE:"))
  	(setvar "celtscale" cel)
  	(setvar "ltscale" 1)
  	(setq p1 (getpoint "\nNhap diem 1:"))
  	(setq p2 (getpoint p1 "\nNhap diem 2:"))
        (entmake (list (cons 0 "LINE") (cons 8  (getvar "clayer")) (cons 10 p1) (cons 11 p2)))
   	(setvar "cmdecho" 1)
   	(setvar "clayer" HIENHANH)
  	(princ)
  );end dedun

Nhờ các bạn xem giúp mình, không biết lỗi gì mà sau khi thực hiện lệnh Lcen mà không trả (setvar "clayer" Hienhanh) không trả về layer ban đầu.

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

Nếu bạn đã dùng entmake thì layer cũng tự sinh (nếu chưa có). Tuy nhiên không set color và linetype được. Layer mới là một clone của layer0. Vì vậy không cần phải đổi layer hiện hành. Đó là một ưu điểm của lisp mà các ngôn ngữ khác không làm được.

  • 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 này không phải do lisp mà do bạn nhấn ESC khi đang còn trong lệnh khiến các câu lệnh cuối không có cơ hội làm việc.

  • Like 1
  • 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

Khi dùng mình ko nhấn esc nhé. 

Trước khi dùng lệnh (setq hienhanh (getvar "clayer")) trả về layer 0

Vẽ line là đường tâm với layer "center" vẽ xong (setvar "clayer" hienhanh).

Nhưng bản vẽ ko trả về layer "0" mà vẫn ở layer "center". Cuongtk2 chạy thử lisp xem lỗi do đâu xem hộ mì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

Tôi chạy thử thấy OK và không hiểu sao nó không set lại "HIENHANH".
@alisp và @cuongtk2: không thể esc kịp máy tính sau khi vẽ line đâ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

Em bị cái này suốt nên không dùng setvar nữa mà entmake trực tiếp cho đỡ lỗi này, và lỗi bắt điể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

Vậy ạ. Thế để mình xem lại. Không biết có xung đột gì với lisp khác không. Trước đó mình có sử dụng hàm *error* không biết có ảnh hưởng gì ko? Doan van ha chỉ giúp mình code lisp đưa tất cả thông số về ban đầu trước khi dùng lisp đc không? 

Ví dụ layer về layer ban đầu, var hệ thống ban đầu. 

Trên diễn đàn cũng có nói về vấn đề này rồi tuy nhiên mình muốn 1 cách tổng quát nhất để áp dụng cho tất cả các lisp. 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

 

(defun c:lcen (/ HIENHANH CEL p1 p2)
  (defun makeLayer (name Col Ltyp LWgt Plot)
 (entmake (list (cons 0 "LAYER")
                (cons 100 "AcDbSymbolTableRecord")
                (cons 100 "AcDbLayerTableRecord")
                (cons 2  name)
                (cons 70 0)
                (cons 62 Col)
                (cons 6 Ltyp)
                (cons 290 Plot)
                (cons 370 LWgt))))
      
      (setq layer "CENT1")
      (if (not (tblsearch "layer" layer))


    (makeLayer layer 1 "Center" 0 1)
      )
      (setq CEL (getint "\nNhap ty le CELTSCALE:"))
      (setq p1 (getpoint "\nNhap diem 1:"))
      (setq p2 (getpoint p1 "\nNhap diem 2:"))
        (entmake (list (cons 0 "LINE") (cons 8  layer) (cons 10 p1) (cons 11 p2)(cons 48 CEL)))
       
       
      (princ)
  );end dedun

  • 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

Cũng không cần viết lại lisp đâu bác, chỉ cần thêm một hàng này là đủ :

(defun *error*(msg) (setvar "clayer" HIENHANH))

sau đó load vào rồi ESC thoải mái.

 

Không riêng gì layer, nhiều người than phiền mất hết bắt điểm sau khi ESC, khi đó chỉ cần thêm dòng dư lày :

(defun *error*(msg) (setvar "osmode" OsmodeBanDau))

là tha hồ ESC.

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

Bác nhầm rồi, sau khi setvar Clayer hủy lệnh.

Khéo cãi. Người ta bảo "sau khi thực hiện lệnh" rồi mà.

  • 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
1 giờ} trướ}c, Doan Van Ha đã nói:

Khéo cãi. Người ta bảo "sau khi thực hiện lệnh" rồi mà.

Dạ, vì bác bảo không thể ESC kịp sau khi vẽ line. Hoàn thành lệnh rồi thì ESC gì 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

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

×