Đến nội dung


Hình ảnh

Giúp mình dùng lệnh List lấy tọa độ điểm PL !


  • Please log in to reply
2 replies to this topic

#1 jana1287

jana1287

    Chưa sử dụng CAD

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

Đã gửi 26 July 2011 - 05:45 PM

Bác nào giúp em cái lệnh LI này với! Em đang cần dùng lệnh LI để xuất tọa độ các điểm trong 1 đường PL ra excel nhưng mà số điểm chỉ hạn chế trên 1 đường PL có 11 điểm đỉnh. Em xin hỏi là có cách nào làm tăng được số điểm này lên nhiều nhất không?
Thanks/
  • 0

#2 whatcholingon

whatcholingon

    biết lệnh break

  • Members
  • PipPipPipPip
  • 222 Bài viết
Điểm đánh giá: 37 (tàm tạm)

Đã gửi 26 July 2011 - 10:28 PM

Mình có một lsp như thế này: có một PL trong đó có nhiều đỉnh. nhưng tại các đỉnh này phải có 1 text tương ứng thì lsp này mới xuất ra toa độ của pl đó được. nếu bạn cần mình upfile lên cho.
  • 0

#3 phamthanhbinh

phamthanhbinh

    biết lệnh adcenter

  • Moderator
  • PipPipPipPipPipPipPip
  • 6009 Bài viết
Điểm đánh giá: 3113 (tuyệt vời)

Đã gửi 27 July 2011 - 01:44 AM

Bác nào giúp em cái lệnh LI này với! Em đang cần dùng lệnh LI để xuất tọa độ các điểm trong 1 đường PL ra excel nhưng mà số điểm chỉ hạn chế trên 1 đường PL có 11 điểm đỉnh. Em xin hỏi là có cách nào làm tăng được số điểm này lên nhiều nhất không?
Thanks/

Hề hề hề,
Nếu bạn đã cài bộ express tools Thì có thể dùng đoạn code sau đây để lấy danh sách các đỉnh của một pline:
(acet-geom-vertex-list (car (entsel "\n Hay chon mot polyline ")))
Còn nếu chưa cài thì vấn đề sẽ phức tạp hơn.
Nếu là LWpolyline:

(setq myVertexList(list)) ;create an empty list to store the vertices in. (Tạo một danh sách rỗng để lưu các đoạn polyline vào)
(foreach a enlist ;;;--- step through each sub-list (lặp qua tất cả các danh sách con trong danh sách enlist)
(if(= 10 (car a)) ;;;--- if the first item in the sub-list equals 10 then (khi mã nhóm là 10 thì thực hiện)
(setq myVertexList ;;;--- reset myVertexList to (đặt lại biến myVertexList)
(append myVertexList ;;;--- the old vertex list (Biến cũ của vòng lặp trước)
(list ;;;--- plus a list containing (cộng thêm biến trong vòng lặp)
(cdr a) ;;;--- the vertex point (Tọa độ của đỉnh polyline)
) ;;;--- close the list statement (Đóng hàm list)
) ;;;--- close the append statement (Đóng hàm append)
) ;;;--- close the setq statement (Đóng hàm đặt lại biến setq)
) ;;;--- close the if statement (Đóng hàm if không có else)
) ;;;--- close the foreach statement (Đóng hàm foreach)
Nếu là Mline:

(setq en(car(entsel "\n Select a MLine: ")));;;--- Get the entity name (Lấy tên đối tượng)
(setq enlist(entget en)) ;;;--- Get the dxf group codes (Lấy các mã nhóm DXF)
(setq myVertexList(list)) ;;;--- create an empty list to store the vertices in. (tạo một danh sách rỗng để lưu các tọa độ đỉnh )
(setq v1(cdr(assoc 10 enlist))) ;;;--- Get the starting point of the mline (lấy tọa độ điểm bắt đầu của tổ hợp các đoạn thẳng)
(setq myVertexList(append myVertexList (list v1))) ;;;--- Add the point to the list (Thêm toạ độ đỉnh vào danh sách)
(foreach a enlist ;;;--- step through each sub-list (Lặp qua các danh sách phụ)
(if(= 11 (car a)) ;;;--- if the first item in the sub-list equals 11 then (Khi mã nhóm là 11 thì thực hiện)
(setq myVertexList ;;;--- reset myVertexList to (Đặt lại giá trị biến myVertexList)
(append myVertexList ;;;--- the old vertex list (Danh sách tọa độ cũ)
(list ;;;--- plus a list containing (cộng thêm một danh sách)
(cdr a) ;;;--- the vertex point (tọa độ đỉnh)
) ;;;--- close the list statement (Đóng hàm list)
) ;;;--- close the append statement (Đóng hàm append)
) ;;;--- close the setq statement (đóng hàm đặt lại giá trị setq)
) ;;;--- close the if statement (Đóng hàm if không có else)
) ;;;--- close the foreach statement (Đóng hàm lặp foreach)

Còn nếu là polyline:

(defun C:PTEST()
;;;--- Get the entity's name (lấy tên đối tượng)
(setq en(car(entsel "\n Select a PolyLine: ")))

;;;--- Get the DXF group codes of the entity (lấy các mã nhóm DXF của đối tượng)
(setq enlist(entget en))

;;;--- Create an empty list to hold the points (tạo một danh sách rỗng để lưu các tọa độ điểm)
(setq ptList(list))

;;;--- Get the sub-entities name (lấy tên đối tượng phụ)
(setq en2(entnext en))

;;;--- Get the dxf group codes of the sub-entity (lấy các mã nhóm DXF của đối tượng phụ)
(setq enlist2(entget en2))

;;;--- While the polyline has a next vertice (Trong khi polyline có đỉnh tiếp theo)
(while (not (equal (cdr(assoc 0 (entget(entnext en2))))"SEQEND"))

;;;--- Get the next sub-entity (lấy đối tượng phụ tiếp theo)
(setq en2(entnext en2))

;;;--- Get its dxf group codes (Lấy mã nhóm DXF của nó)
(setq enlist2(entget en2))

;;;--- Check to make sure it is not a spline reference point (Kiểm soát để chắc chắn đó không phải là điểm Spline tham chiếu)
(if(/= 16 (cdr(assoc 70 enlist2)))

;;;--- It is a vertex, save the point in a list [ptlist] (lưu toạ độ điểm nếu nó là một đỉnh)
(setq ptList(append ptList (list (cdr(assoc 10 enlist2)))))

)
)
(princ)
)

Vậy đó, bạn hãy tùy nghi sử dụng theo ý bạn muốn hỉ....
Chúc bạn vui.
  • 0
Chúc các quý Anh trên diễn đàn luôn khỏe, đẻ thêm được nhiều thứ để mót.