Đến nội dung


Hình ảnh

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


  • Please log in to reply
9 replies to this topic

#1 truongkhai

truongkhai

    biết vẽ line

  • Members
  • PipPip
  • 24 Bài viết
Điểm đánh giá: -2 (bình thường)

Đã gửi 21 July 2012 - 03:47 PM

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

#2 dexoso123

dexoso123

    biết lệnh erase

  • Members
  • PipPipPip
  • 108 Bài viết
Điểm đánh giá: 4 (bình thường)

Đã gửi 21 July 2012 - 05:11 PM

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

#3 thanhduan2407

thanhduan2407

    biết lệnh adcenter

  • Advance Member
  • PipPipPipPipPipPipPip
  • 992 Bài viết
Điểm đánh giá: 223 (khá)

Đã gửi 21 July 2012 - 05:30 PM

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



Tôi là con kiến bò trên sa mạc kiến thức bao la. Biển học thật rộng lớn







#4 truongkhai

truongkhai

    biết vẽ line

  • Members
  • PipPip
  • 24 Bài viết
Điểm đánh giá: -2 (bình thường)

Đã gửi 21 July 2012 - 07:41 PM

em thuộc dạng gà mới ra trường nên chưa biết cái đoạn code trên xài thế nào nữa. a chỉ giúp em với.
  • 0

#5 thanhduan2407

thanhduan2407

    biết lệnh adcenter

  • Advance Member
  • PipPipPipPipPipPipPip
  • 992 Bài viết
Điểm đánh giá: 223 (khá)

Đã gửi 21 July 2012 - 08:52 PM

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



Tôi là con kiến bò trên sa mạc kiến thức bao la. Biển học thật rộng lớn







#6 phamvanthiet108

phamvanthiet108

    biết vẽ polygon

  • Members
  • PipPip
  • 73 Bài viết
Điểm đánh giá: 11 (tàm tạm)

Đã gửi 21 July 2012 - 11:13 PM

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

#7 pdvan

pdvan

    HVKT-12

  • Members
  • Pip
  • 7 Bài viết
Điểm đánh giá: 1 (bình thường)

Đã gửi 22 July 2012 - 12:03 PM

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

#8 pdvan

pdvan

    HVKT-12

  • Members
  • Pip
  • 7 Bài viết
Điểm đánh giá: 1 (bình thường)

Đã gửi 22 July 2012 - 12:07 PM

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

#9 Tue_NV

Tue_NV

    KS Võ Quang Tuệ

  • Moderator
  • PipPipPipPipPipPipPip
  • 4296 Bài viết
Điểm đánh giá: 3804 (đỉnh cao)

Đã gửi 22 July 2012 - 05:21 PM

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

#10 thanhduan2407

thanhduan2407

    biết lệnh adcenter

  • Advance Member
  • PipPipPipPipPipPipPip
  • 992 Bài viết
Điểm đánh giá: 223 (khá)

Đã gửi 22 July 2012 - 09:25 PM

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.c...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)
)

  • 0



Tôi là con kiến bò trên sa mạc kiến thức bao la. Biển học thật rộng lớn