Đến nội dung


Hình ảnh
* * * - - 8 Bình chọn

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


  • Chủ đề bị khóa Chủ đề bị khóa
3783 replies to this topic

#381 phamthanhbinh

phamthanhbinh

    biết lệnh adcenter

  • Moderator
  • PipPipPipPipPipPipPip
  • 6007 Bài viết
Điểm đánh giá: 3113 (tuyệt vời)

Đã gửi 16 November 2009 - 11:53 AM

Đầ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é
  • 0
Chúc các quý Anh trên diễn đàn luôn khỏe, đẻ thêm được nhiều thứ để mót.

#382 phamthanhbinh

phamthanhbinh

    biết lệnh adcenter

  • Moderator
  • PipPipPipPipPipPipPip
  • 6007 Bài viết
Điểm đánh giá: 3113 (tuyệt vời)

Đã gửi 16 November 2009 - 01:05 PM

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.
  • 0
Chúc các quý Anh trên diễn đàn luôn khỏe, đẻ thêm được nhiều thứ để mót.

#383 phamthanhbinh

phamthanhbinh

    biết lệnh adcenter

  • Moderator
  • PipPipPipPipPipPipPip
  • 6007 Bài viết
Điểm đánh giá: 3113 (tuyệt vời)

Đã gửi 16 November 2009 - 04:28 PM

Đầ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.c...files/2/3_1.lsp
Và đây là kết quả mình chạy thử:
Hình đã gửi
Hy vọng bạn sẽ vui.
  • 1
Chúc các quý Anh trên diễn đàn luôn khỏe, đẻ thêm được nhiều thứ để mót.

#384 ktv14

ktv14

    Chưa sử dụng CAD

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

Đã gửi 17 November 2009 - 09:42 AM

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!
  • 0

#385 dlongkts

dlongkts

    biết vẽ line

  • Members
  • PipPip
  • 24 Bài viết
Điểm đánh giá: 0 (bình thường)

Đã gửi 17 November 2009 - 11:19 AM

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.c...files/2/3_1.lsp
Và đây là kết quả mình chạy thử:
Hình đã gửi
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
  • 0

#386 phamthanhbinh

phamthanhbinh

    biết lệnh adcenter

  • Moderator
  • PipPipPipPipPipPipPip
  • 6007 Bài viết
Điểm đánh giá: 3113 (tuyệt vời)

Đã gửi 17 November 2009 - 11:47 AM

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

Chào bạn dlongkts,
Lỗi như vậy là do cái dòng lisp này:
(if (and (> as 48)(< as 57))
Bạn hãy sửa lại thành:
(if (and (>= as 48)(<= as 57))

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.
  • 0
Chúc các quý Anh trên diễn đàn luôn khỏe, đẻ thêm được nhiều thứ để mót.

#387 fbh81

fbh81

    biết vẽ ellipse

  • Members
  • PipPip
  • 51 Bài viết
Điểm đánh giá: 10 (tàm tạm)

Đã gửi 18 November 2009 - 03:06 PM

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.c...les/2/tem_1.dwg
  • 0

#388 Thaistreetz

Thaistreetz

    biết lệnh adcenter

  • Advance Member
  • PipPipPipPipPipPipPip
  • 903 Bài viết
Điểm đánh giá: 505 (tốt)

Đã gửi 18 November 2009 - 04:13 PM

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.c...les/2/tem_1.dwg

Lisp của anh Nataca giúp được bạn đấy
http://www.cadviet.c...showtopic=14223
  • 1

Hình đã gửi
IN HIM, I TRUST. THE TRUST IN MY GOD


#389 fbh81

fbh81

    biết vẽ ellipse

  • Members
  • PipPip
  • 51 Bài viết
Điểm đánh giá: 10 (tàm tạm)

Đã gửi 18 November 2009 - 04:51 PM

Thank bác, nhưng cái này thấy có vẻ phức tạp ghê.
  • 0

#390 trinhvqh

trinhvqh

    biết lệnh block

  • Members
  • PipPipPipPipPipPip
  • 408 Bài viết
Điểm đánh giá: 222 (khá)

Đã gửi 18 November 2009 - 07:43 PM

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.c...les/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.c...les/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
....
  • 2

#391 fbh81

fbh81

    biết vẽ ellipse

  • Members
  • PipPip
  • 51 Bài viết
Điểm đánh giá: 10 (tàm tạm)

Đã gửi 19 November 2009 - 09:24 AM

Thank bạn trinhvqh, tôi đã tìm đc topic của bạn rồi, rất bổ ích
  • 0

#392 t031285

t031285

    biết vẽ rectang

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

Đã gửi 19 November 2009 - 11:09 AM

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.
  • 0

#393 ktv14

ktv14

    Chưa sử dụng CAD

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

Đã gửi 19 November 2009 - 12:07 PM

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!
  • 0

#394 phamthanhbinh

phamthanhbinh

    biết lệnh adcenter

  • Moderator
  • PipPipPipPipPipPipPip
  • 6007 Bài viết
Điểm đánh giá: 3113 (tuyệt vời)

Đã gửi 19 November 2009 - 01:55 PM

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.c...oicadviet_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.
  • 5
Chúc các quý Anh trên diễn đàn luôn khỏe, đẻ thêm được nhiều thứ để mót.

#395 phamthanhbinh

phamthanhbinh

    biết lệnh adcenter

  • Moderator
  • PipPipPipPipPipPipPip
  • 6007 Bài viết
Điểm đánh giá: 3113 (tuyệt vời)

Đã gửi 19 November 2009 - 02:07 PM

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.
  • 0
Chúc các quý Anh trên diễn đàn luôn khỏe, đẻ thêm được nhiều thứ để mót.

#396 xaakiii_mboet

xaakiii_mboet

    biết vẽ line

  • Members
  • PipPip
  • 21 Bài viết
Điểm đánh giá: 6 (bình thường)

Đã gửi 19 November 2009 - 06:05 PM

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
)
;========================
  • 4

#397 dkkx3a

dkkx3a

    biết lệnh trim

  • Members
  • PipPipPip
  • 190 Bài viết
Điểm đánh giá: 57 (tàm tạm)

Đã gửi 19 November 2009 - 06:22 PM

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.
  • 0
TỰ SỰ
Biển vào chiều buồn giữa cô liêu
Sóng vỗ bờ bạc đầu con nước
Khi biển động như lòng ta chợt động
Biển ồn ào nhưng thực rất dịu êm.......

#398 t031285

t031285

    biết vẽ rectang

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

Đã gửi 19 November 2009 - 06:30 PM

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?
  • 0

#399 vanthiep

vanthiep

    biết vẽ pline

  • Members
  • PipPip
  • 62 Bài viết
Điểm đánh giá: 17 (tàm tạm)

Đã gửi 19 November 2009 - 06:38 PM

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.
  • 0

#400 dkkx3a

dkkx3a

    biết lệnh trim

  • Members
  • PipPipPip
  • 190 Bài viết
Điểm đánh giá: 57 (tàm tạm)

Đã gửi 19 November 2009 - 06:39 PM

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)
)
  • 1
TỰ SỰ
Biển vào chiều buồn giữa cô liêu
Sóng vỗ bờ bạc đầu con nước
Khi biển động như lòng ta chợt động
Biển ồn ào nhưng thực rất dịu êm.......