Đến nội dung


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

Hỏi về Lisp (thuật toán, ý tưởng, coding,...)


  • Please log in to reply
2851 replies to this topic

#1261 hochoaivandot

hochoaivandot

    biết dimradius

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

Đã gửi 19 August 2012 - 08:45 PM

Mình có 1 file lisp 1 có tên lệnh là fun1.
Mình dùng lisp khác load lisp 1 và thực hiện lệnh.
Có 2 cách mình hay làm để thực hiện lệnh là:
1. (command "fun1")
2. (C:fun1)

Nhưng không biết tại sao lúc mình làm cách 1 thì được,cách 2 thì không. Hoặc máy này mình làm được cách 2 nhưng máy khác mình copy qua lại dùng không được
Không biết cài này có phải do biến nào đó quy định hay không?
Mọi người biết xin chỉ dùm
  • 0

Dương Bá Diệp

 

www.cadonline.duyxuyen.vn 

 

Thành viên nhóm CADMAGIC

 


#1262 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 19 August 2012 - 09:31 PM

Mình có 1 file lisp 1 có tên lệnh là fun1.
Mình dùng lisp khác load lisp 1 và thực hiện lệnh.
Có 2 cách mình hay làm để thực hiện lệnh là:
1. (command "fun1")
2. (C:fun1)
Nhưng không biết tại sao lúc mình làm cách 1 thì được,cách 2 thì không. Hoặc máy này mình làm được cách 2 nhưng máy khác mình copy qua lại dùng không được
Không biết cài này có phải do biến nào đó quy định hay không?
Mọi người biết xin chỉ dùm

1). Lệnh lisp không dùng được với hàm command => điều bạn nói là vô lý, và chỉ xãy ra khi tên lệnh lisp trùng với tên lệnh của Cad.
2). (C:fun1) phải dùng luôn được.
  • 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.


#1263 Tue_NV

Tue_NV

    KS Võ Quang Tuệ

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

Đã gửi 19 August 2012 - 10:48 PM

1). Lệnh lisp không dùng được với hàm command => điều bạn nói là vô lý, và chỉ xãy ra khi tên lệnh lisp trùng với tên lệnh của Cad.
......

Gọi Fun = command. Fun có mặt :rolleyes:

(vl-load-com)
(defun c:fun() (alert "Goi fun bang command. fun co mat"))
(vlax-add-cmd "fun" (defun fun ()(c:fun)))
Thử :
(Command "fun")
  • 2

#1264 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 19 August 2012 - 11:10 PM

Cám ơn thông tin lý thú về hàm vlax-add-cmd để chuyển một lệnh lisp thành lệnh command.
Đúng là autolisp thì không thể (sách viết như thế) mà visual lisp thì có thể.
Srr bạn hochoaivandot vì sự hiểu biết chưa tới này.
  • 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.


#1265 ketxu

ketxu

    Copier - Paster - Editor

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

Đã gửi 20 August 2012 - 12:06 AM

Cám ơn thông tin lý thú về hàm vlax-add-cmd để chuyển một lệnh lisp thành lệnh command.
Đúng là autolisp thì không thể (sách viết như thế) mà visual lisp thì có thể.
Srr bạn hochoaivandot vì sự hiểu biết chưa tới này.

Đã đề cập trong chính topic này rồi nè bác ^^
http://www.cadviet.c...ndpost&p=148006

Tuy nhiên 2 câu hỏi của bác HHVD có vẻ chưa có cơ sở kiểm chứng :)
  • 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


#1266 hochoaivandot

hochoaivandot

    biết dimradius

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

Đã gửi 20 August 2012 - 08:39 AM

Đã đề cập trong chính topic này rồi nè bác ^^
http://www.cadviet.c...ndpost&p=148006

Tuy nhiên 2 câu hỏi của bác HHVD có vẻ chưa có cơ sở kiểm chứng :)


File lsp

...
(C:fun)
...
Rồi mình make vlx dùng chọn separate namespace thì sẽ không chạy được.
Cad bao : "no function definition: C:fun"
Nếu không chọn separate namespace thì vẫn chạy, hoặc vẫn dùng lsp thì không sao.
Mình thử (vl-doc-import) nhưng cũng không thành công :angry2:
  • 0

Dương Bá Diệp

 

www.cadonline.duyxuyen.vn 

 

Thành viên nhóm CADMAGIC

 


#1267 duy782006

duy782006

    PHẠM QUỐC DUY

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

Đã gửi 21 August 2012 - 09:21 AM

Mình có hàm con tác dụng thay nội dung 1 đoạn trong chuỗi bằng 1 đoạn khác.
Cú pháp như sau:
(duy:thaychuoi chuoi goc thay)
Trong đó:
duy:thaychuoi là tên hàm.
Chuoi là chuỗi nguồn.
Goc là đoạn càn thay.
Thay là đoạn thay vào.

Bây giờ mình muốn cung cấp list goc và thay chạy lần lượt trên chuoi thì viết đoạn như nào các bác giúp với!
  • 0

Cứ ngỡ trần gian là cõi thật.Cho nên tất bật đến bây giờ.
Tạo hộp thoại bằng lisp My blog QUY ĐỊNH ĐẶT TÊN TOPIC TRONG CHUYÊN MỤC LISPD http://ktsduy.wordpress.com/
Để cám ơn chỉ cần nhấn rep_up.png
(Là nhấn vào nút đó phía bài viết của người ta í chứ đừng có nhè cái hình này mà nhấn miết đi nha :-D


#1268 Tue_NV

Tue_NV

    KS Võ Quang Tuệ

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

Đã gửi 21 August 2012 - 10:16 AM

Mình có hàm con tác dụng thay nội dung 1 đoạn trong chuỗi bằng 1 đoạn khác.
Cú pháp như sau:
(duy:thaychuoi chuoi goc thay)
Trong đó:
duy:thaychuoi là tên hàm.
Chuoi là chuỗi nguồn.
Goc là đoạn càn thay.
Thay là đoạn thay vào.

Bây giờ mình muốn cung cấp list goc và thay chạy lần lượt trên chuoi thì viết đoạn như nào các bác giúp với!

Anh xem bài viết số 116 của Tue_NV nhé
http://www.cadviet.c...ic=59727&st=100
Sorry, hiểu nhầm câu hỏi của anh
  • 1

#1269 ketxu

ketxu

    Copier - Paster - Editor

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

Đã gửi 21 August 2012 - 10:37 AM

Hàm duy:thaychuoi nên trả về 1 string sau khi đã thay để tái sử dụng

(mapcar '(lambda(goc thay)(setq chuoi (duy:thaychuoi chuoi goc thay))) lstGoc lstThay)


  • 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


#1270 soluuhuong2903

soluuhuong2903

    biết vẽ rectang

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

Đã gửi 23 August 2012 - 04:37 PM

các bác cho e hỏi. trong lisp thì dùng command "insert" mình có thể gọi được các block có sẵn trong Support FIle.Nhưng với entmake insert thì ko, nó chỉ có tác dụng với các block nội trú trong bản vẽ thôi sao.các bác có cách nào để entmake insert sử dụng đươc các block ở Support File ko nhỉ.thank các bác.
  • 0

#1271 ThuyLinh313

ThuyLinh313

    biết lệnh mtext

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

Đã gửi 24 August 2012 - 09:03 AM

- Bạn có thể dùng command trong trường hợp này cũng được và chỉ dùng 1 lần thôi để đưa block vào bản vẽ. những lần insert sau bạn dùng entmake.
- Ngoài ra nếu thực sự không muốn dùng command thì bạn có thể dùng visual lisp với cấu trúc sau:
(vla-InsertBlock mspace insertpoint blockname xscale yscale zscale rotate)
Chú ý: với blockname, trong trường hợp bản vẽ chưa có bock đó mà chỉ có trong suppor part thì bạn phải điền đầy đủ cả tên và phần đuôi mở rộng .dwg của tập tin block. Nếu tập tin block đã có trong support path thì chỉ cần điền tên file. Còn nếu bạn muốn insert bằng 1 tập tin không thuộc support path thì bạn phải điền đầy đủ cả đường dẫn đến tập tin đó. ví dụ: "C:\\abc\\block.dwg"
  • 1

#1272 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 27 August 2012 - 05:11 PM

Làm sao để tạo 1 file Excel mới với tên kèm path cho trước, bằng lisp?
File này bản chất phải là xls chứ không phải csv.
Ai biết xin chỉ giù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.


#1273 ketxu

ketxu

    Copier - Paster - Editor

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

Đã gửi 27 August 2012 - 05:40 PM

Hàm open bá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


#1274 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 27 August 2012 - 06:40 PM

Ví dụ dùng: (setq pw (open "C:/a.xls" "w")) (close pw))
Thì bản chất file "a.xls" không phải là 1 file excel.
  • 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.


#1275 Tue_NV

Tue_NV

    KS Võ Quang Tuệ

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

Đã gửi 27 August 2012 - 07:15 PM

Làm sao để tạo 1 file Excel mới với tên kèm path cho trước, bằng lisp?
File này bản chất phải là xls chứ không phải csv.
Ai biết xin chỉ giùm.

Bác tạo 1 file mới Excel ở path1 (con của path)
Rồi dùng hàm Lisp copy cái file từ path1 qua path là ok
  • 1

#1276 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 27 August 2012 - 07:39 PM

Phương pháp này giải quyết được, dù hơi bá đạo tí. Có cách tạo trực tiếp không các bác ơ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.


#1277 ketxu

ketxu

    Copier - Paster - Editor

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

Đã gửi 27 August 2012 - 08:33 PM

Không phải bác hạ ạ. File tạo bằng phương thức Open có thể là bất kỳ đuôi gì. Cái tạo nên loại file cho nó là cách mình đổ dữ liệu cơ ^^
Với đoạn code trên của bác thì file chưa được tạo
  • 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


#1278 Tue_NV

Tue_NV

    KS Võ Quang Tuệ

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

Đã gửi 27 August 2012 - 08:52 PM

Không phải bác hạ ạ. File tạo bằng phương thức Open có thể là bất kỳ đuôi gì. Cái tạo nên loại file cho nó là cách mình đổ dữ liệu cơ ^^
Với đoạn code trên của bác thì file chưa được tạo

Đoạn này : (setq pw (open "C:\\a.xls" "w")) (close pw))
thì file đã được tạo rồi

Cái kiểu này giống như file có đuôi txt mà ta đi sửa lại thành xls trong Win vậy
  • 0

#1279 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 27 August 2012 - 09:08 PM

Ngộ nhỉ!
(setq pw (open "C:\\a.xls" "w")) (close pw)) thì không thấy file "a.xls" ở trong C
(setq pw (open "D:\\a.xls" "w")) (close pw)) thì thấy file "a.xls" ở trong D
Nhưng dù có thấy thì bản chất thật sự cũng không phải là file excel.
  • 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.


#1280 ketxu

ketxu

    Copier - Paster - Editor

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

Đã gửi 27 August 2012 - 09:49 PM

Ketxu đã viết nhiều ứng dụng xuất ra Excel bằng cách này không vấn đề gì, nên khái niệm "bản chất thực sự k phải Excel" là như thế nào thật ket k hiểu ^^ :) Nếu không thì bác sử dụng method New của Excell Application Object xem sao ?
  • 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