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

#1421 hdt4151

hdt4151

    biết vẽ pline

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

Đã gửi 19 December 2012 - 03:11 PM

Cho mình hỏi chút về vấn đề Shell trong lập trình lisp:

Giả sử mình có đoạn code này:

(defun c:test ()

(command "shell" "D:/run.exe")

)

Nhiệm vụ của file run.exe là tạo 1 file mới A.txt chẳng hạn (hoặc đơn giản hơn chỉ là chờ gõ enter rồi thoát) . Nhưng trên thực tế chạy lisp có lúc chạy file run.exe kia được có lúc lại không được giống như bị cancel (ví dụ khi tạo file cad mới rồi load lisp trên chạy thì bị lỗi), mình không hiểu lý do là tại sao cả ? Bạn nào có kinh nghiệm chỉ mình với.

Xin hỏi thêm nữa là có cách nào chạy file .exe khác cách trên không ?
  • 0

#1422 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 December 2012 - 04:19 PM

...............

Xin hỏi thêm nữa là có cách nào chạy file .exe khác cách trên không ?

(command "ai_editcustfile" "D:/run.exe")
  • 0

#1423 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 19 December 2012 - 04:19 PM

Bạn có thể tham khảo thêm hàm startapp (startapp "D:/run.exe")
  • 0

#1424 hdt4151

hdt4151

    biết vẽ pline

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

Đã gửi 19 December 2012 - 04:29 PM

thanks 2 bác, mình đã thử nhưng vẫn bị lỗi như đã nói trên, k biết khắc phục thế nào nữa :(
  • 0

#1425 ketxu

ketxu

    Copier - Paster - Editor

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

Đã gửi 19 December 2012 - 09:30 PM

Còn phụ thuộc cái run.exe của bạn nó là cái j nữa :)
  • 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


#1426 duy267

duy267

    biết vẽ point

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

Đã gửi 29 December 2012 - 12:03 AM

Mình có tập hợp L1(a1 a2 a3 a1 a6 a2 a4 a3 a5). Bây giờ mình muốn tìm tập hợp L2 gồm những phần tữ trong L1 không lặp lại quá một lần(trùng nhau). Trong ví dụ trên thì L2(a6 a4 a5). Các bạn có thể giúp mình đoạn code này không. Xin cảm ơn.
  • 0

#1427 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 29 December 2012 - 08:01 AM

Mình có tập hợp L1(a1 a2 a3 a1 a6 a2 a4 a3 a5). Bây giờ mình muốn tìm tập hợp L2 gồm những phần tữ trong L1 không lặp lại quá một lần(trùng nhau). Trong ví dụ trên thì L2(a6 a4 a5). Các bạn có thể giúp mình đoạn code này không. Xin cảm ơn.

Bạn dùng hàm này nhé

(defun remove-all-duplicates (lst / lst1 lst2)
(mapcar (function (lambda (x)
(if (or
(member x (setq lst (cdr lst)))
(member x lst1)
(member x lst2))
(setq lst2 (cons x lst2))
(setq lst1 (cons x lst1))))) lst)
(reverse lst1))
Ngược lại, nếu bạn muốn lấy ra toàn bộ phần từ trùng nhau trong lisp thì thay (reverse lst1) bằng (reverse lst2)
  • 1

#1428 Tue_NV

Tue_NV

    KS Võ Quang Tuệ

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

Đã gửi 29 December 2012 - 08:08 AM

Mình có tập hợp L1(a1 a2 a3 a1 a6 a2 a4 a3 a5). Bây giờ mình muốn tìm tập hợp L2 gồm những phần tữ trong L1 không lặp lại quá một lần(trùng nhau). Trong ví dụ trên thì L2(a6 a4 a5). Các bạn có thể giúp mình đoạn code này không. Xin cảm ơn.

Đây bạn :

(setq L2 '())
(foreach x L1 (if (null (member x (cdr(member x L1)))) (setq L2 (append L2 (list x)))))

Hoặc code gọn hơn:
(vl-remove-if '(lambda(x) (member x (cdr(member x L1)))) L1)
  • 1

#1429 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 29 December 2012 - 08:31 AM

Hàm của bác Tue_NV sai rồ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.


#1430 Tue_NV

Tue_NV

    KS Võ Quang Tuệ

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

Đã gửi 29 December 2012 - 08:38 AM

Hàm của bác Tue_NV sai rồi.

Sai chổ mô bác ơi??
  • 0

#1431 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 29 December 2012 - 08:42 AM

Nếu (setq l1 '(1 2 2)) => l2=nil.
  • 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.


#1432 Tue_NV

Tue_NV

    KS Võ Quang Tuệ

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

Đã gửi 29 December 2012 - 08:59 AM

Hàm của bác Tue_NV sai rồi.

Nếu (setq l1 '(1 2 2)) => l2=nil.

- Hàm của Tue_NV có cả hàm trên và hàm dưới :lol:
- Hàm dưới không sai (dùng vl-remove-if)
- Hàm trên không sai đâu bác, L2 trả về '(1))
Cái bác thấy là nil là giá trị trả về của hàm if lần lặp cuối của vòng foreach, chứ không phải L2 là nil

Nếu bác muốn thấy trị trả về của hàm if lần lặp cuối của vòng foreach thì sửa như sau:
(setq L2 '())
(foreach x L1 (if (null (member x (cdr(member x L1)))) (setq L2 (append L2 (list x))) L2))
  • 0

#1433 duy267

duy267

    biết vẽ point

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

Đã gửi 29 December 2012 - 06:22 PM

Cảm ơn ThuyLinh và Tue nhiều, code rất tuyệt đặc biệt rất ngắn gọn của Tue. Một lần nữa xin cảm ơn.
  • 0

#1434 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 08 January 2013 - 07:37 AM

(defun c:ghtd ()
(initdia)
(command "dimstyle")
;(command "STYLE")
;(command "hatch")
(princ))


Mình viết lisp để gọi hộp thoại dim như trên thì không lên được mặc dù thử với style và hatch thì ok. 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


#1435 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 January 2013 - 07:54 AM

Hi. Mình cũng đang mắc chỗ này.
  • 1

#1436 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 January 2013 - 08:08 AM

Hàm (initdia) không cho gọi dimstyle.
Trích dẫn:
(initdia [dialogflag])
Currently, the following commands make use of the initdia function: ATTDEF, ATTEXT, BHATCH, BLOCK, COLOR, IMAGE, IMAGEADJUST, INSERT, LAYER, LINETYPE, MTEXT, PLOT, RENAME, STYLE, TOOLBAR, and VIEW.

Dùng:
(command "ddim")
  • 2

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


#1437 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 January 2013 - 08:11 AM

Mình tìm ra cách rồi. có 2 cách liền ^^
- Dùng (vla-sendcommand activedocument "dimstyle ")
- Dùng Sendkeys

Vừa viết xong thì thấy DVH post. cách của DVH xịn nhất rồi.

Bài viết đã được chỉnh sửa nội dung bởi ThuyLinh313: 08 January 2013 - 08:12 AM

  • 0

#1438 nguyenhuutrang

nguyenhuutrang

    Chưa sử dụng CAD

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

Đã gửi 08 January 2013 - 10:12 AM

Em xin chào tất cả mọi người!
Em cũng mới bắt đầu tìm học Autolisp! Mà em chưa thông thạo cách sử dụng trên diễn đàn cho lắm. Anh nào có tài liệu học Autolisp mong các anh chiếu cố gửi cho em qua email: ce.nguyenhuutrang@gmail.com
Mong chờ tin các anh!
  • 0

#1439 ketxu

ketxu

    Copier - Paster - Editor

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

Đã gửi 08 January 2013 - 10:21 PM

Mình viết lisp để gọi hộp thoại dim như trên thì không lên được mặc dù thử với style và hatch thì ok. Các bác giúp với!

Bác Duy chưa search http://www.cadviet.c...ndpost&p=119717
  • 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


#1440 Chiron

Chiron

    biết dimradius

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

Đã gửi 16 January 2013 - 04:09 PM

Chiron test thử đoạn code sau:

(defun c:test (/ txtht txtdis txtpt1 txtpt2 txtpt3)
(setq txtht (getvar "textsize")
txtdis (* txtht 1.5)
txtpt1 (getpoint "\nSpecify start point of text:")
txtpt2 (list (car txtpt1) (- (cadr txtpt1) txtdis))
txtpt3 (list (car txtpt1) (- (cadr txtpt2) txtdis))
)
(command ".text" txtpt1 txtht 0 "\nLine 1")
(command ".text" txtpt2 txtht 0 "\nLine 2")
(command ".text" txtpt3 txtht 0 "\nLine 3")
(princ)
)
Khi mở file mới thì xuất hiện 3 dòng text rất đẹp. Nhưng lại bị lỗi khoảng cách dòng & justity với file này: http://www.cadviet.c...102896_test.dwg

Hình đã gửi
Mong các bác sửa dùm hoặc có code nào hay hơn thì cho Chiron xin.
  • 0