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

#41 nataca

nataca

    biết lệnh adcenter

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

Đã gửi 12 September 2009 - 08:47 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 ???

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

#42 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 12 September 2009 - 09:27 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 ???

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

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


#43 tranlaogia

tranlaogia

    biết lệnh scale

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

Đã gửi 18 November 2009 - 08:13 AM

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.c..._tren_plthd.lsp
  • 0

#44 thiep

thiep

    biết dimbaseline

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

Đã gửi 18 November 2009 - 09:07 AM

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

  • 0

#45 tranlaogia

tranlaogia

    biết lệnh scale

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

Đã gửi 18 November 2009 - 10:39 AM

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

#46 thiep

thiep

    biết dimbaseline

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

Đã gửi 18 November 2009 - 10:53 AM

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

#47 dkkx3a

dkkx3a

    biết lệnh trim

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

Đã gửi 19 November 2009 - 06:54 PM

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
  • 0
TỰ SỰ
Biển vào chiều buồn giữa cô liêu
Sóng vỗ bờ bạc đầu con nước
Khi biển động như lòng ta chợt động
Biển ồn ào nhưng thực rất dịu êm.......

#48 thiep

thiep

    biết dimbaseline

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

Đã gửi 20 November 2009 - 12:11 PM

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

#49 phamthanhbinh

phamthanhbinh

    biết lệnh adcenter

  • Moderator
  • PipPipPipPipPipPipPip
  • 6007 Bài viết
Điểm đánh giá: 3113 (tuyệt vời)

Đã gửi 26 November 2009 - 05:20 PM

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.
  • 1
Chúc các quý Anh trên diễn đàn luôn khỏe, đẻ thêm được nhiều thứ để mót.

#50 meohoang

meohoang

    biết lệnh adcenter

  • Members
  • PipPipPipPipPipPipPip
  • 811 Bài viết
Điểm đánh giá: 342 (khá)

Đã gửi 26 November 2009 - 06:37 PM

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

#51 meohoang

meohoang

    biết lệnh adcenter

  • Members
  • PipPipPipPipPipPipPip
  • 811 Bài viết
Điểm đánh giá: 342 (khá)

Đã gửi 26 November 2009 - 09:54 PM

:cheers: Đú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.

Natca xem lại khi gõ lệnh AVDV rồi chọn nhiều đường Polyline thì chương trình chỉ thêm điểm vào Polyline cuối trong tập chọn thôi, file ACDV.VLX ko kiểm tra vòng lặp được
Bạn thêm chức năng chọn 2D polyline nữa thì hay. Nếu trường hợp khó khăn thì trong vòng lặp bạn thêm lệnh Convert 2D Polyline sang Polyline cho phẻ
  • 0

#52 nataca

nataca

    biết lệnh adcenter

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

Đã gửi 26 November 2009 - 11:08 PM

Natca xem lại khi gõ lệnh AVDV rồi chọn nhiều đường Polyline thì chương trình chỉ thêm điểm vào Polyline cuối trong tập chọn thôi, file ACDV.VLX ko kiểm tra vòng lặp được
Bạn thêm chức năng chọn 2D polyline nữa thì hay. Nếu trường hợp khó khăn thì trong vòng lặp bạn thêm lệnh Convert 2D Polyline sang Polyline cho phẻ

Đúng như bạn nói lệnh AVDV chỉ có tác dụng với 1 Polyline vì ... mình mới chỉ làm cho mỗi lần chọn 1 đối tượng. Nếu muốn chọn nhiều đối tượng một lúc thì cho nó vào vòng lặp là OK. Khổ một nỗi hồi trước mình viết cái này nhưng không hay dùng nên quẳng nó ở góc nào rồi tìm không thấy :cheers: . Để mình tìm lại rồi sửa xem sao. (Chắc bạn cần cái lisp này để edit các đỉnh ở trắc ngang cho nó đều đẹp phải không? )
  • 0

#53 meohoang

meohoang

    biết lệnh adcenter

  • Members
  • PipPipPipPipPipPipPip
  • 811 Bài viết
Điểm đánh giá: 342 (khá)

Đã gửi 27 November 2009 - 07:38 AM

Đúng như bạn nói lệnh AVDV chỉ có tác dụng với 1 Polyline vì ... mình mới chỉ làm cho mỗi lần chọn 1 đối tượng. Nếu muốn chọn nhiều đối tượng một lúc thì cho nó vào vòng lặp là OK. Khổ một nỗi hồi trước mình viết cái này nhưng không hay dùng nên quẳng nó ở góc nào rồi tìm không thấy :D . Để mình tìm lại rồi sửa xem sao. (Chắc bạn cần cái lisp này để edit các đỉnh ở trắc ngang cho nó đều đẹp phải không? )

Uh chính xác nếu bạn chỉnh được cho mình thì hay quá. Xin cám ơn trước :cheers:
  • 0

#54 nataca

nataca

    biết lệnh adcenter

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

Đã gửi 27 November 2009 - 08:03 AM

Uh chính xác nếu bạn chỉnh được cho mình thì hay quá. Xin cám ơn trước :cheers:

Bạn xem cái này được chưa:
Them dinh vao Pline
Lệnh vẫn như cũ
  • 1

#55 meohoang

meohoang

    biết lệnh adcenter

  • Members
  • PipPipPipPipPipPipPip
  • 811 Bài viết
Điểm đánh giá: 342 (khá)

Đã gửi 27 November 2009 - 08:31 AM

Bạn xem cái này được chưa:
Them dinh vao Pline
Lệnh vẫn như cũ

Bạn xem lại chạy Avdv ctrình báo:
Command: AVDV
Undo Current settings: Auto = On, Control = All, Combine = Yes
Enter the number of operations to undo or [Auto/Control/BEgin/End/Mark/Back]
<1>: begin
Command:
Co loi: bad argument type: numberp: nilUndo Current settings: Auto = On,
Control = All, Combine = Yes
Enter the number of operations to undo or [Auto/Control/BEgin/End/Mark/Back]
<1>: end
Command:
Da Reset lai thiet lap ban dau

  • 0

#56 nataca

nataca

    biết lệnh adcenter

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

Đã gửi 27 November 2009 - 08:44 AM

Bạn xem lại chạy Avdv ctrình báo:

Mình đã Edit lại. Đây là một trong số những rắc rối rất thường gặp khi mình muốn tách một lisp từ bộ lisp. Sở dĩ như vậy là vì các file lisp của mình nó liên quan đến nhau, nếu tách ra mà không để ý đến những hàm liên kết là y rằng sẽ báo lỗi.
Cũng một phần vì thế mà mình khá ngại khi tách Code ra để post lên diễn đàn (chứ không phải mình giấu code mong các bạn thông cảm :cheers: )
  • 2

#57 phamthanhbinh

phamthanhbinh

    biết lệnh adcenter

  • Moderator
  • PipPipPipPipPipPipPip
  • 6007 Bài viết
Điểm đánh giá: 3113 (tuyệt vời)

Đã gửi 27 November 2009 - 06:21 PM

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

Chào bác Meohoang,
Bác thử dùng cái này coi sao nhé.
Mình bổ sung thêm vào lisp để có thể sử dụng với các loại đường LINE, POLYLINE, và LWPOLYLINE bác ạ.
Thực ra cái đường 2Dpolyline như bác nêu chính là cái đường LWPOLYLINE mà mình đã làm trong cái lisp cũ. Tuy nhiên với POLYLINE tức là đường 3Dpolyline thì lisp không đúng nữa do với các POLYLINE này sau khi break nó sẽ tạo ra hai đối tượng hoàn toàn mới và cái đối tượng cũ (ename) bị mất đi. Vì thế cái lệnh Pedit của mình không còn đúng nữa.
Với các line cũng vậy break thì ngon nhưng khi pedit lại phải thay đổ cấu trúc lệnh mới được và sau khi pedit thì các LINE sẽ trở thành LWPOLYLINE.
Vì thế mình dùng thêm hàm điều kiện để pedit cho từng trường hợp cụ thể. Bác cứ xem thêm trong lisp sẽ hiểu cách mình làm.
Cách này tuy chưa gọn gàng lắm nhưng có thể dùng được bác ạ.
Mong bác dùng thử và cho ý kiến để mình rút kinh nghiệm 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 ))
(if (= (cdr (assoc 0 (entget ss))) "POLYLINE")
(progn
(Command "break" ss po "@")
(setq ent (entlast))
(command "undo" "be")
(entdel ent )
(command "undo" "e")
(setq ss (entlast))
(command "undo" "1")
(Command "Pedit" ss "j" ent "" "")
(Hli (entlast))
(while po
(setq po (getpoint "\n Chon diem cat tiep theo : "))
;;;(Command "select" ddau dcuoi "")
;;;(setq ss (ssget "P"))
(if (/= po nil)
(progn
(Command "break" ss po "@")
(setq ent (entlast))
(command "undo" "be")
(entdel ent)
(command "undo" "e")
(setq ss (entlast))
(command "undo" "1")
(Command "Pedit" ss "j" ent "" "")
;;;(sssetfirst ss ss)
(Hli ss)
)
)
)
)
)
(if (= (cdr (assoc 0 (entget ss))) "LWPOLYLINE")
(progn
(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 : "))
(if (/= po nil)
(progn
(Command "break" ss po "@")
(setq ent (entlast))
(Command "Pedit" ss "j" ent "" "")
(Hli ss)
)
)
)
)
)
(if (= (cdr (assoc 0 (entget ss))) "LINE")
(progn
(Command "break" ss po "@")
(setq ent (entlast))
(Command "Pedit" ss "y" "j" ent "" "")
(setq ss (entlast))
(Hli ss)
(while po
(setq po (getpoint "\n Chon diem cat tiep theo : "))
(if (/= po nil)
(progn
(Command "break" ss po "@")
(setq ent (entlast))
(Command "Pedit" ss "j" ent "" "")
(Hli ss)
)
)
)
)
)
(setvar "osmode" oldos)

(princ)
)
;
(defun HLI(ent)
(sssetfirst (ssadd ent (ssadd)) (ssadd ent (ssadd)))
)

Chúc bác khỏe và vui.

PS: các loại đường khác như arc , cung elip và spline mình thấy hình như mọi người ít dùng nên cũng chưa nghiên cứu rõ lắm. Nếu bác xét thấy cần thiết thì mình sẽ thử cố tí nữa xem sao. Hề hề hề....
  • 5
Chúc các quý Anh trên diễn đàn luôn khỏe, đẻ thêm được nhiều thứ để mót.

#58 Toanvib

Toanvib

    Chưa sử dụng CAD

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

Đã gửi 28 April 2010 - 03:33 PM

tìm hoài ko thấy líp nào đc cả
đành chịu khó gõ vậy :cheers:
  • 0

#59 w1nDream

w1nDream

    biết lệnh ddedit

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

Đã gửi 28 April 2010 - 05:39 PM

Chào bác Meohoang,
Bác thử dùng cái này coi sao nhé.
Mình bổ sung thêm vào lisp để có thể sử dụng với các loại đường LINE, POLYLINE, và LWPOLYLINE bác ạ.
Thực ra cái đường 2Dpolyline như bác nêu chính là cái đường LWPOLYLINE mà mình đã làm trong cái lisp cũ. Tuy nhiên với POLYLINE tức là đường 3Dpolyline thì lisp không đúng nữa do với các POLYLINE này sau khi break nó sẽ tạo ra hai đối tượng hoàn toàn mới và cái đối tượng cũ (ename) bị mất đi. Vì thế cái lệnh Pedit của mình không còn đúng nữa.
Với các line cũng vậy break thì ngon nhưng khi pedit lại phải thay đổ cấu trúc lệnh mới được và sau khi pedit thì các LINE sẽ trở thành LWPOLYLINE.
Vì thế mình dùng thêm hàm điều kiện để pedit cho từng trường hợp cụ thể. Bác cứ xem thêm trong lisp sẽ hiểu cách mình làm.
Cách này tuy chưa gọn gàng lắm nhưng có thể dùng được bác ạ.
Mong bác dùng thử và cho ý kiến để mình rút kinh nghiệm 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 ))
(if (= (cdr (assoc 0 (entget ss))) "POLYLINE")
(progn
(Command "break" ss po "@")
(setq ent (entlast))
(command "undo" "be")
(entdel ent )
(command "undo" "e")
(setq ss (entlast))
(command "undo" "1")
(Command "Pedit" ss "j" ent "" "")
(Hli (entlast))
(while po
(setq po (getpoint "\n Chon diem cat tiep theo : "))
;;;(Command "select" ddau dcuoi "")
;;;(setq ss (ssget "P"))
(if (/= po nil)
(progn
(Command "break" ss po "@")
(setq ent (entlast))
(command "undo" "be")
(entdel ent)
(command "undo" "e")
(setq ss (entlast))
(command "undo" "1")
(Command "Pedit" ss "j" ent "" "")
;;;(sssetfirst ss ss)
(Hli ss)
)
)
)
)
)
(if (= (cdr (assoc 0 (entget ss))) "LWPOLYLINE")
(progn
(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 : "))
(if (/= po nil)
(progn
(Command "break" ss po "@")
(setq ent (entlast))
(Command "Pedit" ss "j" ent "" "")
(Hli ss)
)
)
)
)
)
(if (= (cdr (assoc 0 (entget ss))) "LINE")
(progn
(Command "break" ss po "@")
(setq ent (entlast))
(Command "Pedit" ss "y" "j" ent "" "")
(setq ss (entlast))
(Hli ss)
(while po
(setq po (getpoint "\n Chon diem cat tiep theo : "))
(if (/= po nil)
(progn
(Command "break" ss po "@")
(setq ent (entlast))
(Command "Pedit" ss "j" ent "" "")
(Hli ss)
)
)
)
)
)
(setvar "osmode" oldos)

(princ)
)
;
(defun HLI(ent)
(sssetfirst (ssadd ent (ssadd)) (ssadd ent (ssadd)))
)

Chúc bác khỏe và vui.

PS: các loại đường khác như arc , cung elip và spline mình thấy hình như mọi người ít dùng nên cũng chưa nghiên cứu rõ lắm. Nếu bác xét thấy cần thiết thì mình sẽ thử cố tí nữa xem sao. Hề hề hề....


Lisp của Bác Bình rất hay. :cheers:
thaks bác .Đúng cái em đang cần.
PS: à.Em có 1 ý kiến nhỏ là có lẽ bác nên để chế độ Osnap để bắt điểm chèn.
  • 0
__Tâm tựa lưu thủY__
Vi nhân nan

#60 TRUNGNGAMY

TRUNGNGAMY

    biết lệnh block

  • Members
  • PipPipPipPipPipPip
  • 401 Bài viết
Điểm đánh giá: 91 (tàm tạm)

Đã gửi 02 May 2010 - 12:12 AM

Lisp của Bác Bình rất hay. :cheers:
thaks bác .Đúng cái em đang cần.
PS: à.Em có 1 ý kiến nhỏ là có lẽ bác nên để chế độ Osnap để bắt điểm chèn.

Bây giờ muốn bỏ node ra khỏi polyline thì có làm đc kg các bác ?
  • 0