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ị

5 phút trước, DungNguyen685 đã nói:

Cái này được rồi a, mà đang dùng cho lisp Field a,  a chỉ giúp em tách đoạn code đó ra để em tận dụng link vào block với lưu vào thư viện sau này cần dùng gì, chứ làm trên lisp đó em ko hiểu giờ add thêm vào block em chịu chết luôn, em chỉ mới tập tành viết chỉ copy cái này ít cái kia ít à.

Bạn học 1 chút là sau sẽ tự áp dụng được, cái này ở mức rất đơn giản thôi, mình chỉ bạn đc nhưng k thể cái nào cũng chỉ hết đượ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
6 phút trước, Doan Nguyen Van đã nói:

Bạn học 1 chút là sau sẽ tự áp dụng được, cái này ở mức rất đơn giản thôi, mình chỉ bạn đc nhưng k thể cái nào cũng chỉ hết được

Cảm ơn anh! em cũng đang học từng chút. giờ cứ mò gặp đến đâu học đến đó thôi chứ không biết bắt đầu từ đầu như thế nà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
4 giờ trước, Doan Nguyen Van đã nói:

Bạn học 1 chút là sau sẽ tự áp dụng được, cái này ở mức rất đơn giản thôi, mình chỉ bạn đc nhưng k thể cái nào cũng chỉ hết được

Anh giúp em với thật sự em không biết cách nào Link được chiều dài vào anh ơi, anh giúp em với!

TT.dwg

TT.lsp

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

Anh giúp em với thật sự em không biết cách nào Link được chiều dài vào anh ơi, anh giúp em với!

TT.dwg

TT.lsp

Nói thật là mình vẫn không rõ ý tưởng của bạn thế nào mà hướng dẫn, inbox chi tiết mình xem cho 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

Mọi người cho hỏi tí: tôi muốn lấy góc của đường kích thước nhưng dùng hàm dưới đây để lấy điểm thứ nhất thì có Dim ok nhưng có Dim bị err là vì sao vậy?

(setq p (vlax-get (vlax-ename->vla-object (car (entsel "\nChon Dim: "))) 'ExtLine1Point))

Err_Dim.png

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

Mọi người cho hỏi tí: tôi muốn lấy góc của đường kích thước nhưng dùng hàm dưới đây để lấy điểm thứ nhất thì có Dim ok nhưng có Dim bị err là vì sao vậy?

(setq p (vlax-get (vlax-ename->vla-object (car (entsel "\nChon Dim: "))) 'ExtLine1Point))

Err_Dim.dwg

 

Rotate Dimension ( Không áp dụng )   >< Aligned Dimension . ( Áp dụng được )

:)))) Cháu có ý kiến thế thôi ạ. ^^

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

Mọi người cho hỏi tí: tôi muốn lấy góc của đường kích thước nhưng dùng hàm dưới đây để lấy điểm thứ nhất thì có Dim ok nhưng có Dim bị err là vì sao vậy?

(setq p (vlax-get (vlax-ename->vla-object (car (entsel "\nChon Dim: "))) 'ExtLine1Point))

Err_Dim.png

Err_Dim.dwg

Bác có thể lấy Mã DXF 13 của dim, là point của extline1, nhưng đối với dim Rotated thì như thế vẫn chưa đủ để xác định góc, vì chân dim dài ngắn bất đồng, cần 1 vài thủ thuật khác để lấy góc, hoặc bác có thể đi đường tắt bằng cách lấy góc của text dim cho nhanh 

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

Bác có thể lấy Mã DXF 13 của dim, là point của extline1, nhưng đối với dim Rotated thì như thế vẫn chưa đủ để xác định góc, vì chân dim dài ngắn bất đồng, cần 1 vài thủ thuật khác để lấy góc, hoặc bác có thể đi đường tắt bằng cách lấy góc của text dim cho nhanh 

Nhìn hình ví dụ thì góc text không đúng theo góc của 2 điểm extline của dim mà bá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

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

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

×