Chuyển đến nội dung
Diễn đàn CADViet
vantuan18nd

[Nhờ viết lisp] Xuất cao độ từ CAD sang Notpad hoặc Excel

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

- Mình đang phải giải quyết một đống cao độ và khoảng cách lẻ trong CAD, các cao độ và khoảng cách lẻ này của mình cái thì nằm theo phương ngang, cái thì theo phương đứng.

  Trên Forums cũng có nhiều lisp tương tự nhưng không giải quyết được bài toán của mình.

- Mình muốn nhờ các member cadviet.com viết giúp lisp xuất các cao độ và khoảng cách lẻ này sang Notpad hoặc Excel.

 

- Cụ thể, file CAD mình up lên như sau :

+ Hàng bên trên là cao độ, bên dưới là khoảng cách lẻ tương ứng.

+ Hàng cao độ thì text theo phương đứng; Hàng K/c lẻ thì các text có cả theo phương đứng và phương ngang.

 

??? Bây giờ mình muốn có 1 lisp như sau :\

+ Chạy lệnh.

+ Quét chọn hàng cao độ (hoặc khoảng cách lẻ).

+ Lisp sẽ cho ra kết quả là các text trong file Notpad hoặc Excel theo dạng cột, hoặc hàng đều được. Quét chọn nhiều lần thì sẽ được nhiều cột; hàng trong cùng một file.

+ Lisp chạy liên tục cho đến khi nhấn Enter để kết thúc lệnh.

Link file : http://www.cadviet.com/upfiles/3/103675_vd.dwg

 

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

 

- Mình đang phải giải quyết một đống cao độ và khoảng cách lẻ trong CAD, các cao độ và khoảng cách lẻ này của mình cái thì nằm theo phương ngang, cái thì theo phương đứng.

  Trên Forums cũng có nhiều lisp tương tự nhưng không giải quyết được bài toán của mình.

- Mình muốn nhờ các member cadviet.com viết giúp lisp xuất các cao độ và khoảng cách lẻ này sang Notpad hoặc Excel.

 

- Cụ thể, file CAD mình up lên như sau :

+ Hàng bên trên là cao độ, bên dưới là khoảng cách lẻ tương ứng.

+ Hàng cao độ thì text theo phương đứng; Hàng K/c lẻ thì các text có cả theo phương đứng và phương ngang.

 

??? Bây giờ mình muốn có 1 lisp như sau :\

+ Chạy lệnh.

+ Quét chọn hàng cao độ (hoặc khoảng cách lẻ).

+ Lisp sẽ cho ra kết quả là các text trong file Notpad hoặc Excel theo dạng cột, hoặc hàng đều được. Quét chọn nhiều lần thì sẽ được nhiều cột; hàng trong cùng một file.

+ Lisp chạy liên tục cho đến khi nhấn Enter để kết thúc lệnh.

Link file : http://www.cadviet.com/upfiles/3/103675_vd.dwg

 

Cái nằm theo phương ngang cái nằm theo phương đứng thì biết phân biệt kiểu gì bi giờ chủ pic

Nếu chủ pic chấp nhận các giả thiết sau thì sẽ khả thi hơn

  1. Sửa lại toàn bộ cao độ (CDo) thành layer1, và toàn bộ số lẻ thành Layer2, hoặc một cách khác để loại trừ
  2. Dùng lisp (căn chỉnh hàng loạt Text) về : CDo căn giữa-giữa thẳng hàng nhau, số lẻ căn giữa- giữa thẳng hàng nhau và thẳng hàng với Text mẫu nào đó hoặc điểm pic chọn (hoặc nếu không thẳng hàng nhau thì chấp nhận sai số "về độ thẳng hàng nhau" là bao nhiêu đơn vị (đơn vị Model cad)

...

Chủ pic cấp thêm giả thiết nhé

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ái nằm theo phương ngang cái nằm theo phương đứng thì biết phân biệt kiểu gì bi giờ chủ pic

Nếu chủ pic chấp nhận các giả thiết sau thì sẽ khả thi hơn

  1. Sửa lại toàn bộ cao độ (CDo) thành layer1, và toàn bộ số lẻ thành Layer2, hoặc một cách khác để loại trừ
  2. Dùng lisp (căn chỉnh hàng loạt Text) về : CDo căn giữa-giữa thẳng hàng nhau, số lẻ căn giữa- giữa thẳng hàng nhau và thẳng hàng với Text mẫu nào đó hoặc điểm pic chọn (hoặc nếu không thẳng hàng nhau thì chấp nhận sai số "về độ thẳng hàng nhau" là bao nhiêu đơn vị (đơn vị Model cad)

...

Chủ pic cấp thêm giả thiết nhé

- Cũng khó quá bạn nhỉ, bây giờ ngồi chỉnh thủ công cho các số giống nhau về cùng Layer cũng chết

- Bạn có thể viết lisp theo cách này được không

+ Chọn toàn bộ dãy số

+ Đưa tất cả các số được chọn về theo phương đứng hoặc ngang

+ Sau đó mình dùng lisp xuất ra Excel hoặc notepad (Kết quả mình có thế tận dụng làm trên Excel để tính toán, các số khong bị dính vào nhau là được)

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ình như bạn làm không theo quy luật? Bình thường nếu mà cao độ và khoảng cách lẻ nó được xuất từ 1 chương trình ra thì nó sẽ năm ở 2 layer khác nhau ?

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

- Mình đang phải giải quyết một đống cao độ và khoảng cách lẻ trong CAD, các cao độ và khoảng cách lẻ này của mình cái thì nằm theo phương ngang, cái thì theo phương đứng.

  Trên Forums cũng có nhiều lisp tương tự nhưng không giải quyết được bài toán của mình.

- Mình muốn nhờ các member cadviet.com viết giúp lisp xuất các cao độ và khoảng cách lẻ này sang Notpad hoặc Excel.

 

- Cụ thể, file CAD mình up lên như sau :

+ Hàng bên trên là cao độ, bên dưới là khoảng cách lẻ tương ứng.

+ Hàng cao độ thì text theo phương đứng; Hàng K/c lẻ thì các text có cả theo phương đứng và phương ngang.

 

??? Bây giờ mình muốn có 1 lisp như sau :\

+ Chạy lệnh.

+ Quét chọn hàng cao độ (hoặc khoảng cách lẻ).

+ Lisp sẽ cho ra kết quả là các text trong file Notpad hoặc Excel theo dạng cột, hoặc hàng đều được. Quét chọn nhiều lần thì sẽ được nhiều cột; hàng trong cùng một file.

+ Lisp chạy liên tục cho đến khi nhấn Enter để kết thúc lệnh.

Link file : http://www.cadviet.com/upfiles/3/103675_vd.dwg

Như vầy đc không ?


(defun c:vantuan18 (/ f fl ss p1 p2) ;chon text theo goc roi ghi ra file

(if (findfile (setq f (getstring "\n<Ten FILE> xuat so lieu , Go <ENTER> neu khong luu : "))) (setq fl (open f "a")) (setq fl (open f "w")))

(while (setq p1 (getpoint "\nChon 2 diem xac dinh hang lay text :"))

(initget 1) (setq p2 (getpoint p1) ss (ssget "F" (list p1 p2) (list (cons 0 "TEXT"))) i 0)

(repeat (sslength ss) (prin1 (read (cdr (assoc 1 (entget (ssname ss i))))) fl) (princ " " fl) (setq i (1+ i)))

(write-line "" fl));while

(if fl (close fl))(princ))

 

Xuất ra file *.txt (notepad)

Chỉ cần pick 2 điểm là lsp tóm lấy rồi xuất ra.

Nếu tóm không đc thằng nào thì cũng xuống 1 dò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

Như vầy đc không ?


(defun c:vantuan18 (/ f fl ss p1 p2) ;chon text theo goc roi ghi ra file

(if (findfile (setq f (getstring "\n<Ten FILE> xuat so lieu , Go <ENTER> neu khong luu : "))) (setq fl (open f "a")) (setq fl (open f "w")))

(while (setq p1 (getpoint "\nChon 2 diem xac dinh hang lay text :"))

(initget 1) (setq p2 (getpoint p1) ss (ssget "F" (list p1 p2) (list (cons 0 "TEXT"))) i 0)

(repeat (sslength ss) (prin1 (read (cdr (assoc 1 (entget (ssname ss i))))) fl) (princ " " fl) (setq i (1+ i)))

(write-line "" fl));while

(if fl (close fl))(princ))

 

Xuất ra file *.txt (notepad)

Chỉ cần pick 2 điểm là lsp tóm lấy rồi xuất ra.

Nếu tóm không đc thằng nào thì cũng xuống 1 dòng

Mình cũng chưa hiểu về lisp này, đã làm thử rồi nhưng không thấy hiệu quả,không có kết quả

Bạn chọn 2 điểm thì không được rồi, mình muốn quét chọn tất cả đối tượng muốn xuất ra cơ.

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

Mình cũng chưa hiểu về lisp này, đã làm thử rồi nhưng không thấy hiệu quả,không có kết quả

Bạn chọn 2 điểm thì không được rồi, mình muốn quét chọn tất cả đối tượng muốn xuất ra cơ.

Chọn 2 diểm băng qua hàng text muốn lấy. nếu muốn theo phương trục X hoặc Y thì bật F8. Số liệu xuất ra sẽ sắp xếp theo chiều bạn pick 2 điểm đó.

Muốn chọn tất cả lại càng dễ nhưng khi xuất ra số liệu sẽ không có trật tự gì, thì cũng như một mớ bỏ đi thôi.

Mình đã làm thử trên file của bạn rồi , kết quả như sau :

3.25 2.36 2.33 3.23 2.4 2.44 3.76

8.5 8.5 8.5 8.5 4.98 7.21 4.92 7.88 0.61

Còn đây là lsp mình làm sát theo yc của bạn :


(defun c:vantuan18 (/ ss f fl goc p1 p2 i ) ;chon text theo goc roi ghi ra file

(if (findfile (setq f (getstring "\n<Ten FILE> xuat so lieu , Go <ENTER> neu khong luu : ")))

(setq fl (open f "a")) (setq fl (open f "w")))

(while (setq goc (getangle "\nNhap goc cua text muon chon :"))(setq i 0)

(if (setq ss (ssget (list (cons 0 "TEXT") (cons 50 goc))))

(repeat (sslength ss) (prin1 (read (cdr (assoc 1 (entget (ssname ss i))))) fl) (princ " " fl) (setq i (1+ i)))

(prompt "\nKhong chon dc text nao !"));if

(write-line "" fl));while

(close fl)(princ))

 

  • Vote tăng 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

Chọn 2 diểm băng qua hàng text muốn lấy. nếu muốn theo phương trục X hoặc Y thì bật F8. Số liệu xuất ra sẽ sắp xếp theo chiều bạn pick 2 điểm đó.

Muốn chọn tất cả lại càng dễ nhưng khi xuất ra số liệu sẽ không có trật tự gì, thì cũng như một mớ bỏ đi thôi.

Mình đã làm thử trên file của bạn rồi , kết quả như sau :

3.25 2.36 2.33 3.23 2.4 2.44 3.76

8.5 8.5 8.5 8.5 4.98 7.21 4.92 7.88 0.61

Còn đây là lsp mình làm sát theo yc của bạn :


(defun c:vantuan18 (/ ss f fl goc p1 p2 i ) ;chon text theo goc roi ghi ra file

(if (findfile (setq f (getstring "\n<Ten FILE> xuat so lieu , Go <ENTER> neu khong luu : ")))

(setq fl (open f "a")) (setq fl (open f "w")))

(while (setq goc (getangle "\nNhap goc cua text muon chon :"))(setq i 0)

(if (setq ss (ssget (list (cons 0 "TEXT") (cons 50 goc))))

(repeat (sslength ss) (prin1 (read (cdr (assoc 1 (entget (ssname ss i))))) fl) (princ " " fl) (setq i (1+ i)))

(prompt "\nKhong chon dc text nao !"));if

(write-line "" fl));while

(close fl)(princ))

 

Tuyệt vời. đúng theo ý mình rồi. thank you bạn TaiNguyen79

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

Chào bạn!

Minh ko biết gì về lisp nhưng bài toán của bạn có thể giải quyết bằng vba cụ thể:

-file excel mà bạn xuất ra thì cao độ và KCle có cần trên cùng 1 dòng ko hay kcl nằm giữa 2 cao độ

 VD như cao độ ở 1 cột và các hàng la 1,3,5... còn khoảng cách lẻ ở cột kế tiếp và các hàng là 2,4,6...

 

 

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

Chọn 2 diểm băng qua hàng text muốn lấy. nếu muốn theo phương trục X hoặc Y thì bật F8. Số liệu xuất ra sẽ sắp xếp theo chiều bạn pick 2 điểm đó.

Muốn chọn tất cả lại càng dễ nhưng khi xuất ra số liệu sẽ không có trật tự gì, thì cũng như một mớ bỏ đi thôi.

 

Theo bản vẽ thì có 2 hàng text, mỗi hàng có mã dxf 11 như nhau, không cần thiết phải xét góc.

Nếu có thể chọn 1 lần cả 2 hàng rồi xuất ra thì tiện cho người dùng hơn nhiều.

Tôi sửa lisp này dễ dàng nhưng nếu bạn TaiNguyen79 muốn thì tham khảo lisp xuất toạ độ có điều kiện

http://www.cadviet.com/forum/topic/73602-lisp-xuat-toa-do-co-dieu-kien/

bạn tham khảo cách phân loại và sort các text

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

Chào bạn!

Minh ko biết gì về lisp nhưng bài toán của bạn có thể giải quyết bằng vba cụ thể:

-file excel mà bạn xuất ra thì cao độ và KCle có cần trên cùng 1 dòng ko hay kcl nằm giữa 2 cao độ

 VD như cao độ ở 1 cột và các hàng la 1,3,5... còn khoảng cách lẻ ở cột kế tiếp và các hàng là 2,4,6...

cảm ơn bạn, nhưng cái này không đúng ý của mình, thanks

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

Nhờ các bác chỉnh hộ lisp này : Khi đưa cao độ (CDo) thành layer1, và toàn bộ số lẻ thành Layer2.

+ Chạy lệnh.

+ Quét chọn hàng cao độ (hoặc khoảng cách lẻ).

+ Lisp sẽ cho ra kết quả là các text trong file Excel theo dạng cột .

Cao độ     KC lẻ

text 1                  tex2

 

file kết quả như sau:

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

Em đang muốn lấy khoảng cách lẻ và cao độ tự nhiên phía trái và phải của 1 trắc ngang (theo pline thuộc layer "trac ngang tu nhien") xuất ra tệp .txt. Mong mấy pro giúp em. Yêu cầu của em là:

1. Lấy khoảng và ghi cách lẻ và cao độ  phía bên trái pline(tại các đỉnh có STT màu xanh) theo thứ tự từ phải sang trái vào file .txt (theo định dạng: khoảng cách lẻ 1  --> tab --> cao độ 1 --> enter--->khoang cách lẻ 2 --> tab --> cao độ 2 và theo thứ tự )
2. Lấy khoảng cách lẻ và cao độ  phía bên phải pline(tại các đỉnh có STT màu đỏ) theo thứ tự từ trái sang  phải vào file .txt (theo định dạng: khoảng cách lẻ 1  --> tab --> cao độ 1 --> enter--->khỏang cách lẻ 2 --> tab --> cao độ 2 và theo thứ tự )
3. Xuất các giá trị thành file .txt
4. Cao độ chuẩn lấy từ cao độ của điểm 1 (text ở bên dưới, trong bản vẽ này là 41.25 )
VÍ DỤ ĐỊNH DẠNG FILE TXT:
PHÍA TRÁI:
khoảng cách lẻ từ 1->2  (tab) cao độ điểm 2  (enter)
khoảng cách lẻ từ 2->3  (tab) cao độ điểm 3  (enter)
.....
(hàng trống để phân biệt trái phải)
PHÍA PHẢI:
khoảng cách lẻ từ 1->2  (tab) cao độ điểm 2  (enter)
khoảng cách lẻ từ 2->3  (tab) cao độ điểm 3  (enter)
.....
chi tiết trong bản vẽ đính kèm dưới đây. Cám ơn mọi người nhiều!

http://www.cadviet.com/upfiles/5/23335_copy_of_km8km9sua_2.dwg

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ái nào của Bác Duân cũng bá đạo. Nếu được bác Duân share cho cái nào thì hay cái đó.

Mình shared cho mng rồi nhưng ko ai lên tiếng.

http://www.cadviet.com/forum/topic/150030-g-i-t-ng-ch-ng-trinh-t-o-file-ntd-v-tr-c-d-c-v-tr-c-ngang/

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

Chọn 2 diểm băng qua hàng text muốn lấy. nếu muốn theo phương trục X hoặc Y thì bật F8. Số liệu xuất ra sẽ sắp xếp theo chiều bạn pick 2 điểm đó.

Muốn chọn tất cả lại càng dễ nhưng khi xuất ra số liệu sẽ không có trật tự gì, thì cũng như một mớ bỏ đi thôi.

Mình đã làm thử trên file của bạn rồi , kết quả như sau :

3.25 2.36 2.33 3.23 2.4 2.44 3.76

8.5 8.5 8.5 8.5 4.98 7.21 4.92 7.88 0.61

Còn đây là lsp mình làm sát theo yc của bạn :


(defun c:vantuan18 (/ ss f fl goc p1 p2 i ) ;chon text theo goc roi ghi ra file

(if (findfile (setq f (getstring "\n<Ten FILE> xuat so lieu , Go <ENTER> neu khong luu : ")))

(setq fl (open f "a")) (setq fl (open f "w")))

(while (setq goc (getangle "\nNhap goc cua text muon chon :"))(setq i 0)

(if (setq ss (ssget (list (cons 0 "TEXT") (cons 50 goc))))

(repeat (sslength ss) (prin1 (read (cdr (assoc 1 (entget (ssname ss i))))) fl) (princ " " fl) (setq i (1+ i)))

(prompt "\nKhong chon dc text nao !"));if

(write-line "" fl));while

(close fl)(princ))

 

 Anh cho em hỏi giờ em không muốn nhập góc text vào nữa mà chọn góc mặc định là =0 thì sửa chỗ nào trong lisp của anh thì được ạ. Em đã sửa chỗ này “(setq goc (getangle "\nNhap goc cua text muon chon :"))(setq i 0)” thành (setq goc 0) hoặc (setq goc (getangle 0))(setq i 0). Nhưng đều không được. và em muốn lựa chọn nơi lưu thì làm thế nào ? Anh xem chỉ cho em với ạ.Cảm ơn 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

Nếu bỏ vòng lặp while thì sau khi chọn rồi bấm enter thì lại chạy lại lisp từ đầu à cụ !
Lisp nếu bỏ vòng lặp while thì sẽ như thế này phải không ạ!
[lisp]
(defun c:vt (/ ss f fl goc p1 p2 i ) ;chon text theo goc roi ghi ra file
(if (findfile (setq f (getstring "\n<Ten FILE> xuat so lieu , Go <ENTER> neu khong luu : ")))
(setq fl (open f "a")) (setq fl (open f "w")))
(setq goc (getangle "\nNhap goc cua text muon chon :"))(setq i 0)
(if (setq ss (ssget (list (cons 0 "TEXT") (cons 50 goc))))
(repeat (sslength ss) (prin1 (read (cdr (assoc 1 (entget (ssname ss i))))) fl) (princ " " fl) (setq i (1+ i)))
(prompt "\nKhong chon dc text nao !"));if
(write-line "" fl))
(close fl)(princ))
[lisp]

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

Thay dòng này: (setq goc (getangle "\nNhap goc cua text muon chon :"))

Bởi: (or (setq goc (getangle "\nNhap goc cua text muon chon :"))​(setq goc 0))

Thì: nếu không nhập gì (Enter bỏ qua) thì góc sẽ bằng 0.

  • 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

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

×