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.
truongkhai

hỏi về lệnh đổi thứ tự đầu cuối cho đối tượng line/polyline

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

truongkhai    2

do em thường vẽ taluy, khi cắt 1 đoạn thẳng ra làm 2 phần sau đó dùng lisp vẽ taluy trên mỗi đoạn thì được 2 đoạn taluy ko đối xứng. em nghĩ là đổi chiều đầu cuối cho 1 trong 2 đoạn thẳng thì mới cho ra 2 taluy giống nhau. Mong các bác chỉ giá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
dexoso123    4

Mình cũng bị như thế mà chưa biết cách xử lý, bây giờ chỉ xử lý được theo cách này.

nếu đó là 1 đoạn thẳng, xoay 180 độ là xong. Nếu đó là 1 đường Polyline hãy vẽ 1 đoạn Polyline khác theo chiều bạn muốn sau đó Join cái mới với cái cũ là ok.

  • 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
thanhduan2407    227

Lisp của bạn đây. Mình sưu tầm của các bác trên diễn đàn

(defun c:daochieu (/ C10 C40 C41 C42 C50 C70 CC40 CC41 CC42 DINH ENT ENT2 I N N10 N40 N41 N42 N50 N70 NC40 NC41 NC42 OSMODEC SS SSN SSN2 TEST0 TEST1 C11 N11)
 (while (null(setq ss (entsel "\n Chon polyline: "))))
 (setq osmodec (getvar "osmode"))
 (setvar "osmode" 1)
 (setq dinh (getpoint "\n Chon diem dau: "))
 (setq ssn (car ss))
 (setq ent (entget ssn))
 (if (= (cdr(assoc 0 ent)) "POLYLINE")
(progn
 	(setq test1 (vlax-curve-getEndPoint ssn))
 	(setq test2 (vlax-curve-getStartPoint ssn))
 	(if (=(cdr(assoc 66 ent)) 1)
(progn
  (setq ssn2 (entnext ssn))
  (setq ent2 (entget ssn2))
  (setq test0 (cdr(assoc 10 ent2)))
  (if (or(equal dinh test1 0.00001)(equal test1 test2))
(progn
  	(setq c42 (append c42 (list(cons 42 0))))
  	(setq c40 (append c40 (list(cons 40 0))))
  	(setq c41 (append c41 (list(cons 41 0))))
  	(While(/= (cdr(assoc 0 ent2)) "SEQEND")
 (setq c10 (append c10 (list(assoc 10 ent2))))
 (setq c40 (append c40 (list(assoc 40 ent2))))
 (setq c41 (append c41 (list(assoc 41 ent2))))
 (setq c42 (append c42 (list(assoc 42 ent2))))
 (setq c70 (append c70 (list(assoc 70 ent2))))
 (setq c50 (append c50 (list(assoc 50 ent2))))
 (setq ssn2 (entnext ssn2))
 (setq ent2 (entget ssn2))
 );end while
  	(setq n (- (length c42) 2))
  	(setq i 0)
  	(while (<= i n)
 (setq nc42 (append nc42 (list(nth i c42))))
 (setq nc40 (append nc40 (list(nth i c40))))
 (setq nc41 (append nc41 (list(nth i c41))))
 (setq i (1+ i))
 );end while
  	(setq i 1)
  	(while (<= i n)
 (setq cc42 (append cc42 (list(nth i c42))))
 (setq cc41 (append cc41 (list(nth i c41))))
 (setq cc40 (append cc40 (list(nth i c40))))
 (setq i (1+ i))
 );end while
  	(setq c42 nil c42 cc42 c41 nil c41 cc41 c40 nil c40 cc40)
  	(setq ss (ssget "_P"))
  	(setq ent (entget ssn))
  	(if (=(cdr(assoc 66 ent)) 1)
 (progn
(setq i 0)
(setq ssn2 (entnext ssn))
(setq ent2 (entget ssn2))
(setq n10 (reverse c10))
(setq n40 (reverse nc40))
(setq n41 (reverse nc41))
(setq n42 (reverse nc42))
(setq n70 (reverse c70))
(setq n50 (reverse c50))
(While(/= (cdr(assoc 0 ent2)) "SEQEND")
 	(setq ent2 (subst (nth i n10) (nth i c10) ent2))
 	(setq ent2 (subst (cons 40 (cdr(nth i n41))) (nth i c40) ent2))
 	(setq ent2 (subst (cons 41 (cdr(nth i n40))) (nth i c41) ent2))
 	(setq ent2 (subst (cons 42 (- 0 (cdr(nth i n42)))) (nth i c42) ent2))
 	(setq ent2 (subst (nth i n70) (nth i c70) ent2))
 	(setq ent2 (subst (nth i n50) (nth i c50) ent2))
 	(entmod ent2)
 	(setq i (1+ i))
 	(setq ssn2 (entnext ssn2))
 	(setq ent2 (entget ssn2))
 	);end while
(entupd ssn)
);end progn
 );end if
  	);end progn
);end if
  );end progn
);end if
 	);end progn
);end if
 (if (= (cdr(assoc 0 ent)) "LINE")
(progn    
 	(setq test0 (cdr(assoc 10 ent)))
 	(if (equal dinh test0 0.00001)
(progn
  (setq c10 (assoc 10 ent))
  (setq c11 (assoc 11 ent))
  (setq n10 (assoc 11 ent))
  (setq n11 (assoc 10 ent))
  (setq ent (subst (cons 10 (cdr n10)) c10 ent))
  (setq ent (subst (cons 11 (cdr n11)) c11 ent))
  (entmod ent)
  (entupd ssn)
  );end progn
);end if
 	);end progn
);end if
 (if (= (cdr(assoc 0 ent)) "ARC")
(progn
 	(vl-cmdf "pedit" ss "y" "")
 	(if (= (cdr(assoc 0 ent)) "POLYLINE")
(progn
 	(setq test1 (vlax-curve-getEndPoint ssn))
 	(if (=(cdr(assoc 66 ent)) 1)
(progn
  (setq ssn2 (entnext ssn))
  (setq ent2 (entget ssn2))
  (setq test0 (cdr(assoc 10 ent2)))
  (if (equal dinh test1 0.00001)
(progn
  	(setq c42 (append c42 (list(cons 42 0))))
  	(setq c40 (append c40 (list(cons 40 0))))
  	(setq c41 (append c41 (list(cons 41 0))))
  	(While(/= (cdr(assoc 0 ent2)) "SEQEND")
 (setq c10 (append c10 (list(assoc 10 ent2))))
 (setq c40 (append c40 (list(assoc 40 ent2))))
 (setq c41 (append c41 (list(assoc 41 ent2))))
 (setq c42 (append c42 (list(assoc 42 ent2))))
 (setq c70 (append c70 (list(assoc 70 ent2))))
 (setq c50 (append c50 (list(assoc 50 ent2))))
 (setq ssn2 (entnext ssn2))
 (setq ent2 (entget ssn2))
 );end while
  	(setq n (- (length c42) 2))
  	(setq i 0)
  	(while (<= i n)
 (setq nc42 (append nc42 (list(nth i c42))))
 (setq nc40 (append nc40 (list(nth i c40))))
 (setq nc41 (append nc41 (list(nth i c41))))
 (setq i (1+ i))
 );end while
  	(setq i 1)
  	(while (<= i n)
 (setq cc42 (append cc42 (list(nth i c42))))
 (setq cc41 (append cc41 (list(nth i c41))))
 (setq cc40 (append cc40 (list(nth i c40))))
 (setq i (1+ i))
 );end while
  	(setq c42 nil c42 cc42 c41 nil c41 cc41 c40 nil c40 cc40)
  	(setq ss (ssget "_P"))
  	(setq ent (entget ssn))
  	(if (=(cdr(assoc 66 ent)) 1)
 (progn
(setq i 0)
(setq ssn2 (entnext ssn))
(setq ent2 (entget ssn2))
(setq n10 (reverse c10))
(setq n40 (reverse nc40))
(setq n41 (reverse nc41))
(setq n42 (reverse nc42))
(setq n70 (reverse c70))
(setq n50 (reverse c50))
(While(/= (cdr(assoc 0 ent2)) "SEQEND")
 	(setq ent2 (subst (nth i n10) (nth i c10) ent2))
 	(setq ent2 (subst (cons 40 (cdr(nth i n41))) (nth i c40) ent2))
 	(setq ent2 (subst (cons 41 (cdr(nth i n40))) (nth i c41) ent2))
 	(setq ent2 (subst (cons 42 (- 0 (cdr(nth i n42)))) (nth i c42) ent2))
 	(setq ent2 (subst (nth i n70) (nth i c70) ent2))
 	(setq ent2 (subst (nth i n50) (nth i c50) ent2))
 	(entmod ent2)
 	(setq i (1+ i))
 	(setq ssn2 (entnext ssn2))
 	(setq ent2 (entget ssn2))
 	);end while
(entupd ssn)
);end progn
 );end if
  	);end progn
);end if
  );end progn
);end if
 	);end progn
);end if
 	);end progn
);end if
 (setvar "osmode" osmodec)
 (princ)
 )

P/s: Lần sau bạn nên search trước khi hỏi nhé

  • 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
pdvan    1

bạn vào cad. Đánh lệnh ap. Chọn đường dẫn đến cái lisp đó. Load xong. Dùng lệnh daochieu. Chọn 1 đỉnh Pline. Hết

Bạn ơi hình như lisp này không có tác dụng với đối tượng là Pline, còn với Line thì vẫn dùng được. Bạn kiểm tra lại giúp mình 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
pdvan    1

bạn dùng lệnh Pe sau đó chọn Reverse thế là ok ( bạn dùng cad bao nhiêu?) đây là cách dùng cho cad2007 trở lên có express tool. chúc bạn thành công.

Trong lệnh Pe có option Reverse đâu 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
Tue_NV    3.841

Trong lệnh Pe có option Reverse đâu bạn?

Phiên bản CAD2007 và CAD2008 thì lệnh PE chắc chắn là không có tham số R (Reverse)

Hình như có từ CAD2010.

CAD2012 -> có tham số R (Reverse)

Command: Pe PEDIT Select polyline or [Multiple]: m

Select objects: Specify opposite corner: 1 found

 

Select objects:

Convert Lines, Arcs and Splines to polylines [Yes/No]? <Y> y

Enter an option [Close/Open/Join/Width/Fit/Spline/Decurve/Ltypegen/Reverse/Undo]:

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
thanhduan2407    227

Bạn tham khảo xem lisp này nhé. Thực ra bạn tìm trên diễn đàn có rồi.

http://www.cadviet.com/forum/index.php?showtopic=47313

(defun c:daochieu(/ ss count lwp ent obj oname sss revlwpl revln)
 (vl-load-com)
 (defun revlwpl(/ eo el len)
(setq eo ent)
(setq el (list(assoc 210 ent)))
(while (member (assoc 10 ent) ent)
  (if (= 0.0 (assoc 42 ent))
  (setq el (cons (assoc 42 ent) el))
  (setq el (cons (cons 42 (- (cdr (assoc 42 ent)))) el))
  )
  (setq el (cons (assoc 41 ent) el))
  (setq el (cons (assoc 40 ent) el))
  (setq el (cons (assoc 10 ent) el))
  (setq ent (member (assoc 10 ent) ent))
  (setq ent (cdr ent))
)
(setq len(- (LENGTH eo) (LENGTH (member (assoc 10 eo) eo)) 1))
(while (>= len 0)
  (setq el (cons (nth len eo) el))
  (setq len (- len 1))
)
(setq ent el)
(entmod ent)
 )
 (defun revln (/ pt1 pt2)
(setq pt1 (cons 10 (cdr (assoc 11 ent))))
(setq pt2 (cons 11 (cdr (assoc 10 ent))))
(setq ent (subst pt1 (assoc 10 ent) ent))
(setq ent (subst pt2 (assoc 11 ent) ent))
(entmod ent)
 )

 (princ "\nSelect Lines & Polylines to reverse direction of:   ")
 (setq ss (ssget '((0 . "POLYLINE,LWPOLYLINE,LINE"))))
 (setvar "CMDECHO" 0)
 (command "._UNDO" "_BEgin")
 (if ss
(progn
  (setq count 0 lwp 0)
  (while (> (sslength ss) count)
 (setq ent (ENTGET (ssname ss count))
 	obj (vlax-ename->vla-object (ssname ss count))
 	oname (vlax-get-property obj 'ObjectName)
 )
 (cond
((= oname "AcDb3dPolyline")(setq lwp(+ 1 lwp)))
((= (cdadr ent) "LWPOLYLINE")(revlwpl))
((= (cdadr ent) "POLYLINE")
  (progn
	(setq sss (ssadd (ssname ss count)))
	(vl-cmdf "convertpoly" "Light" sss "")
	(setq ent (ENTGET (ssname sss 0)))
	(revlwpl)
  )
)
((= (cdadr ent) "LINE")(revln))
 )
 (setq count (+ count 1))
  )
)
 )
 (command "._UNDO" "_End")
 (if(> lwp 0)
(if(> lwp 1)
  (princ(strcat "\nCould not reverse " (itoa lwp) " 3dPolylines."))
  (princ"\nCould not reverse the 3dPolyline.")
)
 )
 (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ạ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


×