Thaistreetz 539 Báo cáo bài đăng Đã đăng Tháng 9 4, 2009 Trong hình trên em có n đường thẳng song song nằm ngang. Em đang cần một đoạn code có tác dụng lấy được tập hợp tất cả các tọa độ giao điểm và tập hợp tọa độ các điểm đầu của các đường thẳng nằm ngang khi em vẽ một đường thẳng cắt qua những đường thẳng nằm ngang này. Các Huynh giúp em với. :s_big: Edit: em chỉ cần lấy tọa độ của các điểm đầu phía trái (phía có tọa độ x 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
TRUNGNGAMY 91 Báo cáo bài đăng Đã đăng Tháng 9 4, 2009 Trong hình trên em có n đường thẳng song song nằm ngang. Em đang cần một đoạn code có tác dụng lấy được tập hợp tất cả các tọa độ giao điểm và tập hợp tọa độ các điểm đầu của các đường thẳng nằm ngang khi em vẽ một đường thẳng cắt qua những đường thẳng nằm ngang này. Các Huynh giúp em với. :s_big: Edit: em chỉ cần lấy tọa độ của các điểm đầu phía trái (phía có tọa độ x nhỏ) Bạn tham khảo đoạn code này (defun C:TG( / n p1 p2 p3 p4 p listDD listDG) (defun dxf( name code) (cdr (assoc code (entget name))) ) (setq n (entsel "Chon doan thang cat")) (if n (progn (setq n (car n)) (setq p1 (dxf n 10) p2 (dxf n 11) listDD nil listDG nil) (if (setq ss (ssget "f" (list p1 p2) '((0 . "line")))) (progn (setq i 0) (while (< i (sslength ss)) (setq n (ssname ss i)) (setq p3 (dxf n 10) p4 (dxf n 11)) (if (setq p (inters p1 p2 p3 p4)) (progn (setq listDG (append listDG (list p))) (if (< (car p3) (car p4)) (setq listDD (append listDD (list p3))) (setq listDD (append listDD (list p4))) ) )) (setq i (1+ i)) ) )) )) ;Ket qua listDD chua ds diem dau va listDG chua danh sach diem giao ) 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
Thaistreetz 539 Báo cáo bài đăng Đã đăng Tháng 9 4, 2009 Đúng chính xác là đoạn code em cần. Nhưng nó có lỗi error: too many arguments Em ko biết nó lỗi ở chỗ nào, fiền anh xem lại giúp em với. Tiện đây anh có thể giải thích hộ em đoạn này không? (ssget "f" (list p1 p2) '((0 . "line"))) Và nếu em muốn nhận đối tượng gồm cả line và polyline thì làm thế nào? em đã đọc help nhưng không hiểu đoạn này lắm. cảm ơn anh 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
TRUNGNGAMY 91 Báo cáo bài đăng Đã đăng Tháng 9 4, 2009 Đúng chính xác là đoạn code em cần.Nhưng nó có lỗi error: too many arguments Em ko biết nó lỗi ở chỗ nào, fiền anh xem lại giúp em với. Tiện đây anh có thể giải thích hộ em đoạn này không? (ssget "f" (list p1 p2) '((0 . "line"))) Và nếu em muốn nhận đối tượng gồm cả line và polyline thì làm thế nào? em đã đọc help nhưng không hiểu đoạn này lắm. cảm ơn anh nhiều. Mình đã down lại file trên mạng và file ở máy nhà, cả 2 đều chạy tốt cả trên cad2002 và cad2008. Lỗi trên có lẽ do đụng hàm cùng tên trên máy của bạn. Đoạn lisp trên chỉ toàn sử dụng kiến thức của Autolisp chứ kg có Visual lisp nên cũng khá đơn giản. Bạn có thể tìm đc vị trí lỗi dễ dàng bằng kinh nghiệm của bạn. (ssget "f" (list p1 p2) '((0 . "line"))) Đoạn code này cho phép chọn đối tượng đi qua một đường thẳng hoặc đường gấp khúc định bởi danh sách các tọa độ p1 p2 ... (vị trí cắt nhau phải liền nét). Bạn có thể chọn thêm các đối tượng khác. Ví dụ : (ssget "f" (list p1 p2) '((0 . "line,lwpolyline"))) Trên diễn đàn đã có nhiều bài viết về xác định giao của hai đối tượng rất hay bằng Visual Lisp. Bạn có thể tham khảo để xây dựng code tổng quát hơn 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
Tue_NV 3915 Báo cáo bài đăng Đã đăng Tháng 9 5, 2009 Tiện đây anh có thể giải thích hộ em đoạn này không?(ssget "f" (list p1 p2) '((0 . "line"))) Và nếu em muốn nhận đối tượng gồm cả line và polyline thì làm thế nào? em đã đọc help nhưng không hiểu đoạn này lắm. cảm ơn anh nhiều. Bạn có thể sử dụng như thế này : (ssget "f" (list p1 p2) '((0 . "*line"))) Nó chọn Line, Polyline, LWpolyline *line : thì * là kí tự đại diện, còn line là đuôi đằng sau. Miễn là đối tượng nào có đuôi line đằng sau là Lisp chọn tất bao gồm cả Splỉne 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
Thaistreetz 539 Báo cáo bài đăng Đã đăng Tháng 9 5, 2009 Bạn có thể sử dụng như thế này : (ssget "f" (list p1 p2) '((0 . "*line")))Nó chọn Line, Polyline, LWpolyline *line : thì * là kí tự đại diện, còn line là đuôi đằng sau. Miễn là đối tượng nào có đuôi line đằng sau là Lisp chọn tất bao gồm cả Splỉne Cái này đúng là hay quá. thank anh nhiều :s_big: 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