Chuyển đến nội dung
Diễn đàn CADViet
  • Thông báo

    • Nguyen Hoanh

      CADViet đã hoàn tất nâng cấp   14/09/2017

      Chào các bạn, CADViet đã hoàn tất việc nâng cấp lên phiên bản mới. Tất cả các chức năng đã hoạt động theo kỳ vọng của ban quản trị. Nếu có vấn đề gì cần phản hồi, các bản post ở đây nhé: Trân trọng, Nguyễn Hoành.
Đăng nhập để thực hiện theo  
ahdvip

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

Các bài được khuyến nghị

ahdvip    0

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

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
Detailing    278

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!

  • Vote tăng 1

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
phamthanhbinh    3.123
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è......

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
ahdvip    0

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é.

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
phamthanhbinh    3.123
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é.

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
phamthanhbinh    3.123

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 ạ.

  • Vote tăng 1

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
ahdvip    0

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ử.

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

Tạo một tài khoản hoặc đăng nhập để nhận xét

Bạn cần phải là một thành viên để lại một bình luận

Tạo tài khoản

Đăng ký một tài khoản mới trong cộng đồng của chúng tôi. Điều đó dễ mà.

Đăng ký tài khoản mới

Đăng nhập

Bạn có sẵn sàng để tạo một tài khoản ? Đăng nhập tại đây.

Đăng nhập ngay

Đăng nhập để thực hiện theo  

×