Đến nội dung


Hình ảnh
* - - - - 2 Bình chọn

Các lỗi "oái oăm" trong LISP!!!


  • Please log in to reply
59 replies to this topic

#21 Detailing

Detailing

    biết lệnh imageclip

  • Members
  • PipPipPipPipPipPipPip
  • 667 Bài viết
Điểm đánh giá: 278 (khá)

Đã gửi 13 May 2011 - 01:04 PM

Và đây là lỗi trên Cad 2010 (các phiên bản khác chưa k/tra)

Khi đặt tên biến là n
VD: (setq n 5)
sau khi gọi lệnh (vl-cmdf "_.-boundary" "_A" "_I" "_N" "" "" "_non" pt "")
CAD reset (xóa) biến n thành NIL.

(defun c:test(/ pt)
(setq n 5)
(setq pt (getpoint "\nPick point: "))
(vl-cmdf "_.-boundary" "_A" "_I" "_N" "" "" "_non" pt "")
(if n (princ n) (princ "Gia tri n la NIL"))
(princ))

Trên CAD 10


Command: test

Pick point: _.-boundary
Specify internal point or [Advanced options]: _A
Enter an option [Boundary set/Island detection/Object type]: _I
Do you want island detection? [Yes/No] <Y>: _N
Enter type of ray casting [Nearest/+X/-X/+Y/-Y/Angle] <+X>:
Enter an option [Boundary set/Island detection/Object type]:
Specify internal point or [Advanced options]: _non Selecting everything...
Selecting everything visible...
Analyzing the selected data...

Specify internal point or [Advanced options]:
BOUNDARY created 1 polyline
Command: 5

  • 1

Ideas don't matter, execution does!

1908412_308002392716743_8165279281236341


#22 Thaistreetz

Thaistreetz

    biết lệnh adcenter

  • Advance Member
  • PipPipPipPipPipPipPip
  • 903 Bài viết
Điểm đánh giá: 505 (tốt)

Đã gửi 13 May 2011 - 01:18 PM

em cũng đang xài Cad2010 - XPSP3, nhưng không thấy lỗi như của bác. Nhưng những lỗi kiểu như thế này thỉnh thoảng em cũng gặp. trong truờng hợp đó em thuờng tắt cad đi rồi mở lại thì không bị lỗi nữa.
  • 1

Hình đã gửi
IN HIM, I TRUST. THE TRUST IN MY GOD


#23 gia_bach

gia_bach

    biết lệnh adcenter

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 1435 Bài viết
Điểm đánh giá: 1426 (rất tốt)

Đã gửi 13 May 2011 - 01:50 PM

em cũng đang xài Cad2010 - XPSP3, nhưng không thấy lỗi như của bác. Nhưng những lỗi kiểu như thế này thỉnh thoảng em cũng gặp. trong truờng hợp đó em thuờng tắt cad đi rồi mở lại thì không bị lỗi nữa.

Cám ơn các bác đã trả lời.

Thử k/tra trên 1 số máy cài Cad2010 - XPSP3 thì có cái bị lỗi có cái không. <_<

Đã tìm ra vấn đề.
(do đặt tên biến toàn cục trong 1 hàm sử dụng REATOR)

Lisp tưởng là đơn giản nhưng cũng dễ bị "tẩu hỏa nhập ma".

Bài viết đã được chỉnh sửa nội dung bởi gia_bach: 14 May 2011 - 08:51 AM

  • 0

#24 ketxu

ketxu

    Copier - Paster - Editor

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

Đã gửi 16 December 2011 - 11:16 PM

Mọi người bắt bệnh hộ ketxu vụ này xem do đâu với, e nghĩ mãi chưa thông:
1- Có 1 hàm setvar đơn giản :

(defun setvars()(setvar "pickfirst" 1))

=> Test trên command OK. Gọi trực tiếp từ hàm khác OK

2 - Viết sự kiện cho nó khi click vào 1 nút trong DCL :

(defun c:Test (/ fl ret dcl_id)
(vl-load-com)
(setq fl (vl-filename-mktemp "mip" nil ".dcl"))
(setq ret (open fl "w"))
(mapcar
'(lambda (x) (write-line x ret))
(list
"test_DCL : dialog {label=\"Test\"; width = 40;fixed_width = true;"
":button {label = \"Tho\U+00E1t\"; is_cancel = true;fixed_width = true;width = 1;}"
":button {label = \"Setvar Test\";fixed_width = true;width = 1;key = \"kTest\";}"
"}"
)
)
(setq ret (close ret))
(if (and (not (minusp (setq dcl_id (load_dialog fl))))
(new_dialog "test_DCL" dcl_id)
)
(progn

(action_tile "kTest" "(setvars)") ;Su kien duy nhat


(setq dlg_Exit (start_dialog))
) ;_ end of progn
) ;_ end of if
(unload_dialog dcl_id)
(vl-file-delete fl)
ret
)
=> Chạy : ; error: AutoCAD variable setting rejected: "Pickfirst" 1
3- Đổi lại hàm ở 1 :

(defun setvars()(setvar "pickadd" 1))

=> CHạy : mượt

4- Không thông qua hàm mà cho trực tiếp vào code
thay : (action_tile "kTest" "(setvars)")
thành : (action_tile "kTest" "(setvar \"Pickfirst\" 1)")
=> Ẳng

5 - Thay : (action_tile "kTest" "(setvar \"Pickfirst\" 1)")
thành : (action_tile "kTest" "(setvar \"Snapang\" 1)")
=> OK

==>????
  • 0

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


#25 gia_bach

gia_bach

    biết lệnh adcenter

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 1435 Bài viết
Điểm đánh giá: 1426 (rất tốt)

Đã gửi 18 December 2011 - 11:26 AM

Mọi người bắt bệnh hộ ketxu vụ này xem do đâu với, e nghĩ mãi chưa thông:
....


(defun c:Test (/ fl ret dcl_id)
(vl-load-com)
(setq fl (vl-filename-mktemp "mip" nil ".dcl"))
(setq ret (open fl "w"))
(mapcar
'(lambda (x) (write-line x ret))
(list
"test_DCL : dialog {label=\"Test\"; width = 40;fixed_width = true;"
":button {label = \"Tho\U+00E1t\"; is_cancel = true;fixed_width = true;width = 1;}"
":button {label = \"Setvar Test\";fixed_width = true;width = 1;key = \"kTest\";}"
"}"
)
)
(setq ret (close ret))
(if (and (not (minusp (setq dcl_id (load_dialog fl))))
(new_dialog "test_DCL" dcl_id)
)
(progn

(action_tile "kTest" "(setvars)") ;Su kien duy nhat


(setq dlg_Exit (start_dialog))
) ;_ end of progn
) ;_ end of if
(unload_dialog dcl_id)
(vl-file-delete fl)
ret
)
=> Chạy : ; error: AutoCAD variable setting rejected: "Pickfirst" 1
....
==>????

Có 1 vài hàm không thể thực hiện (Restricted) khi 1 hộp thoại (Dialog) đang được mở.
Functions Restricted When a Dialog Box Is Open
While a dialog box is active—that is, during the start_dialog call—you cannot call any function that requires user input on the AutoCAD command line, or affects the display outside the dialog box (for example, in the AutoCAD graphics window). This restriction includes functions that write text, such as print, princ, and prin1.
You can issue ssget calls, as long as you do not use any options that require user input.
If your program calls one of the restricted functions between the start_dialog and done_dialog calls, AutoCAD terminates all dialog boxes and displays the following error message: AutoCAD rejected function

có thể khắc phục bằng cách lưu vào biến, sau khi đóng hộp thoại mới gọi hàm thực thi.
(action_tile "kTest" "(setq pick 1)(done_dialog 1)") ;Su kien duy nhat
...
(vl-file-delete fl)
(if (= pick 1)(setvar "pickfirst" 1))
...
  • 2

#26 ketxu

ketxu

    Copier - Paster - Editor

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

Đã gửi 18 December 2011 - 07:28 PM

Có 1 vài hàm không thể thực hiện (Restricted) khi 1 hộp thoại (Dialog) đang được mở.

Thật bất ngờ. Em cũng đã dùng giải pháp này nhưng lại k hiểu lý do. Hỏi trên các diễn đàn khác cũng thấy im lặng. Bác gia_bach quả là siêu ^^
Thật lạ là ngay cả biến snapang làm thay đổi editor tức thì thì lại k rejected
  • 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


#27 gia_bach

gia_bach

    biết lệnh adcenter

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 1435 Bài viết
Điểm đánh giá: 1426 (rất tốt)

Đã gửi 19 December 2011 - 08:44 AM

Thật bất ngờ. Em cũng đã dùng giải pháp này nhưng lại k hiểu lý do. Hỏi trên các diễn đàn khác cũng thấy im lặng. Bác gia_bach quả là siêu ^^
Thật lạ là ngay cả biến snapang làm thay đổi editor tức thì thì lại k rejected

Ketxu quá lời.
Chẳng qua là Ketxu post bài vào cuối tuần nên đa số đều Online ở trạng thái "Read Only + No CAD".
Và tôi có phần may mắn khi "lật đúng trang sách" có nội dung cần tìm.
  • 1

#28 Doan Van Ha

Doan Van Ha

    biết lệnh adcenter

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

Đã gửi 21 May 2013 - 04:04 PM

Hãy cẩn thận khi chọn đối tượng dùng tùy chọn "fence"!!!

Hình dưới đây gồm 4 Line, giao nhau tại 4 điểm. Điều oái oăm là khi chọn đối tượng với tùy chọn "f" qua các cặp điểm giao nhau thì chúng cho những kết quả rất chi trời ơi! Biết để đề phòng nhé, chứ không thì có ngày dính chẩu!

File test:

http://www.cadviet.c...oam_cua_cad.dwg

Image:

67029_oai_oam_cad.png


  • 1

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


#29 Doan Van Ha

Doan Van Ha

    biết lệnh adcenter

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

Đã gửi 31 May 2013 - 03:18 PM

Hai đối tượng không giao nhau vẫn có... giao điểm!!!

Thêm một lỗi "oái oăm" nữa mà người code lisp có thể mắc phải, đó là: 2 đối tượng không giao nhau trực tiếp (không xét giao biểu kiến - tức giao nhau nếu kéo dài chúng ra) vẫn tồn tại giao điểm, dù là xác định bằng Cad hay bằng Lisp.

Các bạn test bằng ví dụ trong file gởi kèm, sẽ thấy tồn tại giao điểm, dù chúng hở.

- Test bằng osnap của cad.

- Test bằng các hàm lisp tìm giao điểm.

Nhưng, giao điểm sẽ "biến mất" nếu chúng ta zoom đủ lớn.

http://www.cadviet.c...loi_oai_oam.dwg


  • 1

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


#30 ketxu

ketxu

    Copier - Paster - Editor

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

Đã gửi 31 May 2013 - 03:53 PM

Có thể gap quá quá nhỏ so với góc VIew nên CAD "lờ" đi chăng ^^


  • 0

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


#31 Doan Van Ha

Doan Van Ha

    biết lệnh adcenter

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

Đã gửi 31 May 2013 - 04:10 PM

Nhưng "gap" bao nhiêu thì nó không "lờ" đi mới là vấn đề?

Hình như nó liên quan tới hàm (acet-geom-pixel-unit) nhưng chưa biết chính xác, đành post lên để cảnh báo thôi. Hy vọng có ai đó phát hiện ra thì tiếp tục vậy.


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


#32 Tue_NV

Tue_NV

    KS Võ Quang Tuệ

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

Đã gửi 31 May 2013 - 04:13 PM

Hai đối tượng không giao nhau vẫn có... giao điểm!!!

Thêm một lỗi "oái oăm" nữa mà người code lisp có thể mắc phải, đó là: 2 đối tượng không giao nhau trực tiếp (không xét giao biểu kiến - tức giao nhau nếu kéo dài chúng ra) vẫn tồn tại giao điểm, dù là xác định bằng Cad hay bằng Lisp.

Các bạn test bằng ví dụ trong file gởi kèm, sẽ thấy tồn tại giao điểm, dù chúng hở.

- Test bằng osnap của cad.

- Test bằng các hàm lisp tìm giao điểm.

Nhưng, giao điểm sẽ "biến mất" nếu chúng ta zoom đủ lớn.

http://www.cadviet.c...loi_oai_oam.dwg

 

Ta có thể dùng hàm Lisp tìm giao điểm và các hàm Lisp để kiểm tra 2 đối tượng không giao nhau trực tiếp

"Gap" kiểm tra  vượt quá ngưỡng 1.E-9 thì lúc đó không thể tìm chúng có giao nhau hay hở mà thôi. Trong khoảng lệch 1E-9 này quá nhỏ Lisp mới chịu vì Units của CAD chỉ sai số tới giới hạn 1E-9

Hai đối tượng không giao nhau  trong bản vẽ bác post hoàn toàn có thể dùng các hàm lisp để kiểm tra được


  • 0

#33 Doan Van Ha

Doan Van Ha

    biết lệnh adcenter

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

Đã gửi 31 May 2013 - 04:59 PM

Ta có thể dùng hàm Lisp tìm giao điểm và các hàm Lisp để kiểm tra 2 đối tượng không giao nhau trực tiếp

"Gap" kiểm tra  vượt quá ngưỡng 1.E-9 thì lúc đó không thể tìm chúng có giao nhau hay hở mà thôi. Trong khoảng lệch 1E-9 này quá nhỏ Lisp mới chịu vì Units của CAD chỉ sai số tới giới hạn 1E-9

Hai đối tượng không giao nhau  trong bản vẽ bác post hoàn toàn có thể dùng các hàm lisp để kiểm tra được

1). 1E-9 là bác Tue_NV đoán mò rồi!  :lol: Phạt 1 like thôi. Vẫn bản vẽ đó, tôi cắt bớt 2 đầu mút để nó cách nhau 0.00000013 (6 chữ số 0 sau dấu chấm) >> nó vẫn giờ... ao... giao. Khoảng cách có lớn bao nhiêu thì vẫn ép chúng giao nhau được.

2). Bác thử đề xuất giải thuật để kiểm tra 2 đối tượng có giao nhau thực chất hay không, trong trường hợp tổng quát? Tôi không nghĩ ra.


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


#34 Tue_NV

Tue_NV

    KS Võ Quang Tuệ

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

Đã gửi 31 May 2013 - 05:16 PM

1). 1E-9 là bác Tue_NV đoán mò rồi!  :lol: Phạt 1 like thôi. Vẫn bản vẽ đó, tôi cắt bớt 2 đầu mút để nó cách nhau 0.00000013 (6 chữ số 0 sau dấu chấm) >> nó vẫn giờ... ao... giao. Khoảng cách có lớn bao nhiêu thì vẫn ép chúng giao nhau được.

2). Bác thử đề xuất giải thuật để kiểm tra 2 đối tượng có giao nhau thực chất hay không, trong trường hợp tổng quát? Tôi không nghĩ ra.

 

Bác không nghĩ ra mà đòi phạt Tue_NV à?  :lol:

Code đây bác. Bác dùng code để kiểm tra bản vẽ của bác thử xem

(defun ktgd(e1 e2);kiemtragiaodiem
  (if (setq gd (vlax-invoke (vlax-ename->vla-object e1) 'IntersectWith (vlax-ename->vla-object e2) 0))
    (if (apply 'and
           (mapcar '(lambda(x y) (= (rtos x 2 99) (rtos y 2 99)))
              (vlax-curve-getClosestPointTo e1 gd nil)
              (vlax-curve-getClosestPointTo e2 gd nil)
           ))
        (alert "\n Ton tai giao diem")
        (alert "\n Khong Ton tai giao diem")
     )
            (alert "\n Khong Ton tai giao diem")
  )
)
(defun ktgd(e1 e2);kiemtragiaodiem
  (if (setq gd (vlax-invoke (vlax-ename->vla-object e1) 'IntersectWith (vlax-ename->vla-object e2) 0))
    (if (apply 'and
           (mapcar '(lambda(x y) (= (rtos x 2 99) (rtos y 2 99)))
              (vlax-curve-getClosestPointTo e1 gd nil)
              (vlax-curve-getClosestPointTo e2 gd nil)
           ))
        (alert "\n Ton tai giao diem")
        (alert "\n Khong Ton tai giao diem")
     )
(alert "\n Khong Ton tai giao diem")
  )
)
(defun ktgd(e1 e2);kiemtragiaodiem
  (if (setq gd (vlax-invoke (vlax-ename->vla-object e1) 'IntersectWith (vlax-ename->vla-object e2) 0))
    (if (apply 'and
           (mapcar '(lambda(x y) (= (rtos x 2 99) (rtos y 2 99)))
              (vlax-curve-getClosestPointTo e1 gd nil)
              (vlax-curve-getClosestPointTo e2 gd nil)
           ))
        (alert "\n Ton tai giao diem")
        (alert "\n Khong Ton tai giao diem")
     )
(alert "\n Khong Ton tai giao diem")
  )
)
(defun ktgd(e1 e2);kiemtragiaodiem
  (if (setq gd (vlax-invoke (vlax-ename->vla-object e1) 'IntersectWith (vlax-ename->vla-object e2) 0))
    (if (apply 'and
           (mapcar '(lambda(x y) (= (rtos x 2 99) (rtos y 2 99)))
   (vlax-curve-getClosestPointTo e1 gd nil)
   (vlax-curve-getClosestPointTo e2 gd nil)
           ))
        (alert "\n Ton tai giao diem")
        (alert "\n Khong Ton tai giao diem")
     )
  )
)
(defun ktgd(e1 e2);kiemtragiaodiem
  (if (setq gd (vlax-invoke (vlax-ename->vla-object e1) 'IntersectWith (vlax-ename->vla-object e2) 0))
    (if (apply 'and
           (mapcar '(lambda(x y) (= (rtos x 2 99) (rtos y 2 99)))
   (vlax-curve-getClosestPointTo e1 gd nil)
   (vlax-curve-getClosestPointTo e2 gd nil)
           ))
        (alert "\n Ton tai giao diem")
        (alert "\n Khong Ton tai giao diem")
     )
  )
)

  • 0

#35 Doan Van Ha

Doan Van Ha

    biết lệnh adcenter

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

Đã gửi 31 May 2013 - 06:34 PM

:lol:

Tôi nói ở trên có 2 ý:

1). 1E-9: bác có chấp nhận là mờ o huyền không? Nếu đúng như tôi thì like. Nếu chứng minh được tôi nói ẩu thì tôi like ngược.

2). Đang bàn đến chuyện "cực nhỏ", bác lại thay cái "cực nhỏ" này (1E-9) bằng cái "cực nhỏ" khác (1E-99). Ngộ nhỡ 1E99 thì OK nhưng 1E100 thì NO, và biết lấy 1Exyztuv nào cho vừa?


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


#36 Tue_NV

Tue_NV

    KS Võ Quang Tuệ

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

Đã gửi 31 May 2013 - 09:23 PM

:lol:

Tôi nói ở trên có 2 ý:

1). 1E-9: bác có chấp nhận là mờ o huyền không? Nếu đúng như tôi thì like. Nếu chứng minh được tôi nói ẩu thì tôi like ngược.

2). Đang bàn đến chuyện "cực nhỏ", bác lại thay cái "cực nhỏ" này (1E-9) bằng cái "cực nhỏ" khác (1E-99). Ngộ nhỡ 1E99 thì OK nhưng 1E100 thì NO, và biết lấy 1Exyztuv nào cho vừa?

 

1) Đúng cái chi mà đúng bác. Bác nói không thể dùng hàm Lisp để xác định hai đối tượng giao nhau biểu kiến vẫn có giao điểm? Tue_NV đã chứng minh điều ngược lại bằng code xác định rằng đã xác định hai đối tượng  giao nhau biểu kiến (trong file bác upload) không có giao điểm bằng code rồi đó

 

2) Có thể Tue_NV đã nhầm số 1E-9. Chính xác là 1E-14. Hàm (rtos so 2 99) cũng = (rtos so 2 14) 

Như Tue_NV cũng đã nói vì bài toán này tương đối. Điều này đã nói ở bài viết trên


  • 0

#37 Doan Van Ha

Doan Van Ha

    biết lệnh adcenter

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

Đã gửi 31 May 2013 - 10:08 PM

1). Có sự nhầm lẫn từ điều 1 sang điều 2 ?

2). Có sự nhầm lẫn từ điều 2 sang điều 1 ?

3). Lại có chuyện 1E-14 và 1E-99 nữa ư? Tôi chưa hề biết 14 và 99 có gì đặc biệt trong lisp. Nếu điều này là có sự đặc biệt đáng ghi nhận thì xin được học hỏi và srr mọi người đã mất công đọc ý kiến này.

"Như Tue_NV cũng đã nói vì bài toán này tương đối. Điều này đã nói ở bài viết trên"

Bác đã nói ở đâu? Mà sao đã nói lại còn chứng minh?

Thôi. Cá nhân tôi xin dừng tranh luận vấn đề này ở đây - như đã từng xin dừng nhiều cuộc tranh luận trên CadViet.


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


#38 tien2005

tien2005

    biết lệnh properties

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

Đã gửi 02 August 2014 - 05:48 PM

Mình có đoạn lisp như sau:

(setq    path (strcat (vl-string-right-trim "acad.dcl" (findfile "acad.dcl")) "test.txt"))
(setq openfile (open path "w"))

 

- Máy ở công ty ( cad 2007 và cad 2010) thì chạy bình thường,, cách đây 3 ngày sau khi windown7 update thì khi chay đến dòng (open path "w") thì chạy cad 2010 báo lổi "; error: bad argument type: stringp nil", còn cad 2007 thì vẫn chạy

 

- Máy ở nhà cách đây 1 tháng sau khi thay ổ đĩa SSD và cài đặt mới thì  cad2007 và cad2010 chạy bình thường, sau khi W7 update thì cad 2007 và 2010 chạy đều báo lổi như trên. Mình tiến hành restore w7 về thời điểm trước đó nhưng vẫn không khắc phục được lổi trên

 

Do máy nhà mới mà bị lổi nên mình cài lại tất cả và tắt update của W7 nên dùng cho đến bây giờ không bi lổi. Còn máy công ty thì nhiều chương trình nên ngại cài lại mới

 

Có ai đã bị như thế này chưa? và có cách khắc phục nào khác hay không


  • 0

#39 Tot77

Tot77

    biết lệnh adcenter

  • Members
  • PipPipPipPipPipPipPip
  • 990 Bài viết
Điểm đánh giá: 498 (tốt)

Đã gửi 04 August 2014 - 10:43 AM

Lỗi do máy không tìm được file acad.dcl, có thể do windows thay đổi registry.

Bạn có thể đổi như sau:

(setq path (strcat (vl-string-right-trim "acad.dcl"

                 (strcat (substr (setq sup (vla-get-SupportPath (vla-get-Files (vla-get-Preferences (vlax-get-acad-object))))) 1

                 (vl-string-search ";" sup)) "\\acad.dcl")) "test.txt"))

 

(setq path (strcat (vl-string-right-trim "acad.dcl"
(strcat (substr (setq sup (vla-get-SupportPath (vla-get-Files
(vla-get-Preferences (vlax-get-acad-object))))) 1 (vl-string-search ";" sup)) "\\acad.dcl")) "test.txt"))

  • 0

#40 tien2005

tien2005

    biết lệnh properties

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

Đã gửi 04 August 2014 - 01:02 PM

Thanks Tot77

 

mình dùng (setq path (getfiled "Select file" (getvar "DWGPREFIX") "txt" 1)) (lưu file ở ổ D, E, ...) rồi mở cũng bị lổi như trên

 

Hầu như các file tạo mới bằng lisp đều bị như vậy. Không biết vlisp có tạo mới file rồi ghi lại các giá trị để các lisp khác đọc hay không? nếu có cho mình xin code mẫu để test


  • 0