Đến nội dung


Hình ảnh
- - - - -

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


  • Please log in to reply
3 replies to this topic

#1 xaydung

xaydung

    biết lệnh trim

  • Members
  • PipPipPip
  • 191 Bài viết
Điểm đánh giá: 12 (tàm tạm)

Đã gửi 19 August 2007 - 12:52 AM

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

#2 vndesperados

vndesperados

    biết lệnh xref

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

Đã gửi 19 August 2007 - 09:21 AM

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
  • 0

#3 xaydung

xaydung

    biết lệnh trim

  • Members
  • PipPipPip
  • 191 Bài viết
Điểm đánh giá: 12 (tàm tạm)

Đã gửi 19 August 2007 - 10:19 AM

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?
  • 0

#4 bemove

bemove

    biết lệnh divide

  • Vip
  • PipPipPipPipPipPip
  • 446 Bài viết
Điểm đánh giá: 1308 (rất tốt)

Đã gửi 20 August 2007 - 08:34 PM

Đâ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
)

  • 0