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

Viết Lisp theo yêu cầu

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

chào các bạn, xin nhờ các bạn 1 việc. chả là thế này lần truớc mình có nhờ các bạn viết 1 lisp nối các đoạn thẳng liên tiếp nhau thành 1 PL và 1 cao thủ đã viết cho mình lisp này ( dùng rất tốt )

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

)

rưng mà có vấn đề nảy sinh như sau : cái lisp này nó sẽ nối tất tần tật các đoạn thẳng nào có liên hệ với đoạn thẳng mà mình chọn, trong khi đôi lúc mình chỉ muốn nối vài đuờng với nhau thôi ( các đuờng khác dù có tiếp theo thì cũng kô nối ) bình thường ra thì mình lại phải dùng PE,

mình nhờ các bạn sửa nó thành sao cho nó chỉ nối những đoạn thẳng mà mình chọn thôi, cảm ơn các bạn !

 

Bạn nguyenkhoadung98 ơi,

Sau khi mò mẫm mình thấy có cách khác hay hơn là bạn thay thế các tham số "all" "" "x" của lệnh pedit bằng các tham số tương úng như sau (ssget) "" "" và như vậy các dòng lệnh tương ứng sẽ là (command ".PEDIT" ssdt "J" (ssget) "" "") và (command ".PEDIT" ssdt "Y" "J" (ssget) "" "").

Như vậy sau khi bạn chọn các đối tượng cần nối , lisp sẽ tự động chạy luôn mà bạn không cần phải nhấn Enter nữa.

 

Thực ra theo thiển ý của mình thì cái lisp này chưa thực là tối ưu, có thể nên cải tiến lại chút nữa sẽ tốt hơn vì hiện tại nếu bạn chọn nhiều đối tượng cho biến tdt thì việc chọn các đối tượng cần nối sẽ rất dễ nhầm lẫn bạn ạ. Theo ý mình chỉ nên nối mỗi lần một bộ chọn rồi sau đó cho người dùng chọn tiếp có nối tiếp bộ chọn nữa hay không thì tốt hơn bạn ạ.

 

Bạn hãy thử xem nhé. 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
vậy là mình phải chọn tất cả các block sang bản vẽ mới à

Mình nghĩ chắc là bạn chưa quen dùng DesignCenter hoặc ToolPalette.

- Nếu bạn ít sử dụng đến block này thì bạn chỉ cần copy nó rồi paste nó sang bản vẽ mới.

- Nếu thường sử dụng các ký hiệu này thì bạn nên dùng file KHQH_04 như một file thư viện chứa các block ký hiệu, bật DesignCenter (Ctrl+2) chọn thư mục chứa file thư viện-> file thư viện -> block. Muốn lấy cái nào thì kéo nó vào bản vẽ.

- Nếu bạn thường xuyên các ký hiệu này thì bạn bật ToolPalette ra (Ctrl+3), kéo con block đó từ DesignCenter vào ToolPalette, hoặc từ bản vẽ của bạn cũng được, cách đưa block vào ToolPalette cũng đơn giản thôi: Đầu tiên click chuột trái vào block, sau đó bấm giữ chuột trái và kéo vào ToolPalette .Tiếp đó kích phải chuôt vào block đó trên ToolPalette, chọn properties, kiểm tra scale; layer phù hợp với ý của mình chưa. Chèn block từ Toolpalette được định sẵn tỉ lệ, góc nghiêng, màu, layer.

- ToolPalette cũng có tác dụng đối với Hatch. Nếu bạn mệt mỏi khi dùng lệnh Hatch lại phải đặt lại từ đầu từ góc nghiêng cho đến tỉ lệ, đặc biệt nhiều cái đặt tỉ lệ nhỏ quá tô vào preview phải mất đến vài phút. Sử dụng ToolPalette sẽ giúp bạn khỏi cần nhớ góc nghiêng cũng như tỉ lệ hatch, kể cả layer. Đơn giản là bạn mở bản vẽ nào có mẫu hatch đã tô theo đúng ý muốn rồi, kiểm tra layer, cũng theo trình tự như làm với block kéo nó vào ToolPalette. Khi tô hatch từ ToolPalette sẽ đặt sẵn mẫu tô, tỉ lệ, góc nghiêng, màu, layer.

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 đã giúp.

Mình mình đã đưa kí hiệu dạng điểm được rồi và sử dụng chung cho các bản vẽ. nếu gặp trường hợp cài Cad lại thì file này ta phải lưu thế nào ?

Riêng việc đưa Hatch vào mình chưa làm được mong được Bạn giúp hướng dẫn chi tiết thêm

nghĩa là mình tạo Hatch trước, tạo Block cho hatch đó, rồi bấm ctrl+2 và copy vào, xong bấm ctrl+3 đưa sang hatch mẫu. Đúng không bạn.

Mình làm khô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
Cám ơn Bạn đã giúp.

Mình mình đã đưa kí hiệu dạng điểm được rồi và sử dụng chung cho các bản vẽ. nếu gặp trường hợp cài Cad lại thì file này ta phải lưu thế nào ?

Riêng việc đưa Hatch vào mình chưa làm được mong được Bạn giúp hướng dẫn chi tiết thêm

- Rõ ràng là cần 1 file thư viện để khi cài lại Cad dễ tạo lại Toolpalette, lúc đó bạn chỉ cần vào bấm Ctrl+2, bấm vào file thư viện, chọn chức năng block rồi mở phím phải chuột sẽ có Creat Toolpalette, tất cả các block trong file đó sẽ chuyển sang 01 toolpalette mới. Còn nếu thấy làm như vậy vẫn phức tạp thì bạn lưu file acad.cui để dùng lại.

- Bất cứ một thứ gi hiện ra trên bản vẽ bạn đều có thể lôi nó vào Toolpalette, nhưng thường thì chỉ sử dụng block và hatch.

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
- Rõ ràng là cần 1 file thư viện để khi cài lại Cad dễ tạo lại Toolpalette, lúc đó bạn chỉ cần vào bấm Ctrl+2, bấm vào file thư viện, chọn chức năng block rồi mở phím phải chuột sẽ có Creat Toolpalette, tất cả các block trong file đó sẽ chuyển sang 01 toolpalette mới. Còn nếu thấy làm như vậy vẫn phức tạp thì bạn lưu file acad.cui để dùng lại.

- Bất cứ một thứ gi hiện ra trên bản vẽ bạn đều có thể lôi nó vào Toolpalette, nhưng thường thì chỉ sử dụng block và hatch.

Chúc bạn vui.

Xin nhờ Bạn giúp cho cách tạo Hatch

rất cám ơ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
Xin nhờ Bạn giúp cho cách tạo Hatch

rất cám ơn

Xin lỗi bác Cuongtk2 và bác Dacvien2007,

Các bác nên chuyển các bài này về topic mẹo sử dụng Autocad có lẽ phù hợp hơn là đặt nó trong topic Autolisp này. Như vậy sẽ tốt hơn cho những người có cùng mối quan tâm vì dễ tìm kiếm và theo dõi.

Rất cám ơn các bác về các bài viết 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

Nhờ bác Hoành viết giúp Em líp vẽ đuờng song song trong qui hoạch giao thông, Lisp yêu cầu xác định Độ rộng mặt đường, độ rộng vĩa hè ( lề đường ) . Khi chọn đường làm tim thì vẽ sang 2 bên thể hiện đường pline mặt đường và vĩa hè ở hai phía.

Rất mong được Bác giúp, Cám ơ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
Bạn nguyenkhoadung98 ơi,

Sau khi mò mẫm mình thấy có cách khác hay hơn là bạn thay thế các tham số "all" "" "x" của lệnh pedit bằng các tham số tương úng như sau (ssget) "" "" và như vậy các dòng lệnh tương ứng sẽ là (command ".PEDIT" ssdt "J" (ssget) "" "") và (command ".PEDIT" ssdt "Y" "J" (ssget) "" "").

Như vậy sau khi bạn chọn các đối tượng cần nối , lisp sẽ tự động chạy luôn mà bạn không cần phải nhấn Enter nữa.

 

Thực ra theo thiển ý của mình thì cái lisp này chưa thực là tối ưu, có thể nên cải tiến lại chút nữa sẽ tốt hơn vì hiện tại nếu bạn chọn nhiều đối tượng cho biến tdt thì việc chọn các đối tượng cần nối sẽ rất dễ nhầm lẫn bạn ạ. Theo ý mình chỉ nên nối mỗi lần một bộ chọn rồi sau đó cho người dùng chọn tiếp có nối tiếp bộ chọn nữa hay không thì tốt hơn bạn ạ.

 

Bạn hãy thử xem nhé. Chúc bạn vui.

 

hè cảm ơn các bạn 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
Nhờ bác Hoành viết giúp Em líp vẽ đuờng song song trong qui hoạch giao thông, Lisp yêu cầu xác định Độ rộng mặt đường, độ rộng vĩa hè ( lề đường ) . Khi chọn đường làm tim thì vẽ sang 2 bên thể hiện đường pline mặt đường và vĩa hè ở hai phía.

Rất mong được Bác giúp, Cám ơn.

Mạn phép bác Hoành cho em xin viết hộ đoạn code, lâu ngày ko viết lisp nên thấy ngứa tay:

- Lệnh OS1 giúp bạn chuyển pline về layer tim đường, offset ra 2 bên lòng đường và vỉa hè với layer tương ứng.

(defun c:os1 ( / ent p1 ent0 ent1)

(defun offsetgoc (ent1 p1 goc rong layer / p2 ent ent0)

(setq p2 (polar p1 (* pi goc) rong))

(command "offset" rong ent1 p2 "")

(setq ent (entlast)

ent0 (entget ent)

ent0 (subst (cons 8 layer) (assoc 8 ent0) ent0))

(entmod ent0)

(entupd ent))

 

(setq ent (entsel)

p1 (cadr ent)

ent1 (car ent)

longduong (getdist "\n Long duong rong:")

viahe (getdist "\nVia he rong:")

viahe (+ longduong viahe))

(setq p1 (trans p1 0 1))

(offsetgoc ent1 p1 0.5 longduong "long_duong")

(offsetgoc ent1 p1 1.5 longduong "long_duong")

(offsetgoc ent1 p1 0.5 viahe "via_he")

(offsetgoc ent1 p1 1.5 viahe "via_he")

(setq ent0 (entget ent1)

ent0 (subst (cons 8 "tim_duong") (assoc 8 ent0) ent0))

(entmod ent0)

(entupd ent1)

(command "ucs" "w")

)

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

Ô.. Rất hay !!!

Xin chân thành cám ơn bạn.

Nhờ bạn phân dùm ra lớp giúp mình với : như lớp tim đường, lề đường và vĩa hè với màu khác nhau và lực nét khác nhau.

 

và nhờ bạn viết giúp Lisp xác định Chỉ giới Xây dựng: ví dụ như sau khi mình có 2 con đường, 1 rộng 10m lộ giới từ tim vào 15m thì vẽ đường chỉ giới xây dựng tính từ tim vào, con đường thứ 2 nối vào chỉ rộng 6m lộ giới là 10m. nhờ bạn lisp vẽ chĩ giới các đường đó. Yêu cầu xác định tim đường, nhập lộ giối, phiấ nào thì vẽ ra chỉ giới xây dựng của các đường đó.

Rất mong được bạn giúp

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
(command "ucs" "w")

Mạn phép góp ý bạn 1 chút nhỏ như này:

-Toàn bộ phía trên không thấy bạn dùng ucs nên cuối cùng không cần dùng dòng trả ucs về như của bạn.

-Bạn trả về W như vậy là vô tình làm thay đổi UCS của người dùng. Nếu có dùng UCS trong lisp thì khi trả lại nên chọn P thì hợp lý 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
Bạn nguyenkhoadung98 ơi,

 

Thực ra theo thiển ý của mình thì cái lisp này chưa thực là tối ưu, có thể nên cải tiến lại chút nữa sẽ tốt hơn vì hiện tại nếu bạn chọn nhiều đối tượng cho biến tdt thì việc chọn các đối tượng cần nối sẽ rất dễ nhầm lẫn bạn ạ. Theo ý mình chỉ nên nối mỗi lần một bộ chọn rồi sau đó cho người dùng chọn tiếp có nối tiếp bộ chọn nữa hay không thì tốt hơn bạn ạ.

 

Bạn hãy thử xem nhé. Chúc bạn vui.

Chào bạn nguyenkhoadung98,

Đây là cái lisp mình cải tiến theo cái ý mình nói ở trên. Bạn dùng thử và cho mình biết ý kiến nhé.

(defun c:Lj (/ dt ssdt sodt index ans);;; Make Command

(setq index 0)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(defun ename (ssdt /);;; Get etype of the object ename
(cdr (assoc '0 (entget ssdt)))
)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(defun MoPL (ssdt /);;; Check the open polyline
(= (cdr (assoc '70 (entget ssdt))) 0)
)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(defun NoiPL (ssdt /);;; Joint the polyline
(if (MoPL ssdt)
(command ".PEDIT" ssdt "J" (ssget) "" "")

)
)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(defun NoiLC (ssdt /);;; Joint the line to polyline
(command ".PEDIT" ssdt "Y" "J" (ssget) "" "")

)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(defun Main (dt / );;; Get object and joint
(setq
dt (entsel)
;;;sodt (sslength dt)
;;;index 0
)
;;;(repeat sodt
(setq
ssdt (car dt)

)
(if (or (= (ename ssdt) "LWPOLYLINE") (= (ename ssdt) "POLYLINE"))
(NoiPL ssdt)
)
(if (or (= (ename ssdt) "LINE") (= (ename ssdt) "ARC"))
(progn
(NoiLC ssdt)
(setq index (1+ index))
)
)
(setq ans (getstring "\nBan muon tiep tuc ? "))
)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(defun Check (/ans);;; Check continuing condition

(if (= ans "y")
(main dt)

)
)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

(Main dt)
(while (= ans "y")
(check ans)
)
(alert (strcat "Ban da noi " (itoa index) " Line thanh Plolyline")) 

(princ)
)

Lệnh sử dụng là LJ (line joint) bạn nhé.

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 góp ý bạn 1 chút nhỏ như này:

-Toàn bộ phía trên không thấy bạn dùng ucs nên cuối cùng không cần dùng dòng trả ucs về như của bạn.

-Bạn trả về W như vậy là vô tình làm thay đổi UCS của người dùng. Nếu có dùng UCS trong lisp thì khi trả lại nên chọn P thì hợp lý hơn.

Thực ra thì mình đã xoá mất 1 dòng (command "ucs" "ob" p1), cái này là mấu chốt của lệnh để khi bấm vào cung đoạn có góc =90 độ không bị lỗi. Như vậy mới có hàm trans, để mình post lại cho đủ.

(defun c:os1 ( / ent p1 ent0 ent1)

(defun offsetgoc (ent1 p1 goc rong layer / p2 ent ent0)

(setq p2 (polar p1 (* pi goc) rong))

(command "offset" rong ent1 p2 "")

(setq ent (entlast)

ent0 (entget ent)

ent0 (subst (cons 8 layer) (assoc 8 ent0) ent0))

(entmod ent0)

(entupd ent))

 

(setq ent (entsel)

p1 (cadr ent)

ent1 (car ent)

longduong (getdist "\n Long duong rong:")

viahe (getdist "\nVia he rong:")

viahe (+ longduong viahe))

(command "ucs" "ob" p1)

(setq p1 (trans p1 0 1))

(offsetgoc ent1 p1 0.5 longduong "long_duong")

(offsetgoc ent1 p1 1.5 longduong "long_duong")

(offsetgoc ent1 p1 0.5 viahe "via_he")

(offsetgoc ent1 p1 1.5 viahe "via_he")

(setq ent0 (entget ent1)

ent0 (subst (cons 8 "tim_duong") (assoc 8 ent0) ent0))

(entmod ent0)

(entupd ent1)

(command "ucs" "p")

)

  • 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

Nhờ bạn viết giúp Lisp:

1. xác định Chỉ giới Xây dựng: ví dụ như sau khi mình có 2 con đường, 1 rộng 10m lộ giới từ tim vào 15m thì vẽ đường chỉ giới xây dựng tính từ tim vào, con đường thứ 2 nối vào chỉ rộng 6m lộ giới là 10m. nhờ bạn lisp vẽ chĩ giới các đường đó. Yêu cầu xác định tim đường, nhập lộ giối, phiấ nào thì vẽ ra chỉ giới xây dựng của các đường đó.

2. Tính Vạt góc : khi 2 đường chỉ giới xây dựng giao nhau với 1 góc theo qui định thì thì tính vạt góc từ đỉnh giao nhau xác định lùi về với khoảng cách qui định, nối 2 điểm và vẽ đường góc vát, xong xoá đường thừa góc giao nhau:

Góc và kích thước như sau :

từ 0 - 30 độ khoảng cách lùi về là 20m x20

30 - 40 : 15 x1 5

40 - 50 : 12

56 - 60 : 10

60 -80 : 7

80 - 110 : 5

110 - 140 :3

140 - 160 : 2

160 - 200 : 0

 

Rất mong được bạn giùp. File ví dụ mình up theo.

 

http://www.cadviet.com/upfiles/tinh_goc_vat_1.rar

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
Lấy font, độ cao hay góc nghiêng text và vẽ point

(defun C:NOISUY( / n1 n2 p p1 p2 pt h h1 h2 ht)

(defun dxf( name n)

(cdr (assoc n (entget name)))

)

(defun gocam( goc)

(if (< goc 0.0) (+ 360.0 goc) goc)

)

(defun pvi( p1 p2)

(/ (* 180 (angle p1 p2)) pi)

)

(defun ra( g)

(/ (* g pi) 180)

)

(defun deg( so)

(/ (* 180 so) pi)

)

(defun diemvuonggoc( p1 p2 p / p0)

(setq p0 (polar p (ra (+ 90.0 (gocam (pvi p1 p2)))) 10.0))

(inters p1 p2 p p0 nil)

)

(while (and (setq n1 (entsel "text 1")) (setq n2 (entsel "text 2")))

(setq n1 (car n1) n2 (car n2))

(while (setq p (getpoint "\nDiem"))

(setq p1 (dxf n1 10) p2 (dxf n2 10) st1 (dxf n1 1) st2 (dxf n2 1))

(setq h1 (atof st1) h2 (atof st2))

(if (> h1 h2) (setq pt p2 p2 p1 p1 pt ht h2 h2 h1 h1 ht))

(setq p (diemvuonggoc p1 p2 p))

(if (and (> (distance p p2) (distance p p1)) (> (distance p p2) (distance p2 p1)))

(setq h (- h1 (/ (* (- h2 h1) (distance p p1)) (distance p1 p2))))

(setq h (+ h1 (/ (* (- h2 h1) (distance p p1)) (distance p1 p2))))

)

(command "_.text" "s" (dxf n1 7) p (dxf n1 40) (deg (dxf n1 50)) (rtos h 2 3))

(entmake (list (cons 0 "POINT") (cons 8 "points") (cons 10 p)))

)

)

)

Nhưng qua lisp này, nhờ các Anh giúp cho công việc nội suy cũng theo đường thẳng đó, nhưng thể hiện theo bước nhảy với số bước nhảy qui định ví như là : 0.5 , 1.0, 2,... thì lisp sẻ tính nội suy và thể hiện ra độ cao theo đường thằng đó với các điển thể hiện cao độ ví như :

Điểm 1 caođo 2.15 điểm 2 cao độ 3.67 bước nhảy là 0.5

thì xuất hiện các cao độ 2.50 , 3.0, 3.5 trên đường thẳng qua điểm 1 và 2

Rất mong được giúp đở :

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
Nhờ bạn viết giúp Lisp:

1. xác định Chỉ giới Xây dựng: ví dụ như sau khi mình có 2 con đường, 1 rộng 10m lộ giới từ tim vào 15m thì vẽ đường chỉ giới xây dựng tính từ tim vào, con đường thứ 2 nối vào chỉ rộng 6m lộ giới là 10m. nhờ bạn lisp vẽ chĩ giới các đường đó. Yêu cầu xác định tim đường, nhập lộ giối, phiấ nào thì vẽ ra chỉ giới xây dựng của các đường đó.

2. Tính Vạt góc : khi 2 đường chỉ giới xây dựng giao nhau với 1 góc theo qui định thì thì tính vạt góc từ đỉnh giao nhau xác định lùi về với khoảng cách qui định, nối 2 điểm và vẽ đường góc vát, xong xoá đường thừa góc giao nhau:

Góc và kích thước như sau :

từ 0 - 30 độ khoảng cách lùi về là 20m x20

30 - 40 : 15 x1 5

40 - 50 : 12

56 - 60 : 10

60 -80 : 7

80 - 110 : 5

110 - 140 :3

140 - 160 : 2

160 - 200 : 0

 

Rất mong được bạn giùp. File ví dụ mình up theo.

 

http://www.cadviet.com/upfiles/tinh_goc_vat_1.rar

1. Với yêu cầu offset 1 phía thì bạn nên dùng lệnh offset.

2. Rất khó xác định giao điểm 2 đường PLINE, code này chỉ phục vụ cho việc vẽ đường vạt góc cho 2 đường LINE, không xử lý trim vì để lại đường LINE cho việc vạt góc đường còn lại. Bạn chịu khó trim khi có đầy đủ các đường vạt góc, sau đó nếu cần thì dùng lệnh JL đã có ở trang trước để nối lại thành PLINE.

Bạn thử xem nếu thấy có thể dùng được thì báo lại nhé:

 

(defun c:vg ()

(defun dxf (ent maso)

(cdr (assoc maso ent))

)

(defun diemvuonggoc( p1 p2 p / p0)

(setq p0 (polar p (+ (angle p1 p2) (* pi 0.5)) 10.0))

(inters p1 p2 p p0 nil)

)

 

(setq ent1 (entsel "\n Chon duong LINE 1:")

ent2 (entsel "\n Chon duong LINE 2:")

ent1g (entget (car ent1))

ent2g (entget (car ent2))

sp1 (dxf ent1g 10)

ep1 (dxf ent1g 11)

sp2 (dxf ent2g 10)

ep2 (dxf ent2g 11)

p1 (diemvuonggoc sp1 ep1 (cadr ent1))

p2 (diemvuonggoc sp2 ep2 (cadr ent2))

ent1 (car ent1)

ent2 (car ent2)

int_point (inters sp1 ep1 sp2 ep2 nil)

ang1 (angle int_point p1)

ang2 (angle int_point p2)

ang (- ang1 ang2)

ang (abs (* 180.0 (/ ang pi )))

)

(cond ((and (> ang 0.0)(<= ang 30.0)) (setq d 20.0))

((and (> ang 30.0)(<= ang 40.0)) (setq d 15.0))

((and (> ang 40.0)(<= ang 50.0)) (setq d 12.0))

((and (> ang 50.0)(<= ang 60.0)) (setq d 10.0))

((and (> ang 60.0)(<= ang 80.0)) (setq d 7.0))

((and (> ang 80.0)(<= ang 110.0)) (setq d 5.0))

((and (> ang 110.0)(<= ang 140.0)) (setq d 20.0))

((and (> ang 140.0)(<= ang 160.0)) (setq d 20.0))

((and (> ang 160.0)(<= ang 180.0)) (setq d 0.0))

)

(setq p1 (polar int_point ang1 d)

p2 (polar int_point ang2 d))

(entmake (list (cons 0 "LINE")(cons 10 p1) (cons 11 p2) (cons 8 "chi_gioi")))

)

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
1. Với yêu cầu offset 1 phía thì bạn nên dùng lệnh offset.

2. Rất khó xác định giao điểm 2 đường PLINE, code này chỉ phục vụ cho việc vẽ đường vạt góc cho 2 đường LINE, không xử lý trim vì để lại đường LINE cho việc vạt góc đường còn lại. Bạn chịu khó trim khi có đầy đủ các đường vạt góc, sau đó nếu cần thì dùng lệnh JL đã có ở trang trước để nối lại thành PLINE.

Bạn thử xem nếu thấy có thể dùng được thì báo lại nhé:

 

(defun c:vg ()

(defun dxf (ent maso)

(cdr (assoc maso ent))

)

(defun diemvuonggoc( p1 p2 p / p0)

(setq p0 (polar p (+ (angle p1 p2) (* pi 0.5)) 10.0))

(inters p1 p2 p p0 nil)

)

 

(setq ent1 (entsel "\n Chon duong LINE 1:")

ent2 (entsel "\n Chon duong LINE 2:")

ent1g (entget (car ent1))

ent2g (entget (car ent2))

sp1 (dxf ent1g 10)

ep1 (dxf ent1g 11)

sp2 (dxf ent2g 10)

ep2 (dxf ent2g 11)

p1 (diemvuonggoc sp1 ep1 (cadr ent1))

p2 (diemvuonggoc sp2 ep2 (cadr ent2))

ent1 (car ent1)

ent2 (car ent2)

int_point (inters sp1 ep1 sp2 ep2 nil)

ang1 (angle int_point p1)

ang2 (angle int_point p2)

ang (- ang1 ang2)

ang (abs (* 180.0 (/ ang pi )))

)

(cond ((and (> ang 0.0)(<= ang 30.0)) (setq d 20.0))

((and (> ang 30.0)(<= ang 40.0)) (setq d 15.0))

((and (> ang 40.0)(<= ang 50.0)) (setq d 12.0))

((and (> ang 50.0)(<= ang 60.0)) (setq d 10.0))

((and (> ang 60.0)(<= ang 80.0)) (setq d 7.0))

((and (> ang 80.0)(<= ang 110.0)) (setq d 5.0))

((and (> ang 110.0)(<= ang 140.0)) (setq d 20.0))

((and (> ang 140.0)(<= ang 160.0)) (setq d 20.0))

((and (> ang 160.0)(<= ang 180.0)) (setq d 0.0))

)

(setq p1 (polar int_point ang1 d)

p2 (polar int_point ang2 d))

(entmake (list (cons 0 "LINE")(cons 10 p1) (cons 11 p2) (cons 8 "chi_gioi")))

)

Rất cám ơn bạn.

Mình đã thử xong, đúng như bạn nói, việc khó khăn trong việc xử lý giữa line và pline

À... mình nghĩ tìm cách nào chuyển Pline sang line và sau đó sừ dụng lệnh VG được không bạn !

Rất mong Bạn giúp

Bạn có lisp của lệnh Offset , ALIGN cho mình xin với, vì mình muốn đổi cho nó việt hoá câu lệnh.

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 Nguyễn Hoành, bác SSG và ... ơi. Em mới kiếm được một cái thư viện dành cho dân kiến trúc "công nhận nó khá tuyệt vời." Nhưng người chia sẻ em cái thư viện này, lại không truyền lại bí kíp tạo ra bộ thư viện đó. Thật sự, em mò mãi mà vẫn chưa ra, hum nay, có gì em sẽ Up lên diễn đàn aem xem có gì tìm hiểu thêm xem họ tạo ra bộ thư viện này bằng cách nào nha. " Công công ty mà đã tạo ra bộ thư viện này là công ty PAD, khá nổi ở Sài Gòn" có gì em cũng sẽ up lên topic thư viện or dowload của diễn đàn lun. Học hỏi và chép trên này nhìu, mà chưa có dịp nào ... Thank các bác nhìu nhìu.

Còn đây là một file của em nó.

Visit My Website

rút kinh nghiệm lần trước, em save file nó xuống cad 200o rù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
Rất cám ơn bạn.

À... mình nghĩ tìm cách nào chuyển Pline sang line và sau đó sừ dụng lệnh VG được không bạn !

Rất mong Bạn giúp

Bạn có lisp của lệnh Offset , ALIGN cho mình xin với, vì mình muốn đổi cho nó việt hoá câu lệnh.

1. ac ac. Mình hứa sẽ viết gộp chung vào lệnh VG.

2. Với lệnh offset và align bạn nên post vào box "thư giãn" . Bạn cứ mạnh dạn post đi, đảm bảo chắc chắn trong vòng 1 ngày sẽ nhận được lisp, đôi khi còn kèm theo cả DCL nữa đấ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
Bạn có lisp của lệnh Offset , ALIGN cho mình xin với, vì mình muốn đổi cho nó việt hoá câu lệnh.[/color]

Viết Lisp cho bạn ư?

Trước hết, bạn hãy đọc những lời khuyên này, khi đọc bạn đừng bỏ qua 1 câu nào hết cho dù là nó hơi dài nhưng rất thâm thúy.

http://www.cadviet.com/forum/index.php?showtopic=2513

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
Viết Lisp cho bạn ư?

Trước hết, bạn hãy đọc những lời khuyên này, khi đọc bạn đừng bỏ qua 1 câu nào hết cho dù là nó hơi dài nhưng rất thâm thúy.

http://www.cadviet.com/forum/index.php?showtopic=2513

Cám ơn Bạn đã chỉ chổ TIP để đọc và học những lời khuyên rất thấm thúy.

 

Thật tình ra mình đang ở một nơi rất ra, nơi vùng lầy nước nổi hàng năm, việc học AutoCAD cũng là một việc phải tầm thầy ở rất xa, đừng nói chi là ngôn ngữ AutoLisp, ...Sưu tầm hay nhờ các bạn viết cho chút đoạn lisp và chạy, mình cảm thấy phấn chấn lên và rất chân thành cám ơn.

 

Việc tự học Autolisp riêng đối với mình không phải đơn giản, phải tự học lệnh ban đầu xem lisp của các bạn, tự rà lại lệnh là gì,... nhưng lại muốn thể hiện nhanh ý tưởng của mình để Lisp chạy....cho công việc... nhưng không được. Mênh mông trong đống lệnh.

 

Nhưng có một điều, một số it người giỏi.... lại khó thông cảm với những người mới bắt đầu. Tiến sĩ mà là sao dạy mẫu giáo. phải không Bạn.

Được giúp thì rất tốt, không giúp thì chưa tốt. Mình không nghĩ vậy đâu. Có cái lương tâm của con người tự soi rọi.

Chúc Bạn vui - khỏe - thành đạt - hạnh phú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 Nguyễn Hoành, bác SSG và ... ơi. Em mới kiếm được một cái thư viện dành cho dân kiến trúc "công nhận nó khá tuyệt vời." Nhưng người chia sẻ em cái thư viện này, lại không truyền lại bí kíp tạo ra bộ thư viện đó. Thật sự, em mò mãi mà vẫn chưa ra, hum nay, có gì em sẽ Up lên diễn đàn aem xem có gì tìm hiểu thêm xem họ tạo ra bộ thư viện này bằng cách nào nha. " Công công ty mà đã tạo ra bộ thư viện này là công ty PAD, khá nổi ở Sài Gòn" có gì em cũng sẽ up lên topic thư viện or dowload của diễn đàn lun. Học hỏi và chép trên này nhìu, mà chưa có dịp nào ... Thank các bác nhìu nhìu.

Còn đây là một file của em nó.

Visit My Website

rút kinh nghiệm lần trước, em save file nó xuống cad 200o rùi đó.

Đề nghị các bác cho 1 bài tut về kỹ thuật stretch L /2 ; L /3 ở mục Kỹ thuật AutoCad, em cũng rất quan tâm về cái 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
Đề nghị các bác cho 1 bài tut về kỹ thuật stretch L /2 ; L /3 ở mục Kỹ thuật AutoCad, em cũng rất quan tâm về cái này.

hay wa, vậy là có người cùng ý tưởng với mình rồi. aem khẩn thiết đề nghị các bác có kinh nghiệm về vấn đề này, mở riêng 1 Topic để hướng dẫn aem và cùng nhau tìm hiểu thêm.

Thank các bác nhì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
hay wa, vậy là có người cùng ý tưởng với mình rồi. aem khẩn thiết đề nghị các bác có kinh nghiệm về vấn đề này, mở riêng 1 Topic để hướng dẫn aem và cùng nhau tìm hiểu thêm.

Thank các bác nhìu.

Vào Google tìm một lúc thì hóa ra đã có bài tut trong box Mẹo sử dung AutoCad-> tính năng hay của block của gp14 .Đọc xong vọc liền thấy đúng như xướng. Lâu nay tự mày mò mãi ko đượ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ạn đã chỉ chổ TIP để đọc và học những lời khuyên rất thấm thúy.

 

Thật tình ra mình đang ở một nơi rất ra, nơi vùng lầy nước nổi hàng năm, việc học AutoCAD cũng là một việc phải tầm thầy ở rất xa, đừng nói chi là ngôn ngữ AutoLisp, ...Sưu tầm hay nhờ các bạn viết cho chút đoạn lisp và chạy, mình cảm thấy phấn chấn lên và rất chân thành cám ơn.

 

Việc tự học Autolisp riêng đối với mình không phải đơn giản, phải tự học lệnh ban đầu xem lisp của các bạn, tự rà lại lệnh là gì,... nhưng lại muốn thể hiện nhanh ý tưởng của mình để Lisp chạy....cho công việc... nhưng không được. Mênh mông trong đống lệnh.

 

Nhưng có một điều, một số it người giỏi.... lại khó thông cảm với những người mới bắt đầu. Tiến sĩ mà là sao dạy mẫu giáo. phải không Bạn.

Được giúp thì rất tốt, không giúp thì chưa tốt. Mình không nghĩ vậy đâu. Có cái lương tâm của con người tự soi rọi.

Chúc Bạn vui - khỏe - thành đạt - hạnh phúc.

Xin lỗi bạn dacvien2007,

Bạn sai rồi, đừng vội tự ái kiểu trẻ con vậy. Bạn nên nhớ rằng, trên diễn đàn này, mọi người đều giúp nhau với tinh thần hoàn toàn tự nguyện và vô tư thôi. Có điều tất cả đều chỉ là giúp thôi, còn vấn đề làm hộ nhau thì hoàn toàn không nên một chút nào. Đã là dân kỹ thuật, bạn phải hiểu rằng để có thể làm tốt công việc của mình, bạn phải cố gắng tự học hỏi thôi. Đành rằng việc học tập của bạn có khó khăn, nhưng không có nghĩa là bạn ỷ vào cái khó khăn ấy để không chịu học được nếu như bạn muốn giỏi nghề. Bạn thừa hiểu rằng trong lĩnh vực kỹ thuật, chỉ một vấn đề nhưng có rất nhiều cách giải quyết khác nhau để đạt được yêu cầu của nó. Việc bạn chọn phương án nào phải do chính bạn hiểu kỹ, cân nhắc vào điều kiện cụ thể của bạn đồng thời phải tự chịu trách nhiệm về sự lựa chọn đó. Đúng không bạn?. Vậy nên nếu bạn không hiểu kỹ mà cứ dùng bừa các lisp bạn sưu tầm thì hãy coi chừng, lợi bất cập hại đấy bạn ạ.

Qua theo dõi trên topic này, mình cũng thấy rằng đã đến lúc bạn cần học tập một cách nghiêm túc về lisp nếu như công việc của bạn cần tới nhiều lisp như vậy.

Việc viết cho bạn không phải quá khó đối với nhiều thành viên ở đây, song nếu để bạn hình thành cái cách suy nghĩ ỷ lại vào người khác mãi mà không chịu tự mình nghiên cứu, học tập để ứng dụng thì sẽ là không đúng mất bạn ạ. Mục đích của diễn đàn là để giúp nhau cùng tiến bộ chứ không phải để lợi dụng lẫn nhau.

Thực tế mình nghĩ bạn cũng không phải là quá khó khăn khi học lisp vì bằng chứng là bạn vẫn thường xuyên lên mạng được để vào diễn đàn cơ mà. Hãy bắt đầu học ngay và thử viết các lisp theo những yêu cầu cụ thể của bạn. Có thể bạn sẽ sai hay gặp khó khăn ở một vấn đề nào đó, khi ấy hãy post lên và mọi người sẽ giúp vì mọi ngưòi hiểu rằng bạn đang cố gắng để hoàn thiện công việc của bạn. Còn như bạn chỉ có post lên yêu cầu mọi người hãy giúp đỡ trong khi bản thân bạn thì chỉ ngồi chơi và đợi kết quả, không thấy có kết quả thì tỏ ra khó chịu, vậy có đúng không nhỉ?

Mình cũng là người chỉ mới vọc lisp thời gian gần đây, tuy chưa hiểu hết nó nhưng đã có thể cố gắng tự mình giải quyết những vấn đề cụ thể nho nhỏ của mình, chỉ khi bị tắc tị mới nhờ tới các bác cao thủ hơn gợi ý để giải quyết. Mỗi lần như vậy gỡ được mấy cái xương dăm mà sướng lắm bạn ạ.

Mong rằng bạn sẽ cố gắng để có thể có được những cái sướng như mình chứ không phải nhăn nhó khó chịu vì chả có ai giúp.

Chúc bạn vui và thành công trong cuộc số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
Khách
Chủ đề này bây giờ đã bị đóng lại để trả lời thêm.

×