Info | File |
Tác giả: phamngoctukts
Bài viết gốc: 139530
Tên lệnh: tag | |
Tác giả: hanam1210
Bài viết gốc: 173673
Tên lệnh: lo |
lisp vẽ line !
Cái lisp này em viết nhằm mục đích vẽ ra 1 line trong các trường hợp riêng phục vụ cho vẽ và tính taluy san nền.
Cụ thể theo yêu cầu:
+ Lisp lấy giá trị từ text có sẵn ( giá trị là A) và vẽ ra line theo cách pcik điểm P1 và P2 , nó sẽ vẽ ra đoạn P1P2 thuộc layer GRID_TL có màu 3 và chiều dài đoạn P1P2 =kc được tính trong các trường hợp sau:
TH1: nếu A< -7, kc= A*Kđào +( phần... >> Cái lisp này em viết nhằm mục đích vẽ ra 1 line trong các trường hợp riêng phục vụ cho vẽ và tính taluy san nền.
Cụ thể theo yêu cầu:
+ Lisp lấy giá trị từ text có sẵn ( giá trị là A) và vẽ ra line theo cách pcik điểm P1 và P2 , nó sẽ vẽ ra đoạn P1P2 thuộc layer GRID_TL có màu 3 và chiều dài đoạn P1P2 =kc được tính trong các trường hợp sau:
TH1: nếu A< -7, kc= A*Kđào +( phần nguyên của A/7 )*2
TH2: nếu -7 < A < 0, kc= A*Kđào
TH3: nếu 0<A< 7, kc= A*1.5
TH4: nếuA >7, kc= A*1.5 +( phần nguyên của A/5 )*2
Dưới đây là phần code mà e đã loay hoay viết. Đợt trước nó chạy được. Nhưng đợt này bị lỗi mất trường hợp -7< A <7 không hiểu vì sao. Các anh trên diễn đàn hoàn thiện hoặc viết mới giúp em để nó không bị lỗi nữa ạ. EM xin cảm ơn !
Hệ số Kđào trong lisp của em viết để mặc định bằng 1, Các anh bổ sung nó giúp em với ạ, K đào do người dùng chỉ cần nhập vào một lần trong cả bản vẽ đó trong mỗi lần mở lên
.Giống đoạn code này sao ý:
(if (= Ty_le nil) (progn
(setq Ty_le (getreal "\n Kđào"))
(setq He_so (/ 1 Ty_le))
(setq He_so2 (* He_so He_so))
)
)
(defun c:lo (/ kc kc1 ot k1)
(command "layer" "N" "GRID_TL" "S" "GRID_TL" "color" 3 "" "")
(repeat 10000
(setq p1 (getpoint "\n Pick diem: "))
(setq p2 (getpoint "\n Pick diem: "))
(setq kc (entget (car (entsel "\n Chenh cao: "))))
(setq otext (assoc 1 kc))
(setq ot (cdr otext))
(setq ot (read (substr ot 1)))
(setq g (angle p1 p2))
(if (< ot -7)
(progn
(setq KC1 (* (abs ot) 1))
(setq k1 (* 2 (fix (/ (abs ot) 5))))
(setq KC1 (+ k1 KC1))
(setq p3 (polar P1 G KC1))
(command "line" p1 p3 "")
)
)
(if (and (< ot 0) (> ot -7))
(progn
(setq KC1 (* (abs ot) 1))
(setq k1 (* 2 (fix (/ (abs ot) 5))))
(setq KC1 (+ k1 KC1))
(setq p3 (polar P1 G KC1))
(command "line" p1 p3 "")
)
)
(if (and (> ot 0) (< ot 7))
(progn
(setq kc1 (* ot 1.5))
(setq p3 (polar P1 G KC1))
(command "line" p1 p3 "")
)
)
(if (> ot 7)
(progn
(setq KC1 (* (abs ot) 1))
(setq k1 (* 2 (fix (/ (abs ot) 5))))
(setq KC1 (+ k1 KC1))
(setq p3 (polar P1 G KC1))
(command "line" p1 p3 "")
)
)
(princ)
)
)
<<
|
Tác giả: Doan Van Ha
Bài viết gốc: 173682
Tên lệnh: lo |
lisp vẽ line !
Nói chung, Lisp của bạn còn nhiều điều phải bàn tới:
1). Nếu có tới 4 trường hợp như thế thì nên dùng hàm cond chứ không nên dùng hàm if.
2). Các trường hợp bạn xét là chưa đủ, như khi dấu "=" xãy ra thì sao.
3). Không nên dùng hàm repeat mà nên dùng while.
4). Thiếu đặt osnap nên bạn bị lỗi...
Nhưng mới viết và mày mò đến tận 3h sáng thì bạn sẽ tiến... >>
Nói chung, Lisp của bạn còn nhiều điều phải bàn tới:
1). Nếu có tới 4 trường hợp như thế thì nên dùng hàm cond chứ không nên dùng hàm if.
2). Các trường hợp bạn xét là chưa đủ, như khi dấu "=" xãy ra thì sao.
3). Không nên dùng hàm repeat mà nên dùng while.
4). Thiếu đặt osnap nên bạn bị lỗi...
Nhưng mới viết và mày mò đến tận 3h sáng thì bạn sẽ tiến triển không lâu nữa.
Tôi tạm sửa cho bạn như dưới đây. Nếu có gì chưa ưng ý thì post lên nhé.
Thân thương!
<<
|
Tác giả: ketxu
Bài viết gốc: 173774
Tên lệnh: inn | |
Tác giả: phamthanhbinh
Bài viết gốc: 117792
Tên lệnh: gtxt |
Viết lisp theo yêu cầu [phần 2]
Chào bạn Truongthanh,
Bạn dùng thử lisp này coi sao. Do mình mới viết vội nên chưa hoàn chỉnh lắm, bạn dùng thử và cho ý kiến để mình hoàn chỉnh lại.
Chúc bạn vui.
|
Filename: 117792_gtxt.lsp
|
|
Tác giả: phamthanhbinh
Bài viết gốc: 118094
Tên lệnh: dtm | |
Tác giả: phamngoctukts
Bài viết gốc: 118360
Tên lệnh: nline |
Viết lisp theo yêu cầu [phần 2]
Mình mới viết được cho bạn như thế này. Lisp chạy hơi chậm bạn chịu khó đợi nhé. Bạn test thử rồi cho ý kiến để bổ xung. Do mình không có thời gian nên chưa nghiên cứu sâu được.
|
Filename: 118360_nline.lsp
|
|
Tác giả: phamthanhbinh
Bài viết gốc: 118361
Tên lệnh: tkqh |
Viết lisp theo yêu cầu [phần 2]
Chào bạn phongthien,
Bạn dùng thử cái này coi, có gì chưa ổn hãy post lên để mình xem lại.
Chúc bạn vui.
|
Filename: 118361_tkqh.lsp
|
|
Tác giả: phamthanhbinh
Bài viết gốc: 118987
Tên lệnh: mt2t |
Viết lisp theo yêu cầu [phần 2]
Hề hề hề,
Ây da, khổ quá, lần mò mãi mới nghĩ ra được cái củ chuối này. Các bạn xài thử và cho ý kiến để mình hoàn thiện nó nhé.
Vấn đề khó khăn nhất ở đây là cái font tiếng Việt của các bạn. Trong Mtext thì nó cho ghi cả các mã font, nhưng sang Text thì nó chả hiểu cái mã font là chi. Vì thế khi nổ thành text thì nó chỉ còn là các ký tự. Mình chịu chết không mò ra... >>
Hề hề hề,
Ây da, khổ quá, lần mò mãi mới nghĩ ra được cái củ chuối này. Các bạn xài thử và cho ý kiến để mình hoàn thiện nó nhé.
Vấn đề khó khăn nhất ở đây là cái font tiếng Việt của các bạn. Trong Mtext thì nó cho ghi cả các mã font, nhưng sang Text thì nó chả hiểu cái mã font là chi. Vì thế khi nổ thành text thì nó chỉ còn là các ký tự. Mình chịu chết không mò ra được cái quy luật để chuyển các ký tự trong mã text tiếng Việt. Cũng may là trên bản vẽ của bạn lacvanhoa gửi có text tiếng việt cùng một style với mtext. Vì thế mình làm kiểu củ chuối là lấy các mã text trong text nhập vào mã text trong mtext bị nổ ra thế là được. Tuy nhiên vì bạn lacvanhoa chỉ gửi có mỗi cái text đã chuyễn là nguyễn kim hường nên mình chỉ biết có hai mã là mã của chữ ễ và chữ ườ, còn các mã khác thì tịt ngóm nên cái lisp này mới chỉ thành công với các trường hợp text có chứa chữ ễ và chữ ườ thôi. Các trường hợp khác thì các bạn gửi mình các text khác mình mới làm tiếp được. Cái kiểu này quả là rất củ chuối vì trong tiếng việt có bao nhiêu là trường hợp bỏ dấu, và như vậy thì phải có đủ các mã ấy mới ăn thua. Tuy nhiên bí quá thì phải cố rặn ra vậy nên mình mới nghĩ được đến đây. Có ai khác có cách hay hơn thì tốt quá. Mình cứ gửi lên để các bạn tham khảo và xài tạm cho đỡ sốt ruột vậy. Hề hề hề.....
PS: Về vị trí của các text sau khi chạy lisp nó chưa thẳng hàng là do cái việc căn text của thằng Mtext ấy mà. Xử lý cho nó thẳng lại không quá khó nhưng do chưa biết các Mtext ban đầu có thống nhất kiểu căn text không nên mình chưa chỉnh sửa. Mặt khác mình cũng chưa xét tới trường hợp các Mtext nằm xiên khoai hay nằm đứng. Điều này cũng có thể giải quyết được nếu như các bạn chấp nhận xơi cái củ chuối của mình. Hề hề hề. Đây mới chỉ là cái ý tưởng giải quyết vấn đề chứ chưa phải cái kết quả cuối cùng, mong các bạn chớ giận cái củ chuối này của mình . Ý tưởng chưa hay, xong mình cũng chưa tìm ra giải pháp nào hữu hiệu hơn, Mong các bạn thông cảm.
Khi chạy thử, hãy chọn các mtext có chữ ễ và chữ ườ chạy trước để kiểm tra nhé. Mtext nằm kiểu chi nó cũng chạy ra text nằm ngang phè phè, đừng có cười nhé..... <<
|
Filename: 118987_mt2t.lsp
|
|
Tác giả: Tue_NV
Bài viết gốc: 62488
Tên lệnh: doir |
Thay đổi bán kính nhiều circle
Sử dụng Quick Select hoặc filter và kết hợp Ctrol + 1 -> Trong nhãn Geometry -> Chỉnh Radius
Hai lệnh Quick Select và filter bạn có thể tìm trên diễn đàn. Cái này đã có nói rồi, nhiều lắm
Còn bạn muốn sử dụng Lisp thì đây :
|
Tác giả: ketxu
Bài viết gốc: 139074
Tên lệnh: me3 |
Measure nhiều đối tượng
Bạn hãy kích nút thank động viên bạn ấy kèm theo lời nói
Mình cũng góp cái lisp vừa nãy thảo, không đc chi tiết như bạn HHVD viết
|
Tác giả: Doan Van Ha
Bài viết gốc: 173821
Tên lệnh: lo |
lisp vẽ line !
Đây là lisp viết theo diễn giải, không viết theo lisp bạn ấy post lên (vì mâu thuẩn nhau), chỉ có 1 thắc mắc: cái "A" để tính kc là A hay (abs A) nên tạm lấy (abs A) vậy, nếu không đúng thì sửa lại vậy.
|
Tác giả: boy8x
Bài viết gốc: 173948
Tên lệnh: r |
Nhờ các anh trên diễn đàn sửa lisp tính diện tích !
Em có cái Lisp pick diện tích trên cad và ghi kết quả vào text sẵn có, Nhưng do nhu cầu công việc. Tại bài toán cụ thể này thì lại cần cộng thêm giá trị diện tích vừa pick được vào text sẵn có. Các anh chỉnh sửa giúp em được không ạ ? em xin chân thành cảm ơn !
(defun c:r()
(if (= Ty_le nil) (progn
(setq Ty_le (getreal "\n Ty le ban ve 1:X , X=?:"))
(setq He_so (/ 1... >> Em có cái Lisp pick diện tích trên cad và ghi kết quả vào text sẵn có, Nhưng do nhu cầu công việc. Tại bài toán cụ thể này thì lại cần cộng thêm giá trị diện tích vừa pick được vào text sẵn có. Các anh chỉnh sửa giúp em được không ạ ? em xin chân thành cảm ơn !
(defun c:r()
(if (= Ty_le nil) (progn
(setq Ty_le (getreal "\n Ty le ban ve 1:X , X=?:"))
(setq He_so (/ 1 Ty_le))
(setq He_so2 (* He_so He_so))
)
)
(setq dtl 0)
(setq ss (ssadd))
(setq oslast (getvar "OSMODE"))
(command "osnap" "")
(print)
(print)
(setq pt1 (getpoint "\nPick internal point : "))
(while (/= pt1 nil)
(command "-boundary" pt1 "")
(setq et (entlast))
(ssadd et ss)
(command "area" "e" "last")
(command "dimzin" "0" "")
(setq vsize ( /(getvar "VIEWSIZE") 300 ))
(command "hatch" "ANSI31" vsize "0" "last" "")
(setq et (entlast))
(ssadd et ss)
(setq dtcon (getvar "AREA"))
(setq dtl (+ dtcon dtl))
(print)
(print)
(setq pt1 (getpoint "\nPick internal point : "))
)
(command "setvar" "OSMODE" oslast)
(command "erase" ss "")
(setq ss nil)
(command "redraw")
(setq dtl (/ (/ dtl He_so2) 1))
(prompt (strcat "\nDien tich = " (rtos dtl 2 2)))
(setq en (car (entsel "\nSelect text : ")))
(command "_.change" en "" "P" "C" "6" "")
(setq elst (entget en))
(setq elst (subst (cons 1 (strcat " " (rtos dtl 2 2))) (assoc 1 elst) elst))
(entmod elst)
);defun
<<
|
Tác giả: ndtnv
Bài viết gốc: 72055
Tên lệnh: mplota |
Với MPLot
MPlot: In hàng loạt bản vẽ trong cửa sổ hình chữ nhật
Dùng để in r hàng, c cột bản vẽ kích thước như nhau. Bản đầu tiên từ vị trí x0, y0
Kích thước mỗi cửa sổ rộng w, cao h. Khoảng cách các cửa sổ theo phương x là dw, phương y là dh
Hoặc dùng kiểu load trực tiếp code từ cửa sổ lisp
(MPlot 2 3 0 0 42000.0 59400.0 42000.0 59400.0)
|
Filename: 72055_mplota.lsp
|
|
Tác giả: Doan Van Ha
Bài viết gốc: 173927
Tên lệnh: lo | |
Tác giả: Nguyen Hoanh
Bài viết gốc: 4814
Tên lệnh: lokhoan |
lisp vẽ lỗ khoan
sorry!
tôi nhầm!
Đoạn lisp trên cần sửa lại một chút.
Mã lệnh (abs (- r1 r2)) cần phải sửa thành (- r1 r2) tức là bỏ hàm abs đi. Như vậy thì sẽ đúng trong mọi trường hợp.
Mã lệnh mới như sau:
|
Filename: 4814_lokhoan.lsp
|
|
Tác giả: thiep
Bài viết gốc: 69800
Tên lệnh: vbu |
Viết Lisp theo yêu cầu
Chào conghoan1003 và Tue_NV,
Thiep cũng có một thời gian làm việc cùng với Bảm đảm An toàn Hàng Hải II, nạo vét luồng SG - Vũng Tàu từ Tân Cảng đến Ghềnh Rái, Người ta nạo vét đến cots 8.2m sai số 0.3m (mốc cao độ Mũi Nai). Còn yêu cầu của Conghoan thi vét bùn theo bề mặt địa hình tự nhiên rồi offset xuống, lại không có sai số nạo vét!
Thôi thì cũng theo yêu cầu này, Thiep xin... >>
Chào conghoan1003 và Tue_NV,
Thiep cũng có một thời gian làm việc cùng với Bảm đảm An toàn Hàng Hải II, nạo vét luồng SG - Vũng Tàu từ Tân Cảng đến Ghềnh Rái, Người ta nạo vét đến cots 8.2m sai số 0.3m (mốc cao độ Mũi Nai). Còn yêu cầu của Conghoan thi vét bùn theo bề mặt địa hình tự nhiên rồi offset xuống, lại không có sai số nạo vét!
Thôi thì cũng theo yêu cầu này, Thiep xin gánh cho Tue một chút tạo ra lisp như ý muốn của CongHoan:
<<
|
Tác giả: Doan Van Ha
Bài viết gốc: 173233
Tên lệnh: sct | |
Tác giả: Nguyen Hoanh
Bài viết gốc: 4805
Tên lệnh: lokhoan |
lisp vẽ lỗ khoan
* Lisp của bạn chạy tốt, thuật toán sai.
Vì thế chịu, phải viết lại thôi.
* Đây là bài toán hình học không hề đơn giản. Mấu chốt bài toán là làm sao để vẽ được đường bao của nó. còn hai vòng tròn nhỏ bên trong thì chỉ là mắt muỗi thôi.
* tạm thời, đặt tên hình như sau:
http://img.photobucket.com/albums/v672/nguyenhoanh/vlkhoan.gif
* Ta phải xác định... >> * Lisp của bạn chạy tốt, thuật toán sai.
Vì thế chịu, phải viết lại thôi.
* Đây là bài toán hình học không hề đơn giản. Mấu chốt bài toán là làm sao để vẽ được đường bao của nó. còn hai vòng tròn nhỏ bên trong thì chỉ là mắt muỗi thôi.
* tạm thời, đặt tên hình như sau:
http://img.photobucket.com/albums/v672/nguyenhoanh/vlkhoan.gif
* Ta phải xác định được các toạ độ p3, p4, p5, p6, p7, p8 từ các toạ độ p1, p2 và hai bán kính r1 và r2. Để từ đó lần lượt vẽ các đoạn thẳng p3-p4, p5-p6 và các cung tròn p3-p7-p5 và p4-p8-p6.
* Để xác định điểm các điểm này, ta sẽ xác định thông qua khoảng cách tương đối với các điểm gốc p1, p2 và các góc tương đối giữa vectơ tạo bởi chúng và hai điểm này với trục x. Tóm lại, chúng ta sẽ xác định toạ độ của chúng thông qua các hệ toạ độ cực với tâm toạ độ lần lượt là p1 và p2.
* Để xác định p3:
- cần xác định góc p1,p3.
- Để xác định góc p1,p3 ta thấy góc này bằng góc tuyệt đối giữa p1, p2 cộng thêm góc p2-p1-p3 (tạm đặt tên là g).
- g=arctan(b/a).
- a = r1-r2.
- b = căn bậc hai của bình phương cạnh huyền l trừ đi bình phương của a.
- l là khoảng cách giữa p1 và p2
* Tương tự như vậy với các đỉnh còn lại.
* Và như vậy, mã lệnh lisp sẽ là:
<<
|
Filename: 4805_lokhoan.lsp
|
|
Tác giả: ketxu
Bài viết gốc: 127619
Tên lệnh: tcd |
Viết lisp theo yêu cầu [phần 2]
Nếu các text lúc nào cũng nằm ngang thì bạn dùng thử cái này nhé.Hy vọng bạn bỏ chút thời gian nghiên cứu lisp để tự xây dựng những đoạn code nhỏ nhỏ cho mình
P/S : Trong code bạn post, mình không thấy có phần nào can thiệp vào OSnap mode cả, có thể là do đoạn khác bạn à.Mà nếu lúc chọn... >>
Nếu các text lúc nào cũng nằm ngang thì bạn dùng thử cái này nhé.Hy vọng bạn bỏ chút thời gian nghiên cứu lisp để tự xây dựng những đoạn code nhỏ nhỏ cho mình
P/S : Trong code bạn post, mình không thấy có phần nào can thiệp vào OSnap mode cả, có thể là do đoạn khác bạn à.Mà nếu lúc chọn điểm mà tắt Ónap đi thì nghe cũng khó
<<
|