Đến nội dung


Hình ảnh
* * * - - 2 Bình chọn

Thêm node vào đường Pline


  • Please log in to reply
75 replies to this topic

#21 nataca

nataca

    biết lệnh adcenter

  • Members
  • PipPipPipPipPipPipPip
  • 712 Bài viết
Điểm đánh giá: 553 (tốt)

Đã gửi 29 April 2009 - 02:51 PM

Cám ơn bạn gia bach, lisp của bạn viết khá ok nhưng chon điểm chưa đc chính xác lắm.
Chúc bạn vui! :(

Vậy thì bạn dùng cái này xem sao them dinh Pline
Lệnh là IV (insert vertex)
  • 0

#22 nataca

nataca

    biết lệnh adcenter

  • Members
  • PipPipPipPipPipPipPip
  • 712 Bài viết
Điểm đánh giá: 553 (tốt)

Đã gửi 29 April 2009 - 03:02 PM

Bạn chạy thử LISP này nhé.

(defun c:AddVertex (/ Sel Pt Obj CoordList cnt ParmPt cnt2 Ang tmpPt1 tmpPt2)
(if
(and
(setq Sel (entsel "\n Chon vi tri can them Node tren Polyline : "))
(= (cdr (assoc 0 (entget (car Sel)))) "LWPOLYLINE")
(setq Pt (trans (vlax-curve-getClosestPointTo (car Sel) (trans (cadr Sel) 1 0)) 0 (car Sel)))
(setq Obj (vlax-ename->vla-object (car Sel)))
(setq CoordList (vlax-get Obj 'Coordinates))
)
(progn
(setq cnt 0)
(setq ParmPt 1)
(while (< (1+ cnt) (length CoordList))
(setq cnt2
(if (>= (setq cnt2 (+ 2 cnt)) (length CoordList))
(- cnt2 (length CoordList))
cnt2
)
)
(setq Ang
(angle
(setq tmpPt1
(list
(nth cnt CoordList)
(nth (1+ cnt) CoordList)
)
)
(setq tmpPt2
(list
(nth cnt2 CoordList)
(nth (1+ cnt2) CoordList)
)
)
)
)
(if
(or
(equal (angle Pt tmpPt1) Ang 0.000001)
(equal (angle Pt tmpPt2) Ang 0.000001)
)
(setq cnt (length CoordList))
(progn
(setq ParmPt (1+ ParmPt))
(setq cnt (+ 2 cnt))
)
)
)
(vlax-invoke Obj 'AddVertex ParmPt (list (car Pt) (cadr Pt)))
)
)
(princ)
)

lisp này cũng tốt đấy chứ. Chỉ có điều nếu tách nhập điểm riêng thì người dùng bắt điểm chính xác hơn.
  • 1

#23 AGi

AGi

    biết vẽ ellipse

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

Đã gửi 29 April 2009 - 03:17 PM

Vậy thì bạn dùng cái này xem sao them dinh vao duong pline
Lệnh là IV (insert vertex)

Chào bạn nataca!
Cám ơn bạn đã tham gia viết lisp giúp mính, nhưng sao khi chay lisp của bạn lại xuất hiện bảng thông báo này: :(
http://www.cadviet.c...enShot001_1.jpg
  • 0

#24 nataca

nataca

    biết lệnh adcenter

  • Members
  • PipPipPipPipPipPipPip
  • 712 Bài viết
Điểm đánh giá: 553 (tốt)

Đã gửi 29 April 2009 - 03:30 PM

Chào bạn nataca!
Cám ơn bạn đã tham gia viết lisp giúp mính, nhưng sao khi chay lisp của bạn lại xuất hiện bảng thông báo này: :(
http://www.cadviet.c...enShot001_1.jpg

thôi toi :( . Mình quên không bỏ cái khoá đi. Mình edit lại rồi đấy.
  • 1

#25 AGi

AGi

    biết vẽ ellipse

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

Đã gửi 29 April 2009 - 03:42 PM

thôi toi :( . Mình quên không bỏ cái khoá đi. Mình edit lại rồi đấy.

Ngon lành rồi đó bạn nataca!
Nhưng nếu mình muốn pick nhiều điểm mà ko cần nhập lại lệnh, bạn có thể Edit lại giúp mình đc ko? Mình ko biết AutoLisp.
Thanks bạn nataca rất nhiều.
Chúc bạn vui!
  • 0

#26 nataca

nataca

    biết lệnh adcenter

  • Members
  • PipPipPipPipPipPipPip
  • 712 Bài viết
Điểm đánh giá: 553 (tốt)

Đã gửi 29 April 2009 - 03:49 PM

Ngon lành rồi đó bạn nataca!
Nhưng nếu mình muốn pick nhiều điểm mà ko cần nhập lại lệnh, bạn có thể Edit lại giúp mình đc ko? Mình ko biết AutoLisp.
Thanks bạn nataca rất nhiều.
Chúc bạn vui!

Cái này giúp bạn thêm nhiều đỉnh 1 lúc trên đường Pline thêm nhiều đỉnh vào pline
Lệnh vẫn là IV
  • 2

#27 AGi

AGi

    biết vẽ ellipse

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

Đã gửi 29 April 2009 - 04:05 PM

Cái này giúp bạn thêm nhiều đỉnh 1 lúc trên đường Pline thêm nhiều đỉnh vào pline
Lệnh vẫn là IV

Cám ơn bạn Nataca! Đây đúng là cái mình đang cần.
Cám ơn các bạn Tue_NV, SONCAD, gia_bach, duy782006, phamthanhbinh,...
Cám ơn diendanCADViet!
  • 0

#28 gia_bach

gia_bach

    biết lệnh adcenter

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

Đã gửi 30 April 2009 - 10:47 AM

Mình chạy thử rồi Lisp rất ok nhưng để chọn được điểm chèn Node chính xác thì rất khó bạn Gia bach ah.

Ví dụ mình muốn thêm Node vào chính giữa 2 đỉnh của Polyline rất khó để chọn được vị trí đó.

Bạn chạy thử lại Lisp này nhé.
(defun c:AddVertex (/ Sel Pt Obj CoordList cnt ParmPt cnt2 Ang tmpPt1 tmpPt2)
(if
(and
(setq Sel (entsel "\n Chon Polyline can them Node : "))
(= (cdr (assoc 0 (entget (car Sel)))) "LWPOLYLINE")
(setq Obj (vlax-ename->vla-object (car Sel)))
)
(progn
(while (setq Pt (getpoint "\n Chon vi tri tren Polyline can them Node : "))
(setq CoordList (vlax-get Obj 'Coordinates))
(setq cnt 0)
(setq ParmPt 1)
(while (< (1+ cnt) (length CoordList))
(setq cnt2
(if (>= (setq cnt2 (+ 2 cnt)) (length CoordList))
(- cnt2 (length CoordList))
cnt2
)
)
(setq Ang
(angle
(setq tmpPt1 (list (nth cnt CoordList) (nth (1+ cnt) CoordList) ) )
(setq tmpPt2 (list(nth cnt2 CoordList) (nth (1+ cnt2) CoordList) ) )
)
)
(if
(or
(equal (angle Pt tmpPt1) Ang 0.000001)
(equal (angle Pt tmpPt2) Ang 0.000001)
)
(setq cnt (length CoordList))
(progn
(setq ParmPt (1+ ParmPt))
(setq cnt (+ 2 cnt))
)
)
)
(vlax-invoke Obj 'AddVertex ParmPt (list (car Pt) (cadr Pt)))
)
)
)
(princ)
)

  • 1

#29 trung_dang

trung_dang

    biết zoom

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

Đã gửi 30 April 2009 - 01:52 PM

Cám ơn bạn Nataca! Đây đúng là cái mình đang cần.
Cám ơn các bạn Tue_NV, SONCAD, gia_bach, duy782006, phamthanhbinh,...
Cám ơn diendanCADViet!

Chào mọi người chủ đề rất thú vị. Công việc của tôi cũng ứng dụng khá nhiều đoạn lisp them_dinh_pline_2. Các bác có thể chỉnh sửa thêm để áp dụng cho trường hợp tổng quát hơn được không? Thực ra đây là đoạn lisp thay thế cho lệnh pedit / edit vertex / insert /...nhưng lệnh này có thể insert thêm những node không nằm trên pline trong khi đoạn lisp này chỉ insert được những node nằm trên pline. Rất mong sự giúp đỡ của các bác
T/b: Cho tôi hỏi thêm về bản chất đối tượng polyline khác 2D polyline ở chỗ nào?
  • 0

#30 nataca

nataca

    biết lệnh adcenter

  • Members
  • PipPipPipPipPipPipPip
  • 712 Bài viết
Điểm đánh giá: 553 (tốt)

Đã gửi 02 May 2009 - 03:19 PM

Chào mọi người chủ đề rất thú vị. Công việc của tôi cũng ứng dụng khá nhiều đoạn lisp them_dinh_pline_2. Các bác có thể chỉnh sửa thêm để áp dụng cho trường hợp tổng quát hơn được không? Thực ra đây là đoạn lisp thay thế cho lệnh pedit / edit vertex / insert /...nhưng lệnh này có thể insert thêm những node không nằm trên pline trong khi đoạn lisp này chỉ insert được những node nằm trên pline. Rất mong sự giúp đỡ của các bác
T/b: Cho tôi hỏi thêm về bản chất đối tượng polyline khác 2D polyline ở chỗ nào?

Đây: http://www.cadviet.c..._dinh_Pline.vlx
Lệnh ADV : thêm đỉnh không nằm trên Pline (nó sẽ tự tìm cạnh gần điểm chọn nhất để thêm)
Lệnh IV : thêm đỉnh nhưng đỉnh này phải nằm trên Pline

Theo mình hiểu thì Polyline nó sẽ có toạ độ X Y Z của các đỉnh. Còn 2D Polyline tại các đỉnh nó có toạ độ X Y và cao độ Z của nó là cao độ của cả đường (mã DXF là 38) chứ không riêng gì đỉnh nào.
  • 3

#31 nguyenkhoadung98

nguyenkhoadung98

    biết vẽ pline

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

Đã gửi 26 May 2009 - 04:53 PM

Đây: http://www.cadviet.c..._dinh_Pline.vlx
Lệnh ADV : thêm đỉnh không nằm trên Pline (nó sẽ tự tìm cạnh gần điểm chọn nhất để thêm)
Lệnh IV : thêm đỉnh nhưng đỉnh này phải nằm trên Pline

Theo mình hiểu thì Polyline nó sẽ có toạ độ X Y Z của các đỉnh. Còn 2D Polyline tại các đỉnh nó có toạ độ X Y và cao độ Z của nó là cao độ của cả đường (mã DXF là 38) chứ không riêng gì đỉnh nào.



chào các bạn, cảm ơn sự nhiệt tình của các bạn, tiện đây cho mình hỏi thêm là mình cũng cần thêm đỉnh Pl nhưng mà mình muốn thêm các đỉnh để sao cho các đỉnh này cách đều nhau ( có thể cho thêm 1 lựa chọn vào lisp là chon số đỉnh cần thêm sau đó lisp sẽ tự thêm các đỉnh và các đỉnh này cách đều nhau) cảm ơn các ban
  • 0

#32 Tue_NV

Tue_NV

    KS Võ Quang Tuệ

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

Đã gửi 26 May 2009 - 08:12 PM

chào các bạn, cảm ơn sự nhiệt tình của các bạn, tiện đây cho mình hỏi thêm là mình cũng cần thêm đỉnh Pl nhưng mà mình muốn thêm các đỉnh để sao cho các đỉnh này cách đều nhau ( có thể cho thêm 1 lựa chọn vào lisp là chon số đỉnh cần thêm sau đó lisp sẽ tự thêm các đỉnh và các đỉnh này cách đều nhau) cảm ơn các ban

Chào bạn nguyenkhoadung
Rất tiếc, điều bạn muốn Lisp không thể thực hiện được và cũng chính bạn cũng như mình khi sử dụng lệnh CAD sẽ không bao giờ thực hiện được vì lí do thế này :

Giả sử có 1 Polyline gấp khúc tạo bởi 2 phân đoạn AB và BC. Phân đoạn AB dài 200, phân đoạn BC cũng dài 200.
Polyline này phải có 3 đỉnh vectex là A, B, C

Bây giờ bạn muốn chia Polyline thành 5 phân đoạn thì ứng với 6 đỉnh vectex thì bạn sẽ làm thế nào nhỉ?
Bạn nên nhớ rằng 3 đỉnh A, B, C là 3 đỉnh vectex không thay đổi nhé.

Bạn hãy lấy giấy và bút ra vẽ Polyline ABC (Phân đoạn AB dài 200, phân đoạn BC cũng dài 200) như mình nói và chia thành 5 phân đoạn thử xem. Kết quả sẽ thế nào? (sẽ có tất cả là 7 đỉnh vectex, chứ không phải là 6 đỉnh như bạn mong muốn)

Mong bạn nhận ra điều Tue_NV nói.
  • 0

#33 nguyenkhoadung98

nguyenkhoadung98

    biết vẽ pline

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

Đã gửi 27 May 2009 - 08:13 AM

Chào bạn nguyenkhoadung
Rất tiếc, điều bạn muốn Lisp không thể thực hiện được và cũng chính bạn cũng như mình khi sử dụng lệnh CAD sẽ không bao giờ thực hiện được vì lí do thế này :

Giả sử có 1 Polyline gấp khúc tạo bởi 2 phân đoạn AB và BC. Phân đoạn AB dài 200, phân đoạn BC cũng dài 200.
Polyline này phải có 3 đỉnh vectex là A, B, C

Bây giờ bạn muốn chia Polyline thành 5 phân đoạn thì ứng với 6 đỉnh vectex thì bạn sẽ làm thế nào nhỉ?
Bạn nên nhớ rằng 3 đỉnh A, B, C là 3 đỉnh vectex không thay đổi nhé.

Bạn hãy lấy giấy và bút ra vẽ Polyline ABC (Phân đoạn AB dài 200, phân đoạn BC cũng dài 200) như mình nói và chia thành 5 phân đoạn thử xem. Kết quả sẽ thế nào? (sẽ có tất cả là 7 đỉnh vectex, chứ không phải là 6 đỉnh như bạn mong muốn)

Mong bạn nhận ra điều Tue_NV nói.



cảm ơn bạn TUE, mình hiểu ý bạn. nhưng mình chỉ cần thêm vào các đỉnh mới và các đỉnh mới này cách đều nhau, các đỉnh cũ thì không quan tâm,là bởi vì mình cần thêm vào khoảng 500 đỉnh cho 1 Pline mà ban đầu Pline này chỉ có vài đỉnh thôi, do vậy các đỉnh cũ không cần quan tâm, cảm ơn bạn :s_big:
mình cần nó thế này này :s_big: cái này mình cũng đoán là họ phải dùng lisp mói làm đc như thế

http://www.mediafire...3m/Drawing1.dwg
  • 0

#34 thiep

thiep

    biết dimbaseline

  • Members
  • PipPipPipPipPip
  • 369 Bài viết
Điểm đánh giá: 260 (khá)

Đã gửi 27 May 2009 - 09:41 AM

cảm ơn bạn TUE, mình hiểu ý bạn. nhưng mình chỉ cần thêm vào các đỉnh mới và các đỉnh mới này cách đều nhau, các đỉnh cũ thì không quan tâm,là bởi vì mình cần thêm vào khoảng 500 đỉnh cho 1 Pline mà ban đầu Pline này chỉ có vài đỉnh thôi, do vậy các đỉnh cũ không cần quan tâm, cảm ơn bạn :s_big:
mình cần nó thế này này :s_big: cái này mình cũng đoán là họ phải dùng lisp mói làm đc như thế

Bạn có thể tham khảo ở đây:
http://data1.cadviet.com/pllp.lsp
  • 0

#35 Tue_NV

Tue_NV

    KS Võ Quang Tuệ

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

Đã gửi 27 May 2009 - 10:08 AM

Bạn có thể tham khảo ở đây:
http://data1.cadviet.com/pllp.lsp

Chào bạn Thiep

Như trên Tue_NV đã nói.

Giả sử có 1 Polyline gấp khúc tạo bởi 2 phân đoạn AB và BC. Phân đoạn AB dài 200, phân đoạn BC cũng dài 200.

Bây giờ bạn muốn chia Polyline thành 5 phân đoạn thì

Rõ ràng khi chạy Lisp của bạn thì ngay tại điểm B sẽ biến dạng ngay, điểm B sẽ không còn tồn tại nữa.

Tương tự bạn hãy vẽ 1 Polyline gấp khúc tạo bởi 3 phân đoạn AB ; BC và CD. Phân đoạn AB dài 200, phân đoạn BC dài 200

phân đoạn CD dài 200. chia là 5 khoảng xem. Điểm B và C sẽ không tồn tại nữa

Theo yêu cầu của Bạn NguyenKhoaDung thì các đỉnh Polyline phải tồn tại, không được làm mất chúng đi.

Mong bạn hiểu ý của mình

Chào bạn. Chúc bạn vui
  • 0

#36 thiep

thiep

    biết dimbaseline

  • Members
  • PipPipPipPipPip
  • 369 Bài viết
Điểm đánh giá: 260 (khá)

Đã gửi 27 May 2009 - 10:36 AM

Chào bạn Thiep

Như trên Tue_NV đã nói.

Giả sử có 1 Polyline gấp khúc tạo bởi 2 phân đoạn AB và BC. Phân đoạn AB dài 200, phân đoạn BC cũng dài 200.

Bây giờ bạn muốn chia Polyline thành 5 phân đoạn thì

Rõ ràng khi chạy Lisp của bạn thì ngay tại điểm B sẽ biến dạng ngay, điểm B sẽ không còn tồn tại nữa.

Tương tự bạn hãy vẽ 1 Polyline gấp khúc tạo bởi 3 phân đoạn AB ; BC và CD. Phân đoạn AB dài 200, phân đoạn BC dài 200

phân đoạn CD dài 200. chia là 5 khoảng xem. Điểm B và C sẽ không tồn tại nữa

Theo yêu cầu của Bạn NguyenKhoaDung thì các đỉnh Polyline phải tồn tại, không được làm mất chúng đi.

Chào Tue_NV
Khoadung yêu cầu thêm N điểm nút mà không còn quan tâm đến các điểm nút cũ nữa. Còn nếu các nút cũ vẫn phải tồn tại thì các khoảng chia không bao giờ bằng nhau. Bó tay!
  • 0

#37 Tue_NV

Tue_NV

    KS Võ Quang Tuệ

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

Đã gửi 27 May 2009 - 11:04 AM

Chào Tue_NV
Khoadung yêu cầu thêm N điểm nút mà không còn quan tâm đến các điểm nút cũ nữa. Còn nếu các nút cũ vẫn phải tồn tại thì các khoảng chia không bao giờ bằng nhau. Bó tay!

Chào bạn Thiep
Cái điểm này giữa Tue_NV và bạn giống nhau.

Nhưng có thể bạn đã hiểu sai ý của Khoadung là không quan tâm đến các điểm nút cũ chứ không hề nói là không muốn các đỉnh cũ của Polyline vẫn tồn tại.

Tuy nhiên, vẫn còn có thể giải quyết được đáy bạn thiep à. Các khoảng chia vẫn phải bằng nhau, nhưng ta bỏ qua các đỉnh cũ của Polyline. Lấy khoảng cách giữa các điểm chia mới mà bỏ qua các đỉnh cũ của Pline
  • 0

#38 nguyenkhoadung98

nguyenkhoadung98

    biết vẽ pline

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

Đã gửi 27 May 2009 - 11:39 AM

Chào bạn Thiep
Cái điểm này giữa Tue_NV và bạn giống nhau.

Nhưng có thể bạn đã hiểu sai ý của Khoadung là không quan tâm đến các điểm nút cũ chứ không hề nói là không muốn các đỉnh cũ của Polyline vẫn tồn tại.

Tuy nhiên, vẫn còn có thể giải quyết được đáy bạn thiep à. Các khoảng chia vẫn phải bằng nhau, nhưng ta bỏ qua các đỉnh cũ của Polyline. Lấy khoảng cách giữa các điểm chia mới mà bỏ qua các đỉnh cũ của Pline



cảm ơn Bạn thiệp đúng là lisp mà mình cần, âf xin lỗi bạn TUE vì mình nói làm bạn hiểu lầm, đúng là mình kô cần cái đỉnh cũ bạn ah
  • 0

#39 nataca

nataca

    biết lệnh adcenter

  • Members
  • PipPipPipPipPipPipPip
  • 712 Bài viết
Điểm đánh giá: 553 (tốt)

Đã gửi 27 May 2009 - 12:13 PM

cảm ơn Bạn thiệp đúng là lisp mà mình cần, âf xin lỗi bạn TUE vì mình nói làm bạn hiểu lầm, đúng là mình kô cần cái đỉnh cũ bạn ah

:s_big: Đúng là mình cũng hiểu như bác Tuệ. Và đã làm cho bạn cái này: Thêm đỉnh vào Pline
Lệnh AVDV (add vertex divide-vì cái này giống như lệnh divide) : Thêm đỉnh với số lượng tuỳ ý vào Pline mà vẫn giữ nguyên đỉnh cũ. Tức là giữ nguyện hình dạnh Pline ban đầu cho bạn
Lệnh ADV : thêm đỉnh không nằm trên Pline (nó sẽ tự tìm cạnh gần điểm chọn nhất để thêm)
Lệnh IV : thêm đỉnh nhưng đỉnh này phải nằm trên Pline.
  • 2

#40 hhhhgggg

hhhhgggg

    biết dimedit

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

Đã gửi 12 September 2009 - 08:01 AM

Giả sử có 1 PL ban đầu em vẽ bằng pick tại 3 điểm, A,B,C .Khi mình Pick vào PL đó thì sẽ thấy 3 chấm màu Xanh. Bây giờ em muốn có thêm 1 chấm màu xanh nữa để tiện cho việc căn chỉnh PL thì mình phải làm thế nào ? Mong các bác Pro chỉ bảo thêm ???
  • 0
Hoàng Giang