Đến nội dung


Hình ảnh
* * * - - 2 Bình chọn

Viết Lisp theo yêu cầu


  • Chủ đề bị khóa Chủ đề bị khóa
2780 replies to this topic

#1281 Tue_NV

Tue_NV

    KS Võ Quang Tuệ

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

Đã gửi 11 November 2008 - 08:42 PM

Chào mọi người!
Tôi mới tìm hiểu về lisp. Mong mọi người giúp đỡ. Tôi viết một chương trình nhỏ nhưng chạy không được không biết lỗi chỗ nào. Chỉ dùm tôi với:
(defun c:dt()
(command "cicrle") Sai lệnh
(setq pt (getpoint "cho tam duong tron:"))
(setq D (getdist "cho ban kinh duong tron:")
(princ)
)

Thứ nhát là : Bạn viết tên lệnh bị sai. Lệnh vẽ đường tròn là circle chứ không phải là "cicrle")
Thứ hai ở dòng đậm : (setq D (getdist "cho ban kinh duong tron:") bạn thiếu dấu đóng ngoặc , phải viết là :
(setq D (getdist "cho ban kinh duong tron:"))
Thứ ba là dòng thực hiện lệnh : Command bạn phải đưa xuống dưới cùng :
Mình viết lại như sau :
Tên lệnh là : dt
(defun c:dt ()
(prompt "Ve duong tron :")
(setq pt (getpoint "cho tam duong tron:")) (terpri)
(setq D (getdist "cho ban kinh duong tron:"))
(command "circle" pt D)
)
.
Bạn có thắc mắc gì hỏi nhé.
  • 0

#1282 doconlua

doconlua

    biết zoom

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

Đã gửi 11 November 2008 - 08:55 PM

(defun C:DT (/ DT D)
(prompt "(\n ve duong tron nhap tam pt va duong kinh D ...")
(setq pt (getpoint "\n cho tam duong tron:"))
(setq D (getdist "\n cho ban kinh duong tron:"))
(command ".circle" PT D)
(prompt "\n Donne.\n")
(princ)
)
ĐÂY NÀY BẠN!
  • 0

#1283 nhunhang

nhunhang

    Chưa sử dụng CAD

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

Đã gửi 12 November 2008 - 06:11 PM

Chào mọi người.
Trước hết tôi xin cảm ơn mọi người vì đã chỉ cho tôi những chỗ mà tôi còn bị thiếu. Quả thật tôi cũng mới biết lisp và thứ hai nữa là về kiến thức ngôn ngữ lập trình tôi cũng chưa nẵm vững lắm. Kính mong được các anh, chị và các bạn trong diễn đàn giúp đỡ.
Thankyou very much!
  • 0

#1284 ssg

ssg

    biết lệnh adcenter

  • Vip
  • PipPipPipPipPipPipPip
  • 1228 Bài viết
Điểm đánh giá: 1087 (rất tốt)

Đã gửi 14 November 2008 - 01:36 PM

Chào mọi người.
Trước hết tôi xin cảm ơn mọi người vì đã chỉ cho tôi những chỗ mà tôi còn bị thiếu. Quả thật tôi cũng mới biết lisp và thứ hai nữa là về kiến thức ngôn ngữ lập trình tôi cũng chưa nẵm vững lắm. Kính mong được các anh, chị và các bạn trong diễn đàn giúp đỡ.
Thankyou very much!

Ssg có vài góp ý với bạn:

1. Trước hết, bạn phải có 1 cuốn sách về Lisp, đọc và làm theo các bài ví dụ cơ bản của họ. Qua đó, chiêm nghiệm lại phần lý thuyết đã đọc được.

2. Tên lệnh lisp bạn có thể đặt tuỳ ý, nhưng không nên trùng tên với 1 trong các lệnh tắt tiêu chuẩn của AutoCAD. Bạn dùng tên "dt" trùng với lệnh tắt "dtext". Sau khi bạn load lisp, lệnh tắt "dt" cho "dtext" sẽ không còn hiệu lực.

3. Để có được cùng kết quả như nhau, có nhiều cách viết chương trình khác nhau, tuỳ thói quen và phong cách riêng từng người. Tuy nhiên, điều quan trọng trước tiên là phải đúng cú pháp. Chương trình rất đơn giản và ngắn nhưng bạn sai cú pháp hơi bị nhiều!

4. Bạn tham khảo vài đoạn code sau. Chúng đều cho kết quả như nhau (có hơi khác một chút ở VDT3):
;;;-------------------------------------------------
(defun C:VDT1( / p r)
(setq
p (getpoint "\nTam duong tron:")
r (getdist p "\nBan kinh:")
)
(command "circle" p r)
)
;;;-------------------------------------------------
(defun C:VDT2( / p)
(command "circle"
(setq p (getpoint "\nTam duong tron:"))
(getdist p "\nBan kinh:")
)
)
;;;-------------------------------------------------
(defun C:VDT3()
(command "circle" (getpoint "\nTam duong tron:") (getreal "\nBan kinh:"))
)
;;;-------------------------------------------------


5. Tham khảo thêm ở đây:
http://www.cadviet.c...o...t=0&start=0

và nhiều chỗ khác nữa trên diễn đàn...
  • 0

#1285 loiphong

loiphong

    biết vẽ circle

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

Đã gửi 14 November 2008 - 01:56 PM

Chào mọi người!
Có thể viết dùm em lisp với ứng dụng như sau:
1.
- Trong bản vẽ (thiết kế khuôn) có chèn các block cùng tên (vd:epin). Em cần lấy tọa độ của các block này so voi gốc tọa độ chuẩn(tâm block này là tâm của nhiều đường tròn đồng tâm(epin), cũng là điểm chèn của block) sau đó in ra vị trí được chọn trên màn hình.
- Khi thực hiện lệnh thì sử dụng cửa sổ window(kéo chuột), tọa độ được chọn sẽ ưu tiên theo thứ tự từ trái qua phải và từ trên xuống dưới. Ở tâm block được chọn sẽ lần lượt có các text theo thứ tự la :E1,E2.... đến hết..
- Khi thực hiên lệnh sẽ cho chọn tên của Block(cac block nằm trong vùng cửa sổ được chọn có cùng tên sẽ đươc lấy tọa độ)
- Chiều cao text 3.
2.Thêm một lisp nữa:
- Có tác dụng ấn các Block cùng tên và cho hiện lại các block đó( khi chọn vào 1 block và hide ,các block cung tên sẽ ẩn. Sẽ hiện lại khi Unhide).
  • 0

#1286 ph168xd

ph168xd

    biết lệnh adcenter

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

Đã gửi 14 November 2008 - 10:15 PM

Bạn xem lisp CVT ở ngay chính trong chủ đề này: Viết lisp theo yêu cầu

Mục này quá nhiều bài viết rồi, nên nhiều người trong chúng ta khó theo dõi. Sắp tới đây có lẽ phải chia nhỏ topic này thành các topic con theo chủ đề cho dễ theo dõi. Nhớ ngày trước, có thành viên hiến 'tối kiến' là nên gộp các lệnh của autocad vào một topic cho dễ đọc, dễ tìm. May mà quản trị đủ thông mình, chứ không thì ốm đòn vì nếu làm theo thì toàn các topic 'khủng' và khó theo dõi như topic này.


CVT ko làm đc điều đó Bác Hoành ạh.
Em có ý này bác xem thế nào nhé.
Vẽ pline có độ dày 220.
Vẽ Mline có độ dày đó tại các đỉnh của Pl vừa vẽ.
explode đối tg vừa tạo
và xoá Pl ban đầu.

Em chỉ hiểu nôm na quá trình, chảng biết có thiết thựcko nữa.
Mong các Bác chỉ giáo
  • 0

#1287 Snowman

Snowman

    biết lệnh mirror

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

Đã gửi 14 November 2008 - 10:55 PM

CVT ko làm đc điều đó Bác Hoành ạh.
Em có ý này bác xem thế nào nhé.
Vẽ pline có độ dày 220.
Vẽ Mline có độ dày đó tại các đỉnh của Pl vừa vẽ.
explode đối tg vừa tạo
và xoá Pl ban đầu.

Em chỉ hiểu nôm na quá trình, chảng biết có thiết thựcko nữa.
Mong các Bác chỉ giáo

Gửi bạn đoạn lisp multi offset (Off set một đường tim thành các đường đối xứng với khoảng cách tùy chọn) có thể sửa một chút để dùng cho việc của bạn, nhưng tôi nghĩ nên giữ nguyên để fục vụ cho nhiều mục đích khác nhau chẳng hạn vẽ mặt bằng đường GT, vẽ kênh mương ...
Lệnh là QO, lần lượt nhập các khoảng cách offset theo thứ tự (khoảng cách lẻ) rồi chỉ điểm ko thuộc pline.
;;; Quick offset 
(defun C:Qo (/ Offobj Objbase Pbase Ple Pri) (setq osmode (getvar "osmode"))
(setvar "CMDecho" 0)

(initget (+ 2 4))
(if (not (setq Num_line
(getint "\nSè ®­êng cÇn offset mçi bªn (Enter for 1): "
)
)
)
(setq Num_line 1)
)


(setq cter 1
Dislist '()
)
(repeat Num_line
(initget (+ 1 2 4))
(setq Dis (getreal (strcat "\nNhËp kho¶ng c¸ch offset thø "
(itoa cter)
"[Khoang cach la]: "
)
)
Cter (1+ cter)
Dislist (append Dislist (list Dis))
)
)

(Princ "\nChän ®èi t­îng cÇn offset")
(while (setq Offobj (entsel))
(setq
Objbase (car Offobj)
Poff (getpoint "\nChØ ®iÓm ngoµi ®èi t­îng")
Objvba (vlax-ename->vla-object Objbase)
Pbase (vlax-curve-getClosestPointTo Objvba Poff)
)

(setvar "OSMODE" 0)
(command "ucs" "w")
(setq cter 0
Dist1 0
)
(repeat Num_line
(setq Dist (nth cter Dislist)
Dist1 (+ Dist1 Dist)
Cter (1+ cter)
)
(command "_offset" Dist1 Objbase Poff "")
(setq ang (+ Pi (angle Pbase Poff))
Poff1 (polar Pbase ang Dist1)
)
(command "_offset" Dist1 Objbase Poff1 "")
)
(command "ucs" "p")
(Princ "\nChän ®èi t­îng cÇn offset tiÕp theo")
)

(setvar "OSMODE" OSmode)
(setvar "CMDecho" 1)
(princ)
)

  • 0

. - ' * ' - .. - ... "Sống trong đời sống cần có một tấm lòng..." . - ' * ' - .. -
-----------------------------------------------------------------------------------

Hình đã gửi Hình đã gửi


#1288 ph168xd

ph168xd

    biết lệnh adcenter

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

Đã gửi 15 November 2008 - 08:28 AM

Add lish báo lỗi Bác ạh. Command: ; error: malformed string on input
Bác xem lại giúp em!
  • 0

#1289 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 15 November 2008 - 10:34 AM

Add lish báo lỗi Bác ạh. Command: ; error: malformed string on input
Bác xem lại giúp em!

Mình mới viết xong bạn thừ xem sao. Lệnh OT chọn vùng nó sẽ lọc lấy các pline có độ rộng offset ra mổi bên bằng 1/2 độ rộng. Explode ra thành các đối tượng rời, xóa pline cũ đi. Líp làm được nhiều đối tượng cùng lúc, đúng với cả pline có cung tròn.
Bạn xem muốn thay đổi layer các đối tượng mới hay muốn giử lại đồi tượng cũ thì phản hồi mình sửa luôn 1 lượt.

(defun C:OT ( )
(princ "\nPHAM QUOC DUY Binh Son - Quang ngai")
(Princ "\nHay chon doi tuong :")
(setq SS (ssget '((0 . "LWPOLYLINE"))))

(setq i 0)
(setq N (sslength ss))
(while (< i N)
(setq TEXTENT (ssname SS i))

(setq DTMs (entget textent))
(setq DORONG (cdr (assoc 40 DTMs)))
(if (/= DORONG 0) (PROGN
(setq DIEMDAU (cdr (assoc 10 DTMs)))
(setq diemo1 (polar DIEMDAU (- 0 (/ pi 2)) 100))
(setq diemo2 (polar DIEMDAU (/ pi 2) 100))

(command ".OFFSET" (/ DORONG 2) textent diemo2 "")
(command ".EXPLODE" "last" "")
(command ".OFFSET" (/ DORONG 2) textent diemo1 "")
(command ".EXPLODE" "last" "")
(command ".ERASE" textent "")
)
)
(setq i (1+ i))

)
(setvar "MODEMACRO" "**CHUC BAN LAM VIEC HIEU QUA** PHAM QUOC DUY - BINH SON - QUANG NGAI")
(Princ)
)

  • 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


#1290 ph168xd

ph168xd

    biết lệnh adcenter

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

Đã gửi 15 November 2008 - 12:14 PM

Duy kiểm tra lại giúp mình. Lish kolàm đc điều đó
Chọn Pl, ok, thì có phần chúng phá ra thành 1 line nhưng ko offset.
Có phần thì vẫn còn nguyên độ dày của pl đó
  • 0

#1291 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 15 November 2008 - 12:37 PM

Duy kiểm tra lại giúp mình. Lish kolàm đc điều đó
Chọn Pl, ok, thì có phần chúng phá ra thành 1 line nhưng ko offset.
Có phần thì vẫn còn nguyên độ dày của pl đó

lisp của Snowman hoạt động tốt mà!
  • 0

#1292 ph168xd

ph168xd

    biết lệnh adcenter

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

Đã gửi 15 November 2008 - 06:52 PM

Em đã thử đi thử lai vài lần rồi. Những rõ ràng là đang có vấn đề.
http://www.cadviet.c...Drawing1_16.dwg
Đây là kết qua khi em thực hiện lệnh Ot
Anh xem lại giúp em
  • 0

#1293 Sony2007

Sony2007

    biết lệnh copy

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

Đã gửi 16 November 2008 - 11:43 AM

Cám ơn Snowman rất nhiều.
Anh có thể giúp tôi thêm 1 vấn đề này được không. Giá sử tôi có các text nằm quá sát nhau (gần trùng nhau), khi in sẽ không đọc được. Nếu mình move từng text ra để khi in đọc được sẽ mất rất nhiều thời gian. Có cách nào khi mình chọn các text, lệnh thực hiện sẽ giãn các text ra đều nhau theo hàng, cột tùy ý không ? Tâm của các text do user chọn. Cám ơn Snowman trước.

Có ai giúp tôi vấn đề này nhỉ. A Snowman đâu rồi ...
  • 0

#1294 Snowman

Snowman

    biết lệnh mirror

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

Đã gửi 16 November 2008 - 02:35 PM

Có ai giúp tôi vấn đề này nhỉ. A Snowman đâu rồi ...

Bạn hãy vận dụng những lệnh CAD có sẵn đi. Scale tất cả nhóm text lên theo khoảng cách các dòng mong muốn rồi đổi lại height các text bằng height ban đầu.
Trên diễn đàn cũng có lisp dãn dòng text rồi (của Nataca) tôi ko nhớ ở đâu, bạn chịu khó tìm vậy.
  • 0

. - ' * ' - .. - ... "Sống trong đời sống cần có một tấm lòng..." . - ' * ' - .. -
-----------------------------------------------------------------------------------

Hình đã gửi Hình đã gửi


#1295 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 17 November 2008 - 07:14 AM

Duy kiểm tra lại giúp mình. Lish kolàm đc điều đó
Chọn Pl, ok, thì có phần chúng phá ra thành 1 line nhưng ko offset.
Có phần thì vẫn còn nguyên độ dày của pl đó

Bạn xem lại thế nào chứ mình thử rồi. (lưu ý bạn tắt chế độ bắt điểm đi nhé)
-Cái mà bạn thấy phá ra thành line thì thực chất nó là 2 line trong đó. Lổi này hình như bị với pline nằm ngang day dọc chi đó. Mình ngại viết offset trong lisp là vì vậy do rất khó xác định điểm chỉ hướng offset nằm ngoài pline.
-Còn phần giữ nguyên độ dày thì mình cũng không hiểu là lổi gì.
@Bạn thử với các pline xiên xem sao nếu được thì nhờ mọi người giúp cách xác định điểm chỉ hường offset. Cách mình làm hiện nay như sau:
+Lấy toạ độ điểm đầu của pline. Dùng hàm polar xác định 1 điểm 2 bên theo hướng vuông góc nên trường hợp pline nằm ngang hay dọc 2 điểm này bị trùng trên pline nên ko offset ra 2 bêb được.
  • 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


#1296 nguyenkhoadung98

nguyenkhoadung98

    biết vẽ pline

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

Đã gửi 17 November 2008 - 11:30 AM

chào các bạn, mong các bạn jup đỡ. mình cần 1 lisp có thể làm như sau : mình hay phải sửa bản vẽ của dân kiến trúc, họ hay vẽ mặt cắt với cỡ chữ rất to.khi mình cho nhỏ lại thì các chữ cách nhau rất xa (6 6) và phải chỉnh cho gan lại (6 6) (có rất nhiều mặt cắt => sửa rất nhiều lần ) các bạn có thể cho mình 1 lisp mỗi khi click vào mặt cắt ( ví dụ 6 6 ) nó sẽ tự cho gần lại với khoảng cách do mình chọn đuợc kô nếu làm được với muti nữa thì tốt wa, cảm ơn các bạn rất nhiều. hình ảnh minh hoạ
http://www.cadviet.c...untitled_85.jpg
  • 0

#1297 nataca

nataca

    biết lệnh adcenter

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

Đã gửi 17 November 2008 - 01:34 PM

chào các bạn, mong các bạn jup đỡ. mình cần 1 lisp có thể làm như sau : mình hay phải sửa bản vẽ của dân kiến trúc, họ hay vẽ mặt cắt với cỡ chữ rất to.khi mình cho nhỏ lại thì các chữ cách nhau rất xa (6 6) và phải chỉnh cho gan lại (6 6) (có rất nhiều mặt cắt => sửa rất nhiều lần ) các bạn có thể cho mình 1 lisp mỗi khi click vào mặt cắt ( ví dụ 6 6 ) nó sẽ tự cho gần lại với khoảng cách do mình chọn đuợc kô nếu làm được với muti nữa thì tốt wa, cảm ơn các bạn rất nhiều. hình ảnh minh hoạ
http://www.cadviet.c...untitled_85.jpg

Cái này do căn lề của chữ thôi. Dùng lệnh Tjust để chuyển một chữ căn lề trái, một chữ căn lề phải ( mà không bị thay đổi vị trí của text). Sau đó đổi chiều cao chữ bình thường.
  • 0

#1298 nguyenkhoadung98

nguyenkhoadung98

    biết vẽ pline

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

Đã gửi 17 November 2008 - 02:21 PM

Cái này do căn lề của chữ thôi. Dùng lệnh Tjust để chuyển một chữ căn lề trái, một chữ căn lề phải ( mà không bị thay đổi vị trí của text). Sau đó đổi chiều cao chữ bình thường.

mình thử rồi mà kô đc,sau khi cho chữ nhỏ đi thì còn phải cho 2 chữ gần lại nhau chứ kô chỉ là cùng vị trí như ban đầu đâu :leluoi:(
  • 0

#1299 nguyenthanhtan99spkt

nguyenthanhtan99spkt

    Chưa sử dụng CAD

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

Đã gửi 17 November 2008 - 06:15 PM

Chào tất cả các thành viên trong diễn đàn. Mình là thành viên mới nóng hỏi luôn. Mình thấy diễn đàn rất hay và hiệu quả
Mình cần có 1 đoạn lisp có yêu cầu thế này: vẽ chi tiết 3d bất kỳ sau đó xuất sang 2d và ghi kich thước cho 3 hình chiếu
Và lập 1 lisp sẵn vẽ 1 hình dạng tấm trên tấm có khoan lỗ số lỗ do mình qui định chỉ când nhập vài thông số là nó tự động sẽ vẽ cho mình 3 hình chiếu và chi kich thước theo đúng tiêu chuẩn việt nam (2D)
  • 0

#1300 nguyenthanhtan99spkt

nguyenthanhtan99spkt

    Chưa sử dụng CAD

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

Đã gửi 17 November 2008 - 06:24 PM

Các bác ơi mình học và làm vơi autoCAD lâu lắm rồi nhưng mình mới làm quen với lisp nên mình thấy lisp khó kiểmt ra lỗi quá các bác đi trước có kinh nghiệm chỉ mình cách sửa lỗi nhanh nhất với xin cảm ơn các bác rất nhiều
  • 0