Chuyển đến nội dung
Diễn đàn CADViet
Đăng nhập để thực hiện theo  
AGi

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

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

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

  • Vote tăng 2

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
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!

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

  • Vote tăng 2

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

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
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.com/upfiles/them_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.

  • Vote tăng 3

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
Đây: http://www.cadviet.com/upfiles/them_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

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

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
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.com/file/chmnmnjxx3m/Drawing1.dwg

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

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

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
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!

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

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

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

  • Vote tăng 2

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

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

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

Bạn tìm trên diễn đàn. Mình nhớ là đã có lisp thêm đỉnh cho Polyline.

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

Bạn gỏ lệnh: PEDIT lựa chọn Edit vertex sau đó chọn Insert

Không biết có đúng ý bạn không. Nếu cái này bạn đã biết thì cũng không cần nói là cái này tui đã biết làm gì!

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

em muốn tạo thêm 1 đình trên đường pl. e sử dụng lisp thêm điểm load trên cadviet nhưng nó lại tách đôi đường pl tại vị trí chọn điểm chèn. Bác nào có thể sửa giúp em lisp này được ko. cám ơn các bác

http://www.cadviet.com/upfiles/2/themdiem_tren_plthd.lsp

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
em muốn tạo thêm 1 đình trên đường pl. e sử dụng lisp thêm điểm load trên cadviet nhưng nó lại tách đôi đường pl tại vị trí chọn điểm chèn. Bác nào có thể sửa giúp em lisp này được ko. cám ơn các bác

http://www.cadviet.com/upfiles/2/themdiem_tren_plthd.lsp

Chào bác laogia, lisp này khắc phục lisp them_dinh_pline_2.vlx của bác Nataca sẽ không kén vị trí điểm cần insert: ngoài pline (vị trí góc tù), trên pline, thêm node đầu pline, cuối pline.

;;; lisp them dinh vao LWP
;;; copyright by Thiep V.2: 7/2009
;;;---------------
(defun arrpoint	(po / PntArr)
 (setq	PntArr (vlax-make-safearray
	 vlax-vbDouble
	 (cons 0 1)
       )
 )
 (vlax-safearray-fill PntArr po)
)
(defun LWP	(Lpoint *ModelSpace* / PntArr)
 (setq	PntArr (vlax-make-safearray
	 vlax-vbDouble
	 (cons 0 (1- (length Lpoint)))
       )
 )
 (vlax-safearray-fill PntArr Lpoint)
 (vla-AddLightWeightPolyline *ModelSpace* PntArr)
)
(defun rever (en *Model* / obj n Lx Ly Lcor)
 (setq obj (vlax-ename->vla-object en))
 (setq	Lcor (vlax-safearray->list
       (vlax-variant-value
	 (vlax-get-property obj 'Coordinates)
       )
     )
 )
 (setq	n  0
Lx nil
Ly nil
 )
 (foreach cor Lcor
   (if	(= 0 (rem n 2))
     (setq Lx (append Lx (list cor)))
     (setq Ly (append Ly (list cor)))
   )
   (setq n (1+ n))
 )
 (setq	Lx (Reverse Lx)
Ly (Reverse Ly)
 	n    0
Lcor nil
 )
 (repeat (length Lx)
   (setq Lcor (append Lcor (list (nth n Lx) (nth n Ly)))
  n    (1+ n)
   )
 )
 (vla-delete obj)
 (LWP Lcor *Model*)
)
;;;-----------------------------------
(defun c:vex (/ ActDoc *Model* wp wpObj n pmid pcl Pe)
 (setvar "osmode" 0)
 (setq	ActDoc	(vla-get-ActiveDocument (vlax-get-acad-object))
*Model*	(vla-get-ModelSpace ActDoc)
 )
 (setq	wp (car (entsel "\nPick a LWPOLYLINE ")))
 (redraw wp 3)
 (while (setq pmid (getpoint "\nPick a point for insert "))
   (setq wpObj (vlax-ename->vla-object wp))
   (setq pcl (vlax-curve-getClosestPointTo wp pmid)
  n   (fix (vlax-curve-getParamAtPoint wp pcl))
  bul (vla-getbulge wpObj n)
   )
   (if (= n 0)
     (progn
(rever wp *Model*)
(setq wp (entlast))
(setq Pe (vlax-curve-getEndPoint wp)
  n (vlax-curve-getParamAtPoint wp Pe))
     )
   )
   (setq pmid (list (car pmid)
	     (cadr pmid)
       )
   )

   (vla-AddVertex wpObj (1+ n) (arrpoint pmid))
   (if (/= bul 0) (vla-setBulge wpObj (+ n 1) bul))
   (vla-update wpObj)
 )
 (princ "\nChuc cac ban vui ve! Thiep")
 (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
Chào bác laogia, lisp này khắc phục lisp them_dinh_pline_2.vlx của bác Nataca sẽ không kén vị trí điểm cần insert: ngoài pline (vị trí góc tù), trên pline, thêm node đầu pline, cuối pline.

;;; lisp them dinh vao LWP
;;; copyright by Thiep V.2: 7/2009
;;;---------------
(defun arrpoint	(po / PntArr)
 (setq	PntArr (vlax-make-safearray
	 vlax-vbDouble
	 (cons 0 1)
       )
 )
 (vlax-safearray-fill PntArr po)
)
(defun LWP	(Lpoint *ModelSpace* / PntArr)
 (setq	PntArr (vlax-make-safearray
	 vlax-vbDouble
	 (cons 0 (1- (length Lpoint)))
       )
 )
 (vlax-safearray-fill PntArr Lpoint)
 (vla-AddLightWeightPolyline *ModelSpace* PntArr)
)
(defun rever (en *Model* / obj n Lx Ly Lcor)
 (setq obj (vlax-ename->vla-object en))
 (setq	Lcor (vlax-safearray->list
       (vlax-variant-value
	 (vlax-get-property obj 'Coordinates)
       )
     )
 )
 (setq	n  0
Lx nil
Ly nil
 )
 (foreach cor Lcor
   (if	(= 0 (rem n 2))
     (setq Lx (append Lx (list cor)))
     (setq Ly (append Ly (list cor)))
   )
   (setq n (1+ n))
 )
 (setq	Lx (Reverse Lx)
Ly (Reverse Ly)
 	n    0
Lcor nil
 )
 (repeat (length Lx)
   (setq Lcor (append Lcor (list (nth n Lx) (nth n Ly)))
  n    (1+ n)
   )
 )
 (vla-delete obj)
 (LWP Lcor *Model*)
)
;;;-----------------------------------
(defun c:vex (/ ActDoc *Model* wp wpObj n pmid pcl Pe)
 (setvar "osmode" 0)
 (setq	ActDoc	(vla-get-ActiveDocument (vlax-get-acad-object))
*Model*	(vla-get-ModelSpace ActDoc)
 )
 (setq	wp (car (entsel "\nPick a LWPOLYLINE ")))
 (redraw wp 3)
 (while (setq pmid (getpoint "\nPick a point for insert "))
   (setq wpObj (vlax-ename->vla-object wp))
   (setq pcl (vlax-curve-getClosestPointTo wp pmid)
  n   (fix (vlax-curve-getParamAtPoint wp pcl))
  bul (vla-getbulge wpObj n)
   )
   (if (= n 0)
     (progn
(rever wp *Model*)
(setq wp (entlast))
(setq Pe (vlax-curve-getEndPoint wp)
  n (vlax-curve-getParamAtPoint wp Pe))
     )
   )
   (setq pmid (list (car pmid)
	     (cadr pmid)
       )
   )

   (vla-AddVertex wpObj (1+ n) (arrpoint pmid))
   (if (/= bul 0) (vla-setBulge wpObj (+ n 1) bul))
   (vla-update wpObj)
 )
 (princ "\nChuc cac ban vui ve! Thiep")
 (princ)
)

bác Thiệp thử kiểm tra lại lisp này xem, em thử rùi nhưng vẫn không thêm được điểm trên đường pline. cám ơn bác

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
bác Thiệp thử kiểm tra lại lisp này xem, em thử rùi nhưng vẫn không thêm được điểm trên đường pline. cám ơn bác

Bạn đang dùng cad bao nhiêu? Nếu thêm node trên đường pline, thì bạn đặt chế độ bắt dính là nearest. Và khi bạn thử lisp, cad có thông báo gì không?

  • 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
Bạn đang dùng cad bao nhiêu? Nếu thêm node trên đường pline, thì bạn đặt chế độ bắt dính là nearest. Và khi bạn thử lisp, cad có thông báo gì không?

 

 

Em dùng nó báo thế này Bác Thiệp ạ (CAD2004):

Command: vex ; error: no function definition: VLAX-GET-ACAD-OBJECT

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
Em dùng nó báo thế này Bác Thiệp ạ (CAD2004):

Command: vex ; error: no function definition: VLAX-GET-ACAD-OBJECT

Bạn thêm dòng sau đây:

(vl-load-com)

trước hay sau dòng

(defun c:vex (/ ActDoc *Model* wp wpObj n pmid pcl Pe)

là được

Chúc thành công!

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
Chào mọi người!

Mình thật sự rất vui và bất ngờ về sự nhiệt tình của các bạn đã tham gia trả lời, chia sẻ kinh nghiệm và viết lisp theo nội dung câu hỏi của mình.

Trong các lisp của các bạn đã giành thời gian viết thì lisp của bạn Tue_NV là mình thấy ok nhất nhưng nó còn một lỗi nhỏ là đối với đường Pline kín thì sau khi thêm node nó lại bẻ gãy đường Pline kín đó thành 2 đường Pline riêng biệt. Nếu bạn nào biết cách khắc phục thì sủa lisp đó lại giúp mình.

Cám ơn tất cả các bạn!

Đoạn lisp đó nè các bạn.

(defun c:NBPL()

(vl-load-com)

(setq ss (car (entsel "\n Pick chon doi tuong : ")))

(Hli ss)

(setq po (getpoint "\n Chon diem cat : "))

(setq ddau (vlax-curve-getStartPoint ss))

(setq dcuoi (vlax-curve-getEndPoint ss))

(Command "break" ss po "@")

(Command "Pedit" "m" ddau dcuoi "" "j" "0" "")

(Hli ss)

(while po (setq po (getpoint "\n Chon diem cat tiep theo : "))

(Command "select" ddau dcuoi "")

(setq ss (ssget "P"))

(Command "break" ss po "@")

(Command "Pedit" "m" ddau dcuoi "" "j" "0" "")

(sssetfirst ss ss)

)

(princ)

)

;

(defun HLI(ent)

(sssetfirst (ssadd ent (ssadd)) (ssadd ent (ssadd)))

)

Chào bạn AGI,

Bạn xem thử cái lisp này, mình cải tạo từ cái lisp của bác Tue_NV theo ý của bạn. Với cả LWPOLYLINE kín cũng như hở, sau khi thêm node đều không bị cắt rời mà vẫn giữ nguyên ename cũ. Bạn có thể so sánh hai cái lisp này sẽ thấy mình chỉ thay đổi cái cách sử dụng lệnh pedit của bác Tue_NV sau khi break mà thôi.

Bạn dùng thử và cho ý kiến nha.

(defun c:NBPL()
(vl-load-com)
(setq oldos (getvar "osmode"))
(setvar "osmode" 0)
(setq ss (car (entsel "\n Pick chon doi tuong : ")))
(Hli ss)
(setq po (getpoint "\n Chon diem cat : "))
;;;(setq ddau (vlax-curve-getstartPoint ss  ))
;;;(setq dcuoi (vlax-curve-getEndPoint ss ))
(Command "break" ss po "@")
(setq ent (entlast))
(Command "Pedit" ss "j" ent "" "")
(Hli ss)
(while po (setq po (getpoint "\n Chon diem cat tiep theo : "))
;;;(Command "select" ddau dcuoi "")
;;;(setq ss (ssget "P"))
(Command "break" ss po "@")
(setq ent (entlast))
(Command "Pedit" ss "j" ent "" "")
;;;(sssetfirst ss ss)
(Hli ss)
)
(setvar "osmode" oldos)
(princ)
)
;
(defun HLI(ent)
(sssetfirst (ssadd ent (ssadd)) (ssadd ent (ssadd)))
) 

 

Hy vọng nó đạt được điều bạn mong muốn. Chúc bạn vui.

  • Vote tăng 2

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
Hy vọng nó đạt được điều bạn mong muốn. Chúc bạn vui.

Uh rất OK bác ạ; nhưng thêm tính năng chọn các 2Dpolyline nữa thì hay hơ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

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  

×