Đến nội dung


Hình ảnh
- - - - -

Hỏi cách chuyển đổi vị trí tọa độ đầu cuối của 1 polyline


  • Please log in to reply
29 replies to this topic

#1 doanduyhung

doanduyhung

    biết vẽ spline

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

Đã gửi 20 April 2009 - 04:02 PM

Ban đầu
Hình đã gửi
Chuyền đổi
Hình đã gửi
Mục đích hoán đổi vị trí tọa độ của polyline theo chiều ngược lại nhưng vẩn giữ nguyên polyline ban đầu.
Bạn nào có list chuyển đổi thì giúp mình với nhé.
  • -1

#2 binharch77

binharch77

    biết dimcontinue

  • Members
  • PipPipPipPipPip
  • 372 Bài viết
Điểm đánh giá: 163 (tàm tạm)

Đã gửi 20 April 2009 - 04:06 PM

Ban đầu
Hình đã gửi
Chuyền đổi
Hình đã gửi
Mục đích hoán đổi vị trí tọa độ của polyline theo chiều ngược lại nhưng vẩn giữ nguyên polyline ban đầu.
Bạn nào có list chuyển đổi thì giúp mình với nhé.

bạn dùng lệnh align cũng được mà :cheers:
  • 1

#3 doanduyhung

doanduyhung

    biết vẽ spline

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

Đã gửi 20 April 2009 - 04:18 PM

bạn dùng lệnh align cũng được mà :cheers:

Dùng Align thi polyline bị xoay mất rồi, ở đây mình chỉ muốn đảo chiều verter của polyline đó thôi
  • 1

#4 Tue_NV

Tue_NV

    KS Võ Quang Tuệ

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

Đã gửi 20 April 2009 - 04:37 PM

Dùng Align thi polyline bị xoay mất rồi, ở đây mình chỉ muốn đảo chiều verter của polyline đó thôi

Bạn hãy sử dụng lại lệnh Align xem sao. Bạn binharch77 nói đúng đó.
Nếu sử dụng Lisp thì Code đây :
(defun c:Cdc()
(vl-load-com)
(prompt "\n Chon polyline :")
(setq curve (car(entsel "\n Chon Polyline :")))
(setq dau (vlax-curve-getStartPoint curve))
(setq cuoi (vlax-curve-getEndPoint curve))
(Command "Align" curve "" dau cuoi cuoi dau "" "")
(princ)
)

  • 2

#5 daotac541

daotac541

    biết vẽ circle

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

Đã gửi 20 April 2009 - 04:54 PM

Em thấy cái lips của bác Tue có vấn đề !
nếu pline chỉ có 2 điểm thì ko vấn đề ! Nhưng nếu pline có nhiều hơn 3 điểm thì nó chỉ giữ được điểm đầu và cuối còn các điểm trung gian thì bị thay đổi hết ( hình như bạn ấy yêu cầu các điểm trung gian cũng ko thay đổi ). Bác xem lại dùm em nhé !!!
  • 1

#6 doanduyhung

doanduyhung

    biết vẽ spline

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

Đã gửi 20 April 2009 - 08:50 PM

Bạn hãy sử dụng lại lệnh Align xem sao. Bạn binharch77 nói đúng đó.
Nếu sử dụng Lisp thì Code đây :

(defun c:Cdc()
(vl-load-com)
(prompt "\n Chon polyline :")
(setq curve (car(entsel "\n Chon Polyline :")))
(setq dau (vlax-curve-getStartPoint curve))
(setq cuoi (vlax-curve-getEndPoint curve))
(Command "Align" curve "" dau cuoi cuoi dau "" "")
(princ)
)

Bác xem lại dùm nhé, làm cách này nếu polyline có nhiều đoạn thì nó bị thay đổi rồi
  • 1

#7 haanh

haanh

    biết lệnh adcenter

  • Members
  • PipPipPipPipPipPipPip
  • 2875 Bài viết
Điểm đánh giá: 1554 (rất tốt)

Đã gửi 20 April 2009 - 09:30 PM

Ban đầu
Hình đã gửi
Chuyền đổi
Hình đã gửi
Mục đích hoán đổi vị trí tọa độ của polyline theo chiều ngược lại nhưng vẩn giữ nguyên polyline ban đầu.
Bạn nào có list chuyển đổi thì giúp mình với nhé.


khổ quá em xin van nạy các bác ngả nón!!!!!!!????? các bác cứ quan trọng hóa vấn đề như nhà bác học!!!! ko biết nhà bác học nào ứ nhể! cái nhà bác học đã đục 2 lỗ :
1 lỗ cho con bò đi qua
1 lỗ cho con lợn đi qua
trong khi chỉ cần đục một lỗ cho con bò chui lọt tất dĩ nhiên con lợn cũng chui lọt ! và rằng thì mà là con chuột nhắt cũng chui lọt....
  • 0

“Sống trong đời sống cần có một tấm lòng / Để làm gì em biết không ? / Để gió cuốn đi, để gió cuốn đi...”


#8 binharch77

binharch77

    biết dimcontinue

  • Members
  • PipPipPipPipPip
  • 372 Bài viết
Điểm đánh giá: 163 (tàm tạm)

Đã gửi 20 April 2009 - 09:33 PM

khổ quá em xin van nạy các bác ngả nón!!!!!!!????? các bác cứ quan trọng hóa vấn đề như nhà bác học!!!! ko biết nhà bác học nào ứ nhể! cái nhà bác học đã đục 2 lỗ :
1 lỗ cho con bò đi qua
1 lỗ cho con lợn đi qua
trong khi chỉ cần đục một lỗ cho con bò chui lọt tất dĩ nhiên con lợn cũng chui lọt ! và rằng thì mà là con chuột nhắt cũng chui lọt....

hề hề ... cao thủ cao thủ :cheers: :)
  • 1

#9 Nguyen Hoanh

Nguyen Hoanh

    biết lệnh adcenter

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

Đã gửi 20 April 2009 - 09:45 PM

Có thể Doanduyhung lấy ví dụ không điển hình nên mọi người đã hiểu nhầm. Trong một số trường hợp, chiều của polyline (liên quan đến điểm xuất phát của polyline) là quan trọng. Với polyline chỉ gồm 2 điểm thì đơn giản là rotate 180 độ tại trung điểm là coi như xong. Nhưng với polyline có nhiều điểm hơn thì không làm được như vậy, nếu rotate (hay align) thì chiều polyline thay đổi nhưng kéo theo các đỉnh cũng bị dịch chuyển so với hình gốc.

Các bạn thử dùng lisp này xem sao. Lệnh là REP (REverse Polyline)
(defun c:rep( / c10 tt)
(setq
tt (entget (car (entsel "\nHay pick vao mot Polyline: ")))
c10 (reverse (vl-remove-if '(lambda (x) (/= (car x) 10)) tt))
tt (mapcar '(lambda (x) (if (= 10 (car x)) (setq e (car c10) c10 (cdr c10) e e) x)) tt)
)
(entmod tt)
(princ)
)
(vl-load-com)
Lisp này chỉ áp dụng cho các polyline không chứa arc.
  • 3

#10 haanh

haanh

    biết lệnh adcenter

  • Members
  • PipPipPipPipPipPipPip
  • 2875 Bài viết
Điểm đánh giá: 1554 (rất tốt)

Đã gửi 20 April 2009 - 10:44 PM

Có thể Doanduyhung lấy ví dụ không điển hình nên mọi người đã hiểu nhầm. Trong một số trường hợp, chiều của polyline (liên quan đến điểm xuất phát của polyline) là quan trọng. Với polyline chỉ gồm 2 điểm thì đơn giản là rotate 180 độ tại trung điểm là coi như xong. Nhưng với polyline có nhiều điểm hơn thì không làm được như vậy, nếu rotate (hay align) thì chiều polyline thay đổi nhưng kéo theo các đỉnh cũng bị dịch chuyển so với hình gốc.

Các bạn thử dùng lisp này xem sao. Lệnh là REP (REverse Polyline)

(defun c:rep( / c10 tt)
(setq
tt (entget (car (entsel "\nHay pick vao mot Polyline: ")))
c10 (reverse (vl-remove-if '(lambda (x) (/= (car x) 10)) tt))
tt (mapcar '(lambda (x) (if (= 10 (car x)) (setq e (car c10) c10 (cdr c10) e e) x)) tt)
)
(entmod tt)
(princ)
)
(vl-load-com)
Lisp này chỉ áp dụng cho các polyline không chứa arc.

Em thấy ý kiến của bác Hoành hoàn toàn hợp lý vì bác đưa ra trường hợp tổng quát chung cho mọi trường hợp. Vì bác doanduyhung chỉ đưa ra 1 trường hợp cụ thể nên em cũng ... thú thực với bác là ăn nói chưa được tổng hợp ...có gì ko phải bác bỏ qua cho em nhá! Em xin cảm ơn bác và sẽ rút kinh nghiệm trước khi nhận xét đáng giá một việc gì đó!
  • 0

“Sống trong đời sống cần có một tấm lòng / Để làm gì em biết không ? / Để gió cuốn đi, để gió cuốn đi...”


#11 dien14

dien14

    biết zoom

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

Đã gửi 21 April 2009 - 08:51 AM

Em mới học vẽ ko chưa biết sử dụng lisp . E ko biết chuyển đổi vị trí toạ độ điểm đầu và cuối của Polyline để làm gì , dung nó khi nào. Các anh vẽ hình minh hoạ về chuyển đổi bằng sử dụng lisp để chuyển đổi nhé em cám ơn trước.
  • 0

#12 tdvn

tdvn

    biết lệnh rotate

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

Đã gửi 21 April 2009 - 09:32 AM

Mục đích hoán đổi vị trí tọa độ của polyline theo chiều ngược lại nhưng vẩn giữ nguyên polyline ban đầu.
Bạn nào có list chuyển đổi thì giúp mình với nhé.

Mục đích để làm gì vậy nhỉ. Bạn nên nghĩ cách xử lý bài toán của mình theo một polyline có chiều bất kỳ thì hơn. Nếu thuận thì xử lý thế này, nếu ngược thì thế này..., Còn nếu đổi chiều mà không kiểm tra có khi lại làm thuận thành nghịch.
  • 0

#13 daotac541

daotac541

    biết vẽ circle

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

Đã gửi 21 April 2009 - 11:28 AM

Mục đích để làm gì vậy nhỉ. Bạn nên nghĩ cách xử lý bài toán của mình theo một polyline có chiều bất kỳ thì hơn. Nếu thuận thì xử lý thế này, nếu ngược thì thế này..., Còn nếu đổi chiều mà không kiểm tra có khi lại làm thuận thành nghịch.

cái này ở chỗ em dùng để đổi chiều khi vẽ đường viền đá !
Thx bác Hoành nhiều nhiều !!!!!!!!!!!!
  • 0

#14 doanduyhung

doanduyhung

    biết vẽ spline

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

Đã gửi 21 April 2009 - 12:31 PM

Có thể Doanduyhung lấy ví dụ không điển hình nên mọi người đã hiểu nhầm. Trong một số trường hợp, chiều của polyline (liên quan đến điểm xuất phát của polyline) là quan trọng. Với polyline chỉ gồm 2 điểm thì đơn giản là rotate 180 độ tại trung điểm là coi như xong. Nhưng với polyline có nhiều điểm hơn thì không làm được như vậy, nếu rotate (hay align) thì chiều polyline thay đổi nhưng kéo theo các đỉnh cũng bị dịch chuyển so với hình gốc.

Các bạn thử dùng lisp này xem sao. Lệnh là REP (REverse Polyline)

(defun c:rep( / c10 tt)
(setq
tt (entget (car (entsel "\nHay pick vao mot Polyline: ")))
c10 (reverse (vl-remove-if '(lambda (x) (/= (car x) 10)) tt))
tt (mapcar '(lambda (x) (if (= 10 (car x)) (setq e (car c10) c10 (cdr c10) e e) x)) tt)
)
(entmod tt)
(princ)
)
(vl-load-com)
Lisp này chỉ áp dụng cho các polyline không chứa arc.

Thank bác nhé để mình mò thêm code cho polyline co chứa arc xem sao.
Mục đích cái này để mình phát triển thiết kế tuyến đường trên bình đồ thôi.
Thank bác nhiều
  • 0

#15 doanduyhung

doanduyhung

    biết vẽ spline

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

Đã gửi 21 April 2009 - 12:43 PM

Mới sưu tầm trên mạng; cái này dùng cho cả polyline chứa arc gửi lại cho anh em nào quan tâm nhé
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(defun c:rpl ()
(setq again nil)
(setq p-ent nil)
(prompt "\nSelect a polyline: ")
(while (not p-ent)
(setq p-ent (car (entsel)))
(if (not p-ent)
(prompt
"\nNo object selected; select again: "
) ;_ end of prompt
(progn
(if (and (/= (dxf 0 p-ent) "POLYLINE")
(/= (dxf 0 p-ent) "LWPOLYLINE")
) ;_ end of and
(progn
(prompt "\nNot a polyline, select again:"
) ;_ end of prompt
(setq p-ent nil)
) ; progn
) ;_ end of if
) ;_ end of progn
) ;_ end of if
) ;_ end of while
(setq etype (dxf 0 p-ent)
x-ent p-ent
is-closed (dxf 70 p-ent)
) ; setq
(if (= etype "LWPOLYLINE")
(progn
(setq num-vert (dxf 90 p-ent)
elist (entget p-ent)
elist (member (assoc 10 elist) elist)
vvlist nil
) ; setq
(repeat num-vert
(setq vlist (list (cdr (assoc 10 elist))))
(setq vlist
(append vlist
(list (cdr (assoc 42 elist)))
) ;_ end of append
) ;_ end of setq
(setq vvlist (append vvlist
(list vlist)
) ;_ end of append
) ;_ end of setq
(setq elist (cdr elist)
elist (member (assoc 10 elist) elist)
) ; setq
) ; repeat
) ; progn lwpolyline
(progn
(setq vvlist nil
p-ent (entnext p-ent)
) ; setq
(while (/= "SEQEND"
(cdr
(assoc 0 (entget p-ent))
) ;_ end of cdr
) ;_ end of /=
(setq vlist (list (dxf 10 p-ent)))
(setq vlist (append vlist
(list (dxf 42 p-ent))
) ;_ end of append
) ;_ end of setq
(setq vvlist (append vvlist
(list vlist)
) ;_ end of append
) ;_ end of setq
(setq p-ent (entnext p-ent))
) ; while
) ; progn polyline
) ; if
(setq p-list (mapcar 'car vvlist)
p-list (reverse p-list)
b-list (mapcar 'cadr vvlist)
b-list (reverse b-list)
b-first (car b-list)
b-list (cdr b-list)
b-list (append b-list (list b-first))
b-list (mapcar '- b-list)
) ; setq
(setq enlist (list '(0 . "LWPOLYLINE")
'(100 . "AcDbEntity")
'(100 . "AcDbPolyline")
(cons 90 (length p-list))
(cons 70 (dxf 70 x-ent))
(cons 8 (dxf 8 x-ent))
) ; list
) ; setq
(setq elst nil)
(repeat (length p-list)
(setq
elst (append elst
(list (cons 10 (car p-list)))
) ;_ end of append
) ; setq
(setq
elst (append elst
(list (cons 42 (car b-list)))
) ;_ end of append
) ; setq
(setq p-list (cdr p-list))
(setq b-list (cdr b-list))
) ; repeat
(setq enlist (append enlist elst))
(entdel x-ent)
(entmake enlist)
(prompt "\nPolyline direction is reversed.\n ")
(princ)
) ; rpl

(defun dxf (code ename)
(cdr (assoc code (entget ename)))
) ;_ end of dxf
  • 1

#16 duy782006

duy782006

    PHẠM QUỐC DUY

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 2155 Bài viết
Điểm đánh giá: 1360 (rất tốt)

Đã gửi 21 April 2009 - 12:43 PM

Mục đích để làm gì vậy nhỉ. Bạn nên nghĩ cách xử lý bài toán của mình theo một polyline có chiều bất kỳ thì hơn. Nếu thuận thì xử lý thế này, nếu ngược thì thế này..., Còn nếu đổi chiều mà không kiểm tra có khi lại làm thuận thành nghịch.

Trường hợp này thường là do bạn ấy dùng linetype không có tính chất đối xứng. Thường thi lạo ra linetype không đối xứng người tạo cẩn thận sẽ tạo ra 1 linetype thuận và 1 linetype nghịch. Ví dụ đường taluy có khi mình muốn taluy phía này có khi muốn phía kia. Bạn này theo mình nghỉ trong tay lại có 1 đường thuận mà không có đường nghịch nên mới có yêu cầu như trên.
  • 1

Cứ ngỡ trần gian là cõi thật.Cho nên tất bật đến bây giờ.
Tạo hộp thoại bằng lisp My blog QUY ĐỊNH ĐẶT TÊN TOPIC TRONG CHUYÊN MỤC LISPD http://ktsduy.wordpress.com/
Để cám ơn chỉ cần nhấn rep_up.png
(Là nhấn vào nút đó phía bài viết của người ta í chứ đừng có nhè cái hình này mà nhấn miết đi nha :-D


#17 only102

only102

    biết vẽ pline

  • Advance Member
  • PipPip
  • 63 Bài viết
Điểm đánh giá: 15 (tàm tạm)

Đã gửi 10 February 2011 - 10:28 AM

Bạn hãy sử dụng lại lệnh Align xem sao. Bạn binharch77 nói đúng đó.
Nếu sử dụng Lisp thì Code đây :

(defun c:Cdc()
(vl-load-com)
(prompt "\n Chon polyline :")
(setq curve (car(entsel "\n Chon Polyline :")))
(setq dau (vlax-curve-getStartPoint curve))
(setq cuoi (vlax-curve-getEndPoint curve))
(Command "Align" curve "" dau cuoi cuoi dau "" "")
(princ)
)


  • -3
Không sợ việc gì khó! Chỉ sợ việc bất khả thi...

#18 only102

only102

    biết vẽ pline

  • Advance Member
  • PipPip
  • 63 Bài viết
Điểm đánh giá: 15 (tàm tạm)

Đã gửi 10 February 2011 - 10:35 AM

Mọi nguời trong diễn đàn sao vậy nhỉ? cứ phức tạp hoá vấn đề... Mình tham gia muộn quá, chứ cái này chỉ cần vẽ 1 polyline ngược lại rồi joint vào. Thế là đảo chiều được rồi
  • -2
Không sợ việc gì khó! Chỉ sợ việc bất khả thi...

#19 gia_bach

gia_bach

    biết lệnh adcenter

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 1435 Bài viết
Điểm đánh giá: 1426 (rất tốt)

Đã gửi 10 February 2011 - 11:09 AM

Mọi nguời trong diễn đàn sao vậy nhỉ? cứ phức tạp hoá vấn đề... Mình tham gia muộn quá, chứ cái này chỉ cần vẽ 1 polyline ngược lại rồi joint vào. Thế là đảo chiều được rồi

Không phải Mọi nguời cứ phức tạp hoá vấn đề. mà là do bạn "đơn giản hóa vấn đề đó thôi ?!"
Giả sử polyline có 50 hay 100 segment thì bạn vẽ bao giờ mới xong ?
Chưa kể t/hợp polyline có segment là cung tròn ?

Biết 1,2 mà chưa biết 50 (hay 100) là vậy đó! :rolleyes:
  • 1

#20 duy782006

duy782006

    PHẠM QUỐC DUY

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 2155 Bài viết
Điểm đánh giá: 1360 (rất tốt)

Đã gửi 10 February 2011 - 01:40 PM

Không phải Mọi nguời cứ phức tạp hoá vấn đề. mà là do bạn "đơn giản hóa vấn đề đó thôi ?!"
Giả sử polyline có 50 hay 100 segment thì bạn vẽ bao giờ mới xong ?
Chưa kể t/hợp polyline có segment là cung tròn ?

Biết 1,2 mà chưa biết 50 (hay 100) là vậy đó! :rolleyes:

Bác giabach hiểu sai ý của only rồi. Lám như của only là cách mình hay dùng:
-Vẽ 1 pline theo chiều mong muốn.
-Joint cái pline mới vào lipne cũ (chọn cái mới trước)thiì nó đảo chiều pline gốc của mình lại đương nhiên bị dính thèn mới vào.
-Bứt cái mới dính bỏ đi thì xong thủ tục.
Nói vậy không phải mình đồng ý với bạn only Có lisp giải quyết thì ngon hơn nhiều chứ.
  • 1

Cứ ngỡ trần gian là cõi thật.Cho nên tất bật đến bây giờ.
Tạo hộp thoại bằng lisp My blog QUY ĐỊNH ĐẶT TÊN TOPIC TRONG CHUYÊN MỤC LISPD http://ktsduy.wordpress.com/
Để cám ơn chỉ cần nhấn rep_up.png
(Là nhấn vào nút đó phía bài viết của người ta í chứ đừng có nhè cái hình này mà nhấn miết đi nha :-D