Đến nội dung


Hình ảnh
- - - - -

Có cách nào unload 1 file LISP


  • Please log in to reply
15 replies to this topic

#1 anonmyous

anonmyous

    biết vẽ arc

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

Đã gửi 01 September 2008 - 04:33 PM

Có cách nào Unload 1 file LISP ko các pác nhỉ, Load thì có (vl-load-all LISP-File) còn Unload thì dùng hàm gì bây giờ
  • 0

#2 pikeman286

pikeman286

    biết dimdiameter

  • Members
  • PipPipPipPipPip
  • 337 Bài viết
Điểm đánh giá: 244 (khá)

Đã gửi 01 September 2008 - 05:13 PM

Có cách nào Unload 1 file LISP ko các pác nhỉ, Load thì có (vl-load-all LISP-File) còn Unload thì dùng hàm gì bây giờ

Em thì em chỉ biết là Unload nó đi bằng cách load một Lisp khác. Hoặc Exit nó đi rồi Open lại.....còn không biết cách nào khác hơn. :lol:
  • 0

#3 anonmyous

anonmyous

    biết vẽ arc

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

Đã gửi 02 September 2008 - 08:56 AM

Vấn đề đặt ra như sau :
1. Khi add 1 LISP vào Startup của CAD thì mặc nhiên khi mở 1 file nó sẽ LOAD tất cả các LISP có trong Startup
2. Khi 1 LISP ko được add vào CAD's Startup thì mỗi lần mở 1 file lại phải LOAD nó 1 lần.
3. Một LISP ko được add vào CAD's Startup nhưng lại được LOAD bằng 1 LISP khác (cũng ko có trong CAD's Startup) bẳng hàm vl-load-all thì lại mặc nhiên được LOAD cho file mới kể từ sau khi được gọi bằng hàm trên (chú ý : tất cả đều ko có trong CAD's Startup)
Vậy theo mình nghĩ phải có cách để loại nó ra khỏi bộ nhớ chứ nhỉ??? Đó là ý kiến của mình.
  • 0

#4 nataca

nataca

    biết lệnh adcenter

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

Đã gửi 02 September 2008 - 09:25 AM

Vấn đề đặt ra như sau :
1. Khi add 1 LISP vào Startup của CAD thì mặc nhiên khi mở 1 file nó sẽ LOAD tất cả các LISP có trong Startup
2. Khi 1 LISP ko được add vào CAD's Startup thì mỗi lần mở 1 file lại phải LOAD nó 1 lần.
3. Một LISP ko được add vào CAD's Startup nhưng lại được LOAD bằng 1 LISP khác (cũng ko có trong CAD's Startup) bẳng hàm vl-load-all thì lại mặc nhiên được LOAD cho file mới kể từ sau khi được gọi bằng hàm trên (chú ý : tất cả đều ko có trong CAD's Startup)
Vậy theo mình nghĩ phải có cách để loại nó ra khỏi bộ nhớ chứ nhỉ??? Đó là ý kiến của mình.

Ờ đúng đấy. Đôi khi dùng xong chức năng của Lisp nào đó rồi muốn unload nó đi để đỡ " đánh nhau" giữa các lisp khác nhau mà ko biết làm thế nào. Các cao thủ giúp một tay đi. :lol:
  • 0

#5 Nộ Thiên

Nộ Thiên

    biết lệnh ddedit

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

Đã gửi 02 September 2008 - 10:21 AM

Ờ đúng đấy. Đôi khi dùng xong chức năng của Lisp nào đó rồi muốn unload nó đi để đỡ " đánh nhau" giữa các lisp khác nhau mà ko biết làm thế nào. Các cao thủ giúp một tay đi. :lol:

Có gì mà "óanh nhau". Cái sau sẽ đè lên cái trước nếu trùng. Nếu dùng cái load sau thì kg việc gì phải lo lắng cả. Nên unload là kg cần thiết. Chỉ khi nào dùng cái đã load trước thì mới có chuyện.
Vì vậy tốt nhất là ngay trước khi xài thì dù load rồi hay chưa cứ load lên lại là chắc ăn.
  • 0

#6 Snowman

Snowman

    biết lệnh mirror

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

Đã gửi 02 September 2008 - 10:21 AM

Đây là một đoạn trích từ help

Unload/Remove

Unloads the selected applications or removes them from the History List. Unload is available only when a file is selected on the Loaded Applications tab. Remove is available only when you select a file on the History List tab.

LISP applications cannot be unloaded, nor can ObjectARX applications that are not registered for unloading.

Note that Remove does not unload the selected application. The Remove option is also available from a shortcut menu by right-clicking an application on the History List tab.


Như vậy là ko có cách nào unload lisp đã load trừ khi ...close file và open lại :lol: (Tất nhiên phải remove nếu đã trót đưa nó vào startup suite)
Có thể dùng mẹo nhỏ, tạo một file lisp với mẫu
(defun C:<Tên lệnh cần bỏ> ( / temp) (setq temp nil) )
(Phải đưa dòng setq vào vì defun ko cho fép định nghĩa 1 hàm mà ko làm gì cả - chuối thật!)
Rồi add vào startup, mỗi khi muốn bỏ lệnh nào thì thêm một dòng như trên vào, vậy là lệnh đó bị vô hiệu hoá mà ko cần đóng file mở lại (cách này có thể ko cần gỡ startup mà chỉ cần load file lisp vô hiệu hoá hàm sau cùng)
  • 0

. - ' * ' - .. - ... "Sống trong đời sống cần có một tấm lòng..." . - ' * ' - .. -
-----------------------------------------------------------------------------------

Hình đã gửi Hình đã gửi


#7 anonmyous

anonmyous

    biết vẽ arc

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

Đã gửi 02 September 2008 - 10:26 AM

Hihi đúng như vậy đó Snowman, chỉ có cách lập 1 hàm do nothing trùng với tên hàm đã load, có vẻ như là không có cách nào khác rồi:D
  • 0

#8 Nguyen Hoanh

Nguyen Hoanh

    biết lệnh adcenter

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

Đã gửi 02 September 2008 - 12:38 PM

Có thể dùng mẹo nhỏ, tạo một file lisp với mẫu
(defun C: ( / temp) (setq temp nil) )
(Phải đưa dòng setq vào vì defun ko cho fép định nghĩa 1 hàm mà ko làm gì cả - chuối thật!)

Bạn có thể tạo hàm ngắn hơn như sau:
(defun C: () nil)
  • 0

#9 nataca

nataca

    biết lệnh adcenter

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

Đã gửi 02 September 2008 - 12:45 PM

Bạn có thể tạo hàm ngắn hơn như sau:
(defun C:<Tên lệnh cần bỏ> () nil)

Đúng rồi. Hay :lol: Thế mà ko nghĩ ra. Cảm ơn các bác :lol:
  • 0

#10 Thaistreetz

Thaistreetz

    biết lệnh adcenter

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

Đã gửi 15 July 2011 - 11:50 AM

Đúng rồi. Hay :lol: Thế mà ko nghĩ ra. Cảm ơn các bác :lol:

Chả thấy hay tí nào. Giả sử trước khi load lisp ta có lệnh ABC thực hiện chức năng 1. lisp được load vào cũng có 1 lệnh là ABC sẽ thực hiện chức năng 2. mình muốn sau khi unload nó trả lại chức năng cũ của lệnh đó trước khi load. Ý của chủ topic chắc cũng giống ý này của mình.
Mục đích của việc này là để tạo ra sự linh động, người khác ngồi vào máy của mình nếu không quen với hệ thống tên lệnh của mình thì có thể unload nó đi 1 cách dễ dàng hơn.

Ẹc. ketxu xóa dùm mình 1 bài nhé. thank
  • 0

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


#11 ketxu

ketxu

    Copier - Paster - Editor

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

Đã gửi 15 July 2011 - 01:17 PM

Ồ,e thấy tắt đi rồi mở lại cũng đâu có lâu ^^
THeo e nghĩ, tốt nhất là tránh trùng lặp thôi. Đặt tên rõ ràng, hoặc đặc biệt, hoặc cho phép người dùng chọn lệnh thay thế ngay lúc load lisp
  • 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


#12 Thaistreetz

Thaistreetz

    biết lệnh adcenter

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

Đã gửi 15 July 2011 - 02:58 PM

không đơn giản chỉ là tắt đi mở lại đâu ketxu. sẽ fải remove lisp ra khỏi startup suite truớc khi tắt bản vẽ. rồi lần sau muốn dùng thì lại fải mất công add lại rất là loằng ngoằng. làm 1, 2 lần không sao. nhưng thêm vài lần nữa là đã cảm thấy chán rồi.
ở cty mình có 1 bộ ứng dụng được áp dụng cho toàn cty, nhưng do trong quá trình làm việc mỗi người lại hình thành những thói quen nhất định theo tích chất công việc nên lại tự viết riêng ứng dụng cho minh, tên lệnh đè lên ứng dụng gốc là chuyện thường xuyên.
  • 0

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


#13 ketxu

ketxu

    Copier - Paster - Editor

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

Đã gửi 15 July 2011 - 04:03 PM

Vậy bác làm cái tự động add hoặc remove file lisp ra khỏi support :">
Và cho e hỏi là trong trường hợp của bác, cái code ABC đầu có thay đổi được khô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


#14 Thaistreetz

Thaistreetz

    biết lệnh adcenter

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

Đã gửi 23 July 2011 - 09:22 AM

Tất nhiên là không được roài, bởi các lệnh của ứng dụng gốc được đóng gói vào 1 file FAS duy nhất, trong đó không chỉ có lệnh Lisp mà còn có cả các hàm con của nó.
cái mà mình muốn là 1 giải pháp loại bỏ triệt để mọi ứng dụng cá nhân ra khỏi bản vẽ 1 chỉ bằng 1 lệnh được nhúng trong chính ứng dụng đó cho nhanh gọn và tránh mọi xung đột có thể sảy ra. nó giống như là khi ta load 1 ứng dụng arx rùi sau khi không dùng nữa có thể unload nó ra khỏi bản vẽ mà không để lại dấu vết gì í.
Tiện thể cho mình hỏi, bạn có biết cách sử dụng hàm vl-unload-vlx không? mình đọc help mà làm hoài không fát nào trả về T được :(
  • 0

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


#15 ketxu

ketxu

    Copier - Paster - Editor

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

Đã gửi 23 July 2011 - 09:58 AM

Hàm con thì có thể gán cho các biến và reset lại nếu cần, còn C: thì e chưa tìm ra cách, thường bị lao vào tình trạng endless loop nếu cố gán C: lại lệnh cũ ^^
  • 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


#16 hnhmai

hnhmai

    biết vẽ line

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

Đã gửi 25 July 2011 - 06:06 PM

1. Nếu Bạn dùng Visual Lisp để tạo ứng dụng .VLX của Bạn. (bằng cách: File-> Make Application-> New Application Wizard trên menu của Visual Lisp ).
2. Và trong các tùy chọn của Wizard này Bạn chọn Expert và Separate namespace thì Bạn có thể Unload được ứng dụng đó.
Dùng hàm (vl-unload-vlx appname) để unload file .VLX.
  • 1