Chuyển đến nội dung
Diễn đàn CADViet
  • Thông báo

    • Nguyen Hoanh

      CADViet đã hoàn tất nâng cấp   14/09/2017

      Chào các bạn, CADViet đã hoàn tất việc nâng cấp lên phiên bản mới. Tất cả các chức năng đã hoạt động theo kỳ vọng của ban quản trị. Nếu có vấn đề gì cần phản hồi, các bản post ở đây nhé: Trân trọng, Nguyễn Hoành.
Đăng nhập để thực hiện theo  
ahdvip

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

Các bài được khuyến nghị

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ề...

  • Vote tăng 1

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
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ề...

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

Ý 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

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

Ý 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ề,...

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

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 đỡ.

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

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ề,..

  • Vote tăng 1

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

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.

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
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.

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

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!!!

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khá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.

  • Vote tăng 2

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

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

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khá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.

 

 

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.

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
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).

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

 

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

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

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ề...

bác có thể vert cái này về .txt cho em dc không ạ,hướng dẫn cho e cách làm vơí, cảm ơn báchttp://www.cadviet.com/upfiles/3/

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

Tạo một tài khoản hoặc đăng nhập để nhận xét

Bạn cần phải là một thành viên để lại một bình luận

Tạo tài khoản

Đăng ký một tài khoản mới trong cộng đồng của chúng tôi. Điều đó dễ mà.

Đăng ký tài khoản mới

Đăng nhập

Bạn có sẵn sàng để tạo một tài khoản ? Đăng nhập tại đây.

Đăng nhập ngay

Đăng nhập để thực hiện theo  

×