Đế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
2848 replies to this topic

#1341 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 02 October 2012 - 09:48 PM

Đây bạn VoHoan!
http://xaydungit.vn/...4667-Quick-Flat
  • 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.


#1342 VoHoan

VoHoan

    biết lệnh move

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

Đã gửi 02 October 2012 - 10:25 PM

Đây bạn VoHoan!
http://xaydungit.vn/...4667-Quick-Flat

Cảm ơn DVH nhé (hết lần nhấn nút like mất rùi!).
Nhìn cái avatar bên xaydungit.vn của bác ketxu đã mắt thật :wub:
  • 0

#1343 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 02 October 2012 - 10:45 PM

Tiếp theo câu hỏi ở bài #1325:
Tôi vừa tìm được đoạn VBScript hướng dẫn cách read/write 1 file. Tôi đã có thể đọc 1 file unicode này, sau đó lấy số liệu đó để ghi ra 1 file unicode khác bằng lisp rồi. Nhưng chưa thể ghi 1 đoạn unicode (được lấy từ Block_Att hay Text trên bản vẽ chẳng hạn) ra 1 file unicode được. Bác nào biết VB, có thể giúp tôi chuyển từ VB qua LSP như link này hướng dẫn không? Thanks!
http://msdn.microsof...12a5kbt(v=vs.85).aspx
  • 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.


#1344 gia_bach

gia_bach

    biết lệnh adcenter

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

Đã gửi 03 October 2012 - 11:17 AM

Tôi trích xuất values của block attributes, viết bằng tiếng Việt Unicode, nhưng:
- Khi xuất ra trên cad thì nó vẫn ra tiếng Việt như đã ghi trong values (VD: "MẶT BẰNG").
- Còn khi xuất ra file (xls, csv) thì nó chuyển thành unicode hexa (VD: "M\U+1EB6T B\U+1EB0NG"). Ai biết cách để nó vẫn giữ nguyên tiếng Việt mà không đổi qua hecxa xin chỉ giùm. Thanks!
P/S: hình như bác Gia_bach rành cái này. Mà vừa test thử "Exblk.vlx" (phiên bản mới nhất) của bác cũng bị như vậy.


...
Nhưng chưa thể ghi 1 đoạn unicode (được lấy từ Block_Att hay Text trên bản vẽ chẳng hạn) ra 1 file unicode được. Bác nào biết VB, có thể giúp tôi chuyển từ VB qua LSP như link này hướng dẫn không? Thanks!
http://msdn.microsof...12a5kbt(v=vs.85).aspx

Vấn đề do LISP hỗ trợ bảng mã UNICODE rất kém.
Không biết các phiên bản Cad đời mới có tốt hơn không ?!

...
2). Chuyển bên excel đơn giản ư? Sao bác không nghĩ ra lối nhỏ nào cả. Két chỉ giùm xem.

Tham khảo cách của Hoành : http://www.cadviet.c...ndpost&p=101241
  • 1

#1345 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 03 October 2012 - 02:20 PM

Cám ơn bác Gia_bach! Nhưng lisp kia nó chỉ cho ra tiếng Tàu 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.


#1346 ketxu

ketxu

    Copier - Paster - Editor

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

Đã gửi 03 October 2012 - 08:21 PM

Bác thử cái scripting Wsh convert bên VBA bác vừa request xem sao, ketxu chưa test, hy vọng là được ^^

(defun t2f (f lst / o) ;lst : list data
(if (setq f (findfile f))
(progn (setq
o (vlax-invoke
(vlax-invoke
(vlax-create-object "Scripting.FileSystemObject")
"GetFile" f)
"OpenAsTextStream" 2 -1)
)
(foreach line lst (vlax-invoke o "WriteLine" line))
(vlax-invoke o "Close")
(vlax-release-object o)
)))

  • 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


#1347 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 03 October 2012 - 08:56 PM

Bó tay Ket ơi! Mất 2 ngày ròng nhưng đành chịu. Lisp của Ket cũng chỉ ra dạng Hecxa thôi.
Ghi 1 file Unicode sang 1 file Unicode khác thì làm được.
Nhưng ghi 1 dòng Unicode lấy ra từ đối tượng cad (Text, Att,...) sang file thì vẫn là Hecxa thôi. Dù sao cũng thank Ket.
  • 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.


#1348 ketxu

ketxu

    Copier - Paster - Editor

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

Đã gửi 03 October 2012 - 09:41 PM

Bác dùng chính xác Autolisp và hàm trên chưa ạ ? Hay vẫn VL ? Hoặc có thể đó là cách AutoCAD lưu dữ liệu vào clipboard 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


#1349 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 03 October 2012 - 09:47 PM

Cám ơn Ket vẫn đau đáu chủ đề này. Bác đã làm lisp như sau (trong đó block_att có những att viết bằng Vietnamse Unicode), và chỉ chọn 1 att trong block:

(defun C:HA(/ lst)
(setq lst (cons (cdr (assoc 1 (entget (car (nentsel))))) lst))
(t2f "D:\\HA.txt" lst))
(defun t2f (f lst / o) ;lst : list data
(if (setq f (findfile f))
(progn
(setq o (vlax-invoke (vlax-invoke (vlax-create-object "Scripting.FileSystemObject") "GetFile" f) "OpenAsTextStream" 2 0))
(foreach line lst
(vlax-invoke o "WriteLine" line))
(vlax-invoke o "Close")
(vlax-release-object o))))

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


#1350 ketxu

ketxu

    Copier - Paster - Editor

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

Đã gửi 03 October 2012 - 09:56 PM

P/s : À bác sửa cái số 0 sau số 2 thành -1 xem sao ^^ Chắc k vấn đề nữa. Ketxu nhầm format, -1 mới là cho Unicode

http://msdn.microsof...1(v=vs.60).aspx
  • 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


#1351 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 03 October 2012 - 10:04 PM

2 -> -1 cũng có kết quả hecxa. Đọc nát link đó và đã ghi được, nhưng chỉ hecxa thô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.


#1352 ketxu

ketxu

    Copier - Paster - Editor

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

Đã gửi 03 October 2012 - 10:41 PM

Ketxu k có lời giải đáp, có lẽ phải hỏi 2 bác Microsoft và Autodesk, thích thì được không thích thì thôi ^^

Winvista + cad08 + chế độ 8 -1.
Lúc quay video OK
Khởi động CAD lại hết OK :D


  • 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


#1353 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 October 2012 - 09:55 AM

chữa cháy tạm đi Bạn: dùng bộ gotiengviet của Kỳ Nam (đã có bộ mã Unicode LISP String Hex) để chuyển các file *.txt
kết quả có thể có lổi là mình chuyển thử mottj đoạn có kết quả như sau "mặt bằng chiến lược của cánh én mùa xuânx" (dư chữ x)
  • 0

#1354 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 08 October 2012 - 03:57 PM

Tôi đang viết 1 lisp mà kết quả trả về phụ thuộc phiên bản Win và Cad. Chẳng hạn, với Win/Cad này thì tốt còn Win/Cad kia thì báo lỗi. Hiện giờ thì OK, nhưng liệu với Win/Cad đời sau thì không biết có lỗi hay không.
Hỏi: trong hàm cond, có cách gì để kiểm tra nếu điều kiện thứ 1 bị lỗi thì bỏ qua nó để thực hiện điều kiện 2, nếu điều kiện 2 bị lỗi thì bỏ qua nó để thực hiện điều kiện 3, v.v... ? Ai biết xin chỉ giùm. Thanks!
  • 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.


#1355 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 08 October 2012 - 10:40 PM

Chắc bạn biết hàm vl-catch-all-error-p. dùng nó kết hợp với điều kiện if sẽ thỏa mãn điều bạn muốn: (cond ((if (not (vl-catch-all-error-p....
  • 1

#1356 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 08 October 2012 - 11:06 PM

Cám ơn bạn! Nhưng hàm (vl-catch-all-error-p arg) chỉ kiểm tra lỗi được trả về bởi hàm (vl-catch-all-apply 'function list) mà thô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.


#1357 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 08 October 2012 - 11:23 PM

Vậy các điều kiện hàm cond của bạn ntn mà không thể dung cho vl-catch-all-apply được nhỉ? Mình viết cụ thể 1 ví dụ đơn giản

(cond
((if (not (vl-catch-all-error-p (vl-catch-all-apply '/ '(1 0))) (nhiem vu 1))
(t nhiem vu 2)
)
trong đoạn code trên, kiểm tra nếu phép chia 1/0 không sảy ra lỗi thì thực hiện nhiệm vụ 1. nếu sảy ra lỗi thì thực hiện nhiệm vụ 2
  • 1

#1358 avi612

avi612

    biết lệnh move

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

Đã gửi 11 October 2012 - 11:13 AM

Cho mình hỏi cái này:
Trong lisp mình có 1 cú pháp như sau: (getenv "ACAD")
Cú pháp trên nó sẽ hiện ra - toàn bộ đường dẫn Support path.
Vậy mình muốn tìm List Menu Name trong Hộp thoại Load/Unload Cutomizations (C:menuload) thì có cú pháp nào để lấy không.
  • 0

#1359 Tue_NV

Tue_NV

    KS Võ Quang Tuệ

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

Đã gửi 11 October 2012 - 11:53 AM

Cho mình hỏi cái này:
Trong lisp mình có 1 cú pháp như sau: (getenv "ACAD")
Cú pháp trên nó sẽ hiện ra - toàn bộ đường dẫn Support path.
Vậy mình muốn tìm List Menu Name trong Hộp thoại Load/Unload Cutomizations (C:menuload) thì có cú pháp nào để lấy không.

Bạn đặt câu hỏi khó không nhỉ?
Của bạn đây :


(defun c:Lmenu()
(vlax-for x (vla-get-MenuGroups (vlax-get-acad-object))
(princ "\n")
(princ (vl-filename-base(vla-get-MenuFileName x)))
)
)

  • 1

#1360 ketxu

ketxu

    Copier - Paster - Editor

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

Đã gửi 11 October 2012 - 11:57 AM

List name thì dùng vla-get-name là được 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