Đến nội dung


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

Hỏi về Lisp (thuật toán, ý tưởng, coding,...)


  • Please log in to reply
2851 replies to this topic

#681 cuongkhan

cuongkhan

    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 May 2011 - 11:40 AM

Chào mọi người. Mình có một vấn đề muốn được giúp đỡ. mình đã load lisp vẽ cửa sổ trên diễn đàn nhưng ko sử dụng được. thường báo lỗi như sau
second point :; error: bad argument type: lentityp nil
nội dung lisp:

(defun c:w1(/ data_m l1 l2 p1 p2 check)

(defun wd_import(/ p3 p4 p5 p6)
(setq data_m (ssget))
(setq p1 (getpoint "\nfirst point :") p2 (getpoint "\nsecond point :"))
(setq l1 nil l2 nil check 1)
(if (not (= nil data_m)) (progn
(setq l1 (entget (ssname data_m 0)))
(setq l2 (entget (ssname data_m 1)))
(if (or (= nil l1) (not (= "LINE" (cdr (assoc 0 l1))))) (setq check 0))
(if (or (= nil l2) (not (= "LINE" (cdr (assoc 0 l2))))) (setq check 0))
(if (not (= 0 (-(sslength data_m) 2))) (setq check 0))
(if (= 1 check) (progn
(setq p3 (cdr (assoc 10 l1))) (setq p3 (list (nth 0 p3) (nth 1 p3)))
(setq p4 (cdr (assoc 11 l1))) (setq p4 (list (nth 0 p4) (nth 1 p4)))
(setq p5 (cdr (assoc 10 l2))) (setq p5 (list (nth 0 p5) (nth 1 p5)))
(setq p6 (cdr (assoc 11 l2))) (setq p6 (list (nth 0 p6) (nth 1 p6)))
(if (not (= nil (inters p3 p4 p5 p6 nil))) (setq check 0))
))
) (setq check 0))
(princ)
)

(defun wd_procced()

(defun mkv(/ p3 p4 p5 p6 p7 p8 p9 ls1 ls2 getom ll1)

(setq p3 (cdr (assoc 10 l1)))
(setq p4 (cdr (assoc 11 l1)))
(setq p5 (cdr (assoc 10 l2)))
(setq p6 (cdr (assoc 11 l2)))
(if (> (abs (- (nth 1 p1) (nth 1 p3)))
(abs (- (nth 1 p3) (nth 1 p4))) ) (setq check 0))
(if (> (abs (- (nth 1 p1) (nth 1 p4)))
(abs (- (nth 1 p3) (nth 1 p4))) ) (setq check 0))
(if (> (abs (- (nth 1 p2) (nth 1 p5)))
(abs (- (nth 1 p5) (nth 1 p6))) ) (setq check 0))
(if (> (abs (- (nth 1 p2) (nth 1 p6)))
(abs (- (nth 1 p5) (nth 1 p6))) ) (setq check 0))
(if (= 0 check) (princ "\ninvalid data") (progn
(setq ls1 (arlst (list (nth 1 p1) (nth 1 p2) (nth 1 p3) (nth 1 p4) )))
; (princ ls1)
(setq p7 (list (nth 0 p3) (nth 0 ls1) 0))
(setq p8 (list (nth 0 p3) (nth 1 ls1) 0))
(mkline p7 p8 l1)
(setq p7 (list (nth 0 p3) (nth 2 ls1) 0))
(setq p8 (list (nth 0 p3) (nth 3 ls1) 0))
(mkline p7 p8 l1)

(setq ls1 (arlst (list (nth 1 p1) (nth 1 p2) (nth 1 p5) (nth 1 p6) )))
; (princ ls1)
(setq p7 (list (nth 0 p5) (nth 0 ls1) 0))
(setq p8 (list (nth 0 p5) (nth 1 ls1) 0))
(mkline p7 p8 l1)
(setq p7 (list (nth 0 p5) (nth 2 ls1) 0))
(setq p8 (list (nth 0 p5) (nth 3 ls1) 0))
(mkline p7 p8 l1)

(setq p7 (list (nth 0 p3) (nth 1 ls1) 0))
(setq p8 (list (nth 0 p5) (nth 1 ls1) 0))
(mkline p7 p8 l1)
(setq p7 (list (nth 0 p3) (nth 2 ls1) 0))
(setq p8 (list (nth 0 p5) (nth 2 ls1) 0))
(mkline p7 p8 l1)

(setq getom (getvar "osmode"))
(setvar "osmode" 0)

(setq ls2 (arlst (list (nth 0 p3) (nth 0 p5))))
(setq p7 (list (nth 0 ls2) (nth 1 ls1) 0))
(setq p8 (list (nth 1 ls2) (nth 2 ls1) 0))

(setq ll1 (list
(cons 0 "line")
(cons 8 (getvar "clayer"))
))

(drawrt2 p7 p8 ll1)

(setvar "osmode" getom)
(command "erase" data_m "")

))
(princ)
)

(defun mkh(/ p3 p4 p5 p6 p7 p8 p9 ls1 ls2 getom ll1)

(setq p3 (cdr (assoc 10 l1)))
(setq p4 (cdr (assoc 11 l1)))
(setq p5 (cdr (assoc 10 l2)))
(setq p6 (cdr (assoc 11 l2)))

(if (> (abs (- (nth 0 p1) (nth 0 p3)))
(abs (- (nth 0 p3) (nth 0 p4))) ) (setq check 0))
(if (> (abs (- (nth 0 p1) (nth 0 p4)))
(abs (- (nth 0 p3) (nth 0 p4))) ) (setq check 0))
(if (> (abs (- (nth 0 p2) (nth 0 p5)))
(abs (- (nth 0 p5) (nth 0 p6))) ) (setq check 0))
(if (> (abs (- (nth 0 p2) (nth 0 p6)))
(abs (- (nth 0 p5) (nth 0 p6))) ) (setq check 0))

(if (= 0 check) (princ "\ninvalid data") (progn

(setq ls1 (arlst (list (nth 0 p1) (nth 0 p2) (nth 0 p3) (nth 0 p4) )))
; (princ ls1)
(setq p7 (list (nth 0 ls1) (nth 1 p3) 0))
(setq p8 (list (nth 1 ls1) (nth 1 p3) 0))
(mkline p7 p8 l1)
(setq p7 (list (nth 2 ls1) (nth 1 p3) 0))
(setq p8 (list (nth 3 ls1) (nth 1 p3) 0))
(mkline p7 p8 l1)

(setq ls1 (arlst (list (nth 0 p1) (nth 0 p2) (nth 0 p5) (nth 0 p6) )))
; (princ ls1)
(setq p7 (list (nth 0 ls1) (nth 1 p5) 0))
(setq p8 (list (nth 1 ls1) (nth 1 p5) 0))
(mkline p7 p8 l1)
(setq p7 (list (nth 2 ls1) (nth 1 p5) 0))
(setq p8 (list (nth 3 ls1) (nth 1 p5) 0))
(mkline p7 p8 l1)

(setq p7 (list (nth 1 ls1) (nth 1 p3) 0))
(setq p8 (list (nth 1 ls1) (nth 1 p5) 0))
(mkline p7 p8 l1)
(setq p7 (list (nth 2 ls1) (nth 1 p3) 0))
(setq p8 (list (nth 2 ls1) (nth 1 p5) 0))
(mkline p7 p8 l1)

(setq getom (getvar "osmode"))
(setvar "osmode" 0)

(setq ls2 (arlst (list (nth 1 p3) (nth 1 p5))))
(setq p7 (list (nth 1 ls1) (nth 0 ls2) 0))
(setq p8 (list (nth 2 ls1) (nth 1 ls2) 0))

(setq ll1 (list
(cons 0 "line")
(cons 8 (getvar "clayer"))
))

(drawrt3 p7 p8 ll1)

(setvar "osmode" getom)
(command "erase" data_m "")


))
(princ)
)

(setvar "cmdecho" 0) (command "undo" "mark") (setvar "cmdecho" 1)
(if (= 0 check) (princ "\ninvalid data") (progn
(if (< (abs (- (nth 0 (cdr (assoc 10 l1)))
(nth 0 (cdr (assoc 11 l1))) )) 0.00001) (mkv))
(if (< (abs (- (nth 1 (cdr (assoc 10 l1)))
(nth 1 (cdr (assoc 11 l1))) )) 0.00001) (mkh))


))

(princ)

)
(wd_import)
(ai_undo_push)
(wd_procced)
(ai_undo_pop)
)


(defun c:w2(/ data_m l1 l2 p1 p2 check)

(defun wd_import(/ p3 p4 p5 p6)
(setq data_m (ssget))
(setq p1 (getpoint "\nfirst point :") p2 (getpoint "\nsecond point :"))
(setq l1 nil l2 nil check 1)
(if (not (= nil data_m)) (progn
(setq l1 (entget (ssname data_m 0)))
(setq l2 (entget (ssname data_m 1)))
(if (or (= nil l1) (not (= "LINE" (cdr (assoc 0 l1))))) (setq check 0))
(if (or (= nil l2) (not (= "LINE" (cdr (assoc 0 l2))))) (setq check 0))
(if (not (= 0 (-(sslength data_m) 2))) (setq check 0))
(if (= 1 check) (progn
(setq p3 (cdr (assoc 10 l1))) (setq p3 (list (nth 0 p3) (nth 1 p3)))
(setq p4 (cdr (assoc 11 l1))) (setq p4 (list (nth 0 p4) (nth 1 p4)))
(setq p5 (cdr (assoc 10 l2))) (setq p5 (list (nth 0 p5) (nth 1 p5)))
(setq p6 (cdr (assoc 11 l2))) (setq p6 (list (nth 0 p6) (nth 1 p6)))
(if (not (= nil (inters p3 p4 p5 p6 nil))) (setq check 0))
))
) (setq check 0))
(princ)
)

(defun wd_procced()

(defun mkv(/ p3 p4 p5 p6 p7 p8 p9 ls1 ls2 getom ll1)

(setq p3 (cdr (assoc 10 l1)))
(setq p4 (cdr (assoc 11 l1)))
(setq p5 (cdr (assoc 10 l2)))
(setq p6 (cdr (assoc 11 l2)))
(if (> (abs (- (nth 1 p1) (nth 1 p3)))
(abs (- (nth 1 p3) (nth 1 p4))) ) (setq check 0))
(if (> (abs (- (nth 1 p1) (nth 1 p4)))
(abs (- (nth 1 p3) (nth 1 p4))) ) (setq check 0))
(if (> (abs (- (nth 1 p2) (nth 1 p5)))
(abs (- (nth 1 p5) (nth 1 p6))) ) (setq check 0))
(if (> (abs (- (nth 1 p2) (nth 1 p6)))
(abs (- (nth 1 p5) (nth 1 p6))) ) (setq check 0))
(if (= 0 check) (princ "\ninvalid data") (progn
(setq ls1 (arlst (list (nth 1 p1) (nth 1 p2) (nth 1 p3) (nth 1 p4) )))
; (princ ls1)
(setq p7 (list (nth 0 p3) (nth 0 ls1) 0))
(setq p8 (list (nth 0 p3) (nth 1 ls1) 0))
(mkline p7 p8 l1)
(setq p7 (list (nth 0 p3) (nth 2 ls1) 0))
(setq p8 (list (nth 0 p3) (nth 3 ls1) 0))
(mkline p7 p8 l1)

(setq ls1 (arlst (list (nth 1 p1) (nth 1 p2) (nth 1 p5) (nth 1 p6) )))
; (princ ls1)
(setq p7 (list (nth 0 p5) (nth 0 ls1) 0))
(setq p8 (list (nth 0 p5) (nth 1 ls1) 0))
(mkline p7 p8 l1)
(setq p7 (list (nth 0 p5) (nth 2 ls1) 0))
(setq p8 (list (nth 0 p5) (nth 3 ls1) 0))
(mkline p7 p8 l1)

(setq p7 (list (nth 0 p3) (nth 1 ls1) 0))
(setq p8 (list (nth 0 p5) (nth 1 ls1) 0))
(mkline p7 p8 l1)
(setq p7 (list (nth 0 p3) (nth 2 ls1) 0))
(setq p8 (list (nth 0 p5) (nth 2 ls1) 0))
(mkline p7 p8 l1)

(setq ls2 (arlst (list (nth 0 p3) (nth 0 p5))))

(setq ll1 (list
(cons 0 "line")
(cons 8 (getvar "clayer"))
))

(if (< (nth 0 p1) (nth 0 ls2)) (progn
(setq p7 (list (nth 0 ls2) (nth 1 ls1) 0))
(setq p8 (list (nth 1 ls2) (nth 2 ls1) 0))
(setq p7 (list (* (+ (nth 0 p7) (nth 0 p8)) 0.5) (nth 1 p7) 0))
(drawrt2 p7 p8 ll1)

(setq p7 (list (- (nth 0 ls2) 70) (- (nth 1 ls1) 100) 0))
(setq p8 (list (- (nth 0 ls2) 70) (+ (nth 2 ls1) 100) 0))
(mkline p7 p8 ll1)

(setq p9 (list (+ (nth 0 p7) 70) (nth 1 p7) 0))
(mkline p7 p9 ll1)

(setq p9 (list (+ (nth 0 p8) 70) (nth 1 p8) 0))
(mkline p8 p9 ll1)
)(progn
(setq p7 (list (nth 0 ls2) (nth 1 ls1) 0))
(setq p8 (list (nth 1 ls2) (nth 2 ls1) 0))
(setq p8 (list (* (+ (nth 0 p7) (nth 0 p8)) 0.5) (nth 1 p8) 0))
(drawrt2 p7 p8 ll1)

(setq p7 (list (+ (nth 1 ls2) 70) (- (nth 1 ls1) 100) 0))
(setq p8 (list (+ (nth 1 ls2) 70) (+ (nth 2 ls1) 100) 0))
(mkline p7 p8 ll1)

(setq p9 (list (- (nth 0 p7) 70) (nth 1 p7) 0))
(mkline p7 p9 ll1)

(setq p9 (list (- (nth 0 p8) 70) (nth 1 p8) 0))
(mkline p8 p9 ll1)
))


(command "erase" data_m "")

))
(princ)
)

(defun mkh(/ p3 p4 p5 p6 p7 p8 p9 ls1 ls2 getom ll1)

(setq p3 (cdr (assoc 10 l1)))
(setq p4 (cdr (assoc 11 l1)))
(setq p5 (cdr (assoc 10 l2)))
(setq p6 (cdr (assoc 11 l2)))

(if (> (abs (- (nth 0 p1) (nth 0 p3)))
(abs (- (nth 0 p3) (nth 0 p4))) ) (setq check 0))
(if (> (abs (- (nth 0 p1) (nth 0 p4)))
(abs (- (nth 0 p3) (nth 0 p4))) ) (setq check 0))
(if (> (abs (- (nth 0 p2) (nth 0 p5)))
(abs (- (nth 0 p5) (nth 0 p6))) ) (setq check 0))
(if (> (abs (- (nth 0 p2) (nth 0 p6)))
(abs (- (nth 0 p5) (nth 0 p6))) ) (setq check 0))

(if (= 0 check) (princ "\ninvalid data") (progn

(setq ls1 (arlst (list (nth 0 p1) (nth 0 p2) (nth 0 p3) (nth 0 p4) )))
; (princ ls1)
(setq p7 (list (nth 0 ls1) (nth 1 p3) 0))
(setq p8 (list (nth 1 ls1) (nth 1 p3) 0))
(mkline p7 p8 l1)
(setq p7 (list (nth 2 ls1) (nth 1 p3) 0))
(setq p8 (list (nth 3 ls1) (nth 1 p3) 0))
(mkline p7 p8 l1)

(setq ls1 (arlst (list (nth 0 p1) (nth 0 p2) (nth 0 p5) (nth 0 p6) )))
; (princ ls1)
(setq p7 (list (nth 0 ls1) (nth 1 p5) 0))
(setq p8 (list (nth 1 ls1) (nth 1 p5) 0))
(mkline p7 p8 l1)
(setq p7 (list (nth 2 ls1) (nth 1 p5) 0))
(setq p8 (list (nth 3 ls1) (nth 1 p5) 0))
(mkline p7 p8 l1)

(setq p7 (list (nth 1 ls1) (nth 1 p3) 0))
(setq p8 (list (nth 1 ls1) (nth 1 p5) 0))
(mkline p7 p8 l1)
(setq p7 (list (nth 2 ls1) (nth 1 p3) 0))
(setq p8 (list (nth 2 ls1) (nth 1 p5) 0))
(mkline p7 p8 l1)

(setq getom (getvar "osmode"))
(setvar "osmode" 0)

(setq ll1 (list
(cons 0 "line")
(cons 8 (getvar "clayer"))
))
(setq ls2 (arlst (list (nth 1 p3) (nth 1 p5))))
;(princ ls2)

(if (> (nth 1 p1) (nth 1 ls2)) (progn

(setq p7 (list (nth 1 ls1) (nth 0 ls2) 0))
(setq p8 (list (nth 2 ls1) (nth 1 ls2) 0))
(setq p8 (list (nth 2 ls1) (* (+ (nth 1 p7) (nth 1 p8)) 0.5) 0))

(drawrt3 p7 p8 ll1)

(setq p7 (list (- (nth 1 ls1) 100) (+ (nth 1 ls2) 70) 0))
(setq p8 (list (+ (nth 2 ls1) 100) (+ (nth 1 ls2) 70) 0))
(mkline p7 p8 ll1)

(setq p9 (list (nth 0 p7) (- (nth 1 p7) 70) 0))
(mkline p7 p9 ll1)

(setq p9 (list (nth 0 p8) (- (nth 1 p8) 70) 0))
(mkline p8 p9 ll1)
)(progn
(setq p7 (list (nth 1 ls1) (nth 0 ls2) 0))
(setq p8 (list (nth 2 ls1) (nth 1 ls2) 0))
(setq p7 (list (nth 1 ls1) (* (+ (nth 1 p7) (nth 1 p8)) 0.5) 0))

(drawrt3 p7 p8 ll1)


(setq p7 (list (- (nth 1 ls1) 100) (- (nth 0 ls2) 70) 0))
(setq p8 (list (+ (nth 2 ls1) 100) (- (nth 0 ls2) 70) 0))
(mkline p7 p8 ll1)

(setq p9 (list (nth 0 p7) (+ (nth 1 p7) 70) 0))
(mkline p7 p9 ll1)

(setq p9 (list (nth 0 p8) (+ (nth 1 p8) 70) 0))
(mkline p8 p9 ll1)


))

(setvar "osmode" getom)

(command "erase" data_m "")


))
(princ)
)

(setvar "cmdecho" 0) (command "undo" "mark") (setvar "cmdecho" 1)
(if (= 0 check) (princ "\ninvalid data") (progn
(if (< (abs (- (nth 0 (cdr (assoc 10 l1)))
(nth 0 (cdr (assoc 11 l1))) )) 0.00001) (mkv))
(if (< (abs (- (nth 1 (cdr (assoc 10 l1)))
(nth 1 (cdr (assoc 11 l1))) )) 0.00001) (mkh))


))

(princ)

)
(wd_import)
(wd_procced)
)
.
Mong nhận được sự giúp đỡ của các bạn. Xin cảm ơn.
  • 0

#682 damvinhduy

damvinhduy

    biết vẽ line

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

Đã gửi 13 May 2011 - 09:58 PM

Chào Doan Van Ha
Biến là do mình đặt ra. Bạn có thể viết gọn lại
Với hàm gom do Tue_NV định nghĩa ở trên.


(foreach keylst (mapcar '(lambda(x y) (append (list x) y))
'("key1" "key2" "key3");danh sach key
(list '(1 5 6) '( 3 5 7) '(6 4 9)); co the dinh nghia danh sach cac bien List
)
(GOM keylst)
)


Chào damvinhduy
Bạn sử dụng cái này
(acet-explode (ssget '((0 . "MTEXT"))))
Chọn MTEXT -> nó sẽ explode thành TEXT và trả về các Text này trong 1 tập chọn

Cảm ơn anh Tue. Hôm nay biết thêm một hàm khác nữa.
  • 0

#683 Doan Van Ha

Doan Van Ha

    biết lệnh adcenter

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 5447 Bài viết
Điểm đánh giá: 2624 (tuyệt vời)

Đã gửi 14 May 2011 - 12:03 PM

Để mở 1 file Notepad (mở tường minh để edit trên nó) ta dùng hàm:
(startapp "Notepad.exe" filename)
Vậy, để mở tường minh 1 file CSV ta phải thay "Notepad.exe" bằng gì?
Bác nào biết xin chỉ giùm, cám ơn.
  • 0

* Chỉ nên yêu cầu Lisp khi bạn làm việc đó mất cả ngày nhưng họ chỉ viết 1 giờ. Đừng nêu yêu cầu Lisp khi bạn chỉ làm 1 giờ nhưng bắt họ phải mất cả ngày.

* Nhờ viết lisp cũng như đi khám bệnh. Chỉ gởi căn cước và than sắp chết thì không bác sỹ nào cứu sống được.


#684 Tue_NV

Tue_NV

    KS Võ Quang Tuệ

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

Đã gửi 14 May 2011 - 12:10 PM

Để mở 1 file Notepad (mở tường minh để edit trên nó) ta dùng hàm:
(startapp "Notepad.exe" filename)
Vậy, để mở tường minh 1 file CSV ta phải thay "Notepad.exe" bằng gì?
Bác nào biết xin chỉ giùm, cám ơn.

Có thể bằng
(command "ai_editcustfile" filename)
  • 1

#685 Doan Van Ha

Doan Van Ha

    biết lệnh adcenter

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 5447 Bài viết
Điểm đánh giá: 2624 (tuyệt vời)

Đã gửi 14 May 2011 - 12:17 PM

Có thể bằng
(command "ai_editcustfile" filename)

Chà! Có cái lệnh "ai_editcustfile" hay thế mà không biết nhỉ. Cám ơn bác rất rất nhiều nhiều!
  • 0

* Chỉ nên yêu cầu Lisp khi bạn làm việc đó mất cả ngày nhưng họ chỉ viết 1 giờ. Đừng nêu yêu cầu Lisp khi bạn chỉ làm 1 giờ nhưng bắt họ phải mất cả ngày.

* Nhờ viết lisp cũng như đi khám bệnh. Chỉ gởi căn cước và than sắp chết thì không bác sỹ nào cứu sống được.


#686 pdle

pdle

    biết lệnh mtext

  • Members
  • PipPipPipPip
  • 286 Bài viết
Điểm đánh giá: 124 (tàm tạm)

Đã gửi 16 May 2011 - 05:41 AM

Em có một thắc mắc sau:
Khi em gõ vào Commandline của AutoCAD dòng lệnh sau: (setq lst '(a (b c) d (e f)))
Kết quả trả về là: (A (B C) D (E F))

Như vậy là không có phân biệt chữ hoa và chữ thường trong AutoLisp ạ ?
  • 0
Share your knowledge. It is a way to achieve immortality !

***

PS: Nếu bài viết của mình có ích, xin hãy "Bình chọn cho bài viết này" nhé :D

#687 Tue_NV

Tue_NV

    KS Võ Quang Tuệ

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

Đã gửi 16 May 2011 - 06:01 AM

Em có một thắc mắc sau:
Khi em gõ vào Commandline của AutoCAD dòng lệnh sau: (setq lst '(a (b c) d (e f)))
Kết quả trả về là: (A (B C) D (E F))

Như vậy là không có phân biệt chữ hoa và chữ thường trong AutoLisp ạ ?

Chào buổi sáng
Bạn dậy sớm thế :rolleyes:
Về sự phân biệt chữ hoa và chữ thường thuộc kiểu SYM thì nó như nhau
(setq b '(A (B C) D (E F)))
(equal lst b ) -> Return : T
Còn kiểu STR thì nó có phân biệt chữ hoa và chữ thường đấy nhé

Chúc các bạn một buổi sáng tốt lành
  • 1

#688 pdle

pdle

    biết lệnh mtext

  • Members
  • PipPipPipPip
  • 286 Bài viết
Điểm đánh giá: 124 (tàm tạm)

Đã gửi 16 May 2011 - 01:59 PM

Chào buổi sáng
Bạn dậy sớm thế :rolleyes:
Về sự phân biệt chữ hoa và chữ thường thuộc kiểu SYM thì nó như nhau
(setq b '(A (B C) D (E F)))
(equal lst b ) -> Return : T
Còn kiểu STR thì nó có phân biệt chữ hoa và chữ thường đấy nhé

Chúc các bạn một buổi sáng tốt lành

Cảm ơn bạn và cũng chúc bạn một ngày làm việc như ý nhá! (Có điều là mình thức hơi khuya thôi, chứ không phải dậy sớm, hehe)
Mình đã nhận ra sự khác nhau giữa symbol và string như sau:
Command: (setq lst '("a" a ("c" C)))
("a" A ("c" C))

  • 0
Share your knowledge. It is a way to achieve immortality !

***

PS: Nếu bài viết của mình có ích, xin hãy "Bình chọn cho bài viết này" nhé :D

#689 pdle

pdle

    biết lệnh mtext

  • Members
  • PipPipPipPip
  • 286 Bài viết
Điểm đánh giá: 124 (tàm tạm)

Đã gửi 18 May 2011 - 04:32 AM

Cho em hỏi là ở chỗ nào nói về mấy cái hàm dạng acetxxx ko ạ? Thấy mấy anh ở đây dùng mà em tìm trong help của autocad không thấy. Chẳng hạn acet-dxf ?
  • 0
Share your knowledge. It is a way to achieve immortality !

***

PS: Nếu bài viết của mình có ích, xin hãy "Bình chọn cho bài viết này" nhé :D

#690 Doan Van Ha

Doan Van Ha

    biết lệnh adcenter

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 5447 Bài viết
Điểm đánh giá: 2624 (tuyệt vời)

Đã gửi 18 May 2011 - 06:51 AM

Cho em hỏi là ở chỗ nào nói về mấy cái hàm dạng acetxxx ko ạ? Thấy mấy anh ở đây dùng mà em tìm trong help của autocad không thấy. Chẳng hạn acet-dxf ?

Bạn mở file "acetutil.chm", trong đó có nhiều hàm Acet, nhưng không đủ.
Tặng bạn cái này, tôi mót nhiều đồng trên CADViet và tổng hợp lại nhưng chưa sắp xếp.
http://www.cadviet.c...ac_ham_acet.doc
  • 3

* Chỉ nên yêu cầu Lisp khi bạn làm việc đó mất cả ngày nhưng họ chỉ viết 1 giờ. Đừng nêu yêu cầu Lisp khi bạn chỉ làm 1 giờ nhưng bắt họ phải mất cả ngày.

* Nhờ viết lisp cũng như đi khám bệnh. Chỉ gởi căn cước và than sắp chết thì không bác sỹ nào cứu sống được.


#691 hugo007

hugo007

    biết lệnh erase

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

Đã gửi 22 May 2011 - 03:22 PM

E có 1 đoạn lisp:
(setq j11 (polar j10 0 285))
(setq j12 (polar j11 (* 0.5 Pi) 150))
(setq j13 (polar j12 Pi 150))
Theo e hiểu nó vẽ từ j10 1 đoạn 285,từ j11 vẽ 1 nửa vòng tròn có đường kính 150,từ j12 vẽ 1 đường thẳng dài 150.Nay e muốn sửa lại từ j11 vẽ 1 đường thẳng dài 200 vuông góc với điểm j11 chẳng hạn thì phải viết như thế nào.Mong sự giúp đỡ của các bác.Thanks.
  • 0

#692 Tue_NV

Tue_NV

    KS Võ Quang Tuệ

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

Đã gửi 22 May 2011 - 05:04 PM

E có 1 đoạn lisp:
(setq j11 (polar j10 0 285))
(setq j12 (polar j11 (* 0.5 Pi) 150))
(setq j13 (polar j12 Pi 150))
Theo e hiểu nó vẽ từ j10 1 đoạn 285,từ j11 vẽ 1 nửa vòng tròn có đường kính 150,từ j12 vẽ 1 đường thẳng dài 150.Nay e muốn sửa lại từ j11 vẽ 1 đường thẳng dài 200 vuông góc với điểm j11 chẳng hạn thì phải viết như thế nào.Mong sự giúp đỡ của các bác.Thanks.

Chào bạn hugo007!
1. Cái bạn đang xác định là 1 điểm từ 1 điểm cho trước với góc và khoảng cach cho trước.
  • 1

#693 hugo007

hugo007

    biết lệnh erase

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

Đã gửi 22 May 2011 - 05:18 PM

Ý mình là vẽ 1 đoạn thẳng vuông góc quay lên với điểm cuối của đoạn thẳng 285 đó.Cảm ơn bác Tue nhiều,mong bác chỉ giúp.
  • 0

#694 phamthanhbinh

phamthanhbinh

    biết lệnh adcenter

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

Đã gửi 22 May 2011 - 08:21 PM

Ý mình là vẽ 1 đoạn thẳng vuông góc quay lên với điểm cuối của đoạn thẳng 285 đó.Cảm ơn bác Tue nhiều,mong bác chỉ giúp.

Hề hề hề,
Bạn hiểu sai mất rồi.
Cái đoạn lisp này
(setq j11 (polar j10 0 285))
(setq j12 (polar j11 (* 0.5 Pi) 150))
(setq j13 (polar j12 Pi 150))
được dịch nghĩa ra như sau:
Đặt điểm J11 là điểm được lấy theo tọa độ độc cực tương đối đối với điểm J10 cách điểm J10 một khoảng là 285 theo hướng 0 độ.
Đặt điểm J12 là điểm được lấy theo tọa độ độc cực tương đối đối với điểm J11 cách điểm J11 một khoảng là 150 theo hướng 90 độ.
Đặt điểm J13 là điểm được lấy theo tọa độ độc cực tương đối đối với điểm J12 cách điểm J12 một khoảng là 150 theo hướng 180 độ.

Và như vậy là nó chả vẽ ra cái gì cả bạn ạ. Nếu bạn muốn vẽ một cái gì đó đi qua các điểm này thì cần có thêm các hàm lệnh vẽ.
Tỷ như cái yêu cầu của bạn thì sẽ phải làm như sau:
(setq j11 (polar j10 0 285))
(setq j12 (polar j11 (* 0.5 Pi) 200))
(command "line" J11 J12 "")
Bạn hãy tự suy luận tiếp nhé.
Chúc bạn vui.
  • 0
Chúc các quý Anh trên diễn đàn luôn khỏe, đẻ thêm được nhiều thứ để mót.

#695 pdle

pdle

    biết lệnh mtext

  • Members
  • PipPipPipPip
  • 286 Bài viết
Điểm đánh giá: 124 (tàm tạm)

Đã gửi 22 May 2011 - 10:19 PM

Em muốn hỏi là có cái này chạy lệnh của lisp khi đang thực thi một lệnh khác hay không ạ? Ví dụ như lệnh osnap, khi đang thực hiện một lệnh nào đó mà muốn thay đổi chế độ bắt điểm ta chỉ cần gõ 'os là hiện lên bảng osnap mà không cần thoát ra khỏi lệnh hiện hành :)
À những lệnh như vậy gọi là transparent command :D
  • 0
Share your knowledge. It is a way to achieve immortality !

***

PS: Nếu bài viết của mình có ích, xin hãy "Bình chọn cho bài viết này" nhé :D

#696 hugo007

hugo007

    biết lệnh erase

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

Đã gửi 23 May 2011 - 06:31 AM

Tỷ như cái yêu cầu của bạn thì sẽ phải làm như sau:
(setq j11 (polar j10 0 285))
(setq j12 (polar j11 (* 0.5 Pi) 200))
(command "line" J11 J12 "")
Bạn hãy tự suy luận tiếp nhé.
Chúc bạn vui.

Dạ đúng như bác nói,e đang mò mẫm về lisp nên hơi gà.Cảm ơn bác và bác Tue nhiều.
  • 0

#697 ketxu

ketxu

    Copier - Paster - Editor

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

Đã gửi 23 May 2011 - 10:00 PM

Em muốn hỏi là có cái này chạy lệnh của lisp khi đang thực thi một lệnh khác hay không ạ? Ví dụ như lệnh osnap, khi đang thực hiện một lệnh nào đó mà muốn thay đổi chế độ bắt điểm ta chỉ cần gõ 'os là hiện lên bảng osnap mà không cần thoát ra khỏi lệnh hiện hành :)
À những lệnh như vậy gọi là transparent command :D

Hỏi hay trả lời đây người đẹp ^^
- Về câu hỏi, bạn có thể định nghĩa 1 lệnh Transparent bằng hàm vlax-add-cmd với tham số flag = 1 (có trong Develop Help rồi nhé ^^).
- Có 1 lưu ý nhỏ là không dùng (command) trong transparent command nhé.Cad tránh Command inside command
Ví dụ :
(defun xoa () (entdel (car(entsel "\nChon doi tuong can xoa :"))))
(vlax-add-cmd "xoa" 'xoa "xoa" 1)

=> Ok
(defun xoa () (command "erase" (car(entsel))))
(vlax-add-cmd "xoa" 'xoa "xoa" 1)

=> Crash :)
  • 1

Thành viên nhóm CadMagic.
Mời bạn ghé thăm facebook nhóm - Page viết lisp theo yêu cầu  :
CAD MAGIC


#698 pdle

pdle

    biết lệnh mtext

  • Members
  • PipPipPipPip
  • 286 Bài viết
Điểm đánh giá: 124 (tàm tạm)

Đã gửi 24 May 2011 - 06:24 AM

Hỏi hay trả lời đây người đẹp ^^
- Về câu hỏi, bạn có thể định nghĩa 1 lệnh Transparent bằng hàm vlax-add-cmd với tham số flag = 1 (có trong Develop Help rồi nhé ^^).
- Có 1 lưu ý nhỏ là không dùng (command) trong transparent command nhé.Cad tránh Command inside command
Ví dụ :
(defun xoa () (entdel (car(entsel "\nChon doi tuong can xoa :"))))
(vlax-add-cmd "xoa" 'xoa "xoa" 1)

=> Ok
(defun xoa () (command "erase" (car(entsel))))
(vlax-add-cmd "xoa" 'xoa "xoa" 1)

=> Crash :)

Chào buổi sáng anh ketxu!

1. Tất nhiên là em hỏi rồi, nhưng khi hỏi gõ nhầm chữ, thành ra bị hiểu nhầm
2. Anh gọi là người đẹp làm em ...;;)
3. Đây là lisp của bác Tue_NV:
(defun centre(dt / cen)
(vl-load-com)
(if (or (= (cdr(assoc 0 (entget dt))) "REGION")
(and (wcmatch (cdr(assoc 0 (entget dt))) "*POLYLINE")
(= (cdr(assoc 70 (entget dt))) 1)
)
)
(if (and (wcmatch (cdr(assoc 0 (entget dt))) "*POLYLINE")
(= (cdr(assoc 70 (entget dt))) 1)
)
(Progn
(setq cen (vlax-get (car (vlax-invoke (vla-get-modelspace (vla-get-activedocument(vlax-get-acad-object)))
'addregion (list (vlax-ename->vla-object dt)))) 'Centroid))
(entdel (entlast))
)
(setq cen (vlax-get (vlax-ename->vla-object dt) 'Centroid))
)

)
cen
)
(defun c:cen() (centre (car(entsel "\n Pick chon doi tuong lay trong tam :"))))

Sao bác ấy không dùng vlax-add-cmd mà vẫn thành transparent command được ạ :s
  • 0
Share your knowledge. It is a way to achieve immortality !

***

PS: Nếu bài viết của mình có ích, xin hãy "Bình chọn cho bài viết này" nhé :D

#699 Tue_NV

Tue_NV

    KS Võ Quang Tuệ

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

Đã gửi 24 May 2011 - 08:03 AM

Chào buổi sáng anh ketxu!

1. Tất nhiên là em hỏi rồi, nhưng khi hỏi gõ nhầm chữ, thành ra bị hiểu nhầm
2. Anh gọi là người đẹp làm em ...;;)
3. Đây là lisp của bác Tue_NV:

(defun centre(dt / cen)
(vl-load-com)
(if (or (= (cdr(assoc 0 (entget dt))) "REGION")
(and (wcmatch (cdr(assoc 0 (entget dt))) "*POLYLINE")
(= (cdr(assoc 70 (entget dt))) 1)
)
)
(if (and (wcmatch (cdr(assoc 0 (entget dt))) "*POLYLINE")
(= (cdr(assoc 70 (entget dt))) 1)
)
(Progn
(setq cen (vlax-get (car (vlax-invoke (vla-get-modelspace (vla-get-activedocument(vlax-get-acad-object)))
'addregion (list (vlax-ename->vla-object dt)))) 'Centroid))
(entdel (entlast))
)
(setq cen (vlax-get (vlax-ename->vla-object dt) 'Centroid))
)

)
cen
)
(defun c:cen() (centre (car(entsel "\n Pick chon doi tuong lay trong tam :"))))

Sao bác ấy không dùng vlax-add-cmd mà vẫn thành transparent command được ạ :s

Ketxu đã thay Tue_NV giải thích cho bạn rồi đấy thôi

- Có 1 lưu ý nhỏ là không dùng (command) trong transparent command nhé.Cad tránh Command inside command


  • 0

#700 pdle

pdle

    biết lệnh mtext

  • Members
  • PipPipPipPip
  • 286 Bài viết
Điểm đánh giá: 124 (tàm tạm)

Đã gửi 24 May 2011 - 01:01 PM

3. Đây là lisp của bác Tue_NV:

(defun centre(dt / cen)
(vl-load-com)
(if (or (= (cdr(assoc 0 (entget dt))) "REGION")
(and (wcmatch (cdr(assoc 0 (entget dt))) "*POLYLINE")
(= (cdr(assoc 70 (entget dt))) 1)
)
)
(if (and (wcmatch (cdr(assoc 0 (entget dt))) "*POLYLINE")
(= (cdr(assoc 70 (entget dt))) 1)
)
(Progn
(setq cen (vlax-get (car (vlax-invoke (vla-get-modelspace (vla-get-activedocument(vlax-get-acad-object)))
'addregion (list (vlax-ename->vla-object dt)))) 'Centroid))
(entdel (entlast))
)
(setq cen (vlax-get (vlax-ename->vla-object dt) 'Centroid))
)

)
cen
)
(defun c:cen() (centre (car(entsel "\n Pick chon doi tuong lay trong tam :"))))

Sao bác ấy không dùng vlax-add-cmd mà vẫn thành transparent command được ạ :s


Em còn thắc mắc cái này nữa mà anh, anh ketxu chưa trả lời em dòng đỏ đậm mà :)
  • 0
Share your knowledge. It is a way to achieve immortality !

***

PS: Nếu bài viết của mình có ích, xin hãy "Bình chọn cho bài viết này" nhé :D