Chuyển đến nội dung
Diễn đàn CADViet
  • Thông báo

    • Nguyen Hoanh

      CADViet đã hoàn tất nâng cấp   14/09/2017

      Chào các bạn, CADViet đã hoàn tất việc nâng cấp lên phiên bản mới. Tất cả các chức năng đã hoạt động theo kỳ vọng của ban quản trị. Nếu có vấn đề gì cần phản hồi, các bản post ở đây nhé: Trân trọng, Nguyễn Hoành.
Jin Yong

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

Các bài được khuyến nghị

nhoclangbat    382

- hi giờ thì nhoc đã pit tại sao rùi, kq biến trả ra là 1 chuyện còn lúc cad nó tính thì lại là chiện khác ^^, thằng tọa độ này nguy hiểm phết nhỉ

- hàm anh Duan nhoc đành mót để dành, nhưng nó có nhiều hàm vl quá nhoc chưa phân tích nổi để hình dung nắm rõ đc nó áp dụng vào lsp nhoc, nên nhoc chọn cách xử thằng pick trước, còn chiêu anh chỉ để thong thả lên tay áp dụng sau ^^

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
hiepttr    523

@ Thanhduan2407:

Bác cho hỏi trong hàm của bác ở #1949 có đưa biến loop, hàm cond vào để làm gì ?

 

p/s: chỉ là câu hỏi thắc mắc để mót, bác đừng hiểu nhầm ý em nha !

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
Namvanvo    42

 Các bạn cho mình hỏi : 2 lệnh này thực hiện trực tiếp trên command cad thì chạy bình thường , nhưng khi nằm trong chương trình lisp thì chạy xong lệnh pline thì không chạy lệnh revcloud?

(command ".pline" pause)
(command ".revcloud" "A" "5" "" "O" (entlast) "")

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
Tot77    501

Bạn phải thêm cái này vào giữa 2 cái đó.

 

(while (= 1 (logand 1 (getvar 'cmdactive)))
        (command "\\")
)
(while (= 1 (logand 1 (getvar 'cmdactive)))
        (command "\\")
)
  • Vote tăng 3

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
Namvanvo    42

Dear HiepTtr: biết lỗi lệnh PL, cụ thể là chỗ pause nhưng không biết cách khắc phục sao cả  :wacko:

 

 

Bạn phải thêm cái này vào giữa 2 cái đó.

 

(while (= 1 (logand 1 (getvar 'cmdactive)))
        (command "\\")
)
(while (= 1 (logand 1 (getvar 'cmdactive)))
        (command "\\")
)

Thank Tot77, đã dùng ok, mặc dù không hiểu code này lắm  :)

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
Tot77    501

Cái này là của LM chứ không phải của tôi.  :D  :D  :D

logand cũng giống and thôi nhưng mà là and của các integer.

Câu trên ý nói là hễ còn thực hiện lệnh (cmdactive = 1) thì cứ làm cái (command "\\")

(command "\\") cũng giống như (command pause) thôi.

  • Vote tăng 1

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
hiepttr    523

Cái này là của LM chứ không phải của tôi.  :D  :D  :D

logand cũng giống and thôi nhưng mà là and của các integer.

Câu trên ý nói là hễ còn thực hiện lệnh (cmdactive = 1) thì cứ làm cái (command "\\")

(command "\\") cũng giống như (command pause) thôi.

Thì trong help vẫn ghi sơ sơ vậy, mình đọc mà chẳng hiểu gì :D :D :D

and của các integer phải hiểu làm sao đây ???

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
phamthanhbinh    3.123

lại 1 cao thủ nữa xài em Logan , bác Tot77 có thể nói sơ về hàm đo cho mình mót tí đc chứ ạh !

Hề hề hề,

Nói kỹ thì khó chứ còn nói sơ sơ thì đây nè:

Returns the result of the logical bitwise AND of a list of integers

(logand [int int...])

Arguments

int

An integer.

Return Values

An integer (0, if no arguments are supplied).

Examples

Command: (logand 7 15 3)

3

Command: (logand 2 3 15)

2

Command: (logand 8 3 4)

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
hiepttr    523

Cái này là bác "thay lời Cad nói" đấy chứ bác Bình :D :D :D

Em đọc đi đọc lại cái đó rồi mà vẫn còn vướng hơn gà mắc tóc đây nè ^^

:D :D :D

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
Doan Van Ha    2.676

Để dễ hình dung tôi lấy trường hợp hàm logand với 2 tham số mà hôm qua và hôm nay bạn hỏi.

VD: hàm (getvar "osmode") trả về bit-code của các cài đặt osnap.

Chẳng hạn, với "end" thì bit-code=1, "mid" thì bit-code=2, "cen" thì bit-code=4.

Nếu bạn setting cho osnap cả 3 tùy chọn này thì bit-code sẽ là 7 (7=1+2+4). Bit-code có tính chất "cộng".

Để kiểm tra osnap có setting "mid" hay không, bạn sử dụng hàm (= 2 (logand 2 (getvar "osmode"))), chú ý con số 2 là của "mid".

Hy vọng có hiểu!

  • Vote tăng 1

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
Tot77    501

Nôm na là thế này.

(and 1 0) -> T ;; and trả vê T hoặc nil ; cứ có 1 cái nil thì and là nil

(logand 1 0) -> 0 ;; logand trả về interger

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
hiepttr    523

có thể hiểu thế này ko ah !

1. các tham số đầu vào được phân tích thành tổng của các số dạng 2^n

2. Lấy phần giao (and) của các só hạng con đó

 

???

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
Tot77    501

Lấy thí dụ như (logand 7 15 3)

7 viết theo dang nhị phân là        0111

15  viết theo dang nhị phân là     1111

3  viết theo dang nhị phân là       0011

Cộng theo cột cứ cái nào có 0 thì = 0, ta có tổng của 3 cái trên là 0011 = 3

  • Vote tăng 1

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
phamthanhbinh    3.123

Thì trong help vẫn ghi sơ sơ vậy, mình đọc mà chẳng hiểu gì :D :D :D

and của các integer phải hiểu làm sao đây ???

 

Hề hề hề ,

Nếu muốn kỹ hơn tí nữa thì bác hieptr có thể vào đây:

http://en.wikipedia.org/wiki/Bitwise_operation

 

Còn nói nôm na theo kiểu học mót của mình thì hàm này được hiểu như sau"

1/- Đổi các integer từ hệ cơ số 10 thành hệ cơ số 2.

2/- lập hàm and với các ký tự này theo cột dọc

3/- Đổi kết quả từ cơ số 2 sang cơ số 10.

Cụ thể như ví dụ của CAD:

(logand 7 15 3) =

7 =   0111

15=  1111

3=    0011

KG= 0011

Đổi sang cơ số 10 : 0011= 1*2^0 + 1*2^1 = 3

 

Hề hề hề.

  • Vote tăng 1

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
hiepttr    523

Mình đã đc cái này:

"You have reached your quota of positive votes for the day"

Nên đành võ mồm vậy !

Cảm ơn các bác đã gỡ rối ! Vậy là cách hiểu theo kiểu "cục gạch" của mình cũng có thể cho ra kết quả đúng rồi đó ạh !

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
Tot77    501

Do LM viết theo kiểu "bác học" quá nên nhìn nó hoa cả mắt. chứ câu trên có thể viết gọn ltheo kiểu "dân dã" là:

(while (= 1 (getvar 'cmdactive))  (command pause))

 

Ở cái pause đầu tiên (tương đương với cái nhấp chọn điểm đầu tiên) thì dòng (command "pline" pause) đã chấm dứt. nhưng lệnh pline vẫn chưa dứt, khi đó lsp sẽ ngưng ở đó va lệnh pline của cad chiếm quyền điều khiển luôn.

Do dó câu sau "revcloud" không thực hiện dc là vì vậy.

  • Vote tăng 1

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
nhoclangbat    382

- mấy anh cho nhoc hỏi xíu ^^, nhoc mún vẽ mũi tên = pline mà dùng entmake thì làm cách nào đc nhỉ, nhoc mót đc hàm tạo = entmake rùi,  nhưng nhoc ko biết đưa tham số độ rộng vô cách nào,nhoc chỉ biết đc mã 40 là bắt đầu, 41 là kết thúc

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
nhoclangbat    382

- nhoc thử rùi mà không hiểu, hàm entmake nhoc mót đc các điểm là tham số dạng lstpoint, nhoc thử tách ra thành từng điểm nhưng mà khi xài nó chỉ trả ra ename ^^

(defun vemuiten (pt1 pt2 pt3 closed Layer Linetype LTScale xdata w / Lst)
	(setq Lst (list '(0 . "LWPOLYLINE")'(100 . "AcDbEntity")
	(cons 8 (if Layer Layer (getvar "Clayer")))
	(cons 6 (if Linetype Linetype "bylayer"))
	(cons 48 (if LTScale LTScale 1))
	'(100 . "AcDbPolyline")
	(cons 90 (length listpoint))
	(cons 70 (if closed 1 0))
	(cons 10 pt1)
	(cons 40 0.0)
	(cons 41 w)
	(cons 42 0.0)
	(cons 91 0)
	(cons 10 pt2)
	(cons 40 0.0)
	(cons 41 0.0)
	(cons 42 0.0)
	(cons 91 0)
	(cons 10 pt3)
	(cons 40 0.0)
	(cons 41 0.0)
	(cons 42 0.0)
	(cons 91 0)))
	(if xdata (setq Lst (append lst (list (cons -3 (list xdata))))))
	(entmakex Lst))

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
phamthanhbinh    3.123

- mấy anh cho nhoc hỏi xíu ^^, nhoc mún vẽ mũi tên = pline mà dùng entmake thì làm cách nào đc nhỉ, nhoc mót đc hàm tạo = entmake rùi,  nhưng nhoc ko biết đưa tham số độ rộng vô cách nào,nhoc chỉ biết đc mã 40 là bắt đầu, 41 là kết thúc

Hề hề hề,

Nhóc thử tham khảo cái ni coi sao hè???

 

(entmake '((0 . "LWPOLYLINE")  (100 . "AcDbEntity") (67 . 0)  (8 . "0") (100 . "AcDbPolyline") (90 . 4) (70 . 0) (38 . 0.0) (39 . 0.0) (10 14.6683 14.0925 ) (40 . 0.0) (41 . 0.0) (42 . 0.0) (10 14.6683 14.0925 )(40 . 0.0) (41 . 3.0) (42 . 0.0) (10 19.6683 14.0925 ) (40 . 1.0) (41 . 1.0) (42 . 0.0) (10 24.6683 14.0925 ) (40 . 1.0) (41 . 1.0) (42 . 0.0) (210 0.0 0.0 1.0)))

(entmake '((0 . "LWPOLYLINE")  (100 . "AcDbEntity") (67 . 0)  (8 . "0") (100 . "AcDbPolyline") (90 . 4) (70 . 0) (38 . 0.0) (39 . 
0.0) (10 14.6683 14.0925 ) (40 . 0.0) (41 . 0.0) (42 . 0.0) (10 14.6683 14.0925 )
(40 . 0.0) (41 . 3.0) (42 . 0.0) (10 19.6683 14.0925 ) (40 . 1.0) (41 . 1.0) (42 
. 0.0) (10 24.6683 14.0925 ) (40 . 1.0) (41 . 1.0) (42 . 0.0) (210 0.0 0.0 1.0)))
(entmake '((0 . "LWPOLYLINE")  (100 . "AcDbEntity") (67 . 0)  (8 . "0") (100 . "AcDbPolyline") (90 . 4) (70 . 0) (38 . 0.0) (39 . 
0.0) (10 14.6683 14.0925 ) (40 . 0.0) (41 . 0.0) (42 . 0.0) (10 14.6683 14.0925 )
(40 . 0.0) (41 . 3.0) (42 . 0.0) (10 19.6683 14.0925 ) (40 . 1.0) (41 . 1.0) (42 
. 0.0) (10 24.6683 14.0925 ) (40 . 1.0) (41 . 1.0) (42 . 0.0) (210 0.0 0.0 1.0)))
  • Vote tăng 1

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
nhoclangbat    382

- thank a 7 nhoc quên phén thằng 90 ^^

- thank a Bình ,hi cái mũi tên a Bình vẽ to quá ^^, mà hình như dư 1 điểm đầu thì phải a nhỉ  :P , hàm của anh Bình chuyền tham số đỡ nhọc hơn hàm của nhoc mót nhỉ

- thằng 42, 91 nó là gì mấy a nhỉ, nhoc xem trong help mà chưa hiểu, còn cái xdata trong hàm mót của nhoc nhoc cũng ko hiểu nó là gi

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

Tạo một tài khoản hoặc đăng nhập để nhận xét

Bạn cần phải là một thành viên để lại một bình luận

Tạo tài khoản

Đăng ký một tài khoản mới trong cộng đồng của chúng tôi. Điều đó dễ mà.

Đăng ký tài khoản mới

Đăng nhập

Bạn có sẵn sàng để tạo một tài khoản ? Đăng nhập tại đây.

Đăng nhập ngay


×