Đến nội dung


Hình ảnh
- - - - -

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


  • Please log in to reply
6 replies to this topic

#1 nghiactm

nghiactm

    Chưa sử dụng CAD

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

Đã gửi 07 July 2011 - 10:13 PM

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é!
  • 0

#2 duy782006

duy782006

    PHẠM QUỐC DUY

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 2155 Bài viết
Điểm đánh giá: 1360 (rất tốt)

Đã gửi 08 July 2011 - 08:01 AM

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?
  • 0

Cứ ngỡ trần gian là cõi thật.Cho nên tất bật đến bây giờ.
Tạo hộp thoại bằng lisp My blog QUY ĐỊNH ĐẶT TÊN TOPIC TRONG CHUYÊN MỤC LISPD http://ktsduy.wordpress.com/
Để cám ơn chỉ cần nhấn rep_up.png
(Là nhấn vào nút đó phía bài viết của người ta í chứ đừng có nhè cái hình này mà nhấn miết đi nha :-D


#3 nghiactm

nghiactm

    Chưa sử dụng CAD

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

Đã gửi 08 July 2011 - 02:29 PM

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.
  • 0

#4 duy782006

duy782006

    PHẠM QUỐC DUY

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 2155 Bài viết
Điểm đánh giá: 1360 (rất tốt)

Đã gửi 08 July 2011 - 03:04 PM

Ý 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)))
  • 0

Cứ ngỡ trần gian là cõi thật.Cho nên tất bật đến bây giờ.
Tạo hộp thoại bằng lisp My blog QUY ĐỊNH ĐẶT TÊN TOPIC TRONG CHUYÊN MỤC LISPD http://ktsduy.wordpress.com/
Để cám ơn chỉ cần nhấn rep_up.png
(Là nhấn vào nút đó phía bài viết của người ta í chứ đừng có nhè cái hình này mà nhấn miết đi nha :-D


#5 nghiactm

nghiactm

    Chưa sử dụng CAD

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

Đã gửi 09 July 2011 - 01:09 AM

**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
  • 0

#6 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 09 July 2011 - 05:10 AM

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

#7 duy782006

duy782006

    PHẠM QUỐC DUY

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 2155 Bài viết
Điểm đánh giá: 1360 (rất tốt)

Đã gửi 09 July 2011 - 07:09 AM

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)
)

  • 0

Cứ ngỡ trần gian là cõi thật.Cho nên tất bật đến bây giờ.
Tạo hộp thoại bằng lisp My blog QUY ĐỊNH ĐẶT TÊN TOPIC TRONG CHUYÊN MỤC LISPD http://ktsduy.wordpress.com/
Để cám ơn chỉ cần nhấn rep_up.png
(Là nhấn vào nút đó phía bài viết của người ta í chứ đừng có nhè cái hình này mà nhấn miết đi nha :-D