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  
xaydung

[Đã xong] Lisp tăng số đường gấp khúc của polyline (spl--pl)

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

xaydung    12

Các bác ơi, em đang nghiên cứu 1 lisp có nội dung như sau:

ví dụ trên màn hình là 1 pline gồm 3 đường line

khi chạy lisp hỏi chọn pline(hoặc các pline) cần hiệu chỉnh

nhập số khoảng chia (ví dụ là 2) khi đó kết quả trên màn hình

sẽ là pline cũ nhưng đã được "gấp khúc" thêm 2 lần, tức là

pline bao gồm 6 line chứ không là 3 như ban đầu.

có nghĩa là số khoảng chia càng lớn thì càng giống arc (cung) hơn!

các bác cao thủ có cách nào không!? Em thấy ý tưởng này khá hay đấ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
vndesperados    253
Các bác ơi, em đang nghiên cứu 1 lisp có nội dung như sau:

ví dụ trên màn hình là 1 pline gồm 3 đường line

khi chạy lisp hỏi chọn pline(hoặc các pline) cần hiệu chỉnh

nhập số khoảng chia (ví dụ là 2) khi đó kết quả trên màn hình

sẽ là pline cũ nhưng đã được "gấp khúc" thêm 2 lần, tức là

pline bao gồm 6 line chứ không là 3 như ban đầu.

có nghĩa là số khoảng chia càng lớn thì càng giống arc (cung) hơn!

các bác cao thủ có cách nào không!? Em thấy ý tưởng này khá hay đấy!

 

Cái này sẽ giống SPLINE hơn là ARC

Giải pháp như sau

1 - Vẽ một SPLINE qua các đỉnh của PLINE

2 - Cứ mỗi giữa hai điểm trên SPLINE thì tính một điểm nằm giữa hai điểm đó thuộc SPLINE và bổ sung điểm vừa tính được vào tập điểm của PLINE (lưu ý thứ tự các điểm)

3 - Xóa SPLINE

4 - Vẽ lại PLINE theo tập điểm vừa 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
xaydung    12
Cái này sẽ giống SPLINE hơn là ARC

Giải pháp như sau

1 - Vẽ một SPLINE qua các đỉnh của PLINE

2 - Cứ mỗi giữa hai điểm trên SPLINE thì tính một điểm nằm giữa hai điểm đó thuộc SPLINE và bổ sung điểm vừa tính được vào tập điểm của PLINE (lưu ý thứ tự các điểm)

3 - Xóa SPLINE

4 - Vẽ lại PLINE theo tập điểm vừa tính

 

Đúng rồi, cám ơn bác vndesperados, nhưng mà bác có thể chỉ cho em cách lấy điểm giữa của 1 đường cong spline được không ạ. và vẽ lại pline tự động như thế nào?

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
bemove    1.308

Đây là lisp convert Spline thành Pline

; spline 2 pline convert 
(Defun C:S2P (/ ss pt# cmdecho osmode clayer count ent lay lng pt-list cnt)
 (vl-load-com)
 (setq ss	(ssget '((0 . "spline")))
pt#	(getint "Enter number of segments <100>:")
cmdecho	(getvar "cmdecho")
osmode	(getvar "osmode")
clayer	(getvar "clayer")
count 	0					;spline counter
 );end setq
 (if(null pt#)(setq pt# 100))
 (setvar "cmdecho" 0)
 (command ".undo" "begin")				;begin undo group
 (setvar "osmode" 0)
 (repeat(sslength ss)					;repeat for each spline
   (setq ent	(vlax-ename->vla-object (ssname ss count));change spline to vla-object
  lay	(vlax-get-property ent "layer")		;spline's layer
  lng	(vlax-curve-getDistAtPoint ent(vlax-curve-getEndPoint ent));length of spline
  pt-list(list(vlax-curve-getStartPoint ent))	;coords for start of spline
  cnt 	1.0					;segment counter
   );end setq
   (repeat pt#						;repeat for each segment
     (setq pt-list(cons(vlax-curve-getPointAtDist ent (* lng(/ cnt pt#)))pt-list));add segment's point to pt-list
     (setq cnt(1+ cnt))				;counter to next segment
   );end segment repeat
   (setq cnt 0)					;pline counter
   (setvar "clayer" lay)				;match spline's layer
   (command ".pline"					;start "pline" command
     (repeat(length pt-list)			;repeat for each point
       (command(nth cnt pt-list))		;enter current point
       (setq cnt(1+ cnt))			;counter to next point
       ""					;return value to close "pline" command
     );end point repeat
   );end command
   (setq count(1+ count))				;counter to next spline
 );end spline repeat
 (command ".erase" ss "")
 (setvar "osmode" osmode)
 (setvar "clayer" clayer)
 (command ".undo" "end")				;end of undo group
 (setvar "cmdecho" cmdecho)
 (princ)						;exit quietly
)

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  

×