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ị

30 phút trước, Tue_NV đã nói:

@tannguyen291Đây bạn
 (vla-get-area (vlax-ename->vla-object(car(entsel))))

Dạ không phải bác ơi. Hàm lấy diện tích em biết. Ý em là 2 cái hatch đè lên nhau diện tích bề mặt không bằng tổng diện tích thành phần. Nếu convert ra region rồi union lại để lấy diện tích rất mất công. Nên em muốn tìm cách lấy trực tiếp từ properties 

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

Dạ không phải bác ơi. Hàm lấy diện tích em biết. Ý em là 2 cái hatch đè lên nhau diện tích bề mặt không bằng tổng diện tích thành phần. Nếu convert ra region rồi union lại để lấy diện tích rất mất công. Nên em muốn tìm cách lấy trực tiếp từ properties 

Ủa, cái Cumulative đó là tổng thành phần mà nhỉ :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
8 phút trước, ketxu đã nói:

Ủa, cái Cumulative đó là tổng thành phần mà nhỉ :o

Dạ không. bác nhìn ảnh phía trên của em nếu cộng tổng là hơn 5000m2. Nhưng properties hiển thị 4100. Biểu thị không tính 2 lần phần trùng hatch. Em muốn lấy trực tiếp số này.

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

Chào các bác. hiện tại em đang có 1 vấn đề thắc mắc.

Em đang cần lấy giá trị Cumulative area của bảng properties ngôn ngữ autolisp.

Em tìm rất nhiều trên mạng nhưng chưa có đáp án. Bác nào cho em hướng giải quyết với ạ

"Cumulative area" là cái khỉ gì mà nó không phải sum, cũng không phải phần hợp hoặc phần giao nhỉ?
VD: hatch 2 hình vuông cạnh 1 đơn vị rồi di chuyển cho nó giao nhau thì Cumulative area luôn bằ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
38 phút trước, Doan Van Ha đã nói:

"Cumulative area" là cái khỉ gì mà nó không phải sum, cũng không phải phần hợp hoặc phần giao nhỉ?
VD: hatch 2 hình vuông cạnh 1 đơn vị rồi di chuyển cho nó giao nhau thì Cumulative area luôn bằng 2

Nếu giao nhau diện tích sẽ nhỏ hơn 2 ạ

 

nó là phần hợp bác. Kiểu union region. Vì em có rất nhiều đối tượng hatch nếu convert ra region rồi union toàn bộ để lấy diện tích thì tốn quá nhiều thời gian, nên muốn lấy trực tiếp tại bảng properties ạ

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

Nếu giao nhau diện tích sẽ nhỏ hơn 2 ạ

 

nó là phần hợp bác. Kiểu union region. Vì em có rất nhiều đối tượng hatch nếu convert ra region rồi union toàn bộ để lấy diện tích thì tốn quá nhiều thời gian, nên muốn lấy trực tiếp tại bảng properties ạ

Nếu là HỢP thì em thử vẽ 1 hình vuông A cạnh 1 >> hatch >> copy thêm 1 hình B, sau đó move B cho giao với A thì tại sao Cumulative area luôn bằng 2, bất kể phần giao giữa A và B là nhiều hay ít?

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:

Nếu là HỢP thì em thử vẽ 1 hình vuông A cạnh 1 >> hatch >> copy thêm 1 hình B, sau đó move B cho giao với A thì tại sao Cumulative area luôn bằng 2, bất kể phần giao giữa A và B là nhiều hay ít?

em đã có hình phía trên rồi bác k xem .

image.thumb.png.c009f20805a3a2f8379ef210865929c8.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
16 giờ trước, Doan Van Ha đã nói:

image.png

Liệu nó có phụ thuộc biến nào không, mà của anh luôn bằng SUM?
2 hình vuông cạnh 100

bác dùng cad bao nhiêu thế ạ. em dùng 2023

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

bác dùng cad bao nhiêu thế ạ. em dùng 2023

ZWCad 2023: CỘNG

Cad2023: HỢP

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

2 ông nội Cad & Zwcad khác nhau?

 Vậy có cách nào dùng lisp lấy trực tiếp được giá trị cái này không bác

image.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
Vào lúc 2/3/2024 tại 12:09, tannguyen291 đã nói:

Dạ không. bác nhìn ảnh phía trên của em nếu cộng tổng là hơn 5000m2. Nhưng properties hiển thị 4100. Biểu thị không tính 2 lần phần trùng hatch. Em muốn lấy trực tiếp số này.

Ô giờ mới để ý :D
Hôm trước mình làm bài toán tính tổng diện tích Hatch k tính giao, nảy sinh các vấn đề hatch chồng, hatch thủng lỗ, hatch giao nhau blah blah. Định tạo region rồi tính toán các trường hợp n lườ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
Vào lúc 27/2/2024 tại 15:05, tannguyen291 đã nói:

@levietmy bạn nói khó hiểu vãi chấy đọc muốn xỉu up xỉu down

...

Cám ơn bạn nhiều. Mình theo dõi thấy 0 ai quan tâm vấn đề này nên mình 0 vào xem. Hôm này vào thấy bạn đã trả lời. Thành thật cám ơn bạn.

Tuy nhiên, cái bạn trả lời chỉ đúng khi mình dùng hàm (nentselp pt) và Pick vào cái block ATT, nhưng nếu mình Pick vào TEXT, hay LINE ... thì nó trả về ENAME 0 đúng.

Ý mình muốn viết một hàm tổng quát để có thể nhập:

- nếu là chuỗi nó sẽ trả về TEXT nội dung chuỗi đó

- nếu là point nó sẽ kiểm tra tại vị trí nhập có chọn được đối tượng nào 0, nếu có thì tùy vào đối tượng được chọn (TEXT, ATT, LINE) để xử lý tiếp.

  -- nếu là TEXT lấy nội dung của nó

  -- nếu là ATT, lấy nội dung của thuộc tính nào đó

  -- nếu là LINE 0 làm gì cả

  -- .... (ĐẠI KHÁI VẬY)

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 9/3/2024 tại 02:26, levietmy đã nói:

Cám ơn bạn nhiều. Mình theo dõi thấy 0 ai quan tâm vấn đề này nên mình 0 vào xem. Hôm này vào thấy bạn đã trả lời. Thành thật cám ơn bạn.

Tuy nhiên, cái bạn trả lời chỉ đúng khi mình dùng hàm (nentselp pt) và Pick vào cái block ATT, nhưng nếu mình Pick vào TEXT, hay LINE ... thì nó trả về ENAME 0 đúng.

Ý mình muốn viết một hàm tổng quát để có thể nhập:

- nếu là chuỗi nó sẽ trả về TEXT nội dung chuỗi đó

- nếu là point nó sẽ kiểm tra tại vị trí nhập có chọn được đối tượng nào 0, nếu có thì tùy vào đối tượng được chọn (TEXT, ATT, LINE) để xử lý tiếp.

  -- nếu là TEXT lấy nội dung của nó

  -- nếu là ATT, lấy nội dung của thuộc tính nào đó

  -- nếu là LINE 0 làm gì cả

  -- .... (ĐẠI KHÁI VẬY)

Cái bạn cần là 

- nếu là point thì chọn đối tượng xét đối tượng đó là đối tượng gì VD nó là Block Att (chỉ chứa 1 tag thì lấy luôn nội dung đó, chứa >2 tag hiện các tag để lựa chọn lấy nội dung đúng không). nếu đúng thì b nên tham khảo các lisp ở lee-mac. mình nêu ví dụ cho b Copy or Swap Text | Lee Mac Programming (lee-mac.com) có đoạn code xét đến Block Att và lấy các tag Att theo ý muốn

https://www.lee-mac.com/copytext.html

  • 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

Em muốn thực hiện append  2 lisp như sau:

(setq lst1 '(a b c d))

(setq lst2 '(1 2 3 4))

Kết quả lst12: '(a 1 b 2 c 3 d 4)

Mong các anh chị giúp đỡ. 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
13 phút trước, limfx đã nói:

Em muốn thực hiện append  2 lisp như sau:

(setq lst1 '(a b c d))

(setq lst2 '(1 2 3 4))

Kết quả lst12: '(a 1 b 2 c 3 d 4)

Mong các anh chị giúp đỡ. Thanks!

(apply 'append (mapcar 'list lst1 lst2))

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

(apply 'append (mapcar 'list lst1 lst2))

Cảm ơn sự giúp đỡ của Anh!

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

Sáng giờ lội cadviet tìm cũng hoa mắt rồi, thôi xin các bác nào có cho mình xin cho nhanh vậy. Mình cần 1 hàm con dạng   xepatt taphopbl tentag  trong đó taphopbl là các block có chứa đối tượng ATT, và kết quả trả về là tập hợp các block sau khi đã xếp thứ tự theo giá trị của tag Cám ơn các bác đã xem. Nếu được cho mình xin file lisp để dòm và xà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

@duy782006

taphopbl : list vla-object

tentag : name attributes

func: methods (VD: '< '> '(lambda ...))

(defun xepatt ( taphopbl tentag func / gettextstringatt lst )
  (defun gettextstringatt (obj / att)
    (vl-some '(lambda (x) (if (eq tentag (vla-get-tagstring x)) (setq att (vla-get-textstring x)))) (vlax-invoke obj 'getattributes))
    att
  )
  (setq lst (vl-sort-i (mapcar 'gettextstringatt taphopbl) func))
  (mapcar '(lambda (x) (nth x taphopbl)) lst)
)

 

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

@duy782006

taphopbl : list vla-object

tentag : name attributes

func: methods (VD: '< '> '(lambda ...))


(defun xepatt ( taphopbl tentag func / gettextstringatt lst )
  (defun gettextstringatt (obj / att)
    (vl-some '(lambda (x) (if (eq tentag (vla-get-tagstring x)) (setq att (vla-get-textstring x)))) (vlax-invoke obj 'getattributes))
    att
  )
  (setq lst (vl-sort-i (mapcar 'gettextstringatt taphopbl) func))
  (mapcar '(lambda (x) (nth x taphopbl)) lst)
)

 

Hỏi nửa thì ngại nhưng bí nên lại hỏi. Mình muốn tập hợp là object tạo ra từ ssget, và xếp theo giá trị tag từ nhỏ đến lớn luôn với nhồi từ trưa giờ mà không được! Cảm ơn nhiều.

 

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

×