Đến nội dung


Hình ảnh
- - - - -

Hỏi cách lấy dữ liệu trực tiếp từ dòng lệnh của AutoCAD!


  • Please log in to reply
18 replies to this topic

#1 doan281

doan281

    biết zoom

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

Đã gửi 22 February 2012 - 09:29 PM

Hi diễn đàn!
- Bạn tôi hỏi tôi mà tôi chưa biết làm thế nào. Rất mong anh em giúp đỡ. Vấn đề như sau:
>> Sau khi thực hiện 1 lệnh nào đó trong CAD thì thông tin được hiển thị trong dòng lệnh. Vậy, làm thế nào để có thể lấy thông tin ấy trực tiếp từ dòng lệnh của CAD (bằng AutoLISP hoặc VBA cũng được) sau đó ghi ra file *.txt.
- Vấn đề rắc rối ở chỗ: lệnh thực hiện đó không tác động lên đối tượng chuẩn của AutoCAD (như text, circle, LWPolyline...) mà tác động lên đối tượng do người dùng định nghĩa nên nó ko được hỗ trợ trong thư viện để cho VBA xử lý.
- Nếu là đối tượng hình học chuẩn của AutoCAD thì vấn đề lại trở lên đơn giản.
- Xin cảm ơn!
  • 0

#2 hochoaivandot

hochoaivandot

    biết dimradius

  • Members
  • PipPipPipPipPip
  • 310 Bài viết
Điểm đánh giá: 106 (tàm tạm)

Đã gửi 22 February 2012 - 09:36 PM

Bước 1: Bấm F2
Bước 2: Ctrl+A
Bước 3: Ctrl+C
Bước 4: Mở notepad
Bước 5: Bấm Ctrl+V
Bước 6: Save as
  • 0

Dương Bá Diệp

 

www.cadonline.duyxuyen.vn 

 

Thành viên nhóm CADMAGIC

 


#3 Doan Van Ha

Doan Van Ha

    biết lệnh adcenter

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 5447 Bài viết
Điểm đánh giá: 2624 (tuyệt vời)

Đã gửi 22 February 2012 - 09:37 PM

Hi diễn đàn!
- Bạn tôi hỏi tôi mà tôi chưa biết làm thế nào. Rất mong anh em giúp đỡ. Vấn đề như sau:
>> Sau khi thực hiện 1 lệnh nào đó trong CAD thì thông tin được hiển thị trong dòng lệnh. Vậy, làm thế nào để có thể lấy thông tin ấy trực tiếp từ dòng lệnh của CAD (bằng AutoLISP hoặc VBA cũng được) sau đó ghi ra file *.txt.
- Vấn đề rắc rối ở chỗ: lệnh thực hiện đó không tác động lên đối tượng chuẩn của AutoCAD (như text, circle, LWPolyline...) mà tác động lên đối tượng do người dùng định nghĩa nên nó ko được hỗ trợ trong thư viện để cho VBA xử lý.
- Nếu là đối tượng hình học chuẩn của AutoCAD thì vấn đề lại trở lên đơn giản.
- Xin cảm ơn!

Đọc thì thấy bạn nói khá rõ ràng, nhưng ngẫm lại thì vẫn trừu tượng sao ấy. Bạn cho 1 ví dụ đi: lệnh gì, lấy những gì để ghi ra file?
  • 0

* Chỉ nên yêu cầu Lisp khi bạn làm việc đó mất cả ngày nhưng họ chỉ viết 1 giờ. Đừng nêu yêu cầu Lisp khi bạn chỉ làm 1 giờ nhưng bắt họ phải mất cả ngày.

* Nhờ viết lisp cũng như đi khám bệnh. Chỉ gởi căn cước và than sắp chết thì không bác sỹ nào cứu sống được.


#4 doan281

doan281

    biết zoom

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

Đã gửi 22 February 2012 - 11:27 PM

Bước 1: Bấm F2
Bước 2: Ctrl+A
Bước 3: Ctrl+C
Bước 4: Mở notepad
Bước 5: Bấm Ctrl+V
Bước 6: Save as

- Xin cảm ơn câu trả lời vừa đơn giản mà hiệu quả của Mem "hochoaivandot"!
- Rất mong "hochoaivandot" bớt chút thời gian để xem xét vấn đề trên dưới góc độ Lập trình bằng AutoLISP hoặc VBA.
  • 0

#5 doan281

doan281

    biết zoom

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

Đã gửi 23 February 2012 - 12:10 AM

Đọc thì thấy bạn nói khá rõ ràng, nhưng ngẫm lại thì vẫn trừu tượng sao ấy. Bạn cho 1 ví dụ đi: lệnh gì, lấy những gì để ghi ra file?

- Xin cảm ơn Mem đã quan tâm!

- Tôi nghĩ vấn đề cũng khá rõ ràng rồi mà. Công cụ để giải quyết vấn đề này là AutoLISP or VBA nhé.

- Vấn đề là: Làm thế nào để lấy thông tin được hiển thị ở dòng lệnh?

>> Thông thường với các đối tượng hình học chuẩn của CAD (text, circle...) thì để lấy nội dung or lấy cao chữ or lấy bán kính or lấy tọa độ chèn x-y của nó ta chỉ việc tạo ra tập hợp chọn đối tượng ấy và xử lý chúng thông qua các thuộc tính của nó là ok. Sau đó ghi ra tệp txt là xong. Nghĩa là thay vì lấy trực tiếp từ dòng lệnh thì ta đã làm gián tiếp bằng việc tạo ra lệnh mới để có kết quả tương tự.

>> Nhưng với đối tượng do người dùng định nghĩa thì VBA "ko thể" tiếp cận để lấy dữ liệu được. Mà dữ liệu ấy lại được hiển thị ở dòng lệnh sau khi sử dụng lệnh do người dùng tạo ra. Vậy, có giải pháp nào để lấy dữ liệu ấy ko? Tất nhiên, là đang bàn phải lập trình.

>> Bạn tôi lấy VD cụ thể là: trong NOVA-TDN, sau khi dùng lệnh CDTN (cao độ tự nhiên) để kiểm tra cao độ của 1 điểm bất kỳ (kiểm tra bằng cách kích chọn bất kỳ) trên bình đồ thì kết quả cao độ z được hiển thị ngay trong dòng lệnh. Bây giờ, bạn ấy muốn tạo ra 1 lệnh/1 hàm có khả năng lấy cái z đó làm 1 số việc như sau: ghi z ra tệp txt chẳng hạn, tạo 1 text ghi cao độ z đó tại điểm đã kích chọn để kiểm tra cao độ...

>> Tóm lại, trong trường hợp tổng quát: để lấy thông tin từ dòng lệnh ta phải làm như thế nào?

>> Vì không cài NOVA-TDN 2005 nên tôi ko biết là liệu có thể tương tác với đối tượng Point(x, y, z) bằng VBA trong NOVA ko. Anh em nào cài thì check dùm tôi với. Đơn giản là viết 1 hàm có tác dụng: chọn 1 điểm bất kỳ sau đó hiển thị cao độ z. Nếu cao độ của nhiều điểm đều có z=0 coi như thất bại. Nếu cao độ của nhiều điểm khác 0 thì vấn đề được giải quyết. Nghĩa là ta vẫn có thể tác động đến đối tượng Point được. Lúc này, thay vì việc lấy trực tiếp z từ dòng lệnh (thông qua lệnh CDTN) thì ta có thể lấy gián tiếp thông qua việc kích chọn 1 điểm rồi lấy z của nó.

>> Hy vọng Mem đã rõ. Xin cảm ơn!
  • 0

#6 Doan Van Ha

Doan Van Ha

    biết lệnh adcenter

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 5447 Bài viết
Điểm đánh giá: 2624 (tuyệt vời)

Đã gửi 23 February 2012 - 06:47 AM

- Xin cảm ơn Mem đã quan tâm!

- Tôi nghĩ vấn đề cũng khá rõ ràng rồi mà. Công cụ để giải quyết vấn đề này là AutoLISP or VBA nhé.

- Vấn đề là: Làm thế nào để lấy thông tin được hiển thị ở dòng lệnh?

>> Thông thường với các đối tượng hình học chuẩn của CAD (text, circle...) thì để lấy nội dung or lấy cao chữ or lấy bán kính or lấy tọa độ chèn x-y của nó ta chỉ việc tạo ra tập hợp chọn đối tượng ấy và xử lý chúng thông qua các thuộc tính của nó là ok. Sau đó ghi ra tệp txt là xong. Nghĩa là thay vì lấy trực tiếp từ dòng lệnh thì ta đã làm gián tiếp bằng việc tạo ra lệnh mới để có kết quả tương tự.

>> Nhưng với đối tượng do người dùng định nghĩa thì VBA "ko thể" tiếp cận để lấy dữ liệu được. Mà dữ liệu ấy lại được hiển thị ở dòng lệnh sau khi sử dụng lệnh do người dùng tạo ra. Vậy, có giải pháp nào để lấy dữ liệu ấy ko? Tất nhiên, là đang bàn phải lập trình.

>> Bạn tôi lấy VD cụ thể là: trong NOVA-TDN, sau khi dùng lệnh CDTN (cao độ tự nhiên) để kiểm tra cao độ của 1 điểm bất kỳ (kiểm tra bằng cách kích chọn bất kỳ) trên bình đồ thì kết quả cao độ z được hiển thị ngay trong dòng lệnh. Bây giờ, bạn ấy muốn tạo ra 1 lệnh/1 hàm có khả năng lấy cái z đó làm 1 số việc như sau: ghi z ra tệp txt chẳng hạn, tạo 1 text ghi cao độ z đó tại điểm đã kích chọn để kiểm tra cao độ...

>> Tóm lại, trong trường hợp tổng quát: để lấy thông tin từ dòng lệnh ta phải làm như thế nào?

>> Vì không cài NOVA-TDN 2005 nên tôi ko biết là liệu có thể tương tác với đối tượng Point(x, y, z) bằng VBA trong NOVA ko. Anh em nào cài thì check dùm tôi với. Đơn giản là viết 1 hàm có tác dụng: chọn 1 điểm bất kỳ sau đó hiển thị cao độ z. Nếu cao độ của nhiều điểm đều có z=0 coi như thất bại. Nếu cao độ của nhiều điểm khác 0 thì vấn đề được giải quyết. Nghĩa là ta vẫn có thể tác động đến đối tượng Point được. Lúc này, thay vì việc lấy trực tiếp z từ dòng lệnh (thông qua lệnh CDTN) thì ta có thể lấy gián tiếp thông qua việc kích chọn 1 điểm rồi lấy z của nó.

>> Hy vọng Mem đã rõ. Xin cảm ơn!

Tóm lại: bây giờ bạn có muốn bấm chọn 1 điểm trên màn hình và xuất ra toạ độ Z cho bạn hay không?
  • 0

* Chỉ nên yêu cầu Lisp khi bạn làm việc đó mất cả ngày nhưng họ chỉ viết 1 giờ. Đừng nêu yêu cầu Lisp khi bạn chỉ làm 1 giờ nhưng bắt họ phải mất cả ngày.

* Nhờ viết lisp cũng như đi khám bệnh. Chỉ gởi căn cước và than sắp chết thì không bác sỹ nào cứu sống được.


#7 ketxu

ketxu

    Copier - Paster - Editor

  • Moderator
  • PipPipPipPipPipPipPip
  • 5678 Bài viết
Điểm đánh giá: 2605 (tuyệt vời)

Đã gửi 23 February 2012 - 07:50 AM

Bạn nghiên cứu 3 biến LogfileOn LogFileOff LogfilePath và các hàm xử lý string :)
  • 0

Thành viên nhóm CadMagic.
Mời bạn ghé thăm facebook nhóm - Page viết lisp theo yêu cầu  :
CAD MAGIC


#8 Detailing

Detailing

    biết lệnh imageclip

  • Members
  • PipPipPipPipPipPipPip
  • 667 Bài viết
Điểm đánh giá: 278 (khá)

Đã gửi 23 February 2012 - 07:50 AM

Tóm lại: bây giờ bạn có muốn bấm chọn 1 điểm trên màn hình và xuất ra toạ độ Z cho bạn hay không?

Bạn Doan Van Ha chưa hiểu ý của bạn doan281.
doan281 yêu cầu lấy dòng text cuối cùng (hoặc n dòng cuối cùng) trên command prompt sau khi 1 lệnh nào đó kết thúc vậy thôi, cái Z chỉ là ví dụ.
  • 0

Ideas don't matter, execution does!

1908412_308002392716743_8165279281236341


#9 doan281

doan281

    biết zoom

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

Đã gửi 23 February 2012 - 09:38 AM

Bạn Doan Van Ha chưa hiểu ý của bạn doan281.
doan281 yêu cầu lấy dòng text cuối cùng (hoặc n dòng cuối cùng) trên command prompt sau khi 1 lệnh nào đó kết thúc vậy thôi, cái Z chỉ là ví dụ.

- Vâng, đây là mong muốn của bạn tôi và tôi.
- Rất mong các Mem giúp đỡ!
- Góp ý: thông thường nếu có thể can thiệp được thuộc tính của đối tượng thì có lẽ không ai lấy thông tin từ dòng lệnh mà sẽ tạo ra 1 tập hợp chọn đối tượng rồi tham chiếu tới thuộc tính của nó. Như vậy, mục đích đạt được là như nhau. Còn lấy từ dòng lệnh thì tôi chưa biết làm thế nào?
  • 0

#10 doan281

doan281

    biết zoom

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

Đã gửi 23 February 2012 - 09:58 AM

Bạn nghiên cứu 3 biến LogfileOn LogFileOff LogfilePath và các hàm xử lý string :)

- Xin Mem nói thêm về cách sử dụng 3 cái trên được không?
  • 0

#11 Doan Van Ha

Doan Van Ha

    biết lệnh adcenter

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 5447 Bài viết
Điểm đánh giá: 2624 (tuyệt vời)

Đã gửi 23 February 2012 - 12:22 PM

- Xin Mem nói thêm về cách sử dụng 3 cái trên được không?

Đây là lisp cho bạn (để lấy các thông tin trên Text Window của bản vẽ hiện hành):

;Doan Van Ha - CADViet.com - Ngay 23-02-2012
;Muc dich: Lay thong tin cua file ban ve the hien tren text window.
(defun C:HA()
(acet-sysvar-set (list "logfilemode" 1))
(setq fnc (getvar "logfilename"))
(setq pr (open fnc "r"))
(setq fnm (getfiled "Chon File de xuat ket qua" "" "txt" 1))
(setq pw (open fnm "w"))
(while (setq dong (read-line pr))
(princ (strcat dong "\n") pw))
(close pw)
(close pr)
(acet-sysvar-set (list "logfilemode" 1))
(acet-sysvar-restore)
(princ))
P/S: sửa lúc 22h05-23/02/2012
  • 1

* Chỉ nên yêu cầu Lisp khi bạn làm việc đó mất cả ngày nhưng họ chỉ viết 1 giờ. Đừng nêu yêu cầu Lisp khi bạn chỉ làm 1 giờ nhưng bắt họ phải mất cả ngày.

* Nhờ viết lisp cũng như đi khám bệnh. Chỉ gởi căn cước và than sắp chết thì không bác sỹ nào cứu sống được.


#12 doan281

doan281

    biết zoom

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

Đã gửi 23 February 2012 - 07:11 PM

Đây là lisp cho bạn (để lấy các thông tin trên Text Window của bản vẽ hiện hành):

- Xin cảm ơn Mem Doan Van Ha rất nhiều!

- Mình ko rành về AutoLISP, rất mong Mem Doan Van Ha có thể sửa code để cho cái Notepad nó ko hiển thị lên được ko? Thay vào đó, lưu thông tin lấy được ấy vào 1 cái tệp txt nằm ở ổ C:\ chẳng hạn.

- Mong sớm nhận được hồi âm của Mod Doan Van Ha và các Mem khác.

- Xin chân thành cảm ơn!
  • 0

#13 Doan Van Ha

Doan Van Ha

    biết lệnh adcenter

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 5447 Bài viết
Điểm đánh giá: 2624 (tuyệt vời)

Đã gửi 23 February 2012 - 08:36 PM

- Xin cảm ơn Mem Doan Van Ha rất nhiều!

- Mình ko rành về AutoLISP, rất mong Mem Doan Van Ha có thể sửa code để cho cái Notepad nó ko hiển thị lên được ko? Thay vào đó, lưu thông tin lấy được ấy vào 1 cái tệp txt nằm ở ổ C:\ chẳng hạn.
- Mong sớm nhận được hồi âm của Mod Doan Van Ha và các Mem khác.
- Xin chân thành cảm ơn!

Chỉ 1 động tác "Save as" thôi mà, có gì khó lắm đâu.
  • 0

* Chỉ nên yêu cầu Lisp khi bạn làm việc đó mất cả ngày nhưng họ chỉ viết 1 giờ. Đừng nêu yêu cầu Lisp khi bạn chỉ làm 1 giờ nhưng bắt họ phải mất cả ngày.

* Nhờ viết lisp cũng như đi khám bệnh. Chỉ gởi căn cước và than sắp chết thì không bác sỹ nào cứu sống được.


#14 doan281

doan281

    biết zoom

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

Đã gửi 23 February 2012 - 09:28 PM

Chỉ 1 động tác "Save as" thôi mà, có gì khó lắm đâu.

- Nếu "thò" tay bấm Save/Save as thì lại tương tự cách làm của "hochoaivandot" à, phải ko Mem?
- Nếu Mem nhiệt tình thì giúp tôi 1 việc đó là: đừng cho hiển thị lên cái Notepad nữa mà thay vào đó lưu thông tin nhận được vào 1 biến. Việc còn lại tôi sẽ nghiên cứu tiếp.
- Xin cảm ơn Mem rất nhiều!
  • 0

#15 Doan Van Ha

Doan Van Ha

    biết lệnh adcenter

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 5447 Bài viết
Điểm đánh giá: 2624 (tuyệt vời)

Đã gửi 23 February 2012 - 09:32 PM

- Nếu "thò" tay bấm Save/Save as thì lại tương tự cách làm của "hochoaivandot" à, phải ko Mem?
- Nếu Mem nhiệt tình thì giúp tôi 1 việc đó là: đừng cho hiển thị lên cái Notepad nữa mà thay vào đó lưu thông tin nhận được vào 1 biến. Việc còn lại tôi sẽ nghiên cứu tiếp.
- Xin cảm ơn Mem rất nhiều!

Ok, tôi sẽ giúp!
P/S(22h05-23-02-2012): tôi đã sửa lisp, vẫn link cũ để đỡ tốn đất CV.
  • 0

* Chỉ nên yêu cầu Lisp khi bạn làm việc đó mất cả ngày nhưng họ chỉ viết 1 giờ. Đừng nêu yêu cầu Lisp khi bạn chỉ làm 1 giờ nhưng bắt họ phải mất cả ngày.

* Nhờ viết lisp cũng như đi khám bệnh. Chỉ gởi căn cước và than sắp chết thì không bác sỹ nào cứu sống được.


#16 ketxu

ketxu

    Copier - Paster - Editor

  • Moderator
  • PipPipPipPipPipPipPip
  • 5678 Bài viết
Điểm đánh giá: 2605 (tuyệt vời)

Đã gửi 23 February 2012 - 11:21 PM

@OP : mình gợi ý 3 biến hệ thống đó, đáng lý dù là VBA hay Lisp gì thì cũng có thể làm được chứ hè.
Bạn đã đọc nội dung ý nghĩa 3 biến đó chưa ???
  • 0

Thành viên nhóm CadMagic.
Mời bạn ghé thăm facebook nhóm - Page viết lisp theo yêu cầu  :
CAD MAGIC


#17 doan281

doan281

    biết zoom

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

Đã gửi 24 February 2012 - 08:24 AM

@OP : mình gợi ý 3 biến hệ thống đó, đáng lý dù là VBA hay Lisp gì thì cũng có thể làm được chứ hè.
Bạn đã đọc nội dung ý nghĩa 3 biến đó chưa ???

- Ghi nhận lời góp ý của Mem.
- Tôi đã xem và sẽ nghiên cứu thêm để hoàn thiện mấy vấn đề xung quanh của nó nữa.
- Xin cảm ơn Mem Doan Van Ha nhiều nhé!
  • 0

#18 doan281

doan281

    biết zoom

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

Đã gửi 24 February 2012 - 08:27 AM

Ok, tôi sẽ giúp!
P/S(22h05-23-02-2012): tôi đã sửa lisp, vẫn link cũ để đỡ tốn đất CV.

- Cảm ơn Mem nhiều nhé!
  • 0

#19 manhninhbao

manhninhbao

    Chưa sử dụng CAD

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

Đã gửi 27 February 2012 - 02:59 PM

Cảm ơn các bác nhé, nhờ các bác e cũng viết đc đoạn mã VBA cho Nova 2005 có thể tra cao độ tự nhiên sau đó điền lên 1 text hoặc Block bên cạnh rồi ! cũng có khá nhiều ứng dụng khi m lấy đc thông tin từ dòng lệnh CAD đấy các bác ạ :)
  • 0