Chuyển đến nội dung
Diễn đàn CADViet
Jin Yong

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

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

Nói chung cần lấy góc của ĐƯỜNG KÍCH THƯỚC, tưởng đơn giản nhưng hóa phức tạp:
- Lấy mã 13 và 14: không ok nếu đường dóng khác độ dài nhau.

- Lấy góc Text: không ok nếu text vuông góc đường kích thướ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
24 phút trước, Doan Van Ha đã nói:

Nói chung cần lấy góc của ĐƯỜNG KÍCH THƯỚC, tưởng đơn giản nhưng hóa phức tạp:
- Lấy mã 13 và 14: không ok nếu đường dóng khác độ dài nhau.

- Lấy góc Text: không ok nếu text vuông góc đường kích thước.

Có thể lọc lấy Line dưới text, bằng Measurement của dim, có điểm Dxf 10 nằm trên

  • Like 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
3 phút trước, Doan Nguyen Van đã nói:

Có thể lọc lấy Line dưới text, bằng Measurement của dim, có điểm Dxf 10 nằm trên

vla-get-Measurement cho gía trị text, còn line?

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
1 giờ} trướ}c, Doan Van Ha đã nói:

vla-get-Measurement cho gía trị text, còn line?

Dùng Vla-item  để lấy thông tin đối tượng bên trong dim, tuy nhiên cái này phụ thuộc vào dimstyle, có dim không thể dùng cách này được 

  • Like 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
22 giờ trước, Doan Van Ha đã nói:

Nói chung cần lấy góc của ĐƯỜNG KÍCH THƯỚC, tưởng đơn giản nhưng hóa phức tạp:
- Lấy mã 13 và 14: không ok nếu đường dóng khác độ dài nhau.

- Lấy góc Text: không ok nếu text vuông góc đường kích thước.


Đây là cách cháu lấy :

(setq data (entget d))
  def1     (_2d (cdr (assoc 13 data))); definition point 1
  def2     (_2d (cdr (assoc 14 data))); definition point 2
  ar2     (_2d (cdr (assoc 10 data))); arrow-point/end of dimension line at extension line 2
  dimdir ; direction of dimension line
    (if (= (vla-get-ObjectName (vlax-ename->vla-object d)) "AcDbAlignedDimension"); aligned Dimension always has (50 . 0.0), so
      (angle def1 def2); then - direction between definition points
      (cdr (assoc 50 data)); else - direction of dimension line
    )
)

 

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

Mình muốn viết 1 lisp Fillet 2 đối tượng khác cao độ (trc khi fillet cho cao độ về 0)

Mình muốn nó như 1 lệnh Fillet xịn trong command.

Mình định dùng pause nhưng ko biết có cách nào lấy thông tin nhập liệu từ người dùng qua lệnh pause ko, giả sử bên dưới mình muốn lấy thông tin của 2 đối tượng fillet thì làm ntn:

(command "FILLET")
(while (= (logand (getvar "CMDACTIVE") 1) 1)
  (command pause)
  )

Hoặc là có cách tiếp cận nào khác không ?

Các bạn giúp mình nhé, cảm ơ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
8 giờ trước, Duong Nhat Duy đã nói:

Mình muốn viết 1 lisp Fillet 2 đối tượng khác cao độ (trc khi fillet cho cao độ về 0)

Mình muốn nó như 1 lệnh Fillet xịn trong command.

Mình định dùng pause nhưng ko biết có cách nào lấy thông tin nhập liệu từ người dùng qua lệnh pause ko, giả sử bên dưới mình muốn lấy thông tin của 2 đối tượng fillet thì làm ntn:

  • cadvietlisp.lsp
    lisp help
  •  

(command "FILLET")
(while (= (logand (getvar "CMDACTIVE") 1) 1)
  (command pause)
  )

Hoặc là có cách tiếp cận nào khác không ?

Các bạn giúp mình nhé, cảm ơn !

Cách đơn giản có thể là chuyển tất cả dối tượng trên bản vẽ về cao độ 0 rồi thực hiện lệnh. Cách khó là tự viết lại 2 hàm trên.

Còn muốn giữ preview thì ko dc.

  • 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

Hôm nay mình xem lại thì có 2 biến có thể kiểm tra lấy thông tin từ người nhập vào là lastprompt và lastpoint.

lastprompt thì cho kq là string prompt cuối cùng kèm giá trị nhập từ bàn phím.

lastpoint là vị trí pick sau cùng.

Tuy nhiên lấy được cũng ko làm gì đuoc trong trường hợp 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
Vào lúc 30/11/2020 tại 11:32, Duong Nhat Duy đã nói:

Mình muốn viết 1 lisp Fillet 2 đối tượng khác cao độ (trc khi fillet cho cao độ về 0)

  • cadvietlisp.lsp
    lisp help
  •  

(command "FILLET")
(while (= (logand (getvar "CMDACTIVE") 1) 1)
  (command pause)
  )

Chào bạn.

 

Fillet 2 đối tượng khác cao độ là sao nhỉ. Bạn có thể đưa bản vẽ dwg cho xem dc ko.

 

Thân chào.

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
6 giờ trước, DuongTrungHuy đã nói:

Chào bạn.

 

Fillet 2 đối tượng khác cao độ là sao nhỉ. Bạn có thể đưa bản vẽ dwg cho xem dc ko.

 

Thân chào.

Ví dụ 2 pline khác elevation thôi bạn.

 

Vào lúc 30/11/2020 tại 19:42, ngokiet đã nói:

Cách đơn giản có thể là chuyển tất cả dối tượng trên bản vẽ về cao độ 0 rồi thực hiện lệnh. Cách khó là tự viết lại 2 hàm trên.

Còn muốn giữ preview thì ko dc.

Cảm ơn @ngokiet 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
1 giờ} trướ}c, Duong Nhat Duy đã nói:

Ví dụ 2 pline khác elevation thôi bạn.

Chào Bạn.

2 Pline ở 2 mặt phẳng z khác nhau  thì làm sao Fillet được bạn nhỉ.

 

Untitled.png

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
34 phút trước, DuongTrungHuy đã nói:

Chào Bạn.

2 Pline ở 2 mặt phẳng z khác nhau  thì làm sao Fillet được bạn nhỉ.

 

Untitled.png

Thì mình mới bảo là trước khi Fillet cho Z về 0 đó.

Xét cho trường hợp đơn giản là đồng phẳng thôi, con nếu giả sử 2 line không đồng phẳng thì lisp tự cho các đầu mút về cao độ 0 => đồng phẳng.

Chỗ cho Z về 0 thì mình tự viết được nhưng đoạn sau thì chưa rõ có làm đc ko và làm ntn ?

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
29 phút trước, Duong Nhat Duy đã nói:

Thì mình mới bảo là trước khi Fillet cho Z về 0 đó.

Xét cho trường hợp đơn giản là đồng phẳng thôi, con nếu giả sử 2 line không đồng phẳng thì lisp tự cho các đầu mút về cao độ 0 => đồng phẳng.

Chỗ cho Z về 0 thì mình tự viết được nhưng đoạn sau thì chưa rõ có làm đc ko và làm ntn ?

Chào nhé!

Như vậy sau khi fillet thì tất cả đều về cùng 1 mặt phẳng 0 hở Bạn.

Hôm qua mình có đưa lên diễn đàn lisp vè Cham và Fillet, Bạn xem có ích gì ko nhé.

Trong tiêu đề "Lisp Chamfer và Fillet"

  • 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
1 giờ} trướ}c, DuongTrungHuy đã nói:

Chào nhé!

Như vậy sau khi fillet thì tất cả đều về cùng 1 mặt phẳng 0 hở Bạn.

Hôm qua mình có đưa lên diễn đàn lisp vè Cham và Fillet, Bạn xem có ích gì ko nhé.

Trong tiêu đề "Lisp Chamfer và Fillet"

Chắc là ko phải ý mình đâu, vì mình muốn dùng command. Cảm ơn bạn 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
Vào lúc 30/11/2020 tại 11:32, Duong Nhat Duy đã nói:

Mình muốn viết 1 lisp Fillet 2 đối tượng khác cao độ (trc khi fillet cho cao độ về 0)

Mình muốn nó như 1 lệnh Fillet xịn trong command.

Mình định dùng pause nhưng ko biết có cách nào lấy thông tin nhập liệu từ người dùng qua lệnh pause ko, giả sử bên dưới mình muốn lấy thông tin của 2 đối tượng fillet thì làm ntn:

  • cadvietlisp.lsp
    lisp help
  •  

(command "FILLET")
(while (= (logand (getvar "CMDACTIVE") 1) 1)
  (command pause)
  )

Hoặc là có cách tiếp cận nào khác không ?

Các bạn giúp mình nhé, cảm ơn !

Dùng grread chắc đượ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

Mọi người cho hỏi tí: biến hệ thống nào để khi tạo block thì block sau đó nếu chèn vào bản vẽ thì có thể dùng lệnh explode để nổ được?

(tức đặt "allow exploding" trong lệnh tạo block í)

 

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
56 phút trước, Doan Van Ha đã nói:

Mọi người cho hỏi tí: biến hệ thống nào để khi tạo block thì block sau đó nếu chèn vào bản vẽ thì có thể dùng lệnh explode để nổ được?

(tức đặt "allow exploding" trong lệnh tạo block í)

 

Cháu tìm mãi ko ra :). Nhưng có cách để tạo Block kiểm soát việc cho nổ hay không nổ bằng lisp:

Bác đọc thử bài này : https://www.cadtutor.net/forum/topic/16402-system-variable-allow-exploding/

  • Like 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
10 phút trước, Danh Cong đã nói:

Cháu tìm mãi ko ra :). Nhưng có cách để tạo Block kiểm soát việc cho nổ hay không nổ bằng lisp:

Bác đọc thử bài này : https://www.cadtutor.net/forum/topic/16402-system-variable-allow-exploding/

Hehe. Bố nó giấu trong biến môi trường chứ không phải biến hệ thống. Thanks!

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

Mọi người cho hỏi: có ai gặp lỗi này chưa? Lý do lỗi? Cách giải quyết?

Là: khi lấy Intersection của 2 regions thì kết quả trả về không đúng. VD trong hình và file đính kèm thì khi lấy region to (màu xanh) trừ đi region nhỏ (màu đỏ) cad lại trả về như kết quả Union của 2 regions xanh và đỏ. Đính kèm hình + file cad + file lsp để test.

 

Err_Region.png

Error.lsp

Intersection.dwg

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
28 phút trước, Doan Van Ha đã nói:

Mọi người cho hỏi: có ai gặp lỗi này chưa? Lý do lỗi? Cách giải quyết?

Là: khi lấy Intersection của 2 regions thì kết quả trả về không đúng. VD trong hình và file đính kèm thì khi lấy region to (màu xanh) trừ đi region nhỏ (màu đỏ) cad lại trả về như kết quả Union của 2 regions xanh và đỏ. Đính kèm hình + file cad + file lsp để test.

 

 

Error.lsp

Intersection.dwg

Cad 2015 khi dùng (vla-boolean rg_to acIntersection rg_nho) trả về region có area =0

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
19 phút trước, gia_bach đã nói:

Cad 2015 khi dùng (vla-boolean rg_to acIntersection rg_nho) trả về region có area =0

Nhưng nó có tạo region mới như hình và file không Gia_bach, hay nó vẫn 2 region rờ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

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

×