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

Hỏi cách lấy dữ liệu của đường polyline

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

Các bác cho mình hỏi cách lấy dữ liệu của đường polyline với: 1 đường polyline có rất nhiều đỉnh, nếu muốn lấy tọa độ của 1 đỉnh nào đó thì làm thế nào vì các đỉnh của polyline đều đc gán giá trị ...(10 x y) ...(10 x1 y1)

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ác bác cho mình hỏi cách lấy dữ liệu của đường polyline với: 1 đường polyline có rất nhiều đỉnh, nếu muốn lấy tọa độ của 1 đỉnh nào đó thì làm thế nào vì các đỉnh của polyline đều đc gán giá trị ...(10 x y) ...(10 x1 y1)

Đầu tiên bạn lọc để lấy list các đỉnh. Sau đó bạn dùng hàm nth để lấy phần tử thứ i của list.

 

Đoạn code sau đây sẽ lọc ra các đỉnh và gán biến dinh1 cho tọa độ đỉnh đầu tiên:

 (setq tt (entget (car (entsel "\nPick pline: ")))) ;; Lấy thông tin đối tượng
 (setq tt (vl-remove-if '(lambda (x) (/= 10 (car x))) tt)) ;; Loại các phần tử list không mang dữ liệu đỉnh
 (setq dinh1 (cdr (nth 0 tt))) ;; gán biến dinh1 cho tọa độ đầu tiê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
Thank pac Hoanh, autolisp thật khó sử dụng nếu ko biết hết các hàm của nó

Ngôn ngữ nói chung là vậy, bất kể là ngôn ngữ lập trình hay tiếng Anh, tiếng Pháp. Bạn khó mà dùng được khi bạn không giàu từ vựng.

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ổng quát hơn trong trường hợp Polyline không nằm trong mặt phẳng xoy thì dùng hàm vlax-curve-getPointAtParam

(defun getVert (e / i L) 
(setq i -1 L nil)
(repeat (fix (1+ (vlax-curve-getEndParam e) ))
	(setq  i (1+ i) L (append L (list (vlax-curve-getPointAtParam e i))))
)
)
Test:
(getvert (car (entsel "\nHay chon duong polyline ")))

Trường hợp đường polyline là closed thì hàm trên sẽ cho đỉnh cuối trùng với đỉnh đầu

  • Vote tă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
Tổng quát hơn trong trường hợp Polyline không nằm trong mặt phẳng xoy thì dùng hàm vlax-curve-getPointAtParam

(defun getVert (e / i L) 
(setq i -1 L nil)
(repeat (fix (1+ (vlax-curve-getEndParam e) ))
	(setq  i (1+ i) L (append L (list (vlax-curve-getPointAtParam e i))))
)
)
Test:
(getvert (car (entsel "\nHay chon duong polyline ")))

Trường hợp đường polyline là closed thì hàm trên sẽ cho đỉnh cuối trùng với đỉnh đầu

 

ndtnv cho mình hỏi toàn bị báo lỗi: no function definition: VLAX-CURVE-GETENDPARAM , sao nó lại ko nhận hàm VLAX-CURVE-GETENDPARAM

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
ndtnv cho mình hỏi toàn bị báo lỗi: no function definition: VLAX-CURVE-GETENDPARAM , sao nó lại ko nhận hàm VLAX-CURVE-GETENDPARAM

Trước khi dùng các functions dạng VLAX..., bạn phải gọi (vl-load-com), và chỉ cần 1 lần trong bản vẽ đang mở.

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  

×