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ị

Tue_NV    3.841

Cám ơn Tuệ nhé. Lại là vla rồi :ph34r:

transparent command : Lệnh trong lệnh không cho phép dùng command anh à.

Nếu dùng được bằng Command thì em đã viết bằng Command cho anh rồi :D

  • 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
Doan Van Ha    2.676

Tôi dùng không được. Trích dẫn:

Command: (vl-load-com)

Command: l

LINE Specify first point:

Specify next point or [undo]: 'pn

nil

Point or option keyword required.

Specify next point or [undo]: '-pan >>Specify base point or displacement: 0,0,0

>> Specify second point: 500,500,0

** Requires a regen, cannot be transparent.

Resuming LINE command.

Hỏi thêm tí nữa: sao không dùng (command "pan") trong lệnh được, nhưng dùng (command "m2p") 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
Thaistreetz    515

vậy thì bác nên hỏi. "pan" và "m2p" khác nhau ở điểm gì ngoài chức năng của nó. sẽ ra câu trả lời ngay thôi

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
Tue_NV    3.841

Tôi dùng không được. Trích dẫn:

Command: (vl-load-com)

Command: l

LINE Specify first point:

Specify next point or [undo]: 'pn

nil

Point or option keyword required.

Specify next point or [undo]: '-pan >>Specify base point or displacement: 0,0,0

>> Specify second point: 500,500,0

** Requires a regen, cannot be transparent.

Resuming LINE command.

Hỏi thêm tí nữa: sao không dùng (command "pan") trong lệnh được, nhưng dùng (command "m2p") thì được?

Của mình khác với của bác :

 

Command: l

LINE Specify first point:

Specify next point or [undo]: 'pn

nil

 

Point or option keyword required.

 

Specify next point or [undo]: '-pan >>Specify base point or displacement: 0,0,0

>> Specify second point: 500,500,0

Resuming LINE command.

 

Specify next point or [undo]:

 

2./ Mtp bản chất nó là transparent command rồi. Còn PAN thì không phải transparent command đâu bác à. Muốn transparent command thì phải 'PAN

  • 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
TRUNGNGAMY    91

Kg biết vđ này đã có ai đề cập chưa. Nếu có rồi bạn nào biết chỉ giúp

Mình muốn viết một hàm tựa như foreach, tức đối số là một hàm sẽ nhận trị do hàm gọi cung cấp;

VD : (defun aaa( bbb / a) (setq a 1) (bbb a))

trong đó bbb là bất cứ hàm nào, nó sẽ sd trị của biến a để làm việc gì đó. Cám ơn các bạn

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
Tue_NV    3.841

Kg biết vđ này đã có ai đề cập chưa. Nếu có rồi bạn nào biết chỉ giúp

Mình muốn viết một hàm tựa như foreach, tức đối số là một hàm sẽ nhận trị do hàm gọi cung cấp;

VD : (defun aaa( bbb / a) (setq a 1) (bbb a))

trong đó bbb là bất cứ hàm nào, nó sẽ sd trị của biến a để làm việc gì đó. Cám ơn các bạn

Ví dụ đây bác :

(setq bbb (lambda(x) (alert (itoa x))))

(defun aaa( bbb / a) (setq a 1) (bbb a))

 

-> thử : (aaa bbb)

  • 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
hdt4151    1

Khi chọn 1 đối tượng trước đó ta hay dùng biến P, ví dụ: move p, hay copy P => thực hiện lệnh sau đó đối tượng được chọn. Nếu mình muốn đối tượng được tự động chọn trước đó (polyline khi được chọn như vậy sẽ hiện ra mấy chấm xanh ở đỉnh) rồi sau đó mới dùng lệnh copy, move thì làm thế nào ? viết lisp như hế nào ?

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

Khi chọn 1 đối tượng trước đó ta hay dùng biến P, ví dụ: move p, hay copy P => thực hiện lệnh sau đó đối tượng được chọn. Nếu mình muốn đối tượng được tự động chọn trước đó (polyline khi được chọn như vậy sẽ hiện ra mấy chấm xanh ở đỉnh) rồi sau đó mới dùng lệnh copy, move thì làm thế nào ? viết lisp như hế nào ?

Hề hề hề,

Vưỡn thế.

(command "copy" "p" ......)

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
hdt4151    1

không phải bác Bình ơi :D

 

vd thế này:

 

(setq ent (car (entsel)))

 

bây h làm sao cho đối tượng ent được chọn sẵn ở ngoài màn hình (như khi ta select vậy đó, nếu đối tượng là LINE chẳng hạn sẽ hiện lên 3 điểm màu xanh ở đầu, mid, cuối). Rồi sau đó thích copy hay move hay j j đó tuỳ ý mình (hơi giống như trong lisp tìm trọng tâm của 1 hình, kết quả cho ra 1 điểm đã đc chọn sẳn) :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
hdt4151    1

Thanks bạn :)

 

Cho mình hỏi nữa là nếu gồm nhiều đối tượng thì làm thế nào, mình thử (setq ent (ssget)) thì không đượ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
phamthanhbinh    3.123

không phải bác Bình ơi :D

 

vd thế này:

 

(setq ent (car (entsel)))

 

bây h làm sao cho đối tượng ent được chọn sẵn ở ngoài màn hình (như khi ta select vậy đó, nếu đối tượng là LINE chẳng hạn sẽ hiện lên 3 điểm màu xanh ở đầu, mid, cuối). Rồi sau đó thích copy hay move hay j j đó tuỳ ý mình (hơi giống như trong lisp tìm trọng tâm của 1 hình, kết quả cho ra 1 điểm đã đc chọn sẳn) :D

Hề hề hề,

Vậy ý bạn là muốn nó nổi griped lên hử???

(setq ent (car (entsel))

ss (ssadd ent ss))

(sssetfirst nil ss)

Bạn thử dùng như vầy xem sao. Cái nài trên diễn đàn có nói tới rồi, bạn chịu khó tìm kiếm để biết thêm nhé.

  • 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
TRUNGNGAMY    91

Cảm ơn Ha nhe,đúng là đổi lại thì được.Không hiểu tại sao nhỉ?

Nên dùng cái tên hệ thống đặt cho nó. Thay vì viết vhelven.ttf hay vhelven_0.ttf bạn hãy dùng VNI-Helve

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
duy782006    1.374

Mình đang tập tọe thằng entmake. Lập thử hàm tạo layer như sau:

 

(defun duy:t_layer (tl m lt / tl m lt)

(cond

((= m "") (setq m 7) )

((= lt "") (setq lt "Continuous") )

)

(cond

((= nill (tblsearch "layer" tl)) (entmake (list (cons 0 "LAYER")(cons 100 "AcDbSymbolTableRecord")(cons 100 "AcDbLayerTableRecord")(cons 2 tl)(cons 70 0)(cons 62 m)(cons 6 lt))) )

((/= nill (tblsearch "layer" tl)) (princ (strcat "\nLayer < " tl " > da ton tai trong ban ve!"))))

)

(princ)

 

 

Test thử như sau:

(duy:t_layer "duy1" 20 "")

Thì được nghĩa là Linetype nếu nhập "" thì tự nhận thành Continuous được

 

Nhưng dòng:

(duy:t_layer "duy2" "" "")

Thì lổi nghĩa là giá trị color không tự nhận thành 7 được. Các bác đi trước hướng dẩn mình chút. Cám ơn!

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
ketxu    2.652

Vấn đề ở việc bác dùng hàm Cond. hàm này đi từ trên xuống dưới, cái nào condition trả về khác Nil thì nó làm, k làm tiếp thằng sau bác ạ

  • 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
Thaistreetz    515

Có cách nào để lấy ra được danh sách của toàn bộ biến toàn cục có giá trị khác nil tồn tại trong bản vẽ không nhỉ?

  • 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
ketxu    2.652

A thử xem sao :

(vl-remove-if '(lambda(x)(vl-position (type (eval x)) (list 'EXRXSUBR 'SUBR 'nil))) (atoms-family 0))

  • 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
hdt4151    1

Cho mình hỏi cái này với, về dấu "

Muốn ghi vào file f dòng chữ acb" thì phải viết code thế nào ?

 

Mình thử các trường hợp này đều bị lỗi :(

 

(write-line "abc" f)

(write-line "abc"" f)

(write-line "abc""" f)

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

Cho mình hỏi cái này với, về dấu "

Muốn ghi vào file f dòng chữ acb" thì phải viết code thế nào ?

 

Mình thử các trường hợp này đều bị lỗi :(

 

(write-line "abc" f)

(write-line "abc"" f)

(write-line "abc""" f)

Hề hề hề,

Theo cái sự mót của mình thì dòng code đầu tiên là đúng cú pháp.

Tuy nhiên bạn cần lưu ý như sau:

1/- f phải là một biến biểu thị file bạn muốn ghi vào đã được mở ra. Thường thì người ta dùng (setq f (open filename "W")) trong đó filename là cái tên của file bạn cần ghi vào và tham số "w" để biểu thị rằng file bạn mở được phép ghi vào.

2/- Sau ghi ghi vào rồi thì kết quả chỉ có thể được hiển thị khi bạn đóng file lại (tức là bạn chấp nhận save sự thay đổi này lại) bằng hàm (close f)

 

Hy vọng bạn sẽ thành công.

  • 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
Thaistreetz    515

Ký tự " là 1 ký tự được bảo vệ trong ngôn ngữ lisp. nó có chức năng đánh dấu điểm đầu và điểm cuối của 1 chuỗi. bởi vậy để đưa ký tự này vào chuỗi thì bạn phải dùng 1 ký tự \ đi kèm với nó để định nghĩa nó là chuỗi.

dòng code bạn cần viết là (write-line "abc\"" f)

  • 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
duy782006    1.374

Bổ sung luôn cho bạn hdt4151 là ký tự chấm phẩy, ngoặc đơn và xuyệt cũng tương tự

  • 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

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


×