Chuyển đến nội dung
Diễn đàn CADViet
  • Thông báo

    • Nguyen Hoanh

      CADViet đã hoàn tất nâng cấp   14/09/2017

      Chào các bạn, CADViet đã hoàn tất việc nâng cấp lên phiên bản mới. Tất cả các chức năng đã hoạt động theo kỳ vọng của ban quản trị. Nếu có vấn đề gì cần phản hồi, các bản post ở đây nhé: Trân trọng, Nguyễn Hoành.
Jin Yong

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

Các bài được khuyến nghị

TRUNGNGAMY    91

Mình có bv có rất lớn và đủ thứ các đối tượng. Mình có một tập chọn ss chứa rất lớn các đối tượng nhưng kg phải là toàn bộ các đối tượng trong bản vẽ. Bây giờ muốn chọn nhanh tập chọn ss1 theo kiểu (ssget "c"), hay "cp", "w" ,"wp", nhưng những đối tượng chọn được chỉ có trong ss thôi thì làm thế nào. Ở đây mình loại trừ cách duyệt qua ss1 để tìm sự xuất hiện của đt trong ss vì cách này rất lâu. Cám ơn các bạn

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
Tue_NV    3.841

Mình có bv có rất lớn và đủ thứ các đối tượng. Mình có một tập chọn ss chứa rất lớn các đối tượng nhưng kg phải là toàn bộ các đối tượng trong bản vẽ. Bây giờ muốn chọn nhanh tập chọn ss1 theo kiểu (ssget "c"), hay "cp", "w" ,"wp", nhưng những đối tượng chọn được chỉ có trong ss thôi thì làm thế nào. Ở đây mình loại trừ cách duyệt qua ss1 để tìm sự xuất hiện của đt trong ss vì cách này rất lâu. Cám ơn các bạn

Chào bác TrungNgaMy

Hàm ssget chưa có cách chọn đối tượng như điều mà bác nói ở trên ạ.

Cách duyệt qua ss1 có lẽ là cách duy nhất.

Bác có thể sử dụng hàm ssmemb để xem 1 ename có thuộc tập ss hay không?

  • Vote tăng 1

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
TRUNGNGAMY    91

Cho một curve hở và một điểm bất kỳ nằm trên nó. Có thể xác định điểm này cách đầu curve một khoảng dài (kg phải khoảng cách) bao nhiêu bằng cách nào vậy các bác. Mình biết có hàm xác định điểm cách curve một khoảng cho trước nhưng kg biết có hàm như mình nói kg. Cám ơn các bác.

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
Doan Van Ha    2.676

Từ hàm này sẽ suy ra điều bác hỏi:

;----- Lay diem tren Curve cach pg khoang cach kc, voi ph la diem dinh huong tren Curve.
(defun GetP (pg ph kc cur / dg dh dp)
(setq dg (vlax-curve-getDistAtPoint cur pg))
(setq dh (vlax-curve-getDistAtPoint cur ph))
(if (> dh dg)
 (setq dp (+ dg kc))
 (setq dp (- dg kc)))
(vlax-curve-getPointAtDist cur dp))

  • Vote tăng 1

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
TRUNGNGAMY    91

Ca

Từ hàm này sẽ suy ra điều bác hỏi:

;----- Lay diem tren Curve cach pg khoang cach kc, voi ph la diem dinh huong tren Curve.
(defun GetP (pg ph kc cur / dg dh dp)
(setq dg (vlax-curve-getDistAtPoint cur pg))
(setq dh (vlax-curve-getDistAtPoint cur ph))
(if (> dh dg)
 (setq dp (+ dg kc))
 (setq dp (- dg kc)))
(vlax-curve-getPointAtDist cur dp))

Cám ơn bác ĐVH, có lẽ mình diễn tả hơi tồi nên bác viết code quá dư. Thực ra chỉ cần hàm vlax-cuve-getDistAtPoint là đủ

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
hdt4151    1

Cho mình hỏi dùng lisp có nén file được không nhỉ (dạng bình thường cơ bản thôi, không dùng hỗ trợ của winzip, rar...) ?

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
quang_lac    15

mọi người cho mình hỏi 1 chút. Mình xuất dữ liệu ra màn hình cad, mình muốn số xuất ra có 3 chữ số sau dấu phẩy thì dùng lệnh nào.

Ví dụ: 14.12 thành 14.120

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
vuminhchau    1

em copy được đoạn lisp code kích thước này, mong các anh cao thủ ở đấy giúp em thêm chức năng tùy chọn ghi kích thước ra ngoài hình vuông hay trong hình vuông với! vì tụi em vẽ thì kích thước đất thì nằm ở ngoài, còn kích thước nhà thì nằm ở trong nên mỗi lần code kích thước xong là phải kéo ra hoặc kéo vào theo ý muốn rất mời gian với những thửa phức tạp.

và giúp em cho nó ẩn đoạn thực thi màu đỏ khi chạy lệnh dưới này đi:

Command: kkt

Select objects: Specify opposite corner: 4 found

Select objects:

so phan tu da chon : 4

he he heUnknown command "KKT". Press F1 for help.

he he heUnknown command "KKT". Press F1 for help.

he he heUnknown command "KKT". Press F1 for help.

he he heUnknown command "KKT". Press F1 for help.

4

rất mong các anh giúp đỡ em với, cảm ơn các anh nhiều!

đây là hình minh họa và lisp:

hình:

104547_banve_2.jpg

 

code:

(defun c:kkt(/ chon lenlist i ename tdx tdy)

(setq chon (ssget))

(if (/= chon nil)

(progn

(setq lenlist (sslength chon))

(princ "so phan tu da chon : ")(princ lenlist)

(princ "\n")

(setq i 0)

(while (< i lenlist)

(princ "he he he")

(setq ename (ssname chon i))

(setq ename (entget ename))

(setq tdx (cdr (assoc 10 ename)))

(setq tdy (cdr (assoc 11 ename)))

(command "dimaligned" tdx tdy tdy "")

(setq i (+ 1 i))

)

)

)

)

=======================

em muốn cho đoạn này vào code mà không được, nó cứ báo lỗi nên em đành phải copy thế này mặc dù không đúng quy định!

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
hochoaivandot    108

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

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
Doan Van Ha    2.676

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.

  • Vote tăng 1

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
Tue_NV    3.841

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")

  • Vote tăng 2

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
Doan Van Ha    2.676

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.

  • Vote tăng 1

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
ketxu    2.649

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 :)

  • Vote tăng 2

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
hochoaivandot    108

Đã đề 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:

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
duy782006    1.372

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!

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
Tue_NV    3.841

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

  • Vote tăng 1

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
ketxu    2.649

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)
  • Vote tăng 1

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

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.

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
ThuyLinh313    146

- 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"

  • Vote tăng 1

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
Doan Van Ha    2.676

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.

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
Tue_NV    3.841

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

  • Vote tăng 1

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

Tạo một tài khoản hoặc đăng nhập để nhận xét

Bạn cần phải là một thành viên để lại một bình luận

Tạo tài khoản

Đăng ký một tài khoản mới trong cộng đồng của chúng tôi. Điều đó dễ mà.

Đăng ký tài khoản mới

Đăng nhập

Bạn có sẵn sàng để tạo một tài khoản ? Đăng nhập tại đây.

Đăng nhập ngay


×