Đến nội dung


Hình ảnh

Mất OSNAP khi dùng LISP


  • Please log in to reply
13 replies to this topic

#1 nguyenhoangvuong83

nguyenhoangvuong83

    biết vẽ circle

  • Members
  • PipPip
  • 32 Bài viết
Điểm đánh giá: 2 (bình thường)

Đã gửi 28 May 2008 - 09:17 AM

Cháo các bác! mình có vấn đè này muốn hỏi là: Khi dùng autolisp lại bị mất chế độ OSNAP là sao hả các bác? Mỗi lần dùng lisp xong rồi dùng lệnh CAD lại phải bật lại chế độ OSNAP thì phiền phức quá. Ai có cách nào khắc phục không giúp mình với. Cảm ơn trước
  • 1
CHình đã gửiDVietHình đã gửi

#2 tranchan

tranchan

    biết lệnh break

  • Members
  • PipPipPipPip
  • 221 Bài viết
Điểm đánh giá: 93 (tàm tạm)

Đã gửi 28 May 2008 - 04:24 PM

Khi dùng autolisp lại bị mất chế độ OSNAP ....


Cái này là do trong file lisp của bác thiếu fần bẫy lôĩ . Bác để ý kỹ sẽ thấy ... trên dđ
vd 1 hàm bẫy lỗi, khi có lỗi xảy ra sẽ tự động gán các chế độ bắt điểm, ortho ở trạng thái trước đó
;*******************************************************************************

(defun myerror (s) ; If an error (such as CTRL-C) occurs
; while this command is active...
(cond
((= s "quit / exit abort") (princ))
((/= s "Function cancelled") (princ (strcat "\nError: " s)))
)
(setvar "cmdecho" CMD) ; Restore saved modes
(setvar "osmode" OSM)
(setq *error* OLDERR) ; Restore old *error* handler
(princ)
)

gán lại biến older vào ct khi bắt đầu & khi kết thúc
(DEFUN C:CD  ()
(SETQ CMD (GETVAR "CMDECHO"))
(SETQ OSM (GETVAR "OSMODE"))
(SETQ OLDERR *error*
*error* myerror)
....

....
(SETVAR "CMDECHO" CMD)
(SETVAR "OSMODE" OSM)
(setq *error* OLDERR)
(PRINC)
)

  • 1

#3 nguyenbakien

nguyenbakien

    biết lệnh scale

  • Members
  • PipPipPip
  • 147 Bài viết
Điểm đánh giá: 31 (tàm tạm)

Đã gửi 28 May 2008 - 08:04 PM

Cái này là do trong file lisp của bác thiếu fần bẫy lôĩ . Bác để ý kỹ sẽ thấy ... trên dđ
vd 1 hàm bẫy lỗi, khi có lỗi xảy ra sẽ tự động gán các chế độ bắt điểm, ortho ở trạng thái trước đó

;*******************************************************************************

(defun myerror (s) ; If an error (such as CTRL-C) occurs
; while this command is active...
(cond
((= s "quit / exit abort") (princ))
((/= s "Function cancelled") (princ (strcat "\nError: " s)))
)
(setvar "cmdecho" CMD) ; Restore saved modes
(setvar "osmode" OSM)
(setq *error* OLDERR) ; Restore old *error* handler
(princ)
)

gán lại biến older vào ct khi bắt đầu & khi kết thúc
(DEFUN C:CD  ()
(SETQ CMD (GETVAR "CMDECHO"))
(SETQ OSM (GETVAR "OSMODE"))
(SETQ OLDERR *error*
*error* myerror)
....

....
(SETVAR "CMDECHO" CMD)
(SETVAR "OSMODE" OSM)
(setq *error* OLDERR)
(PRINC)
)

Có cách nàp dơn giản hơn hkông ban?
Mình thấy cách này cũng hay, nhưng nếu mình sử dụng một lúc nhiều lisp thi không có thời gian để ngồi kiểm tra hết các lỗi đó được:(
  • 0

#4 mouse

mouse

    Chưa sử dụng CAD

  • Members
  • Pip
  • 2 Bài viết
Điểm đánh giá: 0 (bình thường)

Đã gửi 12 May 2009 - 04:02 PM

Có cách nàp dơn giản hơn hkông ban?
Mình thấy cách này cũng hay, nhưng nếu mình sử dụng một lúc nhiều lisp thi không có thời gian để ngồi kiểm tra hết các lỗi đó được:(

hướng dẫn sử dụng trước khi dùng đi bác e mò cả buổi rồi
  • 0

#5 duongsatdn

duongsatdn

    biết lệnh adcenter

  • Moderator
  • PipPipPipPipPipPipPip
  • 1657 Bài viết
Điểm đánh giá: 761 (tốt)

Đã gửi 12 May 2009 - 04:20 PM

Có cách nàp dơn giản hơn hkông ban?
Mình thấy cách này cũng hay, nhưng nếu mình sử dụng một lúc nhiều lisp thi không có thời gian để ngồi kiểm tra hết các lỗi đó được:(

Nếu cần thiết thì bạn viết một cái lisp, nội dung chỉ có phần đặt chế độ bắt điểm, đưa nó vào cái cặp của lệnh AP. Thích cái bắt dính nào thì công các giá trị của nó lại.
Các giá trị của biến OSMODE như sau:
0 NONe
1 ENDpoint
2 MIDpoint
4 CENter
8 NODe
16 QUAdrant
32 INTersection
64 INSertion
128 PERpendicular
256 TANgent
512 NEArest
1024 QUIck
2048 APParent Intersection
4096 EXTension
8192 PARallel
Vi dụ tôi cần bắt điểm đầu END, điểm giữa MID và điểm giao nhau INT thì: lấy 1+2+32=35 ===> (setvar "osmode" 35)
Xài một lisp nào đó mà thấy chế độ bắt dính mất tiêu thì gõ cái lệnh của lisp khôi phục bắt dính ===> Xong!
Cái lisp còi xương của tôi như thế này chẳng hạn:
(defun C:1 ()
(setvar "osmode" 35)
(princ)
)
:mellow:
  • 0

#6 Tue_NV

Tue_NV

    KS Võ Quang Tuệ

  • Moderator
  • PipPipPipPipPipPipPip
  • 4296 Bài viết
Điểm đánh giá: 3804 (đỉnh cao)

Đã gửi 12 May 2009 - 04:28 PM

Nếu cần thiết thì bạn viết một cái lisp, nội dung chỉ có phần đặt chế độ bắt điểm, đưa nó vào cái cặp của lệnh AP. Thích cái bắt dính nào thì công các giá trị của nó lại.
Các giá trị của biến OSMODE như sau:
0 NONe
1 ENDpoint
2 MIDpoint
4 CENter
8 NODe
16 QUAdrant
32 INTersection
64 INSertion
128 PERpendicular
256 TANgent
512 NEArest
1024 QUIck
2048 APParent Intersection
4096 EXTension
8192 PARallel
Vi dụ tôi cần bắt điểm đầu END, điểm giữa MID và điểm giao nhau INT thì: lấy 1+2+32=35 ===> (setvar "osmode" 35)
Xài một lisp nào đó mà thấy chế độ bắt dính mất tiêu thì gõ cái lệnh của lisp khôi phục bắt dính ===> Xong!

Để không mất OSNAP thì trước khi dùng Lisp, ta lưu giá trị OSMODE với 1 biến oldos
(setq oldos (getvar "OSMODE"))

Trong khi dùng Lisp nếu muốn thực hiện bắt điểm PERpendicular chẳng hạn thì :

(setvar "osmode" 128)

gần cuuói đoạn Lisp ta phải trả lại biến OSMODE = giá trị của oldos ban đầu để không làm mất đi chế độ OSNAP ban đầu cua user

(setvar "osmode" oldos)
  • 0

#7 nickao_12

nickao_12

    Chưa sử dụng CAD

  • Members
  • Pip
  • 4 Bài viết
Điểm đánh giá: 0 (bình thường)

Đã gửi 25 February 2012 - 12:27 PM

Đây là 1 vấn đề cũ, nhưng vẫn chưa giải quyết được. Mình cũng thấy rất khó chịu với lỗi này. Xin các cao thủ chỉ cho 1 hướng giải quyết vấn đề này một cách đơn giản hơn. Chứ thực sự những người không rành về lisp như mình thì đọc các comment trên biết lỗi do đâu nhưng vẫn không khắc phục được.
Cảm ơn!
  • 0

#8 Doan Van Ha

Doan Van Ha

    biết lệnh adcenter

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 5448 Bài viết
Điểm đánh giá: 2624 (tuyệt vời)

Đã gửi 25 February 2012 - 12:36 PM

Đây là 1 vấn đề cũ, nhưng vẫn chưa giải quyết được. Mình cũng thấy rất khó chịu với lỗi này. Xin các cao thủ chỉ cho 1 hướng giải quyết vấn đề này một cách đơn giản hơn. Chứ thực sự những người không rành về lisp như mình thì đọc các comment trên biết lỗi do đâu nhưng vẫn không khắc phục được.
Cảm ơn!

Ý bạn là muốn giải quyết theo kiểu nào cho tiện nhất, hãy đề xuất xem có thể giúp không?
  • 0

* Chỉ nên yêu cầu Lisp khi bạn làm việc đó mất cả ngày nhưng họ chỉ viết 1 giờ. Đừng nêu yêu cầu Lisp khi bạn chỉ làm 1 giờ nhưng bắt họ phải mất cả ngày.

* Nhờ viết lisp cũng như đi khám bệnh. Chỉ gởi căn cước và than sắp chết thì không bác sỹ nào cứu sống được.


#9 hantinh

hantinh

    biết lệnh attdef

  • Members
  • PipPipPipPipPipPip
  • 413 Bài viết
Điểm đánh giá: 44 (tàm tạm)

Đã gửi 25 February 2012 - 09:02 PM

tốt nhất là xóa hết nó đi thi se hok bị mất osnap nữa.
  • 0

#10 ketxu

ketxu

    Copier - Paster - Editor

  • Moderator
  • PipPipPipPipPipPipPip
  • 5682 Bài viết
Điểm đánh giá: 2605 (tuyệt vời)

Đã gửi 25 February 2012 - 10:26 PM

Đây là 1 vấn đề cũ, nhưng vẫn chưa giải quyết được. Mình cũng thấy rất khó chịu với lỗi này. Xin các cao thủ chỉ cho 1 hướng giải quyết vấn đề này một cách đơn giản hơn. Chứ thực sự những người không rành về lisp như mình thì đọc các comment trên biết lỗi do đâu nhưng vẫn không khắc phục được.
Cảm ơn!


Với trường hợp một số người viết lisp quên k đặt lại biến osmode sau khi thay đổi nó, có thể gây phiền toái, các bạn hãy app lisp này

http://www.cadviet.c...067_rsvrs_1.rar

Chỉ cần cho vào Startup suite thôi, không cần làm gì cả :)

Chú ý : không hoàn toàn phù hợp với các bạn chuyên Ấn Esc khi đang thực hiện dở 1 lisp nào đó ^^
  • 2

Thành viên nhóm CadMagic.
Mời bạn ghé thăm facebook nhóm - Page viết lisp theo yêu cầu  :
CAD MAGIC


#11 Doan Van Ha

Doan Van Ha

    biết lệnh adcenter

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 5448 Bài viết
Điểm đánh giá: 2624 (tuyệt vời)

Đã gửi 25 February 2012 - 10:40 PM


Với trường hợp một số người viết lisp quên k đặt lại biến osmode sau khi thay đổi nó, có thể gây phiền toái, các bạn hãy app lisp này

http://www.cadviet.c...24067_rsvrs.rar

Chỉ cần cho vào Startup suite thôi, không cần làm gì cả :)

Chú ý : không hoàn toàn phù hợp với các bạn chuyên Ấn Esc khi đang thực hiện dở 1 lisp nào đó ^^

Nếu đã đưa vào Startup suite thì có lẽ "chấp" luôn cả việc ấn esc hoặc chương trình bị lỗi chứ nhỉ?
  • 0

* Chỉ nên yêu cầu Lisp khi bạn làm việc đó mất cả ngày nhưng họ chỉ viết 1 giờ. Đừng nêu yêu cầu Lisp khi bạn chỉ làm 1 giờ nhưng bắt họ phải mất cả ngày.

* Nhờ viết lisp cũng như đi khám bệnh. Chỉ gởi căn cước và than sắp chết thì không bác sỹ nào cứu sống được.


#12 ketxu

ketxu

    Copier - Paster - Editor

  • Moderator
  • PipPipPipPipPipPipPip
  • 5682 Bài viết
Điểm đánh giá: 2605 (tuyệt vời)

Đã gửi 25 February 2012 - 11:01 PM

Ketxu vừa sửa lại để hợp với lỗi ESC, vẫn link trên. Tuy nhiên vẫn khuyến kháo nó k phải cứu cánh cho các trường hợp ESC, vì đôi khi có người dùng reactor để vào trong hàm *error*, 2 cái mà đánh nhau thì tệ lắm :)

@bác ĐVH : chấp hay k là do code ở trong đó chứ k do cho vào His đâu bác ơi ^^ Lúc đầu e copy nhầm cái mà - tổng quát - nhưng chưa hoàn thiện. E phải sửa lại ở trên r
  • 1

Thành viên nhóm CadMagic.
Mời bạn ghé thăm facebook nhóm - Page viết lisp theo yêu cầu  :
CAD MAGIC


#13 Doan Van Ha

Doan Van Ha

    biết lệnh adcenter

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 5448 Bài viết
Điểm đánh giá: 2624 (tuyệt vời)

Đã gửi 26 February 2012 - 09:01 AM

Ketxu vừa sửa lại để hợp với lỗi ESC, vẫn link trên. Tuy nhiên vẫn khuyến kháo nó k phải cứu cánh cho các trường hợp ESC, vì đôi khi có người dùng reactor để vào trong hàm *error*, 2 cái mà đánh nhau thì tệ lắm :)
@bác ĐVH : chấp hay k là do code ở trong đó chứ k do cho vào His đâu bác ơi ^^ Lúc đầu e copy nhầm cái mà - tổng quát - nhưng chưa hoàn thiện. E phải sửa lại ở trên r

Đỏ: đúng thế!
Xanh: cái này thì bác lơ mơ lắm!
  • 0

* Chỉ nên yêu cầu Lisp khi bạn làm việc đó mất cả ngày nhưng họ chỉ viết 1 giờ. Đừng nêu yêu cầu Lisp khi bạn chỉ làm 1 giờ nhưng bắt họ phải mất cả ngày.

* Nhờ viết lisp cũng như đi khám bệnh. Chỉ gởi căn cước và than sắp chết thì không bác sỹ nào cứu sống được.


#14 htmt234

htmt234

    biết vẽ circle

  • Members
  • PipPip
  • 36 Bài viết
Điểm đánh giá: 10 (tàm tạm)

Đã gửi 21 July 2014 - 03:04 PM

Để không mất OSNAP thì trước khi dùng Lisp, ta lưu giá trị OSMODE với 1 biến oldos
(setq oldos (getvar "OSMODE"))

Trong khi dùng Lisp nếu muốn thực hiện bắt điểm PERpendicular chẳng hạn thì :

(setvar "osmode" 128)

gần cuuói đoạn Lisp ta phải trả lại biến OSMODE = giá trị của oldos ban đầu để không làm mất đi chế độ OSNAP ban đầu cua user

(setvar "osmode" oldos)

Bác Tuệ cho em hỏi "biến Oldos" là gì à, có phải là biến trước khi mình load lisp không ạ? Hay là một biến bất kỳ mình có thể đặt cho mình dễ nhớ... Chủ đề cũ quá, có bác nào giúp em với, thanks ^^


  • 0