Đến nội dung


Hình ảnh
- - - - -

chuyển số liệu text từ cad sang excell


  • Please log in to reply
57 replies to this topic

#41 tientracdia

tientracdia

    biết lệnh scale

  • Members
  • PipPipPip
  • 147 Bài viết
Điểm đánh giá: -11 (hơi kém)

Đã gửi 17 December 2012 - 07:58 AM

Cám ơn bạn phanthangbinh, lisp của bạn viết xuất ra excel rất tuyệt.
Nhưng khi thành phần trong vòng tròn có thay đổi ( Không có khồi lượng đào hay đấp bị xóa đi ) , như trường hợp A, thì ô tính thể tích chung xuất ra excel không đúng vào cột . Có khả năng lisp chưa kiểm soát nội dung lop trong vòng tròn xuất đúng vào cột trên excel.
Với trường hợp B chỉ có ô vòng tròn dạng thể hiện 1 nội dung đào, đấp thì lisp xuất không đúng vào vị trí cột
rất mong được bạn giúp
  • 0

#42 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 17 December 2012 - 12:20 PM

Cám ơn bạn phanthangbinh, lisp của bạn viết xuất ra excel rất tuyệt.
Nhưng khi thành phần trong vòng tròn có thay đổi ( Không có khồi lượng đào hay đấp bị xóa đi ) , như trường hợp A, thì ô tính thể tích chung xuất ra excel không đúng vào cột . Có khả năng lisp chưa kiểm soát nội dung lop trong vòng tròn xuất đúng vào cột trên excel.
Với trường hợp B chỉ có ô vòng tròn dạng thể hiện 1 nội dung đào, đấp thì lisp xuất không đúng vào vị trí cột
rất mong được bạn giúp
http://www.cadviet.c..._ra_excel_1.rar

Hề hề hề,
Lỗi là do bạn không đưa các trường hợp đó vào bản vẽ nên mình không biết mà xử lý. Mà hình như bạn cũng không nắm vững nội dung bạn cần gì. Ngay cả cái bản vẽ bạn mới post sau này, ở cái ví dụ về các trường hợp B thì cả hai ô thể tích đều là lớp Main_V_Dap chứ nào có thấy Main_V_Dao.
Mình đã sửa lại lisp theo như mình hiểu là số liệu ở lớp nào thì vào cột tên lớp đó. Còn việc xuất số liệu sai do bạn nhập liệu trên bản vẽ sai thì mình không sửa được. Lisp đã sửa :
http://www.cadviet.c...ext2excel_1.lsp
  • 1
Chúc các quý Anh trên diễn đàn luôn khỏe, đẻ thêm được nhiều thứ để mót.

#43 tientracdia

tientracdia

    biết lệnh scale

  • Members
  • PipPipPip
  • 147 Bài viết
Điểm đánh giá: -11 (hơi kém)

Đã gửi 17 December 2012 - 06:06 PM

Xin lỗi Bạn nha,Khi thấy bạn viết lisp trên.... mình rất mừng đúng với mình đang mong muốn .... và yêu cầu bạn nhưng quá gấp, lisp này thì quá tuyệt.
Mong được bạn chỉ giáo ý nghĩa các đoạn lệnh trên.
  • 0

#44 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 18 December 2012 - 11:21 AM

Xin lỗi Bạn nha,Khi thấy bạn viết lisp trên.... mình rất mừng đúng với mình đang mong muốn .... và yêu cầu bạn nhưng quá gấp, lisp này thì quá tuyệt.
Mong được bạn chỉ giáo ý nghĩa các đoạn lệnh trên.


Xin lỗi Bạn nha,Khi thấy bạn viết lisp trên.... mình rất mừng đúng với mình đang mong muốn .... và yêu cầu bạn nhưng quá gấp, lisp này thì quá tuyệt.
Mong được bạn chỉ giáo ý nghĩa các đoạn lệnh trên.

Hề hề hề,
Y nghĩa của các dòng code mà mình đã viết thực ra chỉ là cái mình mót được từ mọi người ở trên diễn đàn chứ có phải cao siêu gì đâu. Chỉ là bạn cần dành chút thời gian để tìm hiểu về lisp và làm thử vài lần sẽ quen thôi mà.
Cụ thể như sau:
1/- (defun c:xt2ex (/ oldos sslst tlst filename f sslst1 C1 C2 C3 C4 C5 C6 C7 C8 )
Khai báo tên lệnh lisp, đặt các biến sử dụng là biến cục bộ để nó bị triệt tiêu sau khi chạy lisp
2/- (vl-load-com) load các hàm vl- và các lệnh sử dụng trong express tool
3/- (command "undo" "be") đánh dấu nơi bắt đầu đặt lệnh undo
4/- (setq oldos (getvar "osmode")) Lấy giá trị biến hệ thống osmode hiện hành
5/- (setvar "osmode" 0) Đặt biến hệ thống osmode về 0 để tránh truy bắt nhầm điểm.
6/- (setq sslst (acet-ss-to-list (ssget (list (cons 0 "circle") (cons 62 63) (cons 8 "main_circleKQ"))))
tlst "" )
Đặt tên biến sslst là một danh sách tên các đối tượng vòng tròn được chọn bởi lệnh ssget. Về cú pháp và chức năng của lệnh này bạn tham khảo trong Help Developer của CAD,
Đặt biến tlst là một chuỗi trống (không chứa ký tự nào)
7/- (setq filename (getfiled "Select a File" "" "csv" 1)) Đặt biến filename là tên file được chọn từ hộp thoại của lệnh Getfiled. Xem thêm Help developer để hiểu về lệnh này.
8/- (setq f (open filename "w")) Mở file có filename đã chọn để ghi nội dung mới vào file và lưu biến thao tác này là f.
9/- (write-line "Main_STT,Main_H_Dap,Main_S_Dap,Main_V_Dap,Main_H_Dao,Main_S_Dao,Main_V_Dao,Main_S_O," f)
Ghi một dòng text vào file đã mở, dấu , dùng ngăn cách giữa các cột trong file
10/- (foreach e sslst
Mở hàm foreach để lặp qua tất cả các đối tượng có trong danh sách các ename đã được chọn ở phía trên (biến sslst)
Các nhiệm vụ cần làm trong mỗi lần lặp được liệt kê như sau:
a/- (setq sslst1 (acet-ss-to-list (ssget "w" (list (- (cadr (assoc 10 (entget e))) (cdr (assoc 40 (entget e))))
(- (caddr (assoc 10 (entget e))) (cdr (assoc 40 (entget e))))
)
(list (+ (cadr (assoc 10 (entget e))) (cdr (assoc 40 (entget e))))
(+ (caddr (assoc 10 (entget e))) (cdr (assoc 40 (entget e))))
)
(list (cons 0 "text")) )) )
Lấy một danh sách các đối tượng text có trong mỗi vòng tròn. Tham khảo thêm về lệnh ssget với tham số "w" trong help developer.
b/- (setq C1 nil C2 nil C3 nil C4 nil C5 nil C6 nil C7 nil C8 nil), Đặt các biến C1 ..... C8 về giá trị nil (chả có gì)
c,d,e,f,g,h,i,k/- (foreach en sslst1
(if (= (cdr (assoc 8 (entget en))) "Main_STT")
(setq C1 (cdr (assoc 1 (entget en))) )
)
)
Tạo 8 vòng lặp qua các đối tượng text được chọn trong danh sách sslst1 để lấy giá trị của 8 biến C1 ... C8 theo tên các lớp của mỗi text
l/- (setq tlst (strcat (if C1 C1 " ") (chr 44) (if C2 C2 " ") (chr 44) (if C3 C3 " ") (chr 44) (if C4 C4 " ") (chr 44)
(if C5 C5 " ") (chr 44) (if C6 C6 " ") (chr 44) (if C7 C7 " ") (chr 44) (if C8 C8 " ") (chr 44) ))
Đặt biến tlst là một chuỗi gồm giá trị các biến từ C1 đến C8 với dấu ngăn cách cột là ","
m/- (write-line tlst f) Ghi giá trị chuổi này vào file đã mở f ở trên
n/- (setq tlst "") Trả biến tlst về chuỗi trống.
11/- ) Kết thúc vòng lặp foreach.
12/- (close f) Đóng file f đã mở phía trên.
13/- (setvar "osmode" oldos) Trả biến hệ thống osmode về giá trị ban đầu trước khi chạy lisp
14/- (command "undo" "e") Đánh dấu nơi kết thúc của lệnh undo. Điều này để giúp người dùng khi cần có thể khôi phục nhanh bản vẽ đã bị lisp làm thay đổi.
15/- (princ) Xóa sạch biến cuối cùng do lisp tạo ra và trả về nil. Thoát êm
16/- ) Kết thúc lệnh lisp (defun c:xt2ex .... đã bắt đầu phía trên.

Nói thì như vậy nhưng thực tế để vận dụng tốt các hàm lisp phía trên cũng cần có thời gian để đọc và thực hành. Bạn chớ có sợ nó rậm rì rắc rối, Bước đấu có thể hơi ngại ngùng như khi gặp gái trinh, nhưng cứ thọc vào bạn sẽ thấy khoái dần và nổi hứng với nó không chừng. Cứ từ từ mà vọc. Dục tốc bất đạt. Mưa dần thấm đất, rồi sẽ tời lúc nó nhũn ra như con chi chi, bạn tha hồ mà thọc mà ngoáy, mà mấn mà mò, chả còn biết sợ là gì nữa đâu.

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.

#45 tientracdia

tientracdia

    biết lệnh scale

  • Members
  • PipPipPip
  • 147 Bài viết
Điểm đánh giá: -11 (hơi kém)

Đã gửi 18 December 2012 - 05:20 PM

cám ơn bạn, Nếu mình muốn lấy nội dung trong đa giác ra file excel thì có thể thay
6/- (setq sslst (acet-ss-to-list (ssget (list (cons 0 "circle") (cons 62 63) (cons 8 "main_circleKQ"))))
tlst "" ) bằng polyline được không bạn
  • 0

#46 Doan Van Ha

Doan Van Ha

    biết lệnh adcenter

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 5448 Bài viết
Điểm đánh giá: 2624 (tuyệt vời)

Đã gửi 18 December 2012 - 06:04 PM

LWPOLYLINE bạn ạ.
  • 0

* Chỉ nên yêu cầu Lisp khi bạn làm việc đó mất cả ngày nhưng họ chỉ viết 1 giờ. Đừng nêu yêu cầu Lisp khi bạn chỉ làm 1 giờ nhưng bắt họ phải mất cả ngày.

* Nhờ viết lisp cũng như đi khám bệnh. Chỉ gởi căn cước và than sắp chết thì không bác sỹ nào cứu sống được.


#47 tientracdia

tientracdia

    biết lệnh scale

  • Members
  • PipPipPip
  • 147 Bài viết
Điểm đánh giá: -11 (hơi kém)

Đã gửi 18 December 2012 - 07:01 PM

Mình chỉnh theo hướng dẫn của bạn, không xuất ra file cvs được.
Mong bạn giúp
http://www.cadviet.c...4381_ycau_3.rar
  • 0

#48 Doan Van Ha

Doan Van Ha

    biết lệnh adcenter

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 5448 Bài viết
Điểm đánh giá: 2624 (tuyệt vời)

Đã gửi 18 December 2012 - 07:59 PM

Chú ý là các đa giác phải cùng màu và cùng lớp với circle nhé.


(defun c:xt2ex (/ oldos sslst tlst filename f sslst1 C1 C2 C3 C4 C5 C6 C7 C8 )
(vl-load-com)
(command "undo" "be")
(setq oldos (getvar "osmode"))
(setvar "osmode" 0)
(setq sslst (acet-ss-to-list (ssget (list (cons 0 "LWPOLYLINE") (cons 62 63) (cons 8 "Main_tach_o"))))
tlst "" )
(setq filename (getfiled "Select a File" "" "csv" 1))
(setq f (open filename "w"))
(write-line "Main_STT,Main_H_Dap,Main_S_Dap,Main_V_Dap,Main_H_Dao,Main_S_Dao,Main_V_Dao,Main_S_O," f)
(foreach e sslst
(setq sslst1 (acet-ss-to-list (ssget "wp" (acet-geom-vertex-list e)
(list (cons 0 "text")) )) )
(setq C1 nil C2 nil C3 nil C4 nil C5 nil C6 nil C7 nil C8 nil)
(foreach en sslst1
(if (= (cdr (assoc 8 (entget en))) "Main_STT")
(setq C1 (cdr (assoc 1 (entget en))) )
)
)
(foreach en sslst1
(if (= (cdr (assoc 8 (entget en))) "Main_H_Dap")
(setq C2 (cdr (assoc 1 (entget en))) )
)
)
(foreach en sslst1
(if (= (cdr (assoc 8 (entget en))) "Main_S_Dap")
(setq C3 (cdr (assoc 1 (entget en))) )
)
)
(foreach en sslst1
(if (= (cdr (assoc 8 (entget en))) "Main_V_Dap")
(setq C4 (cdr (assoc 1 (entget en))) )
)
)
(foreach en sslst1
(if (= (cdr (assoc 8 (entget en))) "Main_H_Dao")
(setq C5 (cdr (assoc 1 (entget en))) )
)
)
(foreach en sslst1
(if (= (cdr (assoc 8 (entget en))) "Main_S_Dao")
(setq C6 (cdr (assoc 1 (entget en))) )
)
)
(foreach en sslst1
(if (= (cdr (assoc 8 (entget en))) "Main_V_Dao")
(setq C7 (cdr (assoc 1 (entget en))) )
)
)

(foreach en sslst1
(if (= (cdr (assoc 8 (entget en))) "Main_S_O")
(setq C8 (cdr (assoc 1 (entget en))) )
)
)
(setq tlst (strcat (if C1 C1 " ") (chr 44) (if C2 C2 " ") (chr 44) (if C3 C3 " ") (chr 44) (if C4 C4 " ") (chr 44)
(if C5 C5 " ") (chr 44) (if C6 C6 " ") (chr 44) (if C7 C7 " ") (chr 44) (if C8 C8 " ") (chr 44) ))
(write-line tlst f)
(setq tlst "")
)
(close f)
(setvar "osmode" oldos)
(command "undo" "e")
(princ)
)

  • 0

* Chỉ nên yêu cầu Lisp khi bạn làm việc đó mất cả ngày nhưng họ chỉ viết 1 giờ. Đừng nêu yêu cầu Lisp khi bạn chỉ làm 1 giờ nhưng bắt họ phải mất cả ngày.

* Nhờ viết lisp cũng như đi khám bệnh. Chỉ gởi căn cước và than sắp chết thì không bác sỹ nào cứu sống được.


#49 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 18 December 2012 - 08:55 PM

Mình chỉnh theo hướng dẫn của bạn, không xuất ra file cvs được.
Mong bạn giúp
http://www.cadviet.c...4381_ycau_3.rar

Hề hề hề,
Bạn sửa chỗ đó mới chỉ là để chọn được polyline.
Tuy nhiên để chọn các text chứa trong lwpolyline đó thì bạn lại không dùng hàm ssget như mình đã dùng được vì lúc này các giá trị (assoc 10 (entget e)) và (assoc 40 (entget e)) không còn đúng ý nghĩa như đối với vòng tròn nữa.
Bác ĐoanVanHa đã sửa lại giùm bạn rồi đó. bạn có thể tham khảo và tìm hiểu kỹ hơn về hàm ssget trong Help Developer để hiểu được cách sử dụng của nó.
  • 0
Chúc các quý Anh trên diễn đàn luôn khỏe, đẻ thêm được nhiều thứ để mót.

#50 tientracdia

tientracdia

    biết lệnh scale

  • Members
  • PipPipPip
  • 147 Bài viết
Điểm đánh giá: -11 (hơi kém)

Đã gửi 18 December 2012 - 09:31 PM

Chú ý là các đa giác phải cùng màu và cùng lớp với circle nhé.



(defun c:xt2ex (/ oldos sslst tlst filename f sslst1 C1 C2 C3 C4 C5 C6 C7 C8 )
(vl-load-com)
(command "undo" "be")
(setq oldos (getvar "osmode"))
(setvar "osmode" 0)
(setq sslst (acet-ss-to-list (ssget (list (cons 0 "LWPOLYLINE") (cons 62 63) (cons 8 "Main_tach_o"))))
tlst "" )
(setq filename (getfiled "Select a File" "" "csv" 1))
(setq f (open filename "w"))
(write-line "Main_STT,Main_H_Dap,Main_S_Dap,Main_V_Dap,Main_H_Dao,Main_S_Dao,Main_V_Dao,Main_S_O," f)
(foreach e sslst
(setq sslst1 (acet-ss-to-list (ssget "wp" (acet-geom-vertex-list e)
(list (cons 0 "text")) )) )
(setq C1 nil C2 nil C3 nil C4 nil C5 nil C6 nil C7 nil C8 nil)
(foreach en sslst1
(if (= (cdr (assoc 8 (entget en))) "Main_STT")
(setq C1 (cdr (assoc 1 (entget en))) )
)
)
(foreach en sslst1
(if (= (cdr (assoc 8 (entget en))) "Main_H_Dap")
(setq C2 (cdr (assoc 1 (entget en))) )
)
)
(foreach en sslst1
(if (= (cdr (assoc 8 (entget en))) "Main_S_Dap")
(setq C3 (cdr (assoc 1 (entget en))) )
)
)
(foreach en sslst1
(if (= (cdr (assoc 8 (entget en))) "Main_V_Dap")
(setq C4 (cdr (assoc 1 (entget en))) )
)
)
(foreach en sslst1
(if (= (cdr (assoc 8 (entget en))) "Main_H_Dao")
(setq C5 (cdr (assoc 1 (entget en))) )
)
)
(foreach en sslst1
(if (= (cdr (assoc 8 (entget en))) "Main_S_Dao")
(setq C6 (cdr (assoc 1 (entget en))) )
)
)
(foreach en sslst1
(if (= (cdr (assoc 8 (entget en))) "Main_V_Dao")
(setq C7 (cdr (assoc 1 (entget en))) )
)
)

(foreach en sslst1
(if (= (cdr (assoc 8 (entget en))) "Main_S_O")
(setq C8 (cdr (assoc 1 (entget en))) )
)
)
(setq tlst (strcat (if C1 C1 " ") (chr 44) (if C2 C2 " ") (chr 44) (if C3 C3 " ") (chr 44) (if C4 C4 " ") (chr 44)
(if C5 C5 " ") (chr 44) (if C6 C6 " ") (chr 44) (if C7 C7 " ") (chr 44) (if C8 C8 " ") (chr 44) ))
(write-line tlst f)
(setq tlst "")
)
(close f)
(setvar "osmode" oldos)
(command "undo" "e")
(princ)
)

Vẩn không xuất ra cvs được bạn ơi
Nhưng tại sao mình lại chuyển cùng màu và cùng lớp vậy bạn ?
khi đã thay đổi
(setq sslst (acet-ss-to-list (ssget (list (cons 0 "LWPOLYLINE") (cons 62 63) (cons 8 "Main_tach_o"))))
tlst "" )
http://www.cadviet.c...14381_ycau4.dwg
  • 0

#51 Doan Van Ha

Doan Van Ha

    biết lệnh adcenter

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 5448 Bài viết
Điểm đánh giá: 2624 (tuyệt vời)

Đã gửi 18 December 2012 - 09:35 PM

Cái này để bác PTB xem, sửa và giải thích luôn thể, vì bác ấy đang online.
  • 0

* Chỉ nên yêu cầu Lisp khi bạn làm việc đó mất cả ngày nhưng họ chỉ viết 1 giờ. Đừng nêu yêu cầu Lisp khi bạn chỉ làm 1 giờ nhưng bắt họ phải mất cả ngày.

* Nhờ viết lisp cũng như đi khám bệnh. Chỉ gởi căn cước và than sắp chết thì không bác sỹ nào cứu sống được.


#52 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 19 December 2012 - 12:51 AM

Cái này để bác PTB xem, sửa và giải thích luôn thể, vì bác ấy đang online.

Hề hề hề,
Bác này trốn việc nhanh thế. Thực ra thì việc trả lời bạn ấy không dễ dàng gì vì bạn ấy không gửi cái bản vẽ không xuất được text đó lên. Thôi thì cứ trả lời theo kiểu đoán mò của mình vậy.
1/- Có thể bạn ấy vẽ lwpolyline không phải là màu 63.
2/- Cũng có thể bạn ấy vẽ bẳng lệnh line chứ không phải là polyline. Vì thế mà không chọn được đối tượng cũng như hàm acet-geom-vertex-list không có tác dụng.
3/- Việc tạo bộ chọn có cả màu và layer thực chất chỉ nhằm để tránh chọn nhầm đối tượng mà thôi. Tuy nhiên nếu không quản lý đối tượng tốt thì sẽ lại là việc gây cản trở cho lisp. Vì vậy người dùng rất cần phải hiểu rõ về bộ chọn này.

Hề hề hề, hy vọng rằng bác không bực mình vì trả lời mò thế này.
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.

#53 tientracdia

tientracdia

    biết lệnh scale

  • Members
  • PipPipPip
  • 147 Bài viết
Điểm đánh giá: -11 (hơi kém)

Đã gửi 19 December 2012 - 06:43 AM

Hề hề hề,
Bác này trốn việc nhanh thế. Thực ra thì việc trả lời bạn ấy không dễ dàng gì vì bạn ấy không gửi cái bản vẽ không xuất được text đó lên. Thôi thì cứ trả lời theo kiểu đoán mò của mình vậy.
1/- Có thể bạn ấy vẽ lwpolyline không phải là màu 63.
2/- Cũng có thể bạn ấy vẽ bẳng lệnh line chứ không phải là polyline. Vì thế mà không chọn được đối tượng cũng như hàm acet-geom-vertex-list không có tác dụng.
3/- Việc tạo bộ chọn có cả màu và layer thực chất chỉ nhằm để tránh chọn nhầm đối tượng mà thôi. Tuy nhiên nếu không quản lý đối tượng tốt thì sẽ lại là việc gây cản trở cho lisp. Vì vậy người dùng rất cần phải hiểu rõ về bộ chọn này.

Hề hề hề, hy vọng rằng bác không bực mình vì trả lời mò thế này.
Hề hề hề.

Xin lỗi, mình đã gởi bản vẽ yêu cầu xuất ra cvs phần trên. mong được bạn giúp
  • 0

#54 gia_bach

gia_bach

    biết lệnh adcenter

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 1435 Bài viết
Điểm đánh giá: 1426 (rất tốt)

Đã gửi 19 December 2012 - 08:39 AM

Vẩn không xuất ra cvs được bạn ơi
Nhưng tại sao mình lại chuyển cùng màu và cùng lớp vậy bạn ?
khi đã thay đổi
(setq sslst (acet-ss-to-list (ssget (list (cons 0 "LWPOLYLINE") (cons 62 63) (cons 8 "Main_tach_o"))))
tlst "" )
http://www.cadviet.c...14381_ycau4.dwg

sửa lại cho bạn theo code của bác Bình :
Sorry bác Bình vì lược bỏ những phần không cần thiết.

(defun c:xt2ex (/ c1 c2 c3 c4 c5 c6 c7 c8 f filename lay sslst tmp)
(vl-load-com)
(if (and (setq sslst (acet-ss-to-list (ssget (list (cons 0 "LWPOLYLINE") (cons 8 "Main_tach_o")))))
(setq filename (getfiled "Select a File" "" "csv" 1)) )
(progn
(setq f (open filename "a"))
(write-line "Main_STT,Main_H_Dap,Main_S_Dap,Main_V_Dap,Main_H_Dao,Main_S_Dao,Main_V_Dao,Main_S_O" f)
(foreach e sslst
(foreach en (acet-ss-to-list (ssget "wp" (acet-geom-vertex-list e) (list (cons 0 "text")) ))
(setq lay (cdr (assoc 8 (entget en)))
tmp (cdr (assoc 1 (entget en))) )
(setq C1 "STT" C2 " " C3 " " C4 " " C5 " " C6 " " C7 " " C8 " ")
(cond
( (= lay "Main_STT") (setq C1 tmp ) )
( (= lay "Main_H_Dap") (setq C2 tmp ) )
( (= lay "Main_S_Dap") (setq C3 tmp ) )
( (= lay "Main_V_Dap") (setq C4 tmp ) )
( (= lay "Main_H_Dao") (setq C5 tmp ) )
( (= lay "Main_S_Dao") (setq C6 tmp ) )
( (= lay "Main_V_Dao") (setq C7 tmp ) )
( (= lay "Main_S_O") (setq C8 tmp ) ) ))
(write-line (strcat C1 (chr 44) C2 (chr 44) C3 (chr 44) C4 (chr 44) C5 (chr 44) C6 (chr 44) C7 (chr 44) C8) f) )
(close f)))
(princ))

Bài viết đã được chỉnh sửa nội dung bởi gia_bach: 19 December 2012 - 10:19 AM

  • 2

#55 tientracdia

tientracdia

    biết lệnh scale

  • Members
  • PipPipPip
  • 147 Bài viết
Điểm đánh giá: -11 (hơi kém)

Đã gửi 19 December 2012 - 10:29 AM

Xin chân thành cám ơn tất cả các bạn đã giúp.
Xin nhờ bạn giúp cho việc xuất các text của lớp Main_STT ( trong đa giác ) và text lớp Main_CDTN tại các đỉnh hay gần đỉnh đa giác trên ra file csv theo hàng ngang trong từng đa giác theo tên của lớp Main_STT . Mục đích để xuất cao độ tự nhiên của các mắt ô đỉnh đa giác.( STT, cdtn, cdtn , .... )
http://www.cadviet.c...14381_ycau5.dwg
Rất cám ơn
  • 0

#56 tientracdia

tientracdia

    biết lệnh scale

  • Members
  • PipPipPip
  • 147 Bài viết
Điểm đánh giá: -11 (hơi kém)

Đã gửi 21 December 2012 - 06:53 AM



Hề hề hề,
Y nghĩa của các dòng code mà mình đã viết thực ra chỉ là cái mình mót được từ mọi người ở trên diễn đàn chứ có phải cao siêu gì đâu. Chỉ là bạn cần dành chút thời gian để tìm hiểu về lisp và làm thử vài lần sẽ quen thôi mà.
Cụ thể như sau:
1/- (defun c:xt2ex (/ oldos sslst tlst filename f sslst1 C1 C2 C3 C4 C5 C6 C7 C8 )
Khai báo tên lệnh lisp, đặt các biến sử dụng là biến cục bộ để nó bị triệt tiêu sau khi chạy lisp
2/- (vl-load-com) load các hàm vl- và các lệnh sử dụng trong express tool
3/- (command "undo" "be") đánh dấu nơi bắt đầu đặt lệnh undo
4/- (setq oldos (getvar "osmode")) Lấy giá trị biến hệ thống osmode hiện hành
5/- (setvar "osmode" 0) Đặt biến hệ thống osmode về 0 để tránh truy bắt nhầm điểm.
6/- (setq sslst (acet-ss-to-list (ssget (list (cons 0 "circle") (cons 62 63) (cons 8 "main_circleKQ"))))
tlst "" )
Đặt tên biến sslst là một danh sách tên các đối tượng vòng tròn được chọn bởi lệnh ssget. Về cú pháp và chức năng của lệnh này bạn tham khảo trong Help Developer của CAD,
Đặt biến tlst là một chuỗi trống (không chứa ký tự nào)
7/- (setq filename (getfiled "Select a File" "" "csv" 1)) Đặt biến filename là tên file được chọn từ hộp thoại của lệnh Getfiled. Xem thêm Help developer để hiểu về lệnh này.
8/- (setq f (open filename "w")) Mở file có filename đã chọn để ghi nội dung mới vào file và lưu biến thao tác này là f.
9/- (write-line "Main_STT,Main_H_Dap,Main_S_Dap,Main_V_Dap,Main_H_Dao,Main_S_Dao,Main_V_Dao,Main_S_O," f)
Ghi một dòng text vào file đã mở, dấu , dùng ngăn cách giữa các cột trong file
10/- (foreach e sslst
Mở hàm foreach để lặp qua tất cả các đối tượng có trong danh sách các ename đã được chọn ở phía trên (biến sslst)
Các nhiệm vụ cần làm trong mỗi lần lặp được liệt kê như sau:
a/- (setq sslst1 (acet-ss-to-list (ssget "w" (list (- (cadr (assoc 10 (entget e))) (cdr (assoc 40 (entget e))))
(- (caddr (assoc 10 (entget e))) (cdr (assoc 40 (entget e))))
)
(list (+ (cadr (assoc 10 (entget e))) (cdr (assoc 40 (entget e))))
(+ (caddr (assoc 10 (entget e))) (cdr (assoc 40 (entget e))))
)
(list (cons 0 "text")) )) )
Lấy một danh sách các đối tượng text có trong mỗi vòng tròn. Tham khảo thêm về lệnh ssget với tham số "w" trong help developer.
b/- (setq C1 nil C2 nil C3 nil C4 nil C5 nil C6 nil C7 nil C8 nil), Đặt các biến C1 ..... C8 về giá trị nil (chả có gì)
c,d,e,f,g,h,i,k/- (foreach en sslst1
(if (= (cdr (assoc 8 (entget en))) "Main_STT")
(setq C1 (cdr (assoc 1 (entget en))) )
)
)
Tạo 8 vòng lặp qua các đối tượng text được chọn trong danh sách sslst1 để lấy giá trị của 8 biến C1 ... C8 theo tên các lớp của mỗi text
l/- (setq tlst (strcat (if C1 C1 " ") (chr 44) (if C2 C2 " ") (chr 44) (if C3 C3 " ") (chr 44) (if C4 C4 " ") (chr 44)
(if C5 C5 " ") (chr 44) (if C6 C6 " ") (chr 44) (if C7 C7 " ") (chr 44) (if C8 C8 " ") (chr 44) ))
Đặt biến tlst là một chuỗi gồm giá trị các biến từ C1 đến C8 với dấu ngăn cách cột là ","
m/- (write-line tlst f) Ghi giá trị chuổi này vào file đã mở f ở trên
n/- (setq tlst "") Trả biến tlst về chuỗi trống.
11/- ) Kết thúc vòng lặp foreach.
12/- (close f) Đóng file f đã mở phía trên.
13/- (setvar "osmode" oldos) Trả biến hệ thống osmode về giá trị ban đầu trước khi chạy lisp
14/- (command "undo" "e") Đánh dấu nơi kết thúc của lệnh undo. Điều này để giúp người dùng khi cần có thể khôi phục nhanh bản vẽ đã bị lisp làm thay đổi.
15/- (princ) Xóa sạch biến cuối cùng do lisp tạo ra và trả về nil. Thoát êm
16/- ) Kết thúc lệnh lisp (defun c:xt2ex .... đã bắt đầu phía trên.

Nói thì như vậy nhưng thực tế để vận dụng tốt các hàm lisp phía trên cũng cần có thời gian để đọc và thực hành. Bạn chớ có sợ nó rậm rì rắc rối, Bước đấu có thể hơi ngại ngùng như khi gặp gái trinh, nhưng cứ thọc vào bạn sẽ thấy khoái dần và nổi hứng với nó không chừng. Cứ từ từ mà vọc. Dục tốc bất đạt. Mưa dần thấm đất, rồi sẽ tời lúc nó nhũn ra như con chi chi, bạn tha hồ mà thọc mà ngoáy, mà mấn mà mò, chả còn biết sợ là gì nữa đâu.

Hề hề hề,...

Cám ơn bạn đã hướng dẫn. Lisp này mình chọn tất cả và xuất ra file cvs, mình muốn nhờ bạn chỉnh thêm tí, vì công việc phát sing mình phải chọn từng ô để xuất ra file. lần nhất chọn lần lược 1 hoăc 2 ô, xuất ra file. Sau đó mình chọn thêm các ô khác nửa sẻ xuất ra file ghi nối vào file cũ .
Xin được bạn giúp. Cám ơn
  • 0

#57 nhoclangbat

nhoclangbat

    Edu level: li10

  • Members
  • PipPipPipPipPipPipPip
  • 1409 Bài viết
Điểm đánh giá: 379 (khá)

Đã gửi 20 October 2014 - 03:43 PM

- Hehe thanks a Tue, nhoc xin phép đc mót lsp #10 của anh về dùng ^^, nhoc cũng đang cần 1lsp giống vậy , việc edit lại xíu theo nhu cầu riêng chắc nhoc làm đc  :P


  • 0
"...................][)e\/i][_ /\/\@Y CrY....................."

(defun THỔ_DÂN_HỌC_CAD (xxxx) ...) ^_^








#58 Nguyen Van Linh 92

Nguyen Van Linh 92

    Chưa sử dụng CAD

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

Đã gửi 22 September 2015 - 11:15 AM

cho em tại sao em xuất ra excel nó bị lỗi font ạ, tks.


  • 0