Đến nội dung


Hình ảnh
5 stars - based on 24598 reviews
* * * - - 3 Bình chọn

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


  • Please log in to reply
493 replies to this topic

#181 thiep

thiep

    biết dimcontinue

  • Members
  • PipPipPipPipPip
  • 377 Bài viết
Điểm đánh giá: 263 (khá)

Đã gửi 25 February 2010 - 04:54 PM

Tue_NV đã thử làm bài toán của bác ssg và đã hoàn thành được bước 1 và bước 2
Còn bước 3 và bước 4 thì Tue_NV đã thử nhưng không được. Cái không được chính là vòng lặp để vòng lặp cuối thì trở lại điểm A thì dừng lại. Cứ mỗi lần xoay hệ trục thì toạ độ thì toạ độ nó lại biến đổi, mình biết hàm trans, nó liên quan đến chuyện này nhưng chưa biết cách áp dụng nó cho đúng. Vì thế chưa tạo được vòng lặp. Mong các bác trên diễn đàn có thể bớt 1 chút thời gian giải thích rõ hơn về hàm trans và áp dụng vào code dưới đây như thế nào để có thể giải quyết được bài toán này một cách trọn vẹn
Dưới đây là code :


(defun c:dglo(/ ss tap_ins pd pc goc goc_base)
(setq ss (ssget '((0 . "POINT"))) tap_ins (list))
(setq ss (mapcar 'vlax-ename->vla-object (vl-remove-if 'listp (mapcar 'cadr (ssnamex ss)))))
(setq tap_ins (mapcar '(lambda (x) (vlax-get x 'Coordinates)) ss))
(setq tap_ins (mapcar '(lambda (x) (trans x 0 1)) tap_ins))
(setq tap_ins (vl-sort tap_ins
'(lambda (x y)
(< (cadr x) (cadr y))
)
)
)

(setq pd (car tap_ins) pcheck nil)
(setq goc_min (* 2 pi))
(foreach x tap_ins
(if (not (equal pd x))
(progn
(setq goc (angle pd x))
(if (< goc goc_min) (progn
(setq goc_min goc)
(setq pcheck x)
))
)
)
);foreach
(command "LINE" pd pcheck "")
(princ)
)

Rất mong sự hướng dẫn của các bác.
Tue_NV xin chân thành cảm ơn.

Theo Thiep, nếu không xoay thì tìm điểm kế tiếp vẫn được mà. Từ điểm B vừa tìm được vẫn tìm được điểm C.... Cứ thế cho đến khi điểm cuối trùng lại điểm A thì dừng.
  • 0

#182 tuantran79

tuantran79

    biết vẽ line

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

Đã gửi 27 February 2010 - 11:35 AM

k hiểu gì luôn
  • 0
No night thì num bờ one same same thì num bờ ten

#183 Tue_NV

Tue_NV

    KS Võ Quang Tuệ

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

Đã gửi 01 March 2010 - 08:59 AM

Theo Thiep, nếu không xoay thì tìm điểm kế tiếp vẫn được mà. Từ điểm B vừa tìm được vẫn tìm được điểm C.... Cứ thế cho đến khi điểm cuối trùng lại điểm A thì dừng.

Khi xoay hệ toạ độ UCS ta mới tìm được góc góc angmin. Ứng với góc angmin ta tìm được 1 điểm C -> thực hiện vòng lặp cho đến khi nào nó quay về điểm A (điểm tìm được đầu tiên).
Còn không xoay UCS thì Tue_NV bó tay, không biết làm cách nào?

Tue_NV đã thử làm bài toán của bác ssg và đã hoàn thành được bước 1 và bước 2
Còn bước 3 và bước 4 thì Tue_NV đã thử nhưng không được. Cái không được chính là vòng lặp để vòng lặp cuối thì trở lại điểm A thì dừng lại. Cứ mỗi lần xoay hệ trục thì toạ độ thì toạ độ nó lại biến đổi, mình biết hàm trans, nó liên quan đến chuyện này nhưng chưa biết cách áp dụng nó cho đúng. Vì thế chưa tạo được vòng lặp. Mong các bác trên diễn đàn có thể bớt 1 chút thời gian giải thích rõ hơn về hàm trans và áp dụng vào code dưới đây như thế nào để có thể giải quyết được bài toán này một cách trọn vẹn

Code đẫ được Tue_NV thể hiện ở bài viết trên (bài viết số 190)
Mong được sự giúp đỡ của các bác.
Tue_NV xin cảm ơn.
  • 0

#184 thiep

thiep

    biết dimcontinue

  • Members
  • PipPipPipPipPip
  • 377 Bài viết
Điểm đánh giá: 263 (khá)

Đã gửi 02 March 2010 - 09:33 AM

Khi xoay hệ toạ độ UCS ta mới tìm được góc góc angmin. Ứng với góc angmin ta tìm được 1 điểm C -> thực hiện vòng lặp cho đến khi nào nó quay về điểm A (điểm tìm được đầu tiên).
Còn không xoay UCS thì Tue_NV bó tay, không biết làm cách nào?

Code đẫ được Tue_NV thể hiện ở bài viết trên (bài viết số 190)
Mong được sự giúp đỡ của các bác.
Tue_NV xin cảm ơn.

Chào Tue_NV
Như Thiep đã nói, không xoay hệ tọa độ thì tìm điểm kế tiếp vẫn được. Từ điểm B vừa tìm được vẫn tìm được điểm C.... Cứ thế cho đến khi điểm cuối trùng lại điểm A thì dừng. Tue_NV xem đoạn lisp sau:
;; free lisp from cadviet.com by thiep and Tue_nv
(defun gocmin (p lst / goc gmin pluu)
(foreach p1 lst
(setq goc (angle p p1))
(if (or (not gmin) (> gmin goc))
(setq gmin goc
pluu p1
)
)
)
pluu
)
;;;-------------------------------------------
(defun SS-aobjlst (ss / c L)
(setq c -1)
(repeat (sslength ss)
(setq L (cons (vlax-ename->vla-object (ssname ss (setq c (1+ c))))
L
)
)
)
(reverse L)
)
;;;-------------------------------------------
(defun entmkLine (p1 p2)
(entmake (list '(0 . "line")
(cons 10 p1)
(cons 11 p2)
)
)
)
;;;-------------------------------------------
(defun c:dglo (/ ss objlst tap_ins pd pc pt pchk1 Lst)
(command "undo" "be")
(command "ucs" "")
(setq ss (ssget '((0 . "POINT")))
tap_ins (list)
)
(setq objlst (SS-aobjlst ss))
(setq tap_ins (mapcar '(lambda (x) (vlax-get x 'Coordinates)) objlst))
(setq tap_ins (mapcar '(lambda (x) (trans x 0 1)) tap_ins))
(setq tap_ins (vl-sort tap_ins
'(lambda (x y)
(< (cadr x) (cadr y))
)
)
)
(setq pd (car tap_ins)
pc (last tap_ins)
pt pd
pchk1 nil
)
(while (not (eq pchk1 pc))
(setq lst (vl-remove pt tap_ins))
(setq pchk1 (gocmin pt lst))
(entmkLine pt pchk1)
(setq pt pchk1)
)
(while (not (eq pchk1 pd))
(setq lst (vl-remove pt tap_ins))
(setq pchk1 (gocmin pt lst))
(entmkLine pt pchk1)
(setq pt pchk1)
(foreach p tap_ins
(if (<= (cadr pt) (cadr p))
(setq tap_ins (vl-remove p tap_ins))
)
)
)
(command "undo" "en")
(princ)
)

Xin trao đổi cùng Tue: Trong lisp này Thiep thay đoạn mã: (mapcar 'vlax-ename->vla-object (vl-remove-if 'listp (mapcar 'cadr (ssnamex ss)))) bằng hàm SS-aobjlst. Thiep cho rằng nó sẽ chậm hơn vì hàm ssnamex nó đưa ra thông tin trong cơ sở dữ liệu của Cad nhiều hơn hàm ssname, vì vậy chiếm bộ nhớ nhiều hơn. Đoạn mã trên có thể Tue_nv tham khảo từ giabach vì giabach rất hay dùng, cũng có thể giabach tham khảo từ lisp break_with.lsp. Tuy nhiên trong lisp này, Thiep nhớ là tác giả cũng đã nói đến điều này mặc dù nó ngắn gọn hơn.
  • 1

#185 gia_bach

gia_bach

    biết lệnh adcenter

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 1458 Bài viết
Điểm đánh giá: 1435 (rất tốt)

Đã gửi 02 March 2010 - 11:26 AM

.....................
Thiep cho rằng nó sẽ chậm hơn vì hàm ssnamex nó đưa ra thông tin trong cơ sở dữ liệu của Cad nhiều hơn hàm ssname, vì vậy chiếm bộ nhớ nhiều hơn. Đoạn mã trên có thể Tue_nv tham khảo từ giabach vì giabach rất hay dùng, cũng có thể giabach tham khảo từ lisp break_with.lsp. Tuy nhiên trong lisp này, Thiep nhớ là tác giả cũng đã nói đến điều này mặc dù nó ngắn gọn hơn.

Chính xác.
Tuy nhiên nếu Thiep để ý sẽ thấy các Lisp gần đây tui cũng không sử dụng hàm ssnamex nữa.
  • 1

#186 nataca

nataca

    biết lệnh adcenter

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

Đã gửi 02 March 2010 - 12:23 PM

Xin trao đổi cùng Tue: Trong lisp này Thiep thay đoạn mã: (mapcar 'vlax-ename->vla-object (vl-remove-if 'listp (mapcar 'cadr (ssnamex ss)))) bằng hàm SS-aobjlst. Thiep cho rằng nó sẽ chậm hơn vì hàm ssnamex nó đưa ra thông tin trong cơ sở dữ liệu của Cad nhiều hơn hàm ssname, vì vậy chiếm bộ nhớ nhiều hơn.

Thực ra với một lisp đơn giản thì hàm trên không làm mất hơn bao nhiều thời gian và bộ nhớ. Dùng ssnamex có một cái tiện là viết code ngắn gọn, không cần dùng đến hàm con. Nếu trong chương trình lớn thì để thể hiện chương trình một cách đơn giản, ngắn gọn, dễ hiểu người ta quan tâm đến rút ngắn tối đa dòng code và thuật toán tối ưu nhất. Vì thế việc dùng hàm con là rất quan trọng.
  • 0

#187 Tue_NV

Tue_NV

    KS Võ Quang Tuệ

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

Đã gửi 05 March 2010 - 03:23 PM

Chào Tue_NV
Như Thiep đã nói, không xoay hệ tọa độ thì tìm điểm kế tiếp vẫn được. Từ điểm B vừa tìm được vẫn tìm được điểm C.... Cứ thế cho đến khi điểm cuối trùng lại điểm A thì dừng. Tue_NV xem đoạn lisp sau:

;; free lisp from cadviet.com by thiep and Tue_nv
(defun gocmin (p lst / goc gmin pluu)
(foreach p1 lst
(setq goc (angle p p1))
(if (or (not gmin) (> gmin goc))
(setq gmin goc
pluu p1
)
)
)
pluu
)
;;;-------------------------------------------
(defun SS-aobjlst (ss / c L)
(setq c -1)
(repeat (sslength ss)
(setq L (cons (vlax-ename->vla-object (ssname ss (setq c (1+ c))))
L
)
)
)
(reverse L)
)
;;;-------------------------------------------
(defun entmkLine (p1 p2)
(entmake (list '(0 . "line")
(cons 10 p1)
(cons 11 p2)
)
)
)
;;;-------------------------------------------
(defun c:dglo (/ ss objlst tap_ins pd pc pt pchk1 Lst)
(command "undo" "be")
(command "ucs" "")
(setq ss (ssget '((0 . "POINT")))
tap_ins (list)
)
(setq objlst (SS-aobjlst ss))
(setq tap_ins (mapcar '(lambda (x) (vlax-get x 'Coordinates)) objlst))
(setq tap_ins (mapcar '(lambda (x) (trans x 0 1)) tap_ins))
(setq tap_ins (vl-sort tap_ins
'(lambda (x y)
(< (cadr x) (cadr y))
)
)
)
(setq pd (car tap_ins)
pc (last tap_ins)
pt pd
pchk1 nil
)
(while (not (eq pchk1 pc))
(setq lst (vl-remove pt tap_ins))
(setq pchk1 (gocmin pt lst))
(entmkLine pt pchk1)
(setq pt pchk1)
)
(while (not (eq pchk1 pd))
(setq lst (vl-remove pt tap_ins))
(setq pchk1 (gocmin pt lst))
(entmkLine pt pchk1)
(setq pt pchk1)
(foreach p tap_ins
(if (<= (cadr pt) (cadr p))
(setq tap_ins (vl-remove p tap_ins))
)
)
)
(command "undo" "en")
(princ)
)

Xin trao đổi cùng Tue: Trong lisp này Thiep thay đoạn mã: (mapcar 'vlax-ename->vla-object (vl-remove-if 'listp (mapcar 'cadr (ssnamex ss)))) bằng hàm SS-aobjlst. Thiep cho rằng nó sẽ chậm hơn vì hàm ssnamex nó đưa ra thông tin trong cơ sở dữ liệu của Cad nhiều hơn hàm ssname, vì vậy chiếm bộ nhớ nhiều hơn. Đoạn mã trên có thể Tue_nv tham khảo từ giabach vì giabach rất hay dùng, cũng có thể giabach tham khảo từ lisp break_with.lsp. Tuy nhiên trong lisp này, Thiep nhớ là tác giả cũng đã nói đến điều này mặc dù nó ngắn gọn hơn.

Lời đầu tiên, Tue_NV xin cảm ơn bác Thiep. Code rất hay
Tuy nhiên nó bị 1 lỗi nhỏ.
Mình phải thay đoạn :
(setq tap_ins (vl-sort tap_ins
'(lambda (x y)
(< (cadr x) (cadr y))
)
)
)

thành đoạn này : (setq tap_ins (vl-sort tap_ins
'(lambda (x y)
(if (= (cadr x) (cadr y))
(< (car x) (car y))
(< (cadr x) (cadr y))
)
)
)
)


thì mới đúng trong mọi trường hợp.
Cảm ơn bác nhiều.

Các bác cho Tue_NV hỏi thêm:
Mình có xem trên mạng thấy ví dụ có hàm setfon để thiết lập font chữ nhưng chưa hiểu về thông số này
(setq at (vla-get-activeTextStyle (vla-get-activedocument 
(vlax-get-acad-object))))
(vla-setfont at "ARIAL" :vlax-False :vlax-False 0 32)
-> Tue_NV chưa hiểu tham số 0 và tham số 32 có nghĩa là gì?
Đọc trong help thì số 0 chính là CharSet và 32 chính là PitchAndFamily
Tue_NV chưa hiểu rõ 2 tham số này.
Rất mong được sự giúp đỡ của các bác.
Xin chân thành cảm ơn.
  • 1

#188 Tue_NV

Tue_NV

    KS Võ Quang Tuệ

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

Đã gửi 27 March 2010 - 02:08 PM

Các bác cho Tue_NV hỏi thêm:
Mình có xem trên mạng thấy ví dụ có hàm setfon để thiết lập font chữ nhưng chưa hiểu về thông số này

(setq at (vla-get-activeTextStyle (vla-get-activedocument 
(vlax-get-acad-object))))
(vla-setfont at "ARIAL" :vlax-False :vlax-False 0 32)
-> Tue_NV chưa hiểu tham số 0 và tham số 32 có nghĩa là gì?
Đọc trong help thì số 0 chính là CharSet và 32 chính là PitchAndFamily
Tue_NV chưa hiểu rõ 2 tham số này.
Rất mong được sự giúp đỡ của các bác.
Xin chân thành cảm ơn.

Bên cạnh vấn đề cần hỏi trên, Tue_NV có 1 bài toán thêm vào tập chọn đối tượng thao tác với Activex mà mình loay hoay mãi mà chưa giải quyết được. Nó cứ báo lỗi. Đây là code :
(defun c:addss(/ ssets ssobj)
(setq ssets (vla-get-selectionsets (vla-get-activedocument (vlax-get-acad-object))))
(setq ssobj (vla-add ssets "sel"))
(vla-SelectOnScreen ssobj)
(setq obj_add (vlax-ename->vla-object (car(entsel "\n Chon doi tuong add vao tap chon"))))
(vla-additems ssets (vlax-make-variant obj_add vlax-vbobject))
(vla-delete ssobj)
(princ)
)
Tue_NV muốn thêm một đối tượng obj_add vào tập chọn ssobj nhưng chạy Lisp xong thì báo lỗi error: ActiveX Server returned the error: unknown name: AddItems
Cái này mình chưa hiểu là bị lỗi gì mà Lisp lại báo rằng unknown name: AddItems làm vậy??
Xin các bác hướng dẫn giúp. và mình cũng muốn mở rộng thêm là thêm nhiều đối tượng chọn vào 1 tập chọn.

Rất mong sự giúp đỡ của các bác.
Xin chân thành cảm ơn.
  • 0

#189 gia_bach

gia_bach

    biết lệnh adcenter

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 1458 Bài viết
Điểm đánh giá: 1435 (rất tốt)

Đã gửi 29 March 2010 - 08:28 AM

[quote name='Tue_NV' post='90833' date='Mar 27 2010, 14:08']Bên cạnh vấn đề cần hỏi trên, Tue_NV có 1 bài toán thêm vào tập chọn đối tượng thao tác với Activex mà mình loay hoay mãi mà chưa giải quyết được. Nó cứ báo lỗi. Đây là code :
(defun c:addss(/ ent ssets ssobj ss_array ss_list)
(setq ssets (vla-get-selectionsets (vla-get-activedocument (vlax-get-acad-object))))
(setq ssobj (vla-add ssets "sel"))
(vla-SelectOnScreen ssobj)

(while (setq ent (entsel "\n Chon doi tuong add vao tap chon"))
(setq ss_list (cons (vlax-ename->vla-object (car ent)) ss_list)))

(setq ss_array (vlax-make-safearray vlax-vbObject (cons 0 (- (length ss_list) 1))))
(vlax-safearray-fill ss_array ss_list)
(vlax-make-variant ss_array)

(vla-additems ssobj ss_array)
(vla-delete ssobj)
(princ))

  • 1

#190 xuangiangtedi

xuangiangtedi

    biết vẽ line

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

Đã gửi 30 March 2010 - 02:41 PM

hay quá cảm ơn bác ssg dựa vào cái vẽ nhà của bác mình đã vẽ đươc ngôi sao nè thich thật.
thank bác nhiều nhe mình học tiếp đã
(defun c:sao(/ r p1 p2 p3 p4 p5 p6 OldOs)
(setq
p1 (getpoint "\n chon tam: ")
r (getint "\n ban kinh r= ")
p2 (polar p1 (/ pi 2) r)
p3 (polar p1 (/ pi 10) r)
p6 (polar p1 (* pi 0.9) r)
p5 (polar p1 (* pi 1.3) r)
p4 (polar p1 (* pi 1.7) r)
)
(setq OldOs (getvar "osmode"))
(setvar "osmode" 0)
(command "pline" p2 p4 p6 p3 p5 "c")
(setvar "osmode" OldOs)
(princ)
)
  • 0

#191 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

#192 Tue_NV

Tue_NV

    KS Võ Quang Tuệ

  • Moderator
  • PipPipPipPipPipPipPip
  • 4328 Bài viết
Điểm đánh giá: 3830 (đỉ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

#193 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

#194 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

#195 phamthanhbinh

phamthanhbinh

    biết lệnh adcenter

  • Moderator
  • PipPipPipPipPipPipPip
  • 6017 Bài viết
Điểm đánh giá: 3118 (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.

#196 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

#197 Tue_NV

Tue_NV

    KS Võ Quang Tuệ

  • Moderator
  • PipPipPipPipPipPipPip
  • 4328 Bài viết
Điểm đánh giá: 3830 (đỉ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

#198 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

#199 phamthanhbinh

phamthanhbinh

    biết lệnh adcenter

  • Moderator
  • PipPipPipPipPipPipPip
  • 6017 Bài viết
Điểm đánh giá: 3118 (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.

#200 Tue_NV

Tue_NV

    KS Võ Quang Tuệ

  • Moderator
  • PipPipPipPipPipPipPip
  • 4328 Bài viết
Điểm đánh giá: 3830 (đỉ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