Đến nội dung


Hình ảnh
- - - - -

[Nhờ viết lisp]Tách lớp và lấy giao điểm trong cad 3D.


  • Please log in to reply
8 replies to this topic

#1 ahdvip

ahdvip

    biết zoom

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

Đã gửi 09 December 2011 - 03:13 PM

Em có 1 bản vẽ vd như sau: http://www.cadviet.c...600_thu3d_1.dwg
Yêu cầu như sau:
- Bước 1: tự động vẽ 1 cái nền(Box) với x và y thì yêu cầu mình nhập(nghĩa là yêu cầu nhập chiều dài và chiều rộng của cái nền đó) còn trục Z thì tùy người lập trình (khoảng 5-> 10mm cũng được).
- Bước 2: dời gốc tọa độ về đỉnh trên của hình hộp(BOX) đã vẽ ở bước 1, trục Z vuông góc với nền.
- Bước 3: bước này là thủ công: mình sẽ vẽ 1 hình hộp bất kì lên cái nền đó.
- Bước 4: tạo ra n mặt phẳng song song với nền theo thứ tự: mặt phẳng thứ nhất đi qua điểm cao nhất của hình khối mà mình đã vẽ. Khoảng cách giữa các mặt phẳng thì yêu cầu mình nhập vào.
- Bước 5: lấy giao của các mặt phẳng với hình khối đã vẽ, giao điểm ở đây chỉ lấy đường biên thôi (nghĩa là vd như ta có 1 hình cầu thì giao điểm của các mặt phẳng đó là các đường tròn)
- Bước 6: bước này xử lý trên từng mặt phẳng. Lúc này trên mỗi mặt phẳng ta có các đương 2D. Nếu là đường tròn thì ta lấy tọa độ tâm và bán kính, đường thẳng thì lấy tọa độ điểm đầu và điểm cuối, nếu là hình vuông hoặc hình chữ nhật hoặc hình thoi thì lấy tọa độ 4 đỉnh, còn lại nếu là đường cong (spline, elip …) thì ta tách đường đó thành nhiều đoạn thẳng nhỏ với chiều dài mỗi đoạn yêu cầu mình nhập vào, sau đó lấy tọa độ các đỉnh của đường cong đó (gồm nhiều đỉnh do đã tách thành nhiều đường thẳng nhỏ)
- Bước 7:xuất thuộc tính và các tọa độ ở bước 6 đã lấy ra file text với cấu trúc như sau:

- Lớp 1
- Line, tọa độ điểm đầu, tọa độ điểm cuối.
- Circle, tọa độ tâm, bán kính.
- Hình vuông, tọa độ đỉnh 1, tọa độ đỉnh 2, tọa độ đỉnh 3, tọa độ đỉnh 4 .
- Hình chữ nhật, tọa độ đỉnh 1, tọa độ đỉnh 2, tọa độ đỉnh 3, tọa độ đỉnh 4 .
- Hình thoi, tọa độ đỉnh 1, tọa độ đỉnh 2, tọa độ đỉnh 3, tọa độ đỉnh 4 .
- Đa giác, tọa độ đỉnh 1, tọa độ đỉnh 2, …, tọa độ đỉnh n .
- Đường spline, tọa độ đỉnh 1, tọa độ đỉnh 2,…, tọa độ đỉnh n.
- elip, tọa độ đỉnh 1, tọa độ đỉnh 2,…, tọa độ đỉnh n.
.
.
.
- Lớp n
- Line, tọa độ điểm đầu, tọa độ điểm cuối.
- Circle, tọa độ tâm, bán kính.
- Hình vuông, tọa độ đỉnh 1, tọa độ đỉnh 2, tọa độ đỉnh 3, tọa độ đỉnh 4 .
- Hình chữ nhật, tọa độ đỉnh 1, tọa độ đỉnh 2, tọa độ đỉnh 3, tọa độ đỉnh 4 .
- Hình thoi, tọa độ đỉnh 1, tọa độ đỉnh 2, tọa độ đỉnh 3, tọa độ đỉnh 4 .
- Đa giác, tọa độ đỉnh 1, tọa độ đỉnh 2, …, tọa độ đỉnh n .
- Đường spline, tọa độ đỉnh 1, tọa độ đỉnh 2,…, tọa độ đỉnh n.
- elip, tọa độ đỉnh 1, tọa độ đỉnh 2,…, tọa độ đỉnh n.

Muốn có được 1 lisp như vậy nhưng mà đi nhờ người khác mà yêu cầu nhiều quá thấy cũng ngại. Nên anh em nào chỉ được phần nào thì chỉ cho mình với nha.
- THANKS!!!
  • 0

#2 ketxu

ketxu

    Copier - Paster - Editor

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

Đã gửi 09 December 2011 - 03:26 PM

Làm được bước 1 ^^
  • 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


#3 Detailing

Detailing

    biết lệnh imageclip

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

Đã gửi 09 December 2011 - 03:56 PM

Em có 1 bản vẽ vd như sau: http://www.cadviet.c...600_thu3d_1.dwg
Yêu cầu như sau:
- Bước 1: tự động vẽ 1 cái nền(Box) với x và y thì yêu cầu mình nhập(nghĩa là yêu cầu nhập chiều dài và chiều rộng của cái nền đó) còn trục Z thì tùy người lập trình (khoảng 5-> 10mm cũng được).
- Bước 2: dời gốc tọa độ về đỉnh trên của hình hộp(BOX) đã vẽ ở bước 1, trục Z vuông góc với nền.
- Bước 3: bước này là thủ công: mình sẽ vẽ 1 hình hộp bất kì lên cái nền đó.
- Bước 4: tạo ra n mặt phẳng song song với nền theo thứ tự: mặt phẳng thứ nhất đi qua điểm cao nhất của hình khối mà mình đã vẽ. Khoảng cách giữa các mặt phẳng thì yêu cầu mình nhập vào.
- Bước 5: lấy giao của các mặt phẳng với hình khối đã vẽ, giao điểm ở đây chỉ lấy đường biên thôi (nghĩa là vd như ta có 1 hình cầu thì giao điểm của các mặt phẳng đó là các đường tròn)
- Bước 6: bước này xử lý trên từng mặt phẳng. Lúc này trên mỗi mặt phẳng ta có các đương 2D. Nếu là đường tròn thì ta lấy tọa độ tâm và bán kính, đường thẳng thì lấy tọa độ điểm đầu và điểm cuối, nếu là hình vuông hoặc hình chữ nhật hoặc hình thoi thì lấy tọa độ 4 đỉnh, còn lại nếu là đường cong (spline, elip …) thì ta tách đường đó thành nhiều đoạn thẳng nhỏ với chiều dài mỗi đoạn yêu cầu mình nhập vào, sau đó lấy tọa độ các đỉnh của đường cong đó (gồm nhiều đỉnh do đã tách thành nhiều đường thẳng nhỏ)
- Bước 7:xuất thuộc tính và các tọa độ ở bước 6 đã lấy ra file text với cấu trúc như sau:

- Lớp 1
- Line, tọa độ điểm đầu, tọa độ điểm cuối.
- Circle, tọa độ tâm, bán kính.
- Hình vuông, tọa độ đỉnh 1, tọa độ đỉnh 2, tọa độ đỉnh 3, tọa độ đỉnh 4 .
- Hình chữ nhật, tọa độ đỉnh 1, tọa độ đỉnh 2, tọa độ đỉnh 3, tọa độ đỉnh 4 .
- Hình thoi, tọa độ đỉnh 1, tọa độ đỉnh 2, tọa độ đỉnh 3, tọa độ đỉnh 4 .
- Đa giác, tọa độ đỉnh 1, tọa độ đỉnh 2, …, tọa độ đỉnh n .
- Đường spline, tọa độ đỉnh 1, tọa độ đỉnh 2,…, tọa độ đỉnh n.
- elip, tọa độ đỉnh 1, tọa độ đỉnh 2,…, tọa độ đỉnh n.
.
.
.
- Lớp n
- Line, tọa độ điểm đầu, tọa độ điểm cuối.
- Circle, tọa độ tâm, bán kính.
- Hình vuông, tọa độ đỉnh 1, tọa độ đỉnh 2, tọa độ đỉnh 3, tọa độ đỉnh 4 .
- Hình chữ nhật, tọa độ đỉnh 1, tọa độ đỉnh 2, tọa độ đỉnh 3, tọa độ đỉnh 4 .
- Hình thoi, tọa độ đỉnh 1, tọa độ đỉnh 2, tọa độ đỉnh 3, tọa độ đỉnh 4 .
- Đa giác, tọa độ đỉnh 1, tọa độ đỉnh 2, …, tọa độ đỉnh n .
- Đường spline, tọa độ đỉnh 1, tọa độ đỉnh 2,…, tọa độ đỉnh n.
- elip, tọa độ đỉnh 1, tọa độ đỉnh 2,…, tọa độ đỉnh n.

Muốn có được 1 lisp như vậy nhưng mà đi nhờ người khác mà yêu cầu nhiều quá thấy cũng ngại. Nên anh em nào chỉ được phần nào thì chỉ cho mình với nha.
- THANKS!!!

Tóm gọn yêu cầu này là "cắt lát" 1 cái solid với chiều dày các lát cắt và hướng do ng dùng nhập vào.
Dễ thì ko dễ nhưng khó thì cũng ko khó
Good luck!
  • 1

Ideas don't matter, execution does!

1908412_308002392716743_8165279281236341


#4 phamthanhbinh

phamthanhbinh

    biết lệnh adcenter

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

Đã gửi 09 December 2011 - 08:45 PM

Em có 1 bản vẽ vd như sau: Muốn có được 1 lisp như vậy nhưng mà đi nhờ người khác mà yêu cầu nhiều quá thấy cũng ngại. Nên anh em nào chỉ được phần nào thì chỉ cho mình với nha. - THANKS!!!

Hề hề hề,
Anh bạn này cũng khéo nói gớm đây?????
Có vài điều muốn trao đổi trước khi co thể làm cái chi đó hè:
1/- Cái bước 1 và 2 thì bạn phải tự làm.
2/- Do cái khối ở bước 2 là không xác dịnh nó tròn méo ra răng, mà khi lấy mắt cắt thì CAD trả về một region chứ chả phải một hình hình học phẳng như bạn nghĩ. Vì thế phải tạo lại boundary của nó. Điều này sẽ dẫn tới việc hơi oái oăm là các boundary này sẽ là LWPOLYLINE tất bạn ạ. Tuy nhiên các LWPOLYLINE này lại không giống như các LWPOLYLINE 2D. (Tỷ như cái boundary tròn thì trả ra cái LWPOLYLINE chỉ có nhõn hai đỉnh ????). Do vậy nếu bạn dồng ý thì mình sẽ làm dưới dạng chuyển tất cả các đối tượng boundary này thành các polyline bằng cái lisp c2p mà bạn đã biết. và kết quả trả về sẽ là các danh sách điểm dài dằng dặc bất kể nó là cái hình chi bạn ạ.
3/- Ấy là mình mới nghĩ chứ chưa hẳn đã là được ngay, nhưng nếu có được thì nó sẽ ra như vậy, bạn có hài lòng không????
4/- Việc cắt lớp kiểu này nếu vớ phải cái hình khù khoằm thì có nhẽ sẽ hơi mệt đấy vì đâu phải chỉ có đường bao ngoài mà còn có các lỗ các rãnh . Ái chà chà, Lisp chả biết có tách nổi các boundary hay không đây???
5/- Mình sẽ test thử cái khối đặc hình nón cụt trước xem sao đã. Đồng ý không????

Hề hề hề, Chúc bạn sớm thành ông kỹ ..... SƯ hè......
  • 0
Chúc các quý Anh trên diễn đàn luôn khỏe, đẻ thêm được nhiều thứ để mót.

#5 ahdvip

ahdvip

    biết zoom

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

Đã gửi 10 December 2011 - 11:27 AM

hi thanks anh!!!
  • 0

#6 ahdvip

ahdvip

    biết zoom

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

Đã gửi 10 December 2011 - 11:29 AM

Tóm gọn yêu cầu này là "cắt lát" 1 cái solid với chiều dày các lát cắt và hướng do ng dùng nhập vào.
Dễ thì ko dễ nhưng khó thì cũng ko khó
Good luck!

anh nói rõ hơn cho em tí nhé.
  • 0

#7 phamthanhbinh

phamthanhbinh

    biết lệnh adcenter

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

Đã gửi 10 December 2011 - 02:49 PM

Em có 1 bản vẽ vd như sau:

Hề hề hề,
Sau một hồi vọc vạch cái yêu cầu của bạn, mình làm thử cái này để bạn coi xem thế nào nhé. Hãy cố gắng test thử với nhiều loại khối đặc đặt ở các vị trí khác nhau xem nhé vì mình không co thời gian để test. Nhìn chung thì chắc nó sẽ có vài nhược điểm như mình đã nói ở bài trước, song nếu bạn chịu khó test thì sẽ tìm ra các lỗi và mới có thể khắc phục được. Mình chỉ làm hoàn toàn theo cảm tính và suy nghĩ cá nhân nên có thể không chuẩn mực như bạn cần được, bạn phải tự kiểm tra và nếu cần thì post lên chứ mình không thể hiểu hết mọi yêu cầu của bạn.
Hy vọng rằng nó sẽ giúp bạn được chút gì trong công việc của bạn


(defun c:secor (/ ent h ssl fn fw h0 h1 h d0 d1 e1 e2 e3 obj cen plst)
(setq ;;;;;;ssl (acet-ss-to-list (ssget))
fn (getfiled "Chon file de save" "" "txt" 1)
fw (open fn "w") )
(princ " Bang liet ke thuoc tinh co ban cua doi tuong \n " fw)
(vl-load-com)
(setq oldos (getvar "osmode"))
(setvar "osmode" 0)
(setq ent (car (entsel "\n Chon khoi can cat ")))
;;;(command "ucs" "ob" (getpoint "\n Chon diem goc tren be mat chuan"))
;;;(setq h (getreal "\n Nhap koang cach cao do mat cat: "))
(setq h0 (getreal "\n Nhap cao do bat dau cat: "))
(setq h1 (getreal "\n Nhap cao do ket thuc cat: "))
(if (not d0) (setq d0 0.5));;;Init dividual distance, global variable
(setq d1 (getreal (strcat "\nLength of 1 segment <" (rtos d0) ">:")));;;Input distance
(if d1 (setq d0 d1) (setq d1 d0));;;Reset or get distance
(setq h (+ h0 d1) i 1)
(while ( and (> h h0) (< h h1))
(command "undo" "be")
(command "section" ent "" "3points" (setq p1 (list 0 0 h)) (setq p2 (polar p1 0 100)) (setq p3 (polar p2 (* 0.5 pi) 50)))
(setq e1 (entlast))
(command "ucs" "ob" (getpoint "\n Chon diem goc tren mat cat"))
(command "move" e1 "" (setq p1 (getpoint "\n Chon diem goc")) (setq p2 (getpoint p1 "\n Chon diem dich")))
(setq obj (vlax-ename->vla-object e1))
(setq cen (vlax-safearray->list (vlax-variant-value (vlax-get-property obj 'Centroid))) )
(command "boundary" cen "" )
(setq e2 (entlast))
(command "move" e2 "" p2 p1)
(command "ucs" "w")
(makepl e2 d1)
(setq e3 (entlast))
(command "erase" e1 e2 "")
(setq plst (acet-geom-vertex-list e3))
(setq txt (strcat "LWPOLYLINE thu " (rtos i 2 0)))
(foreach pt plst
(setq txt (strcat txt "," (rtos (car pt) 2 4) " " (rtos (cadr pt) 2 4) " " (rtos h 2 4)))
)
(princ (strcat txt "\n") fw)
(setq i (1+ i))
(setq h (+ h0 (* i d1)))
(command "undo" "e")
)
(close fw)
(setvar "osmode" oldos)
(princ)

)

;;;-------------------------------------------------------------
(defun makepl ( e d1 / ps pe d d2 p2);;;Make pline along curve e. Length of 1 segment = d1
(vl-load-com);;;Load Visual LISP extensions before use vlax-xxxx functions
(setq
ps (vlax-curve-getStartPoint e);;;Start point
pe (vlax-curve-getEndPoint e);;;End point
d (vlax-curve-getDistAtParam e (vlax-curve-getEndParam e));;;Length of curve e
d2 d1;;;Init variable distance
)
(command "pline");;;Call pline command
(command ps);;;Start point
(while (<= d2 d);;;While not over end point pe
(setq p2 (vlax-curve-getPointAtDist e d2));;;Variable point at d2 = length along curve
(command p2);;;Continue pline command from current point to p2
(setq d2 (+ d2 d1));;;Increase distance d2 by d1
);;;End while
(if (not (equal pe ps 0.01))
(command pe "");;;Pline to pe and finish command
(command "c" )
)
)
;;;-------------------------------------------------------------
Chúc bạn vui và chóng thành tài nhé.
PS: cái này có sử dụng nguyên liệu chính của bác SSG, nếu bạn thấy ngon miệng thì đừng quên cám ơn bác ấy 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.

#8 phamthanhbinh

phamthanhbinh

    biết lệnh adcenter

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

Đã gửi 10 December 2011 - 02:57 PM

anh nói rõ hơn cho em tí nhé.

Hề hề hề,
Thế là quá rõ rồi còn muốn gì nữa???
Dễ không dễ là vì không phải cứ thấy là ăn ngay được.
Khó không khó là vì nếu muốn sẽ có cách làm được chứ chả đến nỗi tắc tị đâu.
Làm cách chi thì bạn phải chờ thôi nếu như không tự làm lấy được.
Hề hề hề.
Trả lời như vậy để bạn tự quyết định xem nên làm hay nên bỏ. Mà nếu muốn làm thì phải lao tâm khổ tứ một chút chớ không phải cứ post yêu cầu lên là có ngay cái bạn cần đâu. Phải biết kiên nhẫn và chịu khó mới thành công được bạn ạ.
  • 1
Chúc các quý Anh trên diễn đàn luôn khỏe, đẻ thêm được nhiều thứ để mót.

#9 ahdvip

ahdvip

    biết zoom

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

Đã gửi 10 December 2011 - 08:58 PM

Hề hề hề,
Thế là quá rõ rồi còn muốn gì nữa???
Dễ không dễ là vì không phải cứ thấy là ăn ngay được.
Khó không khó là vì nếu muốn sẽ có cách làm được chứ chả đến nỗi tắc tị đâu.
Làm cách chi thì bạn phải chờ thôi nếu như không tự làm lấy được.
Hề hề hề.
Trả lời như vậy để bạn tự quyết định xem nên làm hay nên bỏ. Mà nếu muốn làm thì phải lao tâm khổ tứ một chút chớ không phải cứ post yêu cầu lên là có ngay cái bạn cần đâu. Phải biết kiên nhẫn và chịu khó mới thành công được bạn ạ.

hi!!!
Em biết mà. Em không không viết được mấy lisp này nên phải nhờ mấy anh. Nhưng em không có chỉ biết post bài nhờ người khác làm hết mà chẳng biết làm gì cả.
em muốn nói rõ tí để em có thể học hỏi.
em đang bắt đầu học viết lisp nên cần các anh chỉ giáo thêm mà.
thanks anh nha. Để em text thử.
  • 0