Chuyển đến nội dung
Diễn đàn CADViet
Đăng nhập để thực hiện theo  
18011985

Lựa chọn đối tượng sau khi boundary

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

Mình có 1 hình vẽ như sau: 1 hình vuông và 1 hình tròn nằm bên trong.

1- Tạo đường bo hv, ht (đã làm được)

2- Nếu chọn lại vị trí đó lần nữa thì báo lỗi.

3- Vì bước 2 có nên phải lấy được giá trị boundary của hv và ht

Nên các bạn chỉ hộ mình bước 2 và bước 3

Sau đây là bước 1 của mình

(defun c:thu (/ test)
 (setq test 0)
 (while (/= test nil)
   (setq test (getpoint "Chon diem tinh"))
   (if (/= test nil)(vl-cmdf "-boundary" "a" "o" "r" "x" test ""))    
   )
 (princ)
 )

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- Vì bước 2 có nên phải lấy được giá trị boundary của hv và ht

Giá trị này là gì? Ename? Chu vi? Diện tích? Bạn phải nói rõ chứ

Nếu là diện tích hoặc chu vi thì bạn có thể tìm lisp tính diện tích miền kín có lỗ thủng của bác Tue_NV để tham khả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
Giá trị này là gì? Ename? Chu vi? Diện tích? Bạn phải nói rõ chứ

Nếu là diện tích hoặc chu vi thì bạn có thể tìm lisp tính diện tích miền kín có lỗ thủng của bác Tue_NV để tham khảo

SSname, Ename đoá bạn à, của bác Tue_VN là select object còn của mình là pick mừ. Select object thì việc lấy dữ liệu của đối tượng thì okie không vấn đề còn cái của mình chọn 1 cái nó sinh ra 2 đối tượng việc lấy dữ liệu của đối tượng mình chia bít. Chỉ dùm mình chút xíu xíu hì hì

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
SSname, Ename đoá bạn à, của bác Tue_VN là select object còn của mình là pick mừ. Select object thì việc lấy dữ liệu của đối tượng thì okie không vấn đề còn cái của mình chọn 1 cái nó sinh ra 2 đối tượng việc lấy dữ liệu của đối tượng mình chia bít. Chỉ dùm mình chút xíu xíu hì hì

 

Bạn có thể làm như thế này

Tạo boundnảy tính diện tich xong thì xoá nó đi

(defun c:thu (/ test)
 (setq test 0)
 (while (/= test nil)
   (setq test (getpoint "Chon diem tinh"))
   (if	(/= test nil)
     (progn
(vl-cmdf "-boundary" "a" "o" "r" "x" test "")
(setq ename (entlast))

(command "change" ename "" "P" "C" "Magenta" "")
(vl-cmdf "area" "O" ename)
(setq dientich (getvar "area")
      chuvi    (getvar "Perimeter")
)
(print (strcat "\nDien tich la : " (rtos dientich 2 2)))
(print (strcat "\nChu vi la : " (rtos chuvi 2 2)))
(print "\n")
(command "erase" ename "")
     )
   )
 )
 (princ)
)

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
Bạn có thể làm như thế này

 

(defun c:thu (/ test)
 (setq test 0)
 (while (/= test nil)
   (setq test (getpoint "Chon diem tinh"))
   (if	(/= test nil)
     (progn
(vl-cmdf "-boundary" "a" "o" "r" "x" test "")
(setq ename (entlast))
(vl-cmdf "area" "O" ename)
(setq dientich (getvar "area")
      chuvi    (getvar "Perimeter")
)
(print (strcat "\nDien tich la : " (rtos dientich 2 2)))
(print (strcat "\nChu vi la : " (rtos chuvi 2 2)))
(print "\n")


     )
   )
 )
 (princ)
)

Cảm ơn bác. Nhưng bác ơi như em đã nói ở trên của em sau khi dùng boundary nó sinh ra hai đối tượng mới. Theo cách của bác thì chỉ có mỗi đối tượng cuối cùng được lôi ra. Còn đối tượng trước nó bị lờ đi roà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
Cảm ơn bác. Nhưng bác ơi như em đã nói ở trên của em sau khi dùng boundary nó sinh ra hai đối tượng mới. Theo cách của bác thì chỉ có mỗi đối tượng cuối cùng được lôi ra. Còn đối tượng trước nó bị lờ đi roài.

 

Cái này thì bạn có thể dùng theo 2 cách

1. Đổi lại pp chọn đối tượng tính dt theo cách chọn đối tượng (select object) mà không chọn điểm nữa thì bạn sẽ tách được 2 dt dễ dàng

2. Néu theo cách chọn điểm như trên thì ta chọn cách đi vòng : lấy tập điểm dt sau để dùng ssget "WP" chọn dt nằm trong theo list điểm của dt2

Thân

  • 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

Chà cái này khó nghĩ nhỉ, mình muốn truy hồi các đối tượng được sinh ra vì có phải đến đấy là hết đâu, mình chọn thêm vùng khác nữa và kiểm tra xem vùng mới có trùng với vùng cũ không? Nên việc tách biệt các vùng để so sánh là tốt nhấ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

Đơn giản mà. Cách làm vẫn giống cách bác Tue_NV đã làm đó thôi

- Trước khi vẽ boundary bạn lấy ename của đối tượng cuối cùng được tạo ra trong bản vẽ bằng hàm entlast

- vẽ boundary. lệnh này có thể sinh ra n đối tượng. kệ nó

- có cái mốc ở bước 1 rồi thì bạn cứ thế mà Entnext cho đến khi hàm entnext trả về nil là bạn đã thu được toàn bộ ename của các đối tượng mới.

(setq EL (entlast))

(vl-cmdf "-boundary" "a" "o" "r" "x" test "")

(while (setq EL (entnext EL)) (setq Listname (cons EL Listname)))

  • 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
Đơn giản mà. Cách làm vẫn giống cách bác Tue_NV đã làm đó thôi

- Trước khi vẽ boundary bạn lấy ename của đối tượng cuối cùng được tạo ra trong bản vẽ bằng hàm entlast

- vẽ boundary. lệnh này có thể sinh ra n đối tượng. kệ nó

- có cái mốc ở bước 1 rồi thì bạn cứ thế mà Entnext cho đến khi hàm entnext trả về nil là bạn đã thu được toàn bộ ename của các đối tượng mới.

(setq EL (entlast))

(vl-cmdf "-boundary" "a" "o" "r" "x" test "")

(while (setq EL (entnext EL)) (setq Listname (cons EL Listname)))

Oạch đúng vậy thía mà em không nghĩ ra cho nó 1 mốc thời điểm cố định. Thanks tất cả mọi ngườ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

Bip Bip cấp cứu em chút xíu, Vụ này dính tới thằng region em không biết nếu chọn 1 vùng tính roài chọn lại thì báo chọn rùi bác nào chỉ em với, mở mã DXF của region toàn là thằng (1. ...) nên em bó tay. T_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

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
Đăng nhập để thực hiện theo  

×