Chuyển đến nội dung
Diễn đàn CADViet
nghiactm

[Yêu cầu] lisp lấy thông tin từ bản vẽ cad

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

chào mọi người. Mình mới tham gia diễn đàn một thời gian hiện tại mình gặp vấn đề như thế này.Cần mọi người giúp.

My link

mình vẽ một đoạn thẳng trên cad và muốn lấy thông tin như trong phần khoanh tròn ở hình ảnh My link bằng lisp để xuất ra file text,sau đó từ file text dùng lệnh lấy thông tin để cad tự động vẽ lại chính cái đường thẳng mình vừa vẽ đó.

Cảm ơn mọi người nhé!

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

chào mọi người. Mình mới tham gia diễn đàn một thời gian hiện tại mình gặp vấn đề như thế này.Cần mọi người giúp.

My link

mình vẽ một đoạn thẳng trên cad và muốn lấy thông tin như trong phần khoanh tròn ở hình ảnh My link bằng lisp để xuất ra file text,sau đó từ file text dùng lệnh lấy thông tin để cad tự động vẽ lại chính cái đường thẳng mình vừa vẽ đó.

Cảm ơn mọi người nhé!

Như vậy tạo nó thành block rồi chèn lại vào nó không lành hơn à bạn? hay bạn có mục đch1 khá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

Như vậy tạo nó thành block rồi chèn lại vào nó không lành hơn à bạn? hay bạn có mục đch1 khác?

Ý mình là sẽ lấy thông tin toạ độ của từng điểm(đi từ ví dụ đơn giản là đường thẳng) để mình phục vụ cho mục đích khác.Ví dụ như mình muốn tìm tọa độ trung điểm của đường thẳng đó chẳng hạn.Hoặc khi vẽ hình chiếu của hình trụ gồm nhiều bậc có các thông tin như đường kính 50,40,30 từ đây mình có thể => chiều sâu cắt lớn nhất của chi tiết là t=10=(50-30)/2 bằng cách sử dụng trừ tọa độ của chúng.

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

Ý mình là sẽ lấy thông tin toạ độ của từng điểm(đi từ ví dụ đơn giản là đường thẳng) để mình phục vụ cho mục đích khác.Ví dụ như mình muốn tìm tọa độ trung điểm của đường thẳng đó chẳng hạn.Hoặc khi vẽ hình chiếu của hình trụ gồm nhiều bậc có các thông tin như đường kính 50,40,30 từ đây mình có thể => chiều sâu cắt lớn nhất của chi tiết là t=10=(50-30)/2 bằng cách sử dụng trừ tọa độ của chúng.

**Sau đây mình nói về cách lấy thông tin của đối tượng bằng lisp:

Giả sử rằng bạn có đối tượng (doituong) bạn có được bằng cách nào thì tùy. Muốn lấy thông tin từ nó bạn phải làm việc giống như là mở cửa bước vào trong phòng. Dùng hàm enteget:

(setq laynoidung (entget doituong))

Khi đã vào phòng thì có nhiều thứ để lấy. Mổi thông tin của đối tượng có 1 con số đại diện ví dụ điểm canh lề thứ nhất của text là số 10. Dùng hàm cdr và assoc sẽ lấy được thông tin tương ứng với con số đó.

(setq diemve (cdr (assoc 10 laynoidung)))

Mình sẽ gỏ lại bảng các số đại diện như từ điển bạn cần thông số gì thì vào tra nhé. (Một vài cái hay dùng thôi chứ nhiều lắm mình gỏ không nổi, bạn mua sách về lisp sẽ có bảng này).

 

CHUNG:

Layer của đối tượng: 8

Kiểu của đối tượng: 0

Màu của đối tượng: 62

Tên dạng đường: 6

 

TEXT:

Nội dung text: 1

Độ lớn text: 40

Style: 7

Điểm canh lề thứ nhất: 10

 

BLOCK: (INSERT) Lưu ý block thì trong từ điển của cad là đối tượng INSERT

Tên BLOCK: 2

Điểm chèn: 10

Góc quay: 50

Tỉ lệ theo trục X: 41

Tỉ lệ theo trục Y: 42

Tỉ lệ theo trục Z: 43

 

LINE:

Điểm đầu: 10

Điểm cuối: 11

 

CIRCLE:

Tọa độ tâm: 10

Bán kính: 40

 

PLINE: (LWPOLYLINE)

Độ rộng: 43

Số lượng đỉnh: 90

 

DIMENSION:

Style: 3

 

Vậy cách lấy thông tin LINE như sau:

Toạ độ điểm đầu: (setq diemdau (cdr (assoc 10 laynoidung)))

Toạ độ điểm cuối: (setq diemcuoi (cdr (assoc 11 laynoidung)))

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

**Sau đây mình nói về cách lấy thông tin của đối tượng bằng lisp:

Giả sử rằng bạn có đối tượng (doituong) bạn có được bằng cách nào thì tùy. Muốn lấy thông tin từ nó bạn phải làm việc giống như là mở cửa bước vào trong phòng. Dùng hàm enteget:

(setq laynoidung (entget doituong))

Khi đã vào phòng thì có nhiều thứ để lấy. Mổi thông tin của đối tượng có 1 con số đại diện ví dụ điểm canh lề thứ nhất của text là số 10. Dùng hàm cdr và assoc sẽ lấy được thông tin tương ứng với con số đó.

(setq diemve (cdr (assoc 10 laynoidung)))

Mình sẽ gỏ lại bảng các số đại diện như từ điển bạn cần thông số gì thì vào tra nhé. (Một vài cái hay dùng thôi chứ nhiều lắm mình gỏ không nổi, bạn mua sách về lisp sẽ có bảng này).

 

CHUNG:

Layer của đối tượng: 8

Kiểu của đối tượng: 0

Màu của đối tượng: 62

Tên dạng đường: 6

 

TEXT:

Nội dung text: 1

Độ lớn text: 40

Style: 7

Điểm canh lề thứ nhất: 10

 

BLOCK: (INSERT) Lưu ý block thì trong từ điển của cad là đối tượng INSERT

Tên BLOCK: 2

Điểm chèn: 10

Góc quay: 50

Tỉ lệ theo trục X: 41

Tỉ lệ theo trục Y: 42

Tỉ lệ theo trục Z: 43

 

LINE:

Điểm đầu: 10

Điểm cuối: 11

 

CIRCLE:

Tọa độ tâm: 10

Bán kính: 40

 

PLINE: (LWPOLYLINE)

Độ rộng: 43

Số lượng đỉnh: 90

 

DIMENSION:

Style: 3

 

Vậy cách lấy thông tin LINE như sau:

Toạ độ điểm đầu: (setq diemdau (cdr (assoc 10 laynoidung)))

Toạ độ điểm cuối: (setq diemcuoi (cdr (assoc 11 laynoidung)))

Trước hết cám ơn bạn.Nhưng mình muốn hỏi thêm một vấn đề nữa là khi mình dùng hàm assoc như trên thì mọi thông tin của chúng sẽ hiển thị trên bảng command của autocad.Vậy làm thế nào để xuất ra file .txt được.Mình không phải dân chuyên CNTT nhưng qua tìm hiểu thấy lisp có nhiều ứng dụng khá hay.Bạn có thể chia sẻ những cuốn sách(tên sách in hoặc ebook thì càng tốt)viết về lisp bạn cảm thấy hay được chứ.Thanks

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

Trước hết cám ơn bạn.Nhưng mình muốn hỏi thêm một vấn đề nữa là khi mình dùng hàm assoc như trên thì mọi thông tin của chúng sẽ hiển thị trên bảng command của autocad.Vậy làm thế nào để xuất ra file .txt được.Mình không phải dân chuyên CNTT nhưng qua tìm hiểu thấy lisp có nhiều ứng dụng khá hay.Bạn có thể chia sẻ những cuốn sách(tên sách in hoặc ebook thì càng tốt)viết về lisp bạn cảm thấy hay được chứ.Thanks

 

Xuất ra file thì bạn thử tham khảo cái này xem (theo ngu ý của mình) :

(defun c:gfi()
(setq ma (entget (car (entsel))))
(reco ma)
)
(defun reco(ob / fn fid)
(setq
	fn	(getfiled "Ten tep de xuat"  (getvar "dwgprefix") "txt" 1 )  
	fid	(open fn "w")
)
(princ (acet-dxf 0 ma) fid ) (princ "\t" fid)
(princ (acet-dxf 8 ma) fid ) (princ "\t" fid)
(princ (acet-dxf 10 ma) fid ) (princ "\t" fid)
(princ (acet-dxf 11 ma) fid ) (princ (strcat "\t" "\n") fid)
(close fid)
(princ)
)

 

P/S: Mới có gần 1 tháng không ngó ngàng tới Lisp mà giờ đã trở lại như thời chưa biết gì rồi. Nản quá :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

Trước hết cám ơn bạn.Nhưng mình muốn hỏi thêm một vấn đề nữa là khi mình dùng hàm assoc như trên thì mọi thông tin của chúng sẽ hiển thị trên bảng command của autocad.Vậy làm thế nào để xuất ra file .txt được.Mình không phải dân chuyên CNTT nhưng qua tìm hiểu thấy lisp có nhiều ứng dụng khá hay.Bạn có thể chia sẻ những cuốn sách(tên sách in hoặc ebook thì càng tốt)viết về lisp bạn cảm thấy hay được chứ.Thanks

Bạn dùng trực tiếp dữ liệu thu được cho lisp luôn chứ xuất ra txt là cái gì? Cứ sách về lisp là đc na ná nhau cả mua đại 1 cuốn. Theo cái sự nghe của mình thì trên cadviet dân chuyên CNTT không trên 2 người thì phải.

 

*Mình ví dụ cho bạn 1 đoạn chọn các line (nhiều line 1 lúc), lấy ra điểm đầu và điểm cuối (d1 và d2), vẽ hình tròn qua 2 điểm này.


(Defun c:trl ( )
(command "undo" "be")
(princ "\nPHAM QUOC DUY Binh Son - Quang ngai")
(Princ "\nHay chon LINE :")
(setq SS (ssget '((0 . "line"))))


(setq i 0)
(setq N (sslength ss))
(while (< i N)
  (setq BLENT (ssname SS i))
 (setvar "osmode" 0)
  (setq BLENTS (entget BLENT))
  (setq d1 (cdr (assoc 10 BLENTS)))
  (setq d2 (cdr (assoc 11 BLENTS)))

(command ".circle" "2p" d1 d2)

  (setq i (1+ i))

)
(command "undo" "end")
(setvar "MODEMACRO" "**CHUC BAN LAM VIEC HIEU QUA** PHAM QUOC DUY - BINH SON - QUANG NGAI")
     (Princ)
) 

  • Vote tăng 1
  • Vote giảm 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


×