Đến nội dung


Hình ảnh
- - - - -

Vẽ một Polyline bằng AutoLisp


  • Please log in to reply
8 replies to this topic

#1 HTV_ag

HTV_ag

    biết pan

  • Members
  • Pip
  • 6 Bài viết
Điểm đánh giá: 0 (bình thường)

Đã gửi 24 September 2009 - 09:31 PM

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).
  • 0

#2 HTV_ag

HTV_ag

    biết pan

  • Members
  • Pip
  • 6 Bài viết
Điểm đánh giá: 0 (bình thường)

Đã gửi 24 September 2009 - 10:37 PM

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ẻ.
  • 0

#3 Nguyen Hoanh

Nguyen Hoanh

    biết lệnh adcenter

  • Moderator
  • PipPipPipPipPipPipPip
  • 4105 Bài viết
Điểm đánh giá: 4495 (đỉnh cao)

Đã gửi 24 September 2009 - 11:27 PM

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))
  • 0

#4 HTV_ag

HTV_ag

    biết pan

  • Members
  • Pip
  • 6 Bài viết
Điểm đánh giá: 0 (bình thường)

Đã gửi 25 September 2009 - 04:36 PM

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.
  • 0

#5 master_worse

master_worse

    biết lệnh offset

  • Advance Member
  • PipPipPip
  • 170 Bài viết
Điểm đánh giá: 87 (tàm tạm)

Đã gửi 25 September 2009 - 04:58 PM

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)
  • 0

Ngu dốt không đáng thẹn bằng thiếu ý chí học hỏi


Tri thức làm người ta khiêm tốn, ngu si làm người ta kiêu ngạo (Ngạn ngữ Anh)


#6 HTV_ag

HTV_ag

    biết pan

  • Members
  • Pip
  • 6 Bài viết
Điểm đánh giá: 0 (bình thường)

Đã gửi 25 September 2009 - 05:04 PM

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.
  • 0

#7 gia_bach

gia_bach

    biết lệnh adcenter

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 1432 Bài viết
Điểm đánh giá: 1425 (rất tốt)

Đã gửi 26 September 2009 - 07:41 AM

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 .
  • 0

#8 khaosat2009

khaosat2009

    biết lệnh offset

  • Members
  • PipPipPip
  • 171 Bài viết
Điểm đánh giá: 10 (tàm tạm)

Đã gửi 27 September 2009 - 03:45 PM

Bạn up lisp chính thức đã sửa để anh em tham khảo được không Bạn.
Mình cũng cần hiểu về vấn đề trên.
Mong tin ,
  • 0

#9 TRUNGNGAMY

TRUNGNGAMY

    biết lệnh block

  • Members
  • PipPipPipPipPipPip
  • 401 Bài viết
Điểm đánh giá: 91 (tàm tạm)

Đã gửi 28 September 2009 - 12:35 AM

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 "")
)

  • 1