Đến nội dung


Hình ảnh
- - - - -

[Yêu cầu] Lisp xuất toạ độ các đỉnh của đường Line hoặc Plyline


  • Please log in to reply
27 replies to this topic

#1 thanhhoa.36

thanhhoa.36

    biết vẽ circle

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

Đã gửi 19 April 2010 - 12:38 AM

Em đi làm nhiều khi gặp trường hợp phải dùng tới và quản lý các toạ độ của các đối tượng như Line hoặc Polyline, em đã đọc và thầy rất nhiều Lisp hay nhưng chưa thấy Lisp nào viết xuất toạ độ của các đỉnh Line hoặc Polyline kèm theo tên điểm của các đỉnh Line hoặc Plyline đó. Em chưa viết Lisp bao giờ rất mong các bác có thể viết dùm em cái Lisp để sử lý tình huống này. Em xin cảm ơn !

Vd em có bản vẽ như sau:
http://www.cadviet.c...drawing1_30.dwg

Em muốn có một file kết quả dạng (.TXT) nằm cùng thư mục chứa bản vẽ đó
File (.TXT) có dạng như sau:
http://www.cadviet.c...pfiles/2/kq.txt
  • 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 19 April 2010 - 12:46 AM

Em đi làm nhiều khi gặp trường hợp phải dùng tới và quản lý các toạ độ của các đối tượng như Line hoặc Polyline, em đã đọc và thầy rất nhiều Lisp hay nhưng chưa thấy Lisp nào viết xuất toạ độ của các đỉnh Line hoặc Polyline kèm theo tên điểm của các đỉnh Line hoặc Plyline đó. Em chưa viết Lisp bao giờ rất mong các bác có thể viết dùm em cái Lisp để sử lý tình huống này. Em xin cảm ơn !

Vd em có bản vẽ như sau:
http://www.cadviet.c...drawing1_30.dwg

Em muốn có một file kết quả dạng (.TXT) nằm cùng thư mục chứa bản vẽ đó
File (.TXT) có dạng như sau:
http://www.cadviet.c...pfiles/2/kq.txt

bạn hãy sử dụng chức năng search của diễn đàn, từ khoá chính là tiêu đề bài viết của bạn.
  • 1

#3 thanhhoa.36

thanhhoa.36

    biết vẽ circle

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

Đã gửi 19 April 2010 - 11:39 PM

bạn hãy sử dụng chức năng search của diễn đàn, từ khoá chính là tiêu đề bài viết của bạn.



Em đã tìm hiểu dồi nhưng các Lisp đó vẫn chưa như em mong muốn, Bác Nguyen Hoanh có thể giúp em được không ? em xin cảm ơn bác nhé:

Ý của em là :

mỗi đoạn Line hoặc PlyLine có trên bản vẽ có chứa tên điểm do mình đặt là 1,2,3 hoặc A, B, C .... Lisp phải đọc và ghi vào file. txt tên điểm tại đỉnh các Line hoặc Plyline đó là 1,2,3 hoặc A,B,C... và toạ độ các đỉnh Line hoặc Plyline đó.

có thể toạ độ ten diem 1,2,3 hoặc A,B,C .... trùng hoặc khác với toạ độ các đỉnh Line hoặc Plyline, nhưng em cần toạ độ của các đỉnh Line hoặc Plyline đó thôi.


Bác có thể xem File gửi kèm của em thì bác sẽ hiểu rõ ý em nói.

Chúc bác luôn sức khoẻ !
  • 0

#4 18011985

18011985

    biết lệnh properties

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

Đã gửi 07 May 2010 - 01:16 PM

Bạn muốn toạ độ xuất sang TXT và cách cột cách nhau bởi Tab để bạn có thể copy sử lý trong EXECEL, vậy bạn chỉ cần tìm hiểu phần xuất sang TXT và lệnh xuất toạ độ ra bản vẽ trên CADVIET. Bạn search (defun c:td trên diễn đàn là được mà.
  • 0
Trăng 16 trăng tròn
Em 16 bụng ... như trăng

Hướng dẫn sử dụng diễn đàn:
Để cảm ơn hay bài viết có ích: Ấn dấu + cuối bài.
Không vừa lòng hay bài spam: Ấn dấu - cuối bài.

#5 namhai

namhai

    biết vẽ rectang

  • Members
  • PipPip
  • 81 Bài viết
Điểm đánh giá: 18 (tàm tạm)

Đã gửi 25 May 2011 - 04:49 PM

Em cũng đang gặp vấn đề này, mong các bác giúp đỡ
  • 0
Hãy làm việc hết mình rồi mọi điều tốt đẹp sẽ đến với bạn.....

#6 ponaparte2003

ponaparte2003

    biết vẽ rectang

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

Đã gửi 25 May 2011 - 05:06 PM

Bạn luu ý là Polyline thì không gắn tên đỉnh cho bạn mà nó là một đối tượng khác. Mình kiếm được 1 cái xuất ra .txt cho bạn về tọa độ của các đỉnh Polyline đây. Còn yêu cầu có thêm tên đỉnh thì bạn nhờ các cao thủ xem thế nào.
http://www.cadviet.c...c_toa_do_pl.lsp
  • 0
Y=acosh(x/a)

#7 pdle

pdle

    biết lệnh mtext

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

Đã gửi 26 May 2011 - 05:51 AM

Bạn luu ý là Polyline thì không gắn tên đỉnh cho bạn mà nó là một đối tượng khác. Mình kiếm được 1 cái xuất ra .txt cho bạn về tọa độ của các đỉnh Polyline đây. Còn yêu cầu có thêm tên đỉnh thì bạn nhờ các cao thủ xem thế nào.
http://www.cadviet.c...c_toa_do_pl.lsp

Để đọc toạ độ của pline thì không còn là vấn đề nan giải, nhưng nhận diện tên đỉnh của nó thì đúng là khó thật. Nếu lấy tiêu chí là text gần đỉnh nhất thì cũng hơi chủ quan, nhưng mà ngoài cái đó ra, em không nghĩ ra một thuật toán nào khác :)
  • 0
Share your knowledge. It is a way to achieve immortality !

***

PS: Nếu bài viết của mình có ích, xin hãy "Bình chọn cho bài viết này" nhé :D

#8 namhai

namhai

    biết vẽ rectang

  • Members
  • PipPip
  • 81 Bài viết
Điểm đánh giá: 18 (tàm tạm)

Đã gửi 26 May 2011 - 08:44 AM

Bạn luu ý là Polyline thì không gắn tên đỉnh cho bạn mà nó là một đối tượng khác. Mình kiếm được 1 cái xuất ra .txt cho bạn về tọa độ của các đỉnh Polyline đây. Còn yêu cầu có thêm tên đỉnh thì bạn nhờ các cao thủ xem thế nào.
http://www.cadviet.c...c_toa_do_pl.lsp

Bác ponaparte2003 à, em dùng lisp của Bác dùng lệnh Gh rồi sao lại ko được nhỉ? nó báo là Command: GH
Select objects: 0 found
  • 0
Hãy làm việc hết mình rồi mọi điều tốt đẹp sẽ đến với bạn.....

#9 anhcos

anhcos

    biết lệnh hatchedit

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

Đã gửi 26 May 2011 - 09:23 PM

Để đọc toạ độ của pline thì không còn là vấn đề nan giải, nhưng nhận diện tên đỉnh của nó thì đúng là khó thật. Nếu lấy tiêu chí là text gần đỉnh nhất thì cũng hơi chủ quan, nhưng mà ngoài cái đó ra, em không nghĩ ra một thuật toán nào khác :)


Tôi cũng nghĩ như vậy, tìm text gần đỉnh nhất là được rồi.
  • 0
Clear sky!

MF Rock collection.

#10 ponaparte2003

ponaparte2003

    biết vẽ rectang

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

Đã gửi 26 May 2011 - 09:37 PM

Bác ponaparte2003 à, em dùng lisp của Bác dùng lệnh Gh rồi sao lại ko được nhỉ? nó báo là Command: GH
Select objects: 0 found

Bạn lưu ý là đối tượng được chọn là Lwpolyline chứ không nhận Polyline và Line đâu bạn nhé! bạn check lại xem thế nào! Nếu đối tượng của bạn toàn là Polyline thì bạn mở Lisp đó ra sửa cú pháp .lwpolyline thành .polyline là được
  • 0
Y=acosh(x/a)

#11 pdle

pdle

    biết lệnh mtext

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

Đã gửi 27 May 2011 - 08:17 AM

Bằng kim chỉ nam là text gần đỉnh của pline nhất, em đã viết một đoạn lisp sau, coi như là một hàm, nó dùng để xuất ra tên đỉnh có toạ độ tương ứng:
(((104.213 47.8395 0.0) "E") ((105.109 58.8957 0.0) "D") ((97.0241 66.4898 0.0) 
"C") ((86.0457 64.9032 0.0) "B") ((80.4412 55.3308 0.0) "A") ((84.4309 44.9807
0.0) "G") ((95.0104 41.6467 0.0) "F"))
, trong đó, ví dụ: (104.213 47.8395 0.0) là đỉnh có tên tương ứng là "E".
Hình đã gửi
Lisp:
;; Thuat toan (by pdle)
;; 1.Chon polyline va cac text toa do
;; 2.Lap danh sach toa do dinh polyline
;; 3.Lap danh sach cac goc cua text
;; 4.Kiem tra lan luot tuong dinh, xem text nao gan no nhat, se gan la ten cua no
;; 5.Cho ra danh sach ten cac dinh polyline
(defun tdpl (/ ent ss1 lsp dsp ptl i resl )
(prompt "\nChon polyline va ten cac dinh cua no: ")
(setq ss1 (ssadd))
(foreach ent (vl-remove-if 'listp (mapcar 'cadr (ssnamex (ssget))))
(if (wcmatch (acet-dxf 0 (entget ent)) "*POLYLINE") (progn
(setq dsp (acet-geom-vertex-list ent) lsp (vl-list-length dsp))
(if (= 1 (acet-dxf 70 (entget ent))) (setq lsp (- lsp 1)))
))
(if (wcmatch (acet-dxf 0 (entget ent)) "*TEXT") (ssadd ent ss1))
)
(if (/= lsp (sslength ss1) ) (alert (strcat "\n So ten ko bang so dinh cua pline: [So dinh]= " (rtos lsp) "; [So ten]= " (rtos (sslength ss1)) ))
(progn
(setq i 0 resl nil)
(repeat lsp
(setq ptl (nth i dsp) disl nil)
(foreach ent (mapcar 'cadr (ssnamex ss1))
(setq
ptt (acet-dxf 10 (entget ent))
disl (append disl (list (distance ptt ptl )))
)
)
(setq
k (vl-position (apply 'min disl) disl)
resl (append resl (list (list (nth i dsp) (acet-dxf 1 (entget (ssname ss1 k))))))
i (+ i 1)
)
(ssdel (ssname ss1 k) ss1)
)
)
)
resl
)

Sau đây là những ưu và nhược điểm của đoạn lisp này:
Ưu điểm:
1. Xét được cả 2 trường hợp polyline kín và hở
2. Kết quả xuất ra dưới dạng danh sách, dễ dàng phục vụ cho các mục đích khác
Khuyết điểm:
1. Chỉ làm việc với một polyline đơn lẻ
2. Chưa làm việc được với LINE
Phương án đề xuất:
1. Để làm việc được với nhiều pline, chắc chắn sẽ làm cho chương trình trở nên phức tạp hơn trong việc phân nhóm
2. Đối với line, một là có thể convert chúng thành pline, hoặc lấy code dxf 10 và 11 của từng đoạn thẳng, sau đó sẽ thu được một bộ điểm, đem so sánh 2 điểm nào trùng nhau, lập thành một. Cuối cùng ta có danh sách các đỉnh của đường tạo bởi cái line đó

Mong mọi người ghóp ý!
  • 1
Share your knowledge. It is a way to achieve immortality !

***

PS: Nếu bài viết của mình có ích, xin hãy "Bình chọn cho bài viết này" nhé :D

#12 ketxu

ketxu

    Copier - Paster - Editor

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

Đã gửi 27 May 2011 - 08:59 AM

Mình có 1 chút góp ý sau :
- Đưa tập *Text + * Pline ra làm đối số của hàm, như vậy mới đúng ý nghĩa là 1 hàm. Khi đã chuyển ra đối số, code hàm sẽ gọn hơn, và có thể làm vòng lặp để làm với nhiều nhóm
- Kiểm tra Pline kín hoặc hở. Trong trường hợp Pline kín thường sẽ ít ai ghi 2 Text cho 1 tọa độ trùng đầu + cuối đó => hàm không chạy do Text ít hơn đỉnh.Mình cũng thấy bạn lường trường hợp này rồi, tuy nhiên mã 70 sẽ = 1 khi vẽ Pline người ta "closed", chứ bắt điểm cuối trùng điểm đầu thì mặc dù dxf 70 = 0, bản chất nó vẫn là kín ^^
=> cũng không nhất thiết phải số Text = số đỉnh. Có thể đổi việc chọn nhóm text = quy định khoảng cách nhỏ nhất tìm text trong đối số. => trong list tên đỉnh có thể là Nil
- Đảo lại list kết quả :)
- Đối với Line, hãy để việc quyết định cho người sử dụng thì hay hơn và cũng đơn giản hơn :)
  • 1

Thành viên nhóm CadMagic.
Mời bạn ghé thăm facebook nhóm - Page viết lisp theo yêu cầu  :
CAD MAGIC


#13 pdle

pdle

    biết lệnh mtext

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

Đã gửi 27 May 2011 - 07:45 PM

Mình có 1 chút góp ý sau :
- Đưa tập *Text + * Pline ra làm đối số của hàm, như vậy mới đúng ý nghĩa là 1 hàm. Khi đã chuyển ra đối số, code hàm sẽ gọn hơn, và có thể làm vòng lặp để làm với nhiều nhóm

Đồng ý với ý kiến này của anh ketxu!

- Kiểm tra Pline kín hoặc hở. Trong trường hợp Pline kín thường sẽ ít ai ghi 2 Text cho 1 tọa độ trùng đầu + cuối đó => hàm không chạy do Text ít hơn đỉnh.Mình cũng thấy bạn lường trường hợp này rồi, tuy nhiên mã 70 sẽ = 1 khi vẽ Pline người ta "closed", chứ bắt điểm cuối trùng điểm đầu thì mặc dù dxf 70 = 0, bản chất nó vẫn là kín ^^

Như vậy ở đây ta sẽ làm việc trên danh sách các đỉnh của pline. Cụ thể là, khi vòng lặp chạy qua lần lượt các đỉnh của pline, nó sẽ kiểm tra là đỉnh đang xét có trùng với đỉnh nào trước nó hay không, nếu trùng rồi, thì bỏ qua, nếu chưa trùng ta sẽ tìm tên đỉnh đó. Làm như thế này thì sẽ giải quyết được trường hợp polyline kín, hoặc tự cắt tại đỉnh của nó.

=> cũng không nhất thiết phải số Text = số đỉnh. Có thể đổi việc chọn nhóm text = quy định khoảng cách nhỏ nhất tìm text trong đối số. => trong list tên đỉnh có thể là Nil

Đối với cái này thì nếu số đỉnh lớn hơn số lượng tên, nghĩa là cần phải cho người dùng nhập vào khoảng cách lớn nhất a từ tên đỉnh tới đỉnh. Đỉnh nào nằm cách các text tên đỉnh một khoảng lớn hơn a thì sẽ có tên là UN (Unknown).

- Đảo lại list kết quả :)

Cái này thì em không hiểu lắm :D

- Đối với Line, hãy để việc quyết định cho người sử dụng thì hay hơn và cũng đơn giản hơn :)

Em nghĩ sẽ tạo ra một danh sách chứa tất cả các đỉnh của các lines được nhập vào, sau đó xử lý với danh sách này. Các này cũng có thể được áp dụng để chọn nhiều polyline cùng một lúc, nhưng làm như thế này, e là sẽ loạn vì khi đó sẽ không biết là đỉnh nào của polyline nào. Theo em nên thống nhất, chỉ có 1 pline được nhập vào cho một lần xử lý

Ngoài ra, em còn mắc một số vấn đề như sau:

1. Hàm ssget, chúng ta có thể khống chế loại đối tượng được chọn , dạng như (ssget '((0 . "POLYLINE"))) là dùng để chỉ chọn đối tượng có tên là POLYLINE. Nhưng giả sử ta muốn giới hạn một cách rộng hơn, kiểu như đối tượng có thể la POLYLINE hoặc LWPOLYLINE, hay là có thể là "TEXT" hoặc "MTEXT", nghĩa là giới hạn đối tượng chọn là 2 hoặc một số kiểu đối tượng nào đó ?

2. cụm (acet-ss-to-list) mà anh ketxu từng nêu, nó làm cái gì đấy ạ?

Mong mọi người cho ý kiến!
  • 0
Share your knowledge. It is a way to achieve immortality !

***

PS: Nếu bài viết của mình có ích, xin hãy "Bình chọn cho bài viết này" nhé :D

#14 ketxu

ketxu

    Copier - Paster - Editor

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

Đã gửi 27 May 2011 - 10:33 PM

- À, vì list kết quả ngược lại so với thứ tự đỉnh
- Đoạn nhỏ nhất, lớn nhất mình nói bị ngược, đúng là khoảng cách lớn nhất. Chỉ xét cái nào nhỏ hơn khoảng giới hạn, và nếu có nhiều text trong đó, sẽ lấy cái gần nhất. Điều này làm phức tạp vấn đề hơn 1 chút, nếu có thời gian thì sửa, không thì thôi ^^
- 1.Filter list có thể ở dạng

(setq flt '((-4 . "<OR")
(0 . "TEXT")
(0 . "PLINE")
(0 . "MTEXT")
(-4 . "<AND")
(0 . "INSERT")
(66 . 1)
(-4 . "AND>")
(-4 . "OR>")
)
)

Các toán tử And, Or có lẽ không cần giải thích dài nữa.
- 2. acet-ss-to-list : chuyển tập chọn ss sang list các ename. Cú pháp (acet-ss-to-list ss), hàm trả về list các ename trong tập chọn
  • 1

Thành viên nhóm CadMagic.
Mời bạn ghé thăm facebook nhóm - Page viết lisp theo yêu cầu  :
CAD MAGIC


#15 pdle

pdle

    biết lệnh mtext

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

Đã gửi 28 May 2011 - 04:33 AM

- À, vì list kết quả ngược lại so với thứ tự đỉnh

Đúng rồi anh ạ, giờ em mới để ý :D

- Đoạn nhỏ nhất, lớn nhất mình nói bị ngược, đúng là khoảng cách lớn nhất. Chỉ xét cái nào nhỏ hơn khoảng giới hạn, và nếu có nhiều text trong đó, sẽ lấy cái gần nhất. Điều này làm phức tạp vấn đề hơn 1 chút, nếu có thời gian thì sửa, không thì thôi ^^


Em cũng có ý như thế này anh ạ

- 1.Filter list có thể ở dạng


Ở đây mã dxf -4 là dùng cho các toán tử logic, and và or trong hàm ssget đúng không ạ?
  • 0
Share your knowledge. It is a way to achieve immortality !

***

PS: Nếu bài viết của mình có ích, xin hãy "Bình chọn cho bài viết này" nhé :D

#16 ketxu

ketxu

    Copier - Paster - Editor

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

Đã gửi 28 May 2011 - 09:03 AM

Ở đây mã dxf -4 là dùng cho các toán tử logic, and và or trong hàm ssget đúng không ạ?

Đúng rồi bạn ạ. NOT nữa. Mỗi lần <> sẽ tương đương 1 cặp dấu điều kiện
  • 0

Thành viên nhóm CadMagic.
Mời bạn ghé thăm facebook nhóm - Page viết lisp theo yêu cầu  :
CAD MAGIC


#17 pdle

pdle

    biết lệnh mtext

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

Đã gửi 30 May 2011 - 08:35 PM

Em đã sửa lại cái lisp trên như sau:

Các vấn đề đã giải quyết được:

1. Đã xử lý được với các đỉnh của lines
2. Không còn vướng mắc ở các đỉnh của polyline trùng nhau (polyline đi qua 1 điểm 2 lần) vì đã có phương loại các đỉnh bị lặp
3. Cho phép chọn một lúc nhiều line và polyline (co như 1 tổ hợp đường)
4. Ghi vào file .txt dưới dạng:
Hình đã gửi

Các vấn đề còn tồn tại:

1. Khi ghi dữ liệu vào file .txt không hiểu tại sao TAB sau Y không hoạt động, nghĩa là khoảng cách từ tọa độ Y đến tọa độ Z không bằng 1TAB. Ngoài ra ở các điểm C và D, tọa độ X và Y cũng không cách nhau đúng 1 TAB?

2. Chưa giải quyết cho trường hợp số đỉnh nhiều hơn tên đỉnh

Sau đây là lisp:
;;; by pdle , from cadviet.com
;;; Nhap cac doi tuong line va polyline
(defun ImpL (/ ent vet)
(Prompt "\nNhap lines va polylines: ")
(setq lisvt nil)
(foreach ent(acet-ss-to-list(ssget'((-4 . "<OR") (0 . "LINE") (0 . "LWPOLYLINE") (0 . "POLYLINE")(-4 . "OR>") )))
(if (= (acet-dxf 0 (entget ent)) "LINE" )(setq lisvt (vl-list* (acet-dxf 11 (entget ent)) (acet-dxf 10 (entget ent)) lisvt)))
(if (wcmatch (acet-dxf 0 (entget ent)) "*POLYLINE") (foreach vet (acet-geom-vertex-list ent) (setq lisvt (vl-list* vet lisvt))))
)
(setq lisvt (Deldup (reverse lisvt)))
lisvt
)
;;; Loai nhung dinh trung nhau
(defun Deldup (lis)
(if lis (cons (car lis) (Deldup (vl-remove (car lis) (cdr lis)))))
)
;;; Nhap ten cua cac dinh
(defun ImpT (/ ent)
(prompt "\nNhap ten dinh: ")
(setq ssTex (ssadd))
(foreach ent(acet-ss-to-list (ssget'((-4 . "<OR") (0 . "TEXT") (0 . "MTEXT") (-4 . "OR>") )))
(if (wcmatch (acet-dxf 0 (entget ent)) "*TEXT") (ssadd ent ssTex))
)
ssTex
)
;;; Trong truong hop so dinh bang so ten dinh
(defun Fil1 ( liv ssTe / i ptl resl k disl ptt)
(setq i 0 resl nil)
(repeat (length liv)
(setq ptl (nth i liv) disl nil)
(foreach ent (mapcar 'cadr (ssnamex ssTe))
(setq
ptt (acet-dxf 10 (entget ent))
disl (append disl (list (distance ptt ptl )))
)
)
(setq
k (vl-position (apply 'min disl) disl)
resl (append resl (list (list (nth i liv) (acet-dxf 1 (entget (ssname ssTe k))))))
i (+ i 1)
)
(ssdel (ssname ssTe k) ssTe)
)
resl
)
;;; Ghi vao file
(defun reco (lispo / fn fid i sdt ent pte x y z)
(setq
fn (getfiled "Ten tep de xuat toa do x y z" (getvar "dwgprefix") "txt" 1 )
i 0
sdt (length lispo)
fid (open fn "w")
)
(princ (strcat "Ten diem " "\t" " X " "\t" " Y " "\t" " Z " "\n") fid)
(repeat sdt
(setq ent (nth i lispo )
i (1+ i)
pte (cadr ent)
x (car (car ent))
y (cadr (car ent))
z (caddr (car ent))
)
(princ (strcat pte "\t" (rtos x) "\t" (rtos y) "\t" (rtos z) "\n") fid )
)
(close fid)
(princ)
)
;;; Lenh chinh
(defun c:tdpl ()
(setq lisVERTEX (ImpL) ssTEXT (ImpT))
(if (= (length lisVERTEX) (sslength ssTEXT)) (progn
(setq result (Fil1 lisVERTEX ssTEXT))
(reco result))
(alert (strcat "So dinh = " (rtos (length lisVERTEX) 2 0) " ; So ten dinh = " (rtos (sslength ssTEXT) 2 0 ) ". So dinh va so ten dinh phai bang nhau!"))
)
)

Mong mọi người cho ý kiến!

Đây là file kết quả của các đường lines trong file cad mà chủ topic đã upload lên:
http://www.cadviet.c...es/3/result.txt
  • 0
Share your knowledge. It is a way to achieve immortality !

***

PS: Nếu bài viết của mình có ích, xin hãy "Bình chọn cho bài viết này" nhé :D

#18 ketxu

ketxu

    Copier - Paster - Editor

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

Đã gửi 30 May 2011 - 10:40 PM

Mình thấy vẫn bình thường mà nhỉ, đủ 1 tab mà ^^



(defun ImpL (/ ent vet)
;(Prompt "\nNhap lines va polylines: ") ;Nen cho dong nay ra ngoai ham
;(setq lisvt nil) ;Bo dong nay
(foreach ent (mapcar 'entget (acet-ss-to-list(ssget'( (0 . "LINE,*POLYLINE"))))) ;rut lai nhu nay
(cond ;Dung cond thay the if se mach lac hon
((= (cdadr ent) "LINE" )(setq lisvt (vl-list* (acet-dxf 11 ent) (acet-dxf 10 ent) lisvt)))
(T (foreach vet (acet-geom-vertex-list (acet-dxf -1 ent)) (setq lisvt (vl-list* vet lisvt))))
)
)
(setq lisvt (Deldup (reverse lisvt)))
;lisvt => Bo dong nay, vi da co setq ngay tren no
)

;;; Nhap ten cua cac dinh
(defun ImpT (/ ent)
(ssget '((0 . "*TEXT"))) ; =>Ca ham tuong duong voi 1 dong => khong can ham nay
)
.....

  • 1

Thành viên nhóm CadMagic.
Mời bạn ghé thăm facebook nhóm - Page viết lisp theo yêu cầu  :
CAD MAGIC


#19 pdle

pdle

    biết lệnh mtext

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

Đã gửi 30 May 2011 - 10:53 PM

Mình thấy vẫn bình thường mà nhỉ, đủ 1 tab mà ^^

Anh ketxu xem cái file kết quả em upload lên chưa ạ? Chỗ của điểm C và D, tự nhiên Y bị hút về phía X, hay tại ở tọa độ X ở đấy ít chữ số hơn những điểm khác ạ?
  • 0
Share your knowledge. It is a way to achieve immortality !

***

PS: Nếu bài viết của mình có ích, xin hãy "Bình chọn cho bài viết này" nhé :D

#20 ketxu

ketxu

    Copier - Paster - Editor

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

Đã gửi 30 May 2011 - 11:03 PM

Hoàn toàn bình thường nè.Hay mình nhìn nhầm nhỉ ^^ Tab căn lề bên trái text nhé
Hình đã gửi
  • 0

Thành viên nhóm CadMagic.
Mời bạn ghé thăm facebook nhóm - Page viết lisp theo yêu cầu  :
CAD MAGIC