Chuyển đến nội dung
Diễn đàn CADViet
Học AutoCAD Online cùng CADViet
Đăng nhập để thực hiện theo  
tncd1504

Lisp convert arc, circle to polyline

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

Tui cần chia những đường cong như arc, circle thành những phần tử polyline để tạo wipeout và xuất wa những phần mềm tính toán bằng phương pháp phần tử hữu hạn. Tui lên google search đc cái lisp này thấy cũng ok nhưng mà nó chỉ có option chia theo segment length. Có cách nào chỉnh cái lisp này sao cho nó có thêm option chia theo "number of segments" không? :cheers:

(defun c:Segs (/ CLEN ENT I J PTS SEGNUM SS)
 (vl-load-com); Lee Mac  ~  30.01.10

 (setq *doc  (cond (*doc) ((vla-get-ActiveDocument (vlax-get-acad-object))))		
	*sLen (cond (*sLen) (10.)))

 (if (and (setq j -1 ss (ssget "_:L" '((0 . "ARC,CIRCLE,*POLYLINE,SPLINE,LINE,ELLIPSE"))))
	   (not (initget 6))
	   (setq *sLen (cond ((getdist (strcat "\nSpecify Segment Length <"
										   (rtos *sLen) "> : "))) (*sLen))))

(while (setq ent (ssname ss (setq j (1+ j))))
  (vla-StartUndoMark *doc)

  (setq cLen (vlax-curve-getDistAtParam ent
			   (vlax-curve-getEndParam ent)) segNum (fix (/ cLen *sLen)) i -1)

  (or (zerop (rem cLen *sLen)) (setq segNum (1+ segNum)))

  (repeat (1+ segNum)
	(setq pts (cons (cond ((vlax-curve-getPointAtDist ent
							 (* (setq i (1+ i)) *sLen)))
						  ((vlax-curve-getEndPoint ent)))  pts)))

  (entmake (append (list (cons 0   "LWPOLYLINE")
						 (cons 100 "AcDbEntity")
						 (cons 100 "AcDbPolyline")
						 (cons 90 (length pts))
						 (cons 70 0))
				   (mapcar (function (lambda (a) (cons 10 a))) pts)))

  (entdel ent) (setq pts nil)
  (vla-EndUndoMark *doc)))

 (princ))

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ội cho thành viên này quá ! Lâu quá rồi không thấy cao thủ CADVIET nào giúp cả

Cũng như mình post bài "Tại sao không cập nhật dữ liệu mở rộng" mà cũng không thấy xuất hiện Cao Thủ

 

Vì vậy, sau thời gian nghiên cứu mình sẽ giúp cho bạn đoạn mã này nhé

Mong rằng bạn sẽ thích nó. Có gì pm cho mình

 

(defun c:WIPE (/)
 (setvar "cmdecho" 0)
 (command "_.undo" "be")
 (setvar "regenmode" 1)
 (setq osmode (getvar "osmode"))

 (setq colo (getvar "clayer"))
 (if (not (tblsearch "layer" "WIPE-TAM"))
   (command "layer" "n" "WIPE-TAM" "color" "3"	"WIPE-TAM" "s"
     "WIPE-TAM"	\n)
   (command "layer" "s" "WIPE-TAM" \n)
 )
 (setvar "osmode" 0)
 (command "ucs" "")

 (setq abc (entsel "\nChon doi tuong :"))
 (setq KC (getreal "\nNhap khoang cach de chia cung : "))

 (COMMAND "MEASURE" ABC KC)
 (setq	ss (ssget "X"
	  '(
	    (-4 . "		    (0 . "POINT")
	    (8 . "WIPE-TAM")
	    (-4 . "AND>")
	   )
   )
 )
 (command "pline")
 (setq x 0)
 (repeat (SSlength ss)
   (setq ent (ssname ss x))
   (setq ents (entget ent))
   (setq pt (cdr (assoc 10 ents)))
   (command pt)
   (setq x (+ x 1))
 )
 (command "")

 (COMMAND "erase" ss "")

 (setvar "clayer" colo)
 (setvar "osmode" osmode)
 (command "_.undo" "e")
)

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  

×