Chuyển đến nội dung
Diễn đàn CADViet
Đăng nhập để thực hiện theo  
auduongphuc

Nhờ các cao thủ viết dùm Lisp vẽ Wipeout

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

Tình hình là trong các bản vẽ Cad của mình rất hay dùng Wipeout để che các đối tượng khác, nhưng mỗi lần vẽ nó phải click thủ công => rất là lâu.nhiều khi đang vẽ, phải làm việc gì khác, quên nhấn ESC là y như rằng phải vẽ lại từ đầu.trong lệnhWipeout cũng có phần tùy chọn để chọn Pline.Nhưng chỉ sử dụng được cho đoạn thẳng,

Giờ mình muốn nhờ các cao thủ viết dùm 1 Lisp, có thể chọn được tất cả các đối tượng : đường cong, Spline, Pline có cả đường cong ở trong đó...,nói chung là những đối tượng khép kín.

rất mong sớm nhận được sự giúp đỡ. Mình cảm ơn rất nhiều

Chúc CadViet ngày càng thành công.

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ình hình là trong các bản vẽ Cad của mình rất hay dùng Wipeout để che các đối tượng khác, nhưng mỗi lần vẽ nó phải click thủ công => rất là lâu.nhiều khi đang vẽ, phải làm việc gì khác, quên nhấn ESC là y như rằng phải vẽ lại từ đầu.trong lệnhWipeout cũng có phần tùy chọn để chọn Pline.Nhưng chỉ sử dụng được cho đoạn thẳng,

Giờ mình muốn nhờ các cao thủ viết dùm 1 Lisp, có thể chọn được tất cả các đối tượng : đường cong, Spline, Pline có cả đường cong ở trong đó...,nói chung là những đối tượng khép kín.

rất mong sớm nhận được sự giúp đỡ. Mình cảm ơn rất nhiều

Chúc CadViet ngày càng thành công.

deufun c:wi:­wipeout

chon doi tuong

tat ca loai duong

nhan space de thuc hien lenh

 

finish!

:)

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
deufun c:wi:­wipeout

chon doi tuong

tat ca loai duong

nhan space de thuc hien lenh

 

finish!

:)

Ý của bạn "maihanh191" như vậy là sao? mình ko biết nên mới nhờ giúp đỡ, nếu ko được, hay có lý do gì thì cứ nói, đâu cần phải châm chọc nhau như vậy. ko được hay lắm đâu.

có ai biết thì chỉ dùm mình, thank's

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
Ý của bạn "maihanh191" như vậy là sao? mình ko biết nên mới nhờ giúp đỡ, nếu ko được, hay có lý do gì thì cứ nói, đâu cần phải châm chọc nhau như vậy. ko được hay lắm đâu.

có ai biết thì chỉ dùm mình, thank's

Chào bạn Auduongphuc,

Vấn đề của bạn có chút rắc rồi đối với đường spline, nếu chỉ là các polyline thì vấn đề sẽ đơn giản hơn. Hiện mình đang theo hướng chuyển spline thành polyline song như vậy không biết bạn có đồng ý không vì có thể cái Wipeout này sẽ không che hết spline của bạn.

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

Đã có bài bàn về vấn đề này rồi bạn ạ.Wipeout cho đường cong là rất khó,lúc đó phải chia ra thành rất nhiều đoạn thẳng nhỏ.Bạn thử tham khảo giải pháp hatch solid trong bài này xem sao

 

http://www.cadviet.com/forum/index.php?sho...c=24041&hl=

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

Vì wipeout chỉ làm việc với pline đóng và được cấu tạo bởi hoàn toàn là các đoạn thẳng nên có thể dùng xử lý trường hợp này bằng cách vẽ lại đường pline (gồm cả các đoạn cong) hoặc spline bằng 1 đường Pline được chia nhỏ bởi các đoạn thẳng (độ dài các đoạn thẳng đó là tùy ý người dùng). Lisp này trên diễn đàn có rất lâu rồi thì phải, bạn chịu khó search sẽ ra thôi. Mình cũng hay dùng cách này

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

Chức năng tìm kiếm của diễn đàn hình như đang bị lỗi.

Mình post lại lisp của bác ssg cho bạn

;;***********************************************************
;;;CONVERT TO PLINES PROGRAM WITH FULL COMMENTS!
;;;Convert all objects: Line, Pline, Spline, Arc, Circle, Ellipse_
;;;to Plines. Length of 1 segment is specified by user
;;;Copy & Paste to Notepad, Saveas *.lsp, Appload then Type C2P to run
;;;Happy New Year 2008!
;;;Written by ssg - January 2008 - www.cadviet.com
;;;***********************************************************

;;;-------------------------------------------------------------
(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
(command pe "");;;Pline to pe and finish command
)
;;;-------------------------------------------------------------
(defun C:C2P( / d1 ss oldos i e ans);;;Convert to Plines
(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
ss (ssget '((0 . "LINE,LWPOLYLINE,SPLINE,ARC,CIRCLE,ELLIPSE")));;;Selection set
oldos (getvar "osmode");;;Save osmode
i 0;;;Init counter
)
(setvar "osmode" 0);;;Disable osmode
(repeat (sslength ss);;;Repeat for all entities in ss
(setq e (ssname ss i));;;Set e for entity with ordinal i in selection set ss
(makepl e d1);;;Use makepl function. Make pline along e
(setq i (1+ i));;;Increase counter
)
(initget "Y N");;;Init keywords
(setq ans (getkword "\nDelete source objects? [Yes/No] :"));;;Get answer from user
(if (= ans "Y") (command "erase" ss ""));;;Erase source objects if ans = "y" or "Y"
(setvar "osmode" oldos);;;Reset osmode
(princ);;;Silent quit
)
;;;-------------------------------------------------------------

  • Vote tăng 2

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

Nếu về quan niệm lập trình

 

Tạo đối tượng wipeout không thông qua command có sẵn của Cad đối với VBA là khó , Lisp thì mình ko dám chắc lắm

 

Bởi lẽ không có đối tượng được hỗ trợ nào trong Vba cad có nghĩa là wipeout và lisp cũng vậy

 

đối tượng này đc tạo qua việc load object arx Wipeout , mà việc sử dụng cái này thì mình chưa rõ lắm :)

 

Chắc chỉ còn cách chuyển tất cả về pline rồi phải dùng lệnh Wipeout có sẵn thôi, mặc dù chưa cảm thấy thỏa mãn lắm :D

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
Nếu về quan niệm lập trình

 

Tạo đối tượng wipeout không thông qua command có sẵn của Cad đối với VBA là khó , Lisp thì mình ko dám chắc lắm

 

Bởi lẽ không có đối tượng được hỗ trợ nào trong Vba cad có nghĩa là wipeout và lisp cũng vậy

 

đối tượng này đc tạo qua việc load object arx Wipeout , mà việc sử dụng cái này thì mình chưa rõ lắm :iluvyousmiley:

 

Chắc chỉ còn cách chuyển tất cả về pline rồi phải dùng lệnh Wipeout có sẵn thôi, mặc dù chưa cảm thấy thỏa mãn lắm :D

Đối tuợng wipeout có record dữ liệu mô tả rất rõ ràng (mình thử với cad2010). như vậy về nguyên tắc hoàn toàn có thể sử dụng hàm entmake để tạo ra 1 đối tuợng WIPEOUT. Tuy nhiên theo như mình hiểu thì đây lại là 1 đối tuợng phức và mỗi 1 đối tuợng wipeout có 1 UCS riêng. việc chuyển đổi toạ độ các đỉnh của wipeout cần tao từ UCS hiện hành sang UCS của chính wipeout đó thực sự là khá phức tạp và nhức đầu. Thôi thì cứ chơi hàm command cho lành, lisp chạy chậm 1 chút nhưng code đơn giản dễ đọc, dễ hiểu, dễ sử dụng. đỡ mệt mỏi với mấy cái ma trận biến đổi tọa độ. Mình thấy ngay cả các lisp trong express tool họ cũng chỉ xài hàm command

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  

×