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

Nhờ sửa lisp Xline

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

Chào các anh, em có dùng GPT viết cái lisp để vẽ nhanh xline theo phương dọc, layer 0, linetypescale 150, linetype hidden, color 222.
Lisp bị 1 vấn đề là chỉ vẽ đc 1 xline đầu tiên đúng thuộc tính mong muốn, từ xline thứ 2 thì nó reset về thuộc tính trước đó.
Em vật lộn với con GPT mà nó ko hiểu, càng sửa càng lỗi, mong các anh sửa giúp em để KHI THOÁT LỆNH xline thì thuộc tính mới đc reset.

Em cảm ơn!
 

(defun c:X1 ( / oldLayer oldColor oldLtype oldLtScale )
  ;; Lưu lại trạng thái hiện tại
  (setq oldLayer (getvar "clayer"))
  (setq oldColor (getvar "cecolor"))
  (setq oldLtype (getvar "celtype"))
  (setq oldLtScale (getvar "celtscale"))

  ;; Đặt thuộc tính
  (setvar "cecolor" "222")
  (setvar "celtype" "HIDDEN")
  (setvar "celtscale" 150)

  ;; Vẽ XLINE dọc
  (command "_.XLINE" "_V")

  ;; Khôi phục lại các giá trị cũ
  (setvar "clayer" oldLayer)
  (setvar "cecolor" oldColor)
  (setvar "celtype" oldLtype)
  (setvar "celtscale" oldLtScale)

  (princ)
)


sửa lisp để khi thoát lệnh mới Khôi phục lại các giá trị 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
22 phút trước, DNcouples đã nói:

Chào các anh, em có dùng GPT viết cái lisp để vẽ nhanh xline theo phương dọc, layer 0, linetypescale 150, linetype hidden, color 222.
Lisp bị 1 vấn đề là chỉ vẽ đc 1 xline đầu tiên đúng thuộc tính mong muốn, từ xline thứ 2 thì nó reset về thuộc tính trước đó.
Em vật lộn với con GPT mà nó ko hiểu, càng sửa càng lỗi, mong các anh sửa giúp em để KHI THOÁT LỆNH xline thì thuộc tính mới đc reset.

Em cảm ơn!
 


(defun c:X1 ( / oldLayer oldColor oldLtype oldLtScale )
  ;; Lưu lại trạng thái hiện tại
  (setq oldLayer (getvar "clayer"))
  (setq oldColor (getvar "cecolor"))
  (setq oldLtype (getvar "celtype"))
  (setq oldLtScale (getvar "celtscale"))

  ;; Đặt thuộc tính
  (setvar "cecolor" "222")
  (setvar "celtype" "HIDDEN")
  (setvar "celtscale" 150)

  ;; Vẽ XLINE dọc
  (command "_.XLINE" "_V")

  ;; Khôi phục lại các giá trị cũ
  (setvar "clayer" oldLayer)
  (setvar "cecolor" oldColor)
  (setvar "celtype" oldLtype)
  (setvar "celtscale" oldLtScale)

  (princ)
)


sửa lisp để khi thoát lệnh mới Khôi phục lại các giá trị cũ

Em xóa 5 dòng này nhé,

;; Khôi phục lại các giá trị cũ  

(setvar "clayer" oldLayer)  

(setvar "cecolor" oldColor)

  (setvar "celtype" oldLtype)

  (setvar "celtscale" oldLtScale)

  • 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

Về cơ bản bạn hoàn toàn có thể type yêu cầu này để GPT code lại, hoặc yêu cầu nó code không sử dụng Command mà dùng entmake thì sẽ k cần thay đổi các biến hệ thống hiện hành. Còn nếu bạn vẫn muốn phát triển từ code này thì thêm dòng (while (> (getvar 'CMDACTIVE) 0)(command pause)) ở trước đoạn re-set. 
(Lưu ý Code trên của bạn đang chưa có bắt lỗi, trường hợp người dùng ấn Esc thì k reset được, mình thêm vào luôn)

 

(defun c:X1 ( / *error* oldVars oldVal )
	(defun *error*(m)
		(princ m)
		(and oldVars oldVal (mapcar 'setvar oldVars oldVal))
	)
			
	  ;; Lưu lại trạng thái hiện tại
	  
	(setq 
		oldVars '(cecolor celtype celtscale)
		oldVal	(mapcar 'getvar oldVars) 
	)
	;; Đặt thuộc tính
	(mapcar 'setvar oldVars '("222" "HIDDEN" 150))  
	;; Vẽ XLINE dọc
	(command "_.XLINE" "_V")
	(while (> (getvar 'CMDACTIVE) 0)(command pause))

	;; Khôi phục lại các giá trị cũ
	(and oldVars oldVal (mapcar 'setvar oldVars oldVal))
	(princ)
)


 

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

Về cơ bản bạn hoàn toàn có thể type yêu cầu này để GPT code lại, hoặc yêu cầu nó code không sử dụng Command mà dùng entmake thì sẽ k cần thay đổi các biến hệ thống hiện hành. Còn nếu bạn vẫn muốn phát triển từ code này thì thêm dòng (while (> (getvar 'CMDACTIVE) 0)(command pause)) ở trước đoạn re-set. 
(Lưu ý Code trên của bạn đang chưa có bắt lỗi, trường hợp người dùng ấn Esc thì k reset được, mình thêm vào luôn)

 


(defun c:X1 ( / *error* oldVars oldVal )
	(defun *error*(m)
		(princ m)
		(and oldVars oldVal (mapcar 'setvar oldVars oldVal))
	)
			
	  ;; Lưu lại trạng thái hiện tại
	  
	(setq 
		oldVars '(cecolor celtype celtscale)
		oldVal	(mapcar 'getvar oldVars) 
	)
	;; Đặt thuộc tính
	(mapcar 'setvar oldVars '("222" "HIDDEN" 150))  
	;; Vẽ XLINE dọc
	(command "_.XLINE" "_V")
	(while (> (getvar 'CMDACTIVE) 0)(command pause))

	;; Khôi phục lại các giá trị cũ
	(and oldVars oldVal (mapcar 'setvar oldVars oldVal))
	(princ)
)


 

dạ lisp xài tuyệt vời luôn, 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
12 giờ trước, ketxu đã nói:

Về cơ bản bạn hoàn toàn có thể type yêu cầu này để GPT code lại, hoặc yêu cầu nó code không sử dụng Command mà dùng entmake thì sẽ k cần thay đổi các biến hệ thống hiện hành. Còn nếu bạn vẫn muốn phát triển từ code này thì thêm dòng (while (> (getvar 'CMDACTIVE) 0)(command pause)) ở trước đoạn re-set. 
(Lưu ý Code trên của bạn đang chưa có bắt lỗi, trường hợp người dùng ấn Esc thì k reset được, mình thêm vào luôn)

 


(defun c:X1 ( / *error* oldVars oldVal )
	(defun *error*(m)
		(princ m)
		(and oldVars oldVal (mapcar 'setvar oldVars oldVal))
	)
			
	  ;; Lưu lại trạng thái hiện tại
	  
	(setq 
		oldVars '(cecolor celtype celtscale)
		oldVal	(mapcar 'getvar oldVars) 
	)
	;; Đặt thuộc tính
	(mapcar 'setvar oldVars '("222" "HIDDEN" 150))  
	;; Vẽ XLINE dọc
	(command "_.XLINE" "_V")
	(while (> (getvar 'CMDACTIVE) 0)(command pause))

	;; Khôi phục lại các giá trị cũ
	(and oldVars oldVal (mapcar 'setvar oldVars oldVal))
	(princ)
)


 

Để chấm điểm code này thì mới được 9.5 điểm, muốn 9.6 thì phải thêm tùy chọn layer 0 và hidden chưa được load trong bản vẽ. Hề hề.

 

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

Để chấm điểm code này thì mới được 9.5 điểm, muốn 9.6 thì phải thêm tùy chọn layer 0 và hidden chưa được load trong bản vẽ. Hề hề.

 

Quick code mà điểm cao thế là quá hạnh phúc r ^^
- Layer 0 : Chắc chắn tồn tại trong bản vẽ
- Linetype HIDDEN : Chính xác, Có thể chưa có trong bản vẽ, CAD không làm j và đưa thông báo k set được Linetype. Nếu k load Linetype tự động thì lisp đến đoạn này là xong
- Tự động load linetype HIDDEN : mặc dù tự load Lintype Hidden (nếu có) trong các file LIN k hề khó, tuy nhiên lại k có gì có thể đảm bảo có thể tự load linetype tên là HIDDEN hoặc bất kỳ linetype nào người dùng tự điều chỉnh khi bản vẽ chưa có, kể cả khi chúng ta dốc toàn bộ LIN ra để load ^^  Ket gặp trường hợp này rất nhiều ở mấy bác thích làm file LIN customize ^^

  • 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

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

×