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

nhờ giúp list tính diện tích trong cad và tự động nhập trong excel

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

chào mọi người. em thay có 1 trường hợp là em muốn kích vào đối tượng trong file cad thì cái diện tích nó nhập trong file excel luôn. tự động nhập luôn. tức là khi mình kích vào đối tượng thì số diện tích hiện trong properties thì trường hợp của em là nó tự động nhập trong file excel luôn. em có gởi hình mình họa mong các anh có thể viết dùm em cái list được không. và có thể tự động nhập khoảng lùi luôn. cảm ơn mấy anh trước

 

http://www.cadviet.com/upfiles/2/help_1.jpg

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. em thay có 1 trường hợp là em muốn kích vào đối tượng trong file cad thì cái diện tích nó nhập trong file excel luôn. tự động nhập luôn. tức là khi mình kích vào đối tượng thì số diện tích hiện trong properties thì trường hợp của em là nó tự động nhập trong file excel luôn. em có gởi hình mình họa mong các anh có thể viết dùm em cái list được không. và có thể tự động nhập khoảng lùi luôn. cảm ơn mấy anh trước

 

http://www.cadviet.com/upfiles/2/help_1.jpg

Bạn chạy thử Lisp xuất ra file CSV

sau đó dùng Excel mở file này, save as qua file *.xls

 

Cách sử dụng : tên lệnh 2CSV

lần luơt chọn :

- Text để lấy số lô

- đối tuơng để lấy Diện tích

- đối tuơng để lấy Khoảng lùi

 

lặp lại các buớc trên, nhấn Enter để kết thúc quá trình chọn.

- Chỉ ra ten file -> kết thúc.

 

(defun c:2Csv (/ chdai dtich ent1 ent2 ent3 lst solo tmp)
 (vl-load-com)  
 (while (and
   (setq ent1 (car (entsel "\nchon Text de lay So lo :")))
   (= (cdr (assoc 0 (entget ent1))) "TEXT")
   (setq solo (vlax-get(vlax-Ename->Vla-Object ent1)'TextString))	   
   (setq ent2 (car (entsel "\nchon doi tuong de lay Dien tich :"))
	 ent2 (vlax-Ename->Vla-Object ent2))
   (and (vlax-property-available-p ent2 'area)
     (setq dtich (vlax-get ent2 'Area) )  )	   
   (setq ent3 (car (entsel "\nchon doi tuong de lay Khoang lui :"))
	 ent3 (vlax-Ename->Vla-Object ent3))
   (and (vlax-property-available-p ent3 'Length)
     (setq chdai (vlax-get ent3 'Length) )  )  )
   (princ "\n")   
   (princ (setq tmp (strcat solo "," (rtos dtich) "," (rtos chdai))))
   (setq lst (append lst (list tmp)))  )  
 (if (setq tmp (getfiled "Ten file " (getvar "dwgprefix") "csv" 1))
   (progn
     (setq tmp (open tmp "a"))
     (write-line "So lo,Dien tich,Khoang lui" tmp)      
     (foreach txt lst
(write-line txt tmp)   )
     (close tmp)))
 (princ))

  • Vote tăng 5

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ột lần nữa phải công nhân gia_bach viết Lisp quá ghê

Một bài toán cụ thể và cách giải quyết cũng cụ thể

 

Tuy nhiên tại Autolisp giới hạn nên hiệu quả lisp cũng giới hạn

Giá như với đầu óc này, có một công cụ mạnh hơn

thì chắc chắc rằng gia_bach sẽ đóng góp được nhiều cho cộng đồ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

cảm ơn anh gia bach và anh trinhvqh. để em đã thử rồi. cái phần diện tích thì rất ổn nhưng mà cái phần khoảng lùi là em vận không hiểu. em kích vào đuối tượng ( có phải vẫn là đối tượng kích vào diện tích không) thì em thầy trong file excel nó hiện ra cái khoảng lùi rất lớn. như trong file em làm thì khoâng lùi trong cad là 5.9m hay là 1.02 nhưng mà trong file excel là 15.4m. em không hiểu được số 15.4 ở đâu. em nghĩ nếu làm khoảng lùi thì phải kích 2 đối tượng (1 là đường. 2 là công trình) trong file list anh viết dùm em thì chỉ kích vào đối tượng. em cũng không biết là đối tượng nào. mong anh giải tích dùm em. cảm ơn anh. và đây là hình của em

http://www.cadviet.com/upfiles/2/khoang_lui.jpg

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
cảm ơn anh gia bach và anh trinhvqh. để em đã thử rồi. cái phần diện tích thì rất ổn nhưng mà cái phần khoảng lùi là em vận không hiểu. em kích vào đuối tượng ( có phải vẫn là đối tượng kích vào diện tích không) thì em thầy trong file excel nó hiện ra cái khoảng lùi rất lớn. như trong file em làm thì khoâng lùi trong cad là 5.9m hay là 1.02 nhưng mà trong file excel là 15.4m. em không hiểu được số 15.4 ở đâu. em nghĩ nếu làm khoảng lùi thì phải kích 2 đối tượng (1 là đường. 2 là công trình) trong file list anh viết dùm em thì chỉ kích vào đối tượng. em cũng không biết là đối tượng nào. mong anh giải tích dùm em. cảm ơn anh. và đây là hình của em

http://www.cadviet.com/upfiles/2/khoang_lui.jpg

 

Em "kích thích" lộn rồi

Với khoảng lùi, em nên chọn Line

Nếu kích đối tượng Lô đất thì chắc nó hiểu là Chu vi lô đất

....

Kích lại đi, bảo đảm sẽ thích

Và nhớ là cảm ơn gia_bach nhiều vào nhé!

:undecided:

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 "kích thích" lộn rồi

Với khoảng lùi, em nên chọn Line

Nếu kích đối tượng Lô đất thì chắc nó hiểu là Chu vi lô đất

....

Kích lại đi, bảo đảm sẽ thích

Và nhớ là cảm ơn gia_bach nhiều vào nhé!

:undecided:

Hôm nay bác trinhvqh vui tính quá ! :undecided:

BTW, thanks you very nhiều :undecided:

cảm ơn anh gia bach và anh trinhvqh. để em đã thử rồi. cái phần diện tích thì rất ổn nhưng mà cái phần khoảng lùi là em vận không hiểu. em kích vào đuối tượng ( có phải vẫn là đối tượng kích vào diện tích không) thì em thầy trong file excel nó hiện ra cái khoảng lùi rất lớn. như trong file em làm thì khoâng lùi trong cad là 5.9m hay là 1.02 nhưng mà trong file excel là 15.4m. em không hiểu được số 15.4 ở đâu. em nghĩ nếu làm khoảng lùi thì phải kích 2 đối tượng (1 là đường. 2 là công trình) trong file list anh viết dùm em thì chỉ kích vào đối tượng. em cũng không biết là đối tượng nào. mong anh giải tích dùm em. cảm ơn anh. và đây là hình của em

http://www.cadviet.com/upfiles/2/khoang_lui.jpg

Click vào đối tuợng Text để lấy Số lô

Click vào đối tuợng lô đất để lấy diện tích.

Click vào đối tuợng Text để lấy Khoảng lùi.

 

Ngay từ đầu, nếu bạn đưa file CAD lên thì mọi chuyện đơn giản hơn không ?

(defun c:2Csv (/ chdai dtich ent1 ent2 ent3 lst solo tmp)
 (vl-load-com)  
 (while (and
   (setq ent1 (car (entsel "\nchon Text de lay So lo :")))
   (= (cdr (assoc 0 (entget ent1))) "TEXT")
   (setq solo (vlax-get(vlax-Ename->Vla-Object ent1)'TextString))	   
   (setq ent2 (car (entsel "\nchon doi tuong (lo dat) de lay Dien tich :"))
	 ent2 (vlax-Ename->Vla-Object ent2))
   (and (vlax-property-available-p ent2 'area)
     (setq dtich (vlax-get ent2 'Area) )  )	   
   (setq ent3 (car (entsel "\nchon Text de lay Khoang lui :")))
   (= (cdr (assoc 0 (entget ent1))) "TEXT")
   (setq chdai (vlax-get(vlax-Ename->Vla-Object ent3)'TextString) )  )
   (princ "\n")   
   (princ (setq tmp (strcat solo "," (rtos dtich) "," (rtos chdai))))
   (setq lst (append lst (list tmp)))  )  
 (if (setq tmp (getfiled "Ten file " (getvar "dwgprefix") "csv" 1))
   (progn
     (setq tmp (open tmp "a"))
     (write-line "So lo,Dien tich,Khoang lui" tmp)      
     (foreach txt lst
(write-line txt tmp)   )
     (close tmp)))
 (princ))

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
Hôm nay bác trinhvqh vui tính quá ! :undecided:

BTW, thanks you very nhiều :undecided:

 

Click vào đối tuợng Text để lấy Số lô

Click vào đối tuợng lô đất để lấy diện tích.

Click vào đối tuợng Text để lấy Khoảng lùi.

 

Ngay từ đầu, nếu bạn đưa file CAD lên thì mọi chuyện đơn giản hơn không ?

(defun c:2Csv (/ chdai dtich ent1 ent2 ent3 lst solo tmp)
 (vl-load-com)  
 (while (and
   (setq ent1 (car (entsel "\nchon Text de lay So lo :")))
   (= (cdr (assoc 0 (entget ent1))) "TEXT")
   (setq solo (vlax-get(vlax-Ename->Vla-Object ent1)'TextString))	   
   (setq ent2 (car (entsel "\nchon doi tuong (lo dat) de lay Dien tich :"))
	 ent2 (vlax-Ename->Vla-Object ent2))
   (and (vlax-property-available-p ent2 'area)
     (setq dtich (vlax-get ent2 'Area) )  )	   
   (setq ent3 (car (entsel "\nchon Text de lay Khoang lui :")))
   (= (cdr (assoc 0 (entget ent1))) "TEXT")
   (setq chdai (vlax-get(vlax-Ename->Vla-Object ent3)'TextString) )  )
   (princ "\n")   
   (princ (setq tmp (strcat solo "," (rtos dtich) "," (rtos chdai))))
   (setq lst (append lst (list tmp)))  )  
 (if (setq tmp (getfiled "Ten file " (getvar "dwgprefix") "csv" 1))
   (progn
     (setq tmp (open tmp "a"))
     (write-line "So lo,Dien tich,Khoang lui" tmp)      
     (foreach txt lst
(write-line txt tmp)   )
     (close tmp)))
 (princ))

 

Có lẽ vẫn chưa đúng yêu cầu "em nó" rồi

Khoảng lùi: Click vào Dimension (nhìn hình đoán thế)

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ấy anh em hiểu. và em cũng hiểu cái số khoảng lùi lun. cho em hỏi. nếu không có khoảng lùi thì mình bâm vào đâu để excel nó hiểu là 0 vậy

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 cả nhà.

Với tư cách là nguời có “quyền lợi và nghĩa vụ liên quan”, (dựa trên các phát biểu của các bác trong phạm vi CadViet) tui xin có vài lời cùng các bác :

 

To trinhvqh : có thể hơi quá khi nói bạn là nguời cầu toàn nghĩa là mọi thứ phải hoàn hảo nhất, hiệu quả nhất.

- Lisp giải quyết được vấn đề của người yêu cầu nhưng hiệu quả chưa Pro, Còn nhiều vấn đề phải hoàn thiện

- giải quyết vấn đề không rốt ráo

Thực tế ai ai cũng mong muốn đuợc như vậy, nhưng đó chỉ là uớc mơ thôi, thực tế thì như bạn đã biết ....

 

Bạn là 1 chuyên gia về ACA, do đó mọi thứ đều đuợc mang về hệ qui chiếu ACA :

- ACA có làm (giải quyết) đuợc không ?

- giải pháp mới có hay hơn ACA không ?

Không may là hầu hết các giải pháp bằng AutoLisp đều thiếu thuyết phục hay chưa thuyết phục đuợc bạn !

 

To Tue_NV : bạn là nguời có nhiều đam mê, nhiệt huyết với AutoLisp :

- AutoLisp thật tuyệt vời...

- khám phá hoài không hết

- tìm hiểu tới già cũng không hết được

Truớc 1 vấn đề, bạn trăn trở làm thế nào giải quyết đuợc bằng AutoLisp ? (cũng đúng thôi, vì vấn đề thuờng đặt ở mục AutoLisp) - I'm too !

 

Để giải quyết 1 bài toán, mỗi nguời tự luợng vào khả năng của mình để tự tìm ra giải pháp tốt nhất cho riêng mình. Không có 1 giải pháp chung cho tất cả mọi nguời.

Ai có súng dùng súng, ai có dao dùng dao, …

(ai có AKA dùng AKA, ai có Ô-tô dùng Ô-tô, ...)

hề hề (Copyright : phamthanhbinh)

Tui biết là AKA “bắn” rất tốt, nhưng ở nuớc tui chính phủ không cho dân dùng súng.

Tui biết là Ô-tô “chạy” thật tuyệt vời, nhưng tui chưa có bằng lái

 

Chúc mọi nguời vui vẻ và nhiệt tình đóng góp cho CadViet ngày càng phát triển hơn. :undecided:

  • Like 1
  • Vote tăng 4

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

sao em chọn Text để lấy khoảng lùi thì nó báo như vậy:

chon Text de lay Khoang lui :

; error: bad argument type: numberp: "2"

Nhờ Bác Gia Bach sửa lại 1 chút được ko ạ:

- Thứ nhất:lấy diện tích, nếu mình ko chọn đối tượng thì mình có thể ấn Enter để pick vào vùng kín để lấy diện tích được ko (cái này dùng khi lô đất của mình được vẽ bằng LINE)?

- Thứ hai:chỗ khoảng lùi mình có thể chọn TEXT hoặc DIMENSION được ko?

- Thứ ba:Gặp trường hợp lô đất nằm ngay ngã tư có đến 2 khoảng lùi thì mình có thể chọn nhiều được ko?và có trường hợp là lô đất ko có khoảng lùi nữa, thì mình cho bằng 0.

Thanks bác Gia bach đã viết nên 1 cái LISP tuyệt vời như thế!

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
sao em chọn Text để lấy khoảng lùi thì nó báo như vậy:

chon Text de lay Khoang lui :

; error: bad argument type: numberp: "2"

Nhờ Bác Gia Bach sửa lại 1 chút được ko ạ:

- Thứ nhất:lấy diện tích, nếu mình ko chọn đối tượng thì mình có thể ấn Enter để pick vào vùng kín để lấy diện tích được ko (cái này dùng khi lô đất của mình được vẽ bằng LINE)?

- Thứ hai:chỗ khoảng lùi mình có thể chọn TEXT hoặc DIMENSION được ko?

- Thứ ba:Gặp trường hợp lô đất nằm ngay ngã tư có đến 2 khoảng lùi thì mình có thể chọn nhiều được ko?và có trường hợp là lô đất ko có khoảng lùi nữa, thì mình cho bằng 0.

Thanks bác Gia bach đã viết nên 1 cái LISP tuyệt vời như thế!

Bạn thử LISP sau :

(defun c:2Csv (/ chdai dtich ent1 ent2 ent3 lst solo tmp ent21 enttype len pt)
 (vl-load-com)  
 (while (setq ent1 (car (entsel "\nchon Text de lay So lo :")))
   (and
     (= (cdr (assoc 0 (entget ent1))) "TEXT")
     (setq solo (vlax-get(vlax-Ename->Vla-Object ent1)'TextString))
     (or
(and
  (setq ent2 (car (entsel "\nchon doi tuong (lo dat) de lay Dien tich :")))
  (setq ent2 (vlax-Ename->Vla-Object ent2))
  (vlax-property-available-p ent2 'area)
  (setq dtich (vlax-get ent2 'Area)   ) )
(and
  (setq pt (getpoint "\nPick diem (lo dat) de lay Dien tich :"))
  (vl-cmdf "-bhatch" "Advanced" "Island" "No" "Nearest" "" pt "")
  (setq ent2 (entlast))
  (setq ent21 (vlax-Ename->Vla-Object ent2))
  (vlax-property-available-p ent21 'area)
  (setq dtich (vlax-get ent21 'Area)   )
  (entdel ent2)) )
     (setq chdai "")
     (while (setq ent3 (car (entsel "\nchon doi tuong de lay Khoang lui :")))
(setq enttype (cdr (assoc 0 (entget ent3))))
(cond
  ((eq enttype "TEXT") (setq len (vla-get-TextString (vlax-ename->vla-object ent3))) )
  ((eq enttype "DIMENSION") (setq len (rtos(vla-get-Measurement (vlax-ename->vla-object ent3)))) )
  (T (setq len (rtos (vlax-curve-getDistAtParam ent3 (vlax-curve-getEndParam ent3)))) ) )
(setq chdai (strcat chdai "," len))	 )

     (princ "\n")
     (princ (setq tmp (strcat solo "," (rtos dtich) chdai)))
     (setq lst (append lst (list tmp)))  ) ) 
 (if (setq tmp (getfiled "Ten file " (getvar "dwgprefix") "csv" 1))
   (progn
     (setq tmp (open tmp "a"))
     (write-line "So lo,Dien tich,Khoang lui" tmp)      
     (foreach txt lst
(write-line txt tmp)   )
     (close tmp)))
 (princ))

  • 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ạn chạy thử Lisp xuất ra file CSV

sau đó dùng Excel mở file này, save as qua file *.xls

 

Cách sử dụng : tên lệnh 2CSV

lần luơt chọn :

- Text để lấy số lô

- đối tuơng để lấy Diện tích

- đối tuơng để lấy Khoảng lùi

 

lặp lại các buớc trên, nhấn Enter để kết thúc quá trình chọn.

- Chỉ ra ten file -> kết thúc.

 

(defun c:2Csv (/ chdai dtich ent1 ent2 ent3 lst solo tmp)
 (vl-load-com)  
 (while (and
   (setq ent1 (car (entsel "\nchon Text de lay So lo :")))
   (= (cdr (assoc 0 (entget ent1))) "TEXT")
   (setq solo (vlax-get(vlax-Ename->Vla-Object ent1)'TextString))	   
   (setq ent2 (car (entsel "\nchon doi tuong de lay Dien tich :"))
	 ent2 (vlax-Ename->Vla-Object ent2))
   (and (vlax-property-available-p ent2 'area)
     (setq dtich (vlax-get ent2 'Area) )  )	   
   (setq ent3 (car (entsel "\nchon doi tuong de lay Khoang lui :"))
	 ent3 (vlax-Ename->Vla-Object ent3))
   (and (vlax-property-available-p ent3 'Length)
     (setq chdai (vlax-get ent3 'Length) )  )  )
   (princ "\n")   
   (princ (setq tmp (strcat solo "," (rtos dtich) "," (rtos chdai))))
   (setq lst (append lst (list tmp)))  )  
 (if (setq tmp (getfiled "Ten file " (getvar "dwgprefix") "csv" 1))
   (progn
     (setq tmp (open tmp "a"))
     (write-line "So lo,Dien tich,Khoang lui" tmp)      
     (foreach txt lst
(write-line txt tmp)   )
     (close tmp)))
 (princ))

anh ƠI ANH GIÚP EM CÁI NÀY ĐƯỢC KHÔNG.EM CÂN TINH DIỆN TÍCH NHƯ TRONG BẢN VẼ http://www.cadviet.com/upfiles/2/nv_kenh_my_3.dwg EM ĐÃ ĐỌC MỘT SỐ BÀI VIẾT RỒI MÀ KHÓ HIỂU QUÁ .

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ạn chạy thử Lisp xuất ra file CSV

sau đó dùng Excel mở file này, save as qua file *.xls

 

Cách sử dụng : tên lệnh 2CSV

lần luơt chọn :

- Text để lấy số lô

- đối tuơng để lấy Diện tích

- đối tuơng để lấy Khoảng lùi

 

lặp lại các buớc trên, nhấn Enter để kết thúc quá trình chọn.

- Chỉ ra ten file -> kết thúc.

 

(defun c:2Csv (/ chdai dtich ent1 ent2 ent3 lst solo tmp)  (vl-load-com)    (while (and       (setq ent1 (car (entsel "\nchon Text de lay So lo :")))       (= (cdr (assoc 0 (entget ent1))) "TEXT")       (setq solo (vlax-get(vlax-Ename->Vla-Object ent1)'TextString))              (setq ent2 (car (entsel "\nchon doi tuong de lay Dien tich :"))	     ent2 (vlax-Ename->Vla-Object ent2))       (and (vlax-property-available-p ent2 'area)         (setq dtich (vlax-get ent2 'Area) )  )              (setq ent3 (car (entsel "\nchon doi tuong de lay Khoang lui :"))	     ent3 (vlax-Ename->Vla-Object ent3))       (and (vlax-property-available-p ent3 'Length)         (setq chdai (vlax-get ent3 'Length) )  )  )    (princ "\n")   	(princ (setq tmp (strcat solo "," (rtos dtich) "," (rtos chdai))))    (setq lst (append lst (list tmp)))  )    (if (setq tmp (getfiled "Ten file " (getvar "dwgprefix") "csv" 1))    (progn      (setq tmp (open tmp "a"))      (write-line "So lo,Dien tich,Khoang lui" tmp)            (foreach txt lst	(write-line txt tmp)   )      (close tmp)))  (princ))

bác gia_bach cho em hỏi với.tại sao em dùng ap -> load 2csv.lish-> gõ lệch 2csv / enter:chọn text để lấy số lô :kích chuột trái vào dt text->chọn đt để lấy diện tích: kích chuột trái vào vùng cần tính diện tích thì trên thanh comand trở về trạng thái bình thường.help me!

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 gia_bach cho em hỏi với.tại sao em dùng ap -> load 2csv.lish-> gõ lệch 2csv / enter:chọn text để lấy số lô :kích chuột trái vào dt text->chọn đt để lấy diện tích: kích chuột trái vào vùng cần tính diện tích thì trên thanh comand trở về trạng thái bình thường.help me!

chọn đt để lấy diện tích: kích chuột trái vào vùng cần tính diện tích

Bạn sai ở cái này. Bạn phải pick vào chính đối tượng, chứ không phải pick 1 điểm bên trong đối tượ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

cảm ơn ĐVHà! nhưng mà nếu tính diện tích của các lớp (Các loại đất trong 1 trắc ngang) thì không làm được.chẳng hạn tớ kèm file dưới nhờ bạn chỉ dùm.

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

cảm ơn ĐVHà! nhưng mà nếu tính diện tích của các lớp (Các loại đất trong 1 trắc ngang) thì không làm được.chẳng hạn tớ kèm file dưới nhờ bạn chỉ dùm.

1). Mỗi lisp có mỗi chức năng khác nhau. Không có lisp vạn năng. Muốn xem nó làm được gì thì trở lại xem từ y/c của chủ topic.

2). Tôi là người ngoại đạo về chuyên môn mà bạn y/c nên không giúp được, mong thông cảm.

3). Đọc bản vẽ thì không tìm được y/c rõ ràng từ bạn.

Hy vọng có người đúng chuyên ngành giúp 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

 

Bạn chạy thử Lisp xuất ra file CSV

sau đó dùng Excel mở file này, save as qua file *.xls

 

Cách sử dụng : tên lệnh 2CSV

lần luơt chọn :

- Text để lấy số lô

- đối tuơng để lấy Diện tích

- đối tuơng để lấy Khoảng lùi

 

lặp lại các buớc trên, nhấn Enter để kết thúc quá trình chọn.

- Chỉ ra ten file -> kết thúc.

 

(defun c:2Csv (/ chdai dtich ent1 ent2 ent3 lst solo tmp)  (vl-load-com)    (while (and	   (setq ent1 (car (entsel "\nchon Text de lay So lo :")))	   (= (cdr (assoc 0 (entget ent1))) "TEXT")	   (setq solo (vlax-get(vlax-Ename->Vla-Object ent1)'TextString))	   	   (setq ent2 (car (entsel "\nchon doi tuong de lay Dien tich :"))		 ent2 (vlax-Ename->Vla-Object ent2))	   (and (vlax-property-available-p ent2 'area)	     (setq dtich (vlax-get ent2 'Area) )  )	   	   (setq ent3 (car (entsel "\nchon doi tuong de lay Khoang lui :"))		 ent3 (vlax-Ename->Vla-Object ent3))	   (and (vlax-property-available-p ent3 'Length)	     (setq chdai (vlax-get ent3 'Length) )  )  )    (princ "\n")       (princ (setq tmp (strcat solo "," (rtos dtich) "," (rtos chdai))))    (setq lst (append lst (list tmp)))  )    (if (setq tmp (getfiled "Ten file " (getvar "dwgprefix") "csv" 1))    (progn      (setq tmp (open tmp "a"))      (write-line "So lo,Dien tich,Khoang lui" tmp)            (foreach txt lst	(write-line txt tmp)   )      (close tmp)))  (princ))

Kính chào các anh trong ban quản trị diễn đàn cadviệt.com em mới tham gia diễn đàn và đọc các bài viết mọi người em thấy rất hay và bỗ ích. hiện nay trong công việc em đang làm gặp rất nhiều khó khăn và tốn thời gian xin các anh viết giúp em một cái lisp tự động tính diện tích các hình trong cad sau đó xuất sang excell. nói thì rất khó nên em đã diễn tả trong file đính kèm. trân thành cảm ơn các anh trong ban quản trị và mọi người trong dien đàn.http://www.cadviet.com/upfiles/3/126616_file_dinh_kem.rar

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
Vào lúc 26/1/2010 tại 11:31, gia_bach đã nói:

Chào cả nhà.

Với tư cách là nguời có “quyền lợi và nghĩa vụ liên quan”, (dựa trên các phát biểu của các bác trong phạm vi CadViet) tui xin có vài lời cùng các bác :

 

To trinhvqh : có thể hơi quá khi nói bạn là nguời cầu toàn nghĩa là mọi thứ phải hoàn hảo nhất, hiệu quả nhất.

- Lisp giải quyết được vấn đề của người yêu cầu nhưng hiệu quả chưa Pro, Còn nhiều vấn đề phải hoàn thiện

- giải quyết vấn đề không rốt ráo

Thực tế ai ai cũng mong muốn đuợc như vậy, nhưng đó chỉ là uớc mơ thôi, thực tế thì như bạn đã biết ....

 

Bạn là 1 chuyên gia về ACA, do đó mọi thứ đều đuợc mang về hệ qui chiếu ACA :

- ACA có làm (giải quyết) đuợc không ?

- giải pháp mới có hay hơn ACA không ?

Không may là hầu hết các giải pháp bằng AutoLisp đều thiếu thuyết phục hay chưa thuyết phục đuợc bạn !

 

To Tue_NV : bạn là nguời có nhiều đam mê, nhiệt huyết với AutoLisp :

- AutoLisp thật tuyệt vời...

- khám phá hoài không hết

- tìm hiểu tới già cũng không hết được

Truớc 1 vấn đề, bạn trăn trở làm thế nào giải quyết đuợc bằng AutoLisp ? (cũng đúng thôi, vì vấn đề thuờng đặt ở mục AutoLisp) - I'm too !

 

Để giải quyết 1 bài toán, mỗi nguời tự luợng vào khả năng của mình để tự tìm ra giải pháp tốt nhất cho riêng mình. Không có 1 giải pháp chung cho tất cả mọi nguời.

Ai có súng dùng súng, ai có dao dùng dao, …

(ai có AKA dùng AKA, ai có Ô-tô dùng Ô-tô, ...)

hề hề (Copyright : phamthanhbinh)

Tui biết là AKA “bắn” rất tốt, nhưng ở nuớc tui chính phủ không cho dân dùng súng.

Tui biết là Ô-tô “chạy” thật tuyệt vời, nhưng tui chưa có bằng lái

 

Chúc mọi nguời vui vẻ và nhiệt tình đóng góp cho CadViet ngày càng phát triển hơn. :undecided:

Chào anh Gia_bach,

Em có tìm lại được chủ để này  và lisp anh đã viết về chuyển đổi thống kê diện tích, khoảng lùi đối tượng ra file Ecxel, em có nhắn riêng cho anh nhưng không được. Vậy e có thể nhờ anh chỉnh sửa lisp dừng lại ở bước thứ 2 là đo diện tích đối tượng mà không cần bước 3 là đo khoảng lùi (chuvi).

Em cám ơn anh

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
2 giờ trước, niceEyes đã nói:

Chào anh Gia_bach,

Em có tìm lại được chủ để này  và lisp anh đã viết về chuyển đổi thống kê diện tích, khoảng lùi đối tượng ra file Ecxel, em có nhắn riêng cho anh nhưng không được. Vậy e có thể nhờ anh chỉnh sửa lisp dừng lại ở bước thứ 2 là đo diện tích đối tượng mà không cần bước 3 là đo khoảng lùi (chuvi).

Em cám ơn anh

chủ đề hơn 10 năm rồi, tạm sửa thế này nhé.

(defun c:2Csv (/ chdai dtich ent1 ent2 ent3 lst solo tmp ent21 enttype len pt)
 (vl-load-com)  
 (while (setq ent1 (car (entsel "\nchon Text de lay So lo :")))
   (and
     (= (cdr (assoc 0 (entget ent1))) "TEXT")
     (setq solo (vlax-get(vlax-Ename->Vla-Object ent1)'TextString))
     (or
(and
  (setq ent2 (car (entsel "\nchon doi tuong (lo dat) de lay Dien tich :")))
  (setq ent2 (vlax-Ename->Vla-Object ent2))
  (vlax-property-available-p ent2 'area)
  (setq dtich (vlax-get ent2 'Area)   ) )
(and
  (setq pt (getpoint "\nPick diem (lo dat) de lay Dien tich :"))
  (vl-cmdf "-bhatch" "Advanced" "Island" "No" "Nearest" "" pt "")
  (setq ent2 (entlast))
  (setq ent21 (vlax-Ename->Vla-Object ent2))
  (vlax-property-available-p ent21 'area)
  (setq dtich (vlax-get ent21 'Area)   )
  (entdel ent2)) )
     (setq chdai "")
;;;     (while (setq ent3 (car (entsel "\nchon doi tuong de lay Khoang lui :")))
;;;(setq enttype (cdr (assoc 0 (entget ent3))))
;;;(cond
;;;  ((eq enttype "TEXT") (setq len (vla-get-TextString (vlax-ename->vla-object ent3))) )
;;;  ((eq enttype "DIMENSION") (setq len (rtos(vla-get-Measurement (vlax-ename->vla-object ent3)))) )
;;;  (T (setq len (rtos (vlax-curve-getDistAtParam ent3 (vlax-curve-getEndParam ent3)))) ) )
;;;(setq chdai (strcat chdai "," len))	 )
     (princ "\n")
     (princ (setq tmp (strcat solo "," (rtos dtich) chdai)))
     (setq lst (append lst (list tmp)))  ) ) 
 (if (setq tmp (getfiled "Ten file " (getvar "dwgprefix") "csv" 1))
   (progn
     (setq tmp (open tmp "a"))
     (write-line "So lo,Dien tich,Khoang lui" tmp)      
     (foreach txt lst
(write-line txt tmp)   )
     (close tmp)))
 (princ))

 

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
Vào lúc 22/9/2021 tại 14:48, gia_bach đã nói:

chủ đề hơn 10 năm rồi, tạm sửa thế này nhé.


(defun c:2Csv (/ chdai dtich ent1 ent2 ent3 lst solo tmp ent21 enttype len pt)
 (vl-load-com)  
 (while (setq ent1 (car (entsel "\nchon Text de lay So lo :")))
   (and
     (= (cdr (assoc 0 (entget ent1))) "TEXT")
     (setq solo (vlax-get(vlax-Ename->Vla-Object ent1)'TextString))
     (or
(and
  (setq ent2 (car (entsel "\nchon doi tuong (lo dat) de lay Dien tich :")))
  (setq ent2 (vlax-Ename->Vla-Object ent2))
  (vlax-property-available-p ent2 'area)
  (setq dtich (vlax-get ent2 'Area)   ) )
(and
  (setq pt (getpoint "\nPick diem (lo dat) de lay Dien tich :"))
  (vl-cmdf "-bhatch" "Advanced" "Island" "No" "Nearest" "" pt "")
  (setq ent2 (entlast))
  (setq ent21 (vlax-Ename->Vla-Object ent2))
  (vlax-property-available-p ent21 'area)
  (setq dtich (vlax-get ent21 'Area)   )
  (entdel ent2)) )
     (setq chdai "")
;;;     (while (setq ent3 (car (entsel "\nchon doi tuong de lay Khoang lui :")))
;;(setq enttype (cdr (assoc 0 (entget ent3))))
;;(cond
;;  ((eq enttype "TEXT") (setq len (vla-get-TextString (vlax-ename->vla-object ent3))) )
;;  ((eq enttype "DIMENSION") (setq len (rtos(vla-get-Measurement (vlax-ename->vla-object ent3)))) )
;;  (T (setq len (rtos (vlax-curve-getDistAtParam ent3 (vlax-curve-getEndParam ent3)))) ) )
;;(setq chdai (strcat chdai "," len))	 )
     (princ "\n")
     (princ (setq tmp (strcat solo "," (rtos dtich) chdai)))
     (setq lst (append lst (list tmp)))  ) ) 
 (if (setq tmp (getfiled "Ten file " (getvar "dwgprefix") "csv" 1))
   (progn
     (setq tmp (open tmp "a"))
     (write-line "So lo,Dien tich,Khoang lui" tmp)      
     (foreach txt lst
(write-line txt tmp)   )
     (close tmp)))
 (princ))

 

Vâng, chủ đề 10 năm nhưng vẫn rất hữu ích ạ.

Em cảm ơn anh nhiều.

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

×