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  
nani

nối nhiều spline!!!!

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

tucdrom    642
a chị nào biết lệnh nối nhiều spline thành một không ạ!!! chỉ cho e với, e xin cảm ơn.

Bạn có thể dùng chương trình Convert Spline to Pline(lệnh tắt là SPL2PL) sau đó dùng lệnh PE của Cad hoặc dùng Lisp để Joint các Pline thành 1 Pline vậy.Hơi thủ công & dài dòng nhưng méo mó có hơn không. :cry:

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
a chị nào biết lệnh nối nhiều spline thành một không ạ!!! chỉ cho e với, e xin cảm ơn.

Mình cũng đang cần nối nhiều spline thành 1 spline chứ không phải nhiều spline thành 1 pline. Không biết ý bác có phải như vậy không?

  • 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
haanh    1.587
không còn cách nào khác hả bác, cách này cũng được nhưng hơi lâu bác nhỉ.

Vậy có cách nào cúng được nhưng hơi... nhanh bác nói cho Pà Kon biết???

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
Tue_NV    3.841
a chị nào biết lệnh nối nhiều spline thành một không ạ!!! chỉ cho e với, e xin cảm ơn.
Bạn có thể dùng chương trình Convert Spline to Pline(lệnh tắt là SPL2PL) sau đó dùng lệnh PE của Cad hoặc dùng Lisp để Joint các Pline thành 1 Pline vậy.Hơi thủ công & dài dòng nhưng méo mó có hơn không.

Đầu tiên, cho phép Tue_NV gửi lời cảm ơn đến bác Nguyễn Hoành, bác ssg cùng các bác trên diễn đàn. Các bác đã đặt những viên gạch đầu tiên vô cùng quý giá. Nếu hiểu đúng và đầy đủ bản chất của lệnh Lisp thì ta có thể làm rất nhiều việc lắm, tạo nên những ứng dụng cực kì hiệu quả cho công việc của mỗi chúng ta.

 

Chào các bạn Nani, tucdrom, haanh :

Đoạn Code sau Tue_NV đã cải tiến dựa trên Lisp của bác ssg và cải tiến dựa trên Code của bác Nguyễn Hoành đã trả lời cho bài viết Làm thế nào để tìm số đối tượng sinh ra bởi lệnh Boundary

Dựa vào ý của bạn tucdrom mình đã biến cái Spline thành Pline sau đó nối chúng lại với nhau thành 1 Pline duy nhất trong cùng một đọan Lisp

;;;***********************************************************
;;;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 tr ss1 cur frome toe) ;;;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


(setq frome (entlast))
(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
)
(setq toe (entlast))
(setq cur frome
ss1 (ssadd)
)
(while (not (eq cur toe)) ;; chon cac doi tuong tu frome den toe
(setq cur (entnext cur)
ss1 (ssadd cur ss1)))



(initget "Y N") ;;;Init keywords
(setq ans (getkword "\nDelete source objects? [Yes/No] <N>:")) ;;;Get answer from user
(if (= ans "Y") (command "erase" ss "")) ;;;Erase source objects if ans = "y" or "Y"

(initget "C K") ;;;Init keywords
(setq ans (getkword "\nBan co muon noi cac Pline vua tao khong [C/K] <K>:")) ;;;Get answer from user
(if (= ans "C") (Command "Pedit" "M" ss1 "" "j" "0.5" "")) ;;;join Pline


(setvar "osmode" oldos) ;;;Reset osmode
(princ) ;;;Silent quit
)
;;;-------------------------------------------------------------

Chúc các bạn thành công :cry:

  • 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

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  

×