Đến nội dung


Hình ảnh
- - - - -

[Thảo luận] - Gán code lisp vào bản vẽ và tự động tải code khi mở bản vẽ


  • Please log in to reply
11 replies to this topic

#1 Thaistreetz

Thaistreetz

    biết lệnh adcenter

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

Đã gửi 04 July 2012 - 09:37 PM

Vấn đề này mình vướng mắc cũng khá lâu rồi nhưng chưa có cách nào giải quyết được, hôm nay đành post lên đây mong các bác cùng thảo luận giải quyết vấn đề này giúp mình.

Nó ngắn gọn thế này thôi: Mình muốn lưu vào dữ liệu của 1 bản vẽ 1 đoạn code lisp, và khi đem bản vẽ đó mở ở bất kì máy nào, với bất kỳ đời cad nào có thể mở bản vẽ đó từ 2004 trở lên (thấp hơn nữa thì càng tốt) thì đoạn code lưu trong bản vẽ đó tự động được tải.
nôm na thì nó giống i xì như cách thức mà con virus Acad.lsp đã làm, nhưng mình không muốn bất kì file nào được tạo ra cùng bản vẽ. tất nhiên là không phải mình định viết 1 em virus phá anh em đâu nhé ^^

Mình tin chắc các bác cũng nhận thấy được rằng nếu thực hiện được công việc này thì ứng dụng của nó là rất lớn. Hiện tại thì mình mới chỉ giải quyết được 1/2 công việc, đó là lưu đoạn code đó vào Xrecord hoặc vào 1 trong các biến hệ thống Users# dưới dạng 1 chuỗi.
1/2 vấn đề khó khăn còn lại là mình không làm sao để cad có thể tự động đọc và tải đoạn code đó vào bản vẽ khi mở bản vẽ.

Trên đây là hướng đi của mình và đang gặp ngõ cụt. Nếu các bác có cách nào thông cái ngõ này ra hoặc có đường khác để đi xin hãy mách nước cho mình. Mình mong muốn có thể giải quyết vấn đề này thuần lisp vì mình chỉ biết mỗi lisp và mình áp dụng cái này cho 1 vài chương trình mình viết bằng lisp, nhưng nếu không thể thì bằng các ngôn ngữ khác cũng được. Cảm ơn các bác trước :D
  • 0

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


#2 ketxu

ketxu

    Copier - Paster - Editor

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

Đã gửi 04 July 2012 - 09:54 PM

Hãy tưởng tượng đoạn code của bác gắn mã gọi Shell format ổ hiện hành ^^
  • 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


#3 Thaistreetz

Thaistreetz

    biết lệnh adcenter

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

Đã gửi 04 July 2012 - 09:58 PM

ketxu bựa thế! mình chưa kịp edit bài viết đã phê rồi :lol:
  • 0

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


#4 TRUNGNGAMY

TRUNGNGAMY

    biết lệnh block

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

Đã gửi 04 July 2012 - 10:57 PM

Vấn đề này mình vướng mắc cũng khá lâu rồi nhưng chưa có cách nào giải quyết được, hôm nay đành post lên đây mong các bác cùng thảo luận giải quyết vấn đề này giúp mình.

Nó ngắn gọn thế này thôi: Mình muốn lưu vào dữ liệu của 1 bản vẽ 1 đoạn code lisp, và khi đem bản vẽ đó mở ở bất kì máy nào, với bất kỳ đời cad nào có thể mở bản vẽ đó từ 2004 trở lên (thấp hơn nữa thì càng tốt) thì đoạn code lưu trong bản vẽ đó tự động được tải.
nôm na thì nó giống i xì như cách thức mà con virus Acad.lsp đã làm, nhưng mình không muốn bất kì file nào được tạo ra cùng bản vẽ. tất nhiên là không phải mình định viết 1 em virus phá anh em đâu nhé ^^

Mình tin chắc các bác cũng nhận thấy được rằng nếu thực hiện được công việc này thì ứng dụng của nó là rất lớn. Hiện tại thì mình mới chỉ giải quyết được 1/2 công việc, đó là lưu đoạn code đó vào Xrecord hoặc vào 1 trong các biến hệ thống Users# dưới dạng 1 chuỗi.
1/2 vấn đề khó khăn còn lại là mình không làm sao để cad có thể tự động đọc và tải đoạn code đó vào bản vẽ khi mở bản vẽ.

Trên đây là hướng đi của mình và đang gặp ngõ cụt. Nếu các bác có cách nào thông cái ngõ này ra hoặc có đường khác để đi xin hãy mách nước cho mình. Mình mong muốn có thể giải quyết vấn đề này thuần lisp vì mình chỉ biết mỗi lisp và mình áp dụng cái này cho 1 vài chương trình mình viết bằng lisp, nhưng nếu không thể thì bằng các ngôn ngữ khác cũng được. Cảm ơn các bác trước :D

Muốn vậy, bạn phải cài một con "virus" vào máy bạn muốn thực thi công việc đó. Ví dụ : bạn đã lưu đoạn mã sau vào bản vẽ
(defun c:aaa() (setq a 1) (print a))
sau đó, khi mở file, bạn đọc lại nó, nó sẽ được lưu trong một st, tương tự như bạn làm công việc sau (việc này bạn cài vào file virus của bạn) :
(setq st "(defun c:aaa() (setq a 1) (print a))")
tiếp theo, cũng trong file virus, bạn thực hiện : (eval (read st))
bạn sẽ có hàm c:aaa. Để thực hiện, trong file virus bạn gọi (c:aaa)
Việc này tuy kg ghi code của bạn ra file nhưng phải có đoạn code thực thi trong file virus, còn nếu kg có cả file virus thì mình cũng chịu
Chúc bạn thành công
  • 0

#5 hochoaivandot

hochoaivandot

    biết dimradius

  • Members
  • PipPipPipPipPip
  • 310 Bài viết
Điểm đánh giá: 106 (tàm tạm)

Đã gửi 05 July 2012 - 08:08 AM

Vấn đề này mình vướng mắc cũng khá lâu rồi nhưng chưa có cách nào giải quyết được, hôm nay đành post lên đây mong các bác cùng thảo luận giải quyết vấn đề này giúp mình.

Nó ngắn gọn thế này thôi: Mình muốn lưu vào dữ liệu của 1 bản vẽ 1 đoạn code lisp, và khi đem bản vẽ đó mở ở bất kì máy nào, với bất kỳ đời cad nào có thể mở bản vẽ đó từ 2004 trở lên (thấp hơn nữa thì càng tốt) thì đoạn code lưu trong bản vẽ đó tự động được tải.
nôm na thì nó giống i xì như cách thức mà con virus Acad.lsp đã làm, nhưng mình không muốn bất kì file nào được tạo ra cùng bản vẽ. tất nhiên là không phải mình định viết 1 em virus phá anh em đâu nhé ^^

Mình tin chắc các bác cũng nhận thấy được rằng nếu thực hiện được công việc này thì ứng dụng của nó là rất lớn. Hiện tại thì mình mới chỉ giải quyết được 1/2 công việc, đó là lưu đoạn code đó vào Xrecord hoặc vào 1 trong các biến hệ thống Users# dưới dạng 1 chuỗi.
1/2 vấn đề khó khăn còn lại là mình không làm sao để cad có thể tự động đọc và tải đoạn code đó vào bản vẽ khi mở bản vẽ.

Trên đây là hướng đi của mình và đang gặp ngõ cụt. Nếu các bác có cách nào thông cái ngõ này ra hoặc có đường khác để đi xin hãy mách nước cho mình. Mình mong muốn có thể giải quyết vấn đề này thuần lisp vì mình chỉ biết mỗi lisp và mình áp dụng cái này cho 1 vài chương trình mình viết bằng lisp, nhưng nếu không thể thì bằng các ngôn ngữ khác cũng được. Cảm ơn các bác trước :D


Khi qua máy khác đó cũng phải load 1 code để thực hiện chứ? Nếu thế thì làm như vầy được không nhỉ?
1. Đọc dữ liệu lưu của bản vẽ.
2. Lưu 1 file lsp nội dung đó (có defun C:tenlenh()...) tại đường dẫn C:\\cadviet.lsp
3. (load C:\\cadviet.lsp)
4. (C:tenlenh)

Xin lỗi mọi người vì nội dung trả lời của mình trùng của TRUNGNGAMY . Vì mới đọc xong bài #1 mình bấm trả lời mà không đọc mấy #>1
  • 0

Dương Bá Diệp

 

www.cadonline.duyxuyen.vn 

 

Thành viên nhóm CADMAGIC

 


#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 05 July 2012 - 08:57 AM

Vấn đề này mình vướng mắc cũng khá lâu rồi nhưng chưa có cách nào giải quyết được, hôm nay đành post lên đây mong các bác cùng thảo luận giải quyết vấn đề này giúp mình.

Nó ngắn gọn thế này thôi: Mình muốn lưu vào dữ liệu của 1 bản vẽ 1 đoạn code lisp, và khi đem bản vẽ đó mở ở bất kì máy nào, với bất kỳ đời cad nào có thể mở bản vẽ đó từ 2004 trở lên (thấp hơn nữa thì càng tốt) thì đoạn code lưu trong bản vẽ đó tự động được tải.
nôm na thì nó giống i xì như cách thức mà con virus Acad.lsp đã làm, nhưng mình không muốn bất kì file nào được tạo ra cùng bản vẽ. tất nhiên là không phải mình định viết 1 em virus phá anh em đâu nhé ^^

Mình tin chắc các bác cũng nhận thấy được rằng nếu thực hiện được công việc này thì ứng dụng của nó là rất lớn. Hiện tại thì mình mới chỉ giải quyết được 1/2 công việc, đó là lưu đoạn code đó vào Xrecord hoặc vào 1 trong các biến hệ thống Users# dưới dạng 1 chuỗi.
1/2 vấn đề khó khăn còn lại là mình không làm sao để cad có thể tự động đọc và tải đoạn code đó vào bản vẽ khi mở bản vẽ.

Trên đây là hướng đi của mình và đang gặp ngõ cụt. Nếu các bác có cách nào thông cái ngõ này ra hoặc có đường khác để đi xin hãy mách nước cho mình. Mình mong muốn có thể giải quyết vấn đề này thuần lisp vì mình chỉ biết mỗi lisp và mình áp dụng cái này cho 1 vài chương trình mình viết bằng lisp, nhưng nếu không thể thì bằng các ngôn ngữ khác cũng được. Cảm ơn các bác trước :D

để cad có thể tự động đọc và tải đoạn code đó vào bản vẽ khi mở bản vẽ
-> Bạn chép mã lệnh để Load Lisp vào file acad2008doc.lsp (2008 là phiên bản của CAD)
  • 0

#7 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 05 July 2012 - 09:16 AM

Ý của bác Thái thế này cơ mà:
Mình muốn lưu vào dữ liệu của 1 bản vẽ 1 đoạn code lisp, và khi đem bản vẽ đó mở ở bất kì máy nào, với bất kỳ đời cad nào có thể mở bản vẽ đó từ 2004 trở lên (thấp hơn nữa thì càng tốt) thì đoạn code lưu trong bản vẽ đó tự động được tải.
  • 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.


#8 nataca

nataca

    biết lệnh adcenter

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

Đã gửi 05 July 2012 - 09:28 AM

Tự động load lisp (có sẵn trong bản vẽ hoặc bên ngoài) thì sẽ được coi là virut dù code có vì mục đích hòa bình hay phá hoại đi chăng nữa. Do vậy, phần mềm diệt virut nó cũng khử ngay thôi. Bỏ qua ý định này đi.
  • 0

#9 Tue_NV

Tue_NV

    KS Võ Quang Tuệ

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

Đã gửi 05 July 2012 - 09:32 AM

Ý của bác Thái thế này cơ mà:
Mình muốn lưu vào dữ liệu của 1 bản vẽ 1 đoạn code lisp, và khi đem bản vẽ đó mở ở bất kì máy nào, với bất kỳ đời cad nào có thể mở bản vẽ đó từ 2004 trở lên (thấp hơn nữa thì càng tốt) thì đoạn code lưu trong bản vẽ đó tự động được tải.

Tue_NV bổ sung tiếp :
nôm na thì nó giống i xì như cách thức mà con virus Acad.lsp đã làm, nhưng mình không muốn bất kì file nào được tạo ra cùng bản vẽ
Đoạn code chép vào acad####doc.lsp sẽ là: kiểm tra và đọc code mà bạn ấy đã lưu trong bản vẽ sẽ open
acad####doc.lsp không phải là file được tạo ra mà nó có sẵn trong CAD
  • 0

#10 nataca

nataca

    biết lệnh adcenter

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

Đã gửi 05 July 2012 - 09:45 AM

Tue_NV bổ sung tiếp :
Đoạn code chép vào acad####doc.lsp sẽ là: kiểm tra và đọc code mà bạn ấy đã lưu trong bản vẽ sẽ open
acad####doc.lsp không phải là file được tạo ra mà nó có sẵn trong CAD

nếu chép vào autocad của máy cần thực hiện thì cũng không khác mang file lisp theo là mấy. Ý của Thaistreetz là không cần mang theo bất cứ file nào theo ngoài file .dwg.
  • 0

#11 ketxu

ketxu

    Copier - Paster - Editor

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

Đã gửi 05 July 2012 - 09:48 AM

VBA gán được trực tiếp vào file dwg - Nhưng các vấn đề của nó thì bác biết rồi đó ^^
  • 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 05 July 2012 - 10:03 AM

Bác DVH, Ketxu và bác Nataca hiểu 9xác ý mình.
số là mình có 1 số ứng dụng sử dụng reactor, khổ một nỗi thằng reactor nó đòi hỏi phải có hàm callback để gọi đến cho 1 sự kiện.
Như đã biết, với object reactor thì các sự kiện được gán trực tiếp vào đối tượng trên bản vẽ. và khi gửi bản vẽ đi mình nhận được 1 số lời than phiền của đồng nghiệp rằng bản vẽ của mình hay bị báo lỗi lạ. sở dĩ có những lỗi này là do ở máy của người ta không có các hàm callback.
Ngoài ra thì nếu làm được việc này thì mình có thể viết được 1 ứng dụng bảo mật bản vẽ được nhúng luôn trong cơ sở dữ liệu bản vẽ, vấn đề này cũng khiến anh em tư vấn đau đầu từ khá lâu rồi.

Bác Nataca: bác cũng xem lại mấy ứng dụng sử dụng reactor trong lisp bác viết cho anh em cty mình đê, cũng rất hay bị báo lỗi kiểu vậy đấy, nó gây tâm lý rứt là khó chịu :lol:
  • 0

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