Chuyển đến nội dung
Diễn đàn CADViet
Đăng nhập để thực hiện theo  
trinhhoanghieu090

[Autolisp] Tập tành viết lisp mong các bro tư vấn

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

Dear các bro!

 

Trong lúc rảnh rỗi tập tành viết lisp, sản phẩm của em đây các bác ạ:

 

(defun c:lenn()

(or *dl* (setq *dl* 350))
(setq dl (getreal (strcat "\n Nhap chieu dai moi <"
			  (rtos *dl* 2 2)
			 "> :"
		  )
	 )
)
(if (not dl) (setq dl *dl*) (setq *dl* dl))
 (princ "Chon Day Neo Can Thay Doi Chieu Dai: ")
 (setq ss (ssget))
(command ".LENGTHEN" "T" dl ss )
)

Đây là cái lisp thay đổi chiều dài một đoạn thẳng bằng cách nhập tổng chiều dài mới vào. Mong các bro chỉ giáo chỉnh sửa chút sao cho chọn đoạn thẳng đến đâu nó thay đổi luôn chiều dài đến đó như lệnh " Lengthen" chứ không đợi mình chọn tất cả các đối tượng bấm enter nó mới thay đổi hàng loạt.

 

 

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

Sửa lại như thế này:


(defun c:lenn()
 (or *dl* (setq *dl* 350))
 (setq dl (getreal (strcat "\n Nhap chieu dai moi <"(rtos *dl* 2 2) ">: ")))
 (if (not dl) (setq dl *dl*) (setq *dl* dl))
 (while (setq ent (car (entsel "Chon Day Neo Can Thay Doi Chieu Dai: ")))
  (command ".LENGTHEN" "T" dl ent "")))
 

  • 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

Để như lệnh " Lengthen" thì chắc vậy vẫn chưa đủ, vì Lengthen nó sẽ kéo dài (rút ngắn) đầu mút nào gần điểm pick.

hề hề :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

Bác @ hieptr nói quá chuẩn đi.

Cho em hỏi các bro thêm chút xíu. Bây giờ em có một đoạn thẳng là line hoặc pline. Gọi biến ta tb là biến tọa độ 2 đầu đoạn thẳng đó. Các bác viết giúp em mấy dòng code sao cho khi chọn vào đoạn thẳng điểm gần vị trí chọn hơn là tb còn đầu còn lại là ta.

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

Bác @ hieptr nói quá chuẩn đi.

Cho em hỏi các bro thêm chút xíu. Bây giờ em có một đoạn thẳng là line hoặc pline. Gọi biến ta tb là biến tọa độ 2 đầu đoạn thẳng đó. Các bác viết giúp em mấy dòng code sao cho khi chọn vào đoạn thẳng điểm gần vị trí chọn hơn là tb còn đầu còn lại.

Giả sử bạn thử sửa lại như sau xem sao. Với lại, chịu khó thank bằng nút xanh cho tiện.

 

(defun c:lenn()
 (or *dl* (setq *dl* 350))
 (setq dl (getreal (strcat "\n Nhap chieu dai moi <"(rtos *dl* 2 2) ">: ")))
 (if (not dl) (setq dl *dl*) (setq *dl* dl))
 (command ".LENGTHEN" "T" dl))
 
  • 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

Bác @ hieptr nói quá chuẩn đi.

Cho em hỏi các bro thêm chút xíu. Bây giờ em có một đoạn thẳng là line hoặc pline. Gọi biến ta tb là biến tọa độ 2 đầu đoạn thẳng đó. Các bác viết giúp em mấy dòng code sao cho khi chọn vào đoạn thẳng điểm gần vị trí chọn hơn là tb còn đầu còn lại là ta.

Câu màu đỏ không hiểu 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

Em làm cái lisp xoay đối tượng như thế này:

(defun c:roo()

(princ "Chon Doi Tuong Can Quay: ")

(setq ss (ssget))

(setq dg (getpoint "\n Chon Diem Goc:"))

(setq dh (getpoint "\n Chon Diem Dinh Huong:"))

(command ".rotate" ss "" dg "r" dg dh )

)

 

Nếu như khi quay một đoạn thẳng là line hoặc polyline em muốn bỏ không phảichọn điểm gốc và điểm định hướng mà điểm gốc để đoạn thẳng quay quanh nó là điểm xa vị trí chọn đoạn thẳng, còn điểm định hướng là điểm gần vị trí click chuột. Bác xem hộ em tí

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

Đây!

 

(defun c:roo(/ dt ent lst p px pg)
 (vl-load-com)
 (setq dt (entsel "Chon doi tuong can quay: "))
 (setq p (cadr dt)
       ent (car dt)
       lst (mapcar 'cdr (vl-remove-if-not '(lambda(x) (or (= (car x) 10) (= (car x) 11))) (entget ent))))
 (if (> (distance p (setq px (car lst))) (distance p (setq pg (cadr lst))))
  (command ".rotate" ent "" px "r" px pg)
  (command ".rotate" ent "" pg "r" pg px)))
 
  • 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

Đăng nhập để thực hiện theo  

×