Đến nội dung


Hình ảnh
- - - - -

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


  • Please log in to reply
7 replies to this topic

#1 haimed

haimed

    biết vẽ circle

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

Đã gửi 11 December 2008 - 05:15 PM

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

#2 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 11 December 2008 - 07:32 PM

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

  • 1

#3 haimed

haimed

    biết vẽ circle

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

Đã gửi 12 December 2008 - 08:04 AM

Thank pac Hoanh, autolisp thật khó sử dụng nếu ko biết hết các hàm của nó
  • 0

#4 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 12 December 2008 - 08:26 AM

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

#5 ndtnv

ndtnv

    biết lệnh minsert

  • Members
  • PipPipPipPipPipPip
  • 437 Bài viết
Điểm đánh giá: 384 (khá)

Đã gửi 12 December 2008 - 08:33 AM

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
  • 2

#6 haimed

haimed

    biết vẽ circle

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

Đã gửi 12 December 2008 - 09:54 AM

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

#7 ssg

ssg

    biết lệnh adcenter

  • Vip
  • PipPipPipPipPipPipPip
  • 1228 Bài viết
Điểm đánh giá: 1087 (rất tốt)

Đã gửi 12 December 2008 - 01:23 PM

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

#8 haimed

haimed

    biết vẽ circle

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

Đã gửi 12 December 2008 - 02:30 PM

Thanks ssg, mình noob wa, cám ơn các bạn đã chỉ giáo
  • 0