Jump to content
InfoFile
Tác giả: Tue_NV
Bài viết gốc: 100057
Tên lệnh: acc
Viết lisp theo yêu cầu [phần 2]


Sony hãy thử với đoạn code này.
Đây là Lisp nội suy cao độ Z của 1 điểm P khi biết P1(x1,y1,z1) và P2(x2,y2,z2) với z1 và z2 nhập từ bàn phím và điều kiện P phải nằm trên P1P2 (P có thể nằm trong hoặc nằm ngoài đoạn P1P2

Filename: 100057_acc.lsp
Tác giả: funnyzui
Bài viết gốc: 101005
Tên lệnh: srs svn svn1 cst nst
Viết lisp theo yêu cầu [phần 2]
Chào mọi người, mình mới tìm thấy đoạn code này. Nhưng ko hiểu sao có lệnh dùng đc, có lệnh ko sử dụng đc. Sẵn nhờ mọi người giúp mình lược bớt code nếu đoạn code nào thừa vì cái này nằm trong 1 bộ lisp thống kê mà ông anh mình cho.

Mấy cái lệnh SRS, SVN, SVN1 thì dễ hiểu rồi. Lệnh CST thì cũng ok, nhưng cách sử dụng hơi kỳ kỳ. Nó ko chuyển về đc STYLE hiện hành là STYLE mình...
>>
Chào mọi người, mình mới tìm thấy đoạn code này. Nhưng ko hiểu sao có lệnh dùng đc, có lệnh ko sử dụng đc. Sẵn nhờ mọi người giúp mình lược bớt code nếu đoạn code nào thừa vì cái này nằm trong 1 bộ lisp thống kê mà ông anh mình cho.

Mấy cái lệnh SRS, SVN, SVN1 thì dễ hiểu rồi. Lệnh CST thì cũng ok, nhưng cách sử dụng hơi kỳ kỳ. Nó ko chuyển về đc STYLE hiện hành là STYLE mình chọn ngay sau khi click mà phải thêm 1 lần chọn vào hàng chữ đó nữa. Còn lệnh NST là gì? làm gì? thì hông hiểu và hông sử dụng đc. Vậy nếu nó thừa mình bỏ đi cũng ko sao fải ko? Hơi tiếc vì cũng tò mò muốn biết chức năng của nó <_<

Mình thấy trên dđ có lệnh LH, LL nhằm chuyển về layer hiện hành và chuyển layer đối tượng về layer hiện hành rất hay. Vì vậy, xin mạn phép mọi người viết giùm lisp có chức năng tương tự cho TEXT STYLE và DIM STYLE. Xin cảm ơn mọi người!

Đây là code đã nói:

<<

Filename: 101005_srs_svn_svn1_cst_nst.lsp
Tác giả: phamthanhbinh
Bài viết gốc: 104808
Tên lệnh: chla
Viết lisp theo yêu cầu [phần 2]


Chào bạn Ksor Phong,
Bạn dùng thử lisp này nhé, Lisp chỉ đổi tất cả các đối tượng về cùng lớp mà bạn lựa chọn chứ chưa đổi màu các đối tượng có màu không phải là bylayer. Bạn dùng thử nếu thấy cần bổ sung gì thì hãy post lên nhé. Chúc bạn vui.

Filename: 104808_chla.lsp
Tác giả: phamngoctukts
Bài viết gốc: 108729
Tên lệnh: vetuong
Viết lisp theo yêu cầu [phần 2]

Với code này bạn đã ofset được tuờng sang hai bên còn trim với filet có lẽ phải nhờ các cao thủ khác.

Filename: 108729_vetuong.lsp
Tác giả: phamthanhbinh
Bài viết gốc: 110029
Tên lệnh: tktxt
Viết lisp theo yêu cầu [phần 2]

Hề hề hề,
Xin lỗi bạn Truongthanh,
Do mình chỉ kiểm tra hàm tách chuỗi thấy nó tách tốt mà không sửa lại trong hàm (seplst .....) bạn ạ.
Bạn chỉ cần sửa chút xíu như sau là OK liền.
Bạn thay dòng code: lo (substr c 1 4) trong hàm (seplst ..... ) thành lo t1
Cái lisp đã sửa như sau:


Thành thật xin lỗi bạn.

Filename: 110029_tktxt.lsp
Tác giả: phamthanhbinh
Bài viết gốc: 110659
Tên lệnh: tdd
Viết lisp theo yêu cầu [phần 2]

Chào hdt4151,
Bạn không đọc bài của mình sao???
Cái đó không phải là lỗi mà là cái mình muốn bạn phải tự suy nghĩ và tìm ra cách giải quyết. Mình đã gợi ý mà bạn không chịu suy nghĩ. Nếu bạn vẫn không hiểu được khái niệm tọa độ tương đối thì bạn nên học lại đi nhé. Từ bảng tọa độ tuyệt đối đã có, việc chuyển nó về tọa độ tương đối chả có gì là khó...
>>

Chào hdt4151,
Bạn không đọc bài của mình sao???
Cái đó không phải là lỗi mà là cái mình muốn bạn phải tự suy nghĩ và tìm ra cách giải quyết. Mình đã gợi ý mà bạn không chịu suy nghĩ. Nếu bạn vẫn không hiểu được khái niệm tọa độ tương đối thì bạn nên học lại đi nhé. Từ bảng tọa độ tuyệt đối đã có, việc chuyển nó về tọa độ tương đối chả có gì là khó khăn cả mà bạn không chịu suy nghĩ thì quả thật đáng buồn cho một cán bộ kỹ thuật bạn ạ. Hình như thói quen ỷ lại đã ngấm vào máu bạn rồi thì phải.
Việc dùng lisp hay dùng tay để làm việc đó cũng chả có gì khác nhau cả. Chỉ là vấn đề của bạn mà thôi.
Việc bạn chỉ muốn xài lisp mà không muốn tìm hiểu về nó cho kỹ sẽ không phải là điều hay đâu, vì nếu bạn không hiểu sẽ có những trường hợp mà sau khi bạn dùng một cái lisp vay mượn nào đó thì máy của bạn sẽ có những bất thường mà bạn không thể hiểu được và thế là lại ối u ơi hay sao???
Mong rằng bạn hãy cố gắng để hiểu và vận dụng được những điều đơn giản nhất trong lisp nhằm phục vụ tốt cho công việc của bạn.
Lisp bạn đây, nếu bạn chưa hài lòng thì hãy cố mà học để làm cho nó hoàn thiện hơn. Mình chỉ có thể giúp bạn được vậy thôi.


PS: bạn hãy chịu khó so sánh cái lisp của mình và của bác phamngoctukts sẽ thấy những điểm khác biệt và sẽ hiểu được vì sao có sự khác biệt ấy từ việc so sánh kết quả của nó bạn nhé. Chỗ nào chưa hiểu thì hỏi lại, dần dần bạn sẽ hiểu mà thôi.

Chúc bạn vui.
<<

Filename: 110659_tdd.lsp
Tác giả: phamthanhbinh
Bài viết gốc: 111058
Tên lệnh: tdd
Viết lisp theo yêu cầu [phần 2]


Hề hề hề,
Không phải đâu là không phải đâu, thấy bạn hdt4151 hỏi bác trả lời tưởng là bác biết rồi chớ. Tại vì cái điều kiện của lisp này là trong vùng chọn phải có các point rồi. Nếu hổng có là nó đâu có chạy được. Điều này mình đã nói rõ khi post bài rồi mừ ......
Ý của mình đã nói rõ trong bài trả lời bạn hdt4151. Bác chỉ cần point trước vài phát trong các...
>>

Hề hề hề,
Không phải đâu là không phải đâu, thấy bạn hdt4151 hỏi bác trả lời tưởng là bác biết rồi chớ. Tại vì cái điều kiện của lisp này là trong vùng chọn phải có các point rồi. Nếu hổng có là nó đâu có chạy được. Điều này mình đã nói rõ khi post bài rồi mừ ......
Ý của mình đã nói rõ trong bài trả lời bạn hdt4151. Bác chỉ cần point trước vài phát trong các boundary là nó chạy vè vè bác à.
Đây là cái mình đã cho thêm hàm điều kiện if để tránh cái lỗi nớ, đồng thời mình bổ sung luôn cả phần lọc các point trùng nhau hoặc trùng đỉnh boundary như bác đã gợi ý.
Lisp nó như rừng là do viết đi viết lại, thêm mắm thêm muối đó bác, mà mình ngại viết lại từ đầu nên cứ nhè thằng cũ mà thêm thôi. Lại ngại nghỉ tên mới cho các biến nên cứ lặp đi lặp lại mấy cái pd, dp, pt..... làm nó rối thêm bác ạ.
Do là thợ đụng nên đụng dâu sửa đó nó mới thế. Rất mong bác thông cảm.
Tuy nhiên mình cũng đã cố tách bạch nó ra thành từng đoạn với chức năng riêng để dễ theo dõi.
Cụ thể cấu tạo của nó như sau:
1/- Đoạn đầu cho đến dòng code (while (/= p nil) .... là của bác nên chắc bác đã rõ. Mình chỉ bổ sung thêm cái dòng chọn điểm gốc tọa độ và hàm điều kiện cho thằng này là vì yêu cầu của bạn hdt4151 muốn được chọn gốc thoải mái. Đồng thời thêm vô thằng (getvar "ucsorg") để lấy tọa độ của gốc tọa độ người dùng (Cái này cũng là do bạn hdt4151 đẻ ra yêu cầu bổ sung ạ)
2/- Bắt đầu vào vòng lặp để cho người dùng được chọn nhiều vùng cần ghi tọa độ. (while (/= p nil)
2.1/- Bước thứ nhất trong vòng lặp được tính tới lúc kết thúc hàm (while (vlax-.......)Nhằm tạo ra danh sách các tọa độ đỉnh của boundary.
Cái này cũng của bác. Mình chỉ thêm vô tạo cái danh sách dtlist kết hợp giữa vị trí đỉnh hay cũng chính là parameter của đỉnh với tọa độ của nó để sử dụng cho việc dùng vl-sort sau này thôi bác ạ.
2.2/- Bước thứ hai từ hàm (setq ssp (ssget......)) cho đến kết thúc hàm (if ssp........). Ấy là dùng để xác định tập hợp các điểm trong vùng chọn và loại bớt những thằng không nằm trên cạnh boundary, đồng thời gán thêm các cặp (parameter tọa-độ) vào cái dtlst đã được lập ở trên.
2.3/- Bước thứ ba từ (setq dplst (vl-sort....)) cho đến kết thúc hàm (setq dplst dplst1) là để xử lý thằng dtlst này, sắp xếp lại theo tứ tự của parameter và lọc bớt những thằng trùng nhau theo như góp ý của bác.
2.4/- Bước thứ tư từ (setq pdlst (list)) cho tới hết hàm (if (/= ans "N") là mình kế thừa cái lisp của bác nhằm tạo ra các record trong dlst phục vụ cho việc xuất text sau này. Ở đây có hơi khác chút xíu ở chỗ cách tạo ra pdlst. Và cái biến này là mình kế thừa cái pdlst của bác vì lười đặt tên mới. cũng vì lười nên lại đẻ ra cái thằng (setq pdlst (list)) bác ạ, nhằm tránh bị thống kê các đỉnh boundary hai lần.
2.5/- Bước cuối cùng từ (setq pdlst (append pdlst (list (car pdlst)))) cho đến khi kết thúc vòng lặp (while (/= p nil)...) là những cái mình làm thêm do yêu cầu của bạn hdt4151 nhằm chuẩn bị cho vòng lặp tiếp theo.
(setq pdlst (append pdlst (list (car pdlst)))) hàm này để thêm điểm đầu của boundary vào danh sách để phục vụ cho việc ghi text lên cạnh boundary do mình hiểu nhầm khẩu vị của bạn ấy.
(setq dlst (append (list "\n") dlst)) Hàm này nhằm tạo một dòng trống giữa các boundary khác nhau trên file text.
(setq hlst (append hlst (list pdlst))
dplst (list)
ptlst (list)
) ;;;;;;;;;;;;;;;; End setq
Khúc này để tạo một list các point có trên mỗi boundary tách biệt với nhau phục bụ việc ghi text ra bản vẽ và đặt các biến dplst, ptlst về trạng thái ban đầu nhằm tránh việc râu ông nọ cắm cằm bà kia. Hề hề hề.....
3/- Là phần ghi dữ liệu ra file text và ghi lên bản vẽ. bác đã quá rành.
Trong phần này chỉ có lưu ý là mình sử dụng thêm hàm con (wrtxt .....) có thể bị trùng tên với các hàm ghi text ra file chứ không phải vẽ text lên bản vẽ. Vì lười đặt tên bác ạ. Do vậy khi dùng cần tắt các lisp loanh quanh đi kẻo mà trùng tên lệnh thì toi bác ạ.
Thực tế thì cái hàm wrtxt này đã bị mình vô hiệu hóa bằng cách củ chuối rồi. Bác có thể khôi phục nó để test thử coi sao. Vì đã mất công đẻ ra mà lại bóp chết nó nghe hơi buốt ruột nên bác thông cảm nha. Cứ để đó có ai thích thì khôi phục lại dùng chơi bác nhể....

Dông dài mãi, Lisp đây bác ạ


Hề hề hề, mong bác thông cảm chớ có giận mình vì vô duyên. Chúc bác vui.
<<

Filename: 111058_tdd.lsp
Tác giả: phamthanhbinh
Bài viết gốc: 111111
Tên lệnh: tdd
Viết lisp theo yêu cầu [phần 2]

Hề hề hề,
Có giải pháp rồi, không phải pick từng chú nữa. sử dụng hàm ssget với tùy chọn "C" . Tuy nhiên để dùng tùy chọn này phải có hai điểm của khung chọn, do vậy mình xài hàm acet-ent-geomextents có trong bộ express tool để có được hai điểm đó.
Các bác xem nha.

Filename: 111111_tdd.lsp
Tác giả: phamngoctukts
Bài viết gốc: 111587
Tên lệnh: tdd
Viết lisp theo yêu cầu [phần 2]

Chào Bác Bình, Chào bạn hdt4151!!
Mình nói thì là nói vậy thôi chứ thực ra mình vẫn tiếp tục nghiên cứu tiếp yêu cầu của bạn.
Cuối cùng thì cũng có giải pháp cho bạn. Đúng với mọi trường hợp dùng line và pline thẳng.
Bác Bình thử xem code rất đơn giản mà mình không nghĩ ra sớm. Code này đang bị chậm phần repeat do chưa biết đặt điều kiện gì cho hợp lý.
Bạn...
>>

Chào Bác Bình, Chào bạn hdt4151!!
Mình nói thì là nói vậy thôi chứ thực ra mình vẫn tiếp tục nghiên cứu tiếp yêu cầu của bạn.
Cuối cùng thì cũng có giải pháp cho bạn. Đúng với mọi trường hợp dùng line và pline thẳng.
Bác Bình thử xem code rất đơn giản mà mình không nghĩ ra sớm. Code này đang bị chậm phần repeat do chưa biết đặt điều kiện gì cho hợp lý.
Bạn hdt4151 và các bác test thử code rồi cho ý kiến.

<<

Filename: 111587_tdd.lsp
Tác giả: phamngoctukts
Bài viết gốc: 111821
Tên lệnh: tdd
Viết lisp theo yêu cầu [phần 2]

Các bạn thử cái này xem sao nhé.

Filename: 111821_tdd.lsp
Tác giả: Tue_NV
Bài viết gốc: 111850
Tên lệnh: ndt
Viết lisp theo yêu cầu [phần 2]

Ý thứ 1 là : Lisp của bạn bao giờ cũng xuất toạ độ của toàn bộ nhóm đối tượng. Trong khi đó, User chỉ muốn xuất chỉ 1 nhóm mà thôi. Mình chỉ chọn 1 nhóm để xử lý mà thôi, bạn à. Vì theo Tue_NV biết là sẽ có các nhóm thửa độc lập với nhau, không liên quan đến nhau.
Ý thứ 2 : Về việc xử lý trong Lisp của bạn, Tue_NV đọc qua thôi, chứ chua lấn sâu vô nhiều, nên không thể...
>>

Ý thứ 1 là : Lisp của bạn bao giờ cũng xuất toạ độ của toàn bộ nhóm đối tượng. Trong khi đó, User chỉ muốn xuất chỉ 1 nhóm mà thôi. Mình chỉ chọn 1 nhóm để xử lý mà thôi, bạn à. Vì theo Tue_NV biết là sẽ có các nhóm thửa độc lập với nhau, không liên quan đến nhau.
Ý thứ 2 : Về việc xử lý trong Lisp của bạn, Tue_NV đọc qua thôi, chứ chua lấn sâu vô nhiều, nên không thể đưa ra lời góp ý cho bạn được. Bạn thông cảm. Chỉ có điều là việc xử lý điểm đầu và điểm cuối LINE của bạn rất hay
Ý thứ 3 : Hàm getfiled cho xuất ra hộp thoại và cho phép User lưu ở đâu? cho phép đặt tên khác nhau, và đương nhiên là sẽ lưu file sang .txt hay .xls
Ý thứ 4 :
Bạn có thể tham khảo cái này

<<

Filename: 111850_ndt.lsp
Tác giả: Doan Van Ha
Bài viết gốc: 184462
Tên lệnh: ha
Tác giả: phamngoctukts
Bài viết gốc: 111931
Tên lệnh: tdd
Viết lisp theo yêu cầu [phần 2]

Chào bạn hdt4151!
Lúc sửa lisp mình quên không sửa hết nên mới xảy ra lỗi như thế. Đã fix lại cho bạn rồi. Tại lúc test làm trên có 1 nhóm đối tượng thấy nó đúng thì port lên luôn. Bạn test lại lisp này.

Filename: 111931_tdd.lsp
Tác giả: pfievxd
Bài viết gốc: 121550
Tên lệnh: tdt
Tính diện tích tạo nên từ những vùng giao nhau giữa 2 đường polyline
Tính 2 loại diện tích nằm giữa 2 polyline đây :

Filename: 121550_tdt.lsp
Tác giả: phamthanhbinh
Bài viết gốc: 183903
Tên lệnh: xoa
Lisp xóa đối tượng

Hề hề hề,
Vậy bạn thủ dùng cái này xem sao nhé.
Mình có thay đổi lại một chút cái lisp cũ như sau:
1/- Yêu cầu chọn text mẫu để xác định khoảng cách cần xóa.(như cũ)
2/- Nhập nội dung các text cần xóa. Cái này mới hơn vì có thể nội dung các text cần xóa của bạn khác với của bạn Nguyen ngoc Son.
3/- Lisp sẽ xóa tất cả các text có nội dung như bạn đã nhập và...
>>

Hề hề hề,
Vậy bạn thủ dùng cái này xem sao nhé.
Mình có thay đổi lại một chút cái lisp cũ như sau:
1/- Yêu cầu chọn text mẫu để xác định khoảng cách cần xóa.(như cũ)
2/- Nhập nội dung các text cần xóa. Cái này mới hơn vì có thể nội dung các text cần xóa của bạn khác với của bạn Nguyen ngoc Son.
3/- Lisp sẽ xóa tất cả các text có nội dung như bạn đã nhập và các mũi tên tương ứng với các text này
Đây là code:


Chúc bạn vui.
<<

Filename: 183903_xoa.lsp
Tác giả: phamngoctukts
Bài viết gốc: 111972
Tên lệnh: tdd
Viết lisp theo yêu cầu [phần 2]

Thể theo yêu cầu của bác (đẻ trứng hộ bạn hdt4151) em đã hoàn thành lisp như sau. Bác test thử và cho ý kiến.

Filename: 111972_tdd.lsp
Tác giả: phamngoctukts
Bài viết gốc: 112167
Tên lệnh: tdd
Viết lisp theo yêu cầu [phần 2]

Thank bác đã test giúp. Em đã fix lại rồi.

Filename: 112167_tdd.lsp
Tác giả: phamngoctukts
Bài viết gốc: 112640
Tên lệnh: tddmoi
Viết lisp theo yêu cầu [phần 2]

Theo như góp ý của Bác em đã phân ra đánh số thứ thự theo nhóm rồi.
Còn các boundary là arc hoặc pline cong thực ra trong chắc địa rất ít dùng nên em không nghiên cứu tiếp vào phần này.

http://img1-photo.apps.zing.vn/upload/original/2010/10/16/15/56/1287219407205766127_574_574.jpg

Filename: 112640_tddmoi.lsp
Tác giả: phamthanhbinh
Bài viết gốc: 114090
Tên lệnh: tkbv
Viết lisp theo yêu cầu [phần 2]

Chào bạn innuzasha,
Có phải bạn cần cái này không???
Lần sau nên post rõ ràng nội dung cái bạn cần nhé, lisp này là mình tự phỏng đoán mà viết nên có thể không giống cái bạn cần. Hãy tự trách mình chứ đừng trách cái lisp bạn nhé. Hề hề hề....

Chúc bạn vui, nếu cần bổ sung gì thì post lên nhé. Hề hề hề.

Filename: 114090_tkbv.lsp
Tác giả: phamngoctukts
Bài viết gốc: 114710
Tên lệnh: dtcd
Viết lisp theo yêu cầu [phần 2]

Của bạn đây. Đúng với file bạn up lên.

Filename: 114710_dtcd.lsp

Trang 67/330

67