Đến nội dung


Hình ảnh
- - - - -

Khả năng của Autolisp trong cad3d


  • Please log in to reply
9 replies to this topic

#1 mtl

mtl

    biết pan

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

Đã gửi 27 August 2008 - 09:32 AM

Chào các bác !
em mới tìm hiểu về Autolisp nên chưa biết khả năng của nó có thể làm được những gì ? vậy nên các bác cho em hỏi tý
Ví dụ em có 1 hình khối. em muốn cắt một phần nào đó ( chỉ cần nhập cao độ cắt theo phương z, phương mặt cắt xy chẳng hạn), sau đó chương trình lisp sẽ tự động tính thể tích khối cắt, diện tích mặt cắt, diện tích các mặt bên, khoảng cách xa nhất của 2 diểm năm trên khối đã cắt đó ?
xin chân thành cảm ơn các bác. Rất mong được sự hỗ trợ của các bác
  • 0

#2 vanduong

vanduong

    biết lệnh adcenter

  • Validating
  • PipPipPipPipPipPipPip
  • 1383 Bài viết
Điểm đánh giá: 536 (tốt)

Đã gửi 27 August 2008 - 09:36 AM

Chào các bác !
em mới tìm hiểu về Autolisp nên chưa biết khả năng của nó có thể làm được những gì ? vậy nên các bác cho em hỏi tý
Ví dụ em có 1 hình khối. em muốn cắt một phần nào đó ( chỉ cần nhập cao độ cắt theo phương z, phương mặt cắt xy chẳng hạn), sau đó chương trình lisp sẽ tự động tính thể tích khối cắt, diện tích mặt cắt, diện tích các mặt bên, khoảng cách xa nhất của 2 diểm năm trên khối đã cắt đó ?
xin chân thành cảm ơn các bác. Rất mong được sự hỗ trợ của các bác

bạn vô mục viết lisp theo yêu cầu nha
  • 0

#3 ssg

ssg

    biết lệnh adcenter

  • Vip
  • PipPipPipPipPipPipPip
  • 1228 Bài viết
Điểm đánh giá: 1087 (rất tốt)

Đã gửi 27 August 2008 - 02:11 PM

Chào các bác !
em mới tìm hiểu về Autolisp nên chưa biết khả năng của nó có thể làm được những gì ? vậy nên các bác cho em hỏi tý
Ví dụ em có 1 hình khối. em muốn cắt một phần nào đó ( chỉ cần nhập cao độ cắt theo phương z, phương mặt cắt xy chẳng hạn), sau đó chương trình lisp sẽ tự động tính thể tích khối cắt, diện tích mặt cắt, diện tích các mặt bên, khoảng cách xa nhất của 2 diểm năm trên khối đã cắt đó ?
xin chân thành cảm ơn các bác. Rất mong được sự hỗ trợ của các bác

Muốn được trợ giúp, bạn phải biết cách diễn đạt để người ta hiểu rõ ràng và chính xác ý mình. Có những điểm chưa rõ:
1- "Em có một hình khối"... cách hiểu thông thường là một đối tượng 3DSolid có hình dáng bất kỳ, ví dụ như một... củ khoai lang! Như vậy, khái niệm "diện tích các mặt bên" không có ý nghĩa.
2- Khối 3d được cắt bằng lệnh slice, được chỉ định bằng 1 mặt phẳng. Nó tách khối 3D làm 2 phần, nhưng bao giờ AutoCAD cũng hỏi: "Bạn muốn giữ lại phần nào? Hay là muốn giữ lại cả hai?". Như vậy, cụm từ "thể tích khối cắt" của bạn cũng không rõ ràng!
3- "Phương mặt cắt xy chẳng hạn" nghĩa là sao? Chỉ có thể nói phương x, phương y... chứ không có khái niệm phương xy! "Chẳng hạn" là một từ tối kỵ khi nêu yêu cầu! Trừ khi bạn muốn minh hoạ thêm cho ý tổng quát đã nêu trước đó. Trong trường hợp tổng quát, mặt phẳng cắt không song song với mp Oxy. Nói về thủ thuật lập trình, hai cái đó khác nhau rất nhiều.
4- Đọc lại vài lần, vẫn không hiểu mục đích của bạn là gì. Bạn đang nghiên cứu về lisp và muốn hiểu hơn về nó hay là muốn mọi người giúp bạn viết lisp?

Vì chưa hiểu rõ ý bạn, ssg chỉ có thể có vài ý chung chung như sau:
1- Lisp chẳng phải cây đũa thần, chỉ cần hô một phát là có ngay mọi thứ mình muốn. Lisp chỉ là công cụ thực hiện tự động các thao tác của user theo một kế hoạch định trước. Ngoại trừ một vài tính năng đặc biệt, về cơ bản, những thao tác nào bạn có thể thực hiện bằng tay trực tiếp được với AutoCAD thì có thể thực hiện được bằng Lisp.
2- Autodesk không công khai database của 3Dsolid nên khả năng lập trình lisp cho 3D bị hạn chế rất nhiều -> hiệu quả khi dùng lisp cho 3D không được như trong 2D.
3- Khoảng cách xa nhất giữa 2 điểm nằm trên một khối 3D là một bài toán khó. Theo ssg, lisp không làm được!
  • 0

#4 Snowman

Snowman

    biết lệnh mirror

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

Đã gửi 27 August 2008 - 11:59 PM

Tôi đồng ý với ý kiến của Ssg

Lisp chẳng phải cây đũa thần, chỉ cần hô một phát là có ngay mọi thứ mình muốn. Lisp chỉ là công cụ thực hiện tự động các thao tác của user theo một kế hoạch định trước. Ngoại trừ một vài tính năng đặc biệt, về cơ bản, những thao tác nào bạn có thể thực hiện bằng tay trực tiếp được với AutoCAD thì có thể thực hiện được bằng Lisp.


Tôi vừa mới post một bài tham gia về chủ đề: "xe đạp và xe máy". Lisp được coi là một công cụ hiện đại (tạm coi như thế) và thông minh (điều này thì chắc còn tuỳ ng viết ra nó), cũng giống như những phương tiện công nghệ cao hiện nay, chúng là công cụ hỗ trợ đắc lực cho con người, nhưng cũng là những kẻ thù đáng sợ vì chúng làm cho con người ngày càng phụ thuộc vào công nghệ. Những người nắm được nó thì sẽ điều khiển được nó theo ý mình, số còn lại sử dụng một cách thụ động. Con ng sẽ thế nào nếu thiếu net, thiếu điện, thiếu di động, PC ... Những người quen dùng lisp mà ko chịu tìm hiểu cặn kẽ sẽ thế nào nếu ...làm việc ở một máy ko lisp nhỉ :lol:
Tất nhiên là lại phải quay lại CAD "thủ công" thôi.
Ý của tôi là mọi người muốn dùng lisp, trước hết hãy tự hỏi xem, mình sẽ thao tác thế nào với CAD. Và sau khi dùng lisp thì hãy suy nghĩ thử xem "nó" làm những gì, và làm thế nào mà ra được kết quả như thế.
  • 0

. - ' * ' - .. - ... "Sống trong đời sống cần có một tấm lòng..." . - ' * ' - .. -
-----------------------------------------------------------------------------------

Hình đã gửi Hình đã gửi


#5 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 28 August 2008 - 03:51 PM

Tôi đồng ý với ý kiến của Ssg



Tôi vừa mới post một bài tham gia về chủ đề: "xe đạp và xe máy". Lisp được coi là một công cụ hiện đại (tạm coi như thế) và thông minh (điều này thì chắc còn tuỳ ng viết ra nó), cũng giống như những phương tiện công nghệ cao hiện nay, chúng là công cụ hỗ trợ đắc lực cho con người, nhưng cũng là những kẻ thù đáng sợ vì chúng làm cho con người ngày càng phụ thuộc vào công nghệ. Những người nắm được nó thì sẽ điều khiển được nó theo ý mình, số còn lại sử dụng một cách thụ động. Con ng sẽ thế nào nếu thiếu net, thiếu điện, thiếu di động, PC ... Những người quen dùng lisp mà ko chịu tìm hiểu cặn kẽ sẽ thế nào nếu ...làm việc ở một máy ko lisp nhỉ :lol:
Tất nhiên là lại phải quay lại CAD "thủ công" thôi.
Ý của tôi là mọi người muốn dùng lisp, trước hết hãy tự hỏi xem, mình sẽ thao tác thế nào với CAD. Và sau khi dùng lisp thì hãy suy nghĩ thử xem "nó" làm những gì, và làm thế nào mà ra được kết quả như thế.

Nếu tôi ngồi ở 1 máy ko có lisp thì tôi sẽ làm cho nó có lisp.
Bác hình như dị ứng với lisp thì phải. Theo mình có lisp vẩn hơn.
  • 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


#6 nhut.tvqn

nhut.tvqn

    Chưa sử dụng CAD

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

Đã gửi 28 August 2008 - 04:00 PM

Nếu tôi ngồi ở 1 máy ko có lisp thì tôi sẽ làm cho nó có lisp.
Bác hình như dị ứng với lisp thì phải. Theo mình có lisp vẩn hơn.


thang ngo
  • 0

#7 mtl

mtl

    biết pan

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

Đã gửi 28 August 2008 - 04:45 PM

Muốn được trợ giúp, bạn phải biết cách diễn đạt để người ta hiểu rõ ràng và chính xác ý mình. Có những điểm chưa rõ:
1- "Em có một hình khối"... cách hiểu thông thường là một đối tượng 3DSolid có hình dáng bất kỳ, ví dụ như một... củ khoai lang! Như vậy, khái niệm "diện tích các mặt bên" không có ý nghĩa.
2- Khối 3d được cắt bằng lệnh slice, được chỉ định bằng 1 mặt phẳng. Nó tách khối 3D làm 2 phần, nhưng bao giờ AutoCAD cũng hỏi: "Bạn muốn giữ lại phần nào? Hay là muốn giữ lại cả hai?". Như vậy, cụm từ "thể tích khối cắt" của bạn cũng không rõ ràng!
3- "Phương mặt cắt xy chẳng hạn" nghĩa là sao? Chỉ có thể nói phương x, phương y... chứ không có khái niệm phương xy! "Chẳng hạn" là một từ tối kỵ khi nêu yêu cầu! Trừ khi bạn muốn minh hoạ thêm cho ý tổng quát đã nêu trước đó. Trong trường hợp tổng quát, mặt phẳng cắt không song song với mp Oxy. Nói về thủ thuật lập trình, hai cái đó khác nhau rất nhiều.
4- Đọc lại vài lần, vẫn không hiểu mục đích của bạn là gì. Bạn đang nghiên cứu về lisp và muốn hiểu hơn về nó hay là muốn mọi người giúp bạn viết lisp?

Vì chưa hiểu rõ ý bạn, ssg chỉ có thể có vài ý chung chung như sau:
1- Lisp chẳng phải cây đũa thần, chỉ cần hô một phát là có ngay mọi thứ mình muốn. Lisp chỉ là công cụ thực hiện tự động các thao tác của user theo một kế hoạch định trước. Ngoại trừ một vài tính năng đặc biệt, về cơ bản, những thao tác nào bạn có thể thực hiện bằng tay trực tiếp được với AutoCAD thì có thể thực hiện được bằng Lisp.
2- Autodesk không công khai database của 3Dsolid nên khả năng lập trình lisp cho 3D bị hạn chế rất nhiều -> hiệu quả khi dùng lisp cho 3D không được như trong 2D.
3- Khoảng cách xa nhất giữa 2 điểm nằm trên một khối 3D là một bài toán khó. Theo ssg, lisp không làm được!

Cảm ơn các bác đã chỉ .
Vì mình muốn biết khả năng của slip nên mới nói chung chung như thế. Nếu các bác viết cho slip thì tốt quá.
ý mình là như thế này: Mình có một solid (1) mình phải cắt để có solid (2) rồi cắt tiếp thành solid (3).Như trong file đính kèm theo.
Công việc cuối cùng là tính thể tích, diện tích mỗi mặt bên, khoảng cách lớn nhất của 2 điểm của solid (3).
Công việc trên được làm hoàn toàn tự động từ đầu đến cuối mà mình chỉ cần nhập các tọa độ theo trục AABB như trong file.
http://www.cadviet.c...pfiles/SLIP.dwg
  • 0

#8 ssg

ssg

    biết lệnh adcenter

  • Vip
  • PipPipPipPipPipPipPip
  • 1228 Bài viết
Điểm đánh giá: 1087 (rất tốt)

Đã gửi 29 August 2008 - 05:22 PM

Cảm ơn các bác đã chỉ .
Vì mình muốn biết khả năng của slip nên mới nói chung chung như thế. Nếu các bác viết cho slip thì tốt quá.
ý mình là như thế này: Mình có một solid (1) mình phải cắt để có solid (2) rồi cắt tiếp thành solid (3).Như trong file đính kèm theo.
Công việc cuối cùng là tính thể tích, diện tích mỗi mặt bên, khoảng cách lớn nhất của 2 điểm của solid (3).
Công việc trên được làm hoàn toàn tự động từ đầu đến cuối mà mình chỉ cần nhập các tọa độ theo trục AABB như trong file.
http://www.cadviet.c...pfiles/SLIP.dwg

1- Trước hết, xin nhắc bạn: LISP (viết tắt của LISt Processing - ngôn ngữ lập trình dựa trên cơ sở xử lý danh sách) chứ không phải SLIP!

2- Lisp theo yêu cầu của bạn đây:

(defun C:QSL(/ e Z1 Z2 y1 y2 ZM yM pM p11 p12 p13 p21 p22 p23
p31 p32 p33 p41 p42 p43 oldos S1 S2 S3 S)
(setq
e (car (entsel "\nChon khoi 3D solid:"))
z1 (getreal "\nZ1 = ")
z2 (getreal "\nZ2 = ")
y1 (getreal "\nY1 = ")
y2 (getreal "\nY2 = ")
zM (/ (+ Z1 Z2) 2)
yM (/ (+ Y1 Y2) 2)
pM (list 0 yM zM)
p11 (list 0 0 z1)
p12 (list 1 0 Z1)
p13 (list 0 1 Z1)
p21 (list 0 0 z2)
p22 (list 1 0 Z2)
p23 (list 0 1 Z2)
p31 (list 0 y1 0)
p32 (list 1 y1 0)
p33 (list 0 y1 1)
p41 (list 0 y2 0)
p42 (list 1 y2 0)
p43 (list 0 y2 1)
oldos (getvar "osmode")
)

(setvar "osmode" 0)
(command "slice" e "" p11 p12 p13 pM)
(command "slice" e "" p21 p22 p23 pM)
(command "slice" e "" p31 p32 p33 pM)
(command "slice" e "" p41 p42 p43 pM)
(command "area" "o" e "")
(setq S1 (getvar "area"))

(command "section" e "" p11 p12 p13 )
(command "area" "o" (entlast) "")
(setq S2 (getvar "area"))
(command "erase" (entlast) "")

(command "section" e "" p21 p22 p23 )
(command "area" "o" (entlast) "")
(setq S3 (getvar "area"))
(command "erase" (entlast) "")

(setq S (- S1 S2 S3))

(setvar "osmode" oldos)
(alert (strcat "\nDien tich xung quanh = " (rtos S)))
(princ)
)


Lệnh QSL, chọn khối 3dsolid, nhập các giá trị z1, z2, y1, y2 -> chương trình sẽ cắt bỏ tất cả và chỉ chừa lại khối solid cuối cùng như trong ví dụ của bạn (nếu bạn muốn giữ lại khối nguyên thuỷ thì sao lưu nó trước khi thực hiện QSL), tính tổng diện tích xung quanh. Riêng thể tích thì bạn hãy dùng lệnh massprop, không nên lạm dụng lisp!

3- Nói thật lòng, mình không thích viết lisp này (không phải vì thiếu nhiệt tình). Ngoài những ý mà bạn Snowman đã nêu, dưới con mắt của của lập trình viên, "chất lượng chuyên môn" chứa trong các chương trình kiểu như thế này rất thấp. Mình đưa nó lên chỉ với mục đích minh hoạ cho ý kiến đã phát biểu "về cơ bản, những thao tác nào bạn có thể thực hiện bằng tay trực tiếp được với AutoCAD thì có thể thực hiện được bằng Lisp".

4- Yêu cầu của bạn có thể làm trực tiếp bằng các lệnh CAD có sẵn và cũng không mất nhiều thời gian. Bạn so sánh sẽ thấy, dùng lisp cũng không nhanh hơn được bao nhiêu.

5- Nhu cầu như trên của bạn thuộc dạng không thông dụng đối với nhiều người. Nếu thích, cách tốt nhất là bạn tự tìm hiểu lisp và tự lập trình cho mình. Ssg sẵn sàng hỗ trợ bạn học lisp trong khả năng của bản thân.
  • 1

#9 mtl

mtl

    biết pan

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

Đã gửi 17 September 2008 - 09:43 PM

Cảm ơn bác !
Bác nói làm em học AutoLisp . Tiện đây bác cho em hỏi là có phương pháp nào dùng để tìm khoảng cách Max của một mặt cắt không ? Ví dụ như mặt cắt mà trong file kia bác đã chỉ cho em ấy ? Với lại e muốn lấy thể tích của lệnh Massprop thì làm thế nào ? mặc dù dùng lệnh trực tiếp trên Autocad cũng được nhưng em muốn đưa thông số đó vào hàm (princ "\ntt) và để tiếp tục sử dụng giá trị thể tích đó cho những việc khác ?mong bác chỉ giúp.
  • 0

#10 ssg

ssg

    biết lệnh adcenter

  • Vip
  • PipPipPipPipPipPipPip
  • 1228 Bài viết
Điểm đánh giá: 1087 (rất tốt)

Đã gửi 19 September 2008 - 07:28 AM

Cảm ơn bác !
Bác nói làm em học AutoLisp . Tiện đây bác cho em hỏi là có phương pháp nào dùng để tìm khoảng cách Max của một mặt cắt không ? Ví dụ như mặt cắt mà trong file kia bác đã chỉ cho em ấy ? Với lại e muốn lấy thể tích của lệnh Massprop thì làm thế nào ? mặc dù dùng lệnh trực tiếp trên Autocad cũng được nhưng em muốn đưa thông số đó vào hàm (princ "\ntt) và để tiếp tục sử dụng giá trị thể tích đó cho những việc khác ?mong bác chỉ giúp.

1- Tính thể tích:
;;;----------------------------------------------------
(defun C:V3 (/ e obj V)
(vl-load-com)
(setq
e (car (entsel "\nSelect 3Dsolid:"))
obj (vlax-ename->vla-object e)
V (vla-get-Volume obj)
)
(alert (strcat "The tich = " (rtos V)))
(princ)
)
;;;----------------------------------------------------

Bạn có thể tham khảo thêm các bài của bạn gia_bach ở đây:
http://www.cadviet.c...?showtopic=5643

2- Tính khoảng cách max: là một bài toán khó, bạn phải tự xây dựng thuật giải. Theo ssg, có thể giải bằng phương pháp "thử sai", nghĩa là so sánh tất cả các trường hợp khả dĩ và chọn lấy kết quả max.
Có 2 trường hợp:
- Nếu mặt cắt không chứa cung tròn, elip, spline: có thể tính chính xác vì 2 điểm xa nhất phải nằm trên các đỉnh, và số lượng các đỉnh luôn luôn là một số hữu hạn.
- Nếu không, bạn phải chấp nhận giá trị gần đúng với một sai số định trước nào đó. Chương trình sẽ chạy lâu hơn vì phải xử lý một số lượng lớn các trường hợp.

Nói thì nghe đơn giản vậy, nhưng để làm được, bạn phải có kiến thức cũng như "bề dày" tương đối về kỹ năng lập trình lisp.
Nếu bạn tự xác định là mới bắt đầu học lisp thì hãy tạm gác lại đã. Khi nào cảm thấy đủ "vốn liếng" thì lôi ra "chơi" tiếp!
  • 0