Đến nội dung


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

Hướng dẫn lập trình Lisp


  • Please log in to reply
497 replies to this topic

#201 viennv

viennv

    biết zoom

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

Đã gửi 05 April 2010 - 11:40 AM

Chào các bác! Em cũng đang tập tọe học lisp. Ngồi làm cái lisp vẽ hcn thôi mà khi load thì nó vẫn báo thiếu tham số. Tìm mãi không thấy chỗ sai. Mong các bác tìm giúp em với.

;;;------------------------------
(defun C:hcn(/a b p1 p2 p3 p4 oldos)
(Setq
a(getreal "\n chieu rong a= ")
b(getreal "\n chieu dai b= ")
p1(getpoint "\n diem chuan P1: ")
p2(polar p1 0.0 a)
p3(polar p2 (/ pi 2) B )
P4(polar p3 pi a)
)
(setq OldOs (getvar "osmode"))
(setvar "osmode" 0)
(command "line" p1 P2 p3 p4"c")
(setvar "osmode" OldOs)
(princ)
)
;;;------------------------------
  • 0

#202 Tue_NV

Tue_NV

    KS Võ Quang Tuệ

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

Đã gửi 05 April 2010 - 12:01 PM

Chào các bác! Em cũng đang tập tọe học lisp. Ngồi làm cái lisp vẽ hcn thôi mà khi load thì nó vẫn báo thiếu tham số. Tìm mãi không thấy chỗ sai. Mong các bác tìm giúp em với.

;;;------------------------------
(defun C:hcn(/a b p1 p2 p3 p4 oldos)
(Setq
a(getreal "\n chieu rong a= ")
b(getreal "\n chieu dai b= ")
p1(getpoint "\n diem chuan P1: ")
p2(polar p1 0.0 a)
p3(polar p2 (/ pi 2) B )
P4(polar p3 pi a)
)
(setq OldOs (getvar "osmode"))
(setvar "osmode" 0)
(command "line" p1 P2 p3 p4"c")
(setvar "osmode" OldOs)
(princ)
)
;;;------------------------------

Bạn sai chổ này :
(defun C:hcn(/a b p1 p2 p3 p4 oldos)
Phải có khoảng trắng giữa / và biến a -> Bạn viết liền nhau thành ra bị lỗi
-> Sửa lại là :
(defun C:hcn(/ a b p1 p2 p3 p4 oldos)
  • 0

#203 viennv

viennv

    biết zoom

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

Đã gửi 05 April 2010 - 01:40 PM

Bạn sai chổ này :
(defun C:hcn(/a b p1 p2 p3 p4 oldos)
Phải có khoảng trắng giữa / và biến a -> Bạn viết liền nhau thành ra bị lỗi
-> Sửa lại là :
(defun C:hcn(/ a b p1 p2 p3 p4 oldos)

Thanks bác nhiều nhé. Bác tinh thật đấy.
  • 0

#204 Phiphi-

Phiphi-

    biết lệnh minsert

  • Members
  • PipPipPipPipPipPip
  • 434 Bài viết
Điểm đánh giá: 175 (tàm tạm)

Đã gửi 05 April 2010 - 02:47 PM

Lệnh để vẽ Arc với Start End Angle dùng cho Lisp là gì vậy các Bác ơi? Thanks.
  • 0

#205 phamthanhbinh

phamthanhbinh

    biết lệnh adcenter

  • Moderator
  • PipPipPipPipPipPipPip
  • 6007 Bài viết
Điểm đánh giá: 3113 (tuyệt vời)

Đã gửi 05 April 2010 - 03:42 PM

Lệnh để vẽ Arc với Start End Angle dùng cho Lisp là gì vậy các Bác ơi? Thanks.

Chào bác Phiphi-,
Bác thử xài (command "arc" pause) xem sao bác nhé.
Chúc bác vui.
  • 1
Chúc các quý Anh trên diễn đàn luôn khỏe, đẻ thêm được nhiều thứ để mót.

#206 Phiphi-

Phiphi-

    biết lệnh minsert

  • Members
  • PipPipPipPipPipPip
  • 434 Bài viết
Điểm đánh giá: 175 (tàm tạm)

Đã gửi 05 April 2010 - 04:07 PM

Chào bác Phiphi-,
Bác thử xài (command "arc" pause) xem sao bác nhé.
Chúc bác vui.

Vẽ Arc trong AutoCAD có đến 9 kiểu khác nhau Bác ạ. PP cần vẽ là Arc kiểu Start End Angle với Angle=25 độ.
(command "arc" pause) thì không xác định đúng kiểu User muốn.
  • 0

#207 Tue_NV

Tue_NV

    KS Võ Quang Tuệ

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

Đã gửi 05 April 2010 - 04:22 PM

Vẽ Arc trong AutoCAD có đến 9 kiểu khác nhau Bác ạ. PP cần vẽ là Arc kiểu Start End Angle với Angle=25 độ.
(command "arc" pause) thì không xác định đúng kiểu User muốn.

Phiphi thử cái này :
(defun C:asea(/ p)
(vl-load-com)
(setq p (getpoint "\n Nhap diem dau :"))
(vl-cmdf "arc" p
"e"
(getpoint p "\n Nhap diem cuoi :")
"a" pause (princ "\n Nhap goc :"))
(princ)
)

  • 1

#208 ketui

ketui

    biết vẽ arc

  • Members
  • PipPip
  • 43 Bài viết
Điểm đánh giá: 12 (tàm tạm)

Đã gửi 05 April 2010 - 04:29 PM

Vẽ Arc trong AutoCAD có đến 9 kiểu khác nhau Bác ạ. PP cần vẽ là Arc kiểu Start End Angle với Angle=25 độ.
(command "arc" pause) thì không xác định đúng kiểu User muốn.

Thử xem:
(command "arc" pause "e" pause "a" pause)
  • 2

#209 phamthanhbinh

phamthanhbinh

    biết lệnh adcenter

  • Moderator
  • PipPipPipPipPipPipPip
  • 6007 Bài viết
Điểm đánh giá: 3113 (tuyệt vời)

Đã gửi 05 April 2010 - 04:54 PM

Vẽ Arc trong AutoCAD có đến 9 kiểu khác nhau Bác ạ. PP cần vẽ là Arc kiểu Start End Angle với Angle=25 độ.
(command "arc" pause) thì không xác định đúng kiểu User muốn.

Hề hề hề,
Cái này vẫn được chứ bác nhể, này nhé sau khi lisp nó pause rồi thì trên dòng nhắc command của CAD xuất hiện:
Specify start point of arc or (Center): Bác chỉ việc pick một phát để chọn điểm đầu của cung.
Khi đó trên dòng command lại xuất hiện: Specify second point of arc or (Center/End): Bác gõ vào e rối Enter
Và trên dòng command lại nhắc: Specify end point of arc: Bác pick một phát nữa lấy điểm cuối của cung.
Khi dó trên dòng command lại nhắc: Specify center point of arc or (Angle/Direction/Radius): Bác gõ vào a rồi Enter
Và trên dòng command lại nhắc: Specify included angle: Bác chỉ việc nhập góc của cung vào ví dụ 30 là OK mà lị.

Dù có bao nhiêu kiểu đi nữa nhưng với cái khúc lisp của mình nếu bác nắm vững cách vẽ của từng kiểu thì bác cứ yên trí mà vẽ theo kiểu bác muốn. Start End Angle hay Start Second End hay ......

Nếu bác chỉ sử dụng độc một kiểu Start End Angle thì cái lisp của bác Tue_NV là OK rùi.
  • 1
Chúc các quý Anh trên diễn đàn luôn khỏe, đẻ thêm được nhiều thứ để mót.

#210 Tue_NV

Tue_NV

    KS Võ Quang Tuệ

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

Đã gửi 05 April 2010 - 05:41 PM

Hề hề hề,
...
Dù có bao nhiêu kiểu đi nữa nhưng với cái khúc lisp của mình nếu bác nắm vững cách vẽ của từng kiểu thì bác cứ yên trí mà vẽ theo kiểu bác muốn. Start End Angle hay Start Second End hay ......

Hề hề hề, hay... bác gõ chữ arc vào dòng sông command là xong chứ cần gì đến Lisp
Vì (command "arc" pause) chính là gõ arc vào dòng command vậy
  • 0

#211 Phiphi-

Phiphi-

    biết lệnh minsert

  • Members
  • PipPipPipPipPipPip
  • 434 Bài viết
Điểm đánh giá: 175 (tàm tạm)

Đã gửi 05 April 2010 - 05:42 PM

Cám ơn các Bác.
PP đang định dùng Lisp để vẽ mặt lưới 3D như bản vẽ dưới đây.
Thông số cho trước: L1, L2, L3 , L4, L5, H1, H2, R1, R2 và angle 25 độ.
http://www.cadviet.c...mat_luoi_3d.dwg

(Mới "nghiên kíu" thôi, chứ chưa viết gì cả)

Xin bác Tue_nv sửa thêm lisp vẽ phân giác để cho phép User chỉ cần select 3 điểm P0, Px, Py và input chiều dài line X.
(defun c:VPG (/ oldos prdiem ssa p ent prd prc pd pc eL dhuong hs
diem listdiem listdp xmin xmax ymin ymax)
(vl-load-com)
(setq oldos (getvar "osmode"))
(setvar "osmode" 3)
(setvar "cmdecho" 0)
(setvar "edgemode" 1)
(setq ssa (ssadd) i 0 listdiem (list) listdp (list))
(while (setq p (getpoint "\n Chon trung diem doan bo goc :") )
(while (or (null (nentselp p))
(not (wcmatch (cdr(assoc 0 (entget(car (nentselp p))))) "*LINE,ARC"))
)
(setq p (getpoint "\n Chon trung diem doan bo goc :")))
(setq ent (car(nentselp p)))
(setq prdiem (vlax-curve-getParamAtPoint ent p))
(setq prd (- prdiem 0.5) prc (+ prdiem 0.5))
(if (or (= prdiem 0) (= prdiem (vlax-curve-getEndParam ent)) )
(progn
(setq prd 0.5)
(setq prc (- (vlax-curve-getEndParam ent) 0.5))
) )
;;;;;;
(setq pd (vlax-curve-getPointAtParam ent prd)
pc (vlax-curve-getPointAtParam ent prc) )
(setvar "osmode" 0)
(command "Xline" "B" p pd pc "") (setq eL (entlast))
(setq dhuong (cdr(assoc 11 (entget (entlast)))))
(setq hs (distance pd pc))
(setq diem (list (+ (car p) (* (car dhuong) hs))
(+ (cadr p) (* (cadr dhuong) hs)) 0))
(command "line" p diem "")
(setq ssa (ssadd (entlast) ssa))
(entdel eL)
(setq listdiem (append listdiem (list diem)))
(setq listdp (append listdp (list p)))
(setvar "osmode" 3)
);while
(setq xmin (- (caar(vl-sort listdp '(lambda (x1 x2)
(< (car x1) (car x2)) ) ))
hs))
(setq xmax (+ (caar(vl-sort listdp '(lambda (x1 x2)
(> (car x1) (car x2)) ) ))
hs))
(setq ymin (- (cadar(vl-sort listdp '(lambda (x1 x2)
(< (cadr x1) (cadr x2)) ) ))
hs))
(setq ymax (+ (cadar(vl-sort listdp '(lambda (x1 x2)
(> (cadr x1) (cadr x2)) ) ))
hs))
(vla-zoomwindow (vlax-get-acad-object)
(vlax-3d-point (list xmin ymin 0))
(vlax-3d-point (list xmax ymax 0)) )
(command "extend" ssa "" "F")
(foreach x listdiem (command x))
(command "" "")
(setvar "osmode" oldos)
(setvar "modemacro" "Chuc ban lam viec hieu qua - Tue_NV-0955193619")
)

  • 0

#212 Tue_NV

Tue_NV

    KS Võ Quang Tuệ

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

Đã gửi 05 April 2010 - 07:10 PM

Cám ơn các Bác.
PP đang định dùng Lisp để vẽ mặt lưới 3D như bản vẽ dưới đây.
Thông số cho trước: L1, L2, L3 , L4, L5, H1, H2, R1, R2 và angle 25 độ.
http://www.cadviet.c...mat_luoi_3d.dwg

(Mới "nghiên kíu" thôi, chứ chưa viết gì cả)

Xin bác Tue_nv sửa thêm lisp vẽ phân giác để cho phép User chỉ cần select 3 điểm P0, Px, Py và input chiều dài line X

Chào Phiphi. Lisp trên là Tue_NV viết cho bạn svba1608. Lisp thực hiện chỉ khi User pick từng trung điểm của đoạn bo góc hay đó là giao điểm của 2 phân đoạn PLINE tạo nên góc. Vì bài toán của svba là bài toán bất kì. Nó chẳng tuân theo 1 quy luật nào cả, cho nên mới viết như vậy. Còn nếu các đa tuyến tạo theo 1 quy luật nhất định thì khi thực hiện Lisp sẽ nhanh hơn, cũng chẳng cần select 3 điểm P0, Px, Py như của Phiphi nói mà Lisp tự động chọn cho mình và thực thi luôn

input chiều dài line X : cái này Phiphi nói chưa hiểu. Thế nào là input chiều dài line X?
chiều dài line X là chiều dài // trục X chăng? Nó không // trục Ox được không?
Phiphi nên rút kinh nghiệm là mình nên nói 1 cách rõ ràng hơn. và mình nghĩ bài toán này bạn nên post vào topic "Viết Lisp theo yêu cầu" thì thích hợp hơn đó.
  • 0

#213 Phiphi-

Phiphi-

    biết lệnh minsert

  • Members
  • PipPipPipPipPipPip
  • 434 Bài viết
Điểm đánh giá: 175 (tàm tạm)

Đã gửi 05 April 2010 - 09:26 PM

Chào Phiphi. Lisp trên là Tue_NV viết cho bạn svba1608. Lisp thực hiện chỉ khi User pick từng trung điểm của đoạn bo góc hay đó là giao điểm của 2 phân đoạn PLINE tạo nên góc. Vì bài toán của svba là bài toán bất kì. Nó chẳng tuân theo 1 quy luật nào cả, cho nên mới viết như vậy. Còn nếu các đa tuyến tạo theo 1 quy luật nhất định thì khi thực hiện Lisp sẽ nhanh hơn, cũng chẳng cần select 3 điểm P0, Px, Py như của Phiphi nói mà Lisp tự động chọn cho mình và thực thi luôn

input chiều dài line X : cái này Phiphi nói chưa hiểu. Thế nào là input chiều dài line X?
chiều dài line X là chiều dài // trục X chăng? Nó không // trục Ox được không?
Phiphi nên rút kinh nghiệm là mình nên nói 1 cách rõ ràng hơn. và mình nghĩ bài toán này bạn nên post vào topic "Viết Lisp theo yêu cầu" thì thích hợp hơn đó.

Xin lổi bác Tue_nv nhé.
Ý PP là vẽ 1 đường phân giác có chiều dài = X. Đây là đoạn phân giác của 2 line P0,Px và P0,Py được tạo bởi 3 điểm P0, Px và Py.
Trong bản vẽ PP đã post trên, đó là các đoạn 300 và 100 của 4 góc dùng để căng tấm lưới Hyper shape.
  • 0

#214 duong-we

duong-we

    Chưa sử dụng CAD

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

Đã gửi 09 April 2010 - 03:09 PM

Tại so minh không thể down load được tai lieu hoc Lisp, hệ thống báo là concurrent hits exceeded, bac nao co co the gui vao mail giup minh duoc khong:
My mail: duongnguyenwe@gmail.com
Best regard!
  • 0

#215 TRUNGNGAMY

TRUNGNGAMY

    biết lệnh block

  • Members
  • PipPipPipPipPipPip
  • 401 Bài viết
Điểm đánh giá: 91 (tàm tạm)

Đã gửi 13 April 2010 - 12:33 AM

Các bạn hướng dẫn giúp mình cách gởi một text vào hộp soạn thảo kiểu edit text và sau khi chính sửa lấy nội dung chúng ra một biến. Xin cám ơn
  • 0

#216 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 13 April 2010 - 07:06 AM

Các bạn hướng dẫn giúp mình cách gởi một text vào hộp soạn thảo kiểu edit text và sau khi chính sửa lấy nội dung chúng ra một biến. Xin cám ơn



Trong khi chờ đợi có người giải thích thì bạn tải file Này về xem cách mình viết có giúp được vấn đề của bạn không! để hiểu thêm về tác dụng của lệnh bạn xem chủ đề :
http://www.cadviet.c...o...near&start=
  • 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


#217 TRUNGNGAMY

TRUNGNGAMY

    biết lệnh block

  • Members
  • PipPipPipPipPipPip
  • 401 Bài viết
Điểm đánh giá: 91 (tàm tạm)

Đã gửi 13 April 2010 - 11:26 AM

Trong khi chờ đợi có người giải thích thì bạn tải file Này về xem cách mình viết có giúp được vấn đề của bạn không! để hiểu thêm về tác dụng của lệnh bạn xem chủ đề :
http://www.cadviet.c...o...near&start=

Cám ơn bạn. Nhưng có cách nào sd edit box có sẵn của Cad mà kg phải viết DCL kg
  • 0

#218 TRUNGNGAMY

TRUNGNGAMY

    biết lệnh block

  • Members
  • PipPipPipPipPipPip
  • 401 Bài viết
Điểm đánh giá: 91 (tàm tạm)

Đã gửi 15 April 2010 - 07:24 PM

Các bạn cho mình hỏi tý. Trong lisp, làm thế nào để khởi động Wipeout. Vì tạo file có dùng Wipeout để khi insert ra cho nó che cái đối tượng nó đè lên, nhưng nếu chưa gọi lệnh Wipeout thì nó chẳng thấy gì. Các bạn chỉ giúp mình nhé. Cám ơn
  • 0

#219 dr.quan

dr.quan

    biết zoom

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

Đã gửi 15 April 2010 - 11:30 PM

anh ssg ơi anh cho em yahoo của anh đi hì!
  • 0

#220 TRUNGNGAMY

TRUNGNGAMY

    biết lệnh block

  • Members
  • PipPipPipPipPipPip
  • 401 Bài viết
Điểm đánh giá: 91 (tàm tạm)

Đã gửi 16 April 2010 - 11:29 AM

Các bạn cho mình hỏi tý. Trong lisp, làm thế nào để khởi động Wipeout. Vì tạo file có dùng Wipeout để khi insert ra cho nó che cái đối tượng nó đè lên, nhưng nếu chưa gọi lệnh Wipeout thì nó chẳng thấy gì. Các bạn chỉ giúp mình nhé. Cám ơn

Không thấy ai trả lời cả. Nhân vừa mới tìm ra nên đưa các bạn tham khảo vậy.
Đối với BV, nếu bạn chưa gọi lệnh Wipeout thì khi insert block có sd wipeout, nó sẽ kg thấy gì. Để khởi động wipeout, bạn cho câu lệnh sau vào lisp
(IF (= (TYPE C:WIPEOUT) 'SUBR) (arxload "wipeout"))
Ghi chú : file wipeout.arx phải có trong đường dẫn cad
  • 0