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

Vẽ một Polyline bằng AutoLisp

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

Xin chào các bạn!

Tôi muốn vẽ một Polyline từ list cho trước bao gồm tọa độ các điểm cần vẽ:

(setq P1 (list 1 1))

(setq P2 (list 2 2))

(setq P3 (list 1 3))

(setq P4 (list 0 1))

(setq points (list P1 P2 P3 P4))

 

(entmake

'((0 . "POLYLINE") (70 . 1))

)

(setq i 0)

(while (< i (length points))

(setq p (nth i points))

(setq x (car p)

y (cadr p)

)

(ENTMAKE

'((0 . "VERTEX") (10 x y 0))

)

)

(ENTMAKE

'((0 . "SEQEND"))

)

nhưng nó bị lỗi tại dòng '((0 . "VERTEX") (10 x y 0)) vì nó ko hiểu được biến x y.

Ai có cách nào khác xin giúp tôi với.

P/S: Cái list ở trên chỉ là Vd minh họa, còn thực tế thì phần tử của list là động (không biết trướ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
Xin chào các bạn!

Tôi muốn vẽ một Polyline từ list cho trước bao gồm tọa độ các điểm cần vẽ:

(setq P1 (list 1 1))

(setq P2 (list 2 2))

(setq P3 (list 1 3))

(setq P4 (list 0 1))

(setq points (list P1 P2 P3 P4))

 

(entmake

'((0 . "POLYLINE") (70 . 1))

)

(setq i 0)

(while (< i (length points))

(setq p (nth i points))

(setq x (car p)

y (cadr p)

)

(ENTMAKE

'((0 . "VERTEX") (10 x y 0))

)

)

(ENTMAKE

'((0 . "SEQEND"))

)

nhưng nó bị lỗi tại dòng '((0 . "VERTEX") (10 x y 0)) vì nó ko hiểu được biến x y.

Ai có cách nào khác xin giúp tôi với.

P/S: Cái list ở trên chỉ là Vd minh họa, còn thực tế thì phần tử của list là động (không biết trước được).

 

Ah có rồi

(foreach d points

(setq Ld2 (append Ld2 (list (cons 10 d) (cons 42 0))))

)

 

(entmakex (append (list '(0 . "LWPOLYLINE")

'(100 . "AcDbEntity")

'(100 . "AcDbPolyline")

(cons 90 (length points))

)

Ld2

)

)

Cảm ơn mọi người và chúc vui vẻ.

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

hoặc bạn có thể thay dòng lệnh bị sai cú pháp

'((0 . "VERTEX") (10 x y 0))

bằng dòng lệnh đúng

(list (cons 0 "VERTEX") (list 10 x y 0.0))

hoặc

(list (cons 0 "VERTEX") (cons 10 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
hoặc bạn có thể thay dòng lệnh bị sai cú pháp

'((0 . "VERTEX") (10 x y 0))

bằng dòng lệnh đúng

(list (cons 0 "VERTEX") (list 10 x y 0.0))

hoặc

(list (cons 0 "VERTEX") (cons 10 p))

 

Tôi test thử rồi nếu tọa độ chẵn (không có dấu chấm ".") thì chạy ok, còn nếu tọa độ có phần lẻ vd: (25.362 38.625) thì nó báo lỗi: error: bad DXF group: (10 . 25.362).

Rất mong được giúp đỡ. Xin 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

thử thêm (setvar "OSMODE" 0) trước hàm entmake xem

 

sao không sử dụng :

 

(setq OLDOS (getvar "OSMODE"))

(setvar "OSMODE" 0)

(command "PLINE" P1 P2 P3 P4 "")

(setvar "OSMODE" OLDOS)

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
thử thêm (setvar "OSMODE" 0) trước hàm entmake xem

 

sao không sử dụng :

 

(setq OLDOS (getvar "OSMODE"))

(setvar "OSMODE" 0)

(command "PLINE" P1 P2 P3 P4 "")

(setvar "OSMODE" OLDOS)

Cảm ơn bạn đã giúp đỡ.

Polyline của tôi có số cạnh ko xác định trước được nên ko thể làm như vậy đ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
Xin chào các bạn!

Tôi muốn vẽ một Polyline từ list cho trước bao gồm tọa độ các điểm cần vẽ:

...................................

thực tế thì phần tử của list là động (không biết trước được).

Bạn tham khảo bài viết hàm tạo Pline hở từ danh sách điể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
Xin chào các bạn!

Tôi muốn vẽ một Polyline từ list cho trước bao gồm tọa độ các điểm cần vẽ:

(setq P1 (list 1 1))

(setq P2 (list 2 2))

(setq P3 (list 1 3))

(setq P4 (list 0 1))

(setq points (list P1 P2 P3 P4))

Bạn thử cái này xem

(defun C:VEPL( / points)
(setq P1 (list 1 1))
(setq P2 (list 2 2))
(setq P3 (list 1 3))
(setq P4 (list 0 1))
(setq points (list P1 P2 P3 P4))
(command "_.pline")
(foreach p points (command p))
(command "")
)

  • 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

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  

×