Đến nội dung


Hình ảnh
- - - - -

HỎI>Cách xuất tọa độ file cad sang text


  • Please log in to reply
22 replies to this topic

#1 ahdvip

ahdvip

    biết zoom

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

Đã gửi 02 December 2011 - 12:26 AM

Ai biết chỉ em với
  • 0

#2 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 02 December 2011 - 02:15 PM

Ai biết chỉ em với

Hề hề hề,
Có nhiều cách lắm. và bạn muốn cách chi??? File text của bạn là dạng *.txt hay *.csv hay *.xls ....
Cách đơn giản nhất là bạn cứ đọc nội dung của cad rồi gõ và file text như bạn muốn. Tuy rằng hơi phiền phức nhưng không phải là không thể được....
Hề hề hề...
  • 1
Chúc các quý Anh trên diễn đàn luôn khỏe, đẻ thêm được nhiều thứ để mót.

#3 ahdvip

ahdvip

    biết zoom

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

Đã gửi 02 December 2011 - 02:31 PM

sao lại chỉ cách thủ công vậy anh.
Em định đánh số thứ tự cho các đỉnh rồi xuất tọa độ các đỉnh đó ra .txt
  • 0

#4 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 02 December 2011 - 04:21 PM

sao lại chỉ cách thủ công vậy anh. Em định đánh số thứ tự cho các đỉnh rồi xuất tọa độ các đỉnh đó ra .txt

Thì bạn hỏi Ai biết chỉ em với thì mình trả lời vậy. Chứ bạn đâu có nói bạn không muốn làm thủ công đâu????
Muốn gì thì phải post bản vẽ cái bạn có và cái bạn cần lên chứ. Hỏi theo kiểu xuông vậy thì cũng chỉ được trả lời xuông vậy thôi, ai biết bạn cụ thể cần cái chi mà trả lời cho đúng được.
Bạn hãy rút kinh nghiệm về cách đặt vấn đề sao cho người đọc có thể hiểu và có thể giúp được. Còn như cứ cách hỏi như vầy sẽ chỉ có thể có kết quả kiểu nớ thôi.
Hề hề hề...
  • 0
Chúc các quý Anh trên diễn đàn luôn khỏe, đẻ thêm được nhiều thứ để mót.

#5 ahdvip

ahdvip

    biết zoom

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

Đã gửi 03 December 2011 - 12:30 PM

hi. Thanks anh đã nhắc. Em sẽ rút kinh nghiệm.
  • 0

#6 ahdvip

ahdvip

    biết zoom

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

Đã gửi 03 December 2011 - 12:58 PM

Ý của em là như thế này:
Trong bản vẽ có các đường line, pline, circle, rectangle(càng nhiều càng tốt) mình muốn xuất tọa độ của các đường đó ra file text, với pline thì xuất tọa độ các đỉnh nữa. Em muốn làm bằng lệnh chứ không phải làm thủ công. Nhờ anh em giúp đỡ nha!!!! Thanks
http://www.mediafire...9otohr09i6vwfhh

  • 0

#7 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 03 December 2011 - 02:43 PM

Ý của em là như thế này:
Trong bản vẽ có các đường line, pline, circle, rectangle(càng nhiều càng tốt) mình muốn xuất tọa độ của các đường đó ra file text, với pline thì xuất tọa độ các đỉnh nữa. Em muốn làm bằng lệnh chứ không phải làm thủ công. Nhờ anh em giúp đỡ nha!!!! Thanks
http://www.mediafire...9otohr09i6vwfhh

Hề hề hề,
Tiến bộ hơn nhiều rồi, nhưng mà vẫn chưa đạt. Bạn cần trình bày cho chuẩn hơn mới được.
Này nhé , cái khái niệm tọa độ của các đường của bạn được hiểu ra sao đây???? Mình chỉ hiểu được khái niệm tọa độ của các điểm và khái niệm phương trình của các đường chứ chưa biết tọa độ của các đường được xác định ra sao cả????
Như vậy với các pline, bạn vừa muốn có tọa độ của các đường pline này, vừa muốn có cả tọa độ của các đỉnh pline nữa hay sao??? Với pline chứa cung tròn hay cung elip thì bạn muốn lấy những gì vậy???
Càng nhiều càng tốt của bạn là nhiều loại đường hay là nhiều đường cùng loại????
Hề hề hề, chọc ngoáy bạn tí chơi, chớ có giận đấy nhé.
Hề hề hề,...
  • 0
Chúc các quý Anh trên diễn đàn luôn khỏe, đẻ thêm được nhiều thứ để mót.

#8 ahdvip

ahdvip

    biết zoom

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

Đã gửi 03 December 2011 - 04:30 PM

Hề hề hề,
Tiến bộ hơn nhiều rồi, nhưng mà vẫn chưa đạt. Bạn cần trình bày cho chuẩn hơn mới được.
Này nhé , cái khái niệm tọa độ của các đường của bạn được hiểu ra sao đây???? Mình chỉ hiểu được khái niệm tọa độ của các điểm và khái niệm phương trình của các đường chứ chưa biết tọa độ của các đường được xác định ra sao cả????
Như vậy với các pline, bạn vừa muốn có tọa độ của các đường pline này, vừa muốn có cả tọa độ của các đỉnh pline nữa hay sao??? Với pline chứa cung tròn hay cung elip thì bạn muốn lấy những gì vậy???
Càng nhiều càng tốt của bạn là nhiều loại đường hay là nhiều đường cùng loại????
Hề hề hề, chọc ngoáy bạn tí chơi, chớ có giận đấy nhé.
Hề hề hề,...

Ko sao cả, em thấy em nói chưa rõ thật.
ở đây đúng hơn là xuất ra thuộc tính của các đường + tọa độ .
Vd: line thì có tọa độ điểm đầu + điểm cuối
circle thì có tọa độ tâm + bán kính
còn pline của em thực ra là đường spline được em đùng lệnh c2p chuyển thành pline nên chỉ chứa n đoạn thẳng. Em thấy có lisp để đặt tên cho các đỉnh rồi xuất ra tọa độ các đỉnh đó nhưng em không thể download được các file .rar trên diễn đàn này được(chăc file .rar là bị lỗi hết anh ak), nên em hỏi để mọi người giúp đỡ.
  • 0

#9 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 04 December 2011 - 09:03 PM

Ko sao cả, em thấy em nói chưa rõ thật.
ở đây đúng hơn là xuất ra thuộc tính của các đường + tọa độ .
Vd: line thì có tọa độ điểm đầu + điểm cuối
circle thì có tọa độ tâm + bán kính
còn pline của em thực ra là đường spline được em đùng lệnh c2p chuyển thành pline nên chỉ chứa n đoạn thẳng. Em thấy có lisp để đặt tên cho các đỉnh rồi xuất ra tọa độ các đỉnh đó nhưng em không thể download được các file .rar trên diễn đàn này được(chăc file .rar là bị lỗi hết anh ak), nên em hỏi để mọi người giúp đỡ.

Hề hề hề,
Chả biết cái bạn cần có giống cái này không??? Song do bạn trình bày hơi ..... tiết kiệm nên mình chỉ có thể đoán mò, Trúng thì là hên xui, trật thì là cái để bạn có thể rút kinh nghiệm trình bày sao cho người đọc khỏi phải ..... mò.


(defun c:getpr (/ ssl fn fw els name lay col txt p1 p2 pt x y z x1 x2 y1 y2 z1 z2 bk )
(setq ssl (acet-ss-to-list (ssget))
fn (getfiled "Chon file de save" "" "txt" 1)
fw (open fn "w") )
(princ " Bang liet ke thuoc tinh co ban cua doi tuong \n " fw)
(foreach en ssl
(setq els (entget en)
name (cdr (assoc 0 els))
lay (cdr (assoc 8 els))
col (if (assoc 62 els) (rtos (cdr (assoc 62 els)) 2 0) (rtos (cdr (assoc 62 (tblsearch "layer" lay))) 2 0))
txt (strcat name "," lay "," col )
)
(cond
((= name "LINE") (setq p1 (cdr (assoc 10 els)) p2 (cdr (assoc 11 els))
x1 (rtos (car p1) 2 2) x2 (rtos (car p2) 2 2)
y1 (rtos (cadr p1) 2 2) y2 (rtos (cadr p2) 2 2)
z1 (rtos (caddr p1) 2 2) z2 (rtos (caddr p2) 2 2)
txt (strcat txt "," x1 "," y1 "," z1 "," x2 "," y2 "," z2) ) )
((= name "CIRCLE") (setq bk (rtos (cdr (assoc 40 els)) 2 2) pt (cdr (assoc 10 els))
x (rtos (car pt) 2 2) y (rtos (cadr pt) 2 2) z (rtos (caddr pt) 2 2)
txt (strcat txt "," bk "," x "," y "," z) ) )
((= name "LWPOLYLINE") (foreach el els
(if (= (car el) 10)
(progn
(setq z (rtos (cdr (assoc 38 els)) 2 2)
x (rtos (cadr el) 2 2) y (rtos (caddr el) 2 2)
txt (strcat txt "," x "," y "," z) )
)
)
) )
((= name "POLYLINE") (setq en (entnext en))
(while (/= (cdr (assoc 0 (entget en))) "SEQEND")
(setq x (rtos (cadr (assoc 10 (entget en))) 2 2)
y (rtos (caddr (assoc 10 (entget en))) 2 2)
z (rtos (cadddr (assoc 10 (entget en))) 2 2)
txt (strcat txt "," x "," y "," z)
en (entget en) ) ) )
(T nil)
)


(princ (strcat txt "\n") fw)
)
(close fw)
(princ)
)

Cái này mình cóp pi, nhặt mót của các bác trên diễn đàn, mỗi người một tí, rồi ghép lại để bạn xài tạm. Tuy chưa được ngay ngắn lắm, nhưng thôi thì của nhà trồng được, bạn hẵng xơi tạm cho đỡ nóng ruột nhé.
Hề hề hề,..
  • 1
Chúc các quý Anh trên diễn đàn luôn khỏe, đẻ thêm được nhiều thứ để mót.

#10 ahdvip

ahdvip

    biết zoom

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

Đã gửi 05 December 2011 - 01:26 AM

Hề hề hề,
Chả biết cái bạn cần có giống cái này không??? Song do bạn trình bày hơi ..... tiết kiệm nên mình chỉ có thể đoán mò, Trúng thì là hên xui, trật thì là cái để bạn có thể rút kinh nghiệm trình bày sao cho người đọc khỏi phải ..... mò.



(defun c:getpr (/ ssl fn fw els name lay col txt p1 p2 pt x y z x1 x2 y1 y2 z1 z2 bk )
(setq ssl (acet-ss-to-list (ssget))
fn (getfiled "Chon file de save" "" "txt" 1)
fw (open fn "w") )
(princ " Bang liet ke thuoc tinh co ban cua doi tuong \n " fw)
(foreach en ssl
(setq els (entget en)
name (cdr (assoc 0 els))
lay (cdr (assoc 8 els))
col (if (assoc 62 els) (rtos (cdr (assoc 62 els)) 2 0) (rtos (cdr (assoc 62 (tblsearch "layer" lay))) 2 0))
txt (strcat name "," lay "," col )
)
(cond
((= name "LINE") (setq p1 (cdr (assoc 10 els)) p2 (cdr (assoc 11 els))
x1 (rtos (car p1) 2 2) x2 (rtos (car p2) 2 2)
y1 (rtos (cadr p1) 2 2) y2 (rtos (cadr p2) 2 2)
z1 (rtos (caddr p1) 2 2) z2 (rtos (caddr p2) 2 2)
txt (strcat txt "," x1 "," y1 "," z1 "," x2 "," y2 "," z2) ) )
((= name "CIRCLE") (setq bk (rtos (cdr (assoc 40 els)) 2 2) pt (cdr (assoc 10 els))
x (rtos (car pt) 2 2) y (rtos (cadr pt) 2 2) z (rtos (caddr pt) 2 2)
txt (strcat txt "," bk "," x "," y "," z) ) )
((= name "LWPOLYLINE") (foreach el els
(if (= (car el) 10)
(progn
(setq z (rtos (cdr (assoc 38 els)) 2 2)
x (rtos (cadr el) 2 2) y (rtos (caddr el) 2 2)
txt (strcat txt "," x "," y "," z) )
)
)
) )
((= name "POLYLINE") (setq en (entnext en))
(while (/= (cdr (assoc 0 (entget en))) "SEQEND")
(setq x (rtos (cadr (assoc 10 (entget en))) 2 2)
y (rtos (caddr (assoc 10 (entget en))) 2 2)
z (rtos (cadddr (assoc 10 (entget en))) 2 2)
txt (strcat txt "," x "," y "," z)
en (entget en) ) ) )
(T nil)
)


(princ (strcat txt "\n") fw)
)
(close fw)
(princ)
)

Cái này mình cóp pi, nhặt mót của các bác trên diễn đàn, mỗi người một tí, rồi ghép lại để bạn xài tạm. Tuy chưa được ngay ngắn lắm, nhưng thôi thì của nhà trồng được, bạn hẵng xơi tạm cho đỡ nóng ruột nhé.
Hề hề hề,..

thanks anh trước đã.
Nhưng mà chưa đúng anh ơi.
hôm qua em viết bài để nói rõ hơn cho anh rồi nhưng mà sao lại bị xóa mất rồi. Hic
file cad vd : http://www.cadviet.c..._drawing1_1.dwg
trong đó có các đường line, cicle, spline(đường này em muốn nếu là đường spline thì dùng lệnh c2p để chuyển thành pline với n đoạn thẳng(đây là lisp c2p : http://www.cadviet.c...02600_c2p_1.lsp))

trong file cad ví dụ em đã dùng lệnh c2p thủ công rồi nha anh. Anh giúp em cứ gặp đường spline là tự động dùng lệnh đó.

em download được 1 cái lisp xuất tọa độ các đỉnh nhưng bảng tọa độ nằm trong cad luôn http://www.cadviet.c...102600_vc_1.lsp

file kết quả như mong muốn http://www.cadviet.c...600_ket_qua.doc
xuất ra .txt hoặc excel cũng được anh ak. thanks anh.
  • 0

#11 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 05 December 2011 - 02:19 PM

thanks anh trước đã. Nhưng mà chưa đúng anh ơi. hôm qua em viết bài để nói rõ hơn cho anh rồi nhưng mà sao lại bị xóa mất rồi. Hic file cad vd : http://www.cadviet.c..._drawing1_1.dwg trong đó có các đường line, cicle, spline(đường này em muốn nếu là đường spline thì dùng lệnh c2p để chuyển thành pline với n đoạn thẳng(đây là lisp c2p : http://www.cadviet.c...02600_c2p_1.lsp)) trong file cad ví dụ em đã dùng lệnh c2p thủ công rồi nha anh. Anh giúp em cứ gặp đường spline là tự động dùng lệnh đó. em download được 1 cái lisp xuất tọa độ các đỉnh nhưng bảng tọa độ nằm trong cad luôn http://www.cadviet.c...102600_vc_1.lsp file kết quả như mong muốn http://www.cadviet.c...600_ket_qua.doc xuất ra .txt hoặc excel cũng được anh ak. thanks anh.

Hề hề hề,
Bạn đã chạy cái lisp mình gửi chưa???, Chạy xong nó ra cái gì???? Cái đó bạn đọc có hiểu không??? Và cái đó cần sửa những gì????
Về cái file doc bạn gửi thì mình chưa rõ là lisp có thể xuất ra file *.doc như yêu cầu của bạn hay không nên không thể đảm bảo sẽ làm được lisp.
nếu là xuất ra file *.txt thì không thể làm thành cái bảng như bạn gửi.
Nếu là xuất ra file *.csv thì có thể sẽ được cái bảng gần giống với cái bảng bạn gửi.
Tuy nhiên mình thấy cái kết cấu bảng ấy của bạn không hợp lý nên không muốn làm Đề nghị bạn cân nhắc kỹ lưỡng cái kết cấu bảng ấy, sao cho nó nhất quán và hợp lý thì mới có thể làm lisp được. (Cùng một bảng nhưng chỗ thì xuất tọa độ x tọa độ y, chỗ thì xuất cả x và y vào một rọ hay cột tên đối tượng lại nhét tên các dỉnh vào, trong khi các đỉnh này chỉ là các dối tượng con của đối tượng chính. Như vậy khi đọc cái bảng người đọc sẽ hiểu ra sao????/)
Cái cột nếu có của bạn là cái cột để làm chi vậy, hay là cũng ghi chữ nếu có vào như cái bảng mẫu của bạn??? Với cái cột này thì nếu bạn chưa thể trả lời thì cũng chưa thể làm lisp cho bạn được.
Cái lisp c2p của bạn gửi là dùng để chuyển tất cả các đối tượng line, circle, lwpolyline, spline,arc, ellipse thành polyline chứ chả phảio chỉ có spline thôi đâu. Cái lisp này chuyển dựa trên cơ sở là chiều dài của mỗi phân đoạn nhập vào. Khi đó với spline đủ dài và khoảng cách bạn nhập vào đủ nhỏ thì số lượng điểm đỉnh sẽ là đủ lớn khiến cho cái bảng của bạn trở thành ........ khó chấp nhận.
cái lisp vc_1 bạn gửi không thể áp dụng trong trường hợp này vì nó được viết để là việc khác, hoàn toàn khác với cái yêu cầu bạn đưa ra.
Vậy nên rất mong bạn suy nghĩ nghiêm túc về những yêu cầu của mình để có được các yêu cầu hợp lý khả thi trước khi post yêu cầu.
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.

#12 ahdvip

ahdvip

    biết zoom

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

Đã gửi 05 December 2011 - 04:00 PM

Hề hề hề,
Bạn đã chạy cái lisp mình gửi chưa???, Chạy xong nó ra cái gì???? Cái đó bạn đọc có hiểu không??? Và cái đó cần sửa những gì????
Về cái file doc bạn gửi thì mình chưa rõ là lisp có thể xuất ra file *.doc như yêu cầu của bạn hay không nên không thể đảm bảo sẽ làm được lisp.
nếu là xuất ra file *.txt thì không thể làm thành cái bảng như bạn gửi.
Nếu là xuất ra file *.csv thì có thể sẽ được cái bảng gần giống với cái bảng bạn gửi.
Tuy nhiên mình thấy cái kết cấu bảng ấy của bạn không hợp lý nên không muốn làm Đề nghị bạn cân nhắc kỹ lưỡng cái kết cấu bảng ấy, sao cho nó nhất quán và hợp lý thì mới có thể làm lisp được. (Cùng một bảng nhưng chỗ thì xuất tọa độ x tọa độ y, chỗ thì xuất cả x và y vào một rọ hay cột tên đối tượng lại nhét tên các dỉnh vào, trong khi các đỉnh này chỉ là các dối tượng con của đối tượng chính. Như vậy khi đọc cái bảng người đọc sẽ hiểu ra sao????/)
Cái cột nếu có của bạn là cái cột để làm chi vậy, hay là cũng ghi chữ nếu có vào như cái bảng mẫu của bạn??? Với cái cột này thì nếu bạn chưa thể trả lời thì cũng chưa thể làm lisp cho bạn được.
Cái lisp c2p của bạn gửi là dùng để chuyển tất cả các đối tượng line, circle, lwpolyline, spline,arc, ellipse thành polyline chứ chả phảio chỉ có spline thôi đâu. Cái lisp này chuyển dựa trên cơ sở là chiều dài của mỗi phân đoạn nhập vào. Khi đó với spline đủ dài và khoảng cách bạn nhập vào đủ nhỏ thì số lượng điểm đỉnh sẽ là đủ lớn khiến cho cái bảng của bạn trở thành ........ khó chấp nhận.
cái lisp vc_1 bạn gửi không thể áp dụng trong trường hợp này vì nó được viết để là việc khác, hoàn toàn khác với cái yêu cầu bạn đưa ra.
Vậy nên rất mong bạn suy nghĩ nghiêm túc về những yêu cầu của mình để có được các yêu cầu hợp lý khả thi trước khi post yêu cầu.
Chúc bạn vui.

Em đã chạy lisp của anh gửi và cũng nắm được những điểm cần thiết trong file text.
(file kết quả: TÊN ĐƯỜNG, xxx,xxx, TỌA ĐỘ X1, TỌA ĐỘ Y1, TỌA ĐỘ Z1,…, TỌA ĐỘ Xn, TỌA ĐỘ Yn, TỌA ĐỘ Zn).
Các chỉnh sửa:
- Em muốn vẽ nhiều đường vào bản vẽ, lisp tự động nhân biết đâu là line, circle, spline.
- Nếu có đường spline thì tự động chia nhỏ spline thành nhiều đoạn thẳng với độ dài do mình nhập.
- Cuối cùng là xuất ra file text hoặc file excel đều được.
Về file kết quả thì không cần phải làm thành bảng cũng được anh ak.

Anh cứ làm sao cho có được cái cấu trúc như thế này thôi:
Line, tọa độ điểm đầu(x,y,z), tọa độ điểm cuối(x,y,z).
Cicle, tọa độ tâm(x,y,z), bán kính.
Pline, số đỉnh, tọa độ điểm 1(x,y,z), tọa độ điểm 2(x,y,z),…, tọa độ điểm n(x,y,z).

Xuất ra file excel cũng được nha anh.
(về pline thì em chỉ cần lấy tọa độ các đỉnh chứ không quan trọng đó là đỉnh chính hay phụ, miễn sao đúng thứ tự là được).
(em viết “nếu có” nghĩa là nếu trong bản cad mà có thì file kết quả phải có hàng đó- hàng đó để chú thích thôi)

THANKS ANH NHIỀU NHA!!!
  • 0

#13 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 05 December 2011 - 09:11 PM


Hề hề hề,
Như vậy, theo yêu cầu củ bạn thì cái lisp mình viết cơ bản đả đạt được, chỉ khác một vài điểm như sau:
1/- Lisp đã hoàn toàn tự động lấy các đối tượng trong vùng chọn của bạn. bạn có thể thêm vào báo nhiêu đường chăng nữa lisp vẫn chỉ chạy một lần là ra cái bảng thống kê cho bạn, với đầy đủ các đối tượng dạng đường (gồm line, lwpolyline, circle, polyline) còn các đường khác như arc ellipse, spline mình chưa viết nhưng co lẽ không quá khó khăn để làm với cấu trú tương tụ của lisp.
2/- Mình xuất riêng rẽ tọa độ x, y ,z, nay bạn muốn xuất cả cụm củng không thành vấn đề nhưng lưu ý bạn rằng không dùng cái dấu phẩy để ngăn cách các tọa độ x, y, z được vì như vậy khi xuất sang file csv nó sẽ hiểu là tách cột ra bạn ạ. Do vậy mình sẽ để một khoảng trắng ngăn cách giữa các tọa độ này, bạn có đồng ý không???
3/- Mình sẽ bổ sung phần xử lý các đường spline, arc và ellipse để bạn dùng thử.
Chịu khó chờ một chút nghen.

Của bạn đây:

(defun c:getpr (/ ssl fn fw els name lay col txt p p1 p2 pt x y z x1 x2 y1 y2 z1 z2 bk )
(setq ssl (acet-ss-to-list (ssget))
fn (getfiled "Chon file de save" "" "txt" 1)
fw (open fn "w") )
(princ " Bang liet ke thuoc tinh co ban cua doi tuong \n " fw)
(if (not d0) (setq d0 0.5))
(setq d1 (getreal "\n Nhap do dai cua moi phan doan Spline: "))
(if d1 (setq d0 d1) (setq d1 d0))
(foreach en ssl
(setq els (entget en)
name (cdr (assoc 0 els))
lay (cdr (assoc 8 els))
col (if (assoc 62 els) (rtos (cdr (assoc 62 els)) 2 0) (rtos (cdr (assoc 62 (tblsearch "layer" lay))) 2 0))
txt (strcat name "," lay "," col )
)
(cond
((= name "LINE") (setq p1 (cdr (assoc 10 els)) p2 (cdr (assoc 11 els))
x1 (rtos (car p1) 2 2) x2 (rtos (car p2) 2 2)
y1 (rtos (cadr p1) 2 2) y2 (rtos (cadr p2) 2 2)
z1 (rtos (caddr p1) 2 2) z2 (rtos (caddr p2) 2 2)
txt (strcat txt "," x1 " " y1 " " z1 "," x2 " " y2 " " z2) ) )
((= name "CIRCLE") (setq bk (rtos (cdr (assoc 40 els)) 2 2) pt (cdr (assoc 10 els))
x (rtos (car pt) 2 2) y (rtos (cadr pt) 2 2) z (rtos (caddr pt) 2 2)
txt (strcat txt "," x " " y " " z "," bk ) ) )
((= name "LWPOLYLINE") (foreach el els
(if (= (car el) 10)
(progn
(setq z (rtos (cdr (assoc 38 els)) 2 2)
x (rtos (cadr el) 2 2) y (rtos (caddr el) 2 2)
txt (strcat txt "," x " " y " " z) )
)
)
) )
((= name "POLYLINE") (setq en (entnext en))
(while (/= (cdr (assoc 0 (entget en))) "SEQEND")
(setq x (rtos (cadr (assoc 10 (entget en))) 2 2)
y (rtos (caddr (assoc 10 (entget en))) 2 2)
z (rtos (cadddr (assoc 10 (entget en))) 2 2)
txt (strcat txt "," x " " y " " z)
en (entget en) ) ) )
(( or (= name "SPLINE") (= name "ARC" ) (= name "ELLIPSE") )
(makepl en d1) (setq en1 (entlast) plst (acet-geom-vertex-list en1) )
(foreach p plst
(setq txt (strcat txt "," (rtos (car p) 2 2) " " (rtos (cadr p) 2 2) " " (rtos (caddr p) 2 2) ) )
)
)
(T nil)
)


(princ (strcat txt "\n") fw)
)
(close fw)
(princ)
)

;;;-------------------------------------------------------------
(defun makepl ( e d1 / ps pe d d2 p2) ;;;Make pline along curve e. Length of 1 segment = d1
(vl-load-com) ;;;Load Visual LISP extensions before use vlax-xxxx functions
(setq
ps (vlax-curve-getStartPoint e) ;;;Start point
pe (vlax-curve-getEndPoint e) ;;;End point
d (vlax-curve-getDistAtParam e (vlax-curve-getEndParam e)) ;;;Length of curve e
d2 d1 ;;;Init variable distance
)
(command "pline") ;;;Call pline command
(command ps) ;;;Start point
(while (<= d2 d) ;;;While not over end point pe
(setq p2 (vlax-curve-getPointAtDist e d2)) ;;;Variable point at d2 = length along curve
(command p2) ;;;Continue pline command from current point to p2
(setq d2 (+ d2 d1)) ;;;Increase distance d2 by d1
) ;;;End while
(command pe "") ;;;Pline to pe and finish command
)
;;;-------------------------------------------------------------
Chúc bạn vui.
Chú ý mình vẫn để hai giá trị chỉ thuộc tính laỷe và màu của đối tượng trong líp. Nếu bạn không thích thì có thể thoải mái xóa nó đi.
  • 2
Chúc các quý Anh trên diễn đàn luôn khỏe, đẻ thêm được nhiều thứ để mót.

#14 ketxu

ketxu

    Copier - Paster - Editor

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

Đã gửi 05 December 2011 - 09:40 PM

Bạn ahdvip chú ý là bạn không cần phải phóng to chứ, mọi người cũng vẫn đọc được!
  • 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 ahdvip

ahdvip

    biết zoom

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

Đã gửi 05 December 2011 - 11:21 PM

em sửa rồi nha anh. Mấy anh Mod hay xoáy em quá. hic .hihi
  • 0

#16 ketxu

ketxu

    Copier - Paster - Editor

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

Đã gửi 05 December 2011 - 11:26 PM

Việc bạn đang yêu cầu lisp ở box này đã là k đúng nội quy rồi, mà bác Bình nhiệt tình quá nên đành chịu vậy ^^
CHúc bạn sớm thành công :)
  • 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 ahdvip

ahdvip

    biết zoom

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

Đã gửi 05 December 2011 - 11:29 PM

Hề hề hề, Như vậy, theo yêu cầu củ bạn thì cái lisp mình viết cơ bản đả đạt được, chỉ khác một vài điểm như sau: 1/- Lisp đã hoàn toàn tự động lấy các đối tượng trong vùng chọn của bạn. bạn có thể thêm vào báo nhiêu đường chăng nữa lisp vẫn chỉ chạy một lần là ra cái bảng thống kê cho bạn, với đầy đủ các đối tượng dạng đường (gồm line, lwpolyline, circle, polyline) còn các đường khác như arc ellipse, spline mình chưa viết nhưng co lẽ không quá khó khăn để làm với cấu trú tương tụ của lisp. 2/- Mình xuất riêng rẽ tọa độ x, y ,z, nay bạn muốn xuất cả cụm củng không thành vấn đề nhưng lưu ý bạn rằng không dùng cái dấu phẩy để ngăn cách các tọa độ x, y, z được vì như vậy khi xuất sang file csv nó sẽ hiểu là tách cột ra bạn ạ. Do vậy mình sẽ để một khoảng trắng ngăn cách giữa các tọa độ này, bạn có đồng ý không??? 3/- Mình sẽ bổ sung phần xử lý các đường spline, arc và ellipse để bạn dùng thử. Chịu khó chờ một chút nghen. Của bạn đây:

 (defun c:getpr (/ ssl fn fw els name lay col txt p p1 p2 pt x y z x1 x2 y1 y2 z1 z2 bk ) (setq ssl (acet-ss-to-list (ssget)) fn (getfiled "Chon file de save" "" "txt" 1) fw (open fn "w") ) (princ " Bang liet ke thuoc tinh co ban cua doi tuong \n " fw) (if (not d0) (setq d0 0.5)) (setq d1 (getreal "\n Nhap do dai cua moi phan doan Spline: ")) (if d1 (setq d0 d1) (setq d1 d0)) (foreach en ssl (setq els (entget en) name (cdr (assoc 0 els)) lay (cdr (assoc 8 els)) col (if (assoc 62 els) (rtos (cdr (assoc 62 els)) 2 0) (rtos (cdr (assoc 62 (tblsearch "layer" lay))) 2 0)) txt (strcat name "," lay "," col ) ) (cond ((= name "LINE") (setq p1 (cdr (assoc 10 els)) p2 (cdr (assoc 11 els)) x1 (rtos (car p1) 2 2) x2 (rtos (car p2) 2 2) y1 (rtos (cadr p1) 2 2) y2 (rtos (cadr p2) 2 2) z1 (rtos (caddr p1) 2 2) z2 (rtos (caddr p2) 2 2) txt (strcat txt "," x1 " " y1 " " z1 "," x2 " " y2 " " z2) ) ) ((= name "CIRCLE") (setq bk (rtos (cdr (assoc 40 els)) 2 2) pt (cdr (assoc 10 els)) x (rtos (car pt) 2 2) y (rtos (cadr pt) 2 2) z (rtos (caddr pt) 2 2) txt (strcat txt "," x " " y " " z "," bk ) ) ) ((= name "LWPOLYLINE") (foreach el els (if (= (car el) 10) (progn (setq z (rtos (cdr (assoc 38 els)) 2 2) x (rtos (cadr el) 2 2) y (rtos (caddr el) 2 2) txt (strcat txt "," x " " y " " z) ) ) ) ) ) ((= name "POLYLINE") (setq en (entnext en)) (while (/= (cdr (assoc 0 (entget en))) "SEQEND") (setq x (rtos (cadr (assoc 10 (entget en))) 2 2) y (rtos (caddr (assoc 10 (entget en))) 2 2) z (rtos (cadddr (assoc 10 (entget en))) 2 2) txt (strcat txt "," x " " y " " z) en (entget en) ) ) ) (( or (= name "SPLINE") (= name "ARC" ) (= name "ELLIPSE") ) (makepl en d1) (setq en1 (entlast) plst (acet-geom-vertex-list en1) ) (foreach p plst (setq txt (strcat txt "," (rtos (car p) 2 2) " " (rtos (cadr p) 2 2) " " (rtos (caddr p) 2 2) ) ) ) ) (T nil) ) (princ (strcat txt "\n") fw) ) (close fw) (princ) ) ;;;------------------------------------------------------------- (defun makepl ( e d1 / ps pe d d2 p2) ;;;Make pline along curve e. Length of 1 segment = d1 (vl-load-com) ;;;Load Visual LISP extensions before use vlax-xxxx functions (setq ps (vlax-curve-getStartPoint e) ;;;Start point pe (vlax-curve-getEndPoint e) ;;;End point d (vlax-curve-getDistAtParam e (vlax-curve-getEndParam e)) ;;;Length of curve e d2 d1 ;;;Init variable distance ) (command "pline") ;;;Call pline command (command ps) ;;;Start point (while (<= d2 d) ;;;While not over end point pe (setq p2 (vlax-curve-getPointAtDist e d2)) ;;;Variable point at d2 = length along curve (command p2) ;;;Continue pline command from current point to p2 (setq d2 (+ d2 d1)) ;;;Increase distance d2 by d1 ) ;;;End while (command pe "") ;;;Pline to pe and finish command ) ;;;------------------------------------------------------------- 
Chúc bạn vui. Chú ý mình vẫn để hai giá trị chỉ thuộc tính laỷe và màu của đối tượng trong líp. Nếu bạn không thích thì có thể thoải mái xóa nó đi.



xem

Việc bạn đang yêu cầu lisp ở box này đã là k đúng nội quy rồi, mà bác Bình nhiệt tình quá nên đành chịu vậy ^^ CHúc bạn sớm thành công :)


hic. Khi mà em nói đến mấy cái lisp thì em cũng biết là không đúng nơi nên em đã viết một bài ở box khác để định chuyển qua đó nhưng bài đó lại bị xóa.
biết sai!!!!
có gì anh thông cảm, thanks anh nhiều.
  • 0

#18 ahdvip

ahdvip

    biết zoom

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

Đã gửi 05 December 2011 - 11:40 PM

Bạn ahdvip chú ý là bạn không cần phải phóng to chứ, mọi người cũng vẫn đọc được!

Hề hề hề, Như vậy, theo yêu cầu củ bạn thì cái lisp mình viết cơ bản đả đạt được, chỉ khác một vài điểm như sau: 1/- Lisp đã hoàn toàn tự động lấy các đối tượng trong vùng chọn của bạn. bạn có thể thêm vào báo nhiêu đường chăng nữa lisp vẫn chỉ chạy một lần là ra cái bảng thống kê cho bạn, với đầy đủ các đối tượng dạng đường (gồm line, lwpolyline, circle, polyline) còn các đường khác như arc ellipse, spline mình chưa viết nhưng co lẽ không quá khó khăn để làm với cấu trú tương tụ của lisp. 2/- Mình xuất riêng rẽ tọa độ x, y ,z, nay bạn muốn xuất cả cụm củng không thành vấn đề nhưng lưu ý bạn rằng không dùng cái dấu phẩy để ngăn cách các tọa độ x, y, z được vì như vậy khi xuất sang file csv nó sẽ hiểu là tách cột ra bạn ạ. Do vậy mình sẽ để một khoảng trắng ngăn cách giữa các tọa độ này, bạn có đồng ý không??? 3/- Mình sẽ bổ sung phần xử lý các đường spline, arc và ellipse để bạn dùng thử. Chịu khó chờ một chút nghen. Của bạn đây:

 (defun c:getpr (/ ssl fn fw els name lay col txt p p1 p2 pt x y z x1 x2 y1 y2 z1 z2 bk ) (setq ssl (acet-ss-to-list (ssget)) fn (getfiled "Chon file de save" "" "txt" 1) fw (open fn "w") ) (princ " Bang liet ke thuoc tinh co ban cua doi tuong \n " fw) (if (not d0) (setq d0 0.5)) (setq d1 (getreal "\n Nhap do dai cua moi phan doan Spline: ")) (if d1 (setq d0 d1) (setq d1 d0)) (foreach en ssl (setq els (entget en) name (cdr (assoc 0 els)) lay (cdr (assoc 8 els)) col (if (assoc 62 els) (rtos (cdr (assoc 62 els)) 2 0) (rtos (cdr (assoc 62 (tblsearch "layer" lay))) 2 0)) txt (strcat name "," lay "," col ) ) (cond ((= name "LINE") (setq p1 (cdr (assoc 10 els)) p2 (cdr (assoc 11 els)) x1 (rtos (car p1) 2 2) x2 (rtos (car p2) 2 2) y1 (rtos (cadr p1) 2 2) y2 (rtos (cadr p2) 2 2) z1 (rtos (caddr p1) 2 2) z2 (rtos (caddr p2) 2 2) txt (strcat txt "," x1 " " y1 " " z1 "," x2 " " y2 " " z2) ) ) ((= name "CIRCLE") (setq bk (rtos (cdr (assoc 40 els)) 2 2) pt (cdr (assoc 10 els)) x (rtos (car pt) 2 2) y (rtos (cadr pt) 2 2) z (rtos (caddr pt) 2 2) txt (strcat txt "," x " " y " " z "," bk ) ) ) ((= name "LWPOLYLINE") (foreach el els (if (= (car el) 10) (progn (setq z (rtos (cdr (assoc 38 els)) 2 2) x (rtos (cadr el) 2 2) y (rtos (caddr el) 2 2) txt (strcat txt "," x " " y " " z) ) ) ) ) ) ((= name "POLYLINE") (setq en (entnext en)) (while (/= (cdr (assoc 0 (entget en))) "SEQEND") (setq x (rtos (cadr (assoc 10 (entget en))) 2 2) y (rtos (caddr (assoc 10 (entget en))) 2 2) z (rtos (cadddr (assoc 10 (entget en))) 2 2) txt (strcat txt "," x " " y " " z) en (entget en) ) ) ) (( or (= name "SPLINE") (= name "ARC" ) (= name "ELLIPSE") ) (makepl en d1) (setq en1 (entlast) plst (acet-geom-vertex-list en1) ) (foreach p plst (setq txt (strcat txt "," (rtos (car p) 2 2) " " (rtos (cadr p) 2 2) " " (rtos (caddr p) 2 2) ) ) ) ) (T nil) ) (princ (strcat txt "\n") fw) ) (close fw) (princ) ) ;;;------------------------------------------------------------- (defun makepl ( e d1 / ps pe d d2 p2) ;;;Make pline along curve e. Length of 1 segment = d1 (vl-load-com) ;;;Load Visual LISP extensions before use vlax-xxxx functions (setq ps (vlax-curve-getStartPoint e) ;;;Start point pe (vlax-curve-getEndPoint e) ;;;End point d (vlax-curve-getDistAtParam e (vlax-curve-getEndParam e)) ;;;Length of curve e d2 d1 ;;;Init variable distance ) (command "pline") ;;;Call pline command (command ps) ;;;Start point (while (<= d2 d) ;;;While not over end point pe (setq p2 (vlax-curve-getPointAtDist e d2)) ;;;Variable point at d2 = length along curve (command p2) ;;;Continue pline command from current point to p2 (setq d2 (+ d2 d1)) ;;;Increase distance d2 by d1 ) ;;;End while (command pe "") ;;;Pline to pe and finish command ) ;;;------------------------------------------------------------- 
Chúc bạn vui. Chú ý mình vẫn để hai giá trị chỉ thuộc tính laỷe và màu của đối tượng trong líp. Nếu bạn không thích thì có thể thoải mái xóa nó đi.


Chắc làm ảnh hưởng tới anh rồi. Box này mà lại hỏi đến mấy cái lisp, sai quy đinh rồi. Anh giúp đỡ nhiều quá, thanks anh nhiều.


Được vậy thì tốt quá, nếu không thì xuất file với cấu trúc như vậy cũng được nha anh. Tối nay dùng thử lisp này vui quá, đúng yêu cầu lun.
Ak, nếu anh thêm elip thì anh cứ xem elip như đường spline nha, cứ là elip hay spline thì anh cứ tách thành nhiều đoạn thẳng lun(ngoại trừ đường thẳng và đường tròn là không thôi).
  • 0

#19 trinhngoctri

trinhngoctri

    biết vẽ pline

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

Đã gửi 04 August 2014 - 03:01 PM

Hề hề hề,
Chả biết cái bạn cần có giống cái này không??? Song do bạn trình bày hơi ..... tiết kiệm nên mình chỉ có thể đoán mò, Trúng thì là hên xui, trật thì là cái để bạn có thể rút kinh nghiệm trình bày sao cho người đọc khỏi phải ..... mò.

 
(defun c:getpr (/ ssl fn fw els name lay col txt p1 p2 pt x y z x1 x2 y1 y2 z1 z2 bk )
(setq ssl (acet-ss-to-list (ssget))
          fn (getfiled "Chon file de save" "" "txt" 1)
          fw (open fn "w") )
(princ " Bang liet ke thuoc tinh co ban cua doi tuong \n " fw)
(foreach en ssl
       (setq els (entget en)
                 name (cdr (assoc 0 els))
                 lay (cdr (assoc 8 els))
                 col (if (assoc 62 els) (rtos (cdr (assoc 62 els)) 2 0) (rtos (cdr (assoc 62 (tblsearch "layer" lay))) 2 0))
                 txt (strcat name "," lay "," col )
        ) 
       (cond
               ((= name "LINE") (setq p1 (cdr (assoc 10 els))  p2 (cdr (assoc 11 els))
                                                       x1 (rtos (car p1) 2 2)  x2 (rtos (car p2) 2 2)
                                                       y1 (rtos (cadr p1) 2 2)  y2 (rtos (cadr p2) 2 2)
                                                       z1 (rtos (caddr p1) 2 2)  z2 (rtos (caddr p2) 2 2)
                                                      txt (strcat txt "," x1 "," y1 "," z1 "," x2 "," y2 "," z2) ) )
               ((= name "CIRCLE") (setq bk (rtos (cdr (assoc 40 els)) 2 2)  pt (cdr (assoc 10 els))
                                                      x (rtos (car pt) 2 2) y (rtos (cadr pt) 2 2) z (rtos (caddr pt) 2 2)
                                                      txt (strcat txt ","  bk  "," x "," y "," z) ) )
               ((= name "LWPOLYLINE") (foreach el els
                                                                    (if (= (car el) 10)
                                                                        (progn
                                                                              (setq  z (rtos (cdr (assoc 38 els)) 2 2)
                                                                                         x (rtos (cadr el) 2 2) y (rtos (caddr el) 2 2)
                                                                                        txt (strcat txt ","  x  ","  y  ","  z) )                                                                              
                                                                        )
                                                                     )
                                                                  ) )
              ((= name "POLYLINE") (setq en (entnext en))
                                                      (while (/= (cdr (assoc 0 (entget en))) "SEQEND")
                                                                 (setq x (rtos (cadr (assoc 10 (entget en))) 2 2)
                                                                           y (rtos (caddr (assoc 10 (entget en))) 2 2)
                                                                           z (rtos (cadddr (assoc 10 (entget en))) 2 2)
                                                                          txt (strcat txt ","  x  ","  y  ","  z)
                                                                          en (entget en) ) ) )
              (T nil)
        )
               
        
        (princ (strcat txt "\n") fw)
)
(close fw)
(princ)
)
      
Cái này mình cóp pi, nhặt mót của các bác trên diễn đàn, mỗi người một tí, rồi ghép lại để bạn xài tạm. Tuy chưa được ngay ngắn lắm, nhưng thôi thì của nhà trồng được, bạn hẵng xơi tạm cho đỡ nóng ruột nhé.
Hề hề hề,..

cái lisp này mình dùng ổn rồi nhưng mình cần 3 số lẻ thì làm thế nào hả các bạn


  • 0

#20 tien2005

tien2005

    biết lệnh properties

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

Đã gửi 04 August 2014 - 04:13 PM

@trinhngoctri Bạn tìm các dòng lệnh (rtos ( ....) 2 2) rồi đổi lại thành (rtos ( ....) 2 3)


  • 0