Chuyển đến nội dung
Diễn đàn CADViet
heocon0_0

Lisp nối Line thành Pline ?

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

Down file: Join.lsp gửi kèm trong mail có tên là Joint Polyline

Việc load lisp thì như thường

Lệnh sử dụng là: j

Có thể joint các đối tượng line và một phần đường tròn thành Polyline!

 

MegaUpload, hãy down tại đây: Joint Polyline, code là 123456

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 1 file noi.lsp chẳng hạn rồi copy đoạn dưới đây vào. Sau đó save lại và appload lên. Sử dụng lệnh nn là ok:

(defun c:nn (/ tdt ssdt sodt index)

(defun ObjName (ssdt /)

(cdr (assoc '0 (entget ssdt)))

)

(defun MoPL (ssdt /)

(= (cdr (assoc '70 (entget ssdt))) 0)

)

(defun NoiPL (ssdt /)

(if (MoPL ssdt)

(command ".PEDIT" ssdt "J" "All" "" "X")

)

)

(defun NoiLC (ssdt /)

(command ".PEDIT" ssdt "Y" "J" "All" "" "X")

)

(setq

tdt (ssget)

sodt (sslength tdt)

index 0

)

(repeat sodt

(setq

ssdt (ssname tdt index)

index (1+ index)

)

(if (or (= (Objname ssdt) "LWPOLYLINE")

(= (Objname ssdt) "POLYLINE")

)

(NoiPL ssdt)

)

(if (or (= (Objname ssdt) "LINE") (= (Objname ssdt) "ARC"))

(NoiLC ssdt)

)

)

(princ)

)

Khi dùng lệnh nn, chỉ cần pick 1 trong các line, arc, pline nào đó là nó tự tìm các đoạn liên kết được để nối.

  • 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

lisp này cực thuận tiện cho bác nào vẽ quy hoạch ^^. Hoành có lisp nào biến ellipse thành Pline ko, hoặc đồ lại ellipse bằng một 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
Mình có khoảng 10thửa đất thế mà nó tạo thành 1 luôn. Pó tay

Trường hợp này mình cũng hay gặp. Chỉ còn cách dùng lệnh pedit của cad thôi cái nào mình chọn thì nó mới nối thành pline.

Nếu các thửa của bạn là vùng kín thì dùng lệnh BO ok 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
lisp này cực thuận tiện cho bác nào vẽ quy hoạch ^^. Hoành có lisp nào biến ellipse thành Pline ko, hoặc đồ lại ellipse bằng một Pline

Gỏ lệnh PELLIPSE rồi cho nó bằng 1 thì khi vẽ ellipse sẽ là pline. Mình cũng đã nghỉ đến việc dùng cái này viết cái lisp chuyển như ý bác nhưng khi đã vẽ nó là pline thì nó sẽ vẽ ra hình nguyên vẹn chứ không vẽ ra 1 phần hình ellipse được nên đã bỏ ý định này.

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
Khi dùng lệnh nn, chỉ cần pick 1 trong các line, arc, pline nào đó là nó tự tìm các đoạn liên kết được để nối.

Lisp này khá thuận tiện. Chỉ có điều như sau:" Nếu mình chỉ muốn các đối tượng cùng Layer thành Pline thôi ? "

Chi tiết và góp ý sửa lisp như file đính kèm : File

Thâ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
Lisp này khá thuận tiện. Chỉ có điều như sau:" Nếu mình chỉ muốn các đối tượng cùng Layer thành Pline thôi ? "

Chi tiết và góp ý sửa lisp như file đính kèm : File

Thân !

Mạn phép bác Hoành : Tue_NV viết thêm vào code theo như ý Của bạn NguyenNgocSon

@NguyenNgocSon : Bạn hãy thử với code này :

(defun c:nn (/ tdt ssdt sodt index)
(defun ObjName (ssdt /)
(cdr (assoc '0 (entget ssdt)))
)
(defun MoPL (ssdt /)
(= (cdr (assoc '70 (entget ssdt))) 0)
)
(defun NoiPL (ssdt /)
(if (MoPL ssdt)
(command ".PEDIT" ssdt "J" tdt "" "X")
)
)
(defun NoiLC (ssdt /)
(command ".PEDIT" ssdt "Y" "J" tdt "" "X")
)
(setq ent (car(entsel "\nPick vao 1 doi tuong mau de lay ten Layer :")))
(princ "\n Chon doi tuong de noi")
(setq
tdt (ssget 
(list 
   (assoc 8 (entget ent) )
)
    )
sodt (sslength tdt)
index 0
)
(repeat sodt
(setq
ssdt (ssname tdt index)
index (1+ index)
)
(if (or (= (Objname ssdt) "LWPOLYLINE")
(= (Objname ssdt) "POLYLINE")
)
(NoiPL ssdt)
)
(if (or (= (Objname ssdt) "LINE") (= (Objname ssdt) "ARC"))
(NoiLC ssdt)
)
)
(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
Mạn phép bác Hoành : Tue_NV viết thêm vào code theo như ý Của bạn NguyenNgocSon

@NguyenNgocSon : Bạn hãy thử với code này :

(defun c:nn (/ tdt ssdt sodt index)
(defun ObjName (ssdt /)
(cdr (assoc '0 (entget ssdt)))
)
(defun MoPL (ssdt /)
(= (cdr (assoc '70 (entget ssdt))) 0)
)
(defun NoiPL (ssdt /)
(if (MoPL ssdt)
(command ".PEDIT" ssdt "J" tdt "" "X")
)
)
(defun NoiLC (ssdt /)
(command ".PEDIT" ssdt "Y" "J" tdt "" "X")
)
(setq ent (car(entsel "\nPick vao 1 doi tuong mau de lay ten Layer :")))
(princ "\n Chon doi tuong de noi")
(setq
tdt (ssget 
(list 
   (assoc 8 (entget ent) )
)
    )
sodt (sslength tdt)
index 0
)
(repeat sodt
(setq
ssdt (ssname tdt index)
index (1+ index)
)
(if (or (= (Objname ssdt) "LWPOLYLINE")
(= (Objname ssdt) "POLYLINE")
)
(NoiPL ssdt)
)
(if (or (= (Objname ssdt) "LINE") (= (Objname ssdt) "ARC"))
(NoiLC ssdt)
)
)
(princ)
)

Cám ơn bác. Nhưng chỉ có điều khi pick chọn line đầu lệnh: NN không tự tìm đến các đường kép thành Pline thì phải ?

Em đã thử và thấy như vậy. Bác thử check lại xem có đúng không ?

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
Cám ơn bác. Nhưng chỉ có điều khi pick chọn line đầu lệnh: NN không tự tìm đến các đường kép thành Pline thì phải ?

Em đã thử và thấy như vậy. Bác thử check lại xem có đúng không ?

Cám ơn bác !

Hề hề, có 1 dấu tick Thanks, bạn tick vào đó là được mờ.

NgocSon hãy thử code này :

Bạn pick vào 1 trong các line, arc, pline nào đó -> là nó tự tìm các đoạn liên kết được để nối và các đoạn này có cùng tên layer. Tên Layer này được lấy theo đối tượng mà bạn đã pick. OK?

Đây là code

(defun c:nn (/ tdt ssdt sodt index)
(defun ObjName (ssdt /)
(cdr (assoc '0 (entget ssdt)))
)
(defun MoPL (ssdt /)
(= (cdr (assoc '70 (entget ssdt))) 0)
)
(defun NoiPL (ssdt /)
(if (MoPL ssdt)
(command ".PEDIT" ssdt "J" tdt "" "X")
)
)
(defun NoiLC (ssdt /)
(command ".PEDIT" ssdt "Y" "J" tdt "" "X")
)
(setq ent (car(entsel "\nPick vao 1 doi tuong de noi :")))
(setq
tdt (ssget "X"
(list 
   (assoc 8 (entget ent) )
)
    )
sodt (sslength tdt)
index 0
)
(repeat sodt
(setq
ssdt (ssname tdt index)
index (1+ index)
)
(if (or (= (Objname ssdt) "LWPOLYLINE")
(= (Objname ssdt) "POLYLINE")
)
(NoiPL ssdt)
)
(if (or (= (Objname ssdt) "LINE") (= (Objname ssdt) "ARC"))
(NoiLC ssdt)
)
)
(princ)
)

Hy vọng trúng ý của bạn

  • Vote tăng 5

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
lisp này cực thuận tiện cho bác nào vẽ quy hoạch ^^. Hoành có lisp nào biến ellipse thành Pline ko, hoặc đồ lại ellipse bằng một Pline

 

Bác có thể dùng đoạn lisp này để đổi bất kỳ elisp hay Circle thành đường Pline

(defun c:WIPE (/)
 (setvar "cmdecho" 0)
 (command "_.undo" "be")
 (setvar "regenmode" 1)
 (setq osmode (getvar "osmode"))

 (setq colo (getvar "clayer"))
 (if (not (tblsearch "layer" "WIPE-TAM"))
   (command "layer" "n" "WIPE-TAM" "color" "3"	"WIPE-TAM" "s"
     "WIPE-TAM"	\n)
   (command "layer" "s" "WIPE-TAM" \n)
 )
 (setvar "osmode" 0)
 (command "ucs" "")

 (setq abc (entsel "\nChon doi tuong :"))
 (setq KC (getreal "\nNhap khoang cach de chia cung : "))

 (COMMAND "MEASURE" ABC KC)
 (setq	ss (ssget "X"
	  '(
	    (-4 . "		    (0 . "POINT")
	    (8 . "WIPE-TAM")
	    (-4 . "AND>")
	   )
   )
 )
 (command "pline")
 (setq x 0)
 (repeat (SSlength ss)
   (setq ent (ssname ss x))
   (setq ents (entget ent))
   (setq pt (cdr (assoc 10 ents)))
   (command pt)
   (setq x (+ x 1))
 )
 (command "C")

 (COMMAND "erase" ss "")

 (setvar "clayer" colo)
 (setvar "osmode" osmode)
 (command "_.undo" "e")
)

  • 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

Các bạn cho mình hỏi chút, mình muốn nối tất cả các line trong bản vẽ này thành một PLINE khép kín, nhưng hoàn toàn ko được. Mình sử dụng lệnh PE để nối line, rồi dùng lisp của các bạn nhưng cũng ko được.

 

Mình mở bằng cad 2011 nhận thấy thì ra có những line ko nằm trên cùng một mặt phẳng , do dó chúng ko nối lại với nhau được. vậy mình làm cách nào nào để di chuyển chúng về trên cùng một mặt phẳng ? . Và nếu như chúng ta làm được cho chúng về cũng một mặt phẳng thì chắc chắn sẽ có những line nằm trùng nhau, liệu lệnh nối LINE bằng Lisp hay bằng PE có thực hiện được cho những line trùng nhau như thế ? (Mình ko biết khi cho tất cả các line nằm trên cùng một mặt phẳng thì khi mình tạo Mô Hình Địa Hình 3D thì địa hình là một mặt bằng san phẳng, ko biết có phải vậy ko nữa , bạn nào có kinh nghiệm , xin chỉ giúp mình, thanks a lot !) .

Thêm nữa là mình đã sử dụng lệnh boundary nhưng vẫn ko được. Mong các bạn giúp đỡ ! Chân thành cảm ơn mọi người !

 

LINK FILE KÈM THEO : http://www.mediafire.com/?98wx1j4pi30196j

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 tương đối dễ

Command : _.PSELECT

Bạn chọn tất cả các đối tượng LINE, POLYLINE, LWPOLYLINE, ARC cần chuyển về 1 mặt phẳng

Nếu quá nhiều dối ttượng khác nhau thì sủ dụng bộ lọc

Trên hộp thoại chuyển toàn bộ hệ tọa độ Z của đối tượng về 0

Sau đó sủ dụng lệnh lisp này xem thử (nếu điểm đầu cà cuối của 2 đối tượng trùng nhau)

(defun c:nh (/)
 (setvar "cmdecho" 0)
 (setq a (car (entsel "\nChon duong can nhom : ")))
 (setq ss (ssget "x" (list (assoc 8 (entget a)))))
 (if ss
   (progn
     (setq name (cdr (assoc 0 (entget a))))
     (cond
((= name "LINE") (command "pedit" a "" "j" ss "" ""))
((= name "ARC") (command "pedit" a "" "j" ss "" ""))
((= name "POLYLINE") (command "pedit" a "j" ss "" ""))
((= name "LWPOLYLINE") (command "pedit" a "j" ss "" ""))
     )
   )
 )
)

  • 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

chào bác "VUVUZELA"

bác kiểm tra lại giúp mình đoạn lip trên. nó bị lỗi hay sao ấy. không có hoạt động đượ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ạn chạy lại đoạn lisp này xem thử. Thử chọn đối tượng là TEXT, CIRCLE xem sao

He he

(defun c:nh (/)
 (setvar "cmdecho" 0)
 (setq a (car (entsel "\nChon duong can nhom : ")))
 (setq ss (ssget "x" (list (assoc 8 (entget a)))))
 (if ss
   (progn
     (setq name (cdr (assoc 0 (entget a))))
     (cond
((= name "LINE") (command "pedit" a "" "j" ss "" ""))
((= name "ARC") (command "pedit" a "" "j" ss "" ""))
((= name "POLYLINE") (command "pedit" a "j" ss "" ""))
((= name "LWPOLYLINE") (command "pedit" a "j" ss "" ""))
((/= name nil)
 (setq txt
	(strcat "Ai doi chon thang " name "ma JOIN bao gio hi ?")
 )
 (alert (strcat "Rang ma mi dot ghe rua ! " txt))
)
     )
   )
 )
)

  • 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

mình đã sử dụng lệnh PSELECT như bác VUVUZELA nhưng ko thực hiện được, mong bác chỉ giáo thêm , cần làm thế nào cho được ! File mình đã gửi kèm theo, nếu có gì xin bác chỉnh file giúp mình được ko .

 

Chân thành cảm ơn bác nhiều !

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 đã sử dụng lệnh PSELECT như bác VUVUZELA nhưng ko thực hiện được, mong bác chỉ giáo thêm , cần làm thế nào cho được ! File mình đã gửi kèm theo, nếu có gì xin bác chỉnh file giúp mình được ko .

 

Chân thành cảm ơn bác nhiều !

Trong file Cad của bạn, các đối tuợng không đồng phẳng nên không thể nối đuợc.

Bạn cần đưa các đối tuợng về cùng một mặt phẳng, truớc khi nối chúng với nhau.

 

tham khảo : http://www.cadviet.com/forum/index.php?sho...ost&p=45527

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

Do điểm đầu và điểm cuối không trùng nhau. Phải đi đường vòng thôi bác ả

Cái này mình thử rồi.

Trước tiên bác dùng EXPLODE nổ tất cả các đối tượng POLYLINE về thành LINE

Sau đó dùng PSELECT chuyển hệ tọa độ Z=0

Xài lệnh NH nhóm đối tượg

Và có thể dùng lệnh Bounday chỉ điểm==> sẽ có polyline khép kín

(Hoặc click vô các đối tượgn đã nhóm mà không trùng nhau chọn chế độ bắt điểm click điểm đầu thằng này về điểm cuối thằng kia 1 cách thủ công là OK)

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 1 file noi.lsp chẳng hạn rồi copy đoạn dưới đây vào. Sau đó save lại và appload lên. Sử dụng lệnh nn là ok:

(defun c:nn (/ tdt ssdt sodt index)

(defun ObjName (ssdt /)

(cdr (assoc '0 (entget ssdt)))

)

(defun MoPL (ssdt /)

(= (cdr (assoc '70 (entget ssdt))) 0)

)

(defun NoiPL (ssdt /)

(if (MoPL ssdt)

(command ".PEDIT" ssdt "J" "All" "" "X")

)

)

(defun NoiLC (ssdt /)

(command ".PEDIT" ssdt "Y" "J" "All" "" "X")

)

(setq

tdt (ssget)

sodt (sslength tdt)

index 0

)

(repeat sodt

(setq

ssdt (ssname tdt index)

index (1+ index)

)

(if (or (= (Objname ssdt) "LWPOLYLINE")

(= (Objname ssdt) "POLYLINE")

)

(NoiPL ssdt)

)

(if (or (= (Objname ssdt) "LINE") (= (Objname ssdt) "ARC"))

(NoiLC ssdt)

)

)

(princ)

)

Khi dùng lệnh nn, chỉ cần pick 1 trong các line, arc, pline nào đó là nó tự tìm các đoạn liên kết được để nối.

 

Một số trường hợp dùng Lisp này, nó tự động tìm các đoạn liện kết để nối nhưng lại không đúng ý mình lắm. Nhờ các bác sửa lại giúp em là chỉ nối những đối tượng mà mình chọn. Cảm ơn các 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
Một số trường hợp dùng Lisp này, nó tự động tìm các đoạn liện kết để nối nhưng lại không đúng ý mình lắm. Nhờ các bác sửa lại giúp em là chỉ nối những đối tượng mà mình chọn. Cảm ơn các bác!

 

Day bac thu daon nay xem

(defun c:nn (/)
 (setvar "cmdecho" 0)
 (setq ss (ssget))
 (if ss
   (progn
     (setq a (ssname ss 0))
     (setq name (cdr (assoc 0 (entget a))))
     (cond
((= name "LINE") (command "pedit" a "" "j" ss "" ""))
((= name "ARC") (command "pedit" a "" "j" ss "" ""))
((= name "POLYLINE") (command "pedit" a "j" ss "" ""))
((= name "LWPOLYLINE") (command "pedit" a "j" ss "" ""))
     )
   )
 )
)

  • 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

Dạo trước mình thấy mấy cái lisp chuyển line, arc ... thành pline nhiều lắm nhưng do lúc đó mình cũng có viết cái tạm dùng đc nên kg quan tâm lắm. Nay thấy cần xét cả TH đối tượng là spline thì làm thế nào chuyển nó thành polyline hay region thì kg thấy đâu nữa. Tìm cũng chẳng có. Chắc mình tìm hơi dở nên chưa thấy.

Phiền các bác trên DĐ đã viết hay đã biết thì giúp mình cái lisp chọn nhiều đt cùng lúc trong đó có line, pline, arc, spline rồi chuyển nó thành polyline hay region. Nó lặp cho đến lúc nào trong ss (tập hợp chọn) kg thể tạo đc nữa thì thôi. Cám ơn các 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

Dạo trước mình thấy mấy cái lisp chuyển line, arc ... thành pline nhiều lắm nhưng do lúc đó mình cũng có viết cái tạm dùng đc nên kg quan tâm lắm. Nay thấy cần xét cả TH đối tượng là spline thì làm thế nào chuyển nó thành polyline hay region thì kg thấy đâu nữa. Tìm cũng chẳng có. Chắc mình tìm hơi dở nên chưa thấy.

Phiền các bác trên DĐ đã viết hay đã biết thì giúp mình cái lisp chọn nhiều đt cùng lúc trong đó có line, pline, arc, spline rồi chuyển nó thành polyline hay region. Nó lặp cho đến lúc nào trong ss (tập hợp chọn) kg thể tạo đc nữa thì thôi. Cám ơn các bác

Bác xem trong này: http://www.cadviet.c...showtopic=10621

Từ Aucad2007 đã có chức năng chuyển Spl thành pl

Từ Autocad 2011 đã có lệnh Bo sử dụng 2 tham số để chuyển l, spl, arc khép kìn thành Polyline hoặc Region.

ytrewt.jpg

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

Dạo trước mình thấy mấy cái lisp chuyển line, arc ... thành pline nhiều lắm nhưng do lúc đó mình cũng có viết cái tạm dùng đc nên kg quan tâm lắm. Nay thấy cần xét cả TH đối tượng là spline thì làm thế nào chuyển nó thành polyline hay region thì kg thấy đâu nữa. Tìm cũng chẳng có. Chắc mình tìm hơi dở nên chưa thấy.

Phiền các bác trên DĐ đã viết hay đã biết thì giúp mình cái lisp chọn nhiều đt cùng lúc trong đó có line, pline, arc, spline rồi chuyển nó thành polyline hay region. Nó lặp cho đến lúc nào trong ss (tập hợp chọn) kg thể tạo đc nữa thì thôi. Cám ơn các bác

Cái này Ketxu viết để convert Spline->Pline, nhưng bác có thể sửa để chuyển 1 curve (line, arc, spline...) thành pline được.

(Chuyển thành pline thì không quan tâm kín/hở, còn chuyển thành region chỉ khi kín thôi mà!)

@Ketxu: nên chuyển lisp này thành: chuyển Curve -> Pline cho tổng quát luôn.

http://xaydungit.vn/...68-Spline-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

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

×