Đến nội dung


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

Xem giúp đoạn lisp của mình vẽ pline có nhập chiều dài và góc


  • Please log in to reply
52 replies to this topic

#21 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 27 August 2010 - 11:11 AM

Cảm ơn hảo ý của bác nhưng em muốn tự mình viết ra mới thú và có thể học đc nhìu hơn chứ nhờ người khác júp thì không còn ý nghĩa nữa. Em chỉ cần những lời gợi ý chân thành và những ý kiến júp đỡ mang tính xây dựng nền tảng rùi em sẽ tự xây dựng trên nền tảng đó. Theo như bác nói zạ là ý tưởng của em là hoàn toàn có thể rùi có fải hok!? Zạ thì em sẽ cố gắng tìm hỉu thêm để 1 ngày nào đó có thể đem khoe với các bác! :D

Rất cảm ơn mọi người và rất mong mọi người sẽ típ tục chỉ bảo dẫn dắt 1 con gà như em đi đúng hướng ạ!! :D

Hề hề hề,....
Chú gà này gáy hay ra phết nhẩy. Quả là chí lý, tự mình làm ra vẫn khoái hơn là đi mua về xài mà chả hiểu gì về nó. Nhỡ mua phải của không ngon thì ức lắm lắm. Rất mong chú gà này sẽ trở thành chú gà cồ trong làng Lisp nhẩy.....
Cái ý tưởng của bạn không phải là không chơi được. Tuy nhiên bạn cần cố gắng thêm chút nữa.
Lisp cho phép bạn sử dụng tất cả các lệnh của CAD với cú pháp (command tên lệnh tham số giá trị ......)
Tỷ như bác Duy đã cho bạn một cái lệnh Insert rồi đó. CHỉ có điều bạn cần lưu ý ở đây là mỗi lệnh sẽ sử dụng một hay nhiều tham số khác nhau y như trong CAD vậy, tên lệnh và tên tham số phải là chuỗi, còn giá trị tham số thì tùy từng tham số mà bạn phải nhập đúng thì nó mới chạy.
Về vấn đề này thì trăm hay không bằng tay quen, bạn cứ làm thử mỗi lệnh vài chục nhát là vỡ tung tóe ra ngay.
Việc nhớ các tham số này cũng là một vấn đề lôi thôi vì thường thì trí nhớ sẽ bị suy giảm dần, vậy nên cách tốt nhất là bạn chả cần nhớ gì cả, cứ nhớ các thao tác khi vẽ trong CAD ra sao thì nhập tham số theo như vậy. Còn tên tham số thì bạn cứ gõ lệnh CAD trên dòng command là nó sẽ hiện ra thôi.
Còn một điều nữa cần lưu ý là nếu lệnh chỉ dùng một loại tham số thì không cần nhập tên tham số (tỷ như lệnh line), còn nếu có nhiều tham số thì phải nhập theo đúng trình tự trong CAD kẻo Cad nó hiểu sai đi. Để kết thúc lệnh nếu trong CAD mình dùng enter thì trong lisp mình gõ "".
Ngoài ra trong lisp còn có lệnh pause để thoát khỏi lisp trả về mán hình Cad cho bạn nhập giá trị tham số từ màn hình bạn ạ.
Ấy là vài thứ mình mót được từ diễn đàn muốn trao đổi với bạn. Vì là của đi mót nên có thể nó chả ngon lắm nhưng cũng xài tàm tãm bạn ạ.
Hề hề hề,...
Chúc bạn vui khi tham gia diễn đàn.
  • 2
Chúc các quý Anh trên diễn đàn luôn khỏe, đẻ thêm được nhiều thứ để mót.

#22 18011985

18011985

    biết lệnh properties

  • Members
  • PipPipPipPip
  • 255 Bài viết
Điểm đánh giá: 61 (tàm tạm)

Đã gửi 27 August 2010 - 11:31 AM

Èo không biết các bạn dùng lệnh insert thế nào chứ bản vẽ mà không có block đấy thì coi như toi. Bạn nên thêm phần tạo block khi không có block đó trong bản vẽ.
  • 0
Trăng 16 trăng tròn
Em 16 bụng ... như trăng

Hướng dẫn sử dụng diễn đàn:
Để cảm ơn hay bài viết có ích: Ấn dấu + cuối bài.
Không vừa lòng hay bài spam: Ấn dấu - cuối bài.

#23 hungdlcm

hungdlcm

    biết vẽ line

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

Đã gửi 27 August 2010 - 11:33 AM

Èo bạn chưa chạy thử đoạn trên à. Nó đã chèn và quay block rồi đó thôi. Chèn tại điểm p1 và quay theo góc p1 p2 rồi mà (đâu có hiện hộp thoại đâu). Còn muốn nhập góc thì

(command ".INSERT" "trudien" p1 1 1 goc)

À mình chỉnh bài trên 1 chút do đoạn ban đầu là lisp nguyên của bạn chưa sữa nên chạy bị lỗi.


Uhm. Tại lúc hỏi anh là em chưa hiểu rõ cú pháp lệnh Insert của CAD viết trong LISP thế nào nên mới hỏi jờ thì nhờ bác nói rõ chỗ nhập góc em đã hiểu rùi.
Nhân đây các bác cho em hỏi mình có thể xem cú pháp lệnh CAD để viết trong LISP ở đâu không nhỉ? Vì cú pháp lệnh CAD khi viết trong LISP thì khác so với trong CAD. Em muốn hỏi để biết chỗ ngâm cứu và tự tìm hiểu. Nhiều khi như ở trên em muốn viết lệnh INSERT trong LISP thì không biết cú pháp nó chứa các phần tử nào cả nên cũng đơ lun.
  • 0

#24 hungdlcm

hungdlcm

    biết vẽ line

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

Đã gửi 27 August 2010 - 11:53 AM

Hề hề hề,....
Chú gà này gáy hay ra phết nhẩy. Quả là chí lý, tự mình làm ra vẫn khoái hơn là đi mua về xài mà chả hiểu gì về nó. Nhỡ mua phải của không ngon thì ức lắm lắm. Rất mong chú gà này sẽ trở thành chú gà cồ trong làng Lisp nhẩy.....
Cái ý tưởng của bạn không phải là không chơi được. Tuy nhiên bạn cần cố gắng thêm chút nữa.
Lisp cho phép bạn sử dụng tất cả các lệnh của CAD với cú pháp (command tên lệnh tham số giá trị ......)
Tỷ như bác Duy đã cho bạn một cái lệnh Insert rồi đó. CHỉ có điều bạn cần lưu ý ở đây là mỗi lệnh sẽ sử dụng một hay nhiều tham số khác nhau y như trong CAD vậy, tên lệnh và tên tham số phải là chuỗi, còn giá trị tham số thì tùy từng tham số mà bạn phải nhập đúng thì nó mới chạy.
Về vấn đề này thì trăm hay không bằng tay quen, bạn cứ làm thử mỗi lệnh vài chục nhát là vỡ tung tóe ra ngay.
Việc nhớ các tham số này cũng là một vấn đề lôi thôi vì thường thì trí nhớ sẽ bị suy giảm dần, vậy nên cách tốt nhất là bạn chả cần nhớ gì cả, cứ nhớ các thao tác khi vẽ trong CAD ra sao thì nhập tham số theo như vậy. Còn tên tham số thì bạn cứ gõ lệnh CAD trên dòng command là nó sẽ hiện ra thôi.
Còn một điều nữa cần lưu ý là nếu lệnh chỉ dùng một loại tham số thì không cần nhập tên tham số (tỷ như lệnh line), còn nếu có nhiều tham số thì phải nhập theo đúng trình tự trong CAD kẻo Cad nó hiểu sai đi. Để kết thúc lệnh nếu trong CAD mình dùng enter thì trong lisp mình gõ "".
Ngoài ra trong lisp còn có lệnh pause để thoát khỏi lisp trả về mán hình Cad cho bạn nhập giá trị tham số từ màn hình bạn ạ.
Ấy là vài thứ mình mót được từ diễn đàn muốn trao đổi với bạn. Vì là của đi mót nên có thể nó chả ngon lắm nhưng cũng xài tàm tãm bạn ạ.
Hề hề hề,...
Chúc bạn vui khi tham gia diễn đàn.


Rất cảm ơn các ý kiến của anh Bình. Em sẽ cố gắng nhìu hơn để không phụ lòng chỉ bảo của các bác. :D

Sẵn đây vì trong ý tưởng của em có mún tạo hộp thoại để người dùng tương tác nhập liệu dễ hơn nhưng em tìm mãi khôgn thấy tài liệu nào trên web hướng dẫn cụ thể về tạo hộp thoại cả. Nhất là em mún có 1 listbox (pulldown menu) trong hộp thoại để người dùng khi click vào sẽ xổ ra danh sách có các loại trụ điện và chọn 1 loại trụ điện (đã được tạo thành các block riêng cho từng loại trụ điện (trên lưới điện sẽ có các loại trụ điện cao 8m 12m 14m...)) sau đó sẽ thực thi đoạn LISP insert loại trụ điện (block trụ điện) mà người dùng đã chọn trong danh sách vào điểm nút của đường dây như cách mà bác Duy đã chỉ.

Bác nào bít về vụ DIALOG này xin júp em cái. Chứ tìm hỉu VBA thì mất nhìu thời jan wá mà quỹ thời jan của em thì lại có hạn (8h dành cho nhà nước rùi). Rất cảm ơn các bác đã wan tâm và đóng góp ý kiến cho em.
  • 0

#25 VUVUZELA

VUVUZELA

    biết lệnh chamfer

  • Members
  • PipPipPipPip
  • 210 Bài viết
Điểm đánh giá: 97 (tàm tạm)

Đã gửi 27 August 2010 - 11:54 AM

Uhm. Tại lúc hỏi anh là em chưa hiểu rõ cú pháp lệnh Insert của CAD viết trong LISP thế nào nên mới hỏi jờ thì nhờ bác nói rõ chỗ nhập góc em đã hiểu rùi.
Nhân đây các bác cho em hỏi mình có thể xem cú pháp lệnh CAD để viết trong LISP ở đâu không nhỉ? Vì cú pháp lệnh CAD khi viết trong LISP thì khác so với trong CAD. Em muốn hỏi để biết chỗ ngâm cứu và tự tìm hiểu. Nhiều khi như ở trên em muốn viết lệnh INSERT trong LISP thì không biết cú pháp nó chứa các phần tử nào cả nên cũng đơ lun.


Cái này dễ
Bạn cứ copy lệnh
(command "insert")
Vào câu lệnh của AUtoCad thì nó sẽ hiện ra như sau :
1. Enter block name or [?]:
2. Specify insertion point or [Scale/X/Y/Z/Rotate/PScale/PX/PY/PZ/PRotate]:
3. Enter X scale factor, specify opposite corner, or [Corner/XYZ] <1>: 1
4. Enter Y scale factor : 1
5. Specify rotation angle <0>:
thì ứng với 5 câu lệnh đó thì bạn sẽ cho 5 biến vào chương trình lisp như thế này nè
(command "insert" 1 2 3 4 5)
cái nào bạn không nhập biến như cái 3, 4 nhập không nhập biến thì xài dấu "" như sau :
(command "insert" 1 2 "" "" 5)
  • 1

Hệ thống Liên Kết, Thiết Kế Tự Động

ttps://www.facebook...etThietKeTuDong


#26 hungdlcm

hungdlcm

    biết vẽ line

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

Đã gửi 27 August 2010 - 11:56 AM

Èo không biết các bạn dùng lệnh insert thế nào chứ bản vẽ mà không có block đấy thì coi như toi. Bạn nên thêm phần tạo block khi không có block đó trong bản vẽ.


Bác cho em hỏi nếu mình đã tạo sẵn các block trên 1 bản vẽ mẫu sẵn và lưu lại. Sau này người dùng chỉ cần mở bản vẽ đó và insert đúng tên block thì vẫn đc chứ bác nhỉ? THANK BÁC!!
  • 0

#27 hungdlcm

hungdlcm

    biết vẽ line

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

Đã gửi 27 August 2010 - 12:02 PM

Cái này dễ
Bạn cứ copy lệnh
(command "insert")
Vào câu lệnh của AUtoCad thì nó sẽ hiện ra như sau :
1. Enter block name or [?]:
2. Specify insertion point or [Scale/X/Y/Z/Rotate/PScale/PX/PY/PZ/PRotate]:
3. Enter X scale factor, specify opposite corner, or [Corner/XYZ] <1>: 1
4. Enter Y scale factor : 1
5. Specify rotation angle <0>:
thì ứng với 5 câu lệnh đó thì bạn sẽ cho 5 biến vào chương trình lisp như thế này nè
(command "insert" 1 2 3 4 5)
cái nào bạn không nhập biến như cái 3, 4 nhập không nhập biến thì xài dấu "" như sau :
(command "insert" 1 2 "" "" 5)


ÔI! Cảm ơn bác nhìu lắm bác ui!! Chưa khi nào mình được SUPPORT nhìu như diễn đàn CADVIET đóa!!

Chúc mọi người trong diễn đàn lun mạnh khỏe và ngày càng chia sẻ nhìu kiến thức cho nhau hơn! Chúc diễn đàn mãi mãi vững mạnh!! :D
  • 0

#28 hungdlcm

hungdlcm

    biết vẽ line

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

Đã gửi 27 August 2010 - 12:06 PM

Bác hungdlcm ơi
Bác có bản vẽ chuẩn trắc dọc+mặt bằng thiết kế điện không
Post lên cho mình 1 bản nghiên cứu với


Mình chỉ có bản vẽ mặt bằng điện thui! Nhưng mình không dám up file lên đây vì Công ty mình có nguyên tắc không đc phép cho file thiết kế và dự toán ra ngoài nghành. Mong bác hỉu và thông cảm cho em. Bác júp em mà em không júp lại đc ngại wá. Hic...
  • 0

#29 18011985

18011985

    biết lệnh properties

  • Members
  • PipPipPipPip
  • 255 Bài viết
Điểm đánh giá: 61 (tàm tạm)

Đã gửi 27 August 2010 - 12:12 PM

Bác cho em hỏi nếu mình đã tạo sẵn các block trên 1 bản vẽ mẫu sẵn và lưu lại. Sau này người dùng chỉ cần mở bản vẽ đó và insert đúng tên block thì vẫn đc chứ bác nhỉ? THANK BÁC!!

Ừ bạn có tên block đấy trong bản vẽ là được. Nhưng để thuận tiện thì bạn nên tạo một block bằng lệnh. Đối với người mới học lsp như bạn mình hướng dẫn bạn 1 cách đơn giản để tạo 1 block.
Đầu tiên bạn vẽ 1 block và ghi lại tất cả các công đoạn để vẽ ra nó, cuối cùng bạn dùng lệnh block để gom chúng lại và đặt tên thôi. Mình chỉ gợi ý như vậy vì bạn muốn tự thực hiện thì cũng tốt. Cố gắng lên mình mới viết lsp khoảng 6tháng giờ kiến thức cũng tàm tạm rồi. Chúc bạn thành công.
  • 0
Trăng 16 trăng tròn
Em 16 bụng ... như trăng

Hướng dẫn sử dụng diễn đàn:
Để cảm ơn hay bài viết có ích: Ấn dấu + cuối bài.
Không vừa lòng hay bài spam: Ấn dấu - cuối bài.

#30 duy782006

duy782006

    PHẠM QUỐC DUY

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 2155 Bài viết
Điểm đánh giá: 1360 (rất tốt)

Đã gửi 27 August 2010 - 02:31 PM

Bác cho em hỏi nếu mình đã tạo sẵn các block trên 1 bản vẽ mẫu sẵn và lưu lại. Sau này người dùng chỉ cần mở bản vẽ đó và insert đúng tên block thì vẫn đc chứ bác nhỉ? THANK BÁC!!

Khi viết lisp cần dùng block tốt nhất là tạo 1 thư mục chứa tất cả các block này (trường hợp của mình C:\\tienich\\dwg)và có hai cách ứng xử với các file này:
+Chỉ đích danh file với đầy đủ đường dẩn ví dụ:
(command ".INSERT" "C:\\tienich\\dwg\\cott.dwg" diemchen 1 1 0)
+Chỉ tên file không có đường dẩn và tạo Support File Search Path đến thư mục chứa file ví dụ:
(command ".INSERT" "cott.dwg" diemchen 1 1 0)
Và Add thư mục C:\\tienich\\dwg\\ vào Support File Search Path.
  • 2

Cứ ngỡ trần gian là cõi thật.Cho nên tất bật đến bây giờ.
Tạo hộp thoại bằng lisp My blog QUY ĐỊNH ĐẶT TÊN TOPIC TRONG CHUYÊN MỤC LISPD http://ktsduy.wordpress.com/
Để cám ơn chỉ cần nhấn rep_up.png
(Là nhấn vào nút đó phía bài viết của người ta í chứ đừng có nhè cái hình này mà nhấn miết đi nha :-D


#31 hungdlcm

hungdlcm

    biết vẽ line

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

Đã gửi 27 August 2010 - 04:22 PM

Khi viết lisp cần dùng block tốt nhất là tạo 1 thư mục chứa tất cả các block này (trường hợp của mình C:\\tienich\\dwg)và có hai cách ứng xử với các file này:
+Chỉ đích danh file với đầy đủ đường dẩn ví dụ:
(command ".INSERT" "C:\\tienich\\dwg\\cott.dwg" diemchen 1 1 0)
+Chỉ tên file không có đường dẩn và tạo Support File Search Path đến thư mục chứa file ví dụ:
(command ".INSERT" "cott.dwg" diemchen 1 1 0)
Và Add thư mục C:\\tienich\\dwg\\ vào Support File Search Path.


Nhưng... nếu zạ thì khi anh copy đoạn lisp này sang các máy khác thì hình như là không ổn khi chỉ đích danh đường dẫn.

Trang blog này chắc của anh hả anh Duy: http://duy782006.blogspot.com/

Em lang thang tìm tài liệu hướng dẫn tạo hộp thoại trong LISP lại vô tình lạc vào blog của anh có 1 bài hướng dẫn viết DCL và em đang đọc đây. :D

Anh Duy có ebook nào hướng dẫn tạo hộp thoại không anh share cho em qua Email nhá: hung0808@gmail.com

AH! Em phát hiện 1 điểm nữa là 2AE mình có cùng ngày và tháng sinh đó anh!! Hihi
  • 0

#32 duy782006

duy782006

    PHẠM QUỐC DUY

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 2155 Bài viết
Điểm đánh giá: 1360 (rất tốt)

Đã gửi 27 August 2010 - 04:40 PM

Nhưng... nếu zạ thì khi anh copy đoạn lisp này sang các máy khác thì hình như là không ổn khi chỉ đích danh đường dẫn.

Trang blog này chắc của anh hả anh Duy: http://duy782006.blogspot.com/

Em lang thang tìm tài liệu hướng dẫn tạo hộp thoại trong LISP lại vô tình lạc vào blog của anh có 1 bài hướng dẫn viết DCL và em đang đọc đây. :D

Anh Duy có ebook nào hướng dẫn tạo hộp thoại không anh share cho em qua Email nhá: hung0808@gmail.com

AH! Em phát hiện 1 điểm nữa là 2AE mình có cùng ngày và tháng sinh đó anh!! Hihi

Do là hướng dẩn cho bạn từng bước chứ muốn lisp di động thì cũng có cách. Tham khảo tại block của mình hoặc tìm trên cadviet với từ khóa lisp di động.
  • 0

Cứ ngỡ trần gian là cõi thật.Cho nên tất bật đến bây giờ.
Tạo hộp thoại bằng lisp My blog QUY ĐỊNH ĐẶT TÊN TOPIC TRONG CHUYÊN MỤC LISPD http://ktsduy.wordpress.com/
Để cám ơn chỉ cần nhấn rep_up.png
(Là nhấn vào nút đó phía bài viết của người ta í chứ đừng có nhè cái hình này mà nhấn miết đi nha :-D


#33 vminh_ct

vminh_ct

    biết lệnh stretch

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

Đã gửi 29 August 2010 - 09:02 PM

anh Hungdcl ơi, muốn gán giá trị mặc định cho L=2 và giá trị G bằng 45 độ thì làm thế nào trong đoạn lisp của anh thế. làm thế nào để khi mình đánh lệnh dcl và pick 1 điểm thì ra luôn được pline có giá trị bằng 2 và góc 45 độ.
  • 0
" Sống trên đời cần có 1 tấm lòng,để gió mãi cuốn đi"

#34 huong259

huong259

    biết lệnh refedit

  • Members
  • PipPipPipPipPipPipPip
  • 596 Bài viết
Điểm đánh giá: 350 (khá)

Đã gửi 29 August 2010 - 09:30 PM

Ý tưởng của mình là viết 1 đoạn lisp để cad vẽ 1 đường PLINE, yêu cầu người dùng nhập vào: điểm đầu của đường thẳng, chiều dài đường thẳng và góc mà đường thẳng đó hợp với phương mặt phẳng ngang.

Ví dụ: đoạn thẳng cần vẽ có chiều dài là 100 và hướng theo 1 góc xéo 45 độ. Bình thường nếu vẽ trong cad phải thao tác như sau:
- gõ lệnh pline
- click chọn điểm đầu tiên (first point)
- sau đó ở dòng lệnh second point nhập vào: @100<45

Và dưới đây là đoạn lisp mà mình viết nhưng không cho ra kết quả như mong muốn mà cho kết quả là "UNKNOW DPL..." (lệnh mà mình viết là DPL):

(defun c:dpl()
(setq P1 (getpoint "cho diem dau: "))
(setq L (getint "nhap chieu dai: "))
(setq G (getint "nhap so goc: "))
(setq P2 (list @ L < G))
(command "pline" P1 P2 "")
(princ)
)

Mình biết chắc là đoạn lisp trên có sai nhưng mình không biết sửa như thế nào! Mình chỉ mới tìm hiểu lisp trên diễn đàn CADVIET thui nên chưa rành lắm. Mong các bác có kinh nghiệm chỉ bảo giủp. Nếu được thì bác nào hướng dẫn cho cách viết đoạn lisp để thực hiện ý tưởng trên.

CẢM ƠN CÁC BÁC RẤT RẤT NHIỀU!

Ý tưởng của mình là viết 1 đoạn lisp để cad vẽ 1 đường PLINE, yêu cầu người dùng nhập vào: điểm đầu của đường thẳng, chiều dài đường thẳng và góc mà đường thẳng đó hợp với phương mặt phẳng ngang.

Ví dụ: đoạn thẳng cần vẽ có chiều dài là 100 và hướng theo 1 góc xéo 45 độ. Bình thường nếu vẽ trong cad phải thao tác như sau:
- gõ lệnh pline
- click chọn điểm đầu tiên (first point)
- sau đó ở dòng lệnh second point nhập vào: @100<45


Nếu chỉ đơn giản như thế anh nên vẽ kiểu bắt điểm theo chế độ Polar Tracking nhanh hơn nhiều!
  • 0

#35 hungdlcm

hungdlcm

    biết vẽ line

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

Đã gửi 30 August 2010 - 08:24 AM

Các bác ui! Sau 2 ngày mày mò và nhờ sự chỉ bảo của các bác em đã làm được như dưới đây nhưng bây jờ còn 1 lỗi gì mà em mò hoài không ra mong các bác xem và chỉnh júp em.

Đầu tiên đây là 3 file của em gồm có file VLD.DCL, VLD.mns và VLD.pls:

1/ FILE VLD.DCL:

//VE
ve:dialog
{label = "Chuong Trinh Tu Dong Ve Luoi Dien";
: edit_box {label = "Nhap khoang cach"; key = "dai"; edit_width = 15;}
: edit_box {label = "Nhap huong goc"; key = "goc"; edit_width = 15;}
:boxed_radio_column
{label = "Chon loai tru";
: radio_button {label = "&Tru 12m"; key = "t12";}
: radio_button {label = "T&ru 10.5m"; key = "t10";}
}
:boxed_radio_column
{label = "Chon diem chen";
: radio_button {label = "Diem 1"; key = "diem1"; value = "1";}
: radio_button {label = "Diem 2"; key = "diem2";}
}
spacer;
ok_cancel;
}
//ABOUT VLD
about_VLD: dialog
{label = "Gioi thieu";
:text {alignment = centered; label = "CHUONG TRINH TU DONG VE LUOI DIEN VLD 1.0";}
spacer;
ok_only;
}

2/ FILE VLD.mns:


***MENUGROUP=VELD_MN
***POP2
ID_VeLD [Ve &Luoi Dien]
ID_BeginVLD [&Bat Dau Ve]^C^C_VLD
ID_AboutVLD [&Gioi Thieu VLD 1.0]^C^C_aboutVLD
[--]
ID_Rem [&Go bo menu nay]^C^C_remVLD

3/ FILE VLD.pls:

;;;=====LOAD MENU =======================
(if (not (menugroup "VELD_MN")) (command "menuload" "VLD\\VLD.mns"))
(menucmd "P10=+VELD_MN.pop2")

;;;======REMOVE MENU====================
(defun C:remVLD() (command "menuunload" "VELD_MN"))

;;;=====GIOI THIEU==================
(defun C:aboutVLD(/ i )
(setq i (load_dialog "VLD\\VLD.DCL"))
(if (not (new_dialog "about_VLD" i)) (exit))
(action_tile "accept" "(done_dialog)")
(start_dialog)
(unload_dialog i)
)
;;;==============DIALOG===================
(defun Dialog_Ve(/ i)
(setq i (load_dialog "VLD\\VLD.DCL"))
(if (not (new_dialog "ve" i)) (exit))
(set_tile "dai" "100")
(set_tile "goc" "45")
(action_tile "cancel" "(done_dialog)(exit)")
(action_tile "accept" "(LaySoLieu)(done_dialog)")
(start_dialog)
(unload_dialog i)
)
;;;=============LAY SO LIEU NHAP=============
(defun LaySoLieu()
(setq
L (atof (get_tile "dai"))
G (angtof (get_tile "goc"))
)
(if (= (get_tile "t12") "1") (setq E "Tru12") (setq E "Tru10"))
(if (= (get_tile "diem1") "1") (setq A P1) (setq A P2))
)
;;;=============CHUONG TRINH VE==============
(defun Ve (L G E)
(setq P1 (getpoint "Click chon 1 diem dau tien: "))
(setq PX (car P1) PY (cadr P1))
(setq TPX (* (cos G) L))
(setq TPY (* (sin G) L))
(setq P2 (list (+ PX TPX) (+ PY TPY) 0.0))
(setq OLDOS (getvar "OSMODE"))
(setvar "OSMODE" 0)
(command "pline" P1 P2 "")
(command "insert" E A 1 1 "")
(while (/= L nil)
(setq PX (car P2) PY (cadr P2))
(setq P1 (list PX PY 0.0))
(Dialog_Ve)
(setq TPX (* (cos G) L))
(setq TPY (* (sin G) L))
(setq P2 (list (+ PX TPX) (+ PY TPY) 0.0))
(command "pline" P1 P2 "")
(command "insert" E A 1 1 "")
)
(setvar "OSMODE" OLDOS)
)
;;;==============CHUONG TRINH CHINH=============
(defun C:VLD (/ L G E)
(Dialog_Ve)
(Ve L G E)
)
(princ)
Và đây là giao diện hộp thoại để người dùng nhập số liệu của em:

Hình đã gửi

Mô tả cách thức hoạt động của chương trình:

- Khi load file VLD.pls sẽ load ra Menu Ve Luoi Dien trong ACAD.

- Chọn Menu Ve Luoi Dien -> chọn Bat Dau Ve

- Hiển thị hộp thoại. Người dùng nhập vào Khoảng Cách, nhập Hướng Góc, click vào 1 trong 2 radio button để chọn 1 loại trụ (mỗi loại trụ em đã tạo 1 block sẵn, ứng với Trụ 12m sẽ là block "Tru12" và ứng với Trụ 10m sẽ là block "Tru10").

- Click vào 1 trong 2 radio button để chọn 1 điểm chèn (Chọn "Diem 1" thì sẽ chèn block trụ điện mà người dùng đã click chọn ở bước trên vào điểm thứ nhất (P1) của đường PLine; Chọn "Diem 2" thì sẽ chèn vào điểm thứ 2 (P2) của đường Pline)

- Click OK -> người dùng click chọn điểm đầu -> vẽ đường Pline và chèn block trụ điện vào điểm mà người dùng đã chọn ở bước trên.

- Lặp lại quá trình từ mở hộp thoại nhập cho đến khi nào người dùng click Cancel.

Vấn đề vấp phải là:

- Các bước thực hiện đều OK ngoại trừ việc chèn block trụ điện vào đường Pline.

- Khi vẽ đường Pline đầu tiên thì CAD vẫn vẽ đúng đường Pline, vẫn có chèn block trụ điện nhưng chèn không đúng vị trí, block trụ điện được chèn ở 1 vị trí ngoài đường Pline (???).

- Khi hộp thoại được lặp lại để vẽ lần thứ 2 và các lần tiếp theo thì block trụ được chèn vào đúng điểm đầu của các đường Pline nhưng tùy chọn chèn block trụ điện vào "Diem 2" hoàn toàn không có tác dụng (!!!???).

=> Nói chung vấn đề nằm ở chỗ chèn block trụ điện không được đúng vị trí như ta mong muốn. Và 1 vấn đề nữa là không bít sao mà sau khi vẽ đường PLine đầu tiên vẫn hiện lên hộp thoại để nhập tiếp nhưng CAD còn hiện thêm thông báo "_VLD Unknown command "VLD". Press F1 for help." (???) Như zạ là em sai chỗ nào zạ???

Các bác copy các file của em về test thử júp em nhé!! xem júp em là em đã viết sai code chỗ nào zạ!? về phần block trụ điện vì trong bản vẽ của các bác chắc chắn sẽ chưa có 2 block là "Tru12" và "Tru10" thì các bác cứ tạo 2 block có tên y như vậy nhé, còn hình dạng block này như thế nào thì tùy các bác, miễn sao đại khái có block để test thử xem nó được chèn thế nào thui!!

Em nói dài dòng chứ thực ra các bác lúc test thử chắc sẽ hỉu "ý đồ" của em thui nhỉ! Mong các bác "ra tay nghĩa hiệp mổ xẻ" jùm cái đoạn LISP của em nhé!

Đang đợi REPLY của các bác! Trăm ngàn lần cảm ơn các bác!! :D
  • 0

#36 VUVUZELA

VUVUZELA

    biết lệnh chamfer

  • Members
  • PipPipPipPip
  • 210 Bài viết
Điểm đánh giá: 97 (tàm tạm)

Đã gửi 30 August 2010 - 09:06 AM

Theo quan điểm của mình thì lỗi có thể do các nguyên do sau đây :
1. Thiếu câu lệnh để đưa hệ trục XYZ về 1 hệ trục chuẩn như sau :
(command "ucs" "")
2. Khi tạo Block chèn của bạn đưa về điểm chuẩn chưa đúng
Bạn kiểm tra xem thử file AutoCad chứa block của bạn có điểm gốc 0,0 nằm ở đâu
vì câu lệnh INSERT lúc chèn từ 1 file bất kỳ sẽ lấy điểm chèn là điểm 0,0
và bạn cần sửa lại file gốc chứa block là đưa BLOCK trụ điện có điểm gốc của móng trụ điện về điểm 0,0 là OK


Bon ... on ...n
  • 0

Hệ thống Liên Kết, Thiết Kế Tự Động

ttps://www.facebook...etThietKeTuDong


#37 hungdlcm

hungdlcm

    biết vẽ line

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

Đã gửi 30 August 2010 - 10:03 AM

Theo quan điểm của mình thì lỗi có thể do các nguyên do sau đây :
1. Thiếu câu lệnh để đưa hệ trục XYZ về 1 hệ trục chuẩn như sau :
(command "ucs" "")
2. Khi tạo Block chèn của bạn đưa về điểm chuẩn chưa đúng
Bạn kiểm tra xem thử file AutoCad chứa block của bạn có điểm gốc 0,0 nằm ở đâu
vì câu lệnh INSERT lúc chèn từ 1 file bất kỳ sẽ lấy điểm chèn là điểm 0,0
và bạn cần sửa lại file gốc chứa block là đưa BLOCK trụ điện có điểm gốc của móng trụ điện về điểm 0,0 là OK
Bon ... on ...n


Bác ơi bác xem júp thêm cái lỗi "_VLD Unknown command "VLD". Press F1 for help." lun nhá bác! Cám ơn bác nhìu lắm! E chẳng hỉu sai chỗ nào mà vẽ xong đường PLine đầu tiên thì CAD vẫn xuất hiện hộp thoại và kèm theo thông báo lỗi này!!
  • 0

#38 VUVUZELA

VUVUZELA

    biết lệnh chamfer

  • Members
  • PipPipPipPip
  • 210 Bài viết
Điểm đánh giá: 97 (tàm tạm)

Đã gửi 30 August 2010 - 11:06 AM

"Dục Tốc Bất Đạt"
Chú cứ từ từ, khoan sử dụng menuload cái đã
Khi nào sử dụng thành thạo và câu lệnh Autolisp chạy OK thì mới lồng tiếp câu lệnh load menu
Chú thử riêng cái này anh mới sửa thử xem nhé

;;;=====GIOI THIEU==================
(defun C:aboutVLD (/ i)
      
(setq i (load_dialog "VLD\\VLD.DCL"))
      
(if (not (new_dialog "about_VLD" i))
(exit)
)
      
(action_tile "accept" "(done_dialog)")
      
(start_dialog)
      
(unload_dialog i)
)
;;;==============DIALOG===================
(defun Dialog_Ve (/ i)
    
(setq i (load_dialog (strcat path "VLD.DCL")))
      
(if (not (new_dialog "ve" i))
(exit)
)
    
(if dai
(set_tile "dai" (rtos dai 2 2))
(set_tile "dai" "100.00")
)
(setq dai (distof (get_tile "dai")))

(if goc
(set_tile "goc" (rtos goc 2 2))
(set_tile "goc" "45.00")
)
(setq goc (distof (get_tile "goc")))
;;;-------------------
(if (not tru)
(setq tru 1)
)
(cond ((= tru 1) (mode_tile "t12" 2))
((= tru 2) (mode_tile "t10" 2))
)
(action_tile "t12" "(setq tru 1)")
(action_tile "t10" "(setq tru 2)")

;;;-------------------
(if (not point)
(setq point 1)
)
(cond ((= point 1) (mode_tile "diem1" 2))
((= point 2) (mode_tile "diem2" 2))
)
(action_tile "diem1" "(setq point 1)")
(action_tile "diem2" "(setq point 2)")
;;;

(action_tile "dai" "(setq dai (distof (get_tile \"dai\")))")
(action_tile "goc" "(setq goc (distof (get_tile \"goc\")))")

(action_tile "cancel" "(done_dialog) (exit)")
    
(action_tile "accept" "(LaySoLieu) (done_dialog)")
    
(start_dialog)
    
(unload_dialog i)
)
;;;=============LAY SO LIEU NHAP=============
(defun LaySoLieu ()
(setq
    L (atof (get_tile "dai"))
    G (angtof (get_tile "goc"))
)
    
(if (= (get_tile "t12") "1")
(setq E (strcat path "Tru12.dwg"))
(setq E (strcat path "Tru10.dwg"))
)
      
(if (= (get_tile "diem1") "1")
(setq A P1)
(setq A P2)
)
)
;;;=============CHUONG TRINH VE==============
(defun Ve (L G E)
(setq P1 (getpoint "Click chon 1 diem dau tien: "))
(setq PX (car P1)
PY (cadr P1)
ptzoom p1
)
(setq TPX (* (cos G) L))
(setq TPY (* (sin G) L))
(setq P2 (list (+ PX TPX) (+ PY TPY) 0.0))
(setq OLDOS (getvar "OSMODE"))
(setvar "OSMODE" 0)
(command "pline" P1 P2 "")
(command "insert" E A 1 1 "")
(while (/= L nil)
(setq PX (car P2)
PY (cadr P2)
)
(setq P1 (list PX PY 0.0))
(Dialog_Ve)
(setq TPX (* (cos G) L))
(setq TPY (* (sin G) L))
(setq P2 (list (+ PX TPX) (+ PY TPY) 0.0))
(command "pline" P1 P2 "")
(command "insert" E A 1 1 "")
(command "zoom" ptzoom p2)
(command "zoom" "S" "0.7xp")
)
(setvar "OSMODE" OLDOS)
)
;;;==============CHUONG TRINH CHINH=============
(defun C:VLD (/)
    
(setq path "C:\\Design\\")
(Dialog_Ve)
    
(Ve L G E)
)
(princ)


Chỉ cần thay đường dẫn của biến path của riêng chú vào
Bỏ các file *.DCL *.dwg của block vào là OK
Có j pm anh

Bon ... on ... n
  • 0

Hệ thống Liên Kết, Thiết Kế Tự Động

ttps://www.facebook...etThietKeTuDong


#39 hungdlcm

hungdlcm

    biết vẽ line

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

Đã gửi 30 August 2010 - 12:17 PM

"Dục Tốc Bất Đạt"
Chú cứ từ từ, khoan sử dụng menuload cái đã
Khi nào sử dụng thành thạo và câu lệnh Autolisp chạy OK thì mới lồng tiếp câu lệnh load menu
Chú thử riêng cái này anh mới sửa thử xem nhé

;;;=====GIOI THIEU==================
(defun C:aboutVLD (/ i)
      
(setq i (load_dialog "VLD\\VLD.DCL"))
      
(if (not (new_dialog "about_VLD" i))
(exit)
)
      
(action_tile "accept" "(done_dialog)")
      
(start_dialog)
      
(unload_dialog i)
)
;;;==============DIALOG===================
(defun Dialog_Ve (/ i)
    
(setq i (load_dialog (strcat path "VLD.DCL")))
      
(if (not (new_dialog "ve" i))
(exit)
)
    
(if dai
(set_tile "dai" (rtos dai 2 2))
(set_tile "dai" "100.00")
)
(setq dai (distof (get_tile "dai")))

(if goc
(set_tile "goc" (rtos goc 2 2))
(set_tile "goc" "45.00")
)
(setq goc (distof (get_tile "goc")))
;;;-------------------
(if (not tru)
(setq tru 1)
)
(cond ((= tru 1) (mode_tile "t12" 2))
((= tru 2) (mode_tile "t10" 2))
)
(action_tile "t12" "(setq tru 1)")
(action_tile "t10" "(setq tru 2)")

;;;-------------------
(if (not point)
(setq point 1)
)
(cond ((= point 1) (mode_tile "diem1" 2))
((= point 2) (mode_tile "diem2" 2))
)
(action_tile "diem1" "(setq point 1)")
(action_tile "diem2" "(setq point 2)")
;;;

(action_tile "dai" "(setq dai (distof (get_tile \"dai\")))")
(action_tile "goc" "(setq goc (distof (get_tile \"goc\")))")

(action_tile "cancel" "(done_dialog) (exit)")
    
(action_tile "accept" "(LaySoLieu) (done_dialog)")
    
(start_dialog)
    
(unload_dialog i)
)
;;;=============LAY SO LIEU NHAP=============
(defun LaySoLieu ()
(setq
    L (atof (get_tile "dai"))
    G (angtof (get_tile "goc"))
)
    
(if (= (get_tile "t12") "1")
(setq E (strcat path "Tru12.dwg"))
(setq E (strcat path "Tru10.dwg"))
)
      
(if (= (get_tile "diem1") "1")
(setq A P1)
(setq A P2)
)
)
;;;=============CHUONG TRINH VE==============
(defun Ve (L G E)
(setq P1 (getpoint "Click chon 1 diem dau tien: "))
(setq PX (car P1)
PY (cadr P1)
ptzoom p1
)
(setq TPX (* (cos G) L))
(setq TPY (* (sin G) L))
(setq P2 (list (+ PX TPX) (+ PY TPY) 0.0))
(setq OLDOS (getvar "OSMODE"))
(setvar "OSMODE" 0)
(command "pline" P1 P2 "")
(command "insert" E A 1 1 "")
(while (/= L nil)
(setq PX (car P2)
PY (cadr P2)
)
(setq P1 (list PX PY 0.0))
(Dialog_Ve)
(setq TPX (* (cos G) L))
(setq TPY (* (sin G) L))
(setq P2 (list (+ PX TPX) (+ PY TPY) 0.0))
(command "pline" P1 P2 "")
(command "insert" E A 1 1 "")
(command "zoom" ptzoom p2)
(command "zoom" "S" "0.7xp")
)
(setvar "OSMODE" OLDOS)
)
;;;==============CHUONG TRINH CHINH=============
(defun C:VLD (/)
    
(setq path "C:\\Design\\")
(Dialog_Ve)
    
(Ve L G E)
)
(princ)


Chỉ cần thay đường dẫn của biến path của riêng chú vào
Bỏ các file *.DCL *.dwg của block vào là OK
Có j pm anh

Bon ... on ... n


Hic... Bác ui! em đã thử đoạn lisp bác sửa rùi, bỏ các file *.DCL *.dwg của block và thay đường dẫn lun nhưng lisp của bác vẫn gặp lỗi y như của em và còn kèm thêm 1 vài lỗi nữa như là nếu mà chọn "Diem 2" trong hộp thoại hoặc chọn "Tru 10.5m" thì bị lỗi "Fucntion Canceled" (T T)

Vấn đề không bít fải ở chỗ đoạn này k "if (= (get_tile "diem1") "1") (setq A P1) (setq A P2))" vì nều em tạm thời bỏ đoạn này và chỗ lệnh INSERT thì viết là "(command "insert" E P1 1 1 "")" thì CAD sẽ chèn đúng block vào điểm P1 khôn bị sai lệch vị trí gì cả. Còn nếu dùng đoạn "if (= (get_tile "diem1") "1") (setq A P1) (setq A P2))" để gán biến A cho P1 hoặc P2 thì block lại chèn không đúng vị trí. Em chẳng hỉu nổi.

Có bác nào júp em sáng tỏ hơn cái!! Thanks...
  • 0

#40 VUVUZELA

VUVUZELA

    biết lệnh chamfer

  • Members
  • PipPipPipPip
  • 210 Bài viết
Điểm đánh giá: 97 (tàm tạm)

Đã gửi 30 August 2010 - 02:29 PM

Chú thử thay dòng lệnh con này xem
Vì anh chay OK mà
(defun LaySoLieu ()
(setq
    L dai
    G (angtof (rtos goc 2 4))
)
    ;;; vị trí bẫy lỗi
(if (= tru 1)
(setq E (strcat path "Tru12.dwg"))
(setq E (strcat path "Tru10.dwg"))
)
      
(if (= point 1)
(setq A P1)
(setq A P2)
)
)


Và chú dùng chương trình Vlide có trong AutoCad 2000 trở lên bẫy lỗi thử xem nhé
Trên chương trình mình có nhiều biến số
cứ sau dấu ) là chú bấm phím F9
sau đó vào Tool chọn Load Text In Editor (Ctrl+Alt+E)
vào lại Cad
bấm lệnh VLD
chương trình sẽ chạy đến vị trí F9
Bấm tiếp F8 cho chương trình chạy tiếp
Nếu chương trình dừng chỗ nào thì chỗ đó câu lệnh sai (bị lỗi)
OK???
  • 0

Hệ thống Liên Kết, Thiết Kế Tự Động

ttps://www.facebook...etThietKeTuDong