Đến nội dung


Hình ảnh
- - - - -

Lisp nối Line thành Pline ?


  • Please log in to reply
80 replies to this topic

#1 heocon0_0

heocon0_0

    biết zoom

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

Đã gửi 17 January 2007 - 04:14 AM

Có ai có LISP này không? Tồi đang cần quá.. :lol:
  • 0
Hương heo ăn kứt mèo...

#2 Jin Yong

Jin Yong

    biết lệnh group

  • Vip
  • PipPipPipPipPipPip
  • 498 Bài viết
Điểm đánh giá: 334 (khá)

Đã gửi 17 January 2007 - 08:45 AM

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

Phát triển phần mềm thiết kế Kết cấu Việt Nam - http://www.ketcausoft.com


#3 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 17 January 2007 - 02:29 PM

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

#4 Hieuss

Hieuss

    biết lệnh mtext

  • Vip
  • PipPipPipPip
  • 286 Bài viết
Điểm đánh giá: 163 (tàm tạm)

Đã gửi 19 January 2007 - 01:48 AM

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

#5 quanghuy181

quanghuy181

    biết vẽ arc

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

Đã gửi 06 January 2009 - 11:20 PM

Mình có khoảng 10thửa đất thế mà nó tạo thành 1 luôn. Pó tay
  • 0

#6 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 07 January 2009 - 09:44 AM

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


#7 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 07 January 2009 - 09:48 AM

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


#8 NguyenNgocSon

NguyenNgocSon

    biết dimbaseline

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

Đã gửi 14 July 2010 - 12:24 AM

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

#9 Tue_NV

Tue_NV

    KS Võ Quang Tuệ

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

Đã gửi 14 July 2010 - 08:21 AM

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

  • 2

#10 NguyenNgocSon

NguyenNgocSon

    biết dimbaseline

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

Đã gửi 14 July 2010 - 08:32 AM

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

#11 Tue_NV

Tue_NV

    KS Võ Quang Tuệ

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

Đã gửi 14 July 2010 - 08:47 AM

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

#12 VUVUZELA

VUVUZELA

    biết lệnh chamfer

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

Đã gửi 14 July 2010 - 09:40 AM

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

  • 1

Hệ thống Liên Kết, Thiết Kế Tự Động

ttps://www.facebook...etThietKeTuDong


#13 minhhung29

minhhung29

    biết vẽ line

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

Đã gửi 27 July 2010 - 12:57 AM

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...98wx1j4pi30196j
  • 0

#14 VUVUZELA

VUVUZELA

    biết lệnh chamfer

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

Đã gửi 27 July 2010 - 09:09 AM

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

  • 3

Hệ thống Liên Kết, Thiết Kế Tự Động

ttps://www.facebook...etThietKeTuDong


#15 Nghia_XD

Nghia_XD

    biết vẽ polygon

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

Đã gửi 27 July 2010 - 04:24 PM

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

Xây dựng dân dụng và công nghiệp


#16 VUVUZELA

VUVUZELA

    biết lệnh chamfer

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

Đã gửi 28 July 2010 - 09:26 AM

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

  • 1

Hệ thống Liên Kết, Thiết Kế Tự Động

ttps://www.facebook...etThietKeTuDong


#17 minhhung29

minhhung29

    biết vẽ line

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

Đã gửi 28 July 2010 - 12:43 PM

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

#18 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 28 July 2010 - 01:17 PM

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.c...o...ost&p=45527
  • 0

#19 VUVUZELA

VUVUZELA

    biết lệnh chamfer

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

Đã gửi 28 July 2010 - 03:17 PM

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

Hệ thống Liên Kết, Thiết Kế Tự Động

ttps://www.facebook...etThietKeTuDong


#20 foudremars

foudremars

    biết vẽ arc

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

Đã gửi 21 August 2010 - 03:08 PM

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