Đến nội dung


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

Hướng dẫn lập trình Lisp


  • Please log in to reply
497 replies to this topic

#321 ketxu

ketxu

    Copier - Paster - Editor

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

Đã gửi 08 June 2011 - 10:29 PM

Chào cả nhà, mình đang rất cần tư vấn về vấn đề liệu lisp có lệnh tìm giao điểm giữa mặt (3D Face)
va đường (LWpolyline có Z=/0) không ? mọi người gúp mình nhé.
(Mình đã nêu vấn đề này bên mục "Viết Lisp theo yêu cầu phần 2" mà không ai phản hồi cả, buồn quá) !

Lisp không có LỆNH bạn à :) Và nếu giải câu hỏi bạn đưa ra trong 1 ngày chưa có đáp án, hãy chịu khó chờ thêm...1,2 ngày nữa trước khi vội vàng up double vấn đề của mình. Ai cũng cần suy nghĩ mà :)
  • 1

Thành viên nhóm CadMagic.
Mời bạn ghé thăm facebook nhóm - Page viết lisp theo yêu cầu  :
CAD MAGIC


#322 phamngoctukts

phamngoctukts

    biết lệnh adcenter

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 1107 Bài viết
Điểm đánh giá: 696 (tốt)

Đã gửi 09 June 2011 - 08:40 AM

Chào cả nhà, mình đang rất cần tư vấn về vấn đề liệu lisp có lệnh tìm giao điểm giữa mặt (3D Face)
va đường (LWpolyline có Z=/0) không ? mọi người gúp mình nhé.
(Mình đã nêu vấn đề này bên mục "Viết Lisp theo yêu cầu phần 2" mà không ai phản hồi cả, buồn quá) !

Cái này mình đã tìm giúp bạn và cũng đã thử dùng intersectwith nhưng không được nó không có tác dụng trong không gian 3D. Có lẽ sẽ có người khác giải đáp thắc mắc giúp bạn.
  • 1
Tất cả vì sự phát triển của diễn đàn ...
Cám ơn đừng nói lời suông mà hãy nhấn Hình đã gửi!

#323 lenhatanh

lenhatanh

    biết vẽ polygon

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

Đã gửi 09 June 2011 - 09:28 PM

Cám ơn tất cả các Bác, chắc ý tưởng này cụt đường rồi.
mình đã ấp ủ từ lâu rồi chứ không như bác "Ketxu" kết luận đâu, còn
Lisp không có LỆNH sao lại có (Command... ?
Bác cứ đùa em.
  • 0

#324 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 09 June 2011 - 09:59 PM

Cám ơn tất cả các Bác, chắc ý tưởng này cụt đường rồi.
mình đã ấp ủ từ lâu rồi chứ không như bác "Ketxu" kết luận đâu, còn
Lisp không có LỆNH sao lại có (Command... ?
Bác cứ đùa em.

Hề hề hề,
Thực ra vấn đề của bạn nêu ra hơi phức tạp. Với các bề mặt phẳng và các LWpolyline thì mình đã có giải pháp là sử dụng các phép tính trong hình học giải tích. Còn với các mặt bậc cao và các đường cong phi tuyến thì chưa có các công thức giải tích phù hợp nên chưa thể trả lời bạn được. Bạn chớ nóng, hy vọng sẽ có người tìm ra giải pháp hữu hiệu giúp bạn.
Hề hề hề.
  • 1
Chúc các quý Anh trên diễn đàn luôn khỏe, đẻ thêm được nhiều thứ để mót.

#325 ketxu

ketxu

    Copier - Paster - Editor

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

Đã gửi 09 June 2011 - 10:37 PM

Cám ơn tất cả các Bác, chắc ý tưởng này cụt đường rồi.
mình đã ấp ủ từ lâu rồi chứ không như bác "Ketxu" kết luận đâu, còn
Lisp không có LỆNH sao lại có (Command... ?
Bác cứ đùa em.

Command cũng là 1 biểu thức trả về Nil đó chứ :)
Nếu ấp ủ từ lâu mà chưa tìm ra được câu trả lời, thì bạn càng cần cho CV member thời gian tìm hiểu vấn đề của bạn, đúng hok :)
Bạn ngó qua đây xem bác gile trả lời :
Line - 3dface
  • 1

Thành viên nhóm CadMagic.
Mời bạn ghé thăm facebook nhóm - Page viết lisp theo yêu cầu  :
CAD MAGIC


#326 lenhatanh

lenhatanh

    biết vẽ polygon

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

Đã gửi 11 June 2011 - 08:45 PM

Cám ơn link của bác Ketxu, rất hữu ích và thiết thực...
  • 0

#327 t031285

t031285

    biết vẽ rectang

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

Đã gửi 24 June 2011 - 06:33 PM

Nhờ các bác xem giùm cách sử dụng initget:
Chỗ nhập đường kính thép mình muốn mặc định là 25 chỉ việc enter là sẽ hiểu nhưng lại không được,mong các bác xem lại cấu trúc giùm e.
(initget 1 "D B")
(setq res (getkword "\n<M.BANG/M.DON><B/D>:"))
(setq p1 (getpoint "\nDiem chen:")
l1 (getreal "\nBe rong mong:")
l2 (getreal "\nBe rong co mong:")
l3 (/ (- l1 l2) 2)
h1 (getreal "\nChieu cao ben mong:")
h2 (getreal "\nChieu cao phan nghieng:")
h3 (getreal "\nChieu cao co mong:")
bv (getreal "\nBe day lop bao ve:")
(setq dkt 25)
(initget 6)
(setq d (getreal (strcat "\nduong kinh thep (mm) <" (itoa dkt) ">: ")))
(if (null d) (setq d dkt))
n (getint "\nS.luong thep day mong:")
)

  • 0

#328 nguyentuyen6

nguyentuyen6

    biết lệnh chamfer

  • Advance Member
  • PipPipPipPip
  • 213 Bài viết
Điểm đánh giá: 124 (tàm tạm)

Đã gửi 24 June 2011 - 08:36 PM

Nhờ các bác xem giùm cách sử dụng initget:
Chỗ nhập đường kính thép mình muốn mặc định là 25 chỉ việc enter là sẽ hiểu nhưng lại không được,mong các bác xem lại cấu trúc giùm e.


Bạn thiếu hàm setq ở truớc n (getint "\nS.luong thep day mong:")
  • 0

Lisp In bản vẽ hàng loạt:
http://www.cadviet.c...ndpost&p=139860


#329 t031285

t031285

    biết vẽ rectang

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

Đã gửi 24 June 2011 - 10:15 PM

Bạn thiếu hàm setq ở truớc n (getint "\nS.luong thep day mong:")

Hình như không phải đâu bạn ơi.Mình làm như bạn nói vẫn không được:
(initget 1 "D B")
(setq res (getkword "\n<M.BANG/M.DON><B/D>:"))
(setq p1 (getpoint "\nDiem chen:")
l1 (getreal "\nBe rong mong:")
l2 (getreal "\nBe rong co mong:")
l3 (/ (- l1 l2) 2)
h1 (getreal "\nChieu cao ben mong:")
h2 (getreal "\nChieu cao phan nghieng:")
h3 (getreal "\nChieu cao co mong:")
bv (getreal "\nBe day lop bao ve:")
(setq dkt 25)
(initget 6)
(setq d (getreal (strcat "\nduong kinh thep (mm) <" (itoa dkt) ">: ")))
(if (null d) (setq d dkt))
(getq n (getint "\nS.luong thep day mong:")
)

  • 0

#330 phamngoctukts

phamngoctukts

    biết lệnh adcenter

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 1107 Bài viết
Điểm đánh giá: 696 (tốt)

Đã gửi 24 June 2011 - 11:24 PM

Hình như không phải đâu bạn ơi.Mình làm như bạn nói vẫn không được:

(initget 1 "D B")
(setq res (getkword "\n<M.BANG/M.DON><B/D>:"))
(setq p1 (getpoint "\nDiem chen:")
l1 (getreal "\nBe rong mong:")
l2 (getreal "\nBe rong co mong:")
l3 (/ (- l1 l2) 2)
h1 (getreal "\nChieu cao ben mong:")
h2 (getreal "\nChieu cao phan nghieng:")
h3 (getreal "\nChieu cao co mong:")
bv (getreal "\nBe day lop bao ve:")
(setq dkt 25)
(initget 6)
(setq d (getreal (strcat "\nduong kinh thep (mm) <" (itoa dkt) ">: ")))
(if (null d) (setq d dkt))
(getq n (getint "\nS.luong thep day mong:")
)

Setq chứ không phải getq bạn ạ
  • 0
Tất cả vì sự phát triển của diễn đàn ...
Cám ơn đừng nói lời suông mà hãy nhấn Hình đã gửi!

#331 t031285

t031285

    biết vẽ rectang

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

Đã gửi 25 June 2011 - 07:12 AM

Setq chứ không phải getq bạn ạ

Cảm ơn bạn,mình lộn,đã sửa lại nhưng sau khi nhập Bề rộng cổ móng thì nó báo:; error: bad argument type: numberp: nil.Mong các bác chỉ giúp.Thanks.
(initget 1 "D B")
(setq res (getkword "\n<M.BANG/M.DON><B/D>:"))
(setq p1 (getpoint "\nDiem chen:")
l1 (getreal "\nBe rong mong:")
l2 (getreal "\nBe rong co mong:")
l3 (/ (- l1 l2) 2)
h1 (getreal "\nChieu cao ben mong:")
h2 (getreal "\nChieu cao phan nghieng:")
h3 (getreal "\nChieu cao co mong:")
bv (getreal "\nBe day lop bao ve:")
(setq dkt 25)
(initget 6)
(setq d (getreal (strcat "\nduong kinh thep (mm) <" (itoa dkt) ">: ")))
(if (null d) (setq d dkt))
(setq n (getint "\nS.luong thep day mong:")
)



  • 0

#332 Tue_NV

Tue_NV

    KS Võ Quang Tuệ

  • Moderator
  • PipPipPipPipPipPipPip
  • 4296 Bài viết
Điểm đánh giá: 3804 (đỉnh cao)

Đã gửi 25 June 2011 - 08:47 AM

Cảm ơn bạn,mình lộn,đã sửa lại nhưng sau khi nhập Bề rộng cổ móng thì nó báo:; error: bad argument type: numberp: nil.Mong các bác chỉ giúp.Thanks.

(initget 1 "D B")
(setq res (getkword "\n<M.BANG/M.DON><B/D>:"))
(setq p1 (getpoint "\nDiem chen:")
l1 (getreal "\nBe rong mong:")
l2 (getreal "\nBe rong co mong:")
l3 (/ (- l1 l2) 2)
h1 (getreal "\nChieu cao ben mong:")
h2 (getreal "\nChieu cao phan nghieng:")
h3 (getreal "\nChieu cao co mong:")
bv (getreal "\nBe day lop bao ve:")
(setq dkt 25)
(initget 6)
(setq d (getreal (strcat "\nduong kinh thep (mm) <" (itoa dkt) ">: ")))
(if (null d) (setq d dkt))
(setq n (getint "\nS.luong thep day mong:")
)


Bạn xem lại ( và )
Bạn mở hàm bằng ( thì Kết thúc hàm nào thì phải ) hàm đó.
Bạn mắc phải cái lỗi là : Mở ngoặc 1 hàm nào đó, bạn chưa đóng ngoặc hàm đó, mà bạn lại mở ngoặc cho hàm khác => Thành ra bị lỗi.
Cái lỗi này Tue_NV hy vọng bạn tự sửa được
Chúc thành công
  • 0

#333 ketxu

ketxu

    Copier - Paster - Editor

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

Đã gửi 25 June 2011 - 08:52 AM

Mới nhìn qua đã thấy bạn thiếu dấu đóng ngoặc cho dãy setq rồi. Lisp thì không thể vội được bạn ơi
  • 0

Thành viên nhóm CadMagic.
Mời bạn ghé thăm facebook nhóm - Page viết lisp theo yêu cầu  :
CAD MAGIC


#334 t031285

t031285

    biết vẽ rectang

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

Đã gửi 25 June 2011 - 09:06 AM

Mình đã sửa lại như vầy rồi mà vẫn báo lỗi như cũ:
(initget 1 "D B") (setq res (getkword "\n<M.BANG/M.DON><B/D>:")) (setq p1 (getpoint "\nDiem chen:") l1 (getreal "\nBe rong mong:") l2 (getreal "\nBe rong co mong:") l3 (/ (- l1 l2) 2) h1 (getreal "\nChieu cao ben mong:") h2 (getreal "\nChieu cao phan nghieng:") h3 (getreal "\nChieu cao co mong:") bv (getreal "\nBe day lop bao ve:") (setq dkt 25) (initget 6) (setq d (getreal (strcat "\nduong kinh thep (mm) <" (itoa dkt) ">: "))) (if (null d) (setq d dkt)) (setq n (getint "\nS.luong thep day mong:")) )
Mong các bác giúp đỡ,chập chững tìm hiểu nên chưa biết hết.Thanks.
  • 0

#335 ketxu

ketxu

    Copier - Paster - Editor

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

Đã gửi 25 June 2011 - 09:15 AM

Mình đã sửa lại như vầy rồi mà vẫn báo lỗi như cũ:

(initget 1 "D B") (setq res (getkword "\n<M.BANG/M.DON><B/D>:")) (setq p1 (getpoint "\nDiem chen:") l1 (getreal "\nBe rong mong:") l2 (getreal "\nBe rong co mong:") l3 (/ (- l1 l2) 2) h1 (getreal "\nChieu cao ben mong:") h2 (getreal "\nChieu cao phan nghieng:") h3 (getreal "\nChieu cao co mong:") bv (getreal "\nBe day lop bao ve:") (setq dkt 25) (initget 6) (setq d (getreal (strcat "\nduong kinh thep (mm) <" (itoa dkt) ">: "))) (if (null d) (setq d dkt)) (setq n (getint "\nS.luong thep day mong:")) )
Mong các bác giúp đỡ,chập chững tìm hiểu nên chưa biết hết.Thanks.

Như vầy là như nào ??? Mình thấy bạn âm thầm thêm dấu ngoặc ở cuối hàm, trong khi các hàm setq thì lại không đóng ngoặc.Bạn nên thêm cái dấu đóng ngoặc đằng sau chỗ đặt bv = Bề dày lớp bảo vệ đi ^^ Bạn không để ý lời bác Tuệ rồi :)
  • 0

Thành viên nhóm CadMagic.
Mời bạn ghé thăm facebook nhóm - Page viết lisp theo yêu cầu  :
CAD MAGIC


#336 t031285

t031285

    biết vẽ rectang

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

Đã gửi 25 June 2011 - 09:33 AM

Thành thật cảm ơn bác,e đã sửa theo như bác nói nhưng sau khi nhập bề dày lớp bảo vệ thì nó không tiếp tục lệnh.Mong bác dành chút thời gian sửa hoàn chỉnh giùm e.Mong tin bác.
(initget 1 "D B")
(setq res (getkword "\n<M.BANG/M.DON><B/D>:"))
(setq p1 (getpoint "\nDiem chen:")
l1 (getreal "\nBe rong mong:")
l2 (getreal "\nBe rong co mong:")
l3 (/ (- l1 l2) 2)
h1 (getreal "\nChieu cao ben mong:")
h2 (getreal "\nChieu cao phan nghieng:")
h3 (getreal "\nChieu cao co mong:")
bv (getreal "\nBe day lop bao ve:"))
(setq dkt 25))
(initget 6)
(setq d (getreal (strcat "\nduong kinh thep (mm) <" (itoa dkt) ">: ")))
(if (null d) (setq d dkt))
(setq n (getint "\nS.luong thep day mong:")
)

  • -1

#337 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 25 June 2011 - 09:52 AM

(setq dkt 25))
Dư kìa ô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


#338 phamngoctukts

phamngoctukts

    biết lệnh adcenter

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 1107 Bài viết
Điểm đánh giá: 696 (tốt)

Đã gửi 25 June 2011 - 01:13 PM

Thành thật cảm ơn bác,e đã sửa theo như bác nói nhưng sau khi nhập bề dày lớp bảo vệ thì nó không tiếp tục lệnh.Mong bác dành chút thời gian sửa hoàn chỉnh giùm e.Mong tin bác.

(initget 1 "D B")
(setq res (getkword "\n<M.BANG/M.DON><B/D>:"))
(setq p1 (getpoint "\nDiem chen:")
l1 (getreal "\nBe rong mong:")
l2 (getreal "\nBe rong co mong:")
l3 (/ (- l1 l2) 2)
h1 (getreal "\nChieu cao ben mong:")
h2 (getreal "\nChieu cao phan nghieng:")
h3 (getreal "\nChieu cao co mong:")
bv (getreal "\nBe day lop bao ve:"))
(setq dkt 25))
(initget 6)
(setq d (getreal (strcat "\nduong kinh thep (mm) <" (itoa dkt) ">: ")))
(if (null d) (setq d dkt))
(setq n (getint "\nS.luong thep day mong:")
)

Thôi thì mình sửa một lần cho bạn tham khảo vậy.

(initget 1 "D B")
(setq res (getkword "\n<M.BANG/M.DON><B/D>:"))
(setq p1 (getpoint "\nDiem chen:")
l1 (getreal "\nBe rong mong:")
l2 (getreal "\nBe rong co mong:")
l3 (/ (- l1 l2) 2)
h1 (getreal "\nChieu cao ben mong:")
h2 (getreal "\nChieu cao phan nghieng:")
h3 (getreal "\nChieu cao co mong:")
bv (getreal "\nBe day lop bao ve:")
dkt 25
)
(initget 6)
(setq d (getreal (strcat "\nduong kinh thep (mm) <" (itoa dkt) ">: ")))
(if (null d) (setq d dkt))
(setq n (getint "\nS.luong thep day mong:"))

  • 1
Tất cả vì sự phát triển của diễn đàn ...
Cám ơn đừng nói lời suông mà hãy nhấn Hình đã gửi!

#339 duchieu0205

duchieu0205

    biết vẽ line

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

Đã gửi 27 June 2011 - 01:00 PM

Em có việc này nhờ các anh chị trên diễn đàn giúp đỡ. Em dùn hàm ssget để chọn các block có tên cho trước trong bản vẽ:

(setq nhomdau (ssget
'((-4 . "<OR")
(-4 . "<AND")(0 . "INSERT")(2 . "1a")(-4 . "AND>")
(-4 . "<AND")(0 . "INSERT")(2 . "1b")(-4 . "AND>")
(-4 . "<AND")(0 . "INSERT")(2 . "1c")(-4 . "AND>")
(-4 . "<AND")(0 . "INSERT")(2 . "1d")(-4 . "AND>")
(-4 . "<AND")(0 . "INSERT")(2 . "1e")(-4 . "AND>")
(-4 . "OR>"))
)
)
Vấn đề ở chỗ em muốn tách "nhomdau" thành các nhóm nhỏ để xử lý ví dụ như:
Các block có tên "1a" vào "nhom1"
Các block có tên "1b" vào "nhom2"
Các block có tên "1c"; "1e" ; "1d" vào "nhom3"
Mong các anh chị dành thời gian giúp đỡ cho em! Em xin được cám ơn trước mọi người
  • 0

#340 gia_bach

gia_bach

    biết lệnh adcenter

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

Đã gửi 27 June 2011 - 02:09 PM

Em có việc này nhờ các anh chị trên diễn đàn giúp đỡ. Em dùn hàm ssget để chọn các block có tên cho trước trong bản vẽ:

(setq nhomdau (ssget
'((-4 . "<OR")
(-4 . "<AND")(0 . "INSERT")(2 . "1a")(-4 . "AND>")
(-4 . "<AND")(0 . "INSERT")(2 . "1b")(-4 . "AND>")
(-4 . "<AND")(0 . "INSERT")(2 . "1c")(-4 . "AND>")
(-4 . "<AND")(0 . "INSERT")(2 . "1d")(-4 . "AND>")
(-4 . "<AND")(0 . "INSERT")(2 . "1e")(-4 . "AND>")
(-4 . "OR>"))
)
)
Vấn đề ở chỗ em muốn tách "nhomdau" thành các nhóm nhỏ để xử lý ví dụ như:
Các block có tên "1a" vào "nhom1"
Các block có tên "1b" vào "nhom2"
Các block có tên "1c"; "1e" ; "1d" vào "nhom3"
Mong các anh chị dành thời gian giúp đỡ cho em! Em xin được cám ơn trước mọi người

Truớc tiên để chọn các Block có tên 1a,1b,1c,1d và 1e trên bản vẽ, có thể viết như sau :
(setq ss (ssget '((0 . "INSERT")(2 . "1a,1b,1c,1d,1e"))) )

Sau đó là duyệt qua tập ss này:
- lấy tên (Block Name) của từng đối tuợng
- tùy theo d/kiện lọc mà đưa vào các tập tưong ứng. (sử dụng hàm ssadd)

tham khảo :
(defun c:test(/ origin ss_1b ss_1a1c)

(defun ssfilter (ss str / e i res)
(setq res (ssadd))
(setq i -1 )
(while (setq e (ssname ss (setq i (1+ i))))
(if (wcmatch (cdr (assoc 2 (entget e))) str)
(ssadd e res) ))
res)

(setq origin (ssget '((0 . "INSERT")(2 . "1a,1b,1c,1d,1e"))) )
(setq ss_1b (ssfilter origin "1b"))
(setq ss_1a1c (ssfilter origin "1a,1c"))
)

  • 1