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

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

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

Trong bản vẽ của bạn trình bày 4 bước như sau :

B1: Ví dụ tại điểm gấp khúc này -> điểm A

B2: Copy sang mặt cắt 2 và cần NS

B3: Xác định giao điểm với đường tự nhiên bên MC2

B4: Nối 2 điểm A và B cắt với truc x-x ta có điểm cần nội suy thứ nhất C

 

Tue_NV chưa hiểu ý lắm. Ở bước 1 và bước 2 thì tương đối đã hiểu ý, riêng bước 3, bước 4 thì chưa hiểu ý. Bạn có thể nói rõ hơn dữ liệu đầu vào Input và dữ liệu đầu ra Output được không?

Rõ ràng nhất bạn nên minh hoạ bằng những con số cụ thể trong file .dwg của bạn

 

- Nối những điểm đó tìm được ta có đường cần nội suy. (Với giới hạn nội suy là phạm vi của MC nhỏ hơn. : câu này chưa hiểu lắm. Bạn vui lòng nói rõ hơn, càng cụ thể, chi tiết, tỉ mỉ càng tốt. OKay?

Với giới hạn nội suy là phạm vi của MC nhỏ hơn. Câu này đúng là hơi khó hiểu thật. Có lẽ bạn ấy muốn nói: số điểm gấp khúc của mặt cắt nội suy được sẽ lấy theo mặt cắt có số điểm gấp khúc nhỏ hơn. và bề rộng của mặt cắt nội suy được cũng lấy theo bề rộng của mặt cắt nà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
Với giới hạn nội suy là phạm vi của MC nhỏ hơn. Câu này đúng là hơi khó hiểu thật. Có lẽ bạn ấy muốn nói: số điểm gấp khúc của mặt cắt nội suy được sẽ lấy theo mặt cắt có số điểm gấp khúc nhỏ hơn. và bề rộng của mặt cắt nội suy được cũng lấy theo bề rộng của mặt cắt này.

 

Cảm ơn các bác quan tâm, em đã làm lại file Cad của em để các bác hiểu hơn. EM cảm ơn các Bác.

Link: http://www.cadviet.com/upfiles/2/hoicadviet_1.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
Chào tất cả mọi người,

Mình đang gặp một khó khăn này mong mọi người chỉ giúp.

Sau khi tạo ra một dạng block ATT đặc biệt thì mình muốn copy với một công sai là a. Nếu áp dụng lisp od_oc_oca.lsp thì không được, nếu áp dụng lisp dstt.lsp hoặc 1.lsp cũng không được. Dạ đây là block của mình:

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

Chào bạn dlongkts,

Bạn hãy xài thử cái lisp này xem sao nhé.

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

Lưu ý là cái block mẫu khi chôn để copy phải đúng kiểu loại như các block mà bạn đã gửi ở file trên nghĩa là nó chỉ có một thuộc tính duy nhất là cái text của bạn và cái text này phải có ký tự cuối cùng là ký tự số. Hơn nữa là chỉ có một chữ số ở cuối thôi chứ không được là hai chữ số trở lên bạn nhé. Bởi vì nếu từ hai chữ số trở lên thì chỉ có thay đổi giá trị của chữ số cuối thôi còn các chữ số phía trước sẽ giữ nguyên và như vậy kết quả sẽ không như ý của bạn đâu.

Lisp này mình chỉ chỉnh sửa một chút từ cái lisp cũ gửi bạn mà thôi. Bạn có thể so sánh nó với cái lisp cũ để hiểu nó nhé. Bạn cũng có thể kết hợp cả hai cái lisp này với cái lisp bạn sửa để trở thành một lisp duy nhất sử dụng thêm các hàm điều kiện bạn ạ.

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
Chào bạn Mr.Cuong,

Bạn đã khỏi ốm chưa nhỉ?? Chúc bạn mau lành để bạn có thể diễn đạt rõ hơn cái ý bạn muốn bạn nhé. Từ đó mọi người mới dễ dàng giúp bạn được.

Bạn hãy nói rõ việc bạn muốn chia nhiều đường polyline là chia cùng một lúc hay là chia lần lượt từng đường một theo ý của bạn????

Việc chia các đường polyline này thành từng đoạn mà mỗi đoạn có độ dài theo ý người dùng ở đây là bạn muốn nói về độ dài tuyệt đối hay tương đối???

Và các đường polyline này được chia theo cùng một kiểu chia hay mỗi đường lại có một cách chia khác nhau hở bạn???

Việc bạn càng trình bày rõ ràng, cụ thể cái ý bạn muốn sẽ càng giúp bạn nhanh chóng có được sự giúp đỡ cần thiết bạn ạ. Đừng ngại trình bày cụ thể vì không phải ai cũng có đủ trí thông minh để có thể hiểu đúng ý bạn được. Hãy cứ coi như bạn đang trình bày yêu cầu của mình với một chú em tập sự nào đó bạn nhé.

Một lần nữa mong bạn sớm bình phục và hoàn thành tâm nguyện của bạn. Hề hề hề...

Rất cảm on bạn đã quan tâm dến mình. Mình đã bình phục hoàn toàn rùi, rất mong bạn có thể giúp được mình việc này.

Mình có 1 bản vẽ bao gồm rất nhiều đường poline mà khoảng cách giữa các điểm point tren đường poline ấy không cái nào bằng cái nào. Vì vậy mình muốn có 1 lệnh cho mình chọn tất cả các đường poline đó, nhập khoảng cách giữa các điểm point và Enter. Kết quả tất cả các đường poline mình đã chọn có khoảng các giữa các point đều bằng nhau và bằng giá trị mà mình nhập vào. Khi chia đường poline có thể chia theo trục X hay trục Y hay theo chiều của đường poline cung được.Khi chia đương poline dó thành n phần có giá trị cho trước thì phần lẻ dồn lại cuối cùng và bạn giữ nguyên cho mình.

Tiện đây bạn có thể hộ mình 1 việc nứa được ko ?. Vẫn là bản vẽ trên, các đường poline đó có khoảng cách giữa các điểm không bằng nhau. Bạn có thể giúp mình làm sao để khoảng cách giữ các điểm không nhỏ hơn 1 số cho trước. Túc là khi mình chọn tất cả các đường poline song nhập khoảng cách nhỏ nhất vào và bản vẽ của mình khong có đoạn thẳng nào nhỏ hơn giá trị mà mình đã nhập.

Cảm ơn bạn nhìu nha,chúc bạn luôn đạt được mọi ước mơ trong cuộc số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
Chào bạn dlongkts,

Bạn hãy xài thử cái lisp này xem sao nhé.

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

Lưu ý là cái block mẫu khi chôn để copy phải đúng kiểu loại như các block mà bạn đã gửi ở file trên nghĩa là nó chỉ có một thuộc tính duy nhất là cái text của bạn và cái text này phải có ký tự cuối cùng là ký tự số. Hơn nữa là chỉ có một chữ số ở cuối thôi chứ không được là hai chữ số trở lên bạn nhé. Bởi vì nếu từ hai chữ số trở lên thì chỉ có thay đổi giá trị của chữ số cuối thôi còn các chữ số phía trước sẽ giữ nguyên và như vậy kết quả sẽ không như ý của bạn đâu.

Lisp này mình chỉ chỉnh sửa một chút từ cái lisp cũ gửi bạn mà thôi. Bạn có thể so sánh nó với cái lisp cũ để hiểu nó nhé. Bạn cũng có thể kết hợp cả hai cái lisp này với cái lisp bạn sửa để trở thành một lisp duy nhất sử dụng thêm các hàm điều kiện bạn ạ.

Chúc bạn thành công.

 

Đầu tuần rồi, mình chúc bạn có nhiều niềm vui

Bạn ơi, mình làm chỉ làm thiết kế kiến trúc thôi, mình ko biết viết lisp. Cái file cad mà mình gửi cho bạn là muốn thay đổi 2 chữ số trước. Ví dụ: x28a.b4 thành x28b.b4 ...; x28.b4 thành x29.b4 ...

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
Đầu tuần rồi, mình chúc bạn có nhiều niềm vui

Bạn ơi, mình làm chỉ làm thiết kế kiến trúc thôi, mình ko biết viết lisp. Cái file cad mà mình gửi cho bạn là muốn thay đổi 2 chữ số trước. Ví dụ: x28a.b4 thành x28b.b4 ...; x28.b4 thành x29.b4 ...

Chào bạn dlongkts,

Với trường hợp 1: x28a->x28b->x28c .... thì không khó, nhưng bạn phải lưu ý rằng cái text trong block mẫu phải có cấu tạo giống y chang cái bạn đã gửi, tức là cái cụm text cần thay thế phải có đúng 4 ký tự và ký tự cuối cùng phải là chữ cái bạn nhé.

Với trường hợp 2: bạn phải lưu ý tới điều mình đã post trong bài trứớc. Đó là chuỗi text trong block mẫu chỉ được phép có 1 ký tự số ở cuối cùng. (thực ra nếu có hơn một ký tự số cũng được, nhưng vấn đề lọc sẽ phức tạp hơn và mình chưa nghĩ ra thuạt giải).

Nếu bạn đồng ý vậy thì mình có thể chỉnh lại cái lisp đã gửi bạn để bạn xài tạm trong lúc các bác khác chưa đưa ra cái hay hơn bạ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
Rất cảm on bạn đã quan tâm dến mình. Mình đã bình phục hoàn toàn rùi, rất mong bạn có thể giúp được mình việc này.

Mình có 1 bản vẽ bao gồm rất nhiều đường poline mà khoảng cách giữa các điểm point tren đường poline ấy không cái nào bằng cái nào. Vì vậy mình muốn có 1 lệnh cho mình chọn tất cả các đường poline đó, nhập khoảng cách giữa các điểm point và Enter. Kết quả tất cả các đường poline mình đã chọn có khoảng các giữa các point đều bằng nhau và bằng giá trị mà mình nhập vào. Khi chia đường poline có thể chia theo trục X hay trục Y hay theo chiều của đường poline cung được.Khi chia đương poline dó thành n phần có giá trị cho trước thì phần lẻ dồn lại cuối cùng và bạn giữ nguyên cho mình.

Tiện đây bạn có thể hộ mình 1 việc nứa được ko ?. Vẫn là bản vẽ trên, các đường poline đó có khoảng cách giữa các điểm không bằng nhau. Bạn có thể giúp mình làm sao để khoảng cách giữ các điểm không nhỏ hơn 1 số cho trước. Túc là khi mình chọn tất cả các đường poline song nhập khoảng cách nhỏ nhất vào và bản vẽ của mình khong có đoạn thẳng nào nhỏ hơn giá trị mà mình đã nhập.

Cảm ơn bạn nhìu nha,chúc bạn luôn đạt được mọi ước mơ trong cuộc sống.

Chào bạn Mr.Cuong,

Yêu cầu thứ nhất, bạn thử xài cái lisp này xem đã đúng ý chưa nhé.

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

Còn yêu cầu thứ hai mình vẫn chưa thể hiểu được ý của bạn. Các polyline là bạn đã có sẵn, vậy thì khoảng cách giữa các điểm vertex của nó là cố định chứ bạn làm sao cho nó thay đổi theo ý bạn được???. Hay là bạn muốn kiểm tra các polyline này xem nó có phù hợp với cái yêu cầu của bạn là khoảng cách giũa các đỉnh kế tiếp phải nhỏ hơn một khoảng cách cho truớc nào đó????

Mong bạn giải thích rõ hơn mới có thể làm lisp được.

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
Đầu tuần rồi, mình chúc bạn có nhiều niềm vui

Bạn ơi, mình làm chỉ làm thiết kế kiến trúc thôi, mình ko biết viết lisp. Cái file cad mà mình gửi cho bạn là muốn thay đổi 2 chữ số trước. Ví dụ: x28a.b4 thành x28b.b4 ...; x28.b4 thành x29.b4 ...

Chào bạn dlongkts,

Trong lúc chờ bạn trả lời, mình cải tạo thử cái lisp cũ xem có đúng ý bạn không nhé. Bạn có thể chạy thử với cả hai yêu cầu mà bạn đưa ra sử dụng các block mà bạn đã post nhé.

http://www.cadviet.com/upfiles/2/3_1.lsp

Và đây là kết quả mình chạy thử:

dlong.jpg

Hy vọng bạn sẽ vui.

  • 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

không biết có cao thủ nào viết cái lisp copy mặt bằng cửa rồi tường tự xén luôn kể cả nét hồ tô va hach nữa ko? nó gồm có câu lênh rồi chọn đối tượng chọn bắt điểm trên đốii tượng rồi di chuyển tới tường (thêm lựa chọn from) là kết thuc cho kết quả,các nét tường và hồ tô còn lại sau khi bị xén là 1 đối tương thôi như pline chẳng hạn, nếu có rồi thì chỉ chỗ cho mình với! mình đã tìm trong diễn đàn nhưng chưa thấ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
Chào bạn dlongkts,

Trong lúc chờ bạn trả lời, mình cải tạo thử cái lisp cũ xem có đúng ý bạn không nhé. Bạn có thể chạy thử với cả hai yêu cầu mà bạn đưa ra sử dụng các block mà bạn đã post nhé.

http://www.cadviet.com/upfiles/2/3_1.lsp

Và đây là kết quả mình chạy thử:

dlong.jpg

Hy vọng bạn sẽ vui.

 

Chào bạn phamthanhbinh lisp gần đây nhất mà bạn đưa cho mình dùng tốt đấy tuy vậy trong lúc dùng mình thấy có một nhược điểm nhỏ: copy từ 1 số tự nhiên lên 2 số tự nhiên không được như y muốn.

Ví dụ: copy Y9.B1 để thành Y10.B1 thì lại thành Y:.B1; y;.b1; y<.b1; y=.b1. Mong bạn sửa giúp mì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
Chào bạn phamthanhbinh lisp gần đây nhất mà bạn đưa cho mình dùng tốt đấy tuy vậy trong lúc dùng mình thấy có một nhược điểm nhỏ: copy từ 1 số tự nhiên lên 2 số tự nhiên không được như y muốn.

Ví dụ: copy Y9.B1 để thành Y10.B1 thì lại thành Y:.B1; y;.b1; y<.b1 y=".b1." mong b s gi m>

Chào bạn dlongkts,

Lỗi như vậy là do cái dòng lisp này:

(if (and (> as 48)(

Bạn hãy sửa lại thành:

(if (and (>= as 48)(

 

Sau đó chạy lại xem nhé.

Sở dĩ sai là do mình không kiểm tra kỹ thôi, với mã ascii là 48 đó là sữ số 0, còn mã ascii là 57 thì đó là chữ số 9 bạn ạ.

Vì thế khi bạn chọn block mẫu có chuỗi y9 cái mã chữ số 9 sẽ là 57 và thế là lisp cũ coi đó là trường hợp chữ cái chứ không phải là chữ số bạn ạ. Rất xin lỗi bạn vì sự cầu thả của mình.

Hy vọng bạn sẽ hài lòng sau khi sửa như trên.

Chúc bạn vui.

 

PS: Vì công việc của bạn cần tới lisp nên bạn hãy cố gắng tìm hiểu về lisp đi nhé. Nếu bạn cố gắng một chút thì công việc sẽ trôi chảy hơn mà không bị lệ thuộc vào người khác nhiều nữa bạn ạ.

Chỉ cần có khái niệm cơ bản về nó là bạn sẽ có thể tự sửa những lỗi như trên của lisp ngay bạn ạ. Hy vọng bạn sớm thông tỏ mọi ngõ ngách trong 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

Chào bác Hoành và các bác cao thủ, em nhờ các bác giải quyết hộ em vấn đề này cái. Em có cái block att như bản vẽ đính kèm ( tem sử dụng đất trong quy hoạch), vấn đề là làm thế nào để mình chỉ nhập 3 số liệu diện tích lô đất, diện tích xây dựng, tầng cao là lisp tự động tính hết các thông số còn lại.

Mong các bác ra tay hộ em cái.

http://www.cadviet.com/upfiles/2/tem_1.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
Chào bác Hoành và các bác cao thủ, em nhờ các bác giải quyết hộ em vấn đề này cái. Em có cái block att như bản vẽ đính kèm ( tem sử dụng đất trong quy hoạch), vấn đề là làm thế nào để mình chỉ nhập 3 số liệu diện tích lô đất, diện tích xây dựng, tầng cao là lisp tự động tính hết các thông số còn lại.

Mong các bác ra tay hộ em cái.

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

Lisp của anh Nataca giúp được bạn đấy

http://www.cadviet.com/forum/index.php?showtopic=14223

  • 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
Chào bác Hoành và các bác cao thủ, em nhờ các bác giải quyết hộ em vấn đề này cái. Em có cái block att như bản vẽ đính kèm ( tem sử dụng đất trong quy hoạch), vấn đề là làm thế nào để mình chỉ nhập 3 số liệu diện tích lô đất, diện tích xây dựng, tầng cao là lisp tự động tính hết các thông số còn lại.

Mong các bác ra tay hộ em cái.

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

 

Không cần quá nhiều công phu với Autolisp (cái này Autolisp coi bộ bó tay quá!)

Hãy dùng ACA và tham khảo thêm các bài viết từ chủ đề: Autocad Architecture

Bạn sẽ làm được điều mong muốn và còn hơn thế nữa

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

 

Ở đây Thông số Diện tích lô đất, Chu vi lô đất bạn lấy một cách tự động tùy thuộc bạn gắn vào đối tượng

(Ví dụ lấy tự động từ Polyline). Đề xuất dùng AEC Polygon để thay thế

 

Có 03 thông tin cần nhập: Diện tích xây dựng; Tầng cao và Ký hiệu lô

Các thông tin còn lại nội suy

 

Tuy nhiên đối với Quy hoạch sử dụng đất. Thông tin như vậy vẫn chưa đủ

Bạn nên thêm các thông tin sau:

01. Phân loại đất: Đất công cộng; Đất ở; Đất công nghiệp' Đất cây xanh,..

02. Tầng cao: Tối đa, tối thiểu

03. Mật độ cây xanh tối thiểu

....

  • 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

Nhờ các bạn viết giùm 1 đoạn lisp như sau:khi ta gõ lệnh tbv thì sẽ tạo ra một layer tên THEP và màu mặc định của nó là màu số 1,và layer thứ hai tên DUONGBAO màu mặc định là màu số 2.......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
không biết có cao thủ nào viết cái lisp copy mặt bằng cửa rồi tường tự xén luôn kể cả nét hồ tô va hach nữa ko? nó gồm có câu lênh rồi chọn đối tượng chọn bắt điểm trên đốii tượng rồi di chuyển tới tường (thêm lựa chọn from) là kết thuc cho kết quả,các nét tường và hồ tô còn lại sau khi bị xén là 1 đối tương thôi như pline chẳng hạn, nếu có rồi thì chỉ chỗ cho mình với! mình đã tìm trong diễn đàn nhưng chưa thấy!

sao không thấy ai quan tam hết vậy ta!

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ảm ơn các bác quan tâm, em đã làm lại file Cad của em để các bác hiểu hơn. EM cảm ơn các Bác.

Link: http://www.cadviet.com/upfiles/2/hoicadviet_1.dwg

Chào bạn dkkx3a,

Hề hề hề, sau một hồi vật lộn với cái bạn đưa ra, được sự giúp sức của các bác khác trên diễn đàn như Nguyenhoanh, SSG, ThaiStreetz, Nacata,.... mình viết ra cái này bạn thử coi có dùng được không nhé.

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

Lisp này mình nội suy dựa trên các đỉnh của các đường polyline mặt cắt đã biết chứ không phải theo các điểm chọn trước trên polyline mặt cắt. Nếu bạn muốn làm như vậy thì chỉ việc thay thế các tập hợp điểm đã chọn của bạn vào tập hợp các đỉnh của polyline mà thôi. Việc này theo mình là không quá khó khăn nữa, bạn hãy tự viết thử xem dựa trên cái lisp này bạn nhé.

Chúc bạn thành công.

  • Vote tăng 5

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 không thấy ai quan tam hết vậy ta!

Chào bạn ktv14,

Tại bạn trình bày hơi khó hiểu nên chả ai biết bạn muốn cái gì thì quan tâm thế nào nhỉ???

Tốt nhất bạn nên có bản vẽ mẫu trong đó thể hiện rõ cái trước khi bạn dùng lisp và cái bạn muốn có sau khi dùng lisp bạn nhé. Nếu được bạn hãy tham khảo cách trình bày vấn đề của bạn dkkx3a cũng ngay trong topic này.

Khi đó mình tin là trên diễn đàn sẽ có nhiều người giúp được bạn.

Chúc bạn vui khi tham gia diễn đà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
Chào bạn dkkx3a,

Hề hề hề, sau một hồi vật lộn với cái bạn đưa ra, được sự giúp sức của các bác khác trên diễn đàn như Nguyenhoanh, SSG, ThaiStreetz, Nacata,.... mình viết ra cái này bạn thử coi có dùng được không nhé.

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

Lisp này mình nội suy dựa trên các đỉnh của các đường polyline mặt cắt đã biết chứ không phải theo các điểm chọn trước trên polyline mặt cắt. Nếu bạn muốn làm như vậy thì chỉ việc thay thế các tập hợp điểm đã chọn của bạn vào tập hợp các đỉnh của polyline mà thôi. Việc này theo mình là không quá khó khăn nữa, bạn hãy tự viết thử xem dựa trên cái lisp này bạn nhé.

Chúc bạn thành công.

 

Cảm ơn Bác ThanhBinh đã giúp đỡ (cái này em cũng rất cần), LISP chạy thật tuyệt vời, nhưng cón một số hạn chế. Em đã dùng và có chút mạo "mụi":

- Lisp của Bác chạy sai khi chế độ bắt điểm chưa tắt (em sửa lại).

- Lisp của Bác chạy xong giả sử em muốn chọn vị trí undo lại thì rất mất công (em sửa lại).

- Lisp của Bác lấy tọa độ điểm không áp dụng được với Polyline được nó chỉ áp dụng được từ anh LWPOLYLINE trở lên (thì phải). Khi load nó báo:

Chon mat cat thu nhat ben trai; error: bad argument type: lentityp nil

(Cái này em không sửa được).

 

Tóm lại em rất là cảm ơn Bác đã viết LSP này, để tiết kiệm thời gian cho bác (một chút) em thêm vào LISP hai cái em làm được, còn cái vấn đề thứ 3 em không làm được nên chơi thủ công bằng cách Bác Hoành chỉ:

 

Để convert LWPOLYLINE to POLYLINE, có nghĩa là mình đang làm 1 việc đi lùi lịch sử (vì LWPOLYLINE tiến bộ hơn POLYLINE), bạn hãy làm như sau:

1. Gõ PLINETYPE tại dòng lệnh rồi gõ vào 0. Mục đích để ngăn cản mọi sự tiến bộ của PLINE.

2. Save as bản vẽ hiện hành sang định dạng AutoCAD R12/LT2 DXF (*.dxf).

3. Sau đó mở lại bản vẽ dxf vừa save as.

 

Để convert POLYLINE sang LWPOLYLINE, hãy làm như sau:

1. Gõ PLINETYPE tại dòng lệnh rồi gõ vào 2. Mục đích để cho phép áp dụng sự tiến bộ của PLINE.

2. Gõ Convert tại dòng lệnh, rồi chọn All, All.

 

Vậy bạn nào có nhu cầu như em thì dùng lại cái mã em đã MODY... của Bác ThanhBinh, và chơi cách thứ ba (của B.Hoành vẽ). Thì dù sao trước khi nội suy mình cũng phải xén cho hai cái mặt cắt có bề rộng bằng nhau còn gì:

Đoạn mã em thêm chút mắm múi cho các bạn "kém như em".......

 

;========================
;========================
(defun giao(ent1 ent2 / ob1 ob2 g kq sd)
(Vl-Load-Com)
(setq ob1 (vlax-ename->vla-object ent1)
  ob2 (vlax-ename->vla-object ent2)
)
(setq g (vlax-variant-value (vla-IntersectWith ob1 ob2 acExtendNone)))
(if (/= (vlax-safearray-get-u-bound g 1) -1)
(setq g (vlax-safearray->list g))
(setq g nil)
)
(if g
(progn
	  (setq kq nil
			sd (fix (/ (length g) 3))
	  )
	  (repeat sd
			  (setq kq (append kq (list (list (car g) (cadr g) (caddr g))))
					g (cdddr g)
			  )
	  )
	  kq
 )
 nil
)
(if kq (setq gi (nth 0 kq)))
)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;




(defun c:nsmc ()
(vl-load-com)
(setvar "cmdecho" 0)
(command ".undo" "begin")
(setq Oldos (getvar "osmode"))
(setvar "osmode" 0)
(setq Oldpd (getvar "pdmode"))
(setvar "PLINEWID" 0)
(setq ent1 (car (entsel "\nChon mat cat thu nhat ben trai"))
  Obj1 (vlax-ename->vla-object ent1)
  plst1 (list))
(while (/= "SEQEND" (cdr(assoc 0 (entget(entnext ent1)))))
   (setq ent1 (entnext ent1)
		 elst1 (entget ent1))
(if (/= 16 (cdr (assoc 70 elst1)))
(setq plst1 (append plst1 (list (cdr (assoc 10 elst1)))))
)
)
(setq plst1 (loclst plst1))
(setq ent2 (car(entsel "\nChon mat cat thu hai ben phai"))
  Obj2 (vlax-ename->vla-object ent2)
  plst2 (list)
  plst (list))
(setq xt1 (car(cdr(assoc 10 (entget(car(entsel "\nChon duong truc thu nhat")))))))
(setq xt2 (car(cdr(assoc 10 (entget(car(entsel "\nChon duong truc thu hai")))))))
(setq xtc (car(cdr(assoc 10 (entget(car(entsel "\nChon duong truc mat noi suy")))))))
(setq L (abs (- xt1 xt2)))
(foreach pnt plst1
(setq lin (command "xline" "v" (list (+ (car pnt) L) (cadr pnt)) "")
  entp (entlast)
  Objp (vlax-ename->vla-object entp))
(giao entp ent2)
(setvar "pdmode" 3)
(command "point" gi)
(command "pline" pnt gi "")
(setq linp (entlast))
(setq gi nil)
(entdel entp)
(setq lin (command "xline" "v" (list (- (+ (car pnt) xtc) xt1) (cadr pnt)) "")
  lin (entlast)
  Objp (vlax-ename->vla-object lin))
(giao linp lin)
(setvar "pdmode" 3)
(command "point" gi)
(entdel linp)
(entdel lin)

(setq plst (append plst (list gi)))
)
(setq plst (loclst plst))
(while (/= "SEQEND" (cdr(assoc 0 (entget(entnext ent2)))))
   (setq ent2 (entnext ent2)
		 elst2 (entget ent2))
(if (/= 16 (cdr (assoc 70 elst2)))
(setq plst2 (append plst2 (list (cdr (assoc 10 elst2)))))
)
)
(setq plst2 (loclst plst2))
(setq ent1 (vlax-vla-object->ename obj1))
(foreach pnt plst2
(setq lin (command "xline" "v" (list (- (car pnt) L) (cadr pnt)) "")
  entp (entlast)
  Objp (vlax-ename->vla-object entp))
(giao entp ent1)
(setvar "pdmode" 3)
(command "point" gi)
(command "pline" pnt gi "")
(setq linp (entlast))
(setq gi nil)
(entdel entp)
(setq lin (command "xline" "v" (list (- (+ (car pnt) xtc) xt2) (cadr pnt)) "")
  lin (entlast)
  Objp (vlax-ename->vla-object lin))
(giao linp lin)
(setvar "pdmode" 3)
(command "point" gi)
(entdel linp)
(entdel lin)
(setq plst (append plst (list gi)))
)
(setq plst (loclst plst))
(setvar "pdmode" oldpd)
(setvar "osmode" Oldos)
(command "pline")
(foreach p plst (command p))
(command "")
(command ".undo" "end")
(princ "\nCopy of Pham Thanh Binh - www.CadViet.com")
(princ)
)

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(defun loclst(L / Ln x);;;Delete Same items in List
(setq L (vl-sort L '(lambda (x1 x2) (< (car x1) (car x2)))))
(foreach x L (if (not (member x Ln)) (setq Ln (append Ln (list x)))))
Ln
)

;========================

  • Vote tăng 4

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 dùng CAD2004 không dùng cách trên được, mình phải vẽ lại đường tự nhiên bằng lệnh "_3dpoly" thì LSP chạy bình thường. Cảm ơn Bác ThanhBinh, bác nâng cấp lên mọi đường được không Bác.

 

 

Các Bác giúp em đoạn mã làm sao để lấy được các đối tượng được tạo thành sau thời điểm mình chọn: thời điểm A và đến thời điểm cần lấy số đối tượng ấy: khi đó mình có một tập hợp chọn, các đối twợng sinh ra từ những lệnh bất ký.

Em cảm ơn các Bá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
Nhờ các bạn viết giùm 1 đoạn lisp như sau:khi ta gõ lệnh tbv thì sẽ tạo ra một layer tên THEP và màu mặc định của nó là màu số 1,và layer thứ hai tên DUONGBAO màu mặc định là màu số 2.......Chân thành cảm ơn.

Không ai giúp được mình sao?

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ông ai giúp được mình sao?

Bạn có cần đặt nhiều layer ko mà phải khổ thế? Theo mình lisp có làm được có khi thao tác còn lâu hơn đặt layer.

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ông ai giúp được mình sao?

 

 

Bạn dùng tạm cái này thử, chắc được:

 

(defun c:tbv()

(SETVAR "CMDECHO" 0)

(if (= (tblsearch "layer" "THEP") nil)

(command "-layer" "n" "THEP" "c" "1" "THEP" "")

)

(if (= (tblsearch "layer" "DUONGBAO") nil)

(command "-layer" "n" "DUONGBAO" "c" "2" "DUONGBAO" "")

)

(PRINC "\n...........Da tao xong LayEr cho ban.")

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

×