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.
Nguyen Hoanh

Viết lisp theo yêu cầu [phần 2]

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

svba1608    624
Chào bạn SVBA1608,

Cái lisp này mình đã sửa lại theo ý bạn. Bạn thử dùng xem nhé. Nó có hai kiểu chọn là pick nhiều điểm và pick đối tượng. Tất nhiên khi pick nhiều điểm thì nó hơi nhiêu khê hơn pick hai điểm. Nó yêu cầu bạn phải trả lời có chọn điểm tiếp theo hay không. Nếu bạn không chọn tiếp nó sẽ tính tổng khoảng cách từ điểm đầu lần lượt qua các điểm chọn tới điểm cuối cùng mà bạn đã chọn.

Bạn có thể so sánh cái lisp này với các lisp trước đó để thấy được cái cách mình sửa. Qua đó bạn có thể học được cách sửa lisp theo ý mình.

Chúc bạn vui.

Cảm ơn bác Bình rất nhiều! Lisp sử dụng tốt, tuy có một trục trặc nho nhỏ là lisp nhắc tới 2 lần: "Hay chon diem dau". Nhờ có lisp, em đã hoàn thành xong việc tính chiều dài.

Nay lại phải nhờ Diễn đàn giúp em một tay trong việc thống kê cao độ.

 

3-1.jpg

 

Bản vẽ của em có nhiều nút, công việc của em là phải thống kê cao độ tại các nút và lập bảng. Thống kê bằng tay cao độ của 136 nút cũng không phải là quá lâu, nhưng mất nhiều công sức vì phải zoom, pan và sửa text nhiều. Hơn nữa nếu có thay đổi về phương án thiết kế, việc đánh số các nút thay đổi thì việc thống kê cũng phải thay đổi theo. Nên em muốn nhờ các bác trên Diễn đàn viết giùm một lisp như thế này thôi:

+ Chọn điểm đặt bảng.

+ Nhập nút lần 1. Pick vào 1 tên nút trên bản vẽ. Ví dụ: 66

+ Nhập nút lần 2. Pick vào 1 tên nút trên bản vẽ (nếu không có thì enter). Ví dụ: 67.

+ Nhập cao độ. Pick vào cao độ. Ví dụ: 11.50

Enter để kết thúc.

Khi đó lisp sẽ sắp xếp các tên nút và cao độ được pick bằng tay vào bảng.

Sở dĩ có 2 lần nhập tên nút là vì: các nút nằm cạnh nhau có cùng cao độ. Ví dụ: 66 và 67 có cùng cao độ 11.50, 75 và 86 có cùng cao độ 12.00, ... (chỉ có nút 9 có cao độ 11.46)

Nhờ các bác giúp một tay! Xin chân thành cảm ơ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
Tue_NV    3.841
Bác có cái lisp và excel .csv thực hiện vẽ 3d polyline không cho em xin với!

Cảm ơn trươc :cheers:

Chào bạn ducboss

Lisp của bạn được xây dựng tương tự như trên Lisp này, chỉ có điều là thay đờng LWPOLYLINE bằng đường 3DPOLY mà thôi

Lisp đó ở đây. Bạn tham khảo nhé :

LISP : Đọc dữ liệu từ file Excel trên hệ thống không có cài đặt Microsoft Excel., Đọc dữ liệu từ file Excel

 

......

.....

em muốn nhờ các bác trên Diễn đàn viết giùm một lisp như thế này thôi:

+ Chọn điểm đặt bảng.

+ Nhập nút lần 1. Pick vào 1 tên nút trên bản vẽ. Ví dụ: 66

+ Nhập nút lần 2. Pick vào 1 tên nút trên bản vẽ (nếu không có thì enter). Ví dụ: 67.

+ Nhập cao độ. Pick vào cao độ. Ví dụ: 11.50

Enter để kết thúc.

Khi đó lisp sẽ sắp xếp các tên nút và cao độ được pick bằng tay vào bảng.

Sở dĩ có 2 lần nhập tên nút là vì: các nút nằm cạnh nhau có cùng cao độ. Ví dụ: 66 và 67 có cùng cao độ 11.50, 75 và 86 có cùng cao độ 12.00, ... (chỉ có nút 9 có cao độ 11.46)

Nhờ các bác giúp một tay! Xin chân thành cảm ơn!

Chào svba

Làm như cách của em hơi lâu -> vì pick chọn từng Text

Như thế này nhé :

-> Tạo bảng hay update bảng

->Pick 1 diem tren man hinh de chon tiep / Hoac an Phim bat ki de ket thuc :

Pick trái chuột 1 điểm trên màn hình để chọn đối tượng

-> Quét chọn hoặc pick chọn 2 nút, 1 cao độ hoặc 1 nút, 1 cao độ (Nhanh nhất là chỉ chọn 1 lần thôi)

-> Lisp Thống kê

-> Cứ thế....

Lệnh là gtd

http://www.cadviet.com/upfiles/2/gtd.rar

 

PS : SVba don't stay up late :cheers: . Good luck

  • 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
bachngoctung    11

-Mình muốn nhờ các bạn giúp cho cái llisp diền thông số đường cong của đường . Hiện nay mình đã có cái lisp dạng như này, nhưng nó ko hoàn hảo lắm > lisp mình có được thì khi sử dụng nó bắt nhập góc chuyển hướng A và bán kính đường cong R thì nó mới tính được. Giờ mình muốn cái lisp mà chỉ cần pick vào đường cong cần tính toán và nó điền ra thông số của đường cong đó luôn ko phải nhập giá trị A và R nữa.

-Mình up luôn cái lisp mà hiện nay mình đang có > nhờ các bạn cải tiến giùm > Chân thành cảm ơn :cheers:

http://www.cadviet.com/upfiles/2/thong_so_...ng__lenh_ts.lsp

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
phamthanhbinh    3.123
-Mình muốn nhờ các bạn giúp cho cái llisp diền thông số đường cong của đường . Hiện nay mình đã có cái lisp dạng như này, nhưng nó ko hoàn hảo lắm > lisp mình có được thì khi sử dụng nó bắt nhập góc chuyển hướng A và bán kính đường cong R thì nó mới tính được. Giờ mình muốn cái lisp mà chỉ cần pick vào đường cong cần tính toán và nó điền ra thông số của đường cong đó luôn ko phải nhập giá trị A và R nữa.

-Mình up luôn cái lisp mà hiện nay mình đang có > nhờ các bạn cải tiến giùm > Chân thành cảm ơn :cheers:

http://www.cadviet.com/upfiles/2/thong_so_...ng__lenh_ts.lsp

Chào bạn Bachngoctung,

Trước hết bạn phải định nghĩa cái thông số đường cong của bạn là những thông số gì đã chứ. Thực tình khi đọc cái yêu cầu của bạn và cái líp kèm theo, mình thấy nó hơi khó hiểu.

Cái lisp của bạn yêu cầu nhập giá trị góc chuyển hướng là góc gì vậy, có phải là góc giữa hai tiếp tuyến của đường cong tại hai đầu mút của nó hay không??? và có vẻ như cái lisp này chỉ áp dụng cho các đường cong là cung tròn thì phải??? Vậy với các đường cong khác thì sao???

Trong CAD có một số hàm để xác địng các thông số của đường cong, nhưng không biết các thông số này có phù hợp với cái bạn cần hay không.???

Đó là các hàm (vlax-curve-get******) Bạn có thể tham khảo trong Help Developer của Cad, mục Autolisp Reference.

 

Chúc bạn 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
phamthanhbinh    3.123
Chào bạn ducboss

Lisp của bạn được xây dựng tương tự như trên Lisp này, chỉ có điều là thay đờng LWPOLYLINE bằng đường 3DPOLY mà thôi

Lisp đó ở đây. Bạn tham khảo nhé :

LISP : Đọc dữ liệu từ file Excel trên hệ thống không có cài đặt Microsoft Excel., Đọc dữ liệu từ file Excel

Chào svba

Làm như cách của em hơi lâu -> vì pick chọn từng Text

Như thế này nhé :

-> Tạo bảng hay update bảng

->Pick 1 diem tren man hinh de chon tiep / Hoac an Phim bat ki de ket thuc :

Pick trái chuột 1 điểm trên màn hình để chọn đối tượng

-> Quét chọn hoặc pick chọn 2 nút, 1 cao độ hoặc 1 nút, 1 cao độ (Nhanh nhất là chỉ chọn 1 lần thôi)

-> Lisp Thống kê

-> Cứ thế....

Lệnh là gtd

http://www.cadviet.com/upfiles/2/gtd.rar

 

PS : SVba don't stay up late :cheers: . Good luck

Hu hu hu,

Ối giời, bác Tue_NV ơi,

Nhìn V L X mà rơi lệ dài.

Mót hổng được biết hỏi ai

Thôi thì lại phải mót "khoai giun" rồi.

Hu hu hu........

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
nhocbabi    3

Em có một việc muốn nhờ mọi người giúp đỡ đó là:

Em có một file cad như sau:

http://www.cadviet.com/upfiles/2/aaa_2.dwg

Và một file cell với số liệu như sau (vì em ko up đc file cell nên phải chuyển số liệu sang file word):

http://www.cadviet.com/upfiles/2/bbb.doc

Vậy có thể tạo một lisp để tự động nhập các số liệu ở bảng cell sang bản cad theo từng vị trí tương ứng đc không ạ. Ví dụ tại đối tượng A-01 bên bản cad sẽ được chèn thêm số liệu 316 ở bên bản cell sang... Tọa độ của tất cả các điểm chèn số liệu này so với đối tượng là do mình lựa chọn.

Cả nhà giúp em với nhé, em cảm ơn 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
Tue_NV    3.841
Em có một việc muốn nhờ mọi người giúp đỡ đó là:

Em có một file cad như sau:

http://www.cadviet.com/upfiles/2/aaa_2.dwg

Và một file cell với số liệu như sau (vì em ko up đc file cell nên phải chuyển số liệu sang file word):

http://www.cadviet.com/upfiles/2/bbb.doc

Vậy có thể tạo một lisp để tự động nhập các số liệu ở bảng cell sang bản cad theo từng vị trí tương ứng đc không ạ. Ví dụ tại đối tượng A-01 bên bản cad sẽ được chèn thêm số liệu 316 ở bên bản cell sang... Tọa độ của tất cả các điểm chèn số liệu này so với đối tượng là do mình lựa chọn.

Cả nhà giúp em với nhé, em cảm ơn nhiều!

Chào nhocbabi

Có phải ý của bạn như thế này phải không?

http://www.cadviet.com/upfiles/2/aaa_3.dwg

Từ A-01 đến A-24 thì đánh số y như trong file Word của bạn còn từ A-25 trở đi vì không biết bạn đánh số như thế nào nên Tue_NV bắt đầu từ số 01 vậy.

 

Bạn xem có đúng như vậy không?

Nếu đúng như vầy thì không cần sử dụng đến Lisp 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
nhocbabi    3
Chào nhocbabi

Có phải ý của bạn như thế này phải không?

http://www.cadviet.com/upfiles/2/aaa_3.dwg

Từ A-01 đến A-24 thì đánh số y như trong file Word của bạn còn từ A-25 trở đi vì không biết bạn đánh số như thế nào nên Tue_NV bắt đầu từ số 01 vậy.

 

Bạn xem có đúng như vậy không?

Nếu đúng như vầy thì không cần sử dụng đến Lisp bạn ạ

Đúng rồi đấy ạ, thực ra có có một loạt các đối tượng khác nữa. Từ A-01 đến A-79, B-01 đến B-65, C-01 đến C-189...Và với mỗi một đối tượng này đều có một số liệu tương ứng ở bên bảng cell. Nhưng ở đây em chỉ trích ra một phần số liệu để up lên cho nhẹ thôi. Như thế thì cần phải dùng cách nào để gán số liệu vào các đối tượng này ạ, chỉ cho em với! Em cảm ơn lắm!

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
Tue_NV    3.841
Đúng rồi đấy ạ, thực ra có có một loạt các đối tượng khác nữa. Từ A-01 đến A-79, B-01 đến B-65, C-01 đến C-189...Và với mỗi một đối tượng này đều có một số liệu tương ứng ở bên bảng cell. Nhưng ở đây em chỉ trích ra một phần số liệu để up lên cho nhẹ thôi. Như thế thì cần phải dùng cách nào để gán số liệu vào các đối tượng này ạ, chỉ cho em với! Em cảm ơn lắm!

Bạn làm theo các bước sau :

1. / Kích chọn 1 Att -> Đánh lệnh Bedit -> Hộp thoại Bedit hiện ra -> Kích OK

2. Copy 1 Tag bất kì . Ví dụ copy Tag TC (chẳng hiểu sao các Tag trong file bản vẽ của bạn chẳng hiện lên nữa).

-> Gõ Ed chọn Tag vừa copy -> Sửa lại Tag TC :

Ví dụ Sửa lại là :

Tag : so

Prompt : so

Default : so123

-> OK

(Tue_NV ví dụ như vậy nhé)

-> Close Block editor -> Yes

3. Sử dụng lệnh Attsync -> để đồng bộ hoá cho Block

Tóm lại , các bước 1; 2; 3 -> Thêm 1 Tag cho thuộc tính

 

Bước 4 : Sử dụng lệnh Attout

-> Chọn file output (đặt tên và lưu vào 1 thư mục nào đó.) Ví dụ ổ C:\xuat1.txt chẳng hạn

-> Chọn các Block cần xuất trong bản vẽ của bạn ->

Command: attout

Initializing...

 

Select objects: Specify opposite corner: 47 found

 

Select objects:

 

Output file: "C:\xuat1.txt" created.

Bước 5 : Dùng Excel mở file xuat1.txt lên. Chú ý trong hộp thoại Open của Excel. Mục file of Types -> chọn All files thì mới mở được file .txt

-> Khi nhấn Open trong hộp thoại open của Excel -> hộp thoại Text Import Wizzard xuất hiện -> Chọn Delimiters -> Nhấn Next -> Trong mục Delimiters -> Chọn Tab -> -> Nhấn Next -> Qua các column -> Chọn Text trong mục Column data format -> Nhấn Finished -> Bạn sẽ được 1 file Excel như file này :

http://www.cadviet.com/upfiles/2/xuat1.rar

Bạn làm tới đây đã nhé. Mình sẽ chỉ tiếp

  • 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
nhocbabi    3
Bạn làm theo các bước sau :

1. / Kích chọn 1 Att -> Đánh lệnh Bedit -> Hộp thoại Bedit hiện ra -> Kích OK

2. Copy 1 Tag bất kì . Ví dụ copy Tag TC (chẳng hiểu sao các Tag trong file bản vẽ của bạn chẳng hiện lên nữa).

-> Gõ Ed chọn Tag vừa copy -> Sửa lại Tag TC :

Ví dụ Sửa lại là :

Tag : so

Prompt : so

Default : so123

-> OK

(Tue_NV ví dụ như vậy nhé)

-> Close Block editor -> Yes

3. Sử dụng lệnh Attsync -> để đồng bộ hoá cho Block

Tóm lại , các bước 1; 2; 3 -> Thêm 1 Tag cho thuộc tính

 

Bước 4 : Sử dụng lệnh Attout

-> Chọn file output (đặt tên và lưu vào 1 thư mục nào đó.) Ví dụ ổ C:\xuat1.txt chẳng hạn

-> Chọn các Block cần xuất trong bản vẽ của bạn ->

Command: attout

Initializing...

 

Select objects: Specify opposite corner: 47 found

 

Select objects:

 

Output file: "C:\xuat1.txt" created.

Bước 5 : Dùng Excel mở file xuat1.txt lên. Chú ý trong hộp thoại Open của Excel. Mục file of Types -> chọn All files thì mới mở được file .txt

-> Khi nhấn Open trong hộp thoại open của Excel -> hộp thoại Text Import Wizzard xuất hiện -> Chọn Delimiters -> Nhấn Next -> Trong mục Delimiters -> Chọn Tab -> -> Nhấn Next -> Qua các column -> Chọn Text trong mục Column data format -> Nhấn Finished -> Bạn sẽ được 1 file Excel như file này :

http://www.cadviet.com/upfiles/2/xuat1.rar

Bạn làm tới đây đã nhé. Mình sẽ chỉ tiếp

Vâng, em đang mò mẫm đây ạ!

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
nhocbabi    3
Bạn làm theo các bước sau :

1. / Kích chọn 1 Att -> Đánh lệnh Bedit -> Hộp thoại Bedit hiện ra -> Kích OK

2. Copy 1 Tag bất kì . Ví dụ copy Tag TC (chẳng hiểu sao các Tag trong file bản vẽ của bạn chẳng hiện lên nữa).

-> Gõ Ed chọn Tag vừa copy -> Sửa lại Tag TC :

Ví dụ Sửa lại là :

Tag : so

Prompt : so

Default : so123

-> OK

(Tue_NV ví dụ như vậy nhé)

-> Close Block editor -> Yes

3. Sử dụng lệnh Attsync -> để đồng bộ hoá cho Block

Tóm lại , các bước 1; 2; 3 -> Thêm 1 Tag cho thuộc tính

 

Bước 4 : Sử dụng lệnh Attout

-> Chọn file output (đặt tên và lưu vào 1 thư mục nào đó.) Ví dụ ổ C:\xuat1.txt chẳng hạn

-> Chọn các Block cần xuất trong bản vẽ của bạn ->

Command: attout

Initializing...

 

Select objects: Specify opposite corner: 47 found

 

Select objects:

 

Output file: "C:\xuat1.txt" created.

Bước 5 : Dùng Excel mở file xuat1.txt lên. Chú ý trong hộp thoại Open của Excel. Mục file of Types -> chọn All files thì mới mở được file .txt

-> Khi nhấn Open trong hộp thoại open của Excel -> hộp thoại Text Import Wizzard xuất hiện -> Chọn Delimiters -> Nhấn Next -> Trong mục Delimiters -> Chọn Tab -> -> Nhấn Next -> Qua các column -> Chọn Text trong mục Column data format -> Nhấn Finished -> Bạn sẽ được 1 file Excel như file này :

http://www.cadviet.com/upfiles/2/xuat1.rar

Bạn làm tới đây đã nhé. Mình sẽ chỉ tiếp

Bước 4 thì em làm được rồi, nhưng sao các bước 1,2,3 thì em ko thể làm được theo như hướng dẫn 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
Tue_NV    3.841
Bước 4 thì em làm được rồi, nhưng sao các bước 1,2,3 thì em ko thể làm được theo như hướng dẫn nhỉ!

file hoàn thành bước 1; 2; 3 ở đây :

http://www.cadviet.com/upfiles/2/aaa_2_1.dwg

Chúc bạn hoàn thành được nó :D

  • 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
Tue_NV    3.841
Em vừa làm theo các bước 1,2,3 thì em được kết quả như này

http://www.cadviet.com/upfiles/2/ccc_1.jpg

Không biết em đã làm đúng yêu cầu chưa :|

Vì bạn gửi file ảnh nên Tue_NV không thể chẩn đoán được. Bạn xem cái file mà Tue_NV đã upload ở bài viết trên là xem bạn làm đúng hay chưa à?

Tiếp nhé :

Bước 6 :

Mở file Excel có chứa 2 cái cột mà bạn upload như file Word đó lên. File Excel đó có chứa 2 cột : 1 cột ghi là A-01, A-02.....; cột thứ 2 ghi số như bạn nói đó.

Sử dụng chức năng copy Sheet -> copy Sheet đó qua file Excel vừa tạo, ta được file Excel gồm 2 Sheet :

-> Sử dụng hàm Vlookup trong Excel -> để gán giá trị tương ứng của Sheet2 cho Shee1 (cột H2 đến H48)

Ý là gắn giá trị tương ứng như số A-21 phải gắn số tương ứng là 2221....

File thể hiện kết quả tính ở đây :

http://www.cadviet.com/upfiles/2/xuat1_1.rar

 

Bước 7 : Bôi đen A1 -> H48 -> copy ->mở file C:xuat.txt lên -> xoá tất cả -> Paste nội dung đã copy từ Excel vào ->

Kết quả sẽ được file xuat1.txt như thế này :

http://www.cadviet.com/upfiles/2/xuat1.txt

 

Mở file CAD của bạn lên -> gõ lệnh Attin -> Chọn file xuat1.txt vừa tạo -> Kết quả sẽ được như ý bạn.

Command: attin

Initializing...

 

Reading the input file... Done.

47 Block inserts modified.

 

Thực chất của quá trình này chẳng qua là trích xuất (output) và Nhập (Input) Block thuộc tính và cần có thêm Excel hỗ trợ trong quá trình tính toán

Chúc thành công :D

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
nhocbabi    3
Vì bạn gửi file ảnh nên Tue_NV không thể chẩn đoán được. Bạn xem cái file mà Tue_NV đã upload ở bài viết trên là xem bạn làm đúng hay chưa à?

Tiếp nhé :

Bước 6 :

Mở file Excel có chứa 2 cái cột mà bạn upload như file Word đó lên. File Excel đó có chứa 2 cột : 1 cột ghi là A-01, A-02.....; cột thứ 2 ghi số như bạn nói đó.

Sử dụng chức năng copy Sheet -> copy Sheet đó qua file Excel vừa tạo, ta được file Excel gồm 2 Sheet :

-> Sử dụng hàm Vlookup trong Excel -> để gán giá trị tương ứng của Sheet2 cho Shee1 (cột H2 đến H48)

Ý là gắn giá trị tương ứng như số A-21 phải gắn số tương ứng là 2221....

File thể hiện kết quả tính ở đây :

http://www.cadviet.com/upfiles/2/xuat1_1.rar

 

Bước 7 : Bôi đen A1 -> H48 -> copy ->mở file C:xuat.txt lên -> xoá tất cả -> Paste nội dung đã copy từ Excel vào ->

Kết quả sẽ được file xuat1.txt như thế này :

http://www.cadviet.com/upfiles/2/xuat1.txt

 

Mở file CAD của bạn lên -> gõ lệnh Attin -> Chọn file xuat1.txt vừa tạo -> Kết quả sẽ được như ý bạn.

Command: attin

Initializing...

 

Reading the input file... Done.

47 Block inserts modified.

 

Thực chất của quá trình này chẳng qua là trích xuất (output) và Nhập (Input) Block thuộc tính và cần có thêm Excel hỗ trợ trong quá trình tính toán

Chúc thành công :cheers:

Ôi giời ơi, sao em vẫn ko làm ra đc kết quả thế nhỉ

file cad của em đây

http://www.cadviet.com/upfiles/2/aaa_4.dwg

file txt của em đây:

http://www.cadviet.com/upfiles/2/abc.txt

ko biết em sai từ đâu :D(

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
Tue_NV    3.841
Ôi giời ơi, sao em vẫn ko làm ra đc kết quả thế nhỉ

file cad của em đây

http://www.cadviet.com/upfiles/2/aaa_4.dwg

file txt của em đây:

http://www.cadviet.com/upfiles/2/abc.txt

ko biết em sai từ đâu :D(

Bạn sai từ bước số 5 :

...........

Bước 5 : Dùng Excel mở file xuat1.txt lên. Chú ý trong hộp thoại Open của Excel. Mục file of Types -> chọn All files thì mới mở được file .txt

-> Khi nhấn Open trong hộp thoại open của Excel -> hộp thoại Text Import Wizzard xuất hiện -> Chọn Delimiters -> Nhấn Next -> Trong mục Delimiters -> Chọn Tab -> -> Nhấn Next -> Qua các column -> Chọn Text trong mục Column data format -> Nhấn Finished -> Bạn sẽ được 1 file Excel như file này :

http://www.cadviet.com/upfiles/2/xuat1.rar

Chú ý cột cuối cùng SO chọn General

-> Bạn đế ý dữ liệu của bạn ở cột TC bị sai. Và giá trị của cột Handle khi bạn không làm đúng thao tác trên đã bị sửa nên chưa được.

 

Lỗi do giá trị HANDLE đã bị sửa do chưa làm đúng thao tác trên

 

HANDLE BLOCKNAME TEXT DT MD TC HS

'254178 sdd A-21 8631 49 5.8 - 2221

'254171 sdd A-47 4810 49 6 2.9 561

'25416A sdd A-46 11467 64 15-Jun 5.1 2465

'254163 sdd A-45 6601 50 15-May 6.5 1912

 

Bạn làm đúng y thao tác từ bước 4 đến bước 7 thử xem.

Chú ý -> Chuẩn xác.

Chúc thành công :cheers:

  • 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
nhocbabi    3
Bạn sai từ bước số 5 :

 

Chú ý cột cuối cùng SO chọn General

-> Bạn đế ý dữ liệu của bạn ở cột TC bị sai. Và giá trị của cột Handle khi bạn không làm đúng thao tác trên đã bị sửa nên chưa được.

 

Lỗi do giá trị HANDLE đã bị sửa do chưa làm đúng thao tác trên

 

HANDLE BLOCKNAME TEXT DT MD TC HS

'254178 sdd A-21 8631 49 5.8 - 2221

'254171 sdd A-47 4810 49 6 2.9 561

'25416A sdd A-46 11467 64 15-Jun 5.1 2465

'254163 sdd A-45 6601 50 15-May 6.5 1912

 

Bạn làm đúng y thao tác từ bước 4 đến bước 7 thử xem.

Chú ý -> Chuẩn xác.

Chúc thành công :cheers:

Vâng, ngày mai em sẽ check lại. Giờ em phải về rồi. Em chào cả nhà :D

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
thiep    263
Nay em có một việc này, biết là khó, không biết lisp có làm được không, nhưng em muốn hỏi thử, biết đâu lại được.

Em có file mô tả như sau:

http://www.cadviet.com/upfiles/2/a_4.dwg

Dữ liệu đầu vào là bản đồ trong vòng tròn. Dữ liệu đầu ra là bảng bên cạnh.

Đoạn ống 29-28 có 2 tiểu khu là 45A và 46B đổ nước vào. Đoạn ống 30-31 chỉ có 1 tiểu khu 45B đổ nước vào. Nhiệm vụ của lisp là cần thống kê xem tiểu khu nào được những đoạn ống nào đổ nước vào.

Nhờ các bác trên Diễn đàn xem giúp.

Em xin chân thành cảm ơn!

 

Chào svba1608, và bác phanthanhbinh, Đề toán ra lần này có khó hơn đề toán trước, nhưng vẫn có khả thi giải được bài toán này! Thiep gợi ý như thế này:

- Từng đoạn ống, xác định được text số đầu ống ví dụ 29-28, tuy nhiên muốn đúng theo hướng dòng chảy thì hướng của polyline (ống) phải cùng hướng mũi tên dòng chảy (startpoint tại text 29, endpoint tại text 28)

- Từng đoạn ống sẽ tìm được điểm giữa, từ điểm giữa tìm được 2 đường ranh thửa (màu số 153) gần nó nhất, gọi là đường LWP.

- Từng LWP lọc lấy các point nút đỉnh cho vào 1 listpoint để lọc lấy các text A, B, C, D, E và 1 text số (dùng mã hàm (ssget “CP” listpoint ‘((0 . “TEXT”)))

- Từng các text A, B, C, D sẽ tìm được insertpoint và tìm được khoảng cách từ text đến LWP. So sánh để tìm ra 1 text chữ gần LWP nhất. Nối với text số để tạo nhãn của tiểu khu.

Tuy nhiên, trong bản vẽ của svba1608 có 1 đường ống rất dài từ điểm 18 -> 21 -> 25 -> 31 -> 30, không xử lý được, cần phải cắt ra 4 đoạn mới làm được.

Vài điều trao đổi với các bác, Lúc rày Thiep đang bận lắm, muốn ra lisp này nhưng đành chịu, nhờ các bác nào rảnh tay giúp svba1608 với.

Chào Svba, lisp này A Thiep phải mất 1 ngày CN tươi đẹp và chỉnh sửa thêm vào tối thứ 2. Bạn chạy thử nhé, nên nhớ:

- Lisp chỉ đúng khi đường ống cắt qua các text đầu ống (nét w = 0)

- chỉ đúng các bản vẽ cùng tỷ lệ bản đồ, nếu khác thì chưa chắc đúng. Các tên layer không thay đổi

- Các đường ống phải cắt từng đoạn và cùng chiều với mũi tên.

http://www.cadviet.com/upfiles/2/svba_1.lsp

Chúc thành công!

  • 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
svba1608    624
Chào Svba, lisp này A Thiep phải mất 1 ngày CN tươi đẹp và chỉnh sửa thêm vào tối thứ 2. Bạn chạy thử nhé, nên nhớ:

- Lisp chỉ đúng khi đường ống cắt qua các text đầu ống (nét w = 0)

- chỉ đúng các bản vẽ cùng tỷ lệ bản đồ, nếu khác thì chưa chắc đúng. Các tên layer không thay đổi

- Các đường ống phải cắt từng đoạn và cùng chiều với mũi tên.

http://www.cadviet.com/upfiles/2/svba_1.lsp

Chúc thành công!

 

Cảm ơn anh Thiệp! Cảm ơn anh Thiệp rất nhiều!

Nhờ anh Thiệp giành thêm mấy phút tươi đẹp nữa viết giùm svba mấy dòng hướng dẫn sử dụng. Khi svba chạy lisp thì lisp báo như sau:

 

"Command: svba

undo Current settings: Auto = On, Control = All, Combine = Yes

Enter the number of operations to undo or [Auto/Control/BEgin/End/Mark/Back]

: be

Command:

Select objects: 1 found

 

Select objects:

; error: bad argument type: consp nil"

 

 

PS : SVba don't stay up late :D . Good luck

 

Cảm ơn anh Tuệ nhiều! Lisp anh viết giùm em chạy rất tốt.

Svba cũng không muốn thức khuya, tiếc rằng thức khuya là "nghề" của svba cũng như bao anh chị em làm về công việc kỹ thuật khác, khi mà KTX ĐHKT có những phòng ít khi đi ngủ trước 2h đêm.

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
thiep    263
Cảm ơn anh Thiệp! Cảm ơn anh Thiệp rất nhiều!

Nhờ anh Thiệp giành thêm mấy phút tươi đẹp nữa viết giùm svba mấy dòng hướng dẫn sử dụng. Khi svba chạy lisp thì lisp báo như sau:

 

"Command: svba

undo Current settings: Auto = On, Control = All, Combine = Yes

Enter the number of operations to undo or [Auto/Control/BEgin/End/Mark/Back]

<1>: be

Command:

Select objects: 1 found

 

Select objects:

; error: bad argument type: consp nil"

Sorry svba, Thiep đã xóa 3 dòng khi đã hoàn chỉnh bây giờ thì chép lại cho svba đây:

;| Lisp thong ke duong ong nuoc
copyright by thiep 03/2010|;
(defun SS-entlst (ss / c L)
 (setq c -1)
 (repeat (sslength ss)
   (setq L (cons (ssname ss (setq c (1+ c)))
	  L
    )
   )
 )
 (reverse L)
)
;;;-------------------------
(defun filter (lstent otype olayer / kq)
 (foreach pp lstent
    (setq tt (entget pp))
    (if (and
   (member (cons 0 otype) tt)
   (member (cons 8 olayer) tt)
 )
      (setq kq (append kq (list pp)))
    )
 )
 kq
)
;;;======================
(defun timgan (p lst / dmin ppluu)
 (foreach pp lst
   (setq d (distance p pp))
   (if	(or (not dmin) (> dmin d))
     (setq dmin d
    ppluu pp
     )
   )
 )
 ppluu
)
;;;======================
(defun dxf (code ent)
 (cdr (assoc code (entget ent)))
)
;;;;;;;;;;;;;;;;;;;;;;;;;
(defun SAVE_MODE ()
 (setq	OLD_OSMODE    (getvar "OSMODE")
OLD_ORTHOMODE (getvar "ORTHOMODE")
 )
 (setvar "cmdecho" 0)
 (setvar "OSMODE" 0)
)
(defun RESTORE ()
 (setvar "osmode" OLD_OSMODE)
 (setvar "ORTHOMODE" OLD_ORTHOMODE)
)
;|===========================================================
                     MAIN LISP                              
===========================================================|;
(defun c:svba (/ lstent	   lstLWP_tn lstLWP_vh lsttextt	 tsi
	 Tstyle	   lstpoCP   lstenttext		 lstLWP_vh_text
	 TblObj	   p1	     rows      nRow	 nCol
	 objLwp	   lstpoF    len       midpo	 param
	 ang	   mfen1     mfen2     ss	 lstLWP2
	 lsttext_ong	     po	       str	 val
	 lstval	   lstvalpo  doan      pogan	 tenkhu
	 strso	   lstpo     p2	       en
	)
 (or ActDoc
     (setq ActDoc (vla-get-ActiveDocument (vlax-get-acad-object)))
 )
 (or *Model* (setq *Model* (vla-get-ModelSpace ActDoc)))
 (vla-StartUndoMark ActDoc)
 (SAVE_MODE)
 (setq	lstent	  (SS-entlst (ssget '((0 . "LWPOLYLINE,TEXT")
			      (8 . "vh,thoatnuoc,sttnut,sttkhu")
			     )
		     )
	  )
lstLWP_tn (filter lstent "LWPOLYLINE" "thoatnuoc")
lstLWP_vh (filter lstent "LWPOLYLINE" "vh")
lsttextt  (filter lstent "TEXT" "sttnut")
 )
 (setq	p1   (append (acet-list-remove-nth 2 (getvar "extmin")) (list 0.0))
rows (length lstLWP_tn)
 )
 (setq	tsi    (acet-dxf 40 (entget (nth 0 lsttextt)))
Tstyle (acet-dxf 7 (entget (nth 0 lsttextt)))
 )
 (setq oldtsi tsi)
 (setq	tsi (getreal
      (strcat "\nChon do cao text <" (rtos oldtsi 2 0) "> : ")
    )
 )
 (if (null tsi)
   (setq tsi oldtsi)
 )
;;;------------------
 (foreach entLWP2 lstLWP_vh
   (if	(or (vlax-curve-isClosed entLWP2)
    (eq (car lstpoCP) (last lstpoCP))
)
     (progn
(setq lstpoCP (ACET-GEOM-VERTEX-LIST entLWP2))
(setq lstenttext
       (SS-entlst
	 (ssget	"CP"
		lstpoCP
		'((0 . "TEXT") (8 . "sttkhu"))
	 )
       )
)
(setq lstLWP_vh_text
       (cons (cons entLWP2 lstenttext) lstLWP_vh_text)
)

     )
   )
 )
;;;---------------

 (if (> (atof (substr (getvar "ACADVER") 1 4)) 16.0)
   (progn
     (setq TblObj (vla-addtable
	     *Model*
	     (vlax-3d-point p1)
	     (1+ rows)
	     3
	     tsi
	     (* 6 tsi)
	   )
     )
     (vla-UnMergeCells TblObj 0 0 0 2)
     (vla-MergeCells TblObj 0 0 1 2)
     (vla-put-vertcellmargin TblObj (* 0.5 tsi))
     (mapcar '(lambda (x) (vla-setTextHeight TblObj x tsi))
      (list acTitleRow acHeaderRow acDataRow)
     )
     (mapcar
'(lambda (x) (vla-setAlignment TblObj x acMiddleCenter))
(list acTitleRow acHeaderRow acDataRow)
     )
     (mapcar
'(lambda (x) (vla-SetTextStyle TblObj x Tstyle))
(list acTitleRow acHeaderRow acDataRow)
     )
     (vla-setText TblObj 0 0 "§O¹N èNG")
     (vla-setText TblObj 0 1 "TIÓU KHU")
     (vla-SetColumnWidth TblObj 0 (* 8.4 tsi))
     (setq nRow 1)

;;;  ===================;tung duong ong
     (foreach entLWP lstLWP_tn
(setq objLwp  (vlax-ename->vla-object entLWP)
      lstpoF (ACET-GEOM-VERTEX-LIST entLWP)
      len     (vla-get-Length objLwp)
      midpo   (vlax-curve-getPointAtDist objLwp (/ len 2))
      param   (vlax-curve-getParamAtPoint objLwp midpo)
      ang      (angle '(0 0 0) (vlax-curve-getFirstDeriv objLwp param))
      mfen1   (polar midpo (+ ang (/ pi 2)) 75)
      mfen2   (polar midpo (- ang (/ pi 2)) 75)
      ss      (ssget "F" lstpoF '((0 . "TEXT") (8 . "sttnut")))
      lstLWP2 (SS-entlst (ssget	"F"
				(list mfen1 mfen2)
				'((0 . "LWPOLYLINE") (8 . "vh"))
			 )
	      )
)
(if ss
  (progn
    (setq lsttext_ong (SS-entlst ss))
;;;    ==============;tung text chu dau ong sttnut
    (foreach ent lsttext_ong
      (setq po	   (dxf 10 ent)
	    str	   (dxf 1 ent)
	    val	   (read str)
	    lstval (append (list str) lstval)
      )
    )
    (setq doan (strcat (nth 1 lstval) "-" (nth 0 lstval)))
    (and doan (vla-setText TblObj nRow 0 doan))
    (setq nCol 1)
  )
)
;;;    =========================;tung duong bao / 2 
(foreach entLWP2 lstLWP2
  (setq	lstenttext
	 (acet-dxf entLWP2 lstLWP_vh_text)
	lstpo nil
	lstvalpo nil
  )
;;;      ====================;tung text trong duong bao
  (foreach ent lstenttext
    (setq po (dxf 10 ent))
    (if	(distof (dxf 1 ent))
      (setq strso (dxf 1 ent))
      (progn
	(setq str      (dxf 1 ent)
	      lstpo    (cons po lstpo)
	      lstvalpo (cons (cons po str) lstvalpo)
	)
      )
    )
  )
  (setq	pogan  (timgan midpo lstpo)
	tenkhu (strcat strso (acet-dxf pogan lstvalpo))
  )
  (and tenkhu (vla-setText TblObj nRow nCol tenkhu))
  (setq nCol (1+ nCol))
)
(setq nRow (1+ nRow))
     )
   )					;END progn
 )					;END IF
 (vla-Update TblObj)
 (setq	en  (entlast)
ss (acet-list-to-ss (list en))
 )
 (setq
   p2 (acet-ss-drag-move ss p1 "\n<<< Place Table >>> ")
 )
 (vla-put-InsertionPoint TblObj (vlax-3d-point p2))
 (vla-Update TblObj)
 (vlax-release-object TblObj)
 (RESTORE)
 (vla-StartUndoMark ActDoc)
 (princ "\nThank you for use my lisp: svba.lsp!")
 (princ)
)

  • 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
svba1608    624

Cảm ơn anh Thiệp!

Svba đã load lisp mới và thử lại nhưng vẫn bị lỗi sau:

 

Command: svba

 

Select objects: 1 found

 

Select objects: 1 found, 2 total

 

Select objects: 1 found, 3 total

 

Select objects:

 

Chon do cao text : 5

; error: bad argument type: stringp nil

 

Nhờ anh Thiệp xem giùm!

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
thiep    263
Cảm ơn anh Thiệp!

Svba đã load lisp mới và thử lại nhưng vẫn bị lỗi sau:

Command: svba

Select objects: 1 found

Select objects: 1 found, 2 total

Select objects: 1 found, 3 total

Select objects:

Chon do cao text : 5

; error: bad argument type: stringp nil

 

Nhờ anh Thiệp xem giùm!

Bản vẽ của svba đã sửa lại chưa? Đường ống dài đi qua các nút 18, 21, 25, 31,30 svba đã cắt từng khúc tại các nút chưa? Tại điểm nút 18, chưa bị 2 đường ống cắt qua text 18, svba phải sửa lại.

  • 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
svba1608    624
Bản vẽ của svba đã sửa lại chưa? Đường ống dài đi qua các nút 18, 21, 25, 31,30 svba đã cắt từng khúc tại các nút chưa? Tại điểm nút 18, chưa bị 2 đường ống cắt qua text 18, svba phải sửa lại.

 

Dạ, đường ống dài đi qua các nút 18,21,25,31,30 em đã cắt từ khi sử dụng lisp tính chiều dài của bác Bình. Vừa rồi em cũng sửa lại nhưng em vẫn chưa chạy được lisp. Nhờ anh Thiệp check giùm:

 

"Command: svba

 

Select objects: Specify opposite corner: 644 found

 

Select objects:

 

Chon do cao text : 20

bad argument type: lselsetp nil"

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
Khách
Chủ đề này bây giờ đã bị đóng lại để trả lời thêm.

×